From f61293e97bb2cb21c8f49e88b1ae5a3cbadefb6a Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 25 Dec 2023 16:40:09 +0800
Subject: [PATCH] 富文本框输入版本变化

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |  142 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 121 insertions(+), 21 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 2cde23c..0852804 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
@@ -82,6 +82,7 @@
     private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
     private final IMallElectronicFenceService iMallElectronicFenceService;
     private final MallElectronicFenceMapper mallElectronicFenceMapper;
+    private final MallMemberWalletMapper mallMemberWalletMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -100,6 +101,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(),
@@ -223,19 +227,19 @@
             orderInfo.setCarriage(delivaryAmount);
         }
         orderInfo.setAmount(total);
-
+        orderInfo.setAddressId(address.getId());
         orderInfo.setName(address.getName());
         orderInfo.setPhone(address.getPhone());
         orderInfo.setIsHome(addOrderDto.getIsHome());
         //订单金额大于50,且选择送货上门,订单需要选择地址信息
-        if(1 == addOrderDto.getIsHome()){
+//        if(1 == addOrderDto.getIsHome()){
             if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
                 throw new FebsException("请添加地址");
             }
             orderInfo.setAddress(address.getArea() + address.getAddress());
             orderInfo.setLatitude(address.getLatitude());
             orderInfo.setLongitude(address.getLongitude());
-        }
+//        }
         this.baseMapper.updateById(orderInfo);
 
         agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
@@ -260,23 +264,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() + "库存不足");
+                }
             }
         }
+
     }
 
     /**
@@ -330,6 +345,11 @@
             throw new FebsException("订单状态不能支付");
         }
 
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
+        if (ObjectUtil.isEmpty(mallMemberWallet)) {
+            throw new FebsException("用户钱包不存在。");
+        }
+
         String payResultStr = "";
         String wxResultStr = "";
         switch (payOrderDto.getType()) {
@@ -359,14 +379,63 @@
                 agentProducer.sendOrderReturn(orderInfo.getId());
                 break;
             case "3":
-                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
+                BigDecimal score = mallMemberWallet.getScore();//积分
+                BigDecimal balance = mallMemberWallet.getBalance();//余额
+
+                //这里将运费定义成折扣总金额
+                /**
+                 * 积分 + 余额 1:1来折扣支付金额
+                 */
+                BigDecimal total = orderInfo.getAmount();
+                BigDecimal totalCarriage = BigDecimal.ZERO;//总折扣金额
+                BigDecimal memberAmount = score.add(balance);//用户积分加余额总数
+                if(memberAmount.compareTo(BigDecimal.ZERO) > 0){
+                    //折扣金额
+                    if(total.compareTo(memberAmount) >= 0){
+                        totalCarriage = memberAmount;
+                    }else{
+                        totalCarriage = total;
+                    }
+                    //减少用户积分和余额
+
+                    BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额
+                    if(avaAmount.compareTo(memberAmount) >= 0){
+                        //清零用户的积分和余额
+                        mallMemberWallet.setBalance(BigDecimal.ZERO);
+                        mallMemberWallet.setScore(BigDecimal.ZERO);
+                        mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
+                    }else{
+                        /**
+                         * 先扣积分,再扣余额
+                         */
+                        if(avaAmount.compareTo(score) >= 0){
+                            mallMemberWallet.setScore(BigDecimal.ZERO);
+                            avaAmount = avaAmount.subtract(score);
+                        }else{
+                            mallMemberWallet.setScore(score.subtract(avaAmount));
+                            avaAmount = BigDecimal.ZERO;
+                        }
+                        //积分不够
+                        if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
+                            mallMemberWallet.setBalance(balance.subtract(avaAmount));
+                        }else{
+                            mallMemberWallet.setBalance(balance);
+                        }
+                        mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
+                    }
+                }
+                orderInfo.setCarriage(totalCarriage);
+                payResultStr = "支付成功";
+//                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
 
                 orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                 orderInfo.setPayMethod("余额支付");
-                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+                orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
+//                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                 orderInfo.setPayTime(new Date());
-                orderInfo.setPayResult("1");
-                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
+                orderInfo.setPayResult(1);
+                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
+//                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
 
 //                boolean hasTc = false;
 //                // 静态倍数
@@ -416,7 +485,7 @@
                 orderInfo.setPayMethod("积分支付");
                 orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                 orderInfo.setPayTime(new Date());
-                orderInfo.setPayResult("1");
+                orderInfo.setPayResult(1);
 
                 mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                 break;
@@ -483,7 +552,13 @@
         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());
     }
 
@@ -683,6 +758,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