java面试订单模块会问什么_Java电商项目面试--订单模块
//创建订单publicServerResponse createOrder(Integer userId,Integer shippingId){//从购物车中获取已经被勾选的商品List cartList = cartMapper.selectCheckedCartByUserId(userId);//校验并封装一下ServerResponse serverResponse = this...
//创建订单
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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)