public ServerResponse createOrder(Integer userId,Integer shippingId){
//从购物车中获取数据
List<Cart> cartList = cartMapper.selectCheckedCartByUserId(userId);
//计算这个订单的总价
ServerResponse serverResponse = this.getCartOrderItem(userId,cartList);
if(!serverResponse.isSuccess()){
return serverResponse;
}
List<OrderItem> orderItemList = (List<OrderItem>)serverResponse.getData();
BigDecimal payment = this.getOrderTotalPrice(orderItemList);
//生成订单
Order order = this.assembleOrder(userId,shippingId,payment);
if(order == null){
return ServerResponse.createByErrorMessage("生成订单错误");
}
if(CollectionUtils.isEmpty(orderItemList)){
return ServerResponse.createByErrorMessage("购物车为空");
}
for(OrderItem orderItem : orderItemList){
orderItem.setOrderNo(order.getOrderNo());
}
//mybatis 批量插入
orderItemMapper.batchInsert(orderItemList);
//生成成功,我们要减少我们产品的库存
this.reduceProductStock(orderItemList);
//清空一下购物车
this.cleanCart(cartList);
//返回给前端数据
OrderVo orderVo = assembleOrderVo(order,orderItemList);
return ServerResponse.createBySuccess(orderVo);
}
private Order assembleOrder(Integer userId,Integer shippingId,BigDecimal payment){
Order order = new Order();
long orderNo = this.generateOrderNo();
order.setOrderNo(orderNo);
order.setStatus(Const.OrderStatusEnum.NO_PAY.getCode());
order.setPostage(0);
order.setPaymentType(Const.PaymentTypeEnum.ONLINE_PAY.getCode());
order.setPayment(payment);
order.setUserId(userId);
order.setShippingId(shippingId);
//发货时间等等
//付款时间等等
int rowCount = orderMapper.insert(order);
if(rowCount > 0){
return order;
}
return null;
}
private long generateOrderNo(){
long currentTime =System.currentTimeMillis();
return currentTime+new Random().nextInt(100);
}
private BigDecimal getOrderTotalPrice(List<OrderItem> orderItemList){
BigDecimal payment = new BigDecimal("0");
for(OrderItem orderItem : orderItemList){
payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getTotalPrice().doubleValue());
}
return payment;
}
private ServerResponse getCartOrderItem(Integer userId,List<Cart> cartList){
List<OrderItem> orderItemList = Lists.newArrayList();
if(CollectionUtils.isEmpty(cartList)){
return ServerResponse.createByErrorMessage("购物车为空");
}
//校验购物车的数据,包括产品的状态和数量
for(Cart cartItem : cartList){
OrderItem orderItem = new OrderItem();
Product product = productMapper.selectByPrimaryKey(cartItem.getProductId());
if(Const.ProductStatusEnum.ON_SALE.getCode() != product.getStatus()){
return ServerResponse.createByErrorMessage("产品"+product.getName()+"不是在线售卖状态");
}
//校验库存
if(cartItem.getQuantity() > product.getStock()){
return ServerResponse.createByErrorMessage("产品"+product.getName()+"库存不足");
}
orderItem.setUserId(userId);
orderItem.setProductId(product.getId());
orderItem.setProductName(product.getName());
orderItem.setProductImage(product.getMainImage());
orderItem.setCurrentUnitPrice(product.getPrice());
orderItem.setQuantity(cartItem.getQuantity());
orderItem.setTotalPrice(BigDecimalUtil.mul(product.getPrice().doubleValue(),cartItem.getQuantity()));
orderItemList.add(orderItem);
}
return ServerResponse.createBySuccess(orderItemList);
}
private OrderVo assembleOrderVo(Order order,List<OrderItem> orderItemList){
OrderVo orderVo = new OrderVo();
orderVo.setOrderNo(order.getOrderNo());
orderVo.setPayment(order.getPayment());
orderVo.setPaymentType(order.getPaymentType());
orderVo.setPaymentTypeDesc(Const.PaymentTypeEnum.codeOf(order.getPaymentType()).getValue());
orderVo.setPostage(order.getPostage());
orderVo.setStatus(order.getStatus());
orderVo.setStatusDesc(Const.OrderStatusEnum.codeOf(order.getStatus()).getValue());
orderVo.setShippingId(order.getShippingId());
Shipping shipping = shippingMapper.selectByPrimaryKey(order.getShippingId());
if(shipping != null){
orderVo.setReceiverName(shipping.getReceiverName());
orderVo.setShippingVo(assembleShippingVo(shipping));
}
orderVo.setPaymentTime(DateTimeUtil.dateToStr(order.getPaymentTime()));
orderVo.setSendTime(DateTimeUtil.dateToStr(order.getSendTime()));
orderVo.setEndTime(DateTimeUtil.dateToStr(order.getEndTime()));
orderVo.setCreateTime(DateTimeUtil.dateToStr(order.getCreateTime()));
orderVo.setCloseTime(DateTimeUtil.dateToStr(order.getCloseTime()));
orderVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix"));
List<OrderItemVo> orderItemVoList = Lists.newArrayList();
for(OrderItem orderItem : orderItemList){
OrderItemVo orderItemVo = assembleOrderItemVo(orderItem);
orderItemVoList.add(orderItemVo);
}
orderVo.setOrderItemVoList(orderItemVoList);
return orderVo;
}
private OrderItemVo assembleOrderItemVo(OrderItem orderItem){
OrderItemVo orderItemVo = new OrderItemVo();
orderItemVo.setOrderNo(orderItem.getOrderNo());
orderItemVo.setProductId(orderItem.getProductId());
orderItemVo.setProductName(orderItem.getProductName());
orderItemVo.setProductImage(orderItem.getProductImage());
orderItemVo.setCurrentUnitPrice(orderItem.getCurrentUnitPrice());
orderItemVo.setQuantity(orderItem.getQuantity());
orderItemVo.setTotalPrice(orderItem.getTotalPrice());
orderItemVo.setCreateTime(DateTimeUtil.dateToStr(orderItem.getCreateTime()));
return orderItemVo;
}
private ShippingVo assembleShippingVo(Shipping shipping){
ShippingVo shippingVo = new ShippingVo();
shippingVo.setReceiverName(shipping.getReceiverName());
shippingVo.setReceiverAddress(shipping.getReceiverAddress());
shippingVo.setReceiverProvince(shipping.getReceiverProvince());
shippingVo.setReceiverCity(shipping.getReceiverCity());
shippingVo.setReceiverDistrict(shipping.getReceiverDistrict());
shippingVo.setReceiverMobile(shipping.getReceiverMobile());
shippingVo.setReceiverZip(shipping.getReceiverZip());
shippingVo.setReceiverPhone(shippingVo.getReceiverPhone());
return shippingVo;
}
返回到前端我们需要这个数据
//---从购物车中获取数据---//
创建订单
service
//从购物车中获取勾选的数据
List<Cart> cartList=cartMapper.selectCheckedCartByUserId(userId);
List<OrderItem> orderItemList=Lists.newArrayList();
mapper
从购物车获取已经勾选的这些产品
List<Cart> selectCheckedCartByUserId(Integer userId);
mapper.xml
sql拿到我们勾选的这些数据,当我们点击勾选后,checked就会变成1