一.项目计划
- 订单系统实现
- 订单生成
- 数据库读写分离
二.订单系统
2.1 功能分析
1、在购物车页面点击“去结算”按钮跳转到订单确认页面。
- 必须要求用户登录
- 使用拦截器实现
- 如果用户未登录就跳转到登录界面
- 如果用户已经登录,放行。展示购物车页面
- 判断Cookie中是否有购物车数据
- 如果有同步到服务端
2、订单确认页面中选择收获地址,选择支付方式,确认商品列表
- 根据用户id查询收获地址列表
- 展示支付方式列表
- 从购物车中取商品列表,从服务端取购物车列表
3、订单确认页面点击”提交”,生成订单
4、展示订单生成完成,或者跳转到支付页面。
2.2 工程搭建
2.3 订单确认页面展示
1 | /** |
效果:
2.4 订单系统拦截器
1 | /** |
拦截器配置:
1 | <!--配置拦截器--> |
我在未登录状态下,选了一个花花,然后点击去结算,然后让我跳到了登录状态,然后我登录,登录完了之后应该跳回我刚刚的业务,就是结算业务,但是还是跳到了主页,这样很难受啊,我还要再写一段业务
注意看最后一张图片上我写的批注
流程:
这就是整个业务流程,走完了。去拿快递,
希望今年会有好运把,也希望所有付出都有回报吧,谢谢,2018再见不再会。
2.5 提交订单
2.5.1 提交订单数据库分析
2.5.2 提交订单页面分析
上面图片中做了批注,各个pojo对应的信息
现在我们需要将三个pojo组合起来成一个pojo然后去接受表单传入的参数,怎么组合呢??
可以这样,我们继承TbOrder对象,然后在其中加入一个List
2.5.3 创建接收表单信息的pojo
将来我们这个pojo需要在web工程中来接受参数信息,然后传入Service工程中,所以首先这个pojo要在网路上传输,是不是要实现序列化接口,然后就是我们要将这个pojo放在哪?如果放在Order-web工程中,那么Order-Service工程中又要依赖Order-web工程,显然我们这两个工程不能互相依赖嘛,如果web和service(服务层)相互依赖了,我们这个分布式就没啥意义了,所以这个pojo放在这两个中任何一个都不行
还有一个Order-Interface,我们的Order-Service依赖Interface,我们的Order-web工程也依赖Order-Interface,因为这两个工程通过接口来使用dubbo啊,所以我们将这个pojo写入Order-interface工程中。
1 | /** |
2.5.4 Dao层
可以使用逆向工程
2.5.5 Service层
接口
1 | public interface OrderService { |
实现类
1 | /** |
发布服务
2.5.6 表现层
引用服务
Controller
1 | @RequestMapping(value = "/order/create",method = RequestMethod.POST) |