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