130 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | ||
| namespace app\api\validate;
 | ||
| 
 | ||
| use app\admin\logic\distribution\DistributionSettingLogic;
 | ||
| use app\admin\logic\setting\UserLogic;
 | ||
| use app\common\model\distribution\Distribution;
 | ||
| use app\common\server\ConfigServer;
 | ||
| use think\Validate;
 | ||
| use app\common\model\distribution\DistributionMemberApply;
 | ||
| use app\common\model\user\User;
 | ||
| 
 | ||
| class DistributionValidate extends Validate
 | ||
| {
 | ||
|     protected $rule = [
 | ||
|         'user_id'   => 'require|apply',
 | ||
|         'real_name' => 'require',
 | ||
|         'mobile'    => 'require|mobile',
 | ||
|         'province'  => 'require|number',
 | ||
|         'city'      => 'require|number',
 | ||
|         'district'  => 'require|number',
 | ||
|         'reason'    => 'require',
 | ||
|         'code'      => 'require|checkCode',
 | ||
|     ];
 | ||
| 
 | ||
|     protected $message = [
 | ||
|         'user_id.require'   => '无法获取用户ID',
 | ||
|         'real_name.require' => '请填写真实姓名',
 | ||
|         'mobile.require'    => '请填写手机号',
 | ||
|         'mobile.mobile'     => '请填写正确的手机号码',
 | ||
|         'province.require'  => '请填写省份',
 | ||
|         'province.number'   => '省份需为数字代号',
 | ||
|         'city.require'      => '请填写城市',
 | ||
|         'city.number'       => '城市须为数字代号',
 | ||
|         'district.require'  => '请填写县区',
 | ||
|         'district.number'   => '县区段为数字代号',
 | ||
|         'reason.require'    => '请填写申请原因',
 | ||
|         'code.require'      => '请填写邀请码',
 | ||
|     ];
 | ||
| 
 | ||
|     /**
 | ||
|      * 申请分销会员场景
 | ||
|      */
 | ||
|     public function sceneApply()
 | ||
|     {
 | ||
|         return $this->only(['user_id','real_name','mobile','province','city','district','reason']);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 填写邀请码
 | ||
|      */
 | ||
|     public function sceneCode()
 | ||
|     {
 | ||
|         return $this->only(['code']);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 判断当前用户是否有待审核的申请记录
 | ||
|      */
 | ||
|     public function apply($value, $rule, $data)
 | ||
|     {
 | ||
|         $where = [
 | ||
|             'user_id' => $value,
 | ||
|             'status' => 0, // 审核中
 | ||
|         ];
 | ||
|         $apply = DistributionMemberApply::where($where)->findOrEmpty();
 | ||
|         if($apply->isEmpty()) {
 | ||
|            return true;
 | ||
|         }
 | ||
|         return '正在审核中,请勿重复提交申请';
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 邀请码验证
 | ||
|      */
 | ||
|     public function checkCode($value, $rule, $data)
 | ||
|     {
 | ||
|         $config = UserLogic::getConfig();
 | ||
|         // 总开关
 | ||
|         $config['switch'] = ConfigServer::get('distribution', 'is_open');
 | ||
|         if(!$config['switch']) {
 | ||
|             return '系统已关闭分销功能,无法邀请粉丝';
 | ||
|         }
 | ||
|         if(!$config['is_open']) {
 | ||
|             return '系统已关闭邀请功能';
 | ||
|         }
 | ||
|         $user = User::where(['id'=>$data['user_id'], 'del'=>0])->findOrEmpty();
 | ||
|         if($user->isEmpty()) {
 | ||
|             return '无法获取当前用户信息';
 | ||
|         }
 | ||
|         if(!empty($user['first_leader'])) {
 | ||
|             return '已有邀请人';
 | ||
|         }
 | ||
|         $firstLader = User::field('id,is_distribution,level,ancestor_relation')
 | ||
|             ->where('distribution_code', $value)
 | ||
|             ->findOrEmpty();
 | ||
|         if($firstLader->isEmpty()) {
 | ||
|             return '无效的邀请码';
 | ||
|         }
 | ||
|         if($firstLader['id'] == $data['user_id']) {
 | ||
|             return '不能填自己的邀请码';
 | ||
|         }
 | ||
|         // 判断上级是否为分销会员
 | ||
|         $distribution = Distribution::where('user_id', $firstLader['id'])->findOrEmpty()->toArray();
 | ||
|         if((empty($distribution) || $distribution['is_distribution'] == 0 ) && !in_array(1, $config['qualifications'])) {
 | ||
|             return '非分销会员不允许邀请粉丝';
 | ||
|         }
 | ||
|         if(in_array(1, $config['qualifications'])){
 | ||
| 
 | ||
|             if(empty($distribution) || 0 == $distribution['is_distribution']){
 | ||
|                 return '非分销会员不允许邀请粉丝';
 | ||
|             }
 | ||
| 
 | ||
|         }else{
 | ||
| 
 | ||
|             $invite_appoint_user = ConfigServer::get('invite', 'invite_appoint_user', []);
 | ||
|             // 只有指定会员才能邀请粉丝
 | ||
|             if(!in_array($firstLader['level'],$invite_appoint_user)) {
 | ||
|                 return '邀请下级资格未达到要求';
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|         // 如果当前用户id出现在邀请人的祖先链路中,代表当前用户是已经是邀请人的上级或祖先级,同时意味着邀请人是当前用户的后代级别
 | ||
|         // 不能将自己的上级设置为自己的后代级用户
 | ||
|         $ancestorArr = explode(',', $firstLader['ancestor_relation']);
 | ||
|         if(!empty($ancestorArr) && in_array($data['user_id'], $ancestorArr)) {
 | ||
|             return '不能填写自己下级的邀请码';
 | ||
|         }
 | ||
|         return true;
 | ||
|     }
 | ||
| } |