首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo 分布式架构搭建教育 PC 站 - 后端:订单模块,留言模块

Dubbo 分布式架构搭建教育 PC 站 - 后端:订单模块,留言模块

作者头像
RendaZhang
发布2020-11-04 15:21:27
4470
发布2020-11-04 15:21:27
举报
文章被收录于专栏:RendaRenda
订单模块
购买 / 生成订单

功能描述:

用户选好课程点击立即购买,调用后端接口,开始创建商品订单。
需要校验必要数据:用户是否登录;
接口的请求入参,课程是否存在,课程是否上架;
该用户之前是否成功购买过该课程;
如校验不通过提示相应的文案。
查看该用户是否存在有效未成功的订单;
如果存在直接返回对应的订单号;
如果不存在创建新的课程订单,返回新的订单号。

功能接口:/saveOrder?orderNo={orderNo}&user_id={userid}&course_id={courseid}&activity_course_id={acid}&source_type={stype}

`lagou-edu-dao`

src\main\resources\com\renda\mapper\OrderDao.xm

<?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.renda.mapper.OrderDao">

    <insert id="saveOrder">
    insert  into `user_course_order`
    (`order_no`,`user_id`,`course_id`,`activity_course_id`,`source_type`,`status`,`create_time`,`update_time`,`is_del`)
    values
    (#{orderNo},#{user_id},#{course_id},#{activity_course_id},#{source_type},0,sysdate(),sysdate(),0)
   </insert>

</mapper>

com.renda.mapper.OrderDao

@Service
public interface OrderDao {

    /**
     * 生成订单
     *
     * @param orderNo            订单编号
     * @param user_id            用户编号
     * @param course_id          课程编号
     * @param activity_course_id 活动课程编号
     * @param source_type        订单来源类型
     */
    void saveOrder(@Param("orderNo") String orderNo,
                   @Param("user_id") String user_id,
                   @Param("course_id") String course_id,
                   @Param("activity_course_id") String activity_course_id,
                   @Param("source_type") String source_type);

}
`lagou-edu-service`

com.renda.order.OrderService

public interface OrderService {

    /**
     * 生成订单
     *
     * @param orderNo            订单编号
     * @param user_id            用户编号
     * @param course_id          课程编号
     * @param activity_course_id 活动课程编号
     * @param source_type        订单来源类型
     */
    void saveOrder(String orderNo, String user_id, String course_id, String activity_course_id, String source_type);

}

com.renda.order.impl.OrderServiceImpl

@Service // Dubbo 暴露服务
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderDao orderDao;

    @Override
    public void saveOrder(String orderNo, String user_id, String course_id, String activity_course_id, String source_type) {
        orderDao.saveOrder(orderNo, user_id, course_id, activity_course_id, source_type);
    }

}

src\test\java\order\TestOrder.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring/spring-*.xml"})
public class TestOrder {

    @Autowired
    private OrderService orderService;

    @Test
    public void saveOrder() {
        String orderNo = UUID.randomUUID().toString();
        String user_id = "100030011";
        String course_id = "7";
        // 0 表示本课程没有活动
        String activity_course_id = "0";
        String source_type = "1";
        orderService.saveOrder(orderNo, user_id, course_id, activity_course_id, source_type);
    }

}
`lagou-edu-web`

com.renda.order.OrderService

public interface OrderService {
    void saveOrder(String orderNo, String user_id, String course_id, String activity_course_id, String source_type);
}

com.renda.order.controller.OrderController

@RestController
@RequestMapping("order")
public class OrderController {

    // 远程消费
    @Reference
    private OrderService orderService;

    @GetMapping("saveOrder")
    public String saveOrder(String orderNo, String user_id, String course_id, String activity_course_id, String source_type) {
        orderService.saveOrder(orderNo, user_id, course_id, activity_course_id, source_type);
        return orderNo;
    }

}

浏览器访问:http://localhost:8002/order/saveOrder?orderNo=1&user_id=100030018&course_id=1&activity_course_id=0&source_type=1

订单操作

功能描述:

1、修改订单状态。
2、删除订单。
3、查询已登录用户的全部订单。

功能接口:

/order/updateOrder?orderNo={orderNo}&status={status}
/order/deleteOrder/{orderNo}
/order/getOrdersByUserId/{userid}
`lagou-edu-entity`

com.renda.entity.UserCourseOrder

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserCourseOrder implements Serializable {
    private static final long serialVersionUID = 777308790778683330L;
    ...
}
`lagou-edu-dao`

