From 396f0b6e1a42799eabee1b13aa6a9d7ea3356520 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 23 Sep 2022 15:58:06 +0800
Subject: [PATCH] 20220902

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   76 ++++++++++++++++++++++++++++++-------
 1 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 2a3f376..1483a82 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -86,7 +86,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createOrder(AddOrderDto addOrderDto) {
-        synchronized(this){
+//        synchronized(this){
         MallMember member = LoginUserUtil.getLoginUser();
         String takeUniqueCode = addOrderDto.getTakeUniqueCode();
         if(StrUtil.isEmpty(takeUniqueCode)){
@@ -100,6 +100,9 @@
 
         //订单范围内才允许下单
         MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
+        if(ObjectUtil.isEmpty(address)){
+            throw new FebsException("请重新选择提货人信息");
+        }
 //        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
 //        if(ObjectUtil.isNotEmpty(mallElectronicFence)){
 //            String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(),
@@ -240,7 +243,7 @@
 
         agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
         return orderInfo.getId();
-        }
+//        }
     }
 
 
@@ -260,23 +263,34 @@
         orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
         orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
         this.baseMapper.updateById(orderInfo);
-        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
+
+
+
+        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
         if(CollUtil.isNotEmpty(mallOrderItemList)){
             for(MallOrderItem mallOrderItem : mallOrderItemList){
-                Long goodsId = mallOrderItem.getGoodsId();
-                Long skuId = mallOrderItem.getSkuId();
-                Integer cnt = mallOrderItem.getCnt();
-                MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
-                mallGoods.setVolume(mallGoods.getVolume() - cnt);
-                mallGoods.setStock(mallGoods.getStock() + cnt);
-                mallGoodsMapper.updateById(mallGoods);
+                MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+                if (sku == null) {
+                    throw new FebsException("购买商品或sku不存在");
+                }
 
-                MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
-                mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt);
-                mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt);
-                mallGoodsSkuMapper.updateById(mallGoodsSku);
+                if (sku.getStock() < mallOrderItem.getCnt()) {
+                    throw new FebsException(sku.getSkuName() + "库存不足");
+                }
+
+                MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+                if(1 != goodsResult){
+                    throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                }
+
+                Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+                if(1 != skuResult){
+                    throw new FebsException(sku.getSkuName() + "库存不足");
+                }
             }
         }
+
     }
 
     /**
@@ -478,11 +492,18 @@
 
     @Override
     public List<OrderListVo> findOrderList(OrderListDto orderListDto) {
+        log.info("订单查询");
         MallMember member = LoginUserUtil.getLoginUser();
         IPage<MallOrderInfo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
 
         orderListDto.setMemberId(member.getId());
-        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+//        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiOrderListInPage(page, orderListDto);
+        if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) {
+            mallOrderInfos.getRecords().forEach(item -> {
+                item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId()));
+            });
+        }
         return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords());
     }
 
@@ -682,6 +703,31 @@
             orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
             orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
             this.baseMapper.updateById(orderInfo);
+
+            List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
+            if(CollUtil.isNotEmpty(mallOrderItemList)){
+                for(MallOrderItem mallOrderItem : mallOrderItemList){
+                    MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+                    if (sku == null) {
+                        throw new FebsException("购买商品或sku不存在");
+                    }
+
+                    if (sku.getStock() < mallOrderItem.getCnt()) {
+                        throw new FebsException(sku.getSkuName() + "库存不足");
+                    }
+
+                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                    Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+                    if(1 != goodsResult){
+                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                    }
+
+                    Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+                    if(1 != skuResult){
+                        throw new FebsException(sku.getSkuName() + "库存不足");
+                    }
+                }
+            }
         }
     }
 

--
Gitblit v1.9.1