diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java index aba9635..9d10052 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java @@ -62,6 +62,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -159,6 +160,9 @@ public class H5OrderService { if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){ throw new RuntimeException("商品" + product.getName() + "已下架"); } + if (sku.getStock() < skuQuantityMap.get(sku.getId())) { + throw new RuntimeException("库存不足"); + } productTotalAmount = productTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId())))); orderTotalAmount = orderTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId())))); dto.setSku(sku); @@ -206,6 +210,10 @@ public class H5OrderService { } // 保存orderItem orderItemService.saveOrderItem(member, optTime, orderId, skuList); + skuList.forEach(item -> { + //减少sku的库存 + skuMapper.updateStockById(item.getSkuId(),LocalDateTime.now(),item.getQuantity()); + }); // 保存订单操作记录 OrderOperateHistory orderOperateHistory = new OrderOperateHistory(); orderOperateHistory.setOrderId(orderId); @@ -262,6 +270,9 @@ public class H5OrderService { if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){ throw new RuntimeException("商品" + product.getName() + "已下架"); } + if (sku.getStock() < quantityMap.get(sku.getId())) { + throw new RuntimeException("库存不足"); + } BigDecimal addAmount = sku.getPrice().multiply(BigDecimal.valueOf(dto.getQuantity())); //由于目前没有运费等数据,暂时订单总金额=商品总金额了 productTotalAmount = productTotalAmount.add(addAmount); @@ -415,6 +426,13 @@ public class H5OrderService { if (orderList.size() < request.getIdList().size()){ throw new RuntimeException("未查询到订单信息"); } + //查orderItem + QueryWrapper qw = new QueryWrapper<>(); + qw.in("order_id", request.getIdList()); + List orderItem = orderItemMapper.selectList(qw); + if (CollectionUtil.isEmpty(orderItem)) { + throw new RuntimeException("未查询到订单信息"); + } long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus())).count(); if (count > 0){ throw new RuntimeException("订单状态已更新,请刷新页面"); @@ -434,12 +452,19 @@ public class H5OrderService { history.setUpdateBy(userId); history.setUpdateTime(optDate); addHistoryList.add(history); + }); //取消订单 int rows = orderMapper.cancelBatch(orderList); if (rows < 1){ throw new RuntimeException("更改订单状态失败"); } + orderItem.stream().collect(Collectors.groupingBy(it->it.getSkuId())).forEach((k,v)->{ + AtomicReference totalCount = new AtomicReference<>(0); + v.forEach(it-> totalCount.updateAndGet(v1 -> v1 + it.getQuantity())); + skuMapper.updateStockById(k, optDate, -1 * totalCount.get()); + }); + //创建订单操作记录 boolean flag = orderOperateHistoryService.saveBatch(addHistoryList); if (!flag){ diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java index 3486a54..ee8b223 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/service/AftersaleService.java @@ -19,6 +19,7 @@ import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper; import com.cyl.manager.oms.pojo.request.DealWithAftersaleRequest; import com.cyl.manager.oms.pojo.request.ManagerAftersaleOrderRequest; import com.cyl.manager.oms.pojo.vo.*; +import com.cyl.manager.pms.mapper.SkuMapper; import com.cyl.manager.ums.domain.Member; import com.cyl.manager.ums.mapper.MemberMapper; import com.github.pagehelper.PageHelper; @@ -58,6 +59,8 @@ public class AftersaleService { @Autowired private OrderOperateHistoryConvert historyConvert; + @Autowired + private SkuMapper skuMapper; /** * 查询订单售后 @@ -274,8 +277,17 @@ public class AftersaleService { orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType()); optHistory.setOrderStatus(14); }else if (ifAgree){ - aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType()); - orderWrapper.set("aftersale_status", OrderRefundStatus.WAIT.getType()); + //如果是未发货的情况下,直接增加库存 + if (order.getStatus() == 1) { + OrderItem orderItem = orderItemMapper.selectOne(new QueryWrapper().eq("order_id", order.getId())); + skuMapper.updateStockById(orderItem.getSkuId(),LocalDateTime.now(),-1*orderItem.getQuantity()); + //todo 微信直接退款 + aftersaleWrapper.set("status", AftersaleStatus.SUCCESS.getType()); + orderWrapper.set("aftersale_status", OrderRefundStatus.SUCCESS.getType()); + } else { + aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType()); + orderWrapper.set("aftersale_status", OrderRefundStatus.WAIT.getType()); + } optHistory.setOrderStatus(12); } int rows = aftersaleMapper.update(null, aftersaleWrapper); diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/pms/mapper/SkuMapper.java b/ruoyi-mall/src/main/java/com/cyl/manager/pms/mapper/SkuMapper.java index 66a5702..e2cd36c 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/pms/mapper/SkuMapper.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/pms/mapper/SkuMapper.java @@ -1,8 +1,10 @@ package com.cyl.manager.pms.mapper; +import java.time.LocalDateTime; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cyl.manager.pms.domain.Sku; +import org.apache.ibatis.annotations.Param; /** * sku信息Mapper接口 @@ -17,4 +19,6 @@ public interface SkuMapper extends BaseMapper { * @return sku信息集合 */ List selectByEntity(Sku sku); + + int updateStockById(@Param("skuId")Long skuId, @Param("optDate")LocalDateTime optDate, @Param("quantity")Integer quantity); } diff --git a/ruoyi-mall/src/main/resources/mapper/pms/SkuMapper.xml b/ruoyi-mall/src/main/resources/mapper/pms/SkuMapper.xml index ca6dc10..902c5f9 100644 --- a/ruoyi-mall/src/main/resources/mapper/pms/SkuMapper.xml +++ b/ruoyi-mall/src/main/resources/mapper/pms/SkuMapper.xml @@ -24,6 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id, product_id, out_sku_id, price, pic, sp_data, create_by, create_time, update_by, update_time from pms_sku + + update + pms_sku + set + stock = stock - #{quantity}, + update_time = #{optDate} + where id = #{skuId} +