| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- <?php
- namespace addons\BusinessBonus\common\models;
- use addons\BusinessBonus\common\enums\BusinessBonusEnums;
- use addons\BusinessBonus\common\events\user\UpgradeUserEvent;
- use common\enums\StatusEnum;
- use common\models\goods\Goods;
- use Yii;
- use yii\db\Exception;
- /**
- * This is the model class for table "{{%addons_business_bonus_upgrade_condition}}".
- *
- * @property int $id
- * @property int|null $mall_id 商城ID
- * @property int|null $business_bonus_level 招商员等级ID
- * @property int|null $upgrade_type 升级方式:0未知,1无条件,2前端申请,3购买知道商品,4后台添加,5后台调整
- * @property string|null $goods_id 指定的商品ID,多个用英文逗号隔开
- * @property int|null $goods_buy_number 购买商品数量:0全部商品,1任一商品,2其二商品, 以此类推
- * @property int|null $is_audit 前端申请时,是否需要审核,0否,1是
- * @property int|null $status 状态:-1删除,0禁用,1启用
- * @property int|null $created_at 创建时间
- * @property int|null $updated_at 更新时间
- */
- class BusinessBonusUpgradeCondition extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%addons_business_bonus_upgrade_condition}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'business_bonus_level', 'upgrade_type', 'goods_buy_number', 'is_audit', 'status', 'created_at', 'updated_at','is_condition_upgrade','is_buy_goods_upgrade','buy_goods_upgrade_type', 'buy_goods_upgrade_method'], 'integer'],
- [['goods_id', 'upgrade_store_goods_list'], 'string'],
- [['checked_condition_values', 'checked_condition_keys'], 'safe'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => '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;
- }
- }
|