Order.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace app\admin\controller\commission;
  3. use think\Db;
  4. use think\exception\HttpResponseException;
  5. use app\common\controller\Backend;
  6. use app\common\model\commission\Order as OrderModel;
  7. use app\common\model\commission\Reward as RewardModel;
  8. use app\common\Service\Commission\Reward as RewardService;
  9. class Order extends Backend
  10. {
  11. protected $model = null;
  12. /**
  13. * 快速搜索时执行查找的字段
  14. */
  15. protected $searchFields = 'id,order.order_sn';
  16. /**
  17. * 是否是关联查询
  18. */
  19. protected $relationSearch = true;
  20. public function _initialize()
  21. {
  22. parent::_initialize();
  23. $this->model = new OrderModel();
  24. // 配置订单和用户信息展示
  25. $this->assignconfig('commission_order_status_types', [
  26. '-2' => __('已扣除'),
  27. '-1' => __('已取消'),
  28. '0' => __('不计入'),
  29. '1' => __('已计入')
  30. ]);
  31. $this->assignconfig('commission_reward_status_types', [
  32. '-2' => __('已退回'),
  33. '-1' => __('已取消'),
  34. '0' => __('未结算'),
  35. '1' => __('已结算')
  36. ]);
  37. $this->assignconfig('commission_order_user_display_config', [
  38. 'showAvatar' => true,
  39. 'avatarSize' => 40,
  40. 'showMobile' => true,
  41. 'showId' => true,
  42. 'defaultAvatarUrl' => '/assets/img/avatar.png'
  43. ]);
  44. }
  45. /**
  46. * 查看
  47. */
  48. public function index()
  49. {
  50. if (!$this->request->isAjax()) {
  51. return $this->view->fetch();
  52. }
  53. //如果发送的来源是 Selectpage,则转发到 Selectpage
  54. if ($this->request->request('keyField')) {
  55. return $this->selectpage();
  56. }
  57. [$where, $sort, $order, $offset, $limit] = $this->buildparams();
  58. $list = $this->model
  59. ->with(['buyer', 'agent', 'order', 'rewards.agent', 'order_item'])
  60. ->where($where)
  61. ->order($sort, $order)
  62. ->paginate($limit);
  63. $listArray = $list->toArray();
  64. // 统计数据 - 基于当前查询条件
  65. $count = [
  66. 'total' => $listArray['total'],
  67. 'total_amount' => 0,
  68. 'total_commission' => 0,
  69. 'total_commission_cancel' => 0,
  70. 'total_commission_accounted' => 0,
  71. 'total_commission_back' => 0,
  72. 'total_commission_pending' => 0
  73. ];
  74. // 获取所有符合条件的订单用于统计
  75. $orders = $this->model->with(['rewards'])->where($where)->select();
  76. collection($orders)->each(function ($order) use (&$count) {
  77. $count['total_amount'] += $order['amount'];
  78. foreach ($order['rewards'] as $reward) {
  79. $count['total_commission'] += $reward['commission'];
  80. switch ($reward['status']) {
  81. case RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED:
  82. $count['total_commission_accounted'] += $reward['commission'];
  83. break;
  84. case RewardModel::COMMISSION_REWARD_STATUS_BACK:
  85. $count['total_commission_back'] += $reward['commission'];
  86. break;
  87. case RewardModel::COMMISSION_REWARD_STATUS_PENDING:
  88. $count['total_commission_pending'] += $reward['commission'];
  89. break;
  90. case RewardModel::COMMISSION_REWARD_STATUS_CANCEL:
  91. $count['total_commission_cancel'] += $reward['commission'];
  92. break;
  93. }
  94. }
  95. });
  96. $result = [
  97. 'total' => $listArray['total'],
  98. 'rows' => $listArray['data'],
  99. 'extend' => ['count' => $count]
  100. ];
  101. return json($result);
  102. }
  103. /**
  104. * 结算佣金
  105. *
  106. * @return Response
  107. */
  108. public function confirm()
  109. {
  110. $params = $this->request->only(['commission_reward_id', 'commission_order_id']);
  111. try {
  112. Db::transaction(function () use ($params) {
  113. $rewardService = new RewardService('admin');
  114. if (isset($params['commission_reward_id'])) {
  115. return $rewardService->runCommissionReward($params['commission_reward_id']);
  116. } elseif (isset($params['commission_order_id'])) {
  117. return $rewardService->runCommissionRewardByOrder($params['commission_order_id']);
  118. }
  119. });
  120. } catch (HttpResponseException $e) {
  121. $data = $e->getResponse()->getData();
  122. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  123. $this->error($message);
  124. } catch (\Exception $e) {
  125. $this->error($e->getMessage());
  126. }
  127. $this->success('操作成功');
  128. }
  129. /**
  130. * 取消结算
  131. *
  132. * @return Response
  133. */
  134. public function cancel()
  135. {
  136. $params = $this->request->only(['commission_reward_id', 'commission_order_id']);
  137. try {
  138. Db::transaction(function () use ($params) {
  139. $rewardService = new RewardService('admin');
  140. if (isset($params['commission_reward_id'])) {
  141. return $rewardService->cancelCommissionReward($params['commission_reward_id']);
  142. } elseif (isset($params['commission_order_id'])) {
  143. return $rewardService->backCommissionRewardByOrder($params['commission_order_id']);
  144. }
  145. });
  146. } catch (HttpResponseException $e) {
  147. $data = $e->getResponse()->getData();
  148. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  149. $this->error($message);
  150. } catch (\Exception $e) {
  151. $this->error($e->getMessage());
  152. }
  153. $this->success('操作成功');
  154. }
  155. /**
  156. * 退回已结算佣金
  157. */
  158. public function back()
  159. {
  160. $params = $this->request->only(['commission_reward_id', 'commission_order_id', 'deduct_order_money']);
  161. try {
  162. Db::transaction(function () use ($params) {
  163. $rewardService = new RewardService('admin');
  164. if (isset($params['commission_reward_id'])) {
  165. return $rewardService->backCommissionReward($params['commission_reward_id']);
  166. } elseif (isset($params['commission_order_id'])) {
  167. return $rewardService->backCommissionRewardByOrder($params['commission_order_id'], $params['deduct_order_money']);
  168. }
  169. });
  170. } catch (HttpResponseException $e) {
  171. $data = $e->getResponse()->getData();
  172. $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
  173. $this->error($message);
  174. } catch (\Exception $e) {
  175. $this->error($e->getMessage());
  176. }
  177. $this->success('操作成功');
  178. }
  179. /**
  180. * 修改待结算佣金
  181. */
  182. public function edit($id = null)
  183. {
  184. $params = $this->request->only(['commission_reward_id', 'commission']);
  185. $reward = RewardModel::get($params['commission_reward_id']);
  186. if (!$reward) {
  187. $this->error(__('No Results were found'));
  188. }
  189. $reward->commission = $params['commission'];
  190. $result = $reward->save();
  191. if ($result) {
  192. $this->success('操作成功');
  193. }
  194. $this->error('操作失败');
  195. }
  196. /**
  197. * 导出(需要根据实际Export类来实现)
  198. */
  199. public function export()
  200. {
  201. // 获取查询条件
  202. [$where] = $this->buildparams();
  203. // 数据总条数
  204. $total = $this->model->where($where)->count();
  205. if ($total <= 0) {
  206. $this->error('导出数据为空');
  207. }
  208. // TODO: 实现具体的导出逻辑
  209. // 这里需要根据实际的Export类来实现
  210. $this->error('导出功能待实现');
  211. }
  212. }