| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- <?php
- namespace app\modules\admin\models\team_grades;
- use app\models\Goods;
- use app\models\Option;
- use app\models\TeamGrades;
- use app\models\TeamGradesAudit;
- use app\models\TeamGradesLevel;
- use yii\base\Model;
- use yii\helpers\Json;
- class TeamLevelForm extends Model
- {
- public $store_id;
- public $id;
- public $ids;
- public $status;
- public $level;//等级
- public $level_name;//等级名称
- public $is_open_apply;//是否开始申请
- public $level_reward_setting;//业绩奖励设置
- public $expires_in;//等级有效期时间
- public $expires_type;//等级有效期类型
- public $level_conditions;//升级条件
- public $desc;//特权详情
- public $tiered_bonus = 0;//极差比例
- public function rules()
- {
- return [
- [['store_id', 'id', 'level', 'is_open_apply', 'status', 'expires_in', 'expires_type'], 'integer'],
- [['level_name', 'level_reward_setting', 'level_conditions', 'desc', 'ids'], 'string'],
- [['tiered_bonus'], 'number'],
- ];
- }
- //团队等级列表
- public function list() {
- $store_id = $this->store_id;
- $status = $this->status;
- $level_name = $this->level_name;
- $query = TeamGradesLevel::find()->where(['store_id' => $store_id, 'is_delete' => 0]);
- if (isset($status) && in_array($status, [0, 1])) {
- $query->andWhere(['status' => $status]);
- }
- if (!empty(trim($level_name))) {
- $query->andWhere(['LIKE', 'level_name', trim($level_name)]);
- }
- $query->orderBy('level DESC')->select('id, created_at, status, level, level_name, level_conditions');
- $pagination = pagination_make($query);
- foreach ($pagination['list'] as &$list) {
- $list['created_at'] = date('Y-m-d H:i:s', $list['created_at']);
- $list['status'] = intval($list['status']);
- if ($list['level'] > 0) {
- $list['level'] = $this->numberToChinese($list['level']) . '级';
- } else {
- $list['level'] = "默认等级";
- }
- $level_conditions = json_decode($list['level_conditions'], true);
- $level_conditions_text = "";
- foreach ($level_conditions as $level_conditions_index => $level_conditions_item) {
- if (intval($level_conditions_item['is_open'])) {
- if ($level_conditions_index === 'man') {
- foreach ($level_conditions_item['value'] as $man_index => $man_item) {
- $level_conditions_text .= "团队人数达到" . $man_item['count'] . "人且消费金额达" .$man_item['money'] . "元;" ;
- }
- }
- if ($level_conditions_index === 'order') {
- if (is_array($level_conditions_item['value'])) {
- foreach ($level_conditions_item['value'] as $order_index => $order_item) {
- $level_conditions_text .= "团队订单消费金额达" .$order_item['count'] . "元;" ;
- }
- } else {
- $level_conditions_text .= "团队订单消费金额达" .$level_conditions_item['value'] . "元;" ;
- }
- // foreach ($level_conditions_item['value'] as $order_index => $order_item) {
- // $level_conditions_text .= "团队订单消费金额达" .$order_item['count'] . "元;" ;
- // }
- }
- if ($level_conditions_index === 'recharge') {
- $level_conditions_text .= "充值金额达" .$level_conditions_item['value'] . "元;" ;
- }
- if ($level_conditions_index === 'self') {
- if (intval($level_conditions_item['value']['order_number'])) {
- $level_conditions_text .= "消费金额单笔达" .$level_conditions_item['value']['price'] . "元;" ;
- } else {
- $level_conditions_text .= "消费金额累计达" .$level_conditions_item['value']['price'] . "元;" ;
- }
- }
- if ($level_conditions_index === 'goods') {
- if (!empty($level_conditions_item['value'])) {
- $goods_name = Goods::find()->where(['id' => $level_conditions_item['value']['id'], 'is_delete' => 0])->select('name')->column();
- if ($goods_name) {
- $goods_name = implode(',', $goods_name);
- $level_conditions_text .= "购买指定商品" . $goods_name;
- }
- }
- }
- }
- }
- $list['level_conditions_text'] = $level_conditions_text;
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $pagination['list'],
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- ]
- ];
- }
- //设置团队等级
- public function setLevel() {
- try {
- $id = $this->id;
- $store_id = $this->store_id;
- $level = $this->level;
- $level_name = $this->level_name;
- $is_open_apply = $this->is_open_apply;
- $level_reward_setting = $this->level_reward_setting;
- $expires_in = $this->expires_in;
- $expires_type = $this->expires_type;
- $level_conditions = $this->level_conditions;
- $desc = $this->desc;
- $tiered_bonus = $this->tiered_bonus;
- if (!isset($level)) {
- throw new \Exception('团队等级不能为空');
- }
- if (empty($level_name)) {
- throw new \Exception('团队等级名称不能为空');
- }
- if (empty($level_reward_setting)) {
- throw new \Exception('业绩奖励设置不能为空');
- }
- if (empty($level_conditions)) {
- throw new \Exception('升级条件不能为空');
- }
- //检测是否有相同等级存在
- $re_level_query = TeamGradesLevel::find()->where(['level' => $level, 'store_id' => $store_id, 'is_delete' => 0]);
- if ($id) {
- $re_level_query->andWhere(['<>', 'id', $id]);
- }
- $re_level = $re_level_query->asArray()->one();
- if ($re_level) {
- throw new \Exception('存在相同等级');
- }
- //检测业绩奖励设置是否合规
- $level_reward_setting = json_decode($level_reward_setting, true);
- foreach ($level_reward_setting as $level_reward_item) {
- if (!isset($level_reward_item['min'])) {
- throw new \Exception('需要设置业绩奖励业绩最小金额');
- }
- if (!isset($level_reward_item['max'])) {
- throw new \Exception('需要设置业绩奖励业绩最大金额');
- }
- if (!isset($level_reward_item['profit'])) {
- throw new \Exception('需要设置业绩奖励佣金比例');
- }
- }
- $level_reward_setting = json_encode($level_reward_setting, JSON_UNESCAPED_UNICODE);
- //检测等级有效期是否合规
- $expires_type = intval($expires_type);
- if (!in_array($expires_type, [TeamGradesLevel::EXPIRES_TYPE_DAY, TeamGradesLevel::EXPIRES_TYPE_YEAR])) {
- throw new \Exception('等级有效期类型设置有误');
- }
- // if ($expires_in <= 0) {
- // throw new \Exception('等级有效期设置有误');
- // }
- //检测升级条件是否合规
- $level_conditions = json_decode($level_conditions, true);
- $open = true;
- foreach ($level_conditions as $conditions_index => $conditions_item) {
- //检测升级条件设置不对或者数额不对的
- if (in_array($conditions_index, [
- 'goods', 'man', 'order', 'recharge', 'self'
- ])) {
- if (intval($conditions_item['is_open'])) {
- if (!empty($conditions_item['value']) || (is_numeric($conditions_item['value']) && $conditions_item['value'] > 0)) {
- $open = false;
- }
- }
- }
- }
- if ($open) {
- throw new \Exception('升级条件设置无效');
- }
- $level_conditions = json_encode($level_conditions, JSON_UNESCAPED_UNICODE);
- $form = TeamGradesLevel::findOne(['id' => $id, 'is_delete' => 0]);
- if ($form) {
- //判断原等级下是否有团队存在
- if (intval($form->level) !== intval($level)) {
- $teamGradesAudit = TeamGradesAudit::findOne(['team_grades_level' => $form->level, 'is_delete' => 0,
- 'status' => TeamGradesAudit::STATUS_APPLY, 'store_id' => $store_id]);
- if ($teamGradesAudit) {
- throw new \Exception('等级下有未处理的团队分红申请记录,不可操作');
- }
- $teamGrades = TeamGrades::findOne(['team_grades_level' => $form->level, 'is_delete' => 0, 'store_id' => $store_id]);
- if ($teamGrades) {
- throw new \Exception('原等级下有团队存在,不可操作');
- }
- }
- }
- $form = $form ?: new TeamGradesLevel();
- $form->store_id = $store_id;
- $form->level = $level;
- $form->level_name = $level_name;
- $form->is_open_apply = $is_open_apply ?? TeamGradesLevel::IS_OPEN_APPLY_FALSE;
- $form->level_reward_setting = $level_reward_setting;
- $form->expires_in = $expires_in;
- $form->expires_type = $expires_type;
- $form->level_conditions = $level_conditions;
- $form->desc = $desc;
- $form->tiered_bonus = $tiered_bonus;
- if (!$form->save()) {
- throw new \Exception(json_encode($form->errors, JSON_UNESCAPED_UNICODE));
- }
- return [
- 'code' => 0,
- 'msg' => '操作成功'
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function getEditInfo() {
- $id = $this->id;
- $store_id = $this->store_id;
- $team_grades_setting = Option::get('team_grades_setting', $store_id, 'team_grades_setting')['value'];
- if (!$team_grades_setting) {
- $team_grades_setting = json_encode([
- 'team_start_num' => 0,
- 'team_end_num' => 0,
- 'filter_high_level' => 1,
- 'team_cycle_type' => TeamGrades::TEAM_CYCLE_TYPE_DAY,
- 'team_cycle' => 0,
- 'amount_rule_type' => 0,
- 'bonus_type' => TeamGrades::TEAM_BONUS_TYPE_LADDER
- ]);
- }
- $team_grades_setting = json_decode($team_grades_setting, true);
- $data = [
- 'expires_in' => 0,
- 'expires_type' => 0,
- 'is_open_apply' => 0,
- 'level_name' => '',
- 'level_reward_setting' => json_encode([]),
- 'level_conditions' => json_encode([]),
- 'desc' => '',
- 'filter_level' => [],
- 'level' => '',
- 'bonus_type' => $team_grades_setting['bonus_type'],
- 'tiered_bonus' => 0,
- ];
- //过滤已经存在的等级
- $filter_level = TeamGradesLevel::find()->where(['is_delete' => 0, 'store_id' => $store_id])
- ->select('level')->column();
- if ($id) {
- $teamGradesLevelInfo = TeamGradesLevel::findOne(['id' => $id, 'is_delete' => 0]);
- if ($teamGradesLevelInfo) {
- $filter_level = array_filter($filter_level, function($value) use($teamGradesLevelInfo) {
- if ($value != $teamGradesLevelInfo->level) {
- return $value;
- }
- });
- // 获取等级详情
- $data['expires_in'] = $teamGradesLevelInfo->expires_in;
- $data['expires_type'] = $teamGradesLevelInfo->expires_type;
- $data['is_open_apply'] = intval($teamGradesLevelInfo->is_open_apply);
- $data['level_name'] = $teamGradesLevelInfo->level_name;
- $data['level_reward_setting'] = $teamGradesLevelInfo->level_reward_setting;
- $data['level_conditions'] = $teamGradesLevelInfo->level_conditions;
- $data['desc'] = $teamGradesLevelInfo->desc;
- $data['level'] = $teamGradesLevelInfo->level;
- $data['tiered_bonus'] = $teamGradesLevelInfo->tiered_bonus?:0;
- }
- // $teamGradesLevelInfo
- }
- $condition = Json::decode($data['level_conditions']);
- if (!isset($condition['self']['value']['order_number'])) {
- $self_price = $condition['self']['value'];
- $condition['self']['value'] = [];
- $condition['self']['value']['order_number'] = '0';
- $condition['self']['value']['price'] = $self_price;
- }
- $goods_id = $condition['goods']['value']['id'];
- $condition['goods']['value']['id'] = Goods::find()->where(['id' => $goods_id, 'is_delete' => 0])->select('id')->column();
- $data['level_conditions'] = json_encode($condition, JSON_UNESCAPED_UNICODE);
- $level = range(0, 99);
- $data['filter_level'] = array_filter($level, function($value) use($filter_level) {
- if (!in_array($value, $filter_level)) {
- return $value;
- }
- });
- $data['filter_level'] = array_values($data['filter_level']);
- return [
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => $data
- ];
- }
- //处理同意拒绝 删除
- public function handle() {
- try {
- $ids = $this->ids ?? 0;
- $store_id = $this->store_id;
- $status = $this->status;
- if (empty(trim($ids))) {
- throw new \Exception('请选择要操作的数据');
- }
- $ids = explode(',', $ids);
- if (empty($ids)) {
- throw new \Exception('请选择要操作的数据_');
- }
- if (!isset($status)) {
- throw new \Exception('参数错误');
- }
- foreach ($ids as $item) {
- $teamGradesLevel = TeamGradesLevel::findOne(['id' => $item, 'store_id' => $store_id]);
- if (!$teamGradesLevel) {
- throw new \Exception('数据查询失败id:' . $item);
- }
- if ($teamGradesLevel->is_delete) {
- continue;
- }
- //如果是删除或者禁用,判断是否有团队
- if (in_array($status, [
- TeamGradesLevel::STATUS_FALSE,
- 2
- ])) {
- $teamGrades = TeamGradesAudit::findOne(['team_grades_level' => $teamGradesLevel->level, 'is_delete' => 0,
- 'status' => TeamGradesAudit::STATUS_APPLY, 'store_id' => $store_id]);
- if ($teamGrades) {
- throw new \Exception('等级下有未处理的团队分红申请记录,不可操作');
- }
- $teamGrades = TeamGrades::findOne(['team_grades_level' => $teamGradesLevel->level, 'is_delete' => 0, 'store_id' => $store_id]);
- if ($teamGrades) {
- throw new \Exception('等级下有团队存在,不可操作');
- }
- }
- //启用/禁用
- if (in_array($status, [TeamGradesLevel::STATUS_FALSE, TeamGradesLevel::STATUS_TRUE])) {
- $teamGradesLevel->status = $status;
- }
- //删除
- if (intval($status) === 2) {
- $teamGradesLevel->is_delete = 1;
- }
- if (!$teamGradesLevel->save()) {
- throw new \Exception(json_encode($teamGradesLevel->errors, JSON_UNESCAPED_UNICODE) . 'id:' . $item);
- }
- }
- return [
- 'code' => 0,
- 'msg' => '操作成功'
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function numberToChinese($number) {
- $array = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
- $chinese = '';
- // 数字转化为字符串
- $num_str = strval($number);
- // 遍历每个数字并转换为中文大写
- for ($i = 0; $i < strlen($num_str); $i++) {
- $chinese .= $array[$num_str[$i]];
- }
- return $chinese;
- }
- }
|