//创建订单

public ServerResponse createOrder(Integer userId,Integer shippingId){

//从购物车中获取已经被勾选的商品

List cartList = cartMapper.selectCheckedCartByUserId(userId);

//校验并封装一下

ServerResponse serverResponse = this.getCartOrderItem(userId,cartList);

if(!serverResponse.isSuccess())

return serverResponse;

List orderItemList = (List)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 ServerResponse getCartOrderItem(Integer userId,List cartList){

List 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 BigDecimal getOrderTotalPrice(List orderItemList){

BigDecimal payment = new BigDecimal("0");

for(OrderItem orderItem : orderItemList)

payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getTotalPrice().doubleValue()); //每一项的总价都加进来

return payment;

}

//此函数用于生成订单号

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); //运费设置为0

//支付方式,在线支付

order.setPaymentType(Const.PaymentTypeEnum.ONLINE_PAY.getCode());

order.setPayment(payment);

order.setUserId(userId); //购买的用户的ID

order.setShippingId(shippingId); //发货地址的ID

//发货时间等等

//付款时间等等

//插入订单

int rowCount = orderMapper.insert(order);

if(rowCount > 0)

return order;

return null;

}

//减少商品的库存

private void reduceProductStock(List orderItemList){

for(OrderItem orderItem : orderItemList){

Product product = productMapper.selectByPrimaryKey(orderItem.getProductId());

product.setStock(product.getStock()-orderItem.getQuantity());

productMapper.updateByPrimaryKeySelective(product);

}

}

//清空购物车

private void cleanCart(List cartList){

for(Cart cart : cartList)

cartMapper.deleteByPrimaryKey(cart.getId());

}

//将订单包装一下

private OrderVo assembleOrderVo(Order order,List orderItemList){ //order:订单,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 orderItemVoList = Lists.newArrayList();

for(OrderItem orderItem : orderItemList){

OrderItemVo orderItemVo = assembleOrderItemVo(orderItem);

orderItemVoList.add(orderItemVo);

}

orderVo.setOrderItemVoList(orderItemVoList); //订单的明细

return orderVo;

}

//封装收货地址

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;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