WechatVideoShopUpgradeCondition.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. <?php
  2. namespace addons\WechatVideoShop\common\models;
  3. use addons\WechatVideoShop\common\enums\WechatVideoShopEnums;
  4. use common\enums\StatusEnum;
  5. use common\models\common\CapitalLog;
  6. use common\models\common\UpgradeCondition;
  7. use common\models\user\UserPartitionRelationship;
  8. class WechatVideoShopUpgradeCondition extends UpgradeCondition
  9. {
  10. public static $wechat_video_shop_condition_ids = [22, 123, 124, 125, 126, 27, 28, 29, 30, 131, 132, 134, 135]; //微信视频小店(团队分红)升级条件可显示的条件id
  11. public static function getDataAttr()
  12. {
  13. $data = [
  14. [
  15. 'id' => 123,
  16. 'content' => '分享佣金金额满____元',
  17. 'remark' => '',
  18. 'type' => 'default',
  19. 'setting' => [
  20. ['type' => 'text', 'name' => 'wechat_video_shop_commission', 'default_val' => 0],
  21. ]
  22. ],
  23. [
  24. 'id' => 124,
  25. 'content' => '分享订单数量满____个',
  26. 'remark' => '',
  27. 'type' => 'default',
  28. 'setting' => [
  29. ['type' => 'text', 'name' => 'wechat_video_shop_order_num', 'default_val' => 0],
  30. ]
  31. ],
  32. [
  33. 'id' => 125,
  34. 'content' => '一级分享佣金金额满____元',
  35. 'remark' => '',
  36. 'type' => 'default',
  37. 'setting' => [
  38. ['type' => 'text', 'name' => 'direct_user_wechat_video_shop_commission', 'default_val' => 0],
  39. ]
  40. ],
  41. [
  42. 'id' => 126,
  43. 'content' => '一级分享订单数量满____个',
  44. 'remark' => '',
  45. 'type' => 'default',
  46. 'setting' => [
  47. ['type' => 'text', 'name' => 'direct_user_wechat_video_shop_order_num', 'default_val' => 0],
  48. ]
  49. ],
  50. [
  51. 'id' => 131,
  52. 'content' => '粉丝分销员人数满____人',
  53. 'remark' => '',
  54. 'type' => 'default',
  55. 'setting' => [
  56. ['type' => 'text', 'name' => 'fans_wechat_video_shop_num', 'default_val' => 0],
  57. ]
  58. ],
  59. [
  60. 'id' => 132,
  61. 'content' => '一级粉丝分销员人数满____人',
  62. 'remark' => '',
  63. 'type' => 'default',
  64. 'setting' => [
  65. ['type' => 'text', 'name' => 'direct_fans_wechat_video_shop_num', 'default_val' => 0],
  66. ]
  67. ],
  68. [
  69. 'id' => 134,
  70. 'content' => '直推分销员等级≥____数量____个',
  71. 'remark' => '',
  72. 'type' => 'default',
  73. 'setting' => [
  74. ['type' => 'select', 'name' => 'direct_wechat_video_shop_level', 'default_val' => '', 'source' => ['class' => WechatVideoShopLevel::class, 'method' => 'getListByUpgrade', 'key' => 'source_list']],
  75. ['type' => 'text', 'name' => 'direct_wechat_video_shop_level_num', 'default_val' => ''],
  76. ]
  77. ],
  78. [
  79. 'id' => 135,
  80. 'content' => '间推分销员等级≥____数量____个',
  81. 'remark' => '',
  82. 'type' => 'default',
  83. 'setting' => [
  84. ['type' => 'select', 'name' => 'indirect_wechat_video_shop_level', 'default_val' => '', 'source' => ['class' => WechatVideoShopLevel::class, 'method' => 'getListByUpgrade', 'key' => 'source_list']],
  85. ['type' => 'text', 'name' => 'indirect_wechat_video_shop_level_num', 'default_val' => ''],
  86. ]
  87. ],
  88. ];
  89. $tmp = parent::$data;
  90. foreach ($data as $datum) {
  91. $tmp[$datum['id']] = $datum;
  92. }
  93. return $tmp;
  94. }
  95. /**
  96. * @param $user_id
  97. * @param $agent_level_arr
  98. * @param $mall_id
  99. * @param $upgrade_level
  100. * @param $is_basic
  101. * @return bool
  102. */
  103. public static function check($user_id, $agent_level_arr, $mall_id = 0, $upgrade_level = 0, $is_basic = true)
  104. {
  105. if (empty($agent_level_arr['condition_type'])) return false;
  106. $condition_type = $agent_level_arr['condition_type'];
  107. $keys_arr = json_decode($agent_level_arr['checked_condition_keys'], true);
  108. $values_arr = json_decode($agent_level_arr['checked_condition_values'], true);
  109. $arr = [];//升级条件
  110. foreach ($values_arr as $K => $v) {
  111. $arr[$v['key']] = $v;
  112. }
  113. $is_return = false;
  114. sort($keys_arr);
  115. foreach ($keys_arr as $id) {
  116. $function = 'condition' . $id;
  117. $params['condition_data'] = static::getDataAttr();
  118. $params['user_id'] = $user_id;
  119. // if ($is_basic && in_array($id, [123, 124, 125, 126, 131, 132, 134, 135])) { // 这里需要的是不一样的用户ID
  120. // continue;
  121. // }
  122. $params['arr'] = $arr;
  123. $params['key'] = $id;
  124. $params['children_id_arr1'] = [];
  125. $params['children_id_arr2'] = [];
  126. $params['user_id_arr'] = [];
  127. $params['children_id_arr'] = [];
  128. $params['name1'] = '';
  129. $params['name2'] = '';
  130. $params['model_class'] = '';
  131. $params['data'] = [];
  132. $params['mall_id'] = $mall_id;
  133. $params['upgrade_level'] = $upgrade_level;
  134. if (!method_exists(static::class, $function)) continue;
  135. $is_bool = static::$function($params);
  136. //满足其一
  137. if ($condition_type == 1) {
  138. if ($is_bool) {
  139. $is_return = true;
  140. break;
  141. } else {
  142. $is_return = false;
  143. }
  144. }
  145. //满足所有
  146. if ($condition_type == 2) {
  147. if ($is_bool) {
  148. $is_return = true;
  149. } else {
  150. $is_return = false;
  151. break;
  152. }
  153. }
  154. }
  155. return $is_return;
  156. }
  157. // 从101开始
  158. /**
  159. * @desc:条件23
  160. * 分销员佣金金额满____元
  161. * @Author: hua
  162. * @Date: 2021/10/23
  163. * @Time: 15:41
  164. * @Copyright: copyright (c) 2021 广东七件事集团
  165. * @param $params
  166. * @return bool
  167. */
  168. protected static function condition123($params)
  169. {
  170. return static::upgrade123(
  171. $params['condition_data'][$params['key']]['setting'][0]['name'],
  172. $params['user_id'],
  173. $params['arr'],
  174. $params['key']
  175. );
  176. }
  177. /**
  178. * @desc:条件24
  179. * 分销员订单数量满____个
  180. * @Author: hua
  181. * @Date: 2021/10/23
  182. * @Time: 15:41
  183. * @Copyright: copyright (c) 2021 广东七件事集团
  184. * @param $params
  185. * @return bool
  186. */
  187. protected static function condition124($params)
  188. {
  189. return static::upgrade124(
  190. $params['condition_data'][$params['key']]['setting'][0]['name'],
  191. $params['user_id'],
  192. $params['arr'],
  193. $params['key']
  194. );
  195. }
  196. /**
  197. * @desc:一级分销员佣金金额满____元
  198. * @Author: hua
  199. * @Date: 2021/11/18
  200. * @Time: 16:39
  201. * @Copyright: copyright (c) 2021 广东七件事集团
  202. * @param $params
  203. * @return bool
  204. */
  205. protected static function condition125($params)
  206. {
  207. return static::upgrade125(
  208. $params['condition_data'][$params['key']]['setting'][0]['name'],
  209. $params['user_id'],
  210. $params['arr'],
  211. $params['key']
  212. );
  213. }
  214. /**
  215. * @desc:一级分销员订单数量满____个
  216. * @Author: hua
  217. * @Date: 2021/11/18
  218. * @Time: 16:43
  219. * @Copyright: copyright (c) 2021 广东七件事集团
  220. * @param $params
  221. * @return bool
  222. */
  223. protected static function condition126($params)
  224. {
  225. return static::upgrade124(
  226. $params['condition_data'][$params['key']]['setting'][0]['name'],
  227. $params['user_id'],
  228. $params['arr'],
  229. $params['key'],
  230. 1
  231. );
  232. }
  233. /**
  234. * @desc:粉丝分销员人数满____人
  235. * @Author: hua
  236. * @Date: 2021/11/18
  237. * @Time: 17:01
  238. * @Copyright: copyright (c) 2021 广东七件事集团
  239. * @param $params
  240. * @return bool
  241. */
  242. protected static function condition131($params)
  243. {
  244. return static::upgrade131(
  245. $params['condition_data'][$params['key']]['setting'][0]['name'],
  246. $params['user_id'],
  247. $params['arr'],
  248. $params['key']
  249. );
  250. }
  251. /**
  252. * @desc:一级粉丝分销员人数满____人
  253. * @Author: hua
  254. * @Date: 2021/11/18
  255. * @Time: 17:01
  256. * @Copyright: copyright (c) 2021 广东七件事集团
  257. * @param $params
  258. * @return bool
  259. */
  260. protected static function condition132($params)
  261. {
  262. $child_user_ids = WechatVideoShopOrder::find()->where(['parent_id' => $params['user_id']])
  263. ->groupBy('user_id')
  264. ->select('user_id')
  265. ->column();
  266. if (!empty($child_user_ids)) {
  267. $cnt = $params['arr'][$params['key']]['value'][$params['condition_data'][$params['key']]['setting'][0]['name']];
  268. $count = WechatVideoShopSharer::find()->where(['user_id' => $child_user_ids])
  269. ->andWhere(['status' => StatusEnum::ENABLED])->count();
  270. return $count >= $cnt;
  271. }
  272. return false;
  273. }
  274. /**
  275. * @desc:直推分销员等级____数量____个
  276. * @Author: hua
  277. * @Date: 2021/11/18
  278. * @Time: 17:14
  279. * @Copyright: copyright (c) 2021 广东七件事集团
  280. * @param $params
  281. * @return bool
  282. */
  283. protected static function condition134($params)
  284. {
  285. $child_user_ids = WechatVideoShopOrder::find()->where(['parent_id' => $params['user_id']])
  286. ->groupBy('user_id')
  287. ->select('user_id')
  288. ->column();
  289. if (!empty($child_user_ids)) {
  290. $level = $params['arr'][$params['key']]['value'][$params['condition_data'][$params['key']]['setting'][0]['name']];
  291. $c_cnt = $params['arr'][$params['key']]['value'][$params['condition_data'][$params['key']]['setting'][1]['name']];
  292. $cnt = WechatVideoShopSharer::find()->where(['user_id' => $child_user_ids])
  293. ->andWhere(['level' => $level])
  294. ->count();
  295. return $cnt >= $c_cnt;
  296. }
  297. return false;
  298. }
  299. /**
  300. * @desc:间推分销员等级____数量____个
  301. * @Author: hua
  302. * @Date: 2021/11/18
  303. * @Time: 17:14
  304. * @Copyright: copyright (c) 2021 广东七件事集团
  305. * @param $params
  306. * @return bool
  307. */
  308. protected static function condition135($params)
  309. {
  310. $child_user_ids = WechatVideoShopOrder::find()->where(['parent_id' => $params['user_id']])
  311. ->groupBy('user_id')
  312. ->select('user_id')
  313. ->column();
  314. if (!empty($child_user_ids)) {
  315. $child_user_ids1 = WechatVideoShopOrder::find()->where(['parent_id' => $child_user_ids])
  316. ->groupBy('user_id')
  317. ->select('user_id')
  318. ->column();
  319. if (!empty($child_user_ids1)) {
  320. $level = $params['arr'][$params['key']]['value'][$params['condition_data'][$params['key']]['setting'][0]['name']];
  321. $c_cnt = $params['arr'][$params['key']]['value'][$params['condition_data'][$params['key']]['setting'][1]['name']];
  322. $cnt = WechatVideoShopSharer::find()->where(['user_id' => $child_user_ids1])
  323. ->andWhere(['level' => $level])
  324. ->count();
  325. return $cnt >= $c_cnt;
  326. }
  327. }
  328. return false;
  329. }
  330. /**
  331. * @desc:条件23
  332. * 分销员佣金金额满____元
  333. * @Author: hua
  334. * @Date: 2021/10/23
  335. * @Time: 15:41
  336. * @Copyright: copyright (c) 2021 广东七件事集团
  337. * @param $name1
  338. * @param $user_id
  339. * @param $arr
  340. * @param $key
  341. * @return bool
  342. */
  343. public static function upgrade123($name1, $user_id, $arr, $key)
  344. {
  345. $is_bool = false;
  346. $total_commission = static::getWechatVideoShopCommission($user_id);
  347. if ($total_commission >= $arr[$key]['value'][$name1]) $is_bool = true;
  348. return $is_bool;
  349. }
  350. /**
  351. * @desc:条件24
  352. * 分销员订单数量满____个
  353. * @Author: hua
  354. * @Date: 2021/10/23
  355. * @Time: 15:41
  356. * @Copyright: copyright (c) 2021 广东七件事集团
  357. * @param $name1
  358. * @param $user_id
  359. * @param $arr
  360. * @param $key
  361. * @param int $capital_type 0 自己, 1 下级
  362. * @return bool
  363. */
  364. public static function upgrade124($name1, $user_id, $arr, $key, $capital_type = 0)
  365. {
  366. $is_bool = false;
  367. $counts = static::getWechatVideoShopCommissionOrderNum($user_id, $capital_type);
  368. if ($counts >= $arr[$key]['value'][$name1]) $is_bool = true;
  369. return $is_bool;
  370. }
  371. /**
  372. * @desc:一级分销员佣金金额满____元
  373. * @Author: hua
  374. * @Date: 2021/11/18
  375. * @Time: 16:39
  376. * @Copyright: copyright (c) 2021 广东七件事集团
  377. * @param $name1
  378. * @param $user_id
  379. * @param $arr
  380. * @param $key
  381. * @return bool
  382. */
  383. public static function upgrade125($name1, $user_id, $arr, $key)
  384. {
  385. $is_bool = false;
  386. $counts = static::getWechatVideoShopCommissionFirst($user_id);
  387. if ($counts >= $arr[$key]['value'][$name1]) $is_bool = true;
  388. return $is_bool;
  389. }
  390. /**
  391. * @desc:粉丝分销员人数满____人
  392. * @Author: hua
  393. * @Date: 2021/11/18
  394. * @Time: 17:01
  395. * @Copyright: copyright (c) 2021 广东七件事集团
  396. * @param $name1
  397. * @param $user_id
  398. * @param $arr
  399. * @param $key
  400. * @return bool
  401. */
  402. public static function upgrade131($name1, $user_id, $arr, $key)
  403. {
  404. $is_bool = false;
  405. $offset = 1;
  406. $limit = 1000;
  407. $total_counts = 0;
  408. $params['select'] = 'user_id';
  409. static::batchFunc($params,$user_id,$offset,$limit,function ($user_ids){
  410. return WechatVideoShopSharer::find()->where(['user_id' => $user_ids, 'status' => StatusEnum::ENABLED])->count();
  411. },$total_counts);
  412. if ($total_counts >= $arr[$key]['value'][$name1]) $is_bool = true;
  413. return $is_bool;
  414. }
  415. /**
  416. * @desc:分销员佣金
  417. * @Author: hua
  418. * @Date: 2021/11/18
  419. * @Time: 16:26
  420. * @Copyright: copyright (c) 2021 广东七件事集团
  421. * @param $user_ids
  422. * @return bool|int|mixed|string
  423. */
  424. protected static function getWechatVideoShopCommission($user_ids)
  425. {
  426. $total_commission = WechatVideoShopSharer::find()->where(['user_id' => $user_ids])->sum('total_commission');
  427. return $total_commission ?? 0;
  428. }
  429. /**
  430. * @desc:分销员订单数量
  431. * @Author: hua
  432. * @Date: 2021/11/18
  433. * @Time: 16:31
  434. * @Copyright: copyright (c) 2021 广东七件事集团
  435. * @param $user_ids
  436. * @param $capital_type
  437. * @return bool|int|string 分销员订单
  438. */
  439. protected static function getWechatVideoShopCommissionOrderNum($user_ids, $capital_type)
  440. {
  441. $counts = 0;
  442. // 取出当前用户下级
  443. if ($capital_type == 0) { // 自己下单
  444. return WechatVideoShopOrder::find()->where(['user_id' => $user_ids])
  445. ->andWhere(['is_pay' => StatusEnum::ENABLED])
  446. ->count();
  447. }
  448. // 下级下单
  449. $child_user_ids = WechatVideoShopOrder::find()->where(['parent_id' => $user_ids])
  450. ->andWhere(['is_pay' => StatusEnum::ENABLED])->groupBy('user_id')->select('user_id')->column();
  451. if (!empty($child_user_ids)) {
  452. return WechatVideoShopOrder::find()->where(['user_id' => $child_user_ids])
  453. ->andWhere(['is_pay' => StatusEnum::ENABLED])
  454. ->andWhere(['parent_id' => $user_ids])
  455. ->count();
  456. }
  457. return $counts;
  458. }
  459. /**
  460. * @desc:一级分销员佣金
  461. * @Author: hua
  462. * @Date: 2021/11/18
  463. * @Time: 16:31
  464. * @Copyright: copyright (c) 2021 广东七件事集团
  465. * @param $user_ids
  466. * @return bool|int|string 分销员订单
  467. */
  468. protected static function getWechatVideoShopCommissionFirst($user_ids)
  469. {
  470. $total = 0;
  471. // 取出当前用户下级
  472. $child_user_ids = WechatVideoShopOrder::find()->where(['parent_id' => $user_ids])
  473. ->andWhere(['is_pay' => StatusEnum::ENABLED])->groupBy('user_id')->select('user_id')->column();
  474. if (!empty($child_user_ids)) {
  475. return WechatVideoShopSharer::find()->where(['user_id' => $child_user_ids])
  476. ->sum('total_commission');
  477. }
  478. return $total;
  479. }
  480. public static function batchFunc($params, $user_id, $offset, $limit, $callback, &$num)
  481. {
  482. list($tree, $parent_deep, $all_tree, $all_tree_arr) = UserPartitionRelationship::getTree($user_id);
  483. while ($list = UserPartitionRelationship::batchGetTeamData($offset, $limit, $tree, $params)) {
  484. $user_id_arr = array_column($list, 'user_id');
  485. $result = call_user_func($callback, $user_id_arr);
  486. if (empty($result)) $result = 0;
  487. $num += $result;
  488. $offset++;
  489. }
  490. }
  491. }