常用业务流程梳理Day2

发布时间:2024年01月18日

????????首先我们模拟一个基于微服务架构的在线教育项目,旨在搭建一个面向成年人的非学历职业技能培训平台。

????????作为一个B2C(Business to Customer,企业对客户)类型的教育相关项目,需要具有两个端:

  • 管理端:给老师用,核心业务是课程管理、考试题管理、学习问答管理、营销订单管理
  • 用户端:给学员用,核心业务是买课、学习、知识分享交流

????????并且需要·基于RabbitMQ实现微服务之间的异步调用。

今天我们针对用户端的课表相关模块进行业务功能流程梳理。

2-1 说一下生成课表的业务流程

? ? ? ? 一般来说课表更加强调的是:某位用户对某个课程的拥有,和用户之间有一个多对多的关系,而反映这个关系的中间表就是用户课程表,当然这个中间表中除了记录多对多关系意外,还应该具有很多其它的字段,比如:有效期限、学习进度等等。

????????首先,我们进行基础环境的准备工作。先用Mysql将课程数据导入到本地DataBase中。接着使用MyBatisPlus逆向工程根据数据库表来生成对应的三层架构及实体类。

????????接下来用户完成课程购买后,我们添加课表的监听器,交易服务中用户下单完成后,会投递消息到mq,在此处接收消息,参数校验无误后,调用service接口及其serviceImpl实现类中的保存方法。

????????在实现类中的保存方法编写时,先将用户购买的课程遍历保存成课表,再调用课程微服务去根据课程id查询课程信息(主键集合)。创建课程对象,根据查询到的课程信息,进行对应字段的赋值。这里推荐用stream流进行结果的收集成一张新课程List。最后调用批量保存功能saveBatch进行保存。

2-2 说一下查询课表的业务流程

????????在这个项目中,查询课表涉及到了两个微服务,课表微服务和课程微服务。

????????首先,当浏览器查询的请求发过来后,从课程表中查询,设置分页条件(分页需要的参数),设置业务条件(登录用户Id和课程id,并且以最后一次学习时间倒序排列),执行查询

????????由于返回结果不是课表的实体类而是一个vo,vo里包含课程的一些信息,于是我使用feign远程调用课程微服务,为了提高性能,我将feign远程调用写在循环之外,为了方便使用课程的信息,我将远程调用的结果(list)通过stream流转成了map(键是课程的id,值是课程对象)。

????????最后组装结果,发返回数据。

2-3 说一下查询最近学习章节的业务流程

????????在这个项目中,查询最近用户学习章节使用了两个微服务,三张表,分别是课程微服务的课程表和章节目录表,以及课表微服务的课表。

????????首先,当浏览器查询的请求发过来后,从课程表中查询,设置业务条件(登录用户Id,并且以最后一次学习时间倒序排列),执行查询,虽然最近学习章节只会查询一个结果,但由于返回结果vo中需要该用户课表的数量,为了提高性能,少从数据库查一次数量,所以这里查询该用户的所有课,取第一个。

????????然后调用而课程表对应的feign接口和章节目录表对应的feign接口,补充数据。

????????最后返回结果。

文章来源:https://blog.csdn.net/weixin_52418241/article/details/135612097
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。