From e05fe75a9f48455692aef753bbfbb39542349017 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 16 八月 2024 13:40:04 +0800
Subject: [PATCH] 选择优惠券

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java |   78 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java
index d7c6dcc..a499a52 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java
@@ -14,6 +14,7 @@
 import com.ruoyi.account.service.TAppCouponService;
 import com.ruoyi.account.service.TAppUserVipDetailService;
 import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -31,8 +32,11 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 
@@ -139,9 +143,14 @@
         PageInfo<CouponListVOVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
         List<CouponListVOVO> list = this.baseMapper.couponList(pageInfo,dto.getUserId());
         TAppUser tAppUser = tAppUserMapper.selectById(dto.getUserId());
-        Integer isVip = 0;// 是否能享受会员折扣
+        Integer isVip = 0;// 是否能享受会员折扣 0否 1是普通会员 2内部会员
+        // 会员折扣
+        Double discount = 0.0;
+        // 普通会员最高折扣金额
+        Double discountMoney = 0.0;
         if (tAppUser.getVipEndTime() == null){
             // 不是会员
+            isVip = 0;
         }else {
             // 判断会员有没有过期
             if (tAppUser.getVipEndTime().isAfter(java.time.LocalDateTime.now())){
@@ -161,20 +170,79 @@
                 TVip data1 = vipClient.getInfo1(vipId).getData();
                 Integer discountTimes = data1.getDiscountTimes();
                 if (data>=discountTimes){
-                    // 不能再享受会员折扣
+                    //  折扣次数用光了 不能再享受会员折扣
+                    isVip = 0;
                 }else{
-                    isVip = 1;
+                    if (data1.getType() == 2){
+                        // 如果内部会员 使用该折扣
+                        discount = data1.getDiscount().doubleValue();
+                        isVip = 2;
+                    }else{
+                        // 普通会员 最高折扣金额
+                        discountMoney = data1.getMaximumDeduction().doubleValue();
+                        isVip = 1;
+                    }
+
                 }
+            }else{
+                // 会员过期 不能享受
+                isVip = 0;
             }
         }
         for (CouponListVOVO couponListVOVO : list) {
             couponListVOVO.setValidityTime("有效期:"+format.format(couponListVOVO.getCreateTime())+" - "+format.format(couponListVOVO.getEndTime()));
         }
         List<CouponListVOVO> data = otherClient.getCouponInfoByCouponIds(list).getData();
+        // 桩编号 + 是否是会员 + 内部会员折扣 + 普通会员最高折扣金额 + 预付金额
+        String temp = dto.getNumber()+"-"+isVip+"-"+discount+"-"+discountMoney+"-"+dto.getPayMoney();
+        // 根据当前时间段和预付金额计算服务费
+        BigDecimal serviceMoney = chargingPileClient.getServiceMoney(temp).getData();
         for (CouponListVOVO datum : data) {
-            // 根据当前时间段和预付金额计算服务费
-
+            // 判断优惠券类型
+            switch (datum.getPreferentialMode()){
+                case 1:
+                    datum.setIsUse(1);
+                    // 满减券 判断服务费是否满足满减条件
+                    if (datum.getMeetTheConditions().compareTo(new BigDecimal(BigInteger.ZERO)) == 0){
+                        // 无门槛优惠券
+                        datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount()));
+                    }else if (serviceMoney.compareTo(datum.getMeetTheConditions())>=0){
+                        // 满足条件
+                        datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount()));
+                    }else{
+                        // 不满足条件
+                        datum.setMoney(serviceMoney);
+                        datum.setIsUse(0);
+                    }
+                    break;
+                case 2:
+                    datum.setIsUse(1);
+                    // 折扣券 判断
+                    if (datum.getMeetTheConditions().compareTo(new BigDecimal(BigInteger.ZERO)) == 0){
+                        // 无门槛优惠券
+                        datum.setMoney(serviceMoney.subtract(datum.getDiscountAmount()));
+                    }else if (serviceMoney.compareTo(datum.getMeetTheConditions())>=0){
+                        // 折扣后的服务费
+                        BigDecimal divide = serviceMoney.multiply(datum.getDiscount()).divide(new BigDecimal(10), 2, BigDecimal.ROUND_HALF_UP);
+                        // 计算折扣了多少钱 判断是否超过最高折扣金额
+                        BigDecimal subtract = serviceMoney.subtract(divide);
+                        if (subtract.compareTo(datum.getMaximumDiscountAmount())>0){
+                            // 超过最高折扣金额 减去最高折扣金额
+                            datum.setMoney(serviceMoney.subtract(datum.getMaximumDiscountAmount()));
+                        }else{
+                            // 没超过最高折扣金额
+                            datum.setMoney(divide);
+                        }
+                    }else{
+                        // 不满足条件
+                        datum.setMoney(serviceMoney);
+                        datum.setIsUse(0);
+                    }
+                    break;
+            }
         }
+        // 通过集合的money字段 将money从大到小排序
+        data.sort(Comparator.comparing(CouponListVOVO::getMoney).reversed());
         pageInfo.setRecords(data);
         return pageInfo;
     }

--
Gitblit v1.7.1