, mall_id => ,], [user_id => , mall_id => ,] ] * * @var array */ protected static $upgradeAgentArr = []; public static function handle($mall_id, $user_id, $goods_id_arr, $order_id, $goods_price_arr = [], $bag_commission = 0, $from_type = '') { $t = \Yii::$app->db->beginTransaction(); try { $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic'); if (empty($configs['is_enable'])) throw new Exception('没开启云库存'); $upgrade_bag_list = CloudStockUpgradeBag::lists(['where' => [['mall_id' => $mall_id], ['status' => StatusEnum::ENABLED]], 'order' => 'level desc']); $cloud_stock_agent = CloudStockAgent::findOne(['user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($cloud_stock_agent)) { $cloud_stock_agent = new CloudStockAgent(); $cloud_stock_agent->user_id = $user_id; $cloud_stock_agent->mall_id = $mall_id; } $before_level = $cloud_stock_agent->level ?? 0; //购买升级礼包升级 $time = time(); if (!empty($upgrade_bag_list) && $from_type == Order::tableName()) { $level_up_give_stock_by_parent = $configs['level_up_give_stock_by_parent'] ?? 0; $level_up_give_stock_by_parent_type = $configs['level_up_give_stock_by_parent_type'] ?? 0; if($level_up_give_stock_by_parent_type==1){ self::upgradeBagUp($mall_id, $user_id, $order_id,$goods_id_arr, $upgrade_bag_list, $cloud_stock_agent, $time, $before_level, $level_up_give_stock_by_parent); }else{ GiftBagLogic::upgradeBagUpNew($mall_id, $user_id, $order_id, $goods_id_arr, $upgrade_bag_list, $cloud_stock_agent, $time, $before_level, $level_up_give_stock_by_parent, $goods_price_arr,$bag_commission); } } $level = 0; if (!empty($cloud_stock_agent->level)) $level = $cloud_stock_agent->level; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); //购买商品升级 if (!empty($level_list)) { self::conditionUp($user_id, $goods_id_arr, $cloud_stock_agent, $time, $before_level, $level_list); if ($from_type == Order::tableName()) { self::conditionGoodsUp($order_id, $goods_id_arr, $time); } // self::conditionStoreGoodsUp($order_id, $goods_id_arr, $time); } $t->commit(); // self::handleUpgradeAgentArr(); //触发升级上级代理商是否满足升级 $parent_agent_list = self::getUserParentAgentList($mall_id, $user_id); foreach ($parent_agent_list as $agent) { $level = 0; if (!empty($agent->level)) $level = $agent['level']; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); self::conditionUp($agent['user_id'], [], $agent, $time, $agent['before_level'], $level_list); } self::handleUpgradeAgentArr(); //触发升级事件 $event = new UpgradeEvent($mall_id); $data = [ 'id' => $order_id, 'mall_id' => $mall_id, 'user_id' => $user_id, ]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); $list = CloudStockIncreaseDetail::lists([ 'where' => [ ['user_id' => $user_id], ['changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE105], ['goods_id' => $goods_id_arr], ['mall_id' => $mall_id], ['order_id' => $order_id] ], ]); if (!empty($list)) { foreach ($list as $item) { $event = new CloudStockChangeSyncEvent($mall_id); $event_data = [ 'id' => $item['id'], 'type' => CloudStockEnum::STOCK_CHANGE_ADD, 'mall_id' => $mall_id, ]; \Yii::$app->services->events->dispatch($event, $event_data, $event->listeners); } } return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, $e->getMessage() . $e->getFile() . $e->getLine()); echo $exception; \Yii::error($exception); return false; } } public static function handleStoreOrder($mall_id, $user_id, $goods_id_arr, $order_id) { $t = \Yii::$app->db->beginTransaction(); try { $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic'); if (empty($configs['is_enable'])) throw new Exception('没开启云库存'); $cloud_stock_agent = CloudStockAgent::findOne(['user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($cloud_stock_agent)) { $cloud_stock_agent = new CloudStockAgent(); $cloud_stock_agent->user_id = $user_id; $cloud_stock_agent->mall_id = $mall_id; } $time = time(); $level = 0; if (!empty($cloud_stock_agent->level)) $level = $cloud_stock_agent->level; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); //购买商品升级 if (!empty($level_list)) { self::conditionStoreGoodsUp($order_id, $goods_id_arr, $time); } $t->commit(); self::handleUpgradeAgentArr(); //触发升级上级代理商是否满足升级 $parent_agent_list = self::getUserParentAgentList($mall_id, $user_id); foreach ($parent_agent_list as $agent) { $level = 0; if (!empty($agent->level)) $level = $agent['level']; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); self::conditionUp($agent['user_id'], [], $agent, $time, $agent['before_level'], $level_list); } self::handleUpgradeAgentArr(); //触发升级事件 $event = new UpgradeEvent($mall_id); $data = [ 'id' => $order_id, 'mall_id' => $mall_id, 'user_id' => $user_id, ]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, $e->getMessage() . $e->getFile() . $e->getLine()); echo $exception; \Yii::error($exception); return false; } } public static function conditionGoodsUp($order_id, $goods_id_arr, $time) { $orderInfo = Order::find()->where(['id' => $order_id, 'status' => StatusEnum::ENABLED]) ->select('id, mall_id, user_id, order_status')->asArray()->one(); if (empty($orderInfo)) { \Yii::$app->custom->logs('云库存购买商品升级失败:订单不存在', $order_id); return false; } $user_id = $orderInfo['user_id']; $mall_id = $orderInfo['mall_id']; $orderStatus = $orderInfo['order_status']; $cloud_stock_agent = CloudStockAgent::findOne(['user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($cloud_stock_agent)) { $cloud_stock_agent = new CloudStockAgent(); $cloud_stock_agent->user_id = $user_id; $cloud_stock_agent->mall_id = $mall_id; } $before_level = $cloud_stock_agent->level ?? 0; $level = 0; if (!empty($cloud_stock_agent->level)) $level = $cloud_stock_agent->level; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); $is_upgrade_pay = false; $is_upgrade = false; $upgrade_level = 0; $level_name = ''; if (empty($orderStatus)) { \Yii::$app->custom->logs('云库存购买商品升级失败:订单状态不存在', $orderStatus); } foreach ($level_list as $level) { // 未开购物升级 if (empty($level['upgrade_type_goods'])) continue; // 未开启升级 if (empty($level['upgrade_goods_list']) || empty($goods_id_arr)) continue; // 未设置升级条件 $upgrade_goods_list = json_decode($level['upgrade_goods_list'], true); // 判断订单条件 if ($upgrade_goods_list['buy_goods_type'] == 1 && $orderStatus == OrderStatusEnum::PAY) { // 订单支付 $is_upgrade_pay = true; } if ($upgrade_goods_list['buy_goods_type'] == 0 && $orderStatus == OrderStatusEnum::ACCOMPLISH) { // 订单完成 $is_upgrade_pay = true; } //原需求 // if ($upgrade_goods_list['goods_type'] == 2) { //指定商品 // $goods_id_exists = array_intersect($upgrade_goods_list['goods_ids'], $goods_id_arr); // if (empty($goods_id_exists)) continue; // 如果商品id不在升级商品列表中则不升级 // } //逻辑修改 $condition_num_map = !is_array($upgrade_goods_list['goods_list']) ? [] : array_column($upgrade_goods_list['goods_list'], 'condition_num', 'goods_id'); $extParams = [ 'is_custom_condition_num' => $upgrade_goods_list['is_custom_condition_num'] ?? 0, 'buy_goods_type' => $upgrade_goods_list['buy_goods_type'], 'condition_num_map' => $condition_num_map, 'mall_id' => $mall_id, 'user_id' => $user_id, ]; $res = UpgradeCondition::buyGoods($upgrade_goods_list['goods_type'], $goods_id_arr, $upgrade_goods_list['goods_ids'],$extParams); if($res !== true) continue; $upgrade_level = $level['level']; $level_name = $level['name']; $is_upgrade = true; break; } try { if ($is_upgrade && $is_upgrade_pay && $upgrade_level > $before_level) { $cloud_stock_agent->level = $upgrade_level; $cloud_stock_agent->before_level = $before_level; $cloud_stock_agent->upgrade_status = CloudStockEnum::UPGRADE_STATUS_BUY_GOODS; $cloud_stock_agent->upgrade_at = $time; $res = $cloud_stock_agent->save(); if ($res) { var_dump('升级成功'); self::updateQuota($cloud_stock_agent); var_dump('触发云库存升级短信:user_id:' . $cloud_stock_agent['user_id']); self::sendMessage($mall_id, $level_name, $cloud_stock_agent['user_id']); self::addUpgradeAgentToArr($mall_id, $user_id); } } } catch (\Exception $e) { \Yii::$app->custom->logs('云库存购买商品升级失败', $e->getMessage()); } } public static function conditionStoreGoodsUp($order_id, $goods_id_arr, $time) { $orderInfo = StoreOrder::find()->where(['id' => $order_id, 'status' => StatusEnum::ENABLED]) ->select('id, mall_id, store_id, user_id, order_status')->asArray()->one(); if (empty($orderInfo)) { \Yii::$app->custom->logs('云库存购买门店商品升级失败:订单不存在', $order_id); } $user_id = $orderInfo['user_id']; $mall_id = $orderInfo['mall_id']; $orderStatus = $orderInfo['order_status']; if (empty($orderStatus)) { \Yii::$app->custom->logs('云库存购买门店商品升级失败:订单状态不存在', $orderStatus); } $cloud_stock_agent = CloudStockAgent::findOne(['user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($cloud_stock_agent)) { $cloud_stock_agent = new CloudStockAgent(); $cloud_stock_agent->user_id = $user_id; $cloud_stock_agent->mall_id = $mall_id; } $before_level = $cloud_stock_agent->level ?? 0; $level = 0; if (!empty($cloud_stock_agent->level)) $level = $cloud_stock_agent->level; $level_list = CloudStockLevel::lists(['where' => [ ['mall_id' => $mall_id], ['>', 'level', $level], ['status' => StatusEnum::ENABLED] ], 'order' => 'level desc' ]); $is_upgrade_pay = false; $is_upgrade = false; $upgrade_level = 0; $mall_id = 0; $level_name = ''; foreach ($level_list as $level) { // 未开购物升级 if (empty($level['upgrade_type_store_goods'])) continue; // 未开启升级 if (empty($level['upgrade_store_goods_list']) || empty($goods_id_arr)) continue; // 未设置升级条件 $upgrade_goods_list = json_decode($level['upgrade_store_goods_list'], true); // 判断订单条件 if ($upgrade_goods_list['buy_store_goods_type'] == 1 && $orderStatus == OrderStatusEnum::PAY) { // 订单支付 $is_upgrade_pay = true; } elseif ($upgrade_goods_list['buy_store_goods_type'] == 0 && $orderStatus == OrderStatusEnum::ACCOMPLISH) { // 订单完成 $is_upgrade_pay = true; } else { continue; } if ($upgrade_goods_list['store_goods_type'] == 2) { //指定商品 $goods_id_exists = array_intersect($upgrade_goods_list['store_goods_ids'], $goods_id_arr); if (empty($goods_id_exists)) continue; // 如果商品id不在升级商品列表中则不升级 } $upgrade_level = $level['level']; $mall_id = $level['mall_id']; $level_name = $level['name']; $is_upgrade = true; break; } try { if ($is_upgrade && $is_upgrade_pay && $upgrade_level > $before_level) { $cloud_stock_agent->level = $upgrade_level; $cloud_stock_agent->before_level = $before_level; $cloud_stock_agent->upgrade_status = CloudStockEnum::UPGRADE_STATUS_BUY_STORE_GOODS; $cloud_stock_agent->upgrade_at = $time; $res = $cloud_stock_agent->save(); if ($res) { var_dump('升级成功'); self::updateQuota($cloud_stock_agent); var_dump('触发云库存升级短信:user_id:' . $cloud_stock_agent['user_id']); self::sendMessage($mall_id, $level_name, $cloud_stock_agent['user_id']); self::addUpgradeAgentToArr($mall_id, $user_id); } } } catch (\Exception $e) { \Yii::$app->custom->logs('云库存购买门店商品升级失败', $e->getMessage()); } } public static function getUserParentAgentList($mall_id, $agent_user_id) { $parent_id_arr = UserPartitionRelationship::getParentIdArr($agent_user_id); $parent_id_arr = array_reverse($parent_id_arr); $parent_agent_list = CloudStockAgent::lists(['where' => [['user_id' => $parent_id_arr], ['status' => StatusEnum::ENABLED]], 'index' => 'user_id'], false); $list = []; foreach ($parent_id_arr as $user_id) { if (isset($parent_agent_list[$user_id])) { $list[] = $parent_agent_list[$user_id]; } else { $model = new CloudStockAgent(); $model->loadDefaultValues(); $model->mall_id = $mall_id; $model->user_id = $user_id; $model->level = 0; $model->before_level = 0; $list[] = $model; } } return $list; } public static function upgradeBagUp($mall_id, $user_id, $order_id, $buy_goods_id_arr,$upgrade_bag_list, $cloud_stock_agent, $time, $before_level, $level_up_give_stock_by_parent) { $level = 0; $give_arr = []; foreach ($upgrade_bag_list as $item) { $goods_ids = []; if(!empty($item['goods_id'])){ if (!empty(intval($item['goods_id']))) { $goods_ids[] = intval($item['goods_id']); } else { $goods_ids = json_decode($item['goods_id'], true); } } $intersect_goods_ids = array_intersect($buy_goods_id_arr, $goods_ids);//升级商品id if (!empty($intersect_goods_ids)) { $level = $item['level']; break; } } $cloud_stock_level_model = CloudStockLevel::findOne(['mall_id' => $mall_id, 'level' => $level, 'status' => StatusEnum::ENABLED]); if (empty($cloud_stock_level_model)) return false; if ($cloud_stock_agent->level >= $level) return true; $cloud_stock_agent->level = $level; $cloud_stock_agent->upgrade_status = CloudStockEnum::UPGRADE_STATUS_GOODS; $cloud_stock_agent->upgrade_at = $time; $cloud_stock_agent->before_level = $before_level; $res = $cloud_stock_agent->save(); if ($res) { self::updateQuota($cloud_stock_agent); self::sendMessage($mall_id, $cloud_stock_level_model['name'], $cloud_stock_agent['user_id']); self::addUpgradeAgentToArr($mall_id, $user_id); } //赠送库存 foreach ($upgrade_bag_list as $item) { $goods_ids = []; if (!empty(intval($item['goods_id']))) { $goods_ids[] = intval($item['goods_id']); } else { $goods_ids = json_decode($item['goods_id'], true); } if (array_intersect($buy_goods_id_arr, $goods_ids)) { if(!empty($item['give_goods_num'])){ if (!empty(intval($item['give_goods_num']))) { $give_goods_num[] = intval($item['give_goods_num']); if (!empty($item['give_goods_id'])) { if (isset($give_arr[$item['give_goods_id']])) { $give_arr[$item['give_goods_id']] += $item['give_goods_num']; } else { $give_arr[$item['give_goods_id']] = $item['give_goods_num']; } } } else { $give_goods_num = json_decode($item['give_goods_num'], true); foreach ($give_goods_num as $give_goods) { if (isset($give_arr[$give_goods['goods_id']])) { $give_arr[$give_goods['goods_id']] += $give_goods['num']; } else { $give_arr[$give_goods['goods_id']] = $give_goods['num']; } } } } break; } } $goods_ids = array_keys($give_arr); $goods_list = CloudStockGoods::lists(['where' => [['goods_id' => $goods_ids], ['status' => StatusEnum::ENABLED]], 'index' => 'goods_id']); foreach ($give_arr as $goods_id => $num) { if (!empty($level_up_give_stock_by_parent)) { $price = 0; if (isset($goods_list[$goods_id])) { $agent_price = json_decode($goods_list[$goods_id]['agent_price'], true); $agent_price = array_column($agent_price, null, 'level'); $price = $agent_price[$cloud_stock_agent->level]['price']; } //走补货的逻辑 $order_no = StringHelper::generateOrderNo('CSFL'); $params = [ 'user_id' => $user_id, 'pay_money' => bcmul($price, $num, 2), 'order_no' => $order_no, 'is_pay' => CloudStockEnum::FILL_STATUS_PAY, 'goods_id' => $goods_id, 'num' => $num, ]; $order = CloudStockFillOrder::setData($mall_id, $params); if ($order) { $add_data = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'order_id' => $order_id, 'fill_order_id' => $order['id'], ]; CloudStockFillOrderRelation::setData($add_data); $obj = new FillOrderLogic(); $obj->handle($order); } var_dump($params); } else { //最初的方案 //生成代理商商品库存 $params = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'goods_id' => $goods_id, 'num' => $num, 'order_id' => $order_id, 'changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE105, 'changes_dir' => CloudStockEnum::STOCK_CHANGE_ADD, 'order_type' => CloudStockEnum::STOCK_ORDER_TYPE_USER, ]; $res = CloudStockAgentGoods::addData($params, $increase_detail); if (!$res) throw new \Exception(CloudStockAgentGoods::getStaticError()); CloudStockAgent::fixStock($mall_id,$user_id); } } } public static function conditionUp($user_id, $goods_id_arr, $cloud_stock_agent, $time, $before_level, $level_list) { $can_to_level = 0; $type = 1; $is_can_up = false; $mall_id = 0; $params['user_id'] = $user_id; $params['goods_id_arr'] = $goods_id_arr; $is_can_up = false; $level_name = ''; foreach ($level_list as $level_item) { $can_to_level = $level_item['level']; $level_name = $level_item['name']; $mall_id = $level_item['mall_id']; $params['mall_id'] = $mall_id; if (empty($level_item['upgrade_type_condition'])) continue; if (!empty($level_item['condition_type'])) { $condition_type = $level_item['condition_type']; $checked_condition_values = json_decode($level_item['checked_condition_values'], true); $checked_condition_keys = json_decode($level_item['checked_condition_keys'], true); foreach ($checked_condition_keys as $key) { $method = 'condition' . $key; $is_bool = self::$method($checked_condition_values, $key, $params); //满足其一 if ($condition_type == 1) { if ($is_bool) { $is_can_up = true; break; } else { $is_can_up = false; } } //满足所有 if ($condition_type == 2) { if ($is_bool) { $is_can_up = true; } else { $is_can_up = false; break; } } } if ($is_can_up) break; } } if ($is_can_up && $can_to_level > $cloud_stock_agent->level) { $cloud_stock_agent->level = $can_to_level; $cloud_stock_agent->upgrade_status = CloudStockEnum::UPGRADE_STATUS_CONDITION; $cloud_stock_agent->upgrade_at = $time; $cloud_stock_agent->before_level = $before_level; $res = $cloud_stock_agent->save(); if ($res) { var_dump('升级成功'); self::updateQuota($cloud_stock_agent); var_dump('触发云库存升级短信:user_id:' . $cloud_stock_agent['user_id']); self::sendMessage($mall_id, $level_name, $cloud_stock_agent['user_id']); self::addUpgradeAgentToArr($mall_id, $user_id); } } } public static function updateQuota($cloud_stock_agent) { $level = CloudStockLevel::findOne(['mall_id' => $cloud_stock_agent['mall_id'], 'level' => $cloud_stock_agent['level'], 'status' => [StatusEnum::ENABLED]]); if (!empty($level)) { $give_quota = json_decode($level['give_quota'], true); foreach ($give_quota as $item) { if (!empty($item['is_use']) && !empty($item['num'])) { $params = []; $params['mall_id'] = $cloud_stock_agent['mall_id']; $params['user_id'] = $cloud_stock_agent['user_id']; $params['num'] = $item['num']; $params['level'] = $item['level']; $res = CloudStockAgentQuota::setData($params); if ($res == false) throw new Exception(CloudStockAgentQuota::getStaticError()); } } } } public static function sendMessage($mall_id, $level_name, $user_id) { try { $SmsConfig = new Sms($mall_id); $easy_sms = $SmsConfig->easySms; $message = new LevelUpgradeMessage($mall_id, $level_name); $user = User::findOne(['id' => $user_id]); $easy_sms->send($user['mobile'], $message); } catch (NoGatewayAvailableException $e) { $res = $e->getExceptions(); if (!empty($res)) { foreach ($res as $exception) { if (is_string($exception->getMessage())) { var_dump('云库存升级短信发送失败:' . $exception->getMessage()); } } } } catch (\Exception $e) { var_dump('云库存升级短信发送失败:' . $e->getMessage()); } } protected static function condition0($checked_condition_values, $key, $params) { //购买指定商品 $upgrade = false; //取出等级升级商品id $value_goods_ids = []; if (isset($checked_condition_values[$key]['value'])) $value_goods_ids = array_column($checked_condition_values[$key]['value'], 'goods_id'); if (empty($value_goods_ids)) $upgrade = false; $goods_id_arr = $params['goods_id_arr']; if(!empty($params['user_id'])){ $user_id = $params['user_id']; //查询用户购买过的商品 $detail_list = OrderDetail::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->andWhere(['>','order_status',0])->select('goods_id')->groupBy('goods_id')->asArray()->all(); $goods_id_arr = array_column($detail_list, 'goods_id'); } foreach ($goods_id_arr as $goods_id) { if (in_array($goods_id, $value_goods_ids)) { $upgrade = true; break; } } return $upgrade; } protected static function condition1($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $offset = 1; $limit = 1000; $params['select'] = 'user_id,deep'; list($tree, $deep, $all_tree, $all_tree_arr) = UserPartitionRelationship::getTree($user_id); $level_arr = []; $use_level_arr = []; foreach ($checked_condition_values[$key]['value'] as $val) { if ($val['is_use']) $use_level_arr[] = $val['level']; } while ($list = UserPartitionRelationship::batchGetTeamData($offset, $limit, $tree, $params)) { $user_id_arr = array_column($list, 'user_id'); $agent_list = CloudStockAgent::lists(['where' => [['user_id' => $user_id_arr], ['level' => $use_level_arr], ['status' => StatusEnum::ENABLED]]]); foreach ($agent_list as $val) { if (isset($level_arr[$val['level']])) { $level_arr[$val['level']] += 1; } else { $level_arr[$val['level']] = 1; } } $offset++; } $upgrade = true; foreach ($checked_condition_values[$key]['value'] as $val) { if ($val['is_use'] && !empty($val['num'])) { if (empty($level_arr[$val['level']]) || $level_arr[$val['level']] < $val['num']) { $upgrade = false; continue; } } } return $upgrade; } protected static function condition2($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $value_goods_ids = array_column($checked_condition_values[$key]['value'], 'id'); //条件 radio_type=1 表示或(满足其一);radio_type=2 表示与(同时满足) $radio_type = isset($checked_condition_values[$key]["radio_type"]) ? $checked_condition_values[$key]["radio_type"] : 1; $fill_order_list = CloudStockFillOrder::lists(['where' => [['user_id' => $user_id], ['goods_id' => $value_goods_ids], ['is_pay' => 1]], 'select' => 'sum(num) as num,goods_id', 'group' => 'goods_id', 'index' => 'goods_id' ]); //0待付款 1待发货 2 已发货 3已收货 4已完成 -1申请售后 -2售后中 -3售后完成 -4 已关闭 -5撤销售后】 $order_detail_list = OrderDetail::lists(['where' => [['user_id' => $user_id], ['goods_id' => $value_goods_ids], ['order_status' => [1, 2, 3, 4, -5]]], 'select' => 'sum(num) as num,goods_id', 'group' => 'goods_id', 'index' => 'goods_id' ]); if ($radio_type == 1) { $upgrade = false; foreach ($checked_condition_values[$key]['value'] as $row) { $num = 0; if (!empty($fill_order_list[$row['id']]['num'])) $num += $fill_order_list[$row['id']]['num']; if (!empty($order_detail_list[$row['id']]['num'])) $num += $order_detail_list[$row['id']]['num']; if ($num >= $row['num']) { $upgrade = true; break; } } } else { $upgrade = true; if (empty($checked_condition_values[$key]['value'])) { $upgrade = false; } else { foreach ($checked_condition_values[$key]['value'] as $row) { $num = 0; if (!empty($fill_order_list[$row['id']])) $num += $fill_order_list[$row['id']]['num']; if (!empty($order_detail_list[$row['id']])) $num += $order_detail_list[$row['id']]['num']; if ($num < $row['num']) { $upgrade = false; break; } } } } return $upgrade; } protected static function condition3($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $nums = $checked_condition_values[$key]['nums'] ?? 0; $i = 1; $page_size = 1000; list($tree, $parent_deep, $all_tree, $all_tree_arr) = UserPartitionRelationship::getTree($user_id); $total_num = 0; while ($child_list = UserPartitionRelationship::find() ->where(['like', 'tree', $tree . ',%', false]) ->andWhere(['<>', 'user_id', $params['user_id']]) ->select('user_id') ->offset(($i - 1) * $page_size) ->groupBy('user_id')->limit($page_size)->all()) { $child_ids = array_column($child_list, 'user_id'); $num = CloudStockAgent::find()->where(['user_id' => $child_ids, 'status' => StatusEnum::ENABLED])->sum('fill_num'); if (!empty($num)) $total_num += $num; $i++; } $upgrade = false; if ($total_num >= $nums) $upgrade = true; return $upgrade; } protected static function condition4($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); $level_arr = []; $use_level_arr = []; $key_level = !empty($checked_condition_values[$key]['level']) ? $checked_condition_values[$key]['level'] : 0; $agent_user_ids = CloudStockAgent::find() ->where(['user_id' => $child_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>=', 'level', $key_level]) ->select('user_id') ->column(); $key_nums = !empty($checked_condition_values[$key]['nums']) ? $checked_condition_values[$key]['nums'] : 0; if (count($agent_user_ids) < $key_nums) return false; $upgrade = false; $c_nums = 0; foreach ($agent_user_ids as $child_user_id) { $d_child_ids = UserPartitionRelationship::getChildIdArr($child_user_id); $key_c_level = !empty($checked_condition_values[$key]['c_level']) ? $checked_condition_values[$key]['c_level'] : 0; $key_c_nums = !empty($checked_condition_values[$key]['c_nums']) ? $checked_condition_values[$key]['c_nums'] : 0; $d_agent_count = CloudStockAgent::find() ->where(['user_id' => $d_child_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>=', 'level', $key_c_level]) ->select('id') ->count(); if ($d_agent_count >= $key_c_nums) { $c_nums++; } if ($c_nums >= $key_nums) { $upgrade = true; break; } } return $upgrade; } protected static function condition5($checked_condition_values, $key, $params) { //未安装插件 if(!MallAddons::isInstall($params['mall_id'],AddonsEnum::ADDONS_NAME_DOUBLE_COPY)) return false; $user_id = $params['user_id']; if(!empty($checked_condition_values[$key]['self_level'])){ $doubleCopyUser = DoubleCopyUser::findOne(['user_id'=>$user_id,'status'=>StatusEnum::ENABLED]); if(!$doubleCopyUser || $doubleCopyUser['level'] < $checked_condition_values[$key]['self_level']){ return false; } } $child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); $level_arr = []; $use_level_arr = []; $key_level = !empty($checked_condition_values[$key]['level']) ? $checked_condition_values[$key]['level'] : 0; $key_nums = !empty($checked_condition_values[$key]['nums']) ? $checked_condition_values[$key]['nums'] : 0; $agent_user_ids = DoubleCopyUser::find() ->where(['user_id' => $child_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>=', 'level', $key_level]) ->select('user_id') ->column(); if (count($agent_user_ids) < $key_nums) return false; $c_child_ids = UserPartitionRelationship::getChildIdArr($user_id); $key_c_level = !empty($checked_condition_values[$key]['c_level']) ? $checked_condition_values[$key]['c_level'] : 0; $key_c_nums = !empty($checked_condition_values[$key]['c_nums']) ? $checked_condition_values[$key]['c_nums'] : 0; $c_agent_user_ids = DoubleCopyUser::find() ->where(['user_id' => $c_child_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>=', 'level', $key_c_level]) ->select('user_id') ->column(); if (count($c_agent_user_ids) < $key_c_nums) return false; return true; } protected static function condition6($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $value_goods_ids = array_column($checked_condition_values[$key]['value'], 'goods_id'); $fill_order_num = CloudStockFillOrder::find() ->where(['user_id'=>$user_id,'goods_id'=>$value_goods_ids,'is_pay'=>1]) ->select('num') ->sum('num') ?? 0; if($fill_order_num < $checked_condition_values[$key]['num']){ return false; } $child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1); $key_level = !empty($checked_condition_values[$key]['level']) ? $checked_condition_values[$key]['level'] : 0; $agent_user_ids = CloudStockAgent::find() ->where(['user_id' => $child_ids, 'status' => StatusEnum::ENABLED]) ->andWhere(['>=', 'level', $key_level]) ->select('user_id') ->column(); $key_nums = !empty($checked_condition_values[$key]['nums']) ? $checked_condition_values[$key]['nums'] : 0; if (count($agent_user_ids) < $key_nums) return false; return true; } protected static function condition7($checked_condition_values, $key, $params) { $user_id = $params['user_id']; $nums = $checked_condition_values[$key]['nums'] ?? 0; $pay_money = CloudStockFillOrder::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED, 'is_pay' => CloudStockEnum::FILL_STATUS_PAY])->sum('pay_money'); $pay_money = $pay_money ?? 0; $after_distribution_price = CloudStockBuyingOrder::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED, 'is_return' => 0])->sum('after_distribution_price'); $after_distribution_price = $after_distribution_price ?? 0; $after_distribution_price = $after_distribution_price + $pay_money; if ($after_distribution_price >= $nums) return true; return false; } /** * 添加升级代理到数组 * * @param int $mallId * @param int $userId * * @return void */ public static function addUpgradeAgentToArr(int $mallId, int $userId) { self::$upgradeAgentArr[] = ['mall_id' => $mallId, 'user_id'=>$userId]; } /** * 处理升级后的代理 * * @return void * @throws \Exception */ public static function handleUpgradeAgentArr() { foreach (self::$upgradeAgentArr as $k => $item) { // 升级后事件 $event = new \addons\CloudStock\common\events\user\AgentUpgradeAfterEvent($item['mall_id']); $data = ['mall_id' => $item['mall_id'], 'user_id'=>$item['user_id']]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); unset(self::$upgradeAgentArr[$k]); } } }