src\main\resources\com\renda\mapper\OrderDao.xm

<?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.renda.mapper.OrderDao">

    <resultMap type="com.renda.entity.UserCourseOrder" id="orderMap">
        <result property="id" column="id" jdbcType="INTEGER"/>
        <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
        <result property="userId" column="user_id" jdbcType="OTHER"/>
        <result property="courseId" column="course_id" jdbcType="OTHER"/>
        <result property="activityCourseId" column="activity_course_id" jdbcType="INTEGER"/>
        <result property="sourceType" column="source_type" jdbcType="OTHER"/>
        <result property="status" column="status" jdbcType="OTHER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="isDel" column="is_del" jdbcType="OTHER"/>
    </resultMap>

    ...

    <update id="updateOrder">
        update user_course_order set status = #{status} where order_no = #{orderNo} and is_del = 0
    </update>

    <update id="deleteOrder">
        update user_course_order set is_del= 1 where order_no = #{orderNo}
    </update>

    <select id="getOrdersByUserId" resultMap="orderMap">
        select * from user_course_order where is_del = 0 and user_id = #{userId}
    </select>

</mapper>

com.renda.mapper.OrderDao

@Service
public interface OrderDao {
    ...

    /**
     * 修改订单状态
     *
     * @param orderNo 订单编号
     * @param status  订单状态 0已创建 10已支付 20已完成 30已取消 40已过期
     * @return 受影响的行数
     */
    Integer updateOrder(@Param("orderNo") String orderNo, @Param("status") int status);

    /**
     * 删除订单
     *
     * @param orderNo 订单编号
     * @return 受影响的行数
     */
    Integer deleteOrder(@Param("orderNo") String orderNo);

    /**
     * 查询登录用户的全部订单
     *
     * @param userId 用户编号
     * @return 所有订单
     */
    List<UserCourseOrder> getOrdersByUserId(@Param("userId") String userId);

}
`lagou-edu-service`

com.renda.order.OrderService

public interface OrderService 
    ...
    Integer updateOrder(String orderNo, int status);
    Integer deleteOrder(String orderNo);
    List<UserCourseOrder> getOrdersByUserId(String userId);
}

com.renda.order.impl.OrderServiceImpl

@Service // Dubbo 暴露服务
public class OrderServiceImpl implements OrderService {
    ...

    @Override
    public Integer updateOrder(String orderNo, int status) {
        return orderDao.updateOrder(orderNo,status);
    }

    @Override
    public Integer deleteOrder(String orderNo) {
        return orderDao.deleteOrder(orderNo);
    }

    @Override
    public List<UserCourseOrder> getOrdersByUserId(String userId) {
        return orderDao.getOrdersByUserId(userId);
    }
}
`lagou-edu-web`

com.renda.order.OrderService

public interface OrderService {
    ...
    Integer updateOrder(String orderNo, int status);
    Integer deleteOrder(@Param("orderNo") String orderNo);
    List<UserCourseOrder> getOrdersByUserId(String userId);
}

com.renda.order.controller.OrderController

@RestController
@RequestMapping("order")
public class OrderController {
    ...

    @GetMapping("updateOrder")
    public Integer updateOrder(String orderNo, Integer status) {
        System.out.println("订单编号 = " + orderNo);
        System.out.println("状态编码 = " + status);
        Integer integer = orderService.updateOrder(orderNo, status);
        System.out.println("订单更新 = " + integer);
        return integer;
    }

    @GetMapping("deleteOrder/{orderno}")
    public Integer deleteOrder(@PathVariable("orderno") String orderno) {
        Integer integer = orderService.deleteOrder(orderno);
        return integer;
    }

    @GetMapping("getOrdersByUserId/{userid}")
    public List<UserCourseOrder> getOrdersByUserId(@PathVariable("userid") String userid) {
        List<UserCourseOrder> list = orderService.getOrdersByUserId(userid);
        return list;
    }
}

浏览器访问:

http://localhost:8002/order/updateOrder?orderNo=1&status=20

http://localhost:8002/order/getOrdersByUserId/100030018

http://localhost:8002/order/deleteOrder/1


留言模块
保存留言

功能描述:

1、课程Id和评论内容都不能为空。

2、保存留言时需要保存用户的 ID,以便于查看留言时候判断留言是否是某个用户写的。

功能接口:/course/comment/saveCourseComment?courseid={courseid}&userid={userid}&username={username}&comment={comment}

`lagou-edu-entity`

