1 訂單系統實現
1.1 系統架構
1.2 訂單表結構
訂單表:
訂單商品表:
物流表:
1.3 接口
參見:淘淘商城-訂單系統接口.docx
1.4 創建訂單系統taotao-order
系統配置參考taotao-sso系統。
1.5 實現創建訂單接口
1.5.1 service
- @Service
- public class OrderServiceImpl implements OrderService {
- @Autowired
- private TbOrderMapper orderMapper;
- @Autowired
- private TbOrderItemMapper orderItemMapper;
- @Autowired
- private TbOrderShippingMapper orderShippingMapper;
- //redis中的訂單key
- @Value("${ORDER_ID_KEY}")
- private String ORDER_ID_KEY;
- @Value("${ORDER_BEGIN_ID}")
- private Long ORDER_BEGIN_ID;
- @Autowired
- private JedisCluster jedisCluster;
- @Override
- public TaotaoResult createOrder(TbOrder order, List<TbOrderItem> itemList, TbOrderShipping orderShipping) {
- //訂單表
- //生成訂單號
- String orderIdStr = jedisCluster.get(ORDER_ID_KEY);
- Long orderId = null;
- if (StringUtils.isBlank(orderIdStr)) {
- //如果redis中沒有訂單號使用初始訂單號初始化
- jedisCluster.set(ORDER_ID_KEY, ORDER_BEGIN_ID.toString());
- orderId = ORDER_BEGIN_ID;
- } else {
- //生成訂單號
- orderId = jedisCluster.incr(ORDER_ID_KEY);
- }
- //設置訂單號
- order.setOrderId(orderId.toString());
- Date date = new Date();
- //訂單創建時間
- order.setCreateTime(date);
- //訂單更新時間
- order.setUpdateTime(date);
- //插入訂單表
- orderMapper.insert(order);
- //插入訂單商品表
- for (TbOrderItem tbOrderItem : itemList) {
- //取訂單商品id
- Long orderItemId = jedisCluster.incr("ORDER_ITEM_ID");
- tbOrderItem.setId(orderItemId.toString());
- tbOrderItem.setOrderId(orderId.toString());
- //添加到訂單商品表
- orderItemMapper.insert(tbOrderItem);
- }
- //插入物流表
- orderShipping.setOrderId(orderId.toString());
- orderShipping.setCreated(date);
- orderShipping.setUpdated(date);
- orderShippingMapper.insert(orderShipping);
- return TaotaoResult.ok(orderId.toString());
- }
- }
1.5.2 Controller
1.5.2.1 Pojo
- public class Order extends TbOrder{
- private List<TbOrderItem> orderItems;
- private TbOrderShipping orderShipping;
- }
1.5.2.2 controller
- @Controller
- @RequestMapping("/order")
- public class OrderController {
- @Autowired
- private OrderService orderService;
- @RequestMapping(value = "/create", method=RequestMethod.POST)
- @ResponseBody
- public TaotaoResult createOrder(@RequestBody Order order) {
- TaotaoResult result = null;
- try {
- result = orderService.createOrder(order, order.getOrderItems(), order.getOrderShipping());
- } catch (Exception e) {
- e.printStackTrace();
- return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
- }
- return result;
- }
- }
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
- @Srvice
- public class OrderServiceImpl implements OrderService {
- @Value("${ORDER_BASE_URL}")
- private String ORDER_BASE_URL;
- @Value("${ORDER_CREATE_URL}")
- private String ORDER_CREATE_URL;
- @Override
- public TaotaoResult createService(Order order) {
- //把pojo轉換成json數據
- String json = JsonUtils.objectToJson(order);
- //調用訂單系統服務提交訂單
- String resultStr = HttpClientUtil.doPostJson(ORDER_BASE_URL + ORDER_CREATE_URL, json);
- //轉換成java對象
- TaotaoResult taotaoResult = TaotaoResult.format(resultStr);
- return taotaoResult;
- }
- }
2.3.2 Controller
- @RequestMapping(value="/create", method=RequestMethod.POST)
- public String createOrder(HttpServletRequest request, Order order, Model model) {
- //從request中取用戶信息
- TbUser user = (TbUser)request.getAttribute("user");
- //把用戶信息補充到order對象中
- order.setUserId(user.getId());
- order.setBuyerNick(user.getUsername());
- //提交訂單
- TaotaoResult result = null;
- try {
- result = orderService.createService(order);
- //訂單創建成功
- if(result.getStatus() == 200) {
- model.addAttribute("orderId", result.getData());
- model.addAttribute("payment", order.getPayment());
- //兩天後送達
- DateTime dateTime = new DateTime();
- dateTime = dateTime.plusDays(2);
- model.addAttribute("date", dateTime.toString("yyyy-MM-dd"));
- return "success";
- }
- } catch (Exception e) {
- e.printStackTrace();
- result = TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
- }
- //訂單創建失敗
- model.addAttribute("message", result.getMsg());
- return "error/exception";
- }