From 569bd97e623c596ac2db49aa65c88966380b6562 Mon Sep 17 00:00:00 2001
From: cgf <2156125618@qq.com>
Date: 星期六, 09 八月 2025 19:01:08 +0800
Subject: [PATCH] 折扣已完成现有需求2025/08/09

---
 service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java |   81 ++++++++++++++++++++++++++++++++--------
 1 files changed, 64 insertions(+), 17 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
index bff4324..7a9e62d 100755
--- a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
@@ -2,24 +2,22 @@
 
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.PageDto;
-import com.java110.dto.applyRoomDiscount.ApplyRoomDiscountDto;
+import com.java110.dto.room.ApplyRoomDiscountDto;
 import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.fee.ComputeDiscountDto;
 import com.java110.dto.fee.FeeDiscountDto;
 import com.java110.dto.fee.FeeDiscountRuleDto;
 import com.java110.dto.fee.FeeDiscountSpecDto;
-import com.java110.dto.payFeeConfigDiscount.PayFeeConfigDiscountDto;
+import com.java110.dto.payFee.PayFeeConfigDiscountDto;
+import com.java110.dto.work.WorkCopyDto;
 import com.java110.fee.dao.IFeeDiscountServiceDao;
 import com.java110.fee.discount.IComputeDiscount;
 import com.java110.intf.fee.*;
-import com.java110.po.feeDiscount.FeeDiscountPo;
+import com.java110.po.fee.FeeDiscountPo;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.factory.ApplicationContextFactory;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.MoneyUtil;
-import com.java110.utils.util.StringUtil;
+import com.java110.utils.util.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -165,7 +163,7 @@
         //鏍规嵁璐圭敤椤规煡璇㈡姌鎵o紙璇ヨ垂鐢ㄩ」涓嬬殑鎵�鏈夋姌鎵d俊鎭級
         List<PayFeeConfigDiscountDto> payFeeConfigDiscountDtos =
                 payFeeConfigDiscountInnerServiceSMOImpl.queryPayFeeConfigDiscounts(payFeeConfigDiscountDto);
