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; } }