11], [['mobile'], 'match', 'pattern' => '/^1[3456789]\d{9}$/'], [['address'], 'string', 'max' => 255] ]; } public function attributeLabels() { return [ 'name' => '姓名', 'mobile' => '手机号', 'province_id' => '省份', 'city_id' => '城市', 'district_id' => '地区', 'address' => '详细地址' ]; } /** * 获取升级条件 */ public function getUpgradeCondition() { try { $user_id = $this->user_id; $store_id = $this->store_id; //获取当前设置的团队分红等级 $user_team_grades = TeamGrades::getUserTeamGrades($user_id); $curr_experience = 0; //获取下一等级信息 $next_level_info_arr = TeamGradesLevel::find()->where([ 'store_id' => $store_id, 'status' => TeamGradesLevel::STATUS_TRUE, 'is_delete' => 0 ])->select('id, level, level_name, level_conditions, desc, is_open_apply')->orderBy('level ASC')->asArray()->all(); $level_info_arr = [ ]; $next_level_info = [ 'id' => '', 'level' => 0, 'level_name' => '', 'level_conditions' => null, 'desc' => '', 'is_open_apply' => 0, 'is_finished' => false ]; foreach ($next_level_info_arr as $next_level_info_index => $next_level_info_item) { $level_info_arr[$next_level_info_index] = [ 'level' => $next_level_info_item['level'], 'level_name' => $next_level_info_item['level_name'], 'experience' => 0, 'is_current' => false ]; //获取下一等级信息 if (empty($next_level_info['id'])) { if ($next_level_info_item['level'] > $user_team_grades['team_grades_level']) { $next_level_info = $next_level_info_item; } } //获取任务点数 $level_info_conditions = json_decode($next_level_info_item['level_conditions'], true); foreach ($level_info_conditions as $level_info_conditions_item) { if (intval($level_info_conditions_item['is_open'])) { $level_info_arr[$next_level_info_index]['experience']++; } } if ($next_level_info_item['level'] <= $user_team_grades['team_grades_level']) { $curr_experience += $level_info_arr[$next_level_info_index]['experience']; } if (intval($next_level_info_item['level']) <= intval($user_team_grades['team_grades_level'])) { $level_info_arr[$next_level_info_index]['is_current'] = true; } } if (!empty($next_level_info['id'])) { $next_level_info['is_open_apply'] = intval($next_level_info['is_open_apply']); $next_level_info['is_finished'] = true; $level_conditions = json_decode($next_level_info['level_conditions'], true); foreach ($level_conditions as $level_conditions_index => &$level_conditions_item) { $level_conditions_item['is_open'] = intval($level_conditions_item['is_open']); if (intval($level_conditions_item['is_open'])) { //获取团队人数 $man_data = OldUserTreePath::find()->where([ 'parent_id' => $user_id ])->andWhere([ '!=', 'child_id', $user_id ])->asArray()->all(); $child_id = array_column($man_data, 'child_id'); //判断团队人数以及消费金额 if ($level_conditions_index === 'man') { foreach ($level_conditions_item['value'] as $man_index => &$man_item) { // 团队人数是否达到条件 $man_item['money_finished'] = false; if (count($child_id) >= $man_item['count']) { // ++$curr_experience; // 团队人数消费金额是否达到条件 $pay_price = Order::find()->where( [ 'is_delete' => 0, 'trade_status' => Order::ORDER_FLOW_CONFIRM, 'user_id' => $child_id ]) ->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]])->sum('pay_price'); $man_item['money_finished'] = false; if ($pay_price >= $man_item['money']) { $man_item['money_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } } } //判断团队消费金额 if ($level_conditions_index === 'order') { if (is_array($level_conditions_item['value'])) { foreach ($level_conditions_item['value'] as $order_index => &$order_item) { $order_money = Order::find()->where( [ 'store_id' => $store_id, 'is_delete' => 0, 'trade_status' => Order::ORDER_FLOW_CONFIRM ]) ->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]) ->andWhere(['in', 'user_id', $child_id])->sum('pay_price'); $order_item['count_finished'] = false; if ($order_money >= $order_item['count']) { $order_item['count_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } } else { $order_money = Order::find()->where( [ 'store_id' => $store_id, 'is_delete' => 0, 'trade_status' => Order::ORDER_FLOW_CONFIRM ]) ->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]) ->andWhere(['in', 'user_id', $child_id])->sum('pay_price'); $level_conditions_item['value_finished'] = false; if ($order_money >= $level_conditions_item['value']) { $level_conditions_item['value_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } } //判断充值金额 if ($level_conditions_index === 'recharge') { $recharge_money = ReOrder::find()->where(['user_id' => $user_id, 'is_pay' => 1])->sum('pay_price'); $level_conditions_item['value_finished'] = false; if ($recharge_money >= $level_conditions_item['value']) { $level_conditions_item['value_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } //判断自身消费金额 if ($level_conditions_index === 'self') { $level_conditions_item['value_finished'] = false; $level_conditions_item['value']['order_number'] = intval($level_conditions_item['value']['order_number']); if (intval($level_conditions_item['value']['order_number'])) { // 订单单笔金额 $order = Order::find()->where( [ 'is_delete' => 0, 'trade_status' => Order::ORDER_FLOW_CONFIRM, 'user_id' => $user_id ]) ->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]) ->andWhere(['>=' , 'pay_price', $level_conditions_item['value']['price']])->one(); if (!empty($order)) { $level_conditions_item['value_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } else { // 订单累计金额 $order_money = Order::find()->where( [ 'is_delete' => 0, 'trade_status' => Order::ORDER_FLOW_CONFIRM, 'user_id' => $user_id ])->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]])->sum('pay_price'); if ($order_money >= $level_conditions_item['value']['price']) { $level_conditions_item['value_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } } //判断是否购买指定商品 if ($level_conditions_index === 'goods') { $level_conditions_item['value_finished'] = empty($level_conditions_item['value']); if (!$level_conditions_item['value_finished']) { // 查找该用户是否买过此商品 $goods_model = Order::find()->alias('o') ->leftJoin(['od' => OrderDetail::tableName()], 'od.order_id=o.id') ->where( [ 'o.user_id' => $user_id, 'o.is_delete' => 0, 'o.trade_status' => Order::ORDER_FLOW_CONFIRM ]) ->andWhere(['or', ['o.is_pay' => 1], ['o.pay_type' => 2]]) ->andWhere(['od.goods_id' => $level_conditions_item['value']['id']])->one(); if (!empty($goods_model)) { $level_conditions_item['value_finished'] = true; ++$curr_experience; } else { $next_level_info['is_finished'] = false; } } } } } $next_level_info['level_conditions'] = $level_conditions; } //调用自动升级判断一下 TeamGradesLevel::auto_upgrade($user_id, $store_id); return [ 'code' => 0, 'message' => '获取成功', 'data' => [ 'experience' => $curr_experience, 'next_level_info' => $next_level_info, 'level_list' => $level_info_arr, 'user_team_grades' => $user_team_grades ] ]; } catch (\Exception $e) { return [ 'code' => 1, 'message' => $e->getMessage() ]; } } /** * 提交升级申请 */ public function applySubmit() { try { if (!$this->validate()) { throw new \Exception($this->getErrorSummary(false)[0]); } $user_id = $this->user_id; $store_id = $this->store_id; // $team_grades_level = $this->team_grades_level; $name = $this->name; $mobile = $this->mobile; $province_id = $this->province_id; $city_id = $this->city_id; $district_id = $this->district_id; $address = $this->address; $user_team_grades = TeamGrades::getUserTeamGrades($user_id); //获取下一等级信息 $next_level_info = TeamGradesLevel::find()->where([ 'store_id' => $store_id, 'status' => TeamGradesLevel::STATUS_TRUE, 'is_delete' => 0 ])->andWhere(['>', 'level', $user_team_grades['team_grades_level']])->select('id, level, level_name, level_conditions, is_open_apply') ->orderBy('level ASC')->asArray()->one(); if (empty($next_level_info)) { throw new \Exception('当前等级未查询到'); } if (!intval($next_level_info['is_open_apply'])) { throw new \Exception('当前等级未开启申请'); } $teamGradesAudit = TeamGradesAudit::findOne([ 'user_id' => $user_id, 'status' => TeamGradesAudit::STATUS_APPLY, 'is_delete' => 0, 'team_grades_level' => $next_level_info['level'] ]); if ($teamGradesAudit) { throw new \Exception('您已提交过申请,请等待审核'); } //判断是否达到条件 if (!TeamGradesLevel::getIsApply($next_level_info, $user_id, $store_id)) { throw new \Exception('条件未达到,不可申请成为' . $next_level_info['level_name']); } $model = new TeamGradesAudit(); $model->store_id = $store_id; $model->user_id = $user_id; $model->team_grades_level = $next_level_info['level']; $model->name = $name; $model->mobile = $mobile; $model->address = $address; $model->province_id = $province_id; $model->city_id = $city_id; $model->district_id = $district_id; $model->status = TeamGradesAudit::STATUS_APPLY; if (!$model->save()) { throw new \Exception(json_encode($model, JSON_UNESCAPED_UNICODE)); } return [ 'code' => 0, 'msg' => '提交成功 开始审核' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } /** * 获取审核信息 * 如果满足条件 就跳转到申请页面 审核中就跳转到审核中 拒绝或未提交审核都返回到申请页面 * */ public function getAuditInfo() { try { $user_id = $this->user_id; $store_id = $this->store_id; $is_apply = 0; $is_fail = 0; $status = 0;//任务界面0 申请页面1 审核界面2 //正在审核的 $teamGradesAudit = TeamGradesAudit::getUserTeamGrades($user_id, TeamGradesAudit::STATUS_APPLY); if ($teamGradesAudit) { $is_apply = 1; } if (!$is_apply) { //未通过审核的 $teamGradesAudit = TeamGradesAudit::getUserTeamGrades($user_id, TeamGradesAudit::STATUS_REFUSE); if ($teamGradesAudit) { $is_fail = 1; } } //已经通过或未申请 if (!$is_fail && !$is_apply) { $user_team_grades = TeamGrades::getUserTeamGrades($user_id); //获取下一等级信息 $next_level_info = TeamGradesLevel::find()->where([ 'store_id' => $store_id, 'status' => TeamGradesLevel::STATUS_TRUE, 'is_delete' => 0 ])->andWhere(['>', 'level', $user_team_grades['team_grades_level']])->select('id, level, level_name, level_conditions, is_open_apply') ->orderBy('level ASC')->asArray()->one(); //存在下一等级 if (!empty($next_level_info)) { // throw new \Exception('当前等级未查询到'); //跳转到任务升级页面 //判断当前等级是否开启申请 if (intval($next_level_info['is_open_apply'])) { //判断是否达到条件 if (TeamGradesLevel::getIsApply($next_level_info, $user_id, $store_id)) { //已经达到升级条件 且 当前等级可以申请 $status = 1; } } } // else 当前已到最高等级 或者后端没有设置等级 就跳转到任务页面 } //正在审核 跳转到审核中页面 if ($is_apply) { $status = 2; } //未通过审核 跳转到申请页面 if ($is_fail) { $status = 1; } return [ 'code' => 0, 'msg' => '', 'data' => [ 'status' => $status, 'audit_info' => TeamGradesAudit::getUserTeamGrades($user_id,TeamGradesAudit::STATUS_REFUSE) ?: [ 'name' => '', 'mobile' => '', 'province_id' => '', 'city_id' => '', 'district_id' => '', 'address' => '', 'province_name' => '', 'city_name' => '', 'district_name' => '' ] ] ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }