订单系统实现

订单系统实现

1.1 系统架构

订单系统实现

1.2 订单表结构

订单表:

 订单系统实现

 

订单商品表:

 订单系统实现

 

物流表:

 订单系统实现

 

1.3 接口

参见:淘淘商城-订单系统接口.docx

 

1.4 创建订单系统taotao-order

 订单系统实现

 

系统配置参考taotao-sso系统。

 

1.5 实现创建订单接口

1.5.1 service

 

 
  1. @Service

  2. public class OrderServiceImpl implements OrderService {

  3.  
  4. @Autowired

  5. private TbOrderMapper orderMapper;

  6. @Autowired

  7. private TbOrderItemMapper orderItemMapper;

  8. @Autowired

  9. private TbOrderShippingMapper orderShippingMapper;

  10. //redis中的订单key

  11. @Value("${ORDER_ID_KEY}")

  12. private String ORDER_ID_KEY;

  13. @Value("${ORDER_BEGIN_ID}")

  14. private Long ORDER_BEGIN_ID;

  15. @Autowired

  16. private JedisCluster jedisCluster;

  17. @Override

  18. public TaotaoResult createOrder(TbOrder order, List<TbOrderItem> itemList, TbOrderShipping orderShipping) {

  19. //订单表

  20. //生成订单号

  21. String orderIdStr = jedisCluster.get(ORDER_ID_KEY);

  22. Long orderId = null;

  23. if (StringUtils.isBlank(orderIdStr)) {

  24. //如果redis中没有订单号使用初始订单号初始化

  25. jedisCluster.set(ORDER_ID_KEY, ORDER_BEGIN_ID.toString());

  26. orderId = ORDER_BEGIN_ID;

  27. } else {

  28. //生成订单号

  29. orderId = jedisCluster.incr(ORDER_ID_KEY);

  30. }

  31. //设置订单号

  32. order.setOrderId(orderId.toString());

  33. Date date = new Date();

  34. //订单创建时间

  35. order.setCreateTime(date);

  36. //订单更新时间

  37. order.setUpdateTime(date);

  38. //插入订单表

  39. orderMapper.insert(order);

  40. //插入订单商品表

  41. for (TbOrderItem tbOrderItem : itemList) {

  42. //取订单商品id

  43. Long orderItemId = jedisCluster.incr("ORDER_ITEM_ID");

  44. tbOrderItem.setId(orderItemId.toString());

  45. tbOrderItem.setOrderId(orderId.toString());

  46. //添加到订单商品表

  47. orderItemMapper.insert(tbOrderItem);

  48. }

  49. //插入物流表

  50. orderShipping.setOrderId(orderId.toString());

  51. orderShipping.setCreated(date);

  52. orderShipping.setUpdated(date);

  53. orderShippingMapper.insert(orderShipping);

  54. return TaotaoResult.ok(orderId.toString());

  55. }

  56.  
  57. }



1.5.2 Controller 

1.5.2.1 Pojo

 

 
  1. public class Order extends TbOrder{

  2.  
  3. private List<TbOrderItem> orderItems;

  4. private TbOrderShipping orderShipping;

  5. }


 

1.5.2.2 controller

 

 
  1. @Controller

  2. @RequestMapping("/order")

  3. public class OrderController {

  4.  
  5. @Autowired

  6. private OrderService orderService;

  7. @RequestMapping(value = "/create", method=RequestMethod.POST)

  8. @ResponseBody

  9. public TaotaoResult createOrder(@RequestBody Order order) {

  10. TaotaoResult result = null;

  11. try {

  12. result = orderService.createOrder(order, order.getOrderItems(), order.getOrderShipping());

  13. } catch (Exception e) {

  14. e.printStackTrace();

  15. return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));

  16. }

  17. return result;

  18. }

  19. }

 


1.6 其他接口 

....

 

前端系统实现下单功能

2.1 下单流程

订单系统实现

2.2 订单结算页面

 

2.2.1 Controller

@Controller

@RequestMapping("/order")

public class OrderController {

 

@Autowired

private OrderService orderService;

@Autowired

private CartService cartService;

 

 

/**

 * 显示订单确认画面

 * <p>Title: showOrderCart</p>

 * <p>Description: </p>

 * @param request

 * @param model

 * @return

 */

@RequestMapping("/order-cart")

public String showOrderCart(HttpServletRequest request, TbUser user, Model model) {

//根据用户信息,取出用户的收货地址列表

//本项目中使用静态数据模拟。。。。

 

//从cookie中把商品列表取出来

List<Item> itemsList = cartService.getCartItemsList(request);

model.addAttribute("cartList", itemsList);

return "order-cart";

}

}

 

2.3 提交订单处理

2.3.1 创建订单Service

 

 
  1. @Srvice

  2. public class OrderServiceImpl implements OrderService {

  3.  
  4. @Value("${ORDER_BASE_URL}")

  5. private String ORDER_BASE_URL;

  6. @Value("${ORDER_CREATE_URL}")

  7. private String ORDER_CREATE_URL;

  8. @Override

  9. public TaotaoResult createService(Order order) {

  10. //把pojo转换成json数据

  11. String json = JsonUtils.objectToJson(order);

  12. //调用订单系统服务提交订单

  13. String resultStr = HttpClientUtil.doPostJson(ORDER_BASE_URL + ORDER_CREATE_URL, json);

  14. //转换成java对象

  15. TaotaoResult taotaoResult = TaotaoResult.format(resultStr);

  16. return taotaoResult;

  17. }

  18.  
  19. }



2.3.2 Controller 

 
  1. @RequestMapping(value="/create", method=RequestMethod.POST)

  2. public String createOrder(HttpServletRequest request, Order order, Model model) {

  3. //从request中取用户信息

  4. TbUser user = (TbUser)request.getAttribute("user");

  5. //把用户信息补充到order对象中

  6. order.setUserId(user.getId());

  7. order.setBuyerNick(user.getUsername());

  8. //提交订单

  9. TaotaoResult result = null;

  10. try {

  11. result = orderService.createService(order);

  12. //订单创建成功

  13. if(result.getStatus() == 200) {

  14. model.addAttribute("orderId", result.getData());

  15. model.addAttribute("payment", order.getPayment());

  16. //两天后送达

  17. DateTime dateTime = new DateTime();

  18. dateTime = dateTime.plusDays(2);

  19. model.addAttribute("date", dateTime.toString("yyyy-MM-dd"));

  20. return "success";

  21. }

  22. } catch (Exception e) {

  23. e.printStackTrace();

  24. result = TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));

  25. }

  26. //订单创建失败

  27. model.addAttribute("message", result.getMsg());

  28. return "error/exception";

  29. }