在商城项目中,之前我们介绍了购物车功能模块的实现,商品加入到购物车之后,就是到购物车结算,然后显示购物车的商品列表,点击去结算,然后到了未提交前的订单列表,

点击提交订单后,生成此订单,返回订单的订单号,付款金额,订单预计到达时间。订单系统是一个非常重要的系统,我们的移动端、PC端都需要订单系统,所以这里我们将订单系统单独作为一个服务来,留出接口供客户单来调用

今天我们来看下这个订单系统到底是如何实现的:

一、订单系统功能

订单系统主要包含哪些功能模块呢?

创建订单功能、查看订单列表、根据订单id查询订单的详细信息、订单修改、订单取消、订单状态、订单评价等功能的实现。

今天我们来看下创建订单的流程:

二、订单系统的数据库表的设计

创建订单说到底就是向订单表中添加数据,即insert这些信息。

下单功能一定要使用关系型数据库表,保证数据的一致性,因为创建订单要保证在一个事务(一个事务就是指向数据库中进行的一种操作:比如插入,删除等等)里面,nosql数据库不支持事务,可能会丢失数据。

我们在网上购物的时候通常这个订单包含的信息比较多,所以对于订单系统如何创建它的数据库也是非常重要的。创建数据库遵循数据库设计的三大范式原则来设计。

我们创建了三个表:tb_order(订单信息表),tb_order_item(订单详情表),tb_order_shipping(订单配送表).

tb_order:这里包含了订单的基本信息

tb_order_item:订单详情表:订单的详情主要就是购买商品的信息,通过订单的id来实现关联

tb_order_shipping:订单配送表:

这是三个基本的表,其实还可以有物流信息表,订单交易信息表。这里我们采用这三张表足够。

三、订单系统接口文档,一般我们开发的时候会收到已经写好的接口文档,比如创建订单的接口文档。

从上面这个表中,我们可以看到该接口的url,接口的传入参数和返回值。

接下来我们针对这三个来进行代码的编写:

url属于controller层,

传入参数这里我们可以看到是数据库建立的三张表信息:第一个是tb_order,第二个是一个集合式的订单明细List,第三个是订单的配送信息表。

所以传入参数就是这三个对象。这里我们是编写接口,供客户端调用,至于客户端怎么将这些参数传递过来,那是客户端团队考虑的事情。

返回值这里使用了taotaoresult来包装了下,因为我们提交订单成功后,返回的是订单号,即订单的id所以,我们需要向客户端传递订单id过去,并显示在订单创建成功的页面。

下面看下订单服务接口的service层的实现:

service层的主要实现是将订单信息添加到数据库中,即接收controller传递过来的对象,然后补全页面没有的字段,insert数据库,这里可以使用逆向工程生成的dao。

另外还有个问题:

订单编号:订单编号用什么形式比较好呢?

解决方案一(不能使用):

使用mysql的自增长。

优点:不需要我们自己生成订单号,mysql会自动生成。

缺点:如果订单表数量太大时需要分库分表,此时订单号会重复。如果数据备份后再恢复,订单号会变。

方案二:日期+随机数

采用毫秒+随机数。

缺点:仍然有重复的可能。不建议采用此方案。在没有更好的解决方案之前可以使用。

方案三:使用UUID

优点:不会重复。

缺点:长。可读性查。不建议使用。

方案四:可读性好,不能太长。一般订单都是全数字的。可以使用redis的incr命令生成订单号。

优点:可读性好,不会重复

缺点:需要搭建redis服务器。

所以我们选取方案四作为生成订单号的方案。

那么service层的编码如下:

controller:层实现

controller需要将对象传递给service层:(客户端向服务器端传入的参数格式,详见后面博文)

我们看到接口文档中,controller接收的参数是一个json格式的字符串,也就是说客户端传递过来的是json格式的字符串。

这就涉及到springMVC是如何接收json字符串的,需要用到@RequestBody注解。这里多说几句:

@ResponseBody注解的原理是response只能响应一个字符串,当我们的返回值是java对象的时候,它有一个默认行为,即利用jackson包将java对象转为字符串响应。这是一个默认自动的行为,不需要我们设置,只要这个注解即可。

@RequestBody注解同理:利用这个注解告诉springMVC我们现在接收的是一个json字符串,需要采取默认行为利用jackson包将json字符串转换为java对象,所以controller层我们需要一个java对象的pojo。

controller层实现:

以上代码是订单服务接口的创建订单接口代码实现。

接下来我们看下客户端如何调用订单服务层的:

客户端当我们点击去购物车结算的时候,显示购物车列表。

在购物车列表页面,当点击去结算的时候,跳转到未提交订单的页面。

点击提交订单,跳转到显示成功页面。

controller层实现:

service层实现:

这里同样用了pojo类Order类。

拦截器的问题:因为提交订单我们需要用户登录,所以在springMVC.xml文件中配置上:

