| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488 |
- <?php
- namespace app\modules\client\models\v1\team_grades;
- use app\models\Goods;
- use app\models\OldUserTreePath;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\ReOrder;
- use app\models\TeamGrades;
- use app\models\TeamGradesAudit;
- use app\models\TeamGradesLevel;
- use yii\base\Model;
- class TeamUserLevelForm extends Model
- {
- public $store_id;
- public $user_id;
- public $name;
- public $mobile;
- public $province_id;
- public $city_id;
- public $district_id;
- public $address;
- public function rules() {
- return [
- [['store_id', 'user_id', 'province_id', 'city_id', 'district_id'], 'integer'],
- [['name', 'mobile', 'address'], 'string'],
- [['name', 'mobile', 'province_id', 'city_id', 'district_id', 'address'], 'required'],
- [['mobile'], 'string', 'max' => 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()
- ];
- }
- }
- }
|