实现订单系统

1 订单系统实现

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 前端系统实现下单功能

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. }  
全部评论

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务