问题篇
不同表之间交叉在一起,很难进行之后微服务的划分
历史篇
本来考虑用promotion表来存储用户推广的记录,但是后来业务要求确认为只有收到推广的人下单了才算推广成功,并添加到用户的推广酬金中。因此删除了推广表,在订单中添加了推广码字段。减少了信息的冗余,适应了业务。
TimeQuery, 在很多查询中都用到了时间作为查询的条件。为了保证时间的有效性,每次都需要进行一系列操作:
- 时间为空值的话,需要设定为边界值
- 如果开始时间大于结束时间,返回错误。
- 因为时间精确到天,天默认是0:00,也就是对于结束时间,查询得到的结果是当天之前的,这可能导致用户查询不到想要的信息,因此结束的天数要加1。
为了方便,直接抽象出一个TimeQuery类,任何需要时间的查询都继承这个类,并实现checkTime方法,返回HttpResponse,减少了重复代码。
之前生成订单的流程是
- 根据请求的id查询课程
- 检查课程库存是否为0,如果为0直接拒绝请求
- 将订单信息存入表中
- 课程库存减1,销量加1
可能存在的问题是如果库存中有一个课程,那么两个用户同时请求生成订单,两个用户都能申请成功,导致课程变为数量变成-1。
解决思路:
- 当检查课程库存不为0时,先对课程库存进行操作,否则无法生成订单。