黑马头条day08 -下部

目录

一、用户审核

1.查询列表

1.1实体类准备

1.2接口: ApUserRealnameController

1.3mapper:ApUserRealnameMapper

1.4service实现类:ApUserRealnameServiceImpl

2.审核成功

2.1.创建常量类:UserConstans

2.2.定义feignclient

2.3.完善ApUserRealnameController

2.4.完善service实现类

3.审核失败

3.1完善ApUserRenalnameController

二、自媒体文章人工审核

1.文章列表查询

1.1创建实体类以及常量类准备

1.2完善WmNewsController

1.3service实现类完善

1.4mapper接口

1.5mapper.xml文件

2.查询文章详情

2.1完善WmNewsController

2.2service实现类

3.审核失败、审核通过

3.1完善WmNewsController

3.2servie实现类


黑马头条day08下半部分用户审核、自媒体文章人工审核来啦!

一、用户审核

该部分写在user模块中

1.查询列表

1.1实体类准备

pojo类:ApUserRealname 

package com.heima.model.admin.pojos;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * APP实名认证信息表
 * </p>
 *
 * @author itheima
 */
@Data
@TableName("ap_user_realname")
public class ApUserRealname implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 账号ID
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 用户名称
     */
    @TableField("name")
    private String name;

    /**
     * 资源名称
     */
    @TableField("idno")
    private String idno;

    /**
     * 正面照片
     */
    @TableField("font_image")
    private String fontImage;

    /**
     * 背面照片
     */
    @TableField("back_image")
    private String backImage;

    /**
     * 手持照片
     */
    @TableField("hold_image")
    private String holdImage;

    /**
     * 活体照片
     */
    @TableField("live_image")
    private String liveImage;

    /**
     * 状态
            0 创建中
            1 待审核
            2 审核失败
            9 审核通过
     */
    @TableField("status")
    private Short status;

    /**
     * 拒绝原因
     */
    @TableField("reason")
    private String reason;

    /**
     * 创建时间
     */
    @TableField("created_time")
    private Date createdTime;

    /**
     * 提交时间
     */
    @TableField("submited_time")
    private Date submitedTime;

    /**
     * 更新时间
     */
    @TableField("updated_time")
    private Date updatedTime;

}

dto:AuthDto

package com.heima.model.admin.dtos;

import com.heima.model.common.dtos.PageRequestDto;
import lombok.Data;

/**
 * @author Z-熙玉
 * @version 1.0
 */
@Data
public class AuthDto extends PageRequestDto {

    private Integer id;
    private String msg;
    private Integer status;
}
1.2接口: ApUserRealnameController
@RestController
@RequestMapping("/api/v1/auth")
public class ApUserRealnameController {

    @Autowired
    private ApUserRealnameService apUserRealnameService;

    @PostMapping("/list")
    public ResponseResult list(@RequestBody AuthDto authDto) {
        return apUserRealnameService.list(authDto);
    }
}
1.3mapper:ApUserRealnameMapper
package com.heima.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.heima.model.admin.pojos.ApUserRealname;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author Z-熙玉
 * @version 1.0
 */
@Mapper
public interface ApUserRealnameMapper extends BaseMapper<ApUserRealname> {
}
1.4service实现类:ApUserRealnameServiceImpl
@Service
@Slf4j
public class ApUserRealnameServiceImpl extends ServiceImpl<ApUserRealnameMapper, ApUserRealname> implements ApUserRealnameService {

