门户网站建设背景,07073网页游戏开服表,专业电商网站开发,WordPress标签加HTML在商城项目中#xff0c;之前我们介绍了购物车功能模块的实现#xff0c;商品加入到购物车之后#xff0c;就是到购物车结算#xff0c;然后显示购物车的商品列表#xff0c;点击去结算#xff0c;然后到了未提交前的订单列表#xff0c;点击提交订单后#xff0c;生成…在商城项目中之前我们介绍了购物车功能模块的实现商品加入到购物车之后就是到购物车结算然后显示购物车的商品列表点击去结算然后到了未提交前的订单列表点击提交订单后生成此订单返回订单的订单号付款金额订单预计到达时间。订单系统是一个非常重要的系统我们的移动端、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文件中配置上