store_id; $nickname = $this->nickname; $mobile = $this->mobile; $start_time = $this->start_time; $end_time = $this->end_time; $status = $this->status; $query = TeamGradesAudit::find()->alias('tg')->leftJoin(['u' => User::tableName()], 'tg.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding') ->where(['tg.store_id' => $store_id, 'tg.is_delete' => 0, 'u.is_delete' => 0, 'su.is_delete' => 0]) ->andWhere(['<>', 'u.binding', '']); if (isset($status) && in_array($status, TeamGradesAudit::STATUS_ARR)) { $query->andWhere(['status' => $status]); } if (!empty(trim($nickname))) { $query->andWhere(['OR', ['LIKE', 'su.name', $nickname], ['LIKE', 'tg.name', $nickname]]); } if (!empty(trim($mobile))) { $query->andWhere(['OR', ['LIKE', 'su.mobile', $mobile], ['LIKE', 'tg.mobile', $mobile]]); } if (!empty(trim($start_time))) { $start_time = strtotime($start_time); if ($start_time) { $query->andWhere(['>=', 'tg.created_at', $start_time]); } } if (!empty(trim($end_time))) { $end_time = strtotime($end_time); if ($end_time) { $query->andWhere(['<=', 'tg.created_at', $end_time]); } } $query->select('tg.id, tg.name, tg.mobile, tg.created_at, tg.audit_time, tg.team_grades_level, tg.province_id, tg.city_id, tg.district_id, tg.address, tg.status, su.avatar, su.name as nickname') ->orderBy('tg.id DESC'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$list) { $list['created_at'] = date('Y-m-d H:i:s', $list['created_at']); if ($list['audit_time']) { $list['audit_time'] = date('Y-m-d H:i:s', $list['audit_time']); } $list['status'] = intval($list['status']); $list['level_name'] = TeamGradesLevel::getLevelInfo($list['team_grades_level'], $store_id, 'level_name'); //拼接省市区以及详细地址数据 $address = ''; $district = District::find()->where(['id' => [$list['province_id'], $list['city_id'], $list['district_id']]]) ->select('name')->column(); if ($district) { $address = implode('', $district); } $address .= $list['address']; $list['address'] = $address; } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $pagination['list'], 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], ] ]; } //列表 public function list() { $store_id = $this->store_id; $nickname = $this->nickname; $mobile = $this->mobile; $start_time = $this->start_time; $end_time = $this->end_time; $query = TeamGrades::find()->alias('tg')->leftJoin(['u' => User::tableName()], 'tg.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding') ->where(['tg.store_id' => $store_id, 'tg.is_delete' => 0, 'u.is_delete' => 0, 'su.is_delete' => 0]) ->andWhere(['<>', 'u.binding', '']); if (!empty(trim($nickname))) { $query->andWhere(['OR', ['LIKE', 'su.name', $nickname], ['LIKE', 'tg.name', $nickname]]); } if (!empty(trim($mobile))) { $query->andWhere(['OR', ['LIKE', 'su.mobile', $mobile], ['LIKE', 'tg.mobile', $mobile]]); } if (!empty(trim($start_time))) { $start_time = strtotime($start_time); if ($start_time) { $query->andWhere(['>=', 'tg.created_at', $start_time]); } } if (!empty(trim($end_time))) { $end_time = strtotime($end_time); if ($end_time) { $query->andWhere(['<=', 'tg.created_at', $end_time]); } } $query->select('tg.id, tg.name, tg.mobile, tg.created_at, tg.team_grades_level, tg.province_id, tg.city_id, tg.district_id, tg.address, su.avatar, su.name as nickname, tg.total_price, tg.user_id') ->orderBy('tg.id DESC'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$list) { $list['created_at'] = date('Y-m-d H:i:s', $list['created_at']); $list['level_name'] = TeamGradesLevel::getLevelInfo($list['team_grades_level'], $store_id, 'level_name'); } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'level' => TeamGradesLevel::getLevelList($store_id), 'data' => $pagination['list'], 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], ] ]; } //处理同意拒绝 删除 public function handle() { $t = \Yii::$app->db->beginTransaction(); try { $id = $this->id ?? 0; $status = $this->status; $teamGradesAudit = TeamGradesAudit::findOne($id); if (!$teamGradesAudit) { throw new \Exception('数据查询失败'); } if ($teamGradesAudit->is_delete) { throw new \Exception('数据已经删除'); } if (!isset($status)) { throw new \Exception('参数错误'); } //同意/拒绝 if (in_array($status, [TeamGradesAudit::STATUS_AGREE, TeamGradesAudit::STATUS_REFUSE])) { if ($teamGradesAudit->status) { throw new \Exception('数据已经处理'); } $teamGradesAudit->status = $status; $teamGradesAudit->audit_time = time(); } //同意/拒绝 if (intval($status) === 3) { $teamGradesAudit->is_delete = 1; } if (!$teamGradesAudit->save()) { throw new \Exception(json_encode($teamGradesAudit->errors, JSON_UNESCAPED_UNICODE)); } if (intval($status) === TeamGradesAudit::STATUS_AGREE) { $teamGradesAuditAttribution = ArrayHelper::toArray($teamGradesAudit->attributes); unset($teamGradesAuditAttribution['id'], $teamGradesAuditAttribution['status'], $teamGradesAuditAttribution['audit_time'], $teamGradesAuditAttribution['created_at'], $teamGradesAuditAttribution['updated_at']); $teamGrades = TeamGrades::findOne(['user_id' => $teamGradesAudit->user_id, 'is_delete' => 0]) ?: new TeamGrades(); $teamGrades->attributes = $teamGradesAuditAttribution; $teamGrades->total_price = 0; $teamGrades->price = 0; if (!$teamGrades->save()) { throw new \Exception(json_encode($teamGrades->errors, JSON_UNESCAPED_UNICODE)); } } $t->commit(); return [ 'code' => 0, 'msg' => '操作成功' ]; } catch (\Exception $e) { $t->rollBack(); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //添加分红团队 public function addTeam() { try { //设置分红团队 $id = $this->id; //设置分红团队用户 $user_id = $this->user_id; //获取店铺id $store_id = $this->store_id; //设置分红团队等级 $team_grades_level = $this->team_grades_level; $user = User::findOne(['id' => $user_id, 'is_delete' => 0]); if (!$user) { throw new \Exception('用户不存在'); } $teamGradesAudit = TeamGradesAudit::findOne(['user_id' => $user_id, 'status' => TeamGradesAudit::STATUS_APPLY, 'is_delete' => 0]); if ($teamGradesAudit) { throw new \Exception('该用户已经申请过分红团队, 请前往审核'); } $teamGradesLevel = TeamGradesLevel::findOne(['level' => $team_grades_level, 'store_id' => $store_id, 'is_delete' => 0]); if (!$teamGradesLevel) { throw new \Exception('分红等级不存在'); } $saas_user = SaasUser::findOne(['mobile' => $user->binding, 'is_delete' => 0]); if (!$saas_user) { throw new \Exception('用户信息不存在'); } $teamGrades = TeamGrades::findOne($id); $is_open = true; if ($teamGrades) { if (intval($teamGrades->user_id) === intval($user_id)) { $is_open = false; } } if ($is_open) { $teamGrades_ = TeamGrades::findOne(['user_id' => $user_id, 'is_delete' => 0]); if ($teamGrades_) { throw new \Exception('该用户已经设置过分红团队'); } } $teamGrades = $teamGrades ?: new TeamGrades(); $teamGrades->user_id = $user_id; $teamGrades->store_id = $store_id; $teamGrades->name = $saas_user->name; $teamGrades->mobile = $saas_user->mobile; $teamGrades->team_grades_level = $team_grades_level; $teamGrades->province_id = 0; $teamGrades->city_id = 0; $teamGrades->district_id = 0; if (!$teamGrades->save()) { throw new \Exception(json_encode($teamGrades->errors, JSON_UNESCAPED_UNICODE)); } return [ 'code' => 0, 'msg' => '操作成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //删除团队人员 public function delTeam() { try { $id = $this->id ?? 0; $teamGrades = TeamGrades::findOne($id); if (!$teamGrades) { throw new \Exception('数据查询失败'); } if ($teamGrades->is_delete) { throw new \Exception('数据已经删除'); } $teamGrades->is_delete = 1; if (!$teamGrades->save()) { throw new \Exception(json_encode($teamGrades->errors, JSON_UNESCAPED_UNICODE)); } return [ 'code' => 0, 'msg' => '操作成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //设置分红 public function setDividends() { try { $store_id = $this->store_id; if (\Yii::$app->request->isPost) { if (!$this->validate()) { throw new \Exception($this->getErrorSummary(false)[0]); } $team_start_num = $this->team_start_num; $team_end_num = $this->team_end_num; $filter_high_level = $this->filter_high_level; $team_cycle_type = $this->team_cycle_type; $team_cycle = $this->team_cycle; $amount_rule_type = $this->amount_rule_type; $bonus_type = $this->bonus_type; $data = [ 'team_start_num' => $team_start_num ?: 0, 'team_end_num' => $team_end_num ?: 0, 'filter_high_level' => $filter_high_level ?: 0, 'team_cycle_type' => $team_cycle_type ?: 0, 'team_cycle' => $team_cycle ?: 0, 'amount_rule_type' => $amount_rule_type, 'bonus_type' => $bonus_type, ]; /* begin 2025/04/27 14:42:03 当改变奖励方式时,判断是否有为结算的奖金池,如果有就不能改变 WPing丶 */ $setting = Option::get('team_grades_setting', $this->store_id, 'team_grades_setting')['value']; $setting = json_decode($setting, true); $old_bonus_type = $setting['bonus_type']; if($bonus_type != $old_bonus_type) { $is_exist = TeamGradesPool::find()->where(['store_id' => $this->store_id, 'is_send' => 0, 'is_delete' => 0])->exists(); if($is_exist) { throw new \Exception('当前商城有已生成但未结算的奖金池,不能修改奖励方式'); } } /* end */ //验证数据 if (!in_array($data['team_cycle_type'], [ TeamGrades::TEAM_CYCLE_TYPE_DAY, TeamGrades::TEAM_CYCLE_TYPE_WEEK, TeamGrades::TEAM_CYCLE_TYPE_MONTH, ])) { throw new \Exception('统计周期数据错误'); } if (!in_array($data['amount_rule_type'], [ TeamGrades::TEAM_AMOUNT_RULE_TYPE_GOODS, TeamGrades::TEAM_AMOUNT_RULE_TYPE_ORDER ])) { throw new \Exception('业绩统计规则枚举值错误'); } if (!in_array($data['bonus_type'], [ TeamGrades::TEAM_BONUS_TYPE_LADDER, TeamGrades::TEAM_BONUS_TYPE_DIFF ])) { throw new \Exception('奖励类型枚举值错误'); } if ($data['team_start_num'] > $data['team_end_num']) { throw new \Exception('团队人数范围数据错误'); } $result = Option::set('team_grades_setting', json_encode($data), $store_id, 'team_grades_setting'); if (!$result) { throw new \Exception('数据保存失败'); } return [ 'code' => 0, 'msg' => '操作成功' ]; } $team_grades_setting = Option::get('team_grades_setting', $store_id, 'team_grades_setting')['value']; if (!$team_grades_setting) { $team_grades_setting = json_encode([ 'team_start_num' => 0, 'team_end_num' => 0, 'filter_high_level' => 1, 'team_cycle_type' => TeamGrades::TEAM_CYCLE_TYPE_DAY, 'team_cycle' => 0, 'amount_rule_type' => 0, 'bonus_type' => TeamGrades::TEAM_BONUS_TYPE_LADDER ]); } $team_grades_setting = json_decode($team_grades_setting, true); $team_grades_setting['team_cycle_type'] = intval($team_grades_setting['team_cycle_type']); $team_grades_setting['amount_rule_type'] = intval($team_grades_setting['amount_rule_type']); return [ 'code' => 0, 'msg' => '获取成功', 'data' => $team_grades_setting ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } /** * 获取团队人员分红明细 */ public function getTeamDividendsList() { try { $id = $this->id; $is_send = $this->is_send; $store_id = $this->store_id; $team_grades = TeamGrades::findOne($id); if (!$team_grades) { throw new \Exception('数据查询失败'); } $user_id = $team_grades->user_id; $query = TeamGradesPoolDetail::find()->where(['user_id' => $user_id, 'is_delete' => 0]); if ($is_send !== null && in_array($is_send, [TeamGradesPoolDetail::SEND_STATUS_NO, TeamGradesPoolDetail::SEND_STATUS_YES])) { $query->andWhere(['is_send' => $is_send]); } $query->select('id, user_id, price, amount, is_send, level, created_at, send_time'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$item) { $item['team_grades_level'] = TeamGradesLevel::getLevelInfo($item['level'], $store_id, 'level_name'); $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); $item['send_time'] = $item['send_time'] ? date('Y-m-d H:i:s', $item['send_time']) : ''; $item['is_send'] = intval($item['is_send']); } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $pagination['list'], 'pageNo' => $pagination['pageNo'], 'totalCount' => $pagination['totalCount'], ] ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }