| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- namespace addons\WechatVideoShop\common\logic;
- use addons\WechatVideoShop\common\models\WechatVideoShopUpgradeCondition;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\enums\UpgradeEnum;
- use common\helpers\FormatHelper;
- use common\models\user\UserPartitionRelationship;
- use common\traits\ErrorTrait;
- use Exception;
- use yii;
- class ConditionUpgradeLogic
- {
- use ErrorTrait;
- /**
- * 购物升级执行
- * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), (new AddonsBossLevel()), $order);
- * @Author: lun
- * @DateTime: 2021/11/18 0018 16:56
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $identity_desc - 用户身份描述
- * @param $identity_obj - 用户身份空对象
- * @param $level_obj - 用户等级空对象
- * @param $order
- * @param int $shopping_upgrade_uid 购物升级用户
- * @return bool | array
- */
- public function execute(string $identity_desc, object $identity_obj, object $level_obj, $order, $shopping_upgrade_uid = 0)
- {
- try {
- //开启条件升级
- $mall_id = $order['mall_id'];
- $user_id = $order['user_id'];
- $parent_id = $order['wechat_video_shop_parent_id'] ?? 0;
- // 获取基础配置
- $configs = \Yii::$app->services->setting->addons->get($mall_id, $identity_desc, 'basic');
- $upgrade_user_id_arr = UserPartitionRelationship::getParentIdArr($user_id); // 取上级
- if(empty($configs['is_open_level_limit']) || !empty($configs['is_open_level_limit']) && $user_id != $shopping_upgrade_uid)
- $upgrade_user_id_arr [] = $user_id;// 如果开启了逐级升级,并且购物升级就是本人则不能进行条件升级
- // if (!empty($parent_id) && !in_array($parent_id, $upgrade_user_id_arr)) { // 判断是否在其上级
- // $upgrade_user_id_arr[] = $parent_id;
- // }
- $upgrade_user_id_arr = array_reverse($upgrade_user_id_arr);
- $model_list = $identity_obj::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->all();
- $model_arr = $upgrade_user_ids = [];
- foreach ($upgrade_user_id_arr as $id){
- if(!empty($model_list[$id])) {
- $model_arr[] = $model_list[$id];
- }
- }
- if (empty($model_arr)) return [];
- $where = [];
- $where[] = ['mall_id' => $mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- $params = [];
- if($configs && isset($configs['is_open_level_limit']) && !empty($configs['is_open_level_limit'])){
- $params['order'] = 'level asc';
- $is_open_level_limit = true;
- }else{
- $params['order'] = 'level desc';
- $is_open_level_limit = false;
- }
- $params['where'] = $where;
- $level_list = $level_obj::lists($params);
- if (empty($level_list)) return [];
- foreach ($model_arr as $identity) {
- $flag = false;
- $can_upgrade_level = 0;
- $upgrade_status = 0;
- $upgrade_level = 0;// 升级次数
- foreach ($level_list as $identity_level_arr) {
- // 当前等级大于或等于可以升级的等级则直接退出
- if(!$is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- break;
- }
- if($is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- continue;
- }
- $can_upgrade_level = $identity_level_arr['level'];
- $upgrade_level ++;
- //开启条件升级
- if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) {
- $upgrade_status = UpgradeEnum::UPGRADE_STATUS_CONDITION;
- $res = WechatVideoShopUpgradeCondition::check($identity->user_id, $identity_level_arr, $mall_id, $identity_level_arr['level']);
- if ($res) {
- $flag = true;
- break;
- }
- }
- }
- if ($flag && $can_upgrade_level > $identity->level) {
- // 开启了逐级升级,跳级升级的用户无法升级
- if($is_open_level_limit && $upgrade_level > 1) continue;
- $identity->level = $can_upgrade_level;
- $identity->upgrade_status = $upgrade_status;
- $identity->upgrade_level_at = time();
- if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败");
- $upgrade_user_ids[] = $identity->user_id;
- }
- }
- return $upgrade_user_ids;
- // 这里走视频号关系链
- if (!empty($parent_id)) { // 上级不为空的情况下
- $parent = $identity_obj::getOne([
- ['user_id' => $parent_id],
- ['status' => StatusEnum::ENABLED]
- ]);
- $w_model_arr = [];
- if (!empty($parent)) {
- $w_model_arr[] = $parent;
- }
- foreach ($w_model_arr as $identity) {
- $flag = false;
- $can_upgrade_level = 0;
- $upgrade_status = 0;
- $upgrade_level = 0;// 升级次数
- foreach ($level_list as $identity_level_arr) {
- // 当前等级大于或等于可以升级的等级则直接退出
- if(!$is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- break;
- }
- if($is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- continue;
- }
- $can_upgrade_level = $identity_level_arr['level'];
- $upgrade_level ++;
- //开启条件升级
- if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) {
- $upgrade_status = UpgradeEnum::UPGRADE_STATUS_CONDITION;
- $res = WechatVideoShopUpgradeCondition::check($identity->user_id, $identity_level_arr,
- $mall_id, $identity_level_arr['level'], false);
- if ($res) {
- $flag = true;
- break;
- }
- }
- }
- if ($flag && $can_upgrade_level > $identity->level) {
- // 开启了逐级升级,跳级升级的用户无法升级
- if($is_open_level_limit && $upgrade_level > 1) continue;
- $identity->level = $can_upgrade_level;
- $identity->upgrade_status = $upgrade_status;
- $identity->upgrade_level_at = time();
- if (!$identity->save()) throw new Exception("视频号关系链 {用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败");
- $upgrade_user_ids[] = $identity->user_id;
- }
- }
- }
- return $upgrade_user_ids;
- } catch (Exception $e) {
- $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "条件升级失败");
- echo $exception;
- $this->setError($exception);
- Yii::error($exception);
- return false;
- }
- }
- protected function local()
- {
- }
- }
|