實現訂單系統

訂單系統實現

1.1 系統架構

1.2 訂單表結構

訂單表:

 

 

訂單商品表:

 

 

物流表:

 

 

1.3 接口

參見:淘淘商城-訂單系統接口.docx

 

1.4 創建訂單系統taotao-order

 

 

系統配置參考taotao-sso系統。

 

1.5 實現創建訂單接口

1.5.1 service

[java] view plain copy
  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

[java] view plain copy
  1. public class Order extends TbOrder{  
  2.    
  3. private List<TbOrderItem> orderItems;  
  4. private TbOrderShipping orderShipping;  
  5. }  


1.5.2.2 controller

 

[java] view plain copy
  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

[java] view plain copy
  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 

[java] view plain copy
  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. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章