| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace addons\Store\common\logic\store;
- use addons\Store\common\enums\StoreEnum;
- use addons\Store\common\models\Store;
- use addons\Store\common\models\StoreOrder;
- use addons\Store\common\models\StoreEffectOrder;
- use addons\StoreEntryLimit\common\service\SettingService;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use common\models\mall\MallAddons;
- use common\models\user\User;
- use common\models\user\UserPartitionRelationship;
- class StoreEntryLimit
- {
- public static function check($user_id, $mall_id, $setting)
- {
- // 判断是否满足o2o门店的入驻条件
- $res = self::checkCount($user_id, $mall_id, $setting);
- if ($res === false) return false;
- // 再满足插件的入驻条件
- if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STORE_ENTRY_LIMIT)) {
- $service = (new SettingService());
- $entry_setting = $service->get($mall_id);
- if ($entry_setting['is_enable'] == 0) {
- // 应用没有开启,买任意门店的商品都可以
- return true;
- } else {
- // 应用开启
- // 判断直推下级是否满足条件
- $child_counts = UserPartitionRelationship::getChildCounts($user_id, 1); // 直推人数
- if ($child_counts < $entry_setting['invite_num']) {
- return false;
- }
- $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); //查询直推下级
- // 是否满足购买订单数量
- $i = 0;
- foreach ($direct_child_ids as $child_id) {
- $res = self::checkCount($child_id, $mall_id, $setting);
- if ($res === false) continue;
- $i++;
- if ($i >= $setting['buy_store_num']) {
- return true;
- }
- }
- return false;
- }
- }
- return true;
- }
- /**
- * 检查用户是否满足入驻条件
- * @param $user_id
- * @param $mall_id
- * @param $setting
- * @return bool
- */
- public static function checkCount($user_id, $mall_id, $setting)
- {
- $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();
- if ($store_count < $setting['buy_store_num']) {
- return false;
- }
- return true;
- }
- public static function getStoreList($mall_id, $limit = 10, $ignore_ids = [])
- {
- $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]);
- if ($ignore_ids) {
- $list_query->andWhere(['not in', 's.id', $ignore_ids]);
- }
- $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();
- return $list;
- }
- public static function getSpecailStoreList($user_id, $mall_id, $limit = 10)
- {
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
- if ($parent_id_arr) {
- $parent_id_arr = array_reverse($parent_id_arr);
- $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();
- }
- $list = $list ?? [];
- // $length = count($list);
- // if ($length < $limit) {
- // $ignore_ids = array_column($list, 'id');
- // $child_ids = UserPartitionRelationship::getChildIdArr($user_id);
- // $child_ids = Store::find()->where(['user_id' => $child_ids, 'check_status' => StoreEnum::CHECK_ADOPT, 'status' => StatusEnum::ENABLED])->select('id')->column();
- // $ignore_ids = array_merge($ignore_ids, $child_ids);
- // $platform_list = self::getStoreList($mall_id, $limit - $length, $ignore_ids);
- // $platform_list = $platform_list ?? [];
- // $list = array_merge($list, $platform_list);
- // }
- return $list;
- }
- public static function getMode3($mall_id, $parent_id, $settings)
- {
- $mode_3_text = '任意';
- $mode_3_url = 1;
- $is_agree = 0;
- $recommend_user = [];
- $other_condition_text = '';
- if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STORE_ENTRY_LIMIT)) {
- $service = (new SettingService());
- $entry_setting = $service->get($mall_id);
- if ($entry_setting['is_enable'] == 1) {
- $mode_3_text = '就近';
- $mode_3_url = 2;
- if ($entry_setting['recommend_user']) {
- $recommend_user_obj = User::findOne(['id' => $entry_setting['recommend_user']]);
- if ($parent_id == 0) {
- $is_agree = 1;
- $recommend_user = [
- 'text' => '若需要入驻门店,请先成为 ' . ($recommend_user_obj->nickname ?? '') . ' 的好友,点击“同意”视为确认',
- 'user_id' => $entry_setting['recommend_user'],
- ];
- }
- }
- if ($entry_setting['invite_num'] > 0) {
- $other_condition_text = "必须有{$entry_setting['invite_num']}个好友以上,且至少{$entry_setting['invite_num']}个好友在就近{$settings['buy_store_num']}家门店中各产生{$settings['finish_order_num']}张已完成订单";
- }
- }
- }
- return [
- 'text' => "购买{$mode_3_text}{$settings['buy_store_num']}家门店商品,且每家产生{$settings['finish_order_num']}笔已完成订单后再入驻",
- 'url_type' => $mode_3_url,
- 'other_condition_text' => $other_condition_text,
- 'recommend_user' => $recommend_user,
- 'is_agree' => $is_agree,
- ];
- }
- }
|