From c6ac1561db0b2f1c8e3a799d7f49808f4bae67c7 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 27 May 2025 15:55:58 +0800
Subject: [PATCH] refactor(mall): 优化订单收货类型判断逻辑

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |  354 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 264 insertions(+), 90 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 65239cf..031f3a6 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
@@ -109,7 +109,7 @@
             throw new FebsException("请重新选择收货地址信息");
         }
 
-        String orderNo = MallUtils.getOrderNum();
+        String orderNo = MallUtils.getOrderNum("O");
         MallOrderInfo orderInfo = new MallOrderInfo();
         orderInfo.setOrderNo(orderNo);
         orderInfo.setOrderTime(new Date());
@@ -208,11 +208,15 @@
                     }
 
                     MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
-                    // 零撸专区购买
+                    // todo 纯积分商品一个账号限制购买一次
                     if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
+                        Integer cnt = item.getCnt();
+                        if(1 < cnt){
+                            throw new FebsException("积分商品限购一件");
+                        }
                         List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
                         if (CollUtil.isNotEmpty(items)) {
-                            throw new FebsException("无法重复领取同一个商品");
+                            throw new FebsException("积分商品一个账号限购一次");
                         }
                     }
 
@@ -226,6 +230,7 @@
                     }
 
                     BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                    BigDecimal levelOnePrice = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                     //是否使用优惠卷
                     if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
                         Long memberCouponId = addOrderDto.getMemberCouponId();
@@ -238,6 +243,7 @@
                         }
                     }
                     orderItem.setAmount(amount);
+                    orderItem.setLevelOnePrice(levelOnePrice);
                     orderItem.setScoreAmount(scoreAmountMap.get(item.getSkuId()));
                     orderItem.setCnt(item.getCnt());
                     orderItem.setOrderId(orderInfo.getId());
@@ -275,10 +281,21 @@
 
         mallMemberCoupon.setState(2);
         mallMemberCouponMapper.updateById(mallMemberCoupon);
-        //运费
-        BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
-        orderInfo.setCarriage(delivaryAmount);
 
+        BigDecimal delivaryAmount = BigDecimal.ZERO;
+        if(StrUtil.isEmpty(addOrderDto.getTakeUniqueCode())){
+            delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
+            orderInfo.setCarriage(delivaryAmount);
+        }else{
+            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(addOrderDto.getTakeUniqueCode());
+            if(ObjectUtil.isEmpty(mallTeamLeader)){
+                throw new FebsException("自提点信息异常");
+            }
+            orderInfo.setCarriage(delivaryAmount);
+            orderInfo.setTakeCode(ShareCodeUtil.toSerialCode(orderInfo.getId()) + MallUtils.getRandomNum(10));
+            orderInfo.setTakeUniqueCode(mallTeamLeader.getUniqueCode());
+            orderInfo.setDeliveryType(1);
+        }
         total = total.add(delivaryAmount);
         orderInfo.setAmount(total);
         orderInfo.setScoreAmount(totalScoreAmount);
@@ -294,6 +311,7 @@
         orderInfo.setLatitude(address.getLatitude());
         orderInfo.setLongitude(address.getLongitude());
         this.baseMapper.updateById(orderInfo);
+
         //过期时间修改成24小时
         agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(),  24 * 60 * 60 * 1000L);
         return orderInfo.getId();
@@ -317,6 +335,7 @@
 
         for (AddOrderItemDto item : items) {
             Long skuId = item.getSkuId();
+            Integer cnt = item.getCnt();
             MallGoodsSku sku = skusAll.stream().filter(s -> s.getId().equals(skuId)).findFirst().orElse(null);
             if (ObjectUtil.isNotEmpty(sku)) {
                 Long goodsId = sku.getGoodsId();
@@ -324,13 +343,98 @@
                 if (ObjectUtil.isNotEmpty(mallGoods)) {
                     BigDecimal multi = mallGoods.getStaticProp().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN);
                     //获取该商品该规格的积分
-                    BigDecimal scoreAmount = sku.getOriginalPrice().multiply(multi).setScale(0, RoundingMode.HALF_DOWN);
+                    BigDecimal scoreAmount = sku.getOriginalPrice().multiply(multi).multiply(new BigDecimal(cnt)).setScale(0, RoundingMode.HALF_DOWN);
                     scoreAmountMap.put(skuId, scoreAmount);
                 }
             }
         }
         return scoreAmountMap;
     }
