我们创建了三个表: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过去,并显示在订单创建成功的页面。
可以使用redis的incr命令生成订单号。
service层的实现
//创建订单功能实现
@Override
public TaotaoResult createOrder(TbOrder order,List<TbOrderItem> orderItem, TbOrderShipping orderShipping) {
//逻辑步骤:创建订单即向数据库中三个表中插入数据,所以讲数据库中的字段补全即可。页面传递过来的就不需要补全了,直接可以写入数据库
/*第一步:订单号的生成方式:因为订单号的特殊性,订单后最好采用数字组成,且不能重复,可以采用redis中自增长的方式来实现,
* 在redis中,如果无key,则redis自动创建你写的key的名字。采用incr的命令来实现订单号的自增。默认自增是从1开始的,因为考虑到用户的原因,在redis中设置一个默认的key值
* 这样用户体验会好些,不会因为看到简单的1,2,3,所以设置一个默认的key值
*/
String string = jedisClient.get(ORDER_GEN_KEY);
if (StringUtils.isBlank(string)) {
//如果redis中的key为空,则利用默认值
String defaultKey = jedisClient.set(ORDER_GEN_KEY,ORDER_DEFAULT_KEY);
}
//如果存在此key则,采用incr命令自增
long orderId= jedisClient.incr(ORDER_GEN_KEY);
//然后向订单表中插入数据
order.setOrderId(orderId+"");
//订单状态:状态:1、未付款,2、已付款,3、未发货,4、已发货
order.setStatus(1);
order.setCreateTime(new Date());
order.setUpdateTime(new Date());
order.setBuyerRate(0);
//补全完信息后,插入数据库表
orderMapper.insert(order);
//补全完订单表后,将订单明细表补全,因为之前订单写入redis,订单明细的id也写入redis吧,自动创建这个id的key。这个不需要默认编号了。对比页面传递的参数,将剩下的补全
String string2 = jedisClient.get(ORDER_ITEM_KEY);
long orderItemId = jedisClient.incr(string2);
//因为传递过来的是一个集合列表,所以遍历列表
for (TbOrderItem tbOrderItem : orderItem) {
tbOrderItem.setId(orderItemId+"");
tbOrderItem.setOrderId(orderId+"");
orderItemMapper.insert( tbOrderItem);
}
//接下来补全订单配送表
orderShipping.setOrderId(orderId+"");
orderShipping.setCreated(new Date());
orderShipping.setUpdated(new Date());
shippingMapper.insert(orderShipping);
return TaotaoResult.ok(orderId);
}
}
controller层实现
public class Order extends TbOrder {
private List<TbOrderItem> orderItems;
private TbOrderShipping orderShipping;
public List<TbOrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<TbOrderItem> orderItems) {
this.orderItems = orderItems;
}
public TbOrderShipping getOrderShipping() {
return orderShipping;
}
public void setOrderShipping(TbOrderShipping orderShipping) {
this.orderShipping = orderShipping;
}
}
//订单管理模块
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/create")
@ResponseBody
public TaotaoResult createOrder(@RequestBody Order order ){//创建订单模块实现
try {
TaotaoResult taotaoResult = orderService.createOrder(order ,order.getOrderItems(), order.getOrderShipping());
return taotaoResult;
} catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500,ExceptionUtil.getStackTrace(e));
}
}
}
以上代码是订单服务接口的创建订单接口代码实现。由客户端传入订单所需要的数据,然后将这些数据插入到数据表中,最后给客户端返回订单号等信息
版权声明:本文为li237原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。