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