MerchantController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace addons\HiGo\backend\controllers;
  3. use addons\HiGo\common\models\HigoMall;
  4. use addons\HiGo\common\models\HigoMerchantRewardLog;
  5. use addons\Store\common\models\StoreCate;
  6. use addons\Store\common\services\MerchantReduceProfitService;
  7. use common\enums\AddonsEnum;
  8. use common\enums\StatusEnum;
  9. use common\models\mall\MallAddons;
  10. use common\models\order\Order;
  11. use common\models\user\User;
  12. use Yii;
  13. /**
  14. * 默认控制器
  15. *
  16. * Class MerchantController
  17. * @package addons\HiGo\backend\controllers
  18. */
  19. class MerchantController extends BaseController
  20. {
  21. /**
  22. * 首页
  23. *
  24. * @return string
  25. */
  26. public function actionIndex()
  27. {
  28. if (Yii::$app->request->isAjax) {
  29. $get = Yii::$app->request->get();
  30. $user_id = $get['user_id'] ?? 0;
  31. $keyword = $get['keyword'] ?? '';
  32. $filter = [];
  33. if ($user_id > 0) {
  34. $filter[] = ['user_id' => $user_id];
  35. }
  36. if (!empty($keyword)) {
  37. $search_user_ids = User::find()->where([
  38. 'or', ['like', 'nickname', $keyword], ['like', 'mobile', $keyword]
  39. ])->select(['id'])->asArray()->all();
  40. $search_user_ids = array_column($search_user_ids, 'id');
  41. if ($search_user_ids) {
  42. $filter[] = ['user_id' => $search_user_ids];
  43. } else {
  44. $filter[] = ['user_id' => []];
  45. }
  46. }
  47. $params = [
  48. 'where' => array_merge([
  49. ['mall_id' => $this->mall_id],
  50. ], $filter),
  51. 'order' => 'id DESC'
  52. ];
  53. $list = HigoMerchantRewardLog::listPage($params);
  54. if ($list === false) {
  55. return $this->error(HigoMerchantRewardLog::getStaticError());
  56. }
  57. // $source_table_ids = array_column($list['list'], 'source_table_id');
  58. $source_table_ids = [];
  59. $cashier_ids = [];
  60. /** @var \addons\Store\common\models\StoreCashierOrder $cashier_order_class */
  61. $cashier_order_class = \addons\Store\common\models\StoreCashierOrder::class;
  62. foreach($list['list'] as $val){
  63. if($val['source_table'] == Order::tableName()){
  64. $source_table_ids[] = $val['source_table_id'];
  65. }elseif($val['source_table'] == $cashier_order_class::tableName()){
  66. $cashier_ids[] = $val['source_table_id'];
  67. }
  68. }
  69. $order_list = Order::lists([
  70. 'where' => [['id' => $source_table_ids], ['mall_id' => $this->mall_id]],
  71. 'with' => ['user', 'detail'],
  72. 'index' => 'id'
  73. ], true);
  74. $cashier_order_list = $cashier_order_class::lists([
  75. 'where' => [['id' => $cashier_ids], ['mall_id' => $this->mall_id]],
  76. 'select' => 'id, pay_money, order_no,user_id',
  77. 'index' => 'id',
  78. 'with' => [
  79. 'user' => function ($query){
  80. return $query->select('id, nickname, avatar_url');
  81. }
  82. ]
  83. ]);
  84. foreach ($list['list'] as &$item) {
  85. $item['goods_name'] = '';
  86. $item['order_no'] = '';
  87. $item['price'] = '';
  88. $item['nickname'] = '';
  89. $item['avatar_url'] = '';
  90. $item['desc'] = '商家让利扣除商家嗨贝';
  91. if (isset($order_list[$item['source_table_id']])) {
  92. $item['order_no'] = $order_list[$item['source_table_id']]['order_no'];
  93. $item['goods_name'] = $order_list[$item['source_table_id']]['detail'][0]['goods_name'];
  94. $item['price'] = $order_list[$item['source_table_id']]['detail'][0]['price'];
  95. $item['nickname'] = $order_list[$item['source_table_id']]['user']['nickname'];
  96. $item['avatar_url'] = $order_list[$item['source_table_id']]['user']['avatar_url'];
  97. }else if(isset($cashier_order_list[$item['source_table_id']])){
  98. $item['order_no'] = $cashier_order_list[$item['source_table_id']]['order_no'];
  99. $item['goods_name'] = '收银台';
  100. $item['price'] = $cashier_order_list[$item['source_table_id']]['pay_money'];
  101. $item['nickname'] = $cashier_order_list[$item['source_table_id']]['user']['nickname'];
  102. $item['avatar_url'] = $cashier_order_list[$item['source_table_id']]['user']['avatar_url'];
  103. }
  104. }
  105. unset($item);
  106. $higo_mall = HigoMall::getOne([['mall_id' => $this->mall_id]],true);
  107. $total = HigoMerchantRewardLog::find()->where(['mall_id' => $this->mall_id])
  108. ->select('sum(profit_price) as total_profit_price,sum(profit) as total_profit')->asArray()->one();
  109. $list['orderStatistics'] = [
  110. 'total_send_hi_bei' => $higo_mall['hi_bei'] ?? 0,
  111. 'total_profit' => $total['total_profit_price'] ?? 0,
  112. 'total_deduct_hi_bei' => $total['total_profit'] ?? 0
  113. ];
  114. return $this->success('success', $list);
  115. }
  116. return $this->render('index', []);
  117. }
  118. /**
  119. * 让利列表
  120. * @return mixed|string|null
  121. */
  122. public function actionReduceProfit()
  123. {
  124. if (\Yii::$app->request->isAjax) {
  125. // 判断有没有安装 门店插件
  126. if (!MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE)) {
  127. return $this->error('请安装门店插件');
  128. }
  129. if (\Yii::$app->request->isPost) { // 审核
  130. $setting = $this->request->post();
  131. // 数据校验
  132. $res = \Yii::$app->services->validate->validate($setting, [
  133. [['id', 'status', 'remark'], 'required'],
  134. [['id', 'status'], 'integer'],
  135. [['remark'], 'string']
  136. ], [
  137. 'id' => '审核对象',
  138. ]);
  139. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  140. try {
  141. $ret = (new MerchantReduceProfitService())->audit($this->mall_id, $setting['id'],
  142. $this->admin->id, $setting['status'], $setting['remark']);
  143. return is_string($ret) ? $this->error($ret) : $this->success('操作成功');
  144. } catch (\Exception $e) {
  145. return $this->error($e->getMessage());
  146. }
  147. } else {
  148. $params = $this->request->get();
  149. // 数据校验
  150. $res = \Yii::$app->services->validate->validate($params, [
  151. [['store_keyword', 'date_start', 'date_end'], 'string'],
  152. [['rate'], 'number'],
  153. [['status', 'page', 'limit', 'cate'], 'integer'],
  154. ]);
  155. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  156. $ret = (new MerchantReduceProfitService())->page($this->mall_id, $params);
  157. if (is_array($ret)) {
  158. $cate_list = StoreCate::find()
  159. ->select('id,name')
  160. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  161. ->asArray()
  162. ->all();
  163. $ret['cate_list'] = $cate_list;
  164. }
  165. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  166. }
  167. }
  168. return $this->render($this->action->id);
  169. }
  170. }