|  | @@ -1,12 +1,23 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.SysUserService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.enums.SysUserType;
 | 
	
		
			
				|  |  |  import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.utils.idcard.IdcardValidator;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import javax.annotation.Resource;
 | 
	
		
			
				|  |  |  import java.util.Optional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
	
		
			
				|  | @@ -15,6 +26,13 @@ public class SysUserServiceImpl implements SysUserService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private SysUserFeignService sysUserFeignService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserMapper sysUserMapper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private SysUserContractRecordService sysUserContractRecordService;
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Long getUserId() {
 | 
	
		
			
				|  |  |          return Optional.ofNullable(sysUserFeignService.queryUserInfo()).
 | 
	
	
		
			
				|  | @@ -37,4 +55,52 @@ public class SysUserServiceImpl implements SysUserService {
 | 
	
		
			
				|  |  |                  orElseThrow(()-> new BizException("请登录"));
 | 
	
		
			
				|  |  |          return optional.get();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public IdcardInfoExtractor updateUserCard(RealnameAuthReq realNameAuthDto, SysUser sysUser,ClientEnum client) {
 | 
	
		
			
				|  |  | +        IdcardValidator idcardValidator = new IdcardValidator();
 | 
	
		
			
				|  |  | +        //验证身份证号合法性
 | 
	
		
			
				|  |  | +        boolean validatedAllIdcard = idcardValidator.isValidatedAllIdcard(realNameAuthDto.getIdCardNo());
 | 
	
		
			
				|  |  | +        if (!validatedAllIdcard) {
 | 
	
		
			
				|  |  | +            throw new BizException("身份证号不合法");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //通过身份证号获取身份信息
 | 
	
		
			
				|  |  | +        IdcardInfoExtractor idcardInfoExtractor = new IdcardInfoExtractor(realNameAuthDto.getIdCardNo(), validatedAllIdcard);
 | 
	
		
			
				|  |  | +        //todo 通过环境,不做实名判断
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            boolean verify = realnameAuthenticationPlugin.verify(realNameAuthDto.getRealName(), realNameAuthDto.getIdCardNo());
 | 
	
		
			
				|  |  | +            if (!verify) {
 | 
	
		
			
				|  |  | +                throw new BizException("未通过实名认证");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } catch (Exception e) {
 | 
	
		
			
				|  |  | +            e.printStackTrace();
 | 
	
		
			
				|  |  | +            throw new BizException("未通过实名认证");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (realNameAuthDto.getSave()) {
 | 
	
		
			
				|  |  | +            realNameAuthDto.setUserId(sysUser.getId());
 | 
	
		
			
				|  |  | +            realNameAuthDto.setGender(idcardInfoExtractor.getGender());
 | 
	
		
			
				|  |  | +            realNameAuthDto.setBirthday(idcardInfoExtractor.getBirthday());
 | 
	
		
			
				|  |  | +            //实名认证通过后立刻保存
 | 
	
		
			
				|  |  | +            sysUserMapper.updateUserCard(realNameAuthDto);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 签订用户注册协议
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 判断是否已经签署
 | 
	
		
			
				|  |  | +        Boolean contractSign = sysUserContractRecordService.checkContractSign(sysUser.getId(),
 | 
	
		
			
				|  |  | +                                                                              SysUserType.valueOf(client.getCode()),
 | 
	
		
			
				|  |  | +                                                                              ContractTemplateTypeEnum.REGISTER);
 | 
	
		
			
				|  |  | +        if (!contractSign && realNameAuthDto.getContract()) {
 | 
	
		
			
				|  |  | +            sysUser.setRealName(realNameAuthDto.getRealName());
 | 
	
		
			
				|  |  | +            sysUser.setIdCardNo(realNameAuthDto.getIdCardNo());
 | 
	
		
			
				|  |  | +            sysUser.setGender(realNameAuthDto.getGender());
 | 
	
		
			
				|  |  | +            sysUser.setBirthdate(realNameAuthDto.getBirthday());
 | 
	
		
			
				|  |  | +            HttpResponseResult<Boolean> sign = sysUserContractRecordService.sign(ContractTemplateTypeEnum.REGISTER,
 | 
	
		
			
				|  |  | +                                                                                 SysUserType.valueOf(client.getCode()),sysUser);
 | 
	
		
			
				|  |  | +            if (!sign.getStatus() || !sign.getData()) {
 | 
	
		
			
				|  |  | +                throw new BizException(sign.getMsg());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return idcardInfoExtractor;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |