| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- namespace addons\ReservationService\common\services;
- use addons\ReservationService\common\enums\ReservationServiceEnum;
- use addons\ReservationService\common\models\ReservationServiceOrder;
- use common\enums\StatusEnum;
- use common\helpers\DateHelper;
- use common\models\common\CapitalLog;
- use common\models\common\CommissionLog;
- use common\models\common\GlobalVarMap;
- use common\models\user\User;
- use yii\data\Pagination;
- class CommissionService
- {
- /**
- * @param int $mall_id
- * @param int $user_id
- * @param array $params
- * @return array|false|mixed|string|null
- */
- public function page(int $mall_id, array $params, int $user_id = 0)
- {
- $fields = ',desc';
- $wallet_type = 'commission';
- if(isset($params['status']) && $params['status'] == 0){//未结算
- $wallet_type = 'commission_frozen';
- $fields = ',desc, status';
- }
- $params['mall_id'] = $mall_id;
- if (!empty($user_id)) {
- $params['user_id'] = $user_id;
- } else if (!empty($params['keyword'])) {
- $uids = User::find()->where(['mall_id' => $mall_id])
- ->andWhere(['status' => StatusEnum::ENABLED])
- ->andWhere(['or', ['like', 'id', $params['keyword']], ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']]])
- ->select('id')->column();
- if (empty($uids)) return [];
- $params['user_id'] = $uids;
- }
- if (!empty($params['date_start'])) $params['date_start'] = strtotime($params['date_start']);
- if (!empty($params['date_end'])) $params['date_end'] = strtotime($params['date_end']);
- if ($wallet_type == 'commission_frozen' && (!isset($params['status']) && $params['status'] === '0') && $user_id == 0) {
- $params['status'] = StatusEnum::DISABLED;
- } elseif ($wallet_type == 'commission') {
- unset($params['status']);
- }
- $params['limit'] = $params['limit'] ?? 10;
- $list = CapitalLog::getCapitalLogLists($params, $wallet_type, ReservationServiceEnum::ADDONS_NAME, $user_id ? '' : $fields);
- if (!empty(CapitalLog::getStaticError())) return CapitalLog::getStaticError();
- if (!empty($list['list'])) {
- $commission_map = GlobalVarMap::getEnumMapByType('FromTypeMap');
- $capital_type_map = GlobalVarMap::getEnumMapByType('CapitalTypeMap');
- $user_ids = array_column($list['list'], 'user_id');
- $userList = User::lists([
- 'where' => [
- ['id' => $user_ids]
- ],
- 'index' => 'id',
- 'select'=> 'id, nickname, avatar_url, mobile'
- ]);
- foreach ($list['list'] as &$item) {
- $item['source_text'] = ($commission_map[$item['from_type']] ?? '').($capital_type_map[$item['capital_type']]
- ?'-'.$capital_type_map[$item['capital_type']]:'');
- $item['user'] = $userList[$item['user_id']] ?? null;
- }
- }
- return $list;
- }
- /**
- * @param int $mall_id
- * @param int $user_id
- * @param array $params
- * @return false|mixed|string
- */
- public function list(int $mall_id, int $user_id, array $params)
- {
- $where = [
- ['mall_id' => $mall_id],
- ['user_id' => $user_id],
- ['from_type' => ReservationServiceEnum::ADDONS_NAME]
- ];
- if ($params['status'] == 999 || !isset($params['status']) || $params['status'] == '' ||
- !in_array($params['status'], [StatusEnum::ENABLED, StatusEnum::DISABLED])) {
- // 多表查询
- array_unshift($where, 'and');
- $query = CommissionLog::find()->where($where)->select('created_at, change_num, order_no, id as status');
- $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'");
- $ret['page_size'] = $params['limit'] ?? 10;
- $ret['page'] = max($params['page'] ?? 1, 1);
- $ret['count'] = $query->count();
- $pages = new Pagination(['totalCount' => $ret['count']]);
- $pages->pageSizeParam = "limit";
- $pages->defaultPageSize = $ret['page_size'];
- $pages->setPageSize($ret['page_size']);
- $ret['pagination'] = $pages;
- $ret['page_count'] = (!empty($ret['count'] ) && $ret['count'] > 0) ? ceil($ret['count'] / $ret['page_size']) : 1;
- $offset = ($ret['page']-1) * $ret['page_size'];
- $sql = $query->createCommand()->getRawSql();
- $ret['list'] = \Yii::$app->db->createCommand("$sql ORDER BY created_at DESC LIMIT $offset, {$ret['page_size']}")->queryAll();
- } else {
- if ($params['status'] == 0) { // 待结算
- CapitalLog::$capitalType = "commission_frozen";
- $select = 'change_num, order_no, status';
- $where[] = ['status' => $params['status']];
- } else {
- CapitalLog::$capitalType = "commission";
- $select = 'change_num, order_no';
- }
- $ret = CapitalLog::listPage([
- 'where' => $where,
- 'select'=> $select,
- 'limit' => $params['limit'] ?? 10,
- 'order' => 'id desc',
- ]);
- }
- if (!empty(CapitalLog::getStaticError())) return CapitalLog::getStaticError();
- if (!empty($ret['list'])) {
- $order_nos = array_column($ret['list'], 'order_no');
- $list = ReservationServiceOrder::lists([
- 'where' => [
- ['order_no' => $order_nos]
- ],
- 'index' => 'order_no',
- 'select'=> 'service_start_at, service_end_at, order_detail_id, order_no',
- 'with' => ['orderDetail' => function($query) {
- $query->select('id, goods_name, goods_attr_name, original_goods_price, goods_price, num, pic_url');
- }]
- ]);
- if (!empty(ReservationServiceOrder::getStaticError())) return ReservationServiceOrder::getStaticError();
- foreach ($ret['list'] as &$item) {
- $order = $list[$item['order_no']];
- $order['reserve_at'] = DateHelper::reserveAt($order['service_start_at']);
- $order['service_start_at'] = date('Y-m-d H:i', $order['service_start_at']);
- $order['service_end_at'] = date('Y-m-d H:i', $order['service_end_at']);
- $order['change_num'] = $item['change_num'];
- $order['status'] = min($item['status'] ?? 1, 1);
- $order['status_text'] = $order['status'] == 0 ? '待结算' : '已结算';
- $item = $order;
- }
- }
- return $ret;
- }
- }
|