StoreEntryLimit.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace addons\Store\common\logic\store;
  3. use addons\Store\common\enums\StoreEnum;
  4. use addons\Store\common\models\Store;
  5. use addons\Store\common\models\StoreOrder;
  6. use addons\Store\common\models\StoreEffectOrder;
  7. use addons\StoreEntryLimit\common\service\SettingService;
  8. use common\enums\AddonsEnum;
  9. use common\enums\OrderStatusEnum;
  10. use common\enums\StatusEnum;
  11. use common\models\mall\MallAddons;
  12. use common\models\user\User;
  13. use common\models\user\UserPartitionRelationship;
  14. class StoreEntryLimit
  15. {
  16. public static function check($user_id, $mall_id, $setting)
  17. {
  18. // 判断是否满足o2o门店的入驻条件
  19. $res = self::checkCount($user_id, $mall_id, $setting);
  20. if ($res === false) return false;
  21. // 再满足插件的入驻条件
  22. if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STORE_ENTRY_LIMIT)) {
  23. $service = (new SettingService());
  24. $entry_setting = $service->get($mall_id);
  25. if ($entry_setting['is_enable'] == 0) {
  26. // 应用没有开启,买任意门店的商品都可以
  27. return true;
  28. } else {
  29. // 应用开启
  30. // 判断直推下级是否满足条件
  31. $child_counts = UserPartitionRelationship::getChildCounts($user_id, 1); // 直推人数
  32. if ($child_counts < $entry_setting['invite_num']) {
  33. return false;
  34. }
  35. $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); //查询直推下级
  36. // 是否满足购买订单数量
  37. $i = 0;
  38. foreach ($direct_child_ids as $child_id) {
  39. $res = self::checkCount($child_id, $mall_id, $setting);
  40. if ($res === false) continue;
  41. $i++;
  42. if ($i >= $setting['buy_store_num']) {
  43. return true;
  44. }
  45. }
  46. return false;
  47. }
  48. }
  49. return true;
  50. }
  51. /**
  52. * 检查用户是否满足入驻条件
  53. * @param $user_id
  54. * @param $mall_id
  55. * @param $setting
  56. * @return bool
  57. */
  58. public static function checkCount($user_id, $mall_id, $setting)
  59. {
  60. $store_count = StoreEffectOrder::find()->alias('eo')->join('INNER JOIN', StoreOrder::tableName() . ' o', 'eo.order_id = o.id')->where(['eo.user_id' => $user_id, 'eo.mall_id' => $mall_id, 'eo.status' => StatusEnum::ENABLED, 'o.status' => StatusEnum::ENABLED, 'o.order_status' => OrderStatusEnum::ACCOMPLISH])->select('eo.store_id, COUNT(*) as count')->having('count >= :limit', [':limit' => $setting['finish_order_num']])->groupBy('eo.store_id')->count();
  61. if ($store_count < $setting['buy_store_num']) {
  62. return false;
  63. }
  64. return true;
  65. }
  66. public static function getStoreList($mall_id, $limit = 10, $ignore_ids = [])
  67. {
  68. $list_query = Store::find()->alias('s')->join('INNER JOIN', User::tableName() . ' u', 'u.id = s.user_id')->where(['s.status' => StatusEnum::ENABLED, 'u.status' => StatusEnum::ENABLED, 's.check_status' => StoreEnum::CHECK_ADOPT, 's.mall_id' => $mall_id, 'u.parent_id' => 0]);
  69. if ($ignore_ids) {
  70. $list_query->andWhere(['not in', 's.id', $ignore_ids]);
  71. }
  72. $list = $list_query->select('s.id, s.store_name, s.logo_img, s.sales_volume, s.praise')->orderBy('s.created_at desc')->limit($limit)->asArray()->all();
  73. return $list;
  74. }
  75. public static function getSpecailStoreList($user_id, $mall_id, $limit = 10)
  76. {
  77. $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
  78. if ($parent_id_arr) {
  79. $parent_id_arr = array_reverse($parent_id_arr);
  80. $list = Store::find()->where(['user_id' => $parent_id_arr, 'status' => StatusEnum::ENABLED, 'check_status' => StoreEnum::CHECK_ADOPT])->select('id, store_name, logo_img, sales_volume, praise')->orderBy(new \yii\db\Expression("FIELD(user_id, " . implode(',', $parent_id_arr) . ")"))->limit($limit)->asArray()->all();
  81. }
  82. $list = $list ?? [];
  83. // $length = count($list);
  84. // if ($length < $limit) {
  85. // $ignore_ids = array_column($list, 'id');
  86. // $child_ids = UserPartitionRelationship::getChildIdArr($user_id);
  87. // $child_ids = Store::find()->where(['user_id' => $child_ids, 'check_status' => StoreEnum::CHECK_ADOPT, 'status' => StatusEnum::ENABLED])->select('id')->column();
  88. // $ignore_ids = array_merge($ignore_ids, $child_ids);
  89. // $platform_list = self::getStoreList($mall_id, $limit - $length, $ignore_ids);
  90. // $platform_list = $platform_list ?? [];
  91. // $list = array_merge($list, $platform_list);
  92. // }
  93. return $list;
  94. }
  95. public static function getMode3($mall_id, $parent_id, $settings)
  96. {
  97. $mode_3_text = '任意';
  98. $mode_3_url = 1;
  99. $is_agree = 0;
  100. $recommend_user = [];
  101. $other_condition_text = '';
  102. if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STORE_ENTRY_LIMIT)) {
  103. $service = (new SettingService());
  104. $entry_setting = $service->get($mall_id);
  105. if ($entry_setting['is_enable'] == 1) {
  106. $mode_3_text = '就近';
  107. $mode_3_url = 2;
  108. if ($entry_setting['recommend_user']) {
  109. $recommend_user_obj = User::findOne(['id' => $entry_setting['recommend_user']]);
  110. if ($parent_id == 0) {
  111. $is_agree = 1;
  112. $recommend_user = [
  113. 'text' => '若需要入驻门店,请先成为 ' . ($recommend_user_obj->nickname ?? '') . ' 的好友,点击“同意”视为确认',
  114. 'user_id' => $entry_setting['recommend_user'],
  115. ];
  116. }
  117. }
  118. if ($entry_setting['invite_num'] > 0) {
  119. $other_condition_text = "必须有{$entry_setting['invite_num']}个好友以上,且至少{$entry_setting['invite_num']}个好友在就近{$settings['buy_store_num']}家门店中各产生{$settings['finish_order_num']}张已完成订单";
  120. }
  121. }
  122. }
  123. return [
  124. 'text' => "购买{$mode_3_text}{$settings['buy_store_num']}家门店商品,且每家产生{$settings['finish_order_num']}笔已完成订单后再入驻",
  125. 'url_type' => $mode_3_url,
  126. 'other_condition_text' => $other_condition_text,
  127. 'recommend_user' => $recommend_user,
  128. 'is_agree' => $is_agree,
  129. ];
  130. }
  131. }