com.renda.entity.CourseComment

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class CourseComment implements Serializable {
    private static final long serialVersionUID = 922554392538715061L;
    ...
}

com.renda.entity.CourseCommentFavoriteRecord

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class CourseCommentFavoriteRecord implements Serializable {
    private static final long serialVersionUID = ;
    ...
}
`lagou-edu-dao`

com.renda.mapper.CourseCommentDao

@Service
public interface CourseCommentDao {
    /**
     * 保存留言
     *
     * @param comment 留言内容对象
     * @return 受影响的行数
     */
    Integer saveComment(CourseComment comment);
}

src\main\resources\com\renda\mapper\CourseCommentDao.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.renda.mapper.CourseCommentDao">

    <resultMap type="com.renda.entity.CourseComment" id="commentMap">
        <result property="id" column="cc_id" jdbcType="OTHER"/>
        <result property="courseId" column="course_id" jdbcType="INTEGER"/>
        <result property="sectionId" column="section_id" jdbcType="INTEGER"/>
        <result property="lessonId" column="lesson_id" jdbcType="INTEGER"/>
        <result property="userId" column="cc_user_id" jdbcType="INTEGER"/>
        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
        <result property="parentId" column="parent_id" jdbcType="INTEGER"/>
        <result property="isTop" column="is_top" jdbcType="OTHER"/>
        <result property="comment" column="comment" jdbcType="VARCHAR"/>
        <result property="likeCount" column="like_count" jdbcType="INTEGER"/>
        <result property="isReply" column="is_reply" jdbcType="OTHER"/>
        <result property="type" column="type" jdbcType="INTEGER"/>
        <result property="status" column="status" jdbcType="INTEGER"/>
        <result property="createTime" column="cc_create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="cc_update_time" jdbcType="TIMESTAMP"/>
        <result property="isDel" column="cc_is_del" jdbcType="OTHER"/>
        <result property="lastOperator" column="last_operator" jdbcType="INTEGER"/>
        <result property="isNotify" column="is_notify" jdbcType="OTHER"/>
        <result property="markBelong" column="mark_belong" jdbcType="OTHER"/>
        <result property="replied" column="replied" jdbcType="OTHER"/>
        <!-- N 个点赞 -->
        <collection property="favoriteRecords" ofType="com.renda.entity.CourseCommentFavoriteRecord">
            <result property="id" column="ccfr_id" jdbcType="OTHER"/>
            <result property="userId" column="ccfr_user_id" jdbcType="INTEGER"/>
            <result property="commentId" column="comment_id" jdbcType="INTEGER"/>
            <result property="isDel" column="ccfr_is_del" jdbcType="OTHER"/>
            <result property="createTime" column="ccfr_create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="ccfr_update_time" jdbcType="TIMESTAMP"/>
        </collection>
    </resultMap>

    <!-- 保存留言 -->
    <insert id="saveComment">
       insert  into `course_comment`(`course_id`,`section_id`,`lesson_id`,`user_id`,`user_name`,`parent_id`,`is_top`,`comment`,`like_count`,`is_reply`,`type`,`status`,`create_time`,`update_time`,`is_del`,`last_operator`,`is_notify`,`mark_belong`,`replied`)
       values
       (#{courseId},#{sectionId},#{lessonId},#{userId},#{userName},#{parentId},0,#{comment},0,0,#{type},0,sysdate(),sysdate(),0,#{lastOperator},1,0,0)
    </insert>

</mapper>
`lagou-edu-service`

com.renda.comment.CommentService

public interface CommentService {
    Integer saveComment(CourseComment comment);
}

com.renda.comment.impl.CommentServiceImpl

@Service // Dubbo 暴露服务
public class CommentServiceImpl implements CommentService {
    @Autowired
    private CourseCommentDao courseCommentDao;

    @Override
    public Integer saveComment(CourseComment comment) {
        return courseCommentDao.saveComment(comment);
    }
}

src\test\java\comment\TestComment.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring/spring-*.xml"})
public class TestComment {
    @Autowired
    private CommentService commentService;

    @Test
    public void save() {
        CourseComment comment = new CourseComment();
        // 课程编号
        comment.setCourseId();
        // 章节编号
        comment.setSectionId();
        // 小节编号
        comment.setLessonId();
        // 用户编号
        comment.setUserId();
        // 用户昵称
        comment.setUserName("Renda");
        // 没有父 id
        comment.setParentId();
        // 留言内容
        comment.setComment("What's up!");
        // 0 用户留言
        comment.setType();
        // 最后操作的用户编号
        comment.setLastOperator();
        Integer i = commentService.saveComment(comment);
        System.out.println(i);
    }
}
`lagou-edu-web`

com.renda.comment.CommentService

public interface CommentService {
    Integer saveComment(CourseComment comment);
}

com.renda.comment.controller.CommentController

@RestController
@RequestMapping("course")
public class CommentController {
    // 远程消费
    @Reference
    private CommentService commentService;

    @GetMapping("comment/saveCourseComment")
    public Object saveCourseComment(Integer courseid, Integer userid, String username, String comment) throws UnsupportedEncodingException {
        username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
        comment = new String(comment.getBytes("ISO-8859-1"), "UTF-8");
        System.out.println("昵称:" + username);
        CourseComment courseComment = new CourseComment();
        // 课程编号
        courseComment.setCourseId(courseid);
        // 章节编号 (预留字段,为项目的 2.0 版本保留)
        courseComment.setSectionId();
        // 小节编号(预留字段,为项目的 2.0 版本保留)
        courseComment.setLessonId();
        // 用户编号
        courseComment.setUserId(userid);
        // 用户昵称
        courseComment.setUserName(username);
        // 没有父 id(预留字段,为项目的 2.0 版本保留)
        courseComment.setParentId();
        // 留言内容
        courseComment.setComment(comment);
        // 0 用户留言(预留字段,为项目的 2.0 版本保留)
        courseComment.setType();
        // 最后操作的用户编号
        courseComment.setLastOperator(userid);
        return commentService.saveComment(courseComment);
    }
}

浏览器访问:

http://localhost:8002/course/comment/saveCourseComment?courseid=8&userid=100030011&username=Renda&comment=大家好

留言列表

某门课程的全部留言

功能描述:

1、通过课程 Id、页号和用户 ID 分页获取留言信息,每页默认条数是 20 条;当用户 Id 不为空的时候,前端标识出此用户点赞的留言。
2、留言中返回重要内容中包括:评论内容、本人是否点赞、用户昵称、是否点过赞标识和点赞数量。
3、留言按照点赞数量和创建时间的倒序显示。

功能接口:

/course/comment/getCourseCommentList/{courseid}/{pageIndex}/{pageSize}

`lagou-edu-dao`

com.renda.mapper.CourseCommentDao

@Service
public interface CourseCommentDao {
    ...
    /**
     * 某个课程的全部留言(分页)
     *
     * @param courseid 课程编号
     * @param offset 数据偏移
     * @param pageSize 每页条目数
     * @return 留言集合
     */
    List<CourseComment> getCommentsByCourseId(@Param("courseid")Integer courseid, @Param("offset")Integer offset, @Param("pageSize")Integer pageSize);
}

src\main\resources\com\renda\mapper\CourseCommentDao.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.renda.mapper.CourseCommentDao">
    ...
    <select id="getCommentsByCourseId" resultMap="commentMap">
        select
        cc.id cc_id,`course_id`,`section_id`,`lesson_id`,cc.user_id cc_user_id,`user_name`,`parent_id`,`is_top`,`comment`,`like_count`,`is_reply`,`type`,`status`,cc.create_time cc_create_time ,cc.update_time cc_update_time,
        cc.is_del cc_is_del,`last_operator`,`is_notify`,`mark_belong`,`replied`,ccfr.id ccfr_id,ccfr.user_id ccfr_user_id,comment_id,ccfr.is_del ccfr_is_del,ccfr.create_time ccfr_create_time,ccfr.update_time ccfr_update_time
        from course_comment cc left join (select * from course_comment_favorite_record where is_del = 0) ccfr on cc.id = ccfr.comment_id
        where cc.is_del = 0 and course_id = #{courseid}
        order by is_top desc , like_count desc , cc.create_time desc
        limit #{offset}, #{pageSize}
    </select>
</mapper>
`lagou-edu-service`

com.renda.comment.CommentService

public interface CommentService {
    private CourseCommentDao courseCommentDao;
    ...
    List<CourseComment> getCommentsByCourseId(Integer courseid, Integer offset, Integer pageSize);
}

com.renda.comment.impl.CommentServiceImpl

@Service // Dubbo 暴露服务
public class CommentServiceImpl implements CommentService {
    @Autowired
    private CourseCommentDao courseCommentDao;
    ...
    @Override
    public List<CourseComment> getCommentsByCourseId(Integer courseid, Integer offset, Integer pageSize) {
        return courseCommentDao.getCommentsByCourseId(courseid, offset, pageSize);
    }
}

src\test\java\comment\TestComment.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring/spring-*.xml"})
public class TestComment {
    @Autowired
    private CommentService commentService;
    ...
    @Test
    public void getCommentsByCourseId() {
        int pageSize = ;
        // 页码(第几页)
        int pageIndex = ;

        List<CourseComment> list = commentService.getCommentsByCourseId(, (pageIndex - ) * pageSize, pageSize);
        for (int i = ; i < list.size(); i++) {
            CourseComment comment = list.get(i);
            System.out.println((i + ) + " 楼 【" + comment.getUserName() + "】 说:" + comment.getComment());
        }
    }
}
`lagou-edu-web`

com.renda.comment.CommentService

public interface CommentService {
    ...
    List<CourseComment> getCommentsByCourseId(Integer courseid, Integer offset, Integer pageSize);
}

com.renda.comment.controller.CommentController

@RestController
@RequestMapping("course")
public class CommentController {
    // 远程消费
    @Reference
    private CommentService commentService;
    ...
    @GetMapping("comment/getCourseCommentList/{courseid}/{pageIndex}/{pageSize}")
    public List<CourseComment> getCommentsByCourseId(@PathVariable("courseid") Integer courseid, @PathVariable("pageIndex") Integer pageIndex, @PathVariable("pageSize") Integer pageSize) {
        int offset = (pageIndex - ) * pageSize;
        List<CourseComment> list = commentService.getCommentsByCourseId(courseid, offset, pageSize);
        System.out.println("获取第" + courseid + "门课程的留言:共计" + list.size() + "条");
        return list;
    }
}

浏览器访问:

http://localhost:8002/course/comment/getCourseCommentList/1/2/20

留言点赞 / 取消赞

功能描述:

点赞
1、先根据用户 ID 和留言 ID 查看留言是否存在点赞信息;如果存在则更新删除状态,否则保存点赞信息。
2、保存点赞后,需要更新对应留言的点赞数量。
取消赞
1、通过用户 ID 和留言 ID 获取用户的点赞信息。
2、然后将记录进行逻辑删除,然后更新对应记录的点赞数量。

功能接口:

点赞
/course/comment/saveFavorite/{commentid}/{userid}
取消赞
/course/comment/cancelFavorite/{commentid}/{userid}
`lagou-edu-dao`

com.renda.mapper.CourseCommentDao

@Service
public interface CourseCommentDao {
    ...
    /**
     * 查看某个用户的某条留言是否点过赞
     *
     * @param comment_id 留言编号
     * @param userid     用户编号
     * @return 0:没点过赞,1:点过赞
     */
    Integer existsFavorite(@Param("cid") Integer comment_id, @Param("uid") Integer userid);

    /**
     * 保存点赞信息
     *
     * @param comment_id 留言编号
     * @param userid     用户编号
     * @return 0:保存失败,1:保存成功
     */
    Integer saveCommentFavorite(@Param("cid") Integer comment_id, @Param("uid") Integer userid);

    /**
     * 更新点赞信息的状态(将 is_del=0,表示已赞)
     *
     * @param status     状态,0:已赞,1:取消赞
     * @param comment_id 留言编号
     * @param userid     用户编号
     * @return 0:保存失败,1:保存成功
     */
    Integer updateFavoriteStatus(@Param("status") Integer status, @Param("cid") Integer comment_id, @Param("uid") Integer userid);

    /**
     * 更新点赞的数量
     *
     * @param x          +1 的话,赞的数量增加,-1 的话,赞的数量减少
     * @param comment_id 某条留言的编号
     * @return 0:保存失败,1:保存成功
     */
    Integer updateLikeCount(@Param("x") Integer x, @Param("comment_id") Integer comment_id);  
}

src\main\resources\com\renda\mapper\CourseCommentDao.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.renda.mapper.CourseCommentDao">
    ...
    <!-- 查看某个用户的某条留言是否点过赞 -->
    <select id="existsFavorite" resultType="Integer">
        select count(*) from course_comment_favorite_record where comment_id = #{cid} and user_id = #{uid}
    </select>

    <!-- 没有点过赞,保存点赞信息 -->
    <insert id="saveCommentFavorite">
        insert into `course_comment_favorite_record` (user_id,`comment_id`,`is_del`,`create_time`,`update_time`)
        values (#{uid},#{cid},0,sysdate(),sysdate())
    </insert>

    <!-- 修改点赞的状态,0 表示点赞,1 表示取消赞 -->
    <update id="updateFavoriteStatus">
        update course_comment_favorite_record set is_del = #{status} where comment_id = #{cid} and user_id = #{uid}
    </update>

    <!-- 点赞之后,赞的数量 +1;取消赞之后,赞的数量 -1 -->
    <update id="updateLikeCount">
        update course_comment set like_count = like_count + #{x} where id = #{comment_id}
    </update>
</mapper>
`lagou-edu-service`

com.renda.comment.CommentService

public interface CommentService {
    ...
    /**
     * 点赞
     *
     * @param comment_id 留言编号
     * @param userid     用户编号
     * @return 0:保存失败,1:保存成功
     */
    Integer saveFavorite(Integer comment_id, Integer userid);

    /**
     * 取消赞
     *
     * @param comment_id 留言编号
     * @param userid     用户编号
     * @return 0:保存失败,1:保存成功
     */
    Integer cancelFavorite(Integer comment_id, Integer userid);
}

com.renda.comment.impl.CommentServiceImpl

@Service // Dubbo 暴露服务
public class CommentServiceImpl implements CommentService {
    @Autowired
    private CourseCommentDao courseCommentDao;

    ...

    @Override
    public Integer saveFavorite(Integer comment_id, Integer userid) {
        Integer i = courseCommentDao.existsFavorite(comment_id, userid);
        int i1;
        int i2;
        if (i == ) {
            // 没点过赞
            i1 = courseCommentDao.saveCommentFavorite(comment_id, userid);
        } else {
            i1 = courseCommentDao.updateFavoriteStatus(, comment_id, userid);
        }
        i2 = courseCommentDao.updateLikeCount(, comment_id);
        if (i1 ==  || i2 == ) {
            throw new RuntimeException("点赞失败");
        }
        return comment_id;
    }

    @Override
    public Integer cancelFavorite(Integer comment_id, Integer userid) {
        Integer i1 = courseCommentDao.updateFavoriteStatus(, comment_id, userid);
        Integer i2 = courseCommentDao.updateLikeCount(-, comment_id);

        if (i1 ==  || i2 == ) {
            throw new RuntimeException("取消赞失败");
        }
        return i2;
    }
}

src\test\java\comment\TestComment.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring/spring-*.xml"})
public class TestComment {
    @Autowired
    private CommentService commentService;
    ...
    @Test
    public void saveFavorite() {
        Integer i = commentService.saveFavorite(, );
        System.out.println("i = " + i);
    }

    @Test
    public void cancelFavorite() {
        Integer i = commentService.cancelFavorite(, );
        System.out.println("i = " + i);
    }
}
`lagou-edu-web`

com.renda.comment.CommentService

public interface CommentService {
    ...
    Integer saveFavorite(Integer comment_id,Integer userid);
    Integer cancelFavorite(Integer comment_id,Integer userid);
}

com.renda.comment.controller.CommentController

@RestController
@RequestMapping("course")
public class CommentController {
    // 远程消费
    @Reference
    private CommentService commentService;
    ...
    // 点赞
    @GetMapping("comment/saveFavorite/{commentid}/{userid}")
    public Integer saveFavorite(@PathVariable("commentid") Integer commentid, @PathVariable("userid") Integer userid) {
        return commentService.saveFavorite(commentid, userid);
    }
    // 取消赞
    @GetMapping("comment/cancelFavorite/{commentid}/{userid}")
    public Integer cancelFavorite(@PathVariable("commentid") Integer commentid, @PathVariable("userid") Integer userid) {
        return commentService.cancelFavorite(commentid, userid);
    }
}

浏览器访问:

http://localhost:8002/course/comment/saveFavorite/1/123

http://localhost:8002/course/comment/cancelFavorite/1/123

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Renda 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 订单模块
    • 购买 / 生成订单
      • `lagou-edu-dao`
      • `lagou-edu-service`
      • `lagou-edu-web`
    • 订单操作
      • `lagou-edu-entity`
      • `lagou-edu-dao`
      • `lagou-edu-service`
      • `lagou-edu-web`
  • 留言模块
    • 保存留言
      • `lagou-edu-entity`
      • `lagou-edu-dao`
      • `lagou-edu-service`
      • `lagou-edu-web`
    • 留言列表
      • `lagou-edu-dao`
      • `lagou-edu-service`
      • `lagou-edu-web`
    • 留言点赞 / 取消赞
      • `lagou-edu-dao`
      • `lagou-edu-service`
      • `lagou-edu-web`
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档