mysql订单详情的设计_订单功能模块设计与实现相关推荐

  1. MySQL酒店管理系统课程设计_酒店管理系统的设计与实现(PHP,MySQL)(含录像)

    酒店管理系统的设计与实现(PHP,MySQL)(含录像)(毕业论文12000字,程序代码,MySQL数据库) 酒店管理系统的设计是基于PHP技术+mysql数据库+apache服务器的方式设计,以ze ...

  2. Java充电宝模型设计_继续探讨点赞功能模块设计

    继续探讨点赞功能模块设计 前几天我们设计了点赞模块的模块,大致思路就是: 用户点赞,首先缓存到redis中进行保存,redis中既要保存点赞总数,还要保存点赞记录.然后定时执行redis数据到数据库中 ...

  3. 餐饮管理系统 mysql数据库设计分析_终稿课程设计_餐饮管理系统数据库设计.docOK版(样例3)...

    <课程设计_餐饮管理系统数据库设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)课程设计_餐饮管理系统数据库设计.doc(OK版)>相关文档资源请在帮帮文库(www ...

  4. 学生信息管理系统之第二篇主要功能模块设计和数据库设计

     4.2系统主要功能模块设计: (1)基本信息模块:是管理员对学生信息进行添加操作.通过本界面管理员可以对学生信息进行相应的修改,包括学号.姓名.出生日期等.可以通过该界面输入学生姓名实现查询该学 ...

  5. 订单功能模块设计与实现

    https://www.cnblogs.com/fengli9998/p/6417117.html 在商城项目中,之前我们介绍了购物车功能模块的实现,商品加入到购物车之后,就是到购物车结算,然后显示购 ...

  6. mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)

    家谱管理系统的设计与实现(MyEclipse,MySQL)(任务书,开题报告,中期检查表,文献综述,毕业论文16700字,程序代码,MySQL数据库,答辩PPT) 家谱是现代人们怀旧的重要部分,因此, ...

  7. taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,店铺订单明文接口,店铺订单解密接口,店铺订单消息推送接口

    taobao.trade.fullinfo.get( 获取单笔交易的详细信息 ),淘宝店铺卖出订单详情接口,对接该接口可用于获取淘宝店铺订单详情信息,包括卖出订单详情,买家姓名,买家电话,买家收货地址 ...

  8. videojs默认显示controls 按钮功能失效_一文看懂Yearning SQL审核平台功能模块设计...

    概述 Yearning SQL审核平台目前兼容99%的Mysql 标准SQL语法. 已知不支持的语句类型有: 复杂的查询语句(多表,多函数,非必现.并不是所有复杂语句不支持) create table ...

  9. 智能手环功能模块设计_智能手环、功能模块以及智能手表的制作方法

    智能手环.功能模块以及智能手表的制作方法 [技术领域] [0001]本实用新型涉及通信领域,具体而言,涉及一种智能手环.功能模块以及智能手表. [背景技术] [0002]伴随着无线通信.传感器和处理器 ...

最新文章

  1. 最受欢迎的十款免费安全软件
  2. python 常用包_Python常用指引
  3. vue watch监听对象
  4. 从网络访问计算机不能添加用户名,windows7 和 XP 能互相用\\ip访问,但是不能通过计算机名访问...
  5. Action 跳转的方法和详解
  6. Java 基础数据结构介绍
  7. p=(1 r) 2c语言编程,菜鸟编程~!1.2
  8. MySQL 联合索引测试2
  9. vim学习、各类插件配置与安装【转】
  10. sentinel卫星_【Sentinel-2】(1):哨兵2号数据下载与显示
  11. Cadence PSpice 仿真9:低通滤波器蒙特卡洛分析仿真实战图文教程
  12. vue : 无法加载文件 C:\Users\EDZ\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有 关详细信息,请参阅 https:/go.microsoft
  13. 武汉纺织大学计算机科学校区在哪,武汉纺织大学阳光校区在哪 环境好不好
  14. php 送货单管理系统,销售送货单管理系统下载
  15. 链表线性表及其操作c语言代码大全,用链表兑现线性表的各种操作(C语言)
  16. 新东方雅思词汇---8.1、reckon
  17. 苹果cms程序,播放页跳转的修补方法
  18. Git使用简介一(入门级)
  19. 微信小程序直播二三事
  20. 超简单看懂匈牙利算法

热门文章

  1. 高速通道-冗余物理专线接入-健康检查配置
  2. Log4j 第三次发布漏洞补丁,漏洞或将长存
  3. 匿名提问:rm -rf了怎么办?
  4. 腾讯开源之道:基于Apache之道的开源实践与探索
  5. 深度揭秘:腾讯存储技术发展史
  6. 泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?
  7. “编程能力差,90%输在了选择上!”CTO:多数程序员都是瞎努力!
  8. 肯耐珂萨助力世界500强零售企业在线春招:单次面试3000人
  9. 是时候展现真正的技术了!4道程序员智力题你能对几道| IT巨能唠
  10. 创纪录!浪潮云海完成OpenStack Rocky版本全球最大规模单一集群测试!