创建订单 - 保存订单与子订单数据

    科技2024-04-19  81

    /** * 根据商品规格id获取规格对象的具体信息 * @param specId * @return */ public ItemsSpec queryItemSpecById(String specId); @Transactional(propagation = Propagation.SUPPORTS) @Override public ItemsSpec queryItemSpecById(String specId) { return itemsSpecMapper.selectByPrimaryKey(specId); } /** * 根据商品id获得商品图片主图url * @param itemId * @return */ public String queryItemMainImgById(String itemId); @Transactional(propagation = Propagation.SUPPORTS) @Override public String queryItemMainImgById(String itemId) { ItemsImg itemsImg = new ItemsImg(); itemsImg.setItemId(itemId); itemsImg.setIsMain(YesOrNo.YES.type); ItemsImg result = itemsImgMapper.selectOne(itemsImg); return result != null ? result.getUrl() : ""; } // 2. 循环根据itemSpecIds保存订单商品信息表 String itemSpecIdArr[] = itemSpecIds.split(","); Integer totalAmount = 0; // 商品原价累计 Integer realPayAmount = 0; // 优惠后的实际支付价格累计 for (String itemSpecId : itemSpecIdArr) { // TODO 整合redis后,商品购买的数量重新从redis的购物车中获取 int buyCounts = 1; // 2.1 根据规格id,查询规格的具体信息,主要获取价格 ItemsSpec itemSpec = itemService.queryItemSpecById(itemSpecId); totalAmount += itemSpec.getPriceNormal() * buyCounts; realPayAmount += itemSpec.getPriceDiscount() * buyCounts; // 2.2 根据商品id,获得商品信息以及商品图片 String itemId = itemSpec.getItemId(); Items item = itemService.queryItemById(itemId); String imgUrl = itemService.queryItemMainImgById(itemId); // 2.3 循环保存子订单数据到数据库 String subOrderId = sid.nextShort(); OrderItems subOrderItem = new OrderItems(); subOrderItem.setId(subOrderId); subOrderItem.setOrderId(orderId); subOrderItem.setItemId(itemId); subOrderItem.setItemName(item.getItemName()); subOrderItem.setItemImg(imgUrl); subOrderItem.setBuyCounts(buyCounts); subOrderItem.setItemSpecId(itemSpecId); subOrderItem.setItemSpecName(itemSpec.getName()); subOrderItem.setPrice(itemSpec.getPriceDiscount()); orderItemsMapper.insert(subOrderItem); // 2.4 在用户提交订单以后,规格表中需要扣除库存 itemService.decreaseItemSpecStock(itemSpecId, buyCounts); } newOrder.setTotalAmount(totalAmount); newOrder.setRealPayAmount(realPayAmount); ordersMapper.insert(newOrder);

     

    Processed: 0.026, SQL: 9