https://blog.csdn.net/Richard_666/article/details/85408142 数据表
if(CollectionUtils.isEmpty(cartList)){ //重点:判断传过来的cartList是否为空
return ServerResponse.createByErrorMessage("购物车为空");
}
第一步:从购物车中获取数据(根据用户id从购物车中获取已经勾选的产品)
第二步:计算订单的总价,将用户id和从购物车选中的数据传过来(超级无敌无敌重点)
1、判断购物车选中的数据传过来是否为空
2、校验购物车选中的数据,包括产品的状态和数量
3、计算总价
private ServerResponse getCartOrderItem(Integer userId,List cartList){
List orderItemList = Lists.newArrayList();
if(CollectionUtils.isEmpty(cartList)){//重点:判断传过来的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 BigDecimal getOrderTotalPrice(List orderItemList){
BigDecimal payment = new BigDecimal("0");
for(OrderItem orderItem : orderItemList){
payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getTotalPrice().doubleValue());
}
return payment;
}
package com.mmall.util;
import java.math.BigDecimal;
/**
*
*/
public class BigDecimalUtil {
private BigDecimalUtil(){
}
public static BigDecimal add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2);
}
public static BigDecimal sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2);
}
public static BigDecimal mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2);
}
public static BigDecimal div(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留2位小数
//除不尽的情况
}
}
第三步:生成订单
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 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;
}
订单表的信息来源是购物车里面的每项进行勾选
1个订单表对应多个订单项(订单明细表)
最重要的就是创建订单