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