CommissionService.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace addons\ReservationService\common\services;
  3. use addons\ReservationService\common\enums\ReservationServiceEnum;
  4. use addons\ReservationService\common\models\ReservationServiceOrder;
  5. use common\enums\StatusEnum;
  6. use common\helpers\DateHelper;
  7. use common\models\common\CapitalLog;
  8. use common\models\common\CommissionLog;
  9. use common\models\common\GlobalVarMap;
  10. use common\models\user\User;
  11. use yii\data\Pagination;
  12. class CommissionService
  13. {
  14. /**
  15. * @param int $mall_id
  16. * @param int $user_id
  17. * @param array $params
  18. * @return array|false|mixed|string|null
  19. */
  20. public function page(int $mall_id, array $params, int $user_id = 0)
  21. {
  22. $fields = ',desc';
  23. $wallet_type = 'commission';
  24. if(isset($params['status']) && $params['status'] == 0){//未结算
  25. $wallet_type = 'commission_frozen';
  26. $fields = ',desc, status';
  27. }
  28. $params['mall_id'] = $mall_id;
  29. if (!empty($user_id)) {
  30. $params['user_id'] = $user_id;
  31. } else if (!empty($params['keyword'])) {
  32. $uids = User::find()->where(['mall_id' => $mall_id])
  33. ->andWhere(['status' => StatusEnum::ENABLED])
  34. ->andWhere(['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]])
  35. ->select('id')->column();
  36. if (empty($uids)) return [];
  37. $params['user_id'] = $uids;
  38. }
  39. if (!empty($params['date_start'])) $params['date_start'] = strtotime($params['date_start']);
  40. if (!empty($params['date_end'])) $params['date_end'] = strtotime($params['date_end']);
  41. if ($wallet_type == 'commission_frozen' && (!isset($params['status']) && $params['status'] === '0') && $user_id == 0) {
  42. $params['status'] = StatusEnum::DISABLED;
  43. } elseif ($wallet_type == 'commission') {
  44. unset($params['status']);
  45. }
  46. $params['limit'] = $params['limit'] ?? 10;
  47. $list = CapitalLog::getCapitalLogLists($params, $wallet_type, ReservationServiceEnum::ADDONS_NAME, $user_id ? '' : $fields);
  48. if (!empty(CapitalLog::getStaticError())) return CapitalLog::getStaticError();
  49. if (!empty($list['list'])) {
  50. $commission_map = GlobalVarMap::getEnumMapByType('FromTypeMap');
  51. $capital_type_map = GlobalVarMap::getEnumMapByType('CapitalTypeMap');
  52. $user_ids = array_column($list['list'], 'user_id');
  53. $userList = User::lists([
  54. 'where' => [
  55. ['id' => $user_ids]
  56. ],
  57. 'index' => 'id',
  58. 'select'=> 'id, nickname, avatar_url, mobile'
  59. ]);
  60. foreach ($list['list'] as &$item) {
  61. $item['source_text'] = ($commission_map[$item['from_type']] ?? '').($capital_type_map[$item['capital_type']]
  62. ?'-'.$capital_type_map[$item['capital_type']]:'');
  63. $item['user'] = $userList[$item['user_id']] ?? null;
  64. }
  65. }
  66. return $list;
  67. }
  68. /**
  69. * @param int $mall_id
  70. * @param int $user_id
  71. * @param array $params
  72. * @return false|mixed|string
  73. */
  74. public function list(int $mall_id, int $user_id, array $params)
  75. {
  76. $where = [
  77. ['mall_id' => $mall_id],
  78. ['user_id' => $user_id],
  79. ['from_type' => ReservationServiceEnum::ADDONS_NAME]
  80. ];
  81. if ($params['status'] == 999 || !isset($params['status']) || $params['status'] == '' ||
  82. !in_array($params['status'], [StatusEnum::ENABLED, StatusEnum::DISABLED])) {
  83. // 多表查询
  84. array_unshift($where, 'and');
  85. $query = CommissionLog::find()->where($where)->select('created_at, change_num, order_no, id as status');
  86. $query->union("SELECT created_at, change_num, order_no, status FROM qimall_commission_frozen_log WHERE `mall_id` = {$mall_id} AND `status` = -1 AND `user_id` = {$user_id} AND `from_type` = 'ReservationService'");
  87. $ret['page_size'] = $params['limit'] ?? 10;
  88. $ret['page'] = max($params['page'] ?? 1, 1);
  89. $ret['count'] = $query->count();
  90. $pages = new Pagination(['totalCount' => $ret['count']]);
  91. $pages->pageSizeParam = "limit";
  92. $pages->defaultPageSize = $ret['page_size'];
  93. $pages->setPageSize($ret['page_size']);
  94. $ret['pagination'] = $pages;
  95. $ret['page_count'] = (!empty($ret['count'] ) && $ret['count'] > 0) ? ceil($ret['count'] / $ret['page_size']) : 1;
  96. $offset = ($ret['page']-1) * $ret['page_size'];
  97. $sql = $query->createCommand()->getRawSql();
  98. $ret['list'] = \Yii::$app->db->createCommand("$sql ORDER BY created_at DESC LIMIT $offset, {$ret['page_size']}")->queryAll();
  99. } else {
  100. if ($params['status'] == 0) { // 待结算
  101. CapitalLog::$capitalType = "commission_frozen";
  102. $select = 'change_num, order_no, status';
  103. $where[] = ['status' => $params['status']];
  104. } else {
  105. CapitalLog::$capitalType = "commission";
  106. $select = 'change_num, order_no';
  107. }
  108. $ret = CapitalLog::listPage([
  109. 'where' => $where,
  110. 'select'=> $select,
  111. 'limit' => $params['limit'] ?? 10,
  112. 'order' => 'id desc',
  113. ]);
  114. }
  115. if (!empty(CapitalLog::getStaticError())) return CapitalLog::getStaticError();
  116. if (!empty($ret['list'])) {
  117. $order_nos = array_column($ret['list'], 'order_no');
  118. $list = ReservationServiceOrder::lists([
  119. 'where' => [
  120. ['order_no' => $order_nos]
  121. ],
  122. 'index' => 'order_no',
  123. 'select'=> 'service_start_at, service_end_at, order_detail_id, order_no',
  124. 'with' => ['orderDetail' => function($query) {
  125. $query->select('id, goods_name, goods_attr_name, original_goods_price, goods_price, num, pic_url');
  126. }]
  127. ]);
  128. if (!empty(ReservationServiceOrder::getStaticError())) return ReservationServiceOrder::getStaticError();
  129. foreach ($ret['list'] as &$item) {
  130. $order = $list[$item['order_no']];
  131. $order['reserve_at'] = DateHelper::reserveAt($order['service_start_at']);
  132. $order['service_start_at'] = date('Y-m-d H:i', $order['service_start_at']);
  133. $order['service_end_at'] = date('Y-m-d H:i', $order['service_end_at']);
  134. $order['change_num'] = $item['change_num'];
  135. $order['status'] = min($item['status'] ?? 1, 1);
  136. $order['status_text'] = $order['status'] == 0 ? '待结算' : '已结算';
  137. $item = $order;
  138. }
  139. }
  140. return $ret;
  141. }
  142. }