'ID', 'mall_id' => '商城ID', 'business_bonus_level' => '招商员等级', 'upgrade_type' => '升级方式:0未知,1无条件,2前端申请,3购买指定商品,4后台添加,5后台调整, 6购买门店商品', 'goods_id' => '指定的商品ID,多个用英文逗号隔开', 'goods_buy_number' => '购买商品数量:0全部商品,1任一商品,2其二商品, 以此类推', 'upgrade_store_goods_list' => '门店商品升级条件', 'is_audit' => '前端申请时,是否需要审核,0否,1是', 'status' => '状态:-1删除,0禁用,1启用', 'created_at' => '创建时间', 'updated_at' => '更新时间', ]; } /** * 获取指定等级的条件 */ public static function getLevelCondition($mall_id, $business_bonus_level) { $cond = self::getOne([ ['=', 'mall_id', $mall_id], ['=', 'business_bonus_level', $business_bonus_level], ['=', 'status', StatusEnum::ENABLED], ], true); if ($cond) { $goods_id = $cond['goods_id'] ? explode(',', $cond['goods_id']) : []; if ($goods_id) { $cond['goods_list'] = Goods::find() ->select('id as goods_id,goods_name,cover_pic') ->andWhere(['>=', 'status', StatusEnum::DISABLED]) ->andWhere(['=', 'mall_id', $mall_id]) ->andWhere(['in', 'id', $goods_id]) ->asArray() ->all(); } else { $cond['goods_list'] = []; } } return $cond; } /** * 数据设置 */ public static function setData(array $params) { try{ if (!isset($params['mall_id']) || empty($params['mall_id'])) throw new Exception('缺少商城ID'); if (isset($params['business_bonus_level']) && !empty($params['business_bonus_level'])) { $model = self::findOne(['mall_id' => $params['mall_id'], 'business_bonus_level' => $params['business_bonus_level'], 'status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]); } if (!isset($model) || empty($model)) { $model = new self(); $model->loadDefaultValues(); $model->mall_id = $params['mall_id']; } if (!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage()); return $model; }catch(Exception $e){ self::setStaticError($e->getMessage()); return false; } } /** * 购买指定商品检测升级 * $order_detail 必须包含参数 'order_id,goods_id,goods_name,pic_url,price,num' */ public static function checkingUpgradeByOrder($order_detail, $mall_id, $user_id) { $prefix = Yii::$app->getDb()->tablePrefix; $enable = StatusEnum::ENABLED; $upgrade_type = BusinessBonusEnums::UPGRADE_TYPE_SHOPPING; $level = 0; $upgrade_item = []; $goods_item = []; foreach ($order_detail as $goods) { // $sql = "select * from {$prefix}addons_business_bonus_upgrade_condition // where mall_id = {$mall_id} and status = {$enable} and upgrade_type = {$upgrade_type} and FIND_IN_SET({$goods['goods_id']}, goods_id)"; $sql = "SELECT * FROM {$prefix}addons_business_bonus_upgrade_condition WHERE mall_id = {$mall_id} AND status = {$enable} AND is_buy_goods_upgrade = 1 AND buy_goods_upgrade_type = 1 AND ((FIND_IN_SET({$goods['goods_id']}, goods_id) AND buy_goods_upgrade_method = 2) OR buy_goods_upgrade_method = 1)"; $condition = Yii::$app->getDb()->createCommand($sql)->queryAll(); if ($condition) { foreach ($condition as $cond) { if ($cond['business_bonus_level'] > $level) { $level = $cond['business_bonus_level']; $upgrade_item = $cond; $goods_item = $goods; } } } } if (!$goods_item || $level == 0 || !$upgrade_item) { return true; } // 当前用户的等级是否大于预升等级 $business_user = BusinessBonusUser::getOne([ ['=', 'mall_id', $mall_id], ['=', 'user_id', $user_id], ['>=', 'status', StatusEnum::DISABLED], ], true); if ($business_user && $business_user['business_bonus_level'] >= $upgrade_item['business_bonus_level']) { return true; } $user_data = [ 'user_id' => $user_id, 'business_bonus_level' => $upgrade_item['business_bonus_level'], 'mall_id' => $mall_id ]; if ($business_user) { $user_data['id'] = $business_user['id']; } else { $user_data['status'] = StatusEnum::ENABLED; $user_data['register_time'] = time(); } // 对应等级信息 $level_info = BusinessBonusLevel::getOne([ ['=', 'mall_id', $mall_id], ['=', 'level', $user_data['business_bonus_level']], ['>=', 'status', StatusEnum::DISABLED], ], true); $goods_item['mark'] = '购买指定商品'; $record = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'business_bonus_level' => $user_data['business_bonus_level'], 'bonus_rate' => $level_info['bonus_rate'] ?? 0, 'upgrade_time' => time(), 'status' => StatusEnum::ENABLED, 'upgrade_type' => BusinessBonusEnums::UPGRADE_TYPE_SHOPPING, 'extra_data' => json_encode($goods_item, JSON_UNESCAPED_UNICODE) ]; $trans = Yii::$app->db->beginTransaction(); try { $res = BusinessBonusUpgradeRecord::setData($record); if ($res == false) throw new Exception(BusinessBonusUpgradeRecord::getStaticError()); $res = BusinessBonusUser::setData($user_data); if ($res == false) throw new Exception(BusinessBonusUser::getStaticError()); $trans->commit(); } catch (Exception $e) { $trans->rollBack(); self::setStaticError($e->getMessage()); return false; } //触发用户条件升级 $event = new UpgradeUserEvent($mall_id); $data = ['mall_id' => $mall_id, 'user_id' => $user_id]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); return true; } /** * 购买指定门店商品检测升级 * $order_detail 必须包含参数 'order_id,goods_id,goods_name,pic_url,price,num' */ public static function checkingUpgradeByStoreOrder($order_detail, $mall_id, $user_id) { $prefix = Yii::$app->getDb()->tablePrefix; $enable = StatusEnum::ENABLED; $upgrade_type = BusinessBonusEnums::UPGRADE_TYPE_STORE_SHOPPING; $level = 0; $upgrade_item = []; $goods_item = []; foreach ($order_detail as $goods) { // $sql = "select * from {$prefix}addons_business_bonus_upgrade_condition // where mall_id = {$mall_id} and status = {$enable} and upgrade_type = {$upgrade_type} order by business_bonus_level desc"; $sql = "select * from {$prefix}addons_business_bonus_upgrade_condition where mall_id = {$mall_id} and status = {$enable} and is_buy_goods_upgrade = 1 and buy_goods_upgrade_type = 2 order by business_bonus_level desc"; $condition = Yii::$app->getDb()->createCommand($sql)->queryAll(); if ($condition) { foreach ($condition as $cond) { $upgrade_store_goods_list = json_decode($cond['upgrade_store_goods_list'], true); // if ($upgrade_store_goods_list['store_goods_type'] == 1) { if ($cond['buy_goods_upgrade_method'] == 1) { $level = $cond['business_bonus_level']; $upgrade_item = $cond; $goods_item = $goods; break; // } elseif ($upgrade_store_goods_list['store_goods_type'] == 2) { } elseif ($cond['buy_goods_upgrade_method'] == 2) { if (in_array($goods['goods_id'], $upgrade_store_goods_list['store_goods_ids'])) { $level = $cond['business_bonus_level']; $upgrade_item = $cond; $goods_item = $goods; break; } } } } } if (!$goods_item || $level == 0 || !$upgrade_item) { return true; } // 当前用户的等级是否大于预升等级 $business_user = BusinessBonusUser::getOne([ ['=', 'mall_id', $mall_id], ['=', 'user_id', $user_id], ['>=', 'status', StatusEnum::DISABLED], ], true); if ($business_user && $business_user['business_bonus_level'] >= $upgrade_item['business_bonus_level']) { return true; } $user_data = [ 'user_id' => $user_id, 'business_bonus_level' => $upgrade_item['business_bonus_level'], 'mall_id' => $mall_id ]; if ($business_user) { $user_data['id'] = $business_user['id']; } else { $user_data['status'] = StatusEnum::ENABLED; $user_data['register_time'] = time(); } // 对应等级信息 $level_info = BusinessBonusLevel::getOne([ ['=', 'mall_id', $mall_id], ['=', 'level', $user_data['business_bonus_level']], ['>=', 'status', StatusEnum::DISABLED], ], true); $goods_item['mark'] = '购买指定门店商品'; $record = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'business_bonus_level' => $user_data['business_bonus_level'], 'bonus_rate' => $level_info['bonus_rate'] ?? 0, 'upgrade_time' => time(), 'status' => StatusEnum::ENABLED, 'upgrade_type' => BusinessBonusEnums::UPGRADE_TYPE_STORE_SHOPPING, 'extra_data' => json_encode($goods_item, JSON_UNESCAPED_UNICODE) ]; $trans = Yii::$app->db->beginTransaction(); try { $res = BusinessBonusUpgradeRecord::setData($record); if ($res == false) throw new Exception(BusinessBonusUpgradeRecord::getStaticError()); $res = BusinessBonusUser::setData($user_data); if ($res == false) throw new Exception(BusinessBonusUser::getStaticError()); $trans->commit(); } catch (Exception $e) { $trans->rollBack(); self::setStaticError($e->getMessage()); return false; } //触发用户条件升级 $event = new UpgradeUserEvent($mall_id); $data = ['mall_id' => $mall_id, 'user_id' => $user_id]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); return true; } }