| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- <?php
- namespace app\modules\admin\models\team_grades;
- use app\models\District;
- use app\models\Option;
- use app\models\SaasUser;
- use app\models\TeamGrades;
- use app\models\TeamGradesAudit;
- use app\models\TeamGradesLevel;
- use app\models\TeamGradesPool;
- use app\models\TeamGradesPoolDetail;
- use app\models\User;
- use yii\base\Model;
- use yii\helpers\ArrayHelper;
- class TeamForm extends Model
- {
- public $nickname;
- public $mobile;
- public $start_time;
- public $end_time;
- public $id;
- public $store_id;
- public $status;
- public $user_id;
- public $team_grades_level;
- //分红设置
- public $team_start_num;//团队统计层级初始等级
- public $team_end_num;//团队统计层级最高等级
- public $filter_high_level;//统计扣除高等级开关
- public $team_cycle_type;//统计周期类型
- public $team_cycle;//统计周期
- public $amount_rule_type;//业绩统计规则
- public $is_send;
- public $bonus_type;
- public function rules()
- {
- return [
- [['id', 'store_id', 'status', 'user_id', 'team_grades_level', 'team_start_num', 'team_end_num',
- 'filter_high_level', 'team_cycle_type', 'team_cycle', 'is_send', 'amount_rule_type', 'bonus_type'], 'integer'],
- [['nickname', 'mobile', 'start_time', 'end_time'], 'string']
- ];
- }
- //审核列表
- public function auditList() {
- $store_id = $this->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()
- ];
- }
- }
- }
|