    /**
     * 用户审核列表 - 根据状态分页查询
     * @param dto
     * @return
     */
    @Override
    public ResponseResult list(AuthDto dto) {

        //校验参数
        if (dto == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        dto.checkParam();

        //分页查询
        IPage page = new Page(dto.getPage(), dto.getSize());
        LambdaQueryWrapper<ApUserRealname> queryWrapper = new LambdaQueryWrapper<>();

        //根据状态查询
        if (dto.getStatus() != null) {
            queryWrapper.eq(ApUserRealname::getStatus, dto.getStatus());
        }
        page = page(page, queryWrapper);

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

2.审核成功

2.1.创建常量类:UserConstans
package com.heima.common.constants;

public class UserConstants {
    public static final Short PASS_AUTH = 9;
    public static final Short FAIL_AUTH = 2;
    public static final Integer AUTH_TYPE = 2;
}
2.2.定义feignclient

因为审核成功之后是需要创建自媒体账号的,因此需要调用自媒体服务的接口,需要定义feignclient,进行远程调用。

首先在api模块中创建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;

/**
 * @author Z-熙玉
 * @version 1.0
 */
@FeignClient("leadnews-wemedia")
public interface IWemediaClient {

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

    /**
     * 创建自媒体用户
     * @param wmUser
     */
    @PostMapping("/api/v1/wm_user/save")
    ResponseResult saveWmUser(@RequestBody WmUser wmUser);
}

其次在自媒体服务创建feign接口的实现(也就是编写controller接口以及业务方法),一般来讲,定义feign是不需要实现api中的feign接口就可以进行调用的,但是老师这里还有之前都会进行实现,我斗胆猜测一下原因:因为这些接口不是对外暴露,也就是前端是没有发送这个请求的,这些接口只对服务内部进行调用,因此老师才会单独创建一个feign包,将controller定义在其中,并实现feign接口提高调用效率。(仅是个人猜测)

package com.heima.wemedia.feign;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.heima.apis.wemedia.IWemediaClient;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.wemedia.pojos.WmUser;
import com.heima.wemedia.service.WmUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author Z-熙玉
 * @version 1.0
 */
@RestController
public class WemediaClient implements IWemediaClient {

    @Autowired
    private WmUserService wmUserService;

    /**
     * 根据名称查询自媒体用户信息
     * @param name
     * @return
     */
    @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
     */
    @Override
    @PostMapping("/api/v1/wm_user/save")
    public ResponseResult saveWmUser(@RequestBody WmUser wmUser) {
        wmUserService.save(wmUser);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

}

注意:记得在user启类加上EnableFeignClient注解,不然小心报nosuchbean的异常哦

2.3.完善ApUserRealnameController
@PostMapping("/authPass")
public ResponseResult authPass(@RequestBody AuthDto authDto) {
   return apUserRealnameService.updateStatus(authDto, UserConstants.PASS_AUTH);
}
2.4.完善service实现类
    /**
     * 更新认证状态
     * @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);
        }

        //修改认证状态
        ApUserRealname apUserRealname = new ApUserRealname();
        apUserRealname.setId(dto.getId());
        apUserRealname.setStatus(status);
        apUserRealname.setUpdatedTime(new Date());
        if(StringUtils.isNotBlank(dto.getMsg())){
            apUserRealname.setReason(dto.getMsg());
        }
        updateById(apUserRealname);

        //如果认证成功,则创建账户
        if (status.equals(UserConstants.PASS_AUTH)) {
            ResponseResult responseResult = createWmUserAndAuthor(dto);
            return responseResult;
        }

        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    @Autowired
    private IWemediaClient wemediaClient;

    @Autowired
    private ApUserMapper apUserMapper;

    /**
     * 创建账户
     * @param dto
     * @return
     */
    private ResponseResult createWmUserAndAuthor(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);
        }
        //创建自媒体账户
        WmUser wmUser = wemediaClient.findWmUserByName(apUser.getName());
        if(wmUser == null){
            wmUser= new 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;
    }

3.审核失败

3.1完善ApUserRenalnameController
@PostMapping("/authPass")
public ResponseResult authPass(@RequestBody AuthDto authDto) {
    return apUserRealnameService.updateStatus(authDto, UserConstants.PASS_AUTH);
}

因为和审核成功调用的是同一个service方法,只是参数不同,因此,只需定义controller接口即可

二、自媒体文章人工审核

此部分在自媒体模块中完成

1.文章列表查询

1.1创建实体类以及常量类准备

dto:NewsAuthDto

package com.heima.model.admin.dtos;

import com.heima.model.common.dtos.PageRequestDto;
import lombok.Data;

/**
 * @author Z-熙玉
 * @version 1.0
 */
@Data
public class NewsAuthDto extends PageRequestDto {

    private Integer id;
    private String msg;
    private Integer status;
    private String title;
}

vo:WmNewsVo

package com.heima.model.wemedia.vos;

import com.heima.model.wemedia.pojos.WmNews;
import lombok.Data;

@Data
public class WmNewsVo extends WmNews {
    /**
     * 作者名称
     */
    private String authorName;
}

常量类:WemediaConstans

package com.heima.common.constants;

public class WemediaConstants {

    public static final Short COLLECT_MATERIAL = 1;//收藏

    public static final Short CANCEL_COLLECT_MATERIAL = 0;//取消收藏

    public static final String WM_NEWS_TYPE_IMAGE = "image";

    public static final Short WM_NEWS_NONE_IMAGE = 0;
    public static final Short WM_NEWS_SINGLE_IMAGE = 1;
    public static final Short WM_NEWS_MANY_IMAGE = 3;
    public static final Short WM_NEWS_TYPE_AUTO = -1;

    public static final Short WM_CONTENT_REFERENCE = 0;
    public static final Short WM_COVER_REFERENCE = 1;

    public static final Short WM_NEWS_AUTH_PASS = 4;
    public static final Short WM_NEWS_AUTH_FAIL = 2;
}
1.2完善WmNewsController
    @PostMapping("/list_vo")
    public ResponseResult findList(@RequestBody NewsAuthDto dto) {
        return wmNewsService.findList(dto);
    }
1.3service实现类完善
       /**
     * 管理端文章列表查询
     * @param dto
     * @return
     */
    @Override
    public ResponseResult findList(NewsAuthDto dto) {

        //校验参数
        if (dto == null || dto.getId() == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        dto.checkParam();

        //2.分页查询+count查询
        dto.setPage((dto.getPage()-1)*dto.getSize());
        List<WmNewsVo> wmNewsVoList = wmNewsMapper.findListAndPage(dto);
        int count = wmNewsMapper.findListCount(dto);

        //3.结果返回
        ResponseResult responseResult = new     PageResponseResult(dto.getPage(),dto.getSize(),count);
        responseResult.setData(wmNewsVoList);
        return responseResult;
    }
1.4mapper接口
package com.heima.wemedia.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.heima.model.admin.dtos.NewsAuthDto;
import com.heima.model.wemedia.pojos.WmNews;
import com.heima.model.wemedia.vos.WmNewsVo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


@Mapper
public interface WmNewsMapper extends BaseMapper<WmNews> {

    /**
     * 文章分页查询
     * @param dto
     * @return
     */
    List<WmNewsVo> findListAndPage(NewsAuthDto dto);

    /**
     * 查询记录数
     * @param dto
     * @return
     */
    int findListCount(NewsAuthDto dto);
}
1.5mapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.heima.wemedia.mapper.WmNewsMapper">
    <select id="findListAndPage" parameterType="com.heima.model.admin.dtos.NewsAuthDto"
    resultType="com.heima.model.wemedia.vos.WmNewsVo">
        SELECT
            wn.*,wu.`name` authorName
        FROM
            wm_news wn
                LEFT JOIN
            wm_user wu
            ON wn.user_id = wu.id
        <where>
            <if test="dto.title!=null and dto.title!=''">
                and wn.title like concat('%',#{dto.title},'%')
            </if>
            <if test="dto.status!=null">
                and wn.status = #{dto.status}
            </if>
        </where>
        limit #{dto.page},#{dto.size}
    </select>

    <select id="findListCount" parameterType="com.heima.model.admin.dtos.NewsAuthDto"
            resultType="int">
        SELECT
        count(1)
        FROM
        wm_news  wn
        LEFT JOIN
        wm_user wu
        ON wn.user_id = wu.id
        <where>
            <if test="dto.title!=null and dto.title!=''">
                and wn.title like concat('%',#{dto.title},'%')
            </if>
            <if test="dto.status!=null">
                and wn.status = #{dto.status}
            </if>
        </where>

    </select>

</mapper>

2.查询文章详情

2.1完善WmNewsController
    @GetMapping("/one_vo/{id}")
    public ResponseResult findWmNewsVo(@PathVariable("id") Integer id) {
        return wmNewsService.findWmNewsVo(id);
    }
2.2service实现类
/**
     * 管理端查看文章详情请
     * @param id
     * @return
     */
    @Override
    public ResponseResult findWmNewsVo(Integer id) {
        //1.检查参数
        if(id == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        //2.查询文章信息
        WmNews wmNews = getById(id);
        if(wmNews == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

        //3.查询用户信息
        WmUser wmUser = wmUserMapper.selectById(wmNews.getUserId());

        //4.封装vo返回
        WmNewsVo vo = new WmNewsVo();
        //属性拷贝
        BeanUtils.copyProperties(wmNews,vo);
        if(wmUser != null){
            vo.setAuthorName(wmUser.getName());
        }

//        ResponseResult responseResult = new ResponseResult().ok(vo);
//        return responseResult;
        return ResponseResult.okResult(vo);
    }

3.审核失败、审核通过

审核失败既前端点击了“驳回”,表示人工审核不通过

3.1完善WmNewsController
    @PostMapping("/auth_fail")
    public ResponseResult authFail(@RequestBody NewsAuthDto dto) {
        return wmNewsService.updateStatus(dto, WemediaConstants.WM_NEWS_AUTH_FAIL);
    }

    @PostMapping("/auth_pass")
    public ResponseResult authPass(@RequestBody NewsAuthDto dto) {
        return wmNewsService.updateStatus(dto, WemediaConstants.WM_NEWS_AUTH_PASS);
    }
3.2servie实现类
    /**
     * 审核文章,修改状态
     * @param dto
     * @param status
     * @return
     */
    @Override
    public ResponseResult updateStatus(NewsAuthDto dto, Short status) {
        //1.检查参数
        if(dto == null || dto.getId() == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        //2.查询文章信息
        WmNews wmNews = getById(dto.getId());
        if(wmNews == null){
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

        //3.修改文章的状态
        wmNews.setStatus(status);
        if(StringUtils.isNotBlank(dto.getMsg())){
            wmNews.setReason(dto.getMsg());
        }
        updateById(wmNews);

        //审核成功,则需要创建app端文章数据,并修改自媒体文章
        if(status.equals(WemediaConstants.WM_NEWS_AUTH_PASS)){
            //创建app端文章数据
            ResponseResult responseResult = wmNewsAutoScanService.saveAppArticle(wmNews);
            if(responseResult.getCode().equals(200)){
                wmNews.setArticleId((Long) responseResult.getData());
                wmNews.setStatus(WmNews.Status.PUBLISHED.getCode());
                updateById(wmNews);
            }
        }

注意:审核成功后,需要在app端创建文章数据,这时候需要调用wmNewsAutoScanService的saveAppArticle方法,这个方法我们之前在做文章自动审核时创建过,但是应该是私有的,既private,所以在这里如果调用报错的话,找到这个方法,修改为public即可。

至此,day08实战部分全部结束,本文章仅提供参考,不要直接照搬哦,一定要自己动手做,“我亦无他,唯手熟尔”,只有亲自动手才能真正有所收获,祝小伙伴们在码农的道路上一帆风顺!

有问题的话还是在评论区交流哦,看到了就会回答的,另外,给孩子个点赞加关注吧,据说点赞的人,bug会离你越来越远哦。(明天更新day09实战)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值