创建订单 - 填充新订单数据

    科技2024-03-13  91

    /** * @Description: 支付方式 枚举 */ public enum PayMethod { WEIXIN(1, "微信"), ALIPAY(2, "支付宝"); public final Integer type; public final String value; PayMethod(Integer type, String value){ this.type = type; this.value = value; } } /** * 用于创建订单相关信息 * @param submitOrderBO */ public OrderVO createOrder(SubmitOrderBO submitOrderBO); @Transactional(propagation = Propagation.REQUIRED) @Override public OrderVO createOrder(SubmitOrderBO submitOrderBO) { String userId = submitOrderBO.getUserId(); String addressId = submitOrderBO.getAddressId(); String itemSpecIds = submitOrderBO.getItemSpecIds(); Integer payMethod = submitOrderBO.getPayMethod(); String leftMsg = submitOrderBO.getLeftMsg(); // 包邮费用设置为0 Integer postAmount = 0; String orderId = sid.nextShort(); UserAddress address = addressService.queryUserAddres(userId, addressId); // 1. 新订单数据保存 Orders newOrder = new Orders(); newOrder.setId(orderId); newOrder.setUserId(userId); newOrder.setReceiverName(address.getReceiver()); newOrder.setReceiverMobile(address.getMobile()); newOrder.setReceiverAddress(address.getProvince() + " " + address.getCity() + " " + address.getDistrict() + " " + address.getDetail()); // newOrder.setTotalAmount(); // newOrder.setRealPayAmount(); newOrder.setPostAmount(postAmount); newOrder.setPayMethod(payMethod); newOrder.setLeftMsg(leftMsg); newOrder.setIsComment(YesOrNo.NO.type); newOrder.setIsDelete(YesOrNo.NO.type); newOrder.setCreatedTime(new Date()); newOrder.setUpdatedTime(new Date()); // 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); // 3. 保存订单状态表 OrderStatus waitPayOrderStatus = new OrderStatus(); waitPayOrderStatus.setOrderId(orderId); waitPayOrderStatus.setOrderStatus(OrderStatusEnum.WAIT_PAY.type); waitPayOrderStatus.setCreatedTime(new Date()); orderStatusMapper.insert(waitPayOrderStatus); // 4. 构建商户订单,用于传给支付中心 MerchantOrdersVO merchantOrdersVO = new MerchantOrdersVO(); merchantOrdersVO.setMerchantOrderId(orderId); merchantOrdersVO.setMerchantUserId(userId); merchantOrdersVO.setAmount(realPayAmount + postAmount); merchantOrdersVO.setPayMethod(payMethod); // 5. 构建自定义订单vo OrderVO orderVO = new OrderVO(); orderVO.setOrderId(orderId); orderVO.setMerchantOrdersVO(merchantOrdersVO); return orderVO; } /** * 根据用户id和地址id,查询具体的用户地址对象信息 * @param userId * @param addressId * @return */ public UserAddress queryUserAddres(String userId, String addressId); @Transactional(propagation = Propagation.SUPPORTS) @Override public UserAddress queryUserAddres(String userId, String addressId) { UserAddress singleAddress = new UserAddress(); singleAddress.setId(addressId); singleAddress.setUserId(userId); return userAddressMapper.selectOne(singleAddress); }

     

    Processed: 0.034, SQL: 8