| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\admin\models;
- use app\models\Order;
- use app\models\Share;
- use app\models\ShareLevel;
- use app\models\ShareLevelLog;
- use app\models\User;
- use app\models\SaasUser;
- use yii\base\Model;
- class ShareListForm extends Model
- {
- public $store_id;
- public $status;
- public $keyword;
- public $seller_comments;
- public $phone;
- public $platform;
- public $id;
- public $level;
- public function rules()
- {
- return [
- [['keyword', 'seller_comments', 'phone'], 'trim'],
- [['status', 'platform', 'id', 'level'], 'integer'],
- [['seller_comments', 'phone'], 'string'],
- ];
- }
- public function getList()
- {
- if ($this->validate()) {
- $query = Share::find()->alias('s')
- ->where(['s.is_delete' => Share::SHARE_NOT_DELETE, 's.store_id' => $this->store_id])
- ->leftJoin('{{%user}} u', 'u.id=s.user_id')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->andWhere(['u.is_delete' => User::USER_NOT_DELETE]);
-
- if ($this->keyword) {
- $query->andWhere([
- 'or',
- ['like', 's.name', $this->keyword],
- ['like', 'su.name', $this->keyword],
- ['like', 'u.nickname', $this->keyword],
- ]);
- }
- if ($this->status) {
- $query->andWhere(['=', 's.status', $this->status ]);
- } else {
- $query->andWhere(['in', 's.status', [Share::SHARE_NO_AUDIT, Share::SHARE_AUDIT_PASS]]);
- }
- if ($this->phone) {
- $query->andWhere(
- ['u.binding' => $this->phone]
- );
- }
-
-
- if ($this->platform == -1) {
- $query->andWhere(
- ['>','u.platform', -1]
- );
- } else {
- if ($this->platform) {
- $query->andWhere(
- ['u.platform' => $this->platform]
- );
- }
- }
- if ($this->status != '') {
- if ($this->status == Share::SHARE_NO_AUDIT || $this->status == Share::SHARE_AUDIT_PASS
- || $this->status == Share::SHARE_AUDIT_FAIL) {
- $query->andWhere(['s.status' => $this->status]);
- }
- }
- // TODO: 其他订单
- $orderCount = Order::find()->where([
- 'store_id' => $this->store_id, 'is_delete' => Order::IS_DELETE_FALSE])
- ->andWhere(['<>', 'trade_status', Order::ORDER_FLOW_CANCEL])
- ->andWhere('user_id = u.id')->select('count(1)');
- // $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->limit, 'page' => $this->page - 1]);
- // {
- // $orderCount = Order::find()->where([
- // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0, 'is_recycle' => 0
- // ])->andWhere('user_id = u.id')->select('count(1)');
- // $msOrderCount = MsOrder::find()->where([
- // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0
- // ])->andWhere('user_id = u.id')->select('count(1)');
- // $ptOrderCount = PtOrder::find()->where([
- // 'store_id' => $this->store_id, 'is_delete' => 0
- // ])->andWhere('user_id = u.id')->select('count(1)');
- // $yyOrderCount = YyOrder::find()->where([
- // 'store_id' => $this->store_id, 'is_delete' => 0
- // ])->andWhere('user_id = u.id')->select('count(1)');
- // }
- // $list = $query->orderBy('s.status ASC,s.addtime DESC')
- // ->select([
- // 's.*', 'u.nickname', 'u.avatar_url', 'u.platform', 'u.time', 'u.price', 'u.total_price', 'u.id user_id', 'u.parent_id',
- // 'order_count' => $orderCount, 'ms_order_count' => $msOrderCount, 'pt_order_count' => $ptOrderCount, 'yy_order_count' => $yyOrderCount,
- // 'parent_nickname' => User::find()->alias('parent')->where('parent.id = u.parent_id')->select('nickname')
- // ])
- // ->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]);
- $query->orderBy('s.status ASC,s.created_at DESC')
- ->andWhere(['and', ['is not', 'u.binding', null], ['<>', 'u.binding', ''], ['is not', 'su.mobile', null], ['<>', 'su.mobile', '']])
- ->select([
- 's.*', 'u.nickname', 'u.avatar_url', 'u.binding', 'u.platform', 'u.time', 'u.price', 'u.total_price',
- 'u.id user_id', 'u.parent_id', 'u.old_parent_id', 'order_count' => $orderCount
- ])->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]);
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- foreach ($list as $key => &$value) {
- $value['level'] = (int)$value['level'];
- $share_level = ShareLevel::findOne(['store_id' => $this->store_id, 'is_delete' => ShareLevel::SHARE_NOT_DELETE, 'level' => $value['level']]);
- $value['level_name'] = $share_level->name;
- $first = $this->getTeam($value['user_id'], 1);
- $value['first']['count'] = count($first['data']);
- $value['first']['team'] = [];
- if ($value['first']['count'] > 0) {
- foreach ($first['data'] as $val_team_1) {
- $value['first']['team'][] = $val_team_1['nickname'];
- }
- }
- $second = $this->getTeam($value['user_id'], 2);
- $value['second']['count'] = count($second['data']);
- $value['second']['team'] = [];
- if ($value['second']['count'] > 0) {
- foreach ($second['data'] as $val_team_2) {
- $value['second']['team'][] = $val_team_2['nickname'];
- }
- }
- $third = $this->getTeam($value['user_id'], 3);
- $value['third']['count'] = count($third['data']);
- $value['third']['team'] = [];
- if ($value['third']['count'] > 0) {
- foreach ($third['data'] as $val_team_3) {
- $value['third']['team'][] = $val_team_3['nickname'];
- }
- }
- $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']);
- $value['updated_at'] == 0 ? 'zzz' : date('Y-m-d H:i:s', $value['updated_at']);
- if ($value['old_parent_id'] == 0) {
- $value['parent_nickname'] = '总店';
- } else {
- $parent = User::findOne(['id' => $value['old_parent_id']]);
- $value['parent_nickname'] = $parent['nickname'] ?? '';
- }
- }
- $share_level = ShareLevel::find()->where([
- 'store_id' => $this->store_id,
- 'is_delete' => ShareLevel::SHARE_NOT_DELETE,
- 'status' => ShareLevel::STATUS_ON,
- ])->select('level id, name')->asArray()->all();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- 'share_level' => $share_level
- ],
- ];
- } else {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- }
- /**
- * 修改分销商等级
- */
- public function setShareLevel() {
- try {
- $id = $this->id;
- $level = $this->level;
- $share = Share::findOne($id);
- $share_level = null;
- if ($level > 0) {
- $share_level = ShareLevel::findOne([
- 'store_id' => $this->store_id,
- 'is_delete' => ShareLevel::SHARE_NOT_DELETE,
- 'status' => ShareLevel::STATUS_ON,
- 'level' => $level
- ]);
-
- if (!$share_level) {
- throw new \Exception('等级查询失败');
- }
- }
- $old_level = $share->level;
- $share->level = $share_level ? $share_level->level : $level;
- if ($share->save()) {
- $log = new ShareLevelLog();
- $log->level = $share->level;
- $log->old_level = $old_level;
- $log->type = ShareLevelLog::TYPE_ADMIN;
- $log->value = 0;
- $log->store_id = $this->store_id;
- $log->user_id = $share->user_id;
- $log->save();
- }
- return [
- 'code' => 0,
- 'msg' => '修改状态成功'
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage(),
- ];
- }
- }
- /**
- * 获取下级人员
- * @param $user_id
- * @param $level
- * @return array
- */
- public function getTeam($user_id, $level)
- {
- $firstQuery = User::find()->alias('f')->select('f.*')
- ->where(['f.is_delete' => User::USER_NOT_DELETE, 'f.old_parent_id' => $user_id, 'f.store_id' => $this->store_id]);
- $query = $firstQuery;
- if ($level > 1) {
- $secondQuery = User::find()->alias('s')->where(['s.is_delete' => User::USER_NOT_DELETE,
- 's.store_id' => $this->store_id])->innerJoin(['f' => $firstQuery], 'f.id=s.old_parent_id');
- $query = $secondQuery;
- if ($level > 2) {
- $thirdQuery = User::find()->alias('t')->where(['t.is_delete' => User::USER_NOT_DELETE,
- 't.store_id' => $this->store_id])->innerJoin(['s' => $secondQuery], 's.id=t.old_parent_id');
- $query = $thirdQuery;
- }
- }
- $list = $query->asArray()->all();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $list
- ];
- }
- }
|