db->beginTransaction(); try { $upgrade_uids = []; $user_id = $order['user_id']; $mall_id = $order['mall_id']; $order_by = 'level desc'; if (MallAddons::isInstall($mall_id, DistributionEnum::ADDONS_NAME) == 0) return true; $setting = \Yii::$app->services->setting->addons->get($mall_id, DistributionEnum::ADDONS_NAME, 'basic'); //开启购买升级商品 $buy_uid = $this->buyGoodsUpgrade($mall_id, $order, $user_id, $order_by,$setting, (new DistributionLevelUpgradeLog())); if (!empty($buy_uid)) $upgrade_uids[] = $buy_uid; //开启条件升级 $cond_upgrade = new ConditionUpgradeLogic(); $cond_uids = $cond_upgrade->execute('Distribution', (new Distribution()), (new DistributionLevel()), $order, $buy_uid, (new DistributionLevelUpgradeLog())); if (!empty($cond_uids)) $upgrade_uids = array_merge($upgrade_uids, $cond_uids); $t->commit(); // 触发升级礼包 if ($upgrade_uids && MallAddons::isInstall($mall_id,AddonsEnum::ADDONS_NAME_UPGRADEGIFT)) { $gift['mall_id'] = $mall_id; $gift['user_ids'] = implode(',', $upgrade_uids); $gift['gift_type'] = AddonsEnum::ADDONS_NAME_DISTRIBUTION; \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $gift, UpgradeGiftListener::class, 'async_handle'); } } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, 'Distribution:Upgrage->execute,err:' . $e->getMessage()); echo $exception; \Yii::error($exception); } } /** * @desc:购买商品升级 * @Author: hua * @Date: 2021/11/2 * @Time: 10:58 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $order * @param $user_id * @param $order_by * @param $setting * @return false | int */ private function buyGoodsUpgrade($mall_id, $order, $user_id, $order_by,$setting, object $upgrade_log_obj) { $order_id = $order['id']; $upgrade_uid = 0; $distribution_model = Distribution::findOne(['user_id' => $user_id, 'mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]); if (empty($distribution_model)) { // if(empty($setting['is_apply'])) {//成为分销商的条件,1:申请;0无条件 $user = User::findOne($user_id); if($user->is_inviter){ $distribution_model = new Distribution(); $distribution_model->mall_id = $mall_id; $distribution_model->user_id = $user_id; $distribution_model->level = 0; $distribution_model->upgrade_level_at = 0; }else{ return []; } // } } $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['>', 'level', $distribution_model->level??0]; $params = []; $params['where'] = $where; $params['order'] = $order_by; $distribution_level_list = DistributionLevel::lists($params); $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['order_id' => $order['id']]; $where[] = ['user_id' => $user_id]; $params = []; $params['where'] = $where; $order_detail_list = OrderDetail::lists($params); $buy_goods_id_arr = array_column($order_detail_list, 'goods_id'); $can_upgrade_level = 0; $upgrade_status = 0; $flag = false; //开启购买升级商品 if (!empty($distribution_level_list)) { foreach ($distribution_level_list as $distribution_level_arr) { $can_upgrade_level = $distribution_level_arr['level']; //开启购买升级商品 if ($distribution_level_arr['upgrade_type_goods'] && $distribution_level_arr['is_auto_upgrade']) { $upgrade_status = DistributionEnum::UPGRADE_STATUS_GOODS; $goods_id_arr = json_decode($distribution_level_arr['goods_ids'], true); $level_goods_list = json_decode($distribution_level_arr['goods_list'], true); $condition_num_map = !is_array($level_goods_list) ? [] : array_column($level_goods_list, 'condition_num', 'id'); $extParams = [ 'is_custom_condition_num' => $distribution_level_arr['is_custom_condition_num'] ?? 0, 'buy_goods_type' => $distribution_level_arr['buy_goods_type'], 'condition_num_map' => $condition_num_map, 'mall_id' => $mall_id, 'user_id' => $user_id, ]; $res = UpgradeCondition::buyGoods($distribution_level_arr['goods_type'], $buy_goods_id_arr, $goods_id_arr, $extParams); if ($res) { //购买升级商品触发升级:0订单完成 1下单完成 if ($order['order_status'] == OrderStatusEnum::ACCOMPLISH) { if ($distribution_level_arr['buy_goods_type'] == 0) { $flag = true; break; } } else { if ($distribution_level_arr['buy_goods_type'] == 1 && $order['pay_status'] == OrderStatusEnum::PAY) { $flag = true; break; } } } } } if ($flag && $can_upgrade_level > $distribution_model->level) { $original_identity_level = $distribution_model->level; $distribution_model->level = $can_upgrade_level; $distribution_model->upgrade_status = $upgrade_status; $distribution_model->upgrade_level_at = time(); if (!$distribution_model->save()) { \Yii::error("{user_id:$user_id}-{order_id:$order_id}" . ',分销商升级,失败'); return false; } $upgrade_uid = $user_id; if ($upgrade_log_obj !== null) { $upgrade_log_obj_clone = clone $upgrade_log_obj; $upgrade_log_obj_clone->mall_id = $mall_id; $upgrade_log_obj_clone->user_id = $distribution_model->user_id; $upgrade_log_obj_clone->before_level = $original_identity_level; $upgrade_log_obj_clone->after_level = $can_upgrade_level; $upgrade_log_obj_clone->upgrade_type = LevelUpgradeLogEnum::CONDITION_UPGRADE; $upgrade_log_obj_clone->order_id = $order['id']; $upgrade_log_obj_clone->upgrade_condition = $distribution_level_arr ?? []; $upgrade_log_obj_clone->save(); } } } return $upgrade_uid; } /** * @desc:条件升级 * @Author: hua * @Date: 2021/11/2 * @Time: 10:58 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $user_id * @param $order * @param $order_by * @param $setting */ private function conditionUpgrade($mall_id, $user_id, $order, $order_by,$setting) { //开启条件升级 // $upgrade_user_id_arr = UserRelationship::getParentIdArr($user_id); $upgrade_user_id_arr = UserPartitionRelationship::getParentIdArr($user_id); $upgrade_user_id_arr [] = $user_id; $upgrade_user_id_arr = array_reverse($upgrade_user_id_arr); $distribution_list = Distribution::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->all(); $distribution_arr = $upgrade_user_ids = []; foreach ($upgrade_user_id_arr as $id){ if(!empty($distribution_list[$id])){ $distribution_arr[] = $distribution_list[$id]; }else{ // if(empty($setting['is_apply'])){//成为分销商的条件,1:申请;0无条件 $user = User::findOne($id); if($user->is_inviter){//并且具有推广资格 $distribution = new Distribution(); $distribution->mall_id = $mall_id; $distribution->user_id = $id; $distribution->level = 0; $distribution->upgrade_level_at=0; $distribution_arr[] = $distribution; }else{ continue; } // } } } foreach ($distribution_arr as $distribution) { $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['>', 'level', $distribution->level??0]; $params = []; $params['where'] = $where; $params['order'] = $order_by; $distribution_level_list = DistributionLevel::lists($params); $flag = false; $can_upgrade_level = 0; $upgrade_status = 0; if ($distribution_level_list) { foreach ($distribution_level_list as $distribution_level_arr) { $can_upgrade_level = $distribution_level_arr['level']; //开启条件升级 if ($distribution_level_arr['upgrade_type_condition'] && $distribution_level_arr['is_auto_upgrade']) { $upgrade_status = DistributionEnum::UPGRADE_STATUS_CONDITION; $res = UpgradeCondition::check($distribution->user_id, $distribution_level_arr, $mall_id, $distribution_level_arr['level']); if ($res) { $flag = true; break; } } } } if ($flag && $can_upgrade_level > $distribution->level) { $order_id = $order['id']; $distribution->level = $can_upgrade_level; $distribution->upgrade_status = $upgrade_status; $distribution->upgrade_level_at = time(); if (!$distribution->save()) { \Yii::error("{user_id:$distribution->user_id}-{order_id:$order_id}" . ',分销商升级,失败'); } else { $upgrade_user_ids[] = $distribution->user_id; } } } return $upgrade_user_ids; } }