+
+//    /**
+//     * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
+//     * @param memberCouponId 优惠卷ID
+//     * @param items 商品明细
+//     * @return Map<Long,BigDecimal> skuId,实际支付金额
+//     */
+//    @Override
+//    public Map<Long,BigDecimal> getCouponAmountMap(Long memberCouponId,List<AddOrderItemDto> items){
+//        HashMap<Long,BigDecimal> couponAmountMap = new HashMap<>();
+//        MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
+//        if(ObjectUtil.isEmpty(mallMemberCoupon)){
+//            return couponAmountMap;
+//        }
+//        Integer state = mallMemberCoupon.getState();
+//        if(1 != state){
+//            return couponAmountMap;
+//        }
+//        Long couponId = mallMemberCoupon.getCouponId();//优惠卷ID
+//        List<Long> goodsIdsAll = couponGoodsMapper.selectByCouponId(couponId);
+//        List<MallGoodsSku> skusAll = mallGoodsSkuMapper.selectSkuIdsByGoodsId(goodsIdsAll);//获取该优惠卷绑定的全部商品sku
+//        List<Long> skuIdsAll = skusAll.stream().map(MallGoodsSku::getId).collect(Collectors.toList());//获取该优惠卷绑定的全部商品skuIDS
+//        List<Long> skuIds = items.stream().map(AddOrderItemDto::getSkuId).collect(Collectors.toList());//订单中的全部skuIds
+//
+//        /**
+//         * 获取这张优惠卷生效的skuIds
+//         */
+//        Set<Long> intersection = skuIdsAll.stream()
+//                .filter(item -> skuIds.contains(item))
+//                .collect(Collectors.toSet());//获取两个集合的交集
+//        if(CollUtil.isEmpty(intersection)){
+//            return couponAmountMap;
+//        }
+//        HashMap<Long,BigDecimal> skuMap = new HashMap<>();//每个订单详情的ID和amount的map
+//        List<MallGoodsSku> skus = mallGoodsSkuMapper.selectByIds(new ArrayList<>(intersection));
+//        BigDecimal totalAmount = BigDecimal.ZERO;//订单中的总金额
+//        Map<Long, AddOrderItemDto> itemMap = new HashMap<>();// 预先将items转换为Map,以skuId作为键
+//        for (AddOrderItemDto addOrderItemDto : items) {
+//            itemMap.put(addOrderItemDto.getSkuId(), addOrderItemDto);
+//        }
+//        for(MallGoodsSku mallGoodsSku : skus){
+//            Long id = mallGoodsSku.getId();
+//            BigDecimal presentPrice = mallGoodsSku.getPresentPrice();
+//            // 检查itemMap中是否存在该商品
+//            AddOrderItemDto addOrderItemDto = itemMap.get(id);
+//            if (addOrderItemDto != null) {
+//                BigDecimal skuAmount = presentPrice.multiply(BigDecimal.valueOf(addOrderItemDto.getCnt()));
+//                totalAmount = totalAmount.add(skuAmount);
+//                skuMap.put(id,skuAmount);
+//            }
+//        }
+//
+//        /**
+//         * 计算每个商品利用优惠卷打折的具体金额
+//         */
+//        MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId());
+//        BigDecimal costAmount = mallGoodsCoupon.getCostAmount();
+//        BigDecimal realAmount = mallGoodsCoupon.getRealAmount();
+//        if(totalAmount.compareTo(costAmount) < 0){
+//            return couponAmountMap;
+//        }
+//        HashMap<Long,BigDecimal> skuMapPercent = new HashMap<>();//每个订单详情的ID和amount的map
+//        for (Map.Entry<Long,BigDecimal> entry : skuMap.entrySet()) {
+//            Long keySkuId = entry.getKey();
+//            BigDecimal valueSkuAmount = entry.getValue();
+//            BigDecimal divide = valueSkuAmount.divide(totalAmount, 4, BigDecimal.ROUND_DOWN);//每个商品占符合满减的总额的比例
+//            skuMapPercent.put(keySkuId,divide);
+//            Integer type = mallGoodsCoupon.getType();
+//            if(MallGoodsCoupon.TYPE_ONE == type){
+//                BigDecimal bigDecimal = realAmount.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*减免金额)
+//                BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
+//                couponAmountMap.put(keySkuId,skuRealAmount);
+//            }
+//            if(MallGoodsCoupon.TYPE_TWO == type){
+//                BigDecimal divideTime = totalAmount.divide(costAmount, 0, BigDecimal.ROUND_DOWN);//累计减免次数
+//                BigDecimal multiply = divideTime.multiply(realAmount);//实际减免金额
+//                BigDecimal bigDecimal = multiply.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*实际减免金额)
+//                BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
+//                couponAmountMap.put(keySkuId,skuRealAmount);
+//            }
+//        }
+//        return couponAmountMap;
+//    }
+
+
 
     /**
      * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
@@ -339,79 +443,98 @@
      * @return Map<Long,BigDecimal> skuId,实际支付金额
      */
     @Override
