ShareListForm.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\models\Order;
  9. use app\models\Share;
  10. use app\models\ShareLevel;
  11. use app\models\ShareLevelLog;
  12. use app\models\User;
  13. use app\models\SaasUser;
  14. use yii\base\Model;
  15. class ShareListForm extends Model
  16. {
  17. public $store_id;
  18. public $status;
  19. public $keyword;
  20. public $seller_comments;
  21. public $phone;
  22. public $platform;
  23. public $id;
  24. public $level;
  25. public function rules()
  26. {
  27. return [
  28. [['keyword', 'seller_comments', 'phone'], 'trim'],
  29. [['status', 'platform', 'id', 'level'], 'integer'],
  30. [['seller_comments', 'phone'], 'string'],
  31. ];
  32. }
  33. public function getList()
  34. {
  35. if ($this->validate()) {
  36. $query = Share::find()->alias('s')
  37. ->where(['s.is_delete' => Share::SHARE_NOT_DELETE, 's.store_id' => $this->store_id])
  38. ->leftJoin('{{%user}} u', 'u.id=s.user_id')
  39. ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
  40. ->andWhere(['u.is_delete' => User::USER_NOT_DELETE]);
  41. if ($this->keyword) {
  42. $query->andWhere([
  43. 'or',
  44. ['like', 's.name', $this->keyword],
  45. ['like', 'su.name', $this->keyword],
  46. ['like', 'u.nickname', $this->keyword],
  47. ]);
  48. }
  49. if ($this->status) {
  50. $query->andWhere(['=', 's.status', $this->status ]);
  51. } else {
  52. $query->andWhere(['in', 's.status', [Share::SHARE_NO_AUDIT, Share::SHARE_AUDIT_PASS]]);
  53. }
  54. if ($this->phone) {
  55. $query->andWhere(
  56. ['u.binding' => $this->phone]
  57. );
  58. }
  59. if ($this->platform == -1) {
  60. $query->andWhere(
  61. ['>','u.platform', -1]
  62. );
  63. } else {
  64. if ($this->platform) {
  65. $query->andWhere(
  66. ['u.platform' => $this->platform]
  67. );
  68. }
  69. }
  70. if ($this->status != '') {
  71. if ($this->status == Share::SHARE_NO_AUDIT || $this->status == Share::SHARE_AUDIT_PASS
  72. || $this->status == Share::SHARE_AUDIT_FAIL) {
  73. $query->andWhere(['s.status' => $this->status]);
  74. }
  75. }
  76. // TODO: 其他订单
  77. $orderCount = Order::find()->where([
  78. 'store_id' => $this->store_id, 'is_delete' => Order::IS_DELETE_FALSE])
  79. ->andWhere(['<>', 'trade_status', Order::ORDER_FLOW_CANCEL])
  80. ->andWhere('user_id = u.id')->select('count(1)');
  81. // $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->limit, 'page' => $this->page - 1]);
  82. // {
  83. // $orderCount = Order::find()->where([
  84. // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0, 'is_recycle' => 0
  85. // ])->andWhere('user_id = u.id')->select('count(1)');
  86. // $msOrderCount = MsOrder::find()->where([
  87. // 'store_id' => $this->store_id, 'is_delete' => 0, 'is_cancel' => 0
  88. // ])->andWhere('user_id = u.id')->select('count(1)');
  89. // $ptOrderCount = PtOrder::find()->where([
  90. // 'store_id' => $this->store_id, 'is_delete' => 0
  91. // ])->andWhere('user_id = u.id')->select('count(1)');
  92. // $yyOrderCount = YyOrder::find()->where([
  93. // 'store_id' => $this->store_id, 'is_delete' => 0
  94. // ])->andWhere('user_id = u.id')->select('count(1)');
  95. // }
  96. // $list = $query->orderBy('s.status ASC,s.addtime DESC')
  97. // ->select([
  98. // 's.*', 'u.nickname', 'u.avatar_url', 'u.platform', 'u.time', 'u.price', 'u.total_price', 'u.id user_id', 'u.parent_id',
  99. // 'order_count' => $orderCount, 'ms_order_count' => $msOrderCount, 'pt_order_count' => $ptOrderCount, 'yy_order_count' => $yyOrderCount,
  100. // 'parent_nickname' => User::find()->alias('parent')->where('parent.id = u.parent_id')->select('nickname')
  101. // ])
  102. // ->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]);
  103. $query->orderBy('s.status ASC,s.created_at DESC')
  104. ->andWhere(['and', ['is not', 'u.binding', null], ['<>', 'u.binding', ''], ['is not', 'su.mobile', null], ['<>', 'su.mobile', '']])
  105. ->select([
  106. 's.*', 'u.nickname', 'u.avatar_url', 'u.binding', 'u.platform', 'u.time', 'u.price', 'u.total_price',
  107. 'u.id user_id', 'u.parent_id', 'u.old_parent_id', 'order_count' => $orderCount
  108. ])->orderBy(['status' => SORT_ASC, 'total_price' => SORT_DESC]);
  109. $pagination = pagination_make($query);
  110. $list = $pagination['list'];
  111. foreach ($list as $key => &$value) {
  112. $value['level'] = (int)$value['level'];
  113. $share_level = ShareLevel::findOne(['store_id' => $this->store_id, 'is_delete' => ShareLevel::SHARE_NOT_DELETE, 'level' => $value['level']]);
  114. $value['level_name'] = $share_level->name;
  115. $first = $this->getTeam($value['user_id'], 1);
  116. $value['first']['count'] = count($first['data']);
  117. $value['first']['team'] = [];
  118. if ($value['first']['count'] > 0) {
  119. foreach ($first['data'] as $val_team_1) {
  120. $value['first']['team'][] = $val_team_1['nickname'];
  121. }
  122. }
  123. $second = $this->getTeam($value['user_id'], 2);
  124. $value['second']['count'] = count($second['data']);
  125. $value['second']['team'] = [];
  126. if ($value['second']['count'] > 0) {
  127. foreach ($second['data'] as $val_team_2) {
  128. $value['second']['team'][] = $val_team_2['nickname'];
  129. }
  130. }
  131. $third = $this->getTeam($value['user_id'], 3);
  132. $value['third']['count'] = count($third['data']);
  133. $value['third']['team'] = [];
  134. if ($value['third']['count'] > 0) {
  135. foreach ($third['data'] as $val_team_3) {
  136. $value['third']['team'][] = $val_team_3['nickname'];
  137. }
  138. }
  139. $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']);
  140. $value['updated_at'] == 0 ? 'zzz' : date('Y-m-d H:i:s', $value['updated_at']);
  141. if ($value['old_parent_id'] == 0) {
  142. $value['parent_nickname'] = '总店';
  143. } else {
  144. $parent = User::findOne(['id' => $value['old_parent_id']]);
  145. $value['parent_nickname'] = $parent['nickname'] ?? '';
  146. }
  147. }
  148. $share_level = ShareLevel::find()->where([
  149. 'store_id' => $this->store_id,
  150. 'is_delete' => ShareLevel::SHARE_NOT_DELETE,
  151. 'status' => ShareLevel::STATUS_ON,
  152. ])->select('level id, name')->asArray()->all();
  153. return [
  154. 'code' => 0,
  155. 'msg' => 'success',
  156. 'data' => [
  157. 'data' => $list,
  158. 'pageNo' => $pagination['pageNo'],
  159. 'totalCount' => $pagination['totalCount'],
  160. 'share_level' => $share_level
  161. ],
  162. ];
  163. } else {
  164. return [
  165. 'code' => 1,
  166. 'msg' => $this->getErrorSummary(false)[0],
  167. ];
  168. }
  169. }
  170. /**
  171. * 修改分销商等级
  172. */
  173. public function setShareLevel() {
  174. try {
  175. $id = $this->id;
  176. $level = $this->level;
  177. $share = Share::findOne($id);
  178. $share_level = null;
  179. if ($level > 0) {
  180. $share_level = ShareLevel::findOne([
  181. 'store_id' => $this->store_id,
  182. 'is_delete' => ShareLevel::SHARE_NOT_DELETE,
  183. 'status' => ShareLevel::STATUS_ON,
  184. 'level' => $level
  185. ]);
  186. if (!$share_level) {
  187. throw new \Exception('等级查询失败');
  188. }
  189. }
  190. $old_level = $share->level;
  191. $share->level = $share_level ? $share_level->level : $level;
  192. if ($share->save()) {
  193. $log = new ShareLevelLog();
  194. $log->level = $share->level;
  195. $log->old_level = $old_level;
  196. $log->type = ShareLevelLog::TYPE_ADMIN;
  197. $log->value = 0;
  198. $log->store_id = $this->store_id;
  199. $log->user_id = $share->user_id;
  200. $log->save();
  201. }
  202. return [
  203. 'code' => 0,
  204. 'msg' => '修改状态成功'
  205. ];
  206. } catch (\Exception $e) {
  207. return [
  208. 'code' => 1,
  209. 'msg' => $e->getMessage(),
  210. ];
  211. }
  212. }
  213. /**
  214. * 获取下级人员
  215. * @param $user_id
  216. * @param $level
  217. * @return array
  218. */
  219. public function getTeam($user_id, $level)
  220. {
  221. $firstQuery = User::find()->alias('f')->select('f.*')
  222. ->where(['f.is_delete' => User::USER_NOT_DELETE, 'f.old_parent_id' => $user_id, 'f.store_id' => $this->store_id]);
  223. $query = $firstQuery;
  224. if ($level > 1) {
  225. $secondQuery = User::find()->alias('s')->where(['s.is_delete' => User::USER_NOT_DELETE,
  226. 's.store_id' => $this->store_id])->innerJoin(['f' => $firstQuery], 'f.id=s.old_parent_id');
  227. $query = $secondQuery;
  228. if ($level > 2) {
  229. $thirdQuery = User::find()->alias('t')->where(['t.is_delete' => User::USER_NOT_DELETE,
  230. 't.store_id' => $this->store_id])->innerJoin(['s' => $secondQuery], 's.id=t.old_parent_id');
  231. $query = $thirdQuery;
  232. }
  233. }
  234. $list = $query->asArray()->all();
  235. return [
  236. 'code' => 0,
  237. 'msg' => 'success',
  238. 'data' => $list
  239. ];
  240. }
  241. }