code17文章

81 阅读2分钟

用户的实名认证信息会保存在用户库中,有一个表存储ap_user_auth。后端可以选择审核通过或者驳回认证信息。如果驳回,录入驳回的原因,告知用户。如果是通过,需要有多个微服务和数据库参与数据保存。

参与的微服务有 用户服务、自媒体服务、文章服务,用户认证成功首先要修改认证表的状态,需要去创建自媒体用户,远程调用自媒体服务。还需要远程调用文章服务,创建作者,app用户可以看到的文章作者信息。最后把用户的类型改为自媒体用户。

使用OpenFeign进行远程调用,会使用分布式事务Seata

package com.heima.feignclient.client;

import com.heima.model.article.dtos.AuthorDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient("leadnews-article")
public interface ArticleFeign {

    /**
     * 保存作者
     * @param dto
     * @return
     */
    @PostMapping("/api/v1/author/save")
    Integer saveAuthor(@RequestBody AuthorDto dto);
}
@Autowired
    private ApUserService apUserService;
    @Autowired
    private WemediaFeign wemediaFeign;
    @Autowired
    private ArticleFeign articleFeign;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void userAuth(AuthDto dto, int status) {
//        获取认证信息id
        Integer authId = dto.getId();
//        根据id 修改认证状态,原因
        ApUserAuth userAuth = new ApUserAuth();
        userAuth.setId(authId);
        userAuth.setStatus(status);
        userAuth.setReason(status==9?"":dto.getMsg());
        boolean b = updateById(userAuth);
        if(!b){
            log.error("修改用户审核状态失败,authId={}",authId);
            throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
        }
//        如果不通过,直接结束
        if(status==2){
            log.info("用户认证不通过,直接结束,authId={}",authId);
            return ;
        }
//        根据认证信息id,查询认证信息,获取ap_user_id
        userAuth = getById(authId);
        Integer userId = userAuth.getUserId();
//        根据ap_user_id 查询ap_user 的数据
        ApUser apUser = apUserService.getById(userId);
//        远程调用,自媒体服务,创建自媒体用户
        WmUserDto wmUserDto = new WmUserDto();
        wmUserDto.setApUserId(userId);
        wmUserDto.setName(apUser.getName());
        wmUserDto.setPassword(apUser.getPassword());
        wmUserDto.setStatus(9);
        wmUserDto.setPhone(apUser.getPhone());
        wmUserDto.setImage(apUser.getImage());
        try {
            Integer wmUserId = wemediaFeign.userSave(wmUserDto);
            wmUserDto.setId(wmUserId);
        }catch (Exception e){
            log.error("远程调用wemedia,创建用户失败,userId={}",userId);
            e.printStackTrace();
            throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
        }
//        远程调用,article服务,创建作者
        AuthorDto authorDto = new AuthorDto();
        authorDto.setUserId(userId);
        authorDto.setWmUserId(wmUserDto.getId());
        authorDto.setName(apUser.getName());
        authorDto.setType(2);
        try {
            Integer authorId = articleFeign.saveAuthor(authorDto);
        }catch (Exception e){
            log.error("远程调用article,创建用户失败,userId={}",userId);
            e.printStackTrace();
            throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
        }
//        修改user的flag状态,改为 1- 自媒体人
        apUser = new ApUser();
        apUser.setId(userId);
        apUser.setFlag(1);
        boolean b1 = apUserService.updateById(apUser);
        if(!b1){
            log.error("修改用户flag失败,userId={}",userId);
            throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
        }
    }