常用业务流程梳理Day2

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

        作为一个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接口,补充数据。

        最后返回结果。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值