用户认证审核

发布时间 2023-07-11 16:03:12作者: 佛系粥米

需求:

  在app端的个人中心用户可以实名认证,需要材料为:姓名、身份证号、身份证正面照、身份证反面照、手持照片、活体照片(通过**微笑、眨眼、张        嘴、摇头、点头**等组合动作,确保操作的为真实活体人脸。),当用户提交审核后就到了后端让运营管理人员进行审核。

  平台运营端查看用户认证信息,进行审核,其中审核包括了用户身份审核,需要对接公安系统校验身份证信息。

  用户通过审核后需要开通自媒体账号(该账号的用户名和密码与app一致)

(1)该需求在leadnew-user微服务中完成,主要分为:

    查询用户申请认证用户的列表。申请认证的用户数据存放在ApUserRealname表中。

    更新申请状态:认证通过、认证失败。认证成功还要创建自媒体账号feign接口远程调用wemedia方法创建账号

(2)分页查询申请认证的用户

 /**
     * 查询要审核的用户
     *
     * @param dto
     * @return
     */
    @Override
    public ResponseResult loadListByStatus(AuthDto dto) {
        //参数验证
        if(dto == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        //分页条件检查
        dto.checkParam();

        //分页构造器
        Page<ApUserRealname> page = new Page<>(dto.getPage(), dto.getSize());
        //条件构造器
        LambdaQueryWrapper<ApUserRealname> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(dto.getStatus()!=null, ApUserRealname::getStatus, dto.getStatus());
        //分页查询
        page = page(page, queryWrapper);

        //封装返回结果
        ResponseResult responseResult = new PageResponseResult(dto.getPage(),dto.getSize(), (int) page.getTotal());
        responseResult.setData(page.getRecords());
        return responseResult;
    }

(3)更新状态:通过或失败,通过则要创建自媒体账号

  /**
     * 更新用户状态:审核是否通过
     * @param dto
     * @param status
     * @return
     */
    @Override
    public ResponseResult updateStatus(AuthDto dto, Short status) {
        //参数验证
        if(dto == null || dto.getId() == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }

        //修改审核状态status
        ApUserRealname apUserRealname = getById(dto.getId());
        apUserRealname.setStatus(status);
        if(StringUtils.isNotBlank(dto.getMsg())){
            apUserRealname.setReason(dto.getMsg());
        }
        updateById(apUserRealname);

        //如果审核成功,则创建自媒体用户-远程调用wemedia
        if(status.equals(UserConstants.PASS_AUTH)){
            ResponseResult responseResult = createWmUser(dto);
            if(responseResult != null){
                return responseResult;
            }
        }

        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);

    }

(4)认证通过,创建自媒体账号,feign远程调用wemedia微服务

feign接口:

package com.heima.apis.wemedia;

import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.wemedia.pojos.WmUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient("leadnews-wemedia")
public interface IWemediaClient {

    /**
     * 查询自媒体用户
     * @param name
     * @return
     */
    @GetMapping("/api/v1/user/findByName/{name}")
    WmUser findWmUserByName(@PathVariable("name") String name);

    /**
     * 添加自媒体用户
     * @param wmUser
     * @return
     */
    @PostMapping("/api/v1/wm_user/save")
    public ResponseResult saveWmUser(@RequestBody WmUser wmUser);

    /**
     * 查询所有频道
     * @return
     */
    @GetMapping("/api/v1/channel/list")
    public ResponseResult getChannels();

}
@Autowired
    private IWemediaClient wemediaClient;

    @Autowired
    private ApUserMapper apUserMapper;

    /**
     * 创建自媒体用户
     * @param dto
     * @return
     */
    private ResponseResult createWmUser(AuthDto dto) {
        //查询用户
        Integer userRealnameId = dto.getId();
        ApUserRealname apUserRealname = getById(userRealnameId);
        if(apUserRealname == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }
        //查询app端用户信息
        Integer userId = apUserRealname.getUserId();
        ApUser apUser = apUserMapper.selectById(userId);
        if(apUser == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

        //创建自媒体用户,信息从app端用户获取
        WmUser wmUser = wemediaClient.findWmUserByName(apUser.getName());
        if(wmUser == null){
            BeanUtils.copyProperties(apUser, wmUser);
            wmUser.setApUserId(apUser.getId());
            wmUser.setCreatedTime(new Date());
//            wmUser.setName(apUser.getName());
//            wmUser.setPassword(apUser.getPassword());
//            wmUser.setSalt(apUser.getSalt());
//            wmUser.setPhone(apUser.getPhone());
            wmUser.setStatus(9);
            wemediaClient.saveWmUser(wmUser);
        }
        //自媒体人标志
        apUser.setFlag((short) 1);
        apUserMapper.updateById(apUser);
        return null;

    }

 

wemedia中实现类中完成具体的查询添加自媒体用户方法:

@Autowired
    private WmUserService wmUserService;

    /**
     * 查询自媒体用户
     *
     * @param name
     * @return
     */
    @Override
    @GetMapping("/api/v1/user/findByName/{name}")
    public WmUser findWmUserByName(@PathVariable("name") String name) {
        return wmUserService.getOne(Wrappers.<WmUser>lambdaQuery().eq(WmUser::getName, name));
    }

    /**
     * 添加自媒体用户
     *
     * @param wmUser
     * @return
     */
    @Override
    @PostMapping("/api/v1/wm_user/save")
    public ResponseResult saveWmUser(@RequestBody WmUser wmUser) {
        wmUserService.save(wmUser);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }


    @Autowired
    private WmChannelService channelService;

    /**
     * 查询所有频道
     *
     * @return
     */
    @Override
    @GetMapping("/api/v1/channel/list")
    public ResponseResult getChannels() {
        return channelService.finddAll();
    }