| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- <?php
- namespace addons\Agent\common\logic;
- use addons\Agent\common\enums\AgentEnum;
- use addons\Agent\common\event\AgentUpgradeAfterEvent;
- use addons\Agent\common\models\Agent;
- use addons\Agent\common\models\AgentLevelUpgradeLog;
- use common\enums\AddonsEnum;
- use common\enums\LevelUpgradeLogEnum;
- use common\enums\StatusEnum;
- use common\enums\UpgradeEnum;
- use common\helpers\FormatHelper;
- use common\models\common\UpgradeCondition;
- use common\models\user\UserPartitionRelationship;
- use common\traits\ErrorTrait;
- use Yii;
- use Exception;
- /**
- * Agent 条件升级
- * @Author lun
- * @DateTime 2021-11-16 19:07:32
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class ConditionUpgrade extends \common\logic\common\ConditionUpgrade {
- use ErrorTrait;
- /**
- * 购物升级执行
- *
- * @Author: lun
- * @DateTime: 2021/11/18 0018 16:56
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $identity_desc - 用户身份描述
- * @param $identity_obj - 用户身份空对象
- * @param $level_obj - 用户等级空对象
- * @param array $order
- * @param string $order_by
- * @return bool | array
- */
- public function execute(string $identity_desc, object $identity_obj, object $level_obj, array $order, string $order_by = 'level desc', $upgrade_log_obj = null)
- {
- try {
- if($identity_desc != AddonsEnum::ADDONS_NAME_AGENT) return false;
- //开启条件升级
- $mall_id = $order['mall_id'];
- $user_id = $order['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);
- $more_setting = \Yii::$app->services->setting->addons->get($mall_id, AgentEnum::ADDONS_NAME, 'more');
- $is_apply = $more_setting['is_apply'] ?? 0;
- if($is_apply){
- foreach($upgrade_user_id_arr as $key => $uid){
- $check = Agent::getUpgradeContainSelf($mall_id,$uid);
- if(!$check) unset($upgrade_user_id_arr[$key]);
- }
- }
- $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(!isset($model_list[$id])){
- }
- if(!empty($model_list[$id])) {
- $model_arr[] = $model_list[$id];
- }else{
- $model = new $identity_obj;
- $model->mall_id = $mall_id;
- $model->user_id = $id;
- $model->level = 0;
- $model->upgrade_level_at = 0;
- $model_arr[] = $model;
- }
- }
- foreach ($model_arr as $identity) {
- $where = [];
- $where[] = ['mall_id' => $mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- $where[] = ['>', 'level' , $identity->level];
- $params = [];
- $params['where'] = $where;
- $params['order'] = $order_by;
- $before_level = $identity->level;
- $level_list = $level_obj::lists($params);
- $flag = false;
- $can_upgrade_level = 0;
- $upgrade_status = 0;
- if($level_list){
- foreach ($level_list as $identity_level_arr) {
- $can_upgrade_level = $identity_level_arr['level'];
- //开启条件升级
- if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) {
- $upgrade_status = UpgradeEnum::UPGRADE_STATUS_CONDITION;
- $res = UpgradeCondition::check($identity->user_id, $identity_level_arr, $mall_id, $identity_level_arr['level'],$order['id']);
- if ($res) {
- $flag = true;
- break;
- }
- }
- }
- }
- if ($flag && $can_upgrade_level > $identity->level) {
- // 记录升级日志
- 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 = $identity->user_id;
- $upgrade_log_obj_clone->before_level = $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 = $identity_level_arr ?? [];
- $upgrade_log_obj_clone->save();
- }
- $identity->level = $can_upgrade_level;
- $identity->upgrade_status = $upgrade_status;
- $identity->upgrade_level_at = time();
- var_dump('can_upgrade_level1111:'.$can_upgrade_level);
- if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败");
- var_dump('can_upgrade_level2222:'.$can_upgrade_level);
- $upgrade_user_ids[] = $identity->user_id;
- $event = new AgentUpgradeAfterEvent($mall_id);
- $data = [
- 'after_level' => $can_upgrade_level,
- 'before_level' => $before_level,
- 'mall_id' => $mall_id,
- 'user_id' => $identity->user_id,
- 'order_id' => $order['id'],
- 'agent_id' => $identity->id,
- 'upgrade_type' => 'condition',
- 'operator_user_id' => $user_id,
- ];
- \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
- }
- }
- 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;
- }
- }
- /**
- * 购物升级执行 无用户等级
- * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), $order);
- * @Author: lun
- * @DateTime: 2021/11/18 0018 16:56
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $identity_desc - 用户身份描述
- * @param $identity_obj - 用户身份空对象
- * @return bool | array
- */
- public function executeNoLevel(string $identity_desc, object $identity_obj, array $order,$config)
- {
- try {
- //开启条件升级
- $mall_id = $order['mall_id'];
- $user_id = $order['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);
- $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 = new $identity_obj;
- $model->mall_id = $mall_id;
- $model->user_id = $id;
- $model_arr[] = $model;
- }
- }
- //获取升级配置
- foreach ($model_arr as $identity) {
- $flag = false;
- //开启条件升级
- if (!empty($config['upgrade_type_condition']) && !empty($config['is_auto_upgrade'])) {
- $res = UpgradeCondition::check($identity->user_id, $config, $mall_id);
- if ($res) {
- $flag = true;
- }
- }
- if ($flag) {
- 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;
- }
- }
- }
|