| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- namespace addons\Boss\common\logic;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use common\enums\UpgradeEnum;
- use common\enums\LevelUpgradeLogEnum;
- use common\helpers\FormatHelper;
- use common\models\order\OrderDetail;
- use common\traits\ErrorTrait;
- use Yii;
- use Exception;
- use yii\helpers\Json;
- /**
- * 购物升级
- * @Author lun
- * @DateTime 2021-11-16 19:07:32
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class BuyGoodsUpgrade{
- use ErrorTrait;
- /**
- * 购物升级执行
- * 样式: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 execute(string $identity_desc, object $identity_obj, object $level_obj, array $order, $order_by = 'level desc', $upgrade_log_obj = null)
- {
- $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->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;
- }
- }
- }
|