-    public Map<Long,BigDecimal> getCouponAmountMap(Long memberCouponId,List<AddOrderItemDto> items){
-        HashMap<Long,BigDecimal> couponAmountMap = new HashMap<>();
-        MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
-        if(ObjectUtil.isEmpty(mallMemberCoupon)){
-            return couponAmountMap;
-        }
-        Integer state = mallMemberCoupon.getState();
-        if(1 != state){
-            return couponAmountMap;
-        }
-        Long couponId = mallMemberCoupon.getCouponId();//优惠卷ID
-        List<Long> goodsIdsAll = couponGoodsMapper.selectByCouponId(couponId);
-        List<MallGoodsSku> skusAll = mallGoodsSkuMapper.selectSkuIdsByGoodsId(goodsIdsAll);//获取该优惠卷绑定的全部商品sku
-        List<Long> skuIdsAll = skusAll.stream().map(MallGoodsSku::getId).collect(Collectors.toList());//获取该优惠卷绑定的全部商品skuIDS
-        List<Long> skuIds = items.stream().map(AddOrderItemDto::getSkuId).collect(Collectors.toList());//订单中的全部skuIds
+    public Map<Long, BigDecimal> getCouponAmountMap(Long memberCouponId, List<AddOrderItemDto> items) {
+        HashMap<Long, BigDecimal> couponAmountMap = new HashMap<>();
+        // 获取优惠券信息
+        Optional<MallMemberCoupon> optionalMallMemberCoupon = Optional.ofNullable(mallMemberCouponMapper.selectById(memberCouponId));
+        MallMemberCoupon mallMemberCoupon = optionalMallMemberCoupon.orElse(null);
 
-        /**
-         * 获取这张优惠卷生效的skuIds
-         */
-        Set<Long> intersection = skuIdsAll.stream()
-                .filter(item -> skuIds.contains(item))
-                .collect(Collectors.toSet());//获取两个集合的交集
-        if(CollUtil.isEmpty(intersection)){
+        if (mallMemberCoupon == null || mallMemberCoupon.getState() != 1) {
             return couponAmountMap;
         }
-        HashMap<Long,BigDecimal> skuMap = new HashMap<>();//每个订单详情的ID和amount的map
-        List<MallGoodsSku> skus = mallGoodsSkuMapper.selectByIds(new ArrayList<>(intersection));
-        BigDecimal totalAmount = BigDecimal.ZERO;//订单中的总金额
-        Map<Long, AddOrderItemDto> itemMap = new HashMap<>();// 预先将items转换为Map,以skuId作为键
-        for (AddOrderItemDto addOrderItemDto : items) {
-            itemMap.put(addOrderItemDto.getSkuId(), addOrderItemDto);
+
+        Set<Long> intersection = items.stream().map(AddOrderItemDto::getSkuId).collect(Collectors.toSet()); // 订单中的全部skuIds
+
+        if (intersection.isEmpty()) {
+            return couponAmountMap;
         }
-        for(MallGoodsSku mallGoodsSku : skus){
+
+        // 获取订单详情的ID和amount的map
+        Map<Long, AddOrderItemDto> itemMap = items.stream()
+                .collect(Collectors.toMap(AddOrderItemDto::getSkuId, item -> item));
+
+        List<MallGoodsSku> skus = mallGoodsSkuMapper.selectList(
+                new LambdaQueryWrapper<MallGoodsSku>()
+                        .select(MallGoodsSku::getId, MallGoodsSku::getPresentPrice)
+                        .in(MallGoodsSku::getId, intersection)
+        );
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        Map<Long, BigDecimal> skuMap = new HashMap<>();
+
+        for (MallGoodsSku mallGoodsSku : skus) {
             Long id = mallGoodsSku.getId();
             BigDecimal presentPrice = mallGoodsSku.getPresentPrice();
-            // 检查itemMap中是否存在该商品
             AddOrderItemDto addOrderItemDto = itemMap.get(id);
             if (addOrderItemDto != null) {
                 BigDecimal skuAmount = presentPrice.multiply(BigDecimal.valueOf(addOrderItemDto.getCnt()));
                 totalAmount = totalAmount.add(skuAmount);
-                skuMap.put(id,skuAmount);
+                skuMap.put(id, skuAmount);
             }
         }
 
-        /**
-         * 计算每个商品利用优惠卷打折的具体金额
-         */
-        MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId());
-        BigDecimal costAmount = mallGoodsCoupon.getCostAmount();
-        BigDecimal realAmount = mallGoodsCoupon.getRealAmount();
-        if(totalAmount.compareTo(costAmount) < 0){
+        // 计算每个商品利用优惠卷打折的具体金额
+        Optional<MallGoodsCoupon> optionalMallGoodsCoupon = Optional.ofNullable(mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId()));
+        MallGoodsCoupon mallGoodsCoupon = optionalMallGoodsCoupon.orElse(null);
+        if (mallGoodsCoupon == null) {
             return couponAmountMap;
         }
-        HashMap<Long,BigDecimal> skuMapPercent = new HashMap<>();//每个订单详情的ID和amount的map
-        for (Map.Entry<Long,BigDecimal> entry : skuMap.entrySet()) {
+
+        BigDecimal costAmount = mallGoodsCoupon.getCostAmount();
+        BigDecimal realAmount = mallGoodsCoupon.getRealAmount();
+        Integer type = mallGoodsCoupon.getType();
+        if (MallGoodsCoupon.TYPE_ONE == type) {
+            realAmount = mallGoodsCoupon.getRealAmount();
+        } else if (MallGoodsCoupon.TYPE_TWO == type) {
+            BigDecimal divideTime = totalAmount.divide(costAmount, 0, RoundingMode.HALF_DOWN); // 累计减免次数
+            realAmount = divideTime.multiply(realAmount); // 实际减免金额
+        }
+
+        if (totalAmount.compareTo(costAmount) < 0) {
+            return couponAmountMap;
+        }
+
+        BigDecimal totalDiscount = BigDecimal.ZERO;
+        for (Map.Entry<Long, BigDecimal> entry : skuMap.entrySet()) {
             Long keySkuId = entry.getKey();
             BigDecimal valueSkuAmount = entry.getValue();
-            BigDecimal divide = valueSkuAmount.divide(totalAmount, 4, BigDecimal.ROUND_DOWN);//每个商品占符合满减的总额的比例
-            skuMapPercent.put(keySkuId,divide);
-            Integer type = mallGoodsCoupon.getType();
-            if(MallGoodsCoupon.TYPE_ONE == type){
-                BigDecimal bigDecimal = realAmount.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*减免金额)
-                BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
-                couponAmountMap.put(keySkuId,skuRealAmount);
+            BigDecimal divide = valueSkuAmount.divide(totalAmount, 4, RoundingMode.HALF_DOWN); // 每个商品占符合满减的总额的比例
+            BigDecimal skuRealAmount = BigDecimal.ZERO;
+            if (MallGoodsCoupon.TYPE_ONE == type) {
+                BigDecimal bigDecimalOne = realAmount.multiply(divide).setScale(2, RoundingMode.HALF_DOWN); // 每个SKU的减免金额(比例*减免金额)
+                skuRealAmount = valueSkuAmount.subtract(bigDecimalOne.max(BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_DOWN);
+                totalDiscount = totalDiscount.add(bigDecimalOne);
+            } else if (MallGoodsCoupon.TYPE_TWO == type) {
+                BigDecimal divideTime = totalAmount.divide(costAmount, 0, RoundingMode.HALF_DOWN); // 累计减免次数
+                BigDecimal multiply = divideTime.multiply(realAmount); // 实际减免金额
+                BigDecimal bigDecimalTwo = multiply.multiply(divide).setScale(2, RoundingMode.HALF_DOWN); // 每个SKU的减免金额(比例*实际减免金额)
+                skuRealAmount = valueSkuAmount.subtract(bigDecimalTwo.max(BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_DOWN);
+                totalDiscount = totalDiscount.add(bigDecimalTwo);
             }
-            if(MallGoodsCoupon.TYPE_TWO == type){
-                BigDecimal divideTime = totalAmount.divide(costAmount, 0, BigDecimal.ROUND_DOWN);//累计减免次数
-                BigDecimal multiply = divideTime.multiply(realAmount);//实际减免金额
-                BigDecimal bigDecimal = multiply.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*实际减免金额)
-                BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
-                couponAmountMap.put(keySkuId,skuRealAmount);
+            couponAmountMap.put(keySkuId, skuRealAmount);
+        }
+
+        // 调整最后一个商品的减免金额以确保总减免金额达到预期
+        if (totalDiscount.compareTo(realAmount) < 0) {
+            BigDecimal difference = realAmount.subtract(totalDiscount);
+            for (Map.Entry<Long, BigDecimal> entry : couponAmountMap.entrySet()) {
+                Long keySkuId = entry.getKey();
+                BigDecimal skuRealAmount = entry.getValue();
+                BigDecimal newSkuRealAmount = skuRealAmount.subtract(difference).setScale(2, RoundingMode.HALF_DOWN);
+                couponAmountMap.put(keySkuId, newSkuRealAmount);
+                break; // 调整最后一个商品的减免金额
             }
         }
+
         return couponAmountMap;
     }
 
@@ -543,23 +666,23 @@
         if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
             throw new FebsException("订单状态不能支付");
         }
-        //先支付积分部分
-        if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){
-            balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
-            mallMoneyFlowService.addMoneyFlow(
-                    member.getId(),
-                    orderInfo.getAmount().negate(),
-                    ScoreFlowTypeEnum.PAY.getValue(),
-                    orderInfo.getOrderNo(),
-                    FlowTypeEnum.PRIZE_SCORE.getValue(),
-                    StrUtil.format(ScoreFlowTypeEnum.PAY.getDesc(),orderInfo.getScoreAmount()),
-                    2
-            );
-        }
 
         String payResultStr = "";
         String wxResultStr = "";
         if(orderInfo.getAmount().compareTo(BigDecimal.ZERO) <= 0){
+            //先支付积分部分
+            if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){
+                balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+                mallMoneyFlowService.addMoneyFlow(
+                        member.getId(),
+                        orderInfo.getScoreAmount().negate(),
+                        ScoreFlowTypeEnum.PAY.getValue(),
+                        orderInfo.getOrderNo(),
+                        FlowTypeEnum.PRIZE_SCORE.getValue(),
+                        StrUtil.format(ScoreFlowTypeEnum.PAY.getDesc(),orderInfo.getScoreAmount()),
+                        2
+                );
+            }
             orderInfo.setPayOrderNo(orderInfo.getOrderNo());
             orderInfo.setPayMethod("积分支付");
             orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
@@ -588,10 +711,25 @@
 
                     orderInfo.setPayOrderNo(payResultStr);
                     orderInfo.setPayMethod("支付宝支付");
-                    agentProducer.sendOrderReturn(orderInfo.getId());
+//                    agentProducer.sendOrderReturn(orderInfo.getId());
                     break;
                 case "3":
+
                     payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
+
+                    //先支付积分部分
+                    if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){
+                        balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+                        mallMoneyFlowService.addMoneyFlow(
+                                member.getId(),
+                                orderInfo.getScoreAmount().negate(),
+                                ScoreFlowTypeEnum.PAY.getValue(),
+                                orderInfo.getOrderNo(),
+                                FlowTypeEnum.PRIZE_SCORE.getValue(),
+                                StrUtil.format(ScoreFlowTypeEnum.PAY.getDesc(),orderInfo.getScoreAmount()),
+                                2
+                        );
+                    }
 
                     orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                     orderInfo.setPayMethod("余额支付");
@@ -606,7 +744,7 @@
                             ScoreFlowTypeEnum.PAY_BALANCE.getValue(),
                             orderInfo.getOrderNo(),
                             FlowTypeEnum.BALANCE.getValue(),
-                            StrUtil.format(ScoreFlowTypeEnum.PAY_BALANCE.getDesc(),orderInfo.getScoreAmount()),
+                            StrUtil.format(ScoreFlowTypeEnum.PAY_BALANCE.getDesc(),orderInfo.getAmount()),
                             2
                     );
                     agentProducer.sendOrderCoupon(orderInfo.getId());
@@ -694,11 +832,11 @@
         orderListDto.setMemberId(member.getId());
 //        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()));
-            });
-        }
+//        if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) {
+//            mallOrderInfos.getRecords().forEach(item -> {
+//                item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId()));
+//            });
+//        }
         return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords());
     }
 
