45], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'mall_id' => '商城id', 'level' => '等级权重', 'name' => '等级名称', 'is_auto_upgrade' => '是否启用自动升级:0-不;1-是;', 'upgrade_type_condition' => '条件升级 0关闭 1 开启', 'condition_type' => '0 未选择、1满足其一 2、满足所有', 'checked_condition_keys' => '升级条件选中的key集合', 'checked_condition_values' => '升级条件', 'upgrade_type_goods' => '购买商品升级 0关闭 1 开启', 'buy_goods_type' => '0订单完成 1下单 完成', 'goods_type' => '商品升级类型', 'goods_ids' => '商品仓库的ID', 'goods_list' => '商品列表', 'explain' => '等级说明', 'open_ladder' => '是否开启阶梯解冻设置[0=否,1=是]', 'ladder_setting' => '阶梯解冻设置', 'status' => '是否启用', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'store_cashier_order_is_up' => '收银台支付任意一笔订单升级:0否;1:是', ]; } /** * 获取等级配置 * @Author: lun * @DateTime: 2022/5/14 0014 9:57 * @Copyright: copyright (c) 2021 广东七件事集团 * @return \yii\db\ActiveQuery */ public function getSetting() { return $this->hasOne(DoubleCopyLevelSetting::class, ['level_id' => 'id'])->andWhere(['commission_type' => 'commission']); } /** * 获取等级配置 * @Author: lun * @DateTime: 2022/5/14 0014 9:57 * @Copyright: copyright (c) 2021 广东七件事集团 * @return \yii\db\ActiveQuery */ public function getScoreSetting() { return $this->hasOne(DoubleCopyLevelSetting::class, ['level_id' => 'id'])->andWhere(['commission_type' => 'score']); } /** * 获取等级配置 * @Author: lun * @DateTime: 2022/5/14 0014 9:57 * @Copyright: copyright (c) 2021 广东七件事集团 * @return \yii\db\ActiveQuery */ public function getAdditionalScoreSetting() { return $this->hasOne(DoubleCopyLevelSetting::class, ['level_id' => 'id'])->andWhere(['commission_type' => 'additional_score']); } /** * 获取权重 * @Author: lun * @DateTime: 2022/5/14 0014 10:00 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @return array */ public static function getLevelWeights($mall_id) { $list = self::find()->select('level')->where(['status' => [StatusEnum::DISABLED,StatusEnum::ENABLED], 'mall_id' => $mall_id])->column(); $newList = []; for ($i = 1; $i <= 15; $i++) { $newList[] = [ 'name' => '权重' . $i, 'level' => $i, 'disabled' => in_array($i, $list), ]; } return $newList; } /** * 保存数据 * @Author: lun * @DateTime: 2022/5/14 0014 10:09 * @Copyright: copyright (c) 2021 广东七件事集团 * @param array $params * @return array|bool */ public static function setData(array $params){ // 因为创建等级时, 可能等级设置等数据没有成功导致数据无法显示所以这里需要事务 $transaction = \Yii::$app->db->beginTransaction(); try{ if(!empty($params['id'])){ $model = self::findOne(['and',['id' => $params['id'],'mall_id' => $params['mall_id']],['<>','status',StatusEnum::DELETE]]); if(empty($model)) throw new \Exception('等级不存在或已删除'); // 判断等级是否有被修改 if ($model->level != $params['level']) { // 判断该等级下是否有股东存在 $user = DoubleCopyUser::find()->where(['mall_id' => $model->mall_id, 'level' => $model->level, 'status' => StatusEnum::ENABLED])->asArray()->one(); if ($user) throw new Exception('该等级下存在用户,不能被修改'); } }else{ $model = new self(); $model->loadDefaultValues(); $model->mall_id = $params['mall_id']; } if(!$model->load($params,'') || !$model->save()){ throw new Exception($model->getErrorMessage()); } // 插入配置详情 $setting = ['mall_id' => $params['mall_id'], 'level_id' => $model->id, 'level' => $model->level]; $setting = empty($params['setting']) ? $setting : array_merge($setting, Json::decode($params['setting'], true)); $setting['commission_type'] = isset($setting['commission_type']) ? $setting['commission_type'] : 'commission'; $setting['status'] = $model->status; $res = DoubleCopyLevelSetting::setData($setting); if ($res == false) throw new Exception(DoubleCopyLevelSetting::getStaticError()); $score_setting = ['mall_id' => $params['mall_id'], 'level_id' => $model->id, 'level' => $model->level]; $score_setting = empty($params['score_setting']) ? $score_setting : array_merge($score_setting, Json::decode($params['score_setting'], true)); $score_setting['status'] = $model->status; $score_setting['freeze_fund_prize'] = $setting['freeze_fund_prize'] ?? 0; $score_setting['freeze_fund_num'] = $setting['freeze_fund_num'] ?? 0; $score_setting['is_thaw'] = $setting['is_thaw'] ?? 0; $score_setting['first_level'] = $setting['first_level'] ?? ''; $score_setting['push_num'] = $setting['push_num'] ?? 0; $score_setting['second_level'] = $setting['second_level'] ?? ''; $score_setting['commission_type'] = isset($score_setting['commission_type']) ? $score_setting['commission_type'] : 'score'; $res = DoubleCopyLevelSetting::setData($score_setting); if ($res == false) throw new Exception(DoubleCopyLevelSetting::getStaticError()); // 额外积分 $additional_score_setting = ['mall_id' => $params['mall_id'], 'level_id' => $model->id, 'level' => $model->level]; $additional_score_setting = empty($params['additional_score_setting']) ? $additional_score_setting : array_merge($additional_score_setting, Json::decode($params['additional_score_setting'], true)); $additional_score_setting['status'] = $model->status; $additional_score_setting['freeze_fund_prize'] = $setting['freeze_fund_prize'] ?? 0; $additional_score_setting['freeze_fund_num'] = $setting['freeze_fund_num'] ?? 0; $additional_score_setting['is_thaw'] = $setting['is_thaw'] ?? 0; $additional_score_setting['first_level'] = $setting['first_level'] ?? ''; $additional_score_setting['push_num'] = $setting['push_num'] ?? 0; $additional_score_setting['second_level'] = $setting['second_level'] ?? ''; $additional_score_setting['commission_type'] = isset($additional_score_setting['commission_type']) ? $additional_score_setting['commission_type'] : 'additional_score'; $res = DoubleCopyLevelSetting::setData($additional_score_setting); if ($res == false) throw new Exception(DoubleCopyLevelSetting::getStaticError()); $transaction->commit(); return $model->toArray(); }catch(\Exception $e){ $transaction->rollBack(); self::$static_error = $e->getMessage(); return false; } } /** * 安装插件初始化等级 * @Author: lun * @DateTime: 2022/5/14 0014 11:03 * @Copyright: copyright (c) 2021 广东七件事集团 */ public static function InitLevel($init_level) { try { foreach ($init_level as $item) { $level_id = self::find()->select('id')->where(['mall_id' => $item['mall_id'], 'level' => $item['level']])->andWhere(['<>', 'status', StatusEnum::DELETE])->scalar(); if (empty($level_id)) { $res = self::setData($item); if ($res == false) throw new \Exception(self::getStaticError()); } } return true; } catch (\Exception $e) { self::setStaticError("初始化等级失败:" . $e->getMessage()); return false; } } /** * 获取等级 * @Author: lun * @DateTime: 2022/5/14 0014 15:23 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @return array|\yii\db\ActiveRecord[] */ public static function getLevelMap($mall_id, $type = 1) { $select = "level,name"; $list = self::find()->select($select)->where(['mall_id' => $mall_id,'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->orderBy('level asc')->asArray()->all(); if ($type == 2) { $new_list = []; foreach ($list as $item) { $new_list[$item['level']] = $item['name']; } return $new_list; } return $list; } /** * 根据等级获取等级名称 * @Author: lun * @DateTime: 2022/5/16 0016 17:45 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $level * @return false|int|string|null */ public static function getLevelNameByLevel($mall_id, $level) { return self::find()->select('name')->where(['mall_id' => $mall_id, 'level' => $level, 'status' => StatusEnum::ENABLED])->scalar(); } /** * 获取推荐的位数 * @param $mall_id * @return void */ public static function getUpgradeNum($mall_id) { $boss_level = self::find()->select('upgrade_type_condition, checked_condition_values')->where(['mall_id' => $mall_id, 'level' => DoubleCopyEnum::LEVEL_BOSS, 'status' => StatusEnum::ENABLED])->asArray()->one(); if ($boss_level['upgrade_type_condition'] == 1) { // json解析升级条件数量 $json = Json::decode($boss_level['checked_condition_values'], true); return !empty($json[0]['value']['val0']) ? intval($json[0]['value']['val0']) : 0; } return 0; } }