DetailController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace addons\Agent\backend\controllers;
  3. use addons\Agent\common\models\AgentLevel;
  4. use common\enums\StatusEnum;
  5. use common\helpers\csv\CsvExportHelper;
  6. use Yii;
  7. use addons\Agent\common\models\Agent;
  8. use addons\Agent\common\models\AgentCommissionDetails;
  9. use common\models\user\User;
  10. use common\enums\DownloadEnum;
  11. use common\enums\OrderStatusEnum;
  12. use common\models\order\Order;
  13. use common\models\order\OrderDetail;
  14. /**
  15. * 默认控制器
  16. *
  17. * Class DetailController
  18. * @package addons\Agent\backend\controllers
  19. */
  20. class DetailController extends BaseController
  21. {
  22. public $from_type = ['Agent'];
  23. public $enableCsrfValidation = false;
  24. /**
  25. * @Description: 分佣明细列表
  26. * @Author: zsan
  27. * @DateTime 2023-04-28 14:38:33
  28. * @return \yii\web\Response
  29. */
  30. public function actionIndex()
  31. {
  32. if (\Yii::$app->request->isAjax) {
  33. if (\Yii::$app->request->isGet) {
  34. $get = \Yii::$app->request->get();
  35. $get['mall_id'] = $this->mall_id;
  36. $params = [];
  37. $user_id_arr = [];
  38. if (isset($get['level']) && !empty($get['level'])){
  39. $params['where'][] = ['=', 'level', $get['level']];
  40. }else{
  41. $params['where'][] = ['>', 'level', 0];
  42. }
  43. if (!empty($get['keyword'])) {
  44. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  45. 'or',
  46. ['like', 'nickname', $get['keyword']],
  47. ['like', 'mobile', $get['keyword']],
  48. ['id' => $get['keyword']]
  49. ]], 'select' => 'id']);
  50. $user_ids = array_column($user_list, 'id');
  51. if (!empty($user_id_arr)) {
  52. $user_id_arr = array_intersect($user_id_arr, $user_ids);
  53. } else {
  54. $user_id_arr = $user_ids;
  55. }
  56. $params['where'][] = ['in', 'user_id', $user_id_arr];
  57. }
  58. /** @var \addons\DouyinCps\common\models\DouyinCpsOrder $douyin_cps_class */
  59. $douyin_cps_class = \addons\DouyinCps\common\models\DouyinCpsOrder::class;
  60. if ($get['order_no']) {
  61. if(strpos($get['order_no'],'DYC') === false){
  62. $order_list = Order::lists([
  63. 'where' => [
  64. ['mall_id' => $get['mall_id']],
  65. ['like', 'order_no', $get['order_no']]
  66. ],
  67. 'select' => 'id'
  68. ]);
  69. }else{
  70. $order_list = $douyin_cps_class::lists([
  71. 'where' => [
  72. ['mall_id' => $get['mall_id']],
  73. ['like', 'order_no', $get['order_no']]
  74. ],
  75. 'select' => 'id'
  76. ]);
  77. }
  78. $params['where'][] = ['order_id' => array_column($order_list, 'id') ?? []];
  79. }
  80. if ($get['date_start']) $params['where'][] = ['>=', 'created_at', strtotime($get['date_start'])];
  81. if ($get['date_end']) $params['where'][] = ['<=', 'created_at', strtotime($get['date_end'])];
  82. $params['where'][] = ['=', 'mall_id', $this->mall_id];
  83. $params['where'][] = ['in', 'status', [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  84. $params['limit'] = 10;
  85. $params['order'] = 'id DESC';
  86. $pageData = AgentCommissionDetails::listPage($params, false);
  87. if ($pageData === false) return $this->error(AgentCommissionDetails::getStaticError());
  88. if (!empty($pageData['list'])) {
  89. $user_id_arr = array_column($pageData['list'], 'user_id');
  90. $user_list = $user_list = User::lists(['where' => [['id' => $user_id_arr]], 'select' => 'id,nickname,avatar_url,mobile,parent_id']);
  91. $user_arr = [];
  92. foreach ($user_list as $item) {
  93. $user_arr[$item['id']] = $item;
  94. }
  95. $order_arr = [];
  96. $douyin_cps_order_arr = [];
  97. foreach($pageData['list'] as $item) {
  98. if($item['order_source'] == 'order'){
  99. $order_arr[] = $item['order_id'];
  100. }elseif ($item['order_source'] == $douyin_cps_class::tableName()){
  101. $douyin_cps_order_arr[] = $item['order_id'];
  102. }
  103. }
  104. $order_list = [];
  105. $order_details_list = [];
  106. if(!empty($order_arr)){
  107. $order_list = Order::lists([
  108. 'where' => [
  109. ['mall_id' => $get['mall_id']],
  110. ['id' => $order_arr]
  111. ],
  112. 'select' => 'id,order_status,order_no',
  113. 'index' => 'id'
  114. ]);
  115. $order_details_list = OrderDetail::lists([
  116. 'where' => [
  117. ['mall_id' => $get['mall_id']],
  118. ['order_id' => $order_arr],
  119. ],
  120. 'select' => 'order_id,goods_name,pic_url',
  121. 'index' => 'order_id'
  122. ]);
  123. }
  124. $douyin_cps_order_list = [];
  125. if(!empty($douyin_cps_order_arr)){
  126. $douyin_cps_order_list = $douyin_cps_class::lists([
  127. 'where' => [
  128. ['mall_id' => $get['mall_id']],
  129. ['id' => $douyin_cps_order_arr]
  130. ],
  131. 'select' => 'id,order_no,goods_name,cover_pic AS pic_url',
  132. 'index' => 'id'
  133. ]);
  134. }
  135. $order_status_map = OrderStatusEnum::getMap();
  136. foreach ($pageData['list'] as &$v) {
  137. $v['nickname'] = $v['avatar_url'] = $v['mobile'] = '';
  138. if (isset($user_arr[$v['user_id']])) {
  139. $v['mobile'] = $user_arr[$v['user_id']]['mobile'];
  140. $v['nickname'] = $user_arr[$v['user_id']]['nickname'];
  141. $v['avatar_url'] = $user_arr[$v['user_id']]['avatar_url'];
  142. }
  143. $v['pic_url'] = $v['goods_name'] = '';
  144. $v['order_status_text'] = '--';
  145. if($v['order_source'] == 'order'){
  146. if (array_key_exists($v['order_id'], $order_details_list)) {
  147. $v['pic_url'] = $order_details_list[$v['order_id']]['pic_url'];
  148. $v['goods_name'] = $order_details_list[$v['order_id']]['goods_name'];
  149. $v['order_no'] = $order_list[$v['order_id']]['order_no'] ?? '';
  150. $v['order_status_text'] = $order_status_map[$order_list[$v['order_id']]['order_status']] ?? '';
  151. }
  152. }elseif ($v['order_source'] == $douyin_cps_class::tableName()){
  153. if (array_key_exists($v['order_id'], $douyin_cps_order_list)) {
  154. $v['pic_url'] = $douyin_cps_order_list[$v['order_id']]['pic_url'];
  155. $v['goods_name'] = $douyin_cps_order_list[$v['order_id']]['goods_name'];
  156. $v['order_no'] = $douyin_cps_order_list[$v['order_id']]['order_no'] ?? '';
  157. }
  158. }
  159. }
  160. unset($v);
  161. }
  162. $args = [];
  163. $args['where'] = [['mall_id' => $this->mall_id], ['<>', 'status', StatusEnum::DELETE]];
  164. $args['select'] = 'id,level,name';
  165. $args['order'] = 'level asc';
  166. $level_list = AgentLevel::lists($args, true);
  167. if (empty($level_list)) $level_list = [['id' => 0, 'level' => 0, 'name' => '默认等级']];
  168. $pageData['agentLevelList'] = $level_list;
  169. $pageData['export_list'] = AgentCommissionDetails::exportFieldsList();
  170. return $this->success('操作成功', $pageData);
  171. }
  172. }
  173. if (\Yii::$app->request->post('flag') == 'EXPORT') {
  174. $post = \Yii::$app->request->post();
  175. $post['mall_id'] = $this->mall_id;
  176. $filename = '经销商列表-' . date('YmdHis') . '_' . rand(10000, 99999);
  177. $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_AGENT, AgentCommissionDetails::class, 'exportHandle', $post);
  178. if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError());
  179. return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
  180. }
  181. return $this->render($this->action->id, []);
  182. }
  183. }