@@ -709,15 +847,29 @@
         if (ObjectUtil.isNull(orderInfo)) {
             throw new FebsException("订单不存在");
         }
-        List<MallOrderItem> items = orderInfo.getItems();
-        if(CollUtil.isNotEmpty(items)){
-            for(MallOrderItem mallOrderItem : items){
-                mallOrderItem.setItemAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getAmount());
-                mallOrderItem.setScoreAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getScoreAmount());
-            }
-        }
+//        List<MallOrderItem> items = orderInfo.getItems();
+//        if(CollUtil.isNotEmpty(items)){
+//            for(MallOrderItem mallOrderItem : items){
+//                mallOrderItem.setItemAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getAmount());
+//                mallOrderItem.setScoreAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getScoreAmount());
+//            }
+//        }
+
 
         OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo);
+        if(StrUtil.isNotEmpty(orderInfo.getTakeUniqueCode())){
+            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode());
+
+            if(ObjectUtil.isNotEmpty(mallTeamLeader)){
+                orderDetailVo.setLeaderName(mallTeamLeader.getName());
+                orderDetailVo.setLeaderPhone(mallTeamLeader.getPhone());
+                orderDetailVo.setAddressPic(mallTeamLeader.getAddressPic());
+                orderDetailVo.setAddressArea(mallTeamLeader.getAddressArea());
+                orderDetailVo.setDetailAddress(mallTeamLeader.getDetailAddress());
+                orderDetailVo.setLeaderLongitude(mallTeamLeader.getLongitude());
+                orderDetailVo.setLeaderLatitude(mallTeamLeader.getLatitude());
+            }
+        }
 
         MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
         if(ObjectUtil.isNotEmpty(expressInfo)){
@@ -744,13 +896,29 @@
     @Transactional(rollbackFor = Exception.class)
     public void confirmOrder(Long id) {
         MallMember member = LoginUserUtil.getLoginUser();
-        MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
+//        MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
+        MallOrderInfo orderInfo = this.baseMapper.selectOne(
+                new LambdaQueryWrapper<MallOrderInfo>()
+                .eq(MallOrderInfo::getMemberId, member.getId())
+                .eq(MallOrderInfo::getId, id)
+                .last("limit 1")
+        );
         if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
             throw new FebsException("订单不存在");
         }
 
         if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
             throw new FebsException("该状态不能确认收货");
+        }
+        if(orderInfo.getDeliveryType().equals(1)){
+            List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectList(
+                    new LambdaQueryWrapper<MallOrderItem>()
+                            .eq(MallOrderItem::getOrderId, id)
+                            .eq(MallOrderItem::getLeaderState, 0)
+            );
+            if(CollUtil.isNotEmpty(mallOrderItems)){
+                throw new FebsException("请先核销"+mallOrderItems.get(0).getGoodsName());
+            }
         }
 
         List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(null, orderInfo.getId(), 3);
@@ -935,7 +1103,7 @@
                 mallGoodsComment.setSkuName(mallGoodsSku.getSkuName());
                 mallGoodsComment.setStyleId(mallGoodsSku.getStyleId());
                 mallGoodsComment.setStyleName(mallGoodsSku.getStyleName());
-                mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE);
+                mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_DISABLED);
                 mallGoodsCommentMapper.insert(mallGoodsComment);
             }
         }
@@ -966,6 +1134,7 @@
         if(CollUtil.isEmpty(mallOrderItemList)){
             return new FebsResponse().fail().message("订单不存在");
         }
+        int i = 0;
         for(MallOrderItem mallOrderItem : mallOrderItemList){
             QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
             objectQueryWrapper.eq("member_id",member.getId());
@@ -986,7 +1155,11 @@
                     mallRefundEntity.setType(3);
                 }
                 mallRefundEntity.setState(3);
-                mallRefundEntity.setAmount(mallOrderItem.getAmount());
+                if(i == 0){
+                    mallRefundEntity.setAmount(mallOrderItem.getAmount().add(mallOrderInfo.getCarriage()));
+                }else{
+                    mallRefundEntity.setAmount(mallOrderItem.getAmount());
+                }
                 mallRefundMapper.insert(mallRefundEntity);
             }else{
                 if(mallRefund.getState() == 1){
@@ -1009,6 +1182,7 @@
             apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId());
             apiLeaderRefundOrderDto.setAgreeState(1);
             iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
+            i++;
         }
         return new FebsResponse().success();
     }

--
Gitblit v1.9.1