From 7869fa712c19c351a48bfb0af11b0fe87b17c184 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 14 一月 2026 15:14:00 +0800
Subject: [PATCH] 小程序 用户端接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java |   69 +++++++++++++++++++++++++++++++++-
 1 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
index 83df9aa..ad565c4 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -379,7 +379,6 @@
         if(CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU淇℃伅閿欒,璇峰埛鏂伴噸璇�");
         }
-
         //鏌ヨ鍟嗗搧鍒楄〃
         List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                 new MPJLambdaWrapper<Goods>()
@@ -391,7 +390,6 @@
         if(Objects.isNull(goodsList)){
             return memberCouponList;
         }
-
         //鑾峰彇閫夋嫨鐨勫晢鍝佹�婚噾棰� 涓� 鍗曚釜鍟嗗搧閲戦
         BigDecimal totalAmount = BigDecimal.ZERO;
         for (Goods goods:goodsList) {
@@ -437,6 +435,73 @@
     }
 
 
+    public void  couponIsValid(List<PayDetailRequest> requestList,MemberCoupon memberCoupon){
+        if(Objects.isNull(memberCoupon)
+            || Constants.equalsInteger(memberCoupon.getStatus(),Constants.ONE)
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼樻儬鍒镐俊鎭棤鏁堟垨宸茶浣跨敤");
+        }
+        if(memberCoupon.getStartDate().getTime() > System.currentTimeMillis()){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼樻儬鍒告湭鐢熸晥");
+        }
+        if(memberCoupon.getEndDate().getTime() < System.currentTimeMillis()){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼樻儬鍒稿凡杩囨湡");
+        }
+        List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>()
+                .lambda()
+                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+                .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))
+        );
+        if(CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU淇℃伅閿欒,璇峰埛鏂伴噸璇�");
+        }
+        //鏌ヨ鍟嗗搧鍒楄〃
+        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+                new MPJLambdaWrapper<Goods>()
+                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+                        .selectAs(GoodsSku::getId,Goods::getSkuId)
+                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+        if(Objects.isNull(goodsList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU鍟嗗搧淇℃伅閿欒,璇峰埛鏂伴噸璇�");
+        }
+        //鑾峰彇閫夋嫨鐨勫晢鍝佹�婚噾棰� 涓� 鍗曚釜鍟嗗搧閲戦
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        for (Goods goods:goodsList) {
+            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), goods.getSkuId())).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(request)){
+                goods.setSkuAmount(goods.getSkuPrice().multiply(new BigDecimal(request.get(Constants.ZERO).getGoodsNum()+"")));
+                totalAmount = totalAmount.add(goods.getSkuAmount());
+            }
+        }
+        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+        if(totalAmount.compareTo(memberCoupon.getLimitPrice())<Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鍟嗗搧閲戦鏈弧瓒冲彲浣跨敤闂ㄦ");
+        }
+        //閫傜敤绫诲瀷锛�0=鍏ㄥ満;1=鍝佺被锛�2=鎸囧畾鍟嗗搧
+        if(Constants.equalsInteger(memberCoupon.getApplyType(),Constants.ZERO)){
+            memberCoupon.setValidAmount(memberCoupon.getPrice());
+        }else{
+            List<String> applyIdList = Arrays.asList(memberCoupon.getApplyIds().split(","));
+            //鑾峰彇鏈夋晥鍙互浣跨敤浼樻儬鍒哥殑鏁版嵁
+            isVaildUse(applyIdList,goodsCalculateList,
+                    Constants.equalsInteger(memberCoupon.getApplyType(),Constants.ONE)?Constants.ONE:Constants.ZERO);
+            BigDecimal skuAmount = goodsCalculateList.stream().filter(i->i.getUseCoupon()).map(i->i.getSkuAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
+            if(skuAmount.compareTo(memberCoupon.getLimitPrice())>=Constants.ZERO){
+                //鏍规嵁閲戦璁$畻瀹為檯鎶樻墸閲戦
+                BigDecimal couponPrice = skuAmount.multiply(memberCoupon.getPrice()).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
+                //鎶樻墸閲戦澶т簬鏈�澶у彲鎶樻墸閲戦  鍒欎娇鐢ㄦ渶澶у彲鎶樻墸閲戦
+                memberCoupon.setValidAmount(couponPrice.compareTo(memberCoupon.getMaxPrice())>Constants.ZERO?memberCoupon.getMaxPrice():couponPrice);
+            }
+        }
+    }
+
+
+
+
+
+
+
     /**
      * 璁$畻褰撳墠宸查�夋嫨浼樻儬鍒告瘡涓晢鍝佸崰姣旈噾棰�
      * @param coupon 浼樻儬鍒镐俊鎭�

--
Gitblit v1.9.3