| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?php
- namespace addons\Distribution\common\logic\upgrage;
- use addons\Distribution\common\models\Distribution;
- use addons\Distribution\common\models\DistributionLevel;
- use addons\Distribution\common\models\DistributionLevelUpgradeLog;
- use addons\Distribution\common\enums\DistributionEnum;
- use addons\Distribution\common\logic\ConditionUpgradeLogic;
- use addons\UpgradeGift\common\listeners\UpgradeGiftListener;
- use common\enums\AddonsEnum;
- use common\enums\LevelUpgradeLogEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\models\common\UpgradeCondition;
- use common\models\mall\MallAddons;
- use common\models\order\OrderDetail;
- use common\models\user\User;
- use common\models\user\UserPartitionRelationship;
- /**
- * 订单支付事件-分销商升级
- * Class OrderPaidListener
- * @Author: hua
- * @DateTime: 2021/10/19 19:03
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package addons\Distribution\common\listeners\order
- */
- class Upgrage
- {
- /**
- * @desc:执行
- * @Author: hua
- * @Date: 2021/11/18
- * @Time: 15:55
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $order
- * @param $order_status
- */
- public function execute($order)
- {
- $t = \Yii::$app->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;
- }
- }
|