From a5106b61fc8d50609385e1e6d25664a10a11ccf9 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期四, 19 十月 2023 18:38:19 +0800
Subject: [PATCH] 优化代码

---
 service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java |  149 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 0 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java b/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
index 68381af..9c00103 100644
--- a/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
@@ -1,13 +1,27 @@
 package com.java110.fee.convertOnce;
 
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.fee.FeeConfigDto;
 import com.java110.dto.fee.FeeDto;
+import com.java110.fee.dao.IPayFeeConfigV1ServiceDao;
+import com.java110.fee.dao.impl.PayFeeV1ServiceDaoImpl;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
 import com.java110.intf.fee.IPayFeeRuleV1InnerServiceSMO;
 import com.java110.po.fee.PayFeePo;
+import com.java110.po.payFeeRule.PayFeeRulePo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -17,8 +31,14 @@
 @Service
 public class CycleConvertOnceFeeImpl implements ICycleConvertOnceFee {
 
+    private static Logger logger = LoggerFactory.getLogger(PayFeeV1ServiceDaoImpl.class);
+
+
     @Autowired
     private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
 
     @Autowired
     private IPayFeeRuleV1InnerServiceSMO payFeeRuleV1InnerServiceSMOImpl;
@@ -41,6 +61,27 @@
 
         //todo 涓氬姟澶勭悊
 
+        List<PayFeeRulePo> payFeeRulePos = new ArrayList<>();
+
+        PayFeeRulePo tmpPayFeeRulePo = null;
+        String curYearMonth = "";
+        for (PayFeePo tmpPayFeePo : payFeePos) {
+            tmpPayFeeRulePo = BeanConvertUtil.covertBean(tmpPayFeePo, PayFeeRulePo.class);
+            tmpPayFeeRulePo.setRuleId(GenerateCodeFactory.getGeneratorId("11"));
+            curYearMonth = DateUtil.getFormatTimeStringB(DateUtil.getDateFromStringB(tmpPayFeePo.getEndTime()));
+            tmpPayFeeRulePo.setCurYearMonth(curYearMonth);
+            payFeeRulePos.add(tmpPayFeeRulePo);
+        }
+
+        if (payFeeRulePos.isEmpty()) {
+            return 0;
+        }
+
+        //todo 淇濆瓨瑙勫垯
+        payFeeRuleV1InnerServiceSMOImpl.savePayFeeRules(payFeeRulePos);
+
+        //todo 鏍规嵁瑙勫垯鐢熸垚璐圭敤
+        rulesGeneratePayFees(payFeeRulePos);
 
         return 0;
     }
@@ -61,4 +102,112 @@
     public int covertRuleIdsPayFee(List<String> ruleIds) {
         return 0;
     }
+
+    @Override
+    public int rulesGeneratePayFees(List<PayFeeRulePo> payFeeRulePos) {
+
+        if (payFeeRulePos == null || payFeeRulePos.isEmpty()) {
+            return 0;
+        }
+
+        for (PayFeeRulePo tmpPayFeeRulePo : payFeeRulePos) {
+            try {
+                //todo 鍗曚釜璐圭敤澶勭悊
+                ruleGeneratePayFee(tmpPayFeeRulePo);
+            } catch (Exception e) {
+                logger.error("澶勭悊寮傚父 ruleId" + tmpPayFeeRulePo.getRuleId(), e);
+            }
+        }
+        return payFeeRulePos.size();
+    }
+
+    /**
+     * @param tmpPayFeeRulePo
+     */
+    public int ruleGeneratePayFee(PayFeeRulePo tmpPayFeeRulePo) {
+
+        //todo 鏌ヨ璐圭敤椤逛俊鎭�
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigId(tmpPayFeeRulePo.getConfigId());
+        feeConfigDto.setCommunityId(tmpPayFeeRulePo.getCommunityId());
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        Assert.listOnlyOne(feeConfigDtos, "璐圭敤椤逛笉瀛樺湪锛宑onfigId=" + tmpPayFeeRulePo.getConfigId());
+
+        //todo 璁$畻鐩爣 缁撴潫鏃堕棿
+        Date targetEndTime = computeTargetEndTime(tmpPayFeeRulePo, feeConfigDtos.get(0));
+
+        //todo 鍒涘缓 pay_fee 鍜� attrs 鏁版嵁
+
+        List<PayFeePo> payFeePos = new ArrayList<>();
+        for()
+
+
+        return 0;
+    }
+
+    /**
+     * 璁$畻鐩爣缁撴潫鏃堕棿
+     *
+     * @param tmpPayFeeRulePo
+     * @param feeConfigDto
+     * @return
+     */
+    private Date computeTargetEndTime(PayFeeRulePo tmpPayFeeRulePo, FeeConfigDto feeConfigDto) {
+
+        Date targetEndDate = null;
+        //todo 鍒ゆ柇褰撳墠璐圭敤鏄惁宸茬粨鏉�
+        if (FeeDto.STATE_FINISH.equals(tmpPayFeeRulePo.getState())) {
+            targetEndDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+            return targetEndDate;
+        }
+
+        Calendar preEndTimeCal = Calendar.getInstance();
+        preEndTimeCal.setTime(DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime()));
+        if (StringUtil.isNumber(feeConfigDto.getPrepaymentPeriod())) {
+            preEndTimeCal.add(Calendar.DAY_OF_MONTH, Integer.parseInt(feeConfigDto.getPrepaymentPeriod()) * -1);
+        }
+        Date preEndTime = preEndTimeCal.getTime();
+        Date maxEndTime = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getMaxTime());
+
+        Date billEndTime = DateUtil.getCurrentDate();
+        //寤鸿处鏃堕棿
+        Date startDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getStartTime());
+        //璁¤垂璧峰鏃堕棿
+        Date endDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+        //缂磋垂鍛ㄦ湡
+        long paymentCycle = Long.parseLong(feeConfigDto.getPaymentCycle());
+        // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
+        double mulMonth = 0.0;
+        mulMonth = DateUtil.dayCompare(startDate, billEndTime);
+
+        // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
+        double round = 0.0;
+        if ("1200".equals(feeConfigDto.getPaymentCd())) { // 1200棰勪粯璐�
+            round = Math.floor(mulMonth / paymentCycle) + 1;
+        } else { //2100鍚庝粯璐�
+            round = Math.floor(mulMonth / paymentCycle);
+        }
+        // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
+        targetEndDate = DateUtil.getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+
+        //todo 濡傛灉 鍒颁簡 棰勪粯鏈� 浜х敓涓嬩釜鍛ㄦ湡鐨勮垂鐢�
+        if (DateUtil.getFormatTimeStringB(targetEndDate).equals(DateUtil.getFormatTimeStringB(endDate))
+                && DateUtil.getCurrentDate().getTime() > preEndTime.getTime()
+        ) {
+            targetEndDate = DateUtil.getTargetEndTime((round + 1) * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+        }
+
+
+        //todo 璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂�  璐圭敤蹇粨鏉熶簡   鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
+        if (maxEndTime.getTime() < targetEndDate.getTime()) {
+            targetEndDate = maxEndTime;
+        }
+
+        if (DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime()).getTime() > targetEndDate.getTime()) {
+            targetEndDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+        }
+
+        return targetEndDate;
+    }
 }

--
Gitblit v1.8.0