db->beginTransaction(); try { $mall_id = $order['mall_id']; $user_id = $order['user_id']; $upgrade_uid = 0; // 获取身份 $model = $identity_obj::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($model)) { $model = new $identity_obj; $model->mall_id = $mall_id; $model->user_id = $user_id; $model->level = 0; $model->upgrade_level_at = 0; $model->loadDefaultValues(); } $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['>=', 'level' , $model->level]; $params = []; $params['where'] = $where; $params['order'] = $order_by; // 获取等级 $level_list = $level_obj::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($level_list)) { foreach ($level_list as $level_arr) { $can_upgrade_level = $level_arr['level']; //开启购买升级商品 if ($level_arr['upgrade_type_goods']&&$level_arr['is_auto_upgrade']) { $upgrade_status = UpgradeEnum::UPGRADE_STATUS_GOODS; $goods_id_arr = Json::decode($level_arr['goods_ids'], true); $res = UpgradeCondition::buyGoods($level_arr['goods_type'], $buy_goods_id_arr, $goods_id_arr); if ($res) { //购买升级商品触发升级:0订单完成 1支付完成 if ($level_arr['buy_goods_type'] == 0 && $order['order_status'] == OrderStatusEnum::ACCOMPLISH) { $flag = true; break; } if ($level_arr['buy_goods_type'] == 1 && $order['order_status'] == OrderStatusEnum::PAY) { $flag = true; break; } } } } if ($flag) { // 记录升级日志 if ($upgrade_log_obj !== null) { $upgrade_log_obj->mall_id = $mall_id; $upgrade_log_obj->user_id = $user_id; $upgrade_log_obj->before_level = $model->level; $upgrade_log_obj->after_level = $can_upgrade_level; $upgrade_log_obj->upgrade_type = LevelUpgradeLogEnum::GOODS_UPGRADE; $upgrade_log_obj->order_id = $order['id']; $upgrade_log_obj->upgrade_condition = $goods_id_arr ?? []; $upgrade_log_obj->save(); } //因支持level==0,股东身份不存在时,upgrade_level_at==0 if($model->level==0){ if($model->upgrade_level_at==0||$can_upgrade_level>$model->level){ $model->level = $can_upgrade_level; $model->upgrade_status = $upgrade_status; $model->upgrade_level_at = time(); if (!$model->save()) throw new Exception("{用户ID:$user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."购物升级失败"); $upgrade_uid = $user_id; } }else{ if($model->level!=$can_upgrade_level){ $model->level = $can_upgrade_level; $model->upgrade_status = $upgrade_status; $model->upgrade_level_at = time(); if (!$model->save()) throw new Exception("{用户ID:$user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."购物升级失败"); $upgrade_uid = $user_id; } } } } $trans->commit(); return $upgrade_uid; } catch (Exception $e) { $trans->rollBack(); $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "购物升级失败"); $this->setError($exception); return false; } } /** * 购物升级执行 无等级 * 样式: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 string $order_by * @return bool | int */ public function executeNoLevel(string $identity_desc, object $identity_obj, array $order, $config) { $trans = Yii::$app->db->beginTransaction(); try { $mall_id = $order['mall_id']; $user_id = $order['user_id']; $upgrade_uid = 0; // 获取身份 $model = $identity_obj::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($model)) { $model = new $identity_obj; $model->mall_id = $mall_id; $model->user_id = $user_id; $model->loadDefaultValues(); // 获取等级 $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'); $flag = false; //开启购买升级商品 if ($config['upgrade_type_goods'] && $config['is_auto_upgrade']) { $goods_id_arr = Json::decode($config['goods_ids'], true); $res = UpgradeCondition::buyGoods($config['goods_type'], $buy_goods_id_arr, $goods_id_arr); if ($res) { //购买升级商品触发升级:0订单完成 1支付完成 if ($config['buy_goods_type'] == 0 && $order['order_status'] == OrderStatusEnum::ACCOMPLISH) { $flag = true; } if ($config['buy_goods_type'] == 1 && $order['pay_status'] == OrderStatusEnum::PAY) { $flag = true; } } } if ($flag) { if (!$model->save()) throw new Exception("{用户ID:$user_id},订单ID:{$order['id']}," . AddonsEnum::getAddonsNameMap($identity_desc) . "购物升级失败"); $upgrade_uid = $user_id; } } $trans->commit(); return $upgrade_uid; } catch (Exception $e) { $trans->rollBack(); $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "购物升级失败"); $this->setError($exception); return false; } } }