| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- <?php
- namespace addons\DoubleCopy\common\logic;
- use addons\Boss\common\enums\BossEnum;
- use addons\DoubleCopy\common\enums\DoubleCopyEnum;
- use addons\DoubleCopy\common\models\DoubleCopyLevel;
- use addons\DoubleCopy\common\models\DoubleCopyUser;
- use addons\UpgradeGift\common\events\UpgradeGiftEvent;
- use addons\UpgradeGift\common\listeners\UpgradeGiftListener;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\StatusEnum;
- use common\enums\UpgradeEnum;
- use common\helpers\FormatHelper;
- use common\models\common\UpgradeCondition;
- use common\models\mall\MallAddons;
- use common\models\order\OrderDetail;
- use common\models\user\UserPartitionRelationship;
- use common\traits\ErrorTrait;
- use Yii;
- use Exception;
- use yii\db\Expression;
- /**
- * 条件升级
- * @Author lun
- * @DateTime 2021-11-16 19:07:32
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class ConditionUpgrade{
- use ErrorTrait;
- /**
- * 条件升级执行
- * @Author: lun
- * @DateTime: 2021/11/18 0018 16:56
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $order
- * @return bool | array
- */
- public function execute(array $order)
- {
- $trans = Yii::$app->db->beginTransaction();
- 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 = DoubleCopyUser::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->orderBy([new Expression("FIND_IN_SET(user_id,'".implode(',',$upgrade_user_id_arr)."')")])->indexBy('user_id')->all();
- if (empty($model_list)) {
- $trans->commit();
- return true;
- }
- $upgrade_user_ids = [];
- // 获取等级
- $where = [];
- $where[] = ['mall_id' => $mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- $params = [];
- $configs = \Yii::$app->services->setting->addons->get($mall_id, DoubleCopyEnum::ADDONS_NAME, 'basic');
- if($configs && isset($configs['is_open_level_limit']) && !empty($configs['is_open_level_limit'])){
- $params['order'] = 'level asc';
- $is_open_level_limit = true;
- }else{
- $params['order'] = 'level desc';
- $is_open_level_limit = false;
- }
- $params['where'] = $where;
- $level_list = DoubleCopyLevel::lists($params);
- if (empty($level_list)) {
- $trans->commit();
- return true;
- }
- foreach ($model_list as $identity) {
- $flag = false;
- $upgrade_status = 0;
- foreach ($level_list as $identity_level_arr) {
- // 当前等级大于或等于可以升级的等级则直接退出
- if(!$is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- break;
- }
- if($is_open_level_limit && $identity->level >= $identity_level_arr['level']){
- continue;
- }
- $can_upgrade_level = $identity_level_arr['level'];// 要升级的等级
- //开启条件升级
- if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) {
- $upgrade_status = DoubleCopyEnum::UPGRADE_STATUS_CONDITION;
- $res = self::check($identity->user_id, $identity_level_arr, $order['id']);
- if ($res) {
- $flag = true;
- break;
- }
- }
- }
- if ($flag && $can_upgrade_level > $identity->level) {
- $identity->level = $can_upgrade_level;
- $identity->upgrade_status = $upgrade_status;
- $identity->upgrade_level_at = time();
- $identity->upgrade_boss_at = !$identity->upgrade_boss_at && $can_upgrade_level >= 2 ? $identity->upgrade_level_at : 0;
- if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},二二复制条件升级失败");
- $upgrade_user_ids[] = $identity->user_id;
- }
- if($is_open_level_limit) continue;
- }
- $trans->commit();
- return $upgrade_user_ids;
- } catch (Exception $e) {
- $trans->rollBack();
- $exception = FormatHelper::exception($e, "二二复制条件升级");
- echo $exception;
- $this->setError($exception);
- Yii::error($exception);
- return false;
- }
- }
- /**
- * 检查用户是否符合升级条件
- * @Author: lun
- * @DateTime: 2022/7/8 0008 15:44
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $user_id
- * @param $level_arr
- * @param $order_id
- * @return bool
- */
- public static function check($user_id, $level_arr, $order_id = 0)
- {
- if (empty($level_arr['condition_type'])) return false;
- $condition_type = $level_arr['condition_type'];
- $keys_arr = json_decode($level_arr['checked_condition_keys'], true);
- $values_arr = json_decode($level_arr['checked_condition_values'], true);
- $arr = [];//升级条件
- foreach ($values_arr as $K => $v) {
- $arr[$v['key']] = $v['value'];
- }
- $is_return = false;
- sort($keys_arr);
- foreach ($keys_arr as $id) {
- $function = 'condition' . ($id+1);
- $params['user_id'] = $user_id;
- $params['arr'] = $arr[$id];
- $params['order_id'] = $order_id;
- if (!method_exists(self::class, $function)) continue;
- $is_bool = self::$function($params);
- //满足其一
- if ($condition_type == 1) {
- if ($is_bool) {
- $is_return = true;
- break;
- } else {
- $is_return = false;
- }
- }
- //满足所有
- if ($condition_type == 2) {
- if ($is_bool) {
- $is_return = true;
- } else {
- $is_return = false;
- break;
- }
- }
- }
- return $is_return;
- }
- /**
- * 条件1: 升级前身份等级为代理,直推N个代理后升级
- * @Author: lun
- * @DateTime: 2022/7/8 0008 9:30
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $params
- * @param $user_id_arr
- * @param $arr
- * @param $key
- * @return bool
- */
- public static function condition1($params)
- {
- $user_id = $params['user_id'];
- $arr = $params['arr'];
- $is_bool = false;
- // 获取当前用户等级
- $user = DoubleCopyUser::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->one();
- if (empty($user)) return $is_bool;
- // 当前用户身份必须为代理
- if ($user['level'] != DoubleCopyEnum::LEVEL_AGENT) return $is_bool;
- // 获取直推下级的助力人数
- $count = DoubleCopyUser::find()->where(['pid' => $user_id, 'status' => StatusEnum::ENABLED])->andWhere(['>=', 'level', DoubleCopyEnum::LEVEL_AGENT])->count();
- if ($count >= $arr['val0']) $is_bool = true;// 符合条件
- return $is_bool;
- }
- /**
- * 条件2:当前等级为X,直推前N个市场都成为Y等级
- * @Author: lun
- * @DateTime: 2022/7/8 0008 15:37
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $params
- * @return bool
- */
- public static function condition2($params)
- {
- $user_id = $params['user_id'];
- $arr = $params['arr'];
- $is_bool = false;
- // 获取当前用户等级
- $user = DoubleCopyUser::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->one();
- if (empty($user)) return $is_bool;
- // 当前用户身份必须为设置等级
- if ($user['level'] < $arr['val0']) return $is_bool;
- // 获取直推下级的助力人数
- $list = DoubleCopyUser::find()->where(['pid' => $user_id, 'status' => StatusEnum::ENABLED])->orderBy('pos asc')->asArray()->all();
- if (empty($list)) return $is_bool;
- $count = 0;// 符合条件的数量
- foreach ($list as $key => $item) {
- if ($item['pos'] > $arr['val1']) break;// 只获取直推的前N个市场
- if ($item['level'] >= $arr['val2']) $count ++;// 符合条件的市场进行累加
- }
- if ($count >= $arr['val1']) $is_bool = true;// 符合条件
- return $is_bool;
- }
- /**
- * 购买指定商品,商品ID组_______
- * @param $params
- * @return bool
- */
- public static function condition3($params)
- {
- $user_id = $params['user_id'];
- $arr = $params['arr'];
- $is_bool = false;
- // 获取当前用户等级
- $user = DoubleCopyUser::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->one();
- if (empty($user)) return $is_bool;
- $goods_ids = $arr['val0'];
- if(!$goods_ids) return $is_bool;
- $goods_ids = explode(',',$goods_ids);
- // 购买指定商品订单 (修改补充订单。已发货、已收货、待自提、自提成功状态)
- $detail = OrderDetail::find()->where(['user_id' => $user_id,'goods_id' => $goods_ids])
- ->andWhere(['order_status' => [OrderStatusEnum::ACCOMPLISH,OrderStatusEnum::PAY,
- OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH]])->one();
- if (empty($detail)) return $is_bool;
- return true;
- }
- protected static function condition4($params)
- {
- if (empty($params['order_id'])) return false;
- $user_id = $params['user_id'];
- $arr = $params['arr'];
- if (!isset($arr['val0']) || !isset($arr['val1'])) return false;
- $goods_ids = $arr['val0'];
- $finish_order_money = $arr['val1'];
- $total_money = OrderDetail::find()->select('goods_price')->where(['order_id' => $params['order_id'], 'user_id' => $user_id, 'goods_id' => explode(',', $goods_ids), 'order_status' => OrderStatusEnum::ACCOMPLISH, 'status' => StatusEnum::ENABLED])->sum('goods_price') ?? 0;
- if ($total_money >= $finish_order_money) return true;
- return false;
- }
- }
|