生成订单
来源:8-3 创建订单-对象转化与扣库存
慕工程3164992
2022-03-16 10:41:53
老师您好:
为什么要把购物车对象转为订单item对象,我这儿看不懂也不理解。
public String create(CreateOrderReq createOrderReq) {
//拿到用户Id
Integer userId = UserFilter.currentUser.getId();
//从购物车查找已近勾选的商品
List<CartVO> cartVOList = cartService.list(userId);
ArrayList<CartVO> cartVOListTemp = new ArrayList<>();
for (int i = 0; i < cartVOList.size(); i++) {
CartVO cartVO = cartVOList.get(i);
if (cartVO.getSelected().equals(Constant.Cart.SELECTED)) {
cartVOListTemp.add(cartVO);
}
}
cartVOList = cartVOListTemp;
//如果购物车勾选的为空,报错
if (CollectionUtils.isEmpty(cartVOList)) {
throw new HkcException(HkcExceptionEnum.CART_EMPTY);
}
//判断商品是否存在、上下架状态、库存
validSaleStatusAndStock(cartVOList);
//把购物车对象转为订单item对象
List <OrderItem> orderItemList=cartVOListToOrderItemList(cartVOList);
//扣库存
for (int i=0;i<orderItemList.size();i++){
OrderItem orderItem=orderItemList.get(i);
Product product=productMapper.selectByPrimaryKey(orderItem.getProductId());
int stock=product.getStock()-orderItem.getQuantity();
if (stock<0){
throw new HkcException(HkcExceptionEnum.NOT_ENOUGH);
}
product.setStock(stock);
productMapper.updateByPrimaryKeySelective(product);
}
//把购物车中已勾选商品删除
cleanCart(cartVOList);
//生成订单
Order order=new Order();
//生成订单号,有独立的规则
String orderNo =OrderCodeFactory.getOrderCode(Long.valueOf(userId));
order.setOrderNo(orderNo);
order.setUserId(userId);
order.setTotalPrice(totaPrice(orderItemList));
order.setReceiverName(createOrderReq.getReceiverName());
order.setReceiverMobile(createOrderReq.getReceiverMobile());
order.setReceiverAddress(createOrderReq.getReceiverAddress());
order.setOrderStatus(Constant.OrderStatusEnum.NOT_PAID.getCode());
order.setPostage(0);
order.setPaymentType(1);
//插入到order表
orderMapper.insertSelective(order);
//循环保存每个商品到order_item表
for (int i=0;i<orderItemList.size();i++){
OrderItem orderItem=orderItemList.get(i);
orderItem.setOrderNo(order.getOrderNo());
orderItemMapper.insertSelective(orderItem);
}
return orderNo;
//把结果返回
}
private Integer totaPrice(List<OrderItem> orderItemList) {
Integer totalPrice=0;
for(int i=0;i<orderItemList.size();i++){
OrderItem orderItem=orderItemList.get(i);
totalPrice+=orderItem.getTotalPrice();
}
return totalPrice;
}
private void cleanCart(List<CartVO> cartVOList) {
for (int i=0;i<cartVOList.size();i++){
CartVO cartVO=cartVOList.get(i);
cartMapper.deleteByPrimaryKey(cartVO.getId());
}
}
private List<OrderItem> cartVOListToOrderItemList(List<CartVO> cartVOList) {
List<OrderItem> orderItemList=new ArrayList<>();
for (int i=0;i<cartVOList.size();i++){
CartVO cartVO=cartVOList.get(i);
OrderItem orderItem=new OrderItem();
orderItem.setProductId(cartVO.getProductId());
//记录商品快照信息
orderItem.setProductName(cartVO.getProductName());
orderItem.setProductImg(cartVO.getProductImage());
orderItem.setUnitPrice(cartVO.getPrice());
orderItem.setQuantity(cartVO.getQuantity());
orderItem.setTotalPrice(cartVO.getTotalPrice());
orderItemList.add(orderItem);
}
return orderItemList;
}1回答
好帮手慕小尤
2022-03-16
同学你好,我们在购买商品时,一般情况下会先添加到购物车或直接购买。第一种情况,需要在购物车中选中商品然后生成订单进行付钱。所以此时需要将购物车对象转为订单item对象。
祝学习愉快!
相似问题