-        if (payFeeConfigDiscountDtos == null || payFeeConfigDiscountDtos.size() < 1) {
+        if (ListUtil.isNull(payFeeConfigDiscountDtos)) {
             computeApplyRoomDiscount(feeDetailDto, simpleDateFormat, c, computeDiscountDtos);
             //鍙栧嚭寮�鍏虫槧灏勭殑鍊�
             String value = MappingCache.getValue(DOMAIN_COMMON, DISCOUNT_MODE);
@@ -200,7 +198,7 @@
             //鏌ヨ鎵撴姌琛�
             List<FeeDiscountDto> feeDiscountInfo = BeanConvertUtil.covertBeanList(feeDiscountServiceDaoImpl.getFeeDiscountInfo(BeanConvertUtil.beanCovertMap(feeDiscountDto)), FeeDiscountDto.class);
             //Assert.listOnlyOne(feeDiscountInfo, "鏌ヨ鎵撴姌琛ㄩ敊璇紒");
-            if(feeDiscountInfo == null || feeDiscountInfo.size() < 1){
+            if(ListUtil.isNull(feeDiscountInfo)){
                 continue;
             }
             FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
@@ -208,7 +206,7 @@
             //鏌ヨ鎵撴姌瑙勫垯琛�
             List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
             //Assert.listOnlyOne(feeDiscountRuleDtos, "鏌ヨ鎵撴姌瑙勫垯琛ㄩ敊璇紒");
-            if(feeDiscountRuleDtos == null || feeDiscountRuleDtos.size() < 1){
+            if(ListUtil.isNull(feeDiscountRuleDtos)){
                 continue;
             }
             if (!StringUtil.isEmpty(feeDiscountRuleDtos.get(0).getBeanImpl()) && feeDiscountRuleDtos.get(0).getBeanImpl().equals("reductionMonthFeeRule")) { //璧犻�佽鍒�
@@ -217,7 +215,10 @@
                 feeDiscountSpecDto.setSpecId(SPEC_RATE);
                 //鏌ヨ鎵撴姌瑙勬牸
                 List<FeeDiscountSpecDto> feeDiscountSpecDtos = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpecDto);
-                Assert.listOnlyOne(feeDiscountSpecDtos, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
+                //Assert.listOnlyOne(feeDiscountSpecDtos, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
+                if(ListUtil.isNull(feeDiscountSpecDtos)){
+                    continue;
+                }
                 //鑾峰彇璧犻�佹湀浠�
                 String specValue = feeDiscountSpecDtos.get(0).getSpecValue();
                 Calendar cal = Calendar.getInstance();
@@ -268,19 +269,25 @@
             //鎴垮眿id
             applyRoomDiscountDto.setRoomId(feeDetailDto.getPayerObjId());
             //寮�濮嬫椂闂�
-            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(feeDetailDto.getStartTime()));
+//            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(feeDetailDto.getStartTime()));
             //缁撴潫鏃堕棿
             c.setTime(feeDetailDto.getStartTime());
-            c.add(Calendar.DAY_OF_MONTH, 2);//寮�濮嬫椂闂达紝娣诲姞1锛�2澶╃殑鍐椾綑锛屽彧瑕佹瘮5灏忓嵆鍙�
-            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(c.getTime()));//閲嶆柊璁剧疆寮�濮嬫椂闂�
+//            c.add(Calendar.DAY_OF_MONTH, 2);//寮�濮嬫椂闂达紝娣诲姞1锛�2澶╃殑鍐椾綑锛屽彧瑕佹瘮5灏忓嵆鍙�
+//            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(c.getTime()));//閲嶆柊璁剧疆寮�濮嬫椂闂�
             double month = Double.parseDouble(feeDetailDto.getCycles());
+//            if(month == 105){
+//                return;
+//            }
             c.add(Calendar.MONTH, (int) month);
-            c.add(Calendar.DAY_OF_MONTH, -5);//杩欓噷鏍规嵁璁剧疆鏃堕棿鑽h獕5澶�
+//            c.add(Calendar.DAY_OF_MONTH, -5);//杩欓噷鏍规嵁璁剧疆鏃堕棿鑽h獕5澶�
             Date endTime = c.getTime();
-            applyRoomDiscountDto.setEndTime(simpleDateFormat.format(endTime));
+//            applyRoomDiscountDto.setEndTime(simpleDateFormat.format(endTime));
             applyRoomDiscountDto.setFeeId(feeDetailDto.getFeeId());
             //鏌ヨ鎶樻墸鐢宠琛�
             List<ApplyRoomDiscountDto> applyRoomDiscountDtos = applyRoomDiscountInnerServiceSMOImpl.queryApplyRoomDiscounts(applyRoomDiscountDto);
+
+
+
             //鍒ゆ柇鏌ヨ鐨勬姌鎵g敵璇疯〃鏄惁鏈夋暟鎹�
             if (applyRoomDiscountDtos != null && applyRoomDiscountDtos.size() > 0) {
                 //鑾峰彇浼樻儬id
@@ -290,11 +297,51 @@
                 PayFeeConfigDiscountDto payFeeConfigDiscount = new PayFeeConfigDiscountDto();
                 payFeeConfigDiscount.setCommunityId(applyRoomDiscountDtos.get(0).getCommunityId());
                 payFeeConfigDiscount.setDiscountId(discountId);
-                doCompute(payFeeConfigDiscount, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+                if(applyRoomDiscountDtos.get(0).getStartTime() == null){
+                    payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+                }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()).before(feeDetailDto.getStartTime())){
+                    payFeeConfigDiscount.setStartTime(feeDetailDto.getStartTime());
+                }else{
+                    payFeeConfigDiscount.setStartTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getStartTime()));
+                }
+                if(applyRoomDiscountDtos.get(0).getEndTime() == null){
+                    payFeeConfigDiscount.setEndTime(endTime);
+                }else if(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()).after(feeDetailDto.getEndTime())){
+                    payFeeConfigDiscount.setEndTime(feeDetailDto.getEndTime());
+                }else{
+                    payFeeConfigDiscount.setEndTime(DateUtil.getDateFromStringB(applyRoomDiscountDtos.get(0).getEndTime()));
+                }
+                double cycle =
+                        DateUtil.dayCompare(
+                                payFeeConfigDiscount.getStartTime(),
+                                payFeeConfigDiscount.getEndTime()
+                        );
+                doComputeB(payFeeConfigDiscount, cycle, computeDiscountDtos, feeDetailDto.getFeeId());
             }
         }
     }
 
+    private void doComputeB(PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto, double cycles, List<ComputeDiscountDto> computeDiscountDtos, String feeId) {
+        FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
+        feeDiscountDto.setCommunityId(tmpPayFeeConfigDiscountDto.getCommunityId());
+        feeDiscountDto.setDiscountId(tmpPayFeeConfigDiscountDto.getDiscountId());
+        List<FeeDiscountDto> feeDiscountDtos = queryFeeDiscounts(feeDiscountDto);
+        if (feeDiscountDtos == null || feeDiscountDtos.size() < 1) {
+            return;
+        }
+
+        for (FeeDiscountDto tmpFeeDiscountDto : feeDiscountDtos) {
+            tmpFeeDiscountDto.setFeeId(feeId);
+            tmpFeeDiscountDto.setCycles(cycles);
+        }
+        IComputeDiscount computeDiscount = (IComputeDiscount) ApplicationContextFactory.getBean(feeDiscountDtos.get(0).getBeanImpl());
+        ComputeDiscountDto computeDiscountDto = computeDiscount.compute(feeDiscountDtos.get(0));
+        if (computeDiscountDto == null) {
+            return;
+        }
+        computeDiscountDtos.add(computeDiscountDto);
+    }
+
     private void doCompute(PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto, double cycles, List<ComputeDiscountDto> computeDiscountDtos, String feeId) {
         FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
         feeDiscountDto.setCommunityId(tmpPayFeeConfigDiscountDto.getCommunityId());

--
Gitblit v1.8.0