From 46675f1b0e738d6feac132606612e16056c9aee6 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 15 五月 2025 01:02:52 +0800
Subject: [PATCH] 优化基础报表产生数据逻辑将自然月和非自然月却别对待
---
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java | 117 ++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 97 insertions(+), 20 deletions(-)
diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
index 6fe0331..c441b20 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -159,7 +159,7 @@
* @param deadlineTime
*/
@Override
- public void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime) {
+ public void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime, double owePrice) {
// todo 娓呯悊 detailId 涓�-1 鐨勬暟鎹�
@@ -174,6 +174,31 @@
return;
}
+ // 鑷劧鏈堝懆鏈熸�ц垂鐢ㄨ绠�
+ waitDispersedOweFeeCycleNormalMonth(feeDto,payFeeMonthOwnerDto,feePrice,deadlineTime);
+
+ // 涓�娆℃�ф垨鑰呴潪鑷劧鏈堝鐞�
+ waitDispersedOweFeeOnceUnNormalMonth(feeDto,payFeeMonthOwnerDto,deadlineTime,owePrice);
+
+ }
+
+ /**
+ * 鑷劧鏈堝懆鏈熸�ц垂鐢ㄨ绠�
+ *
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param feePrice
+ * @param deadlineTime
+ */
+ private void waitDispersedOweFeeCycleNormalMonth(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime) {
+ // 涓�娆℃�ц垂鐢ㄧ洿鎺ヨ繑鍥�
+ if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+ return;
+ }
+ // 涓嶆槸鑷劧鏈� 璐圭敤鐩存帴杩斿洖
+ if(DateUtil.getMonthDay(feeDto.getStartTime()) !=1){
+ return;
+ }
List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
// todo 澶勭悊 寮�濮嬫椂闂村拰缁撴潫鏃堕棿
Date startTime = DateUtil.timeToDate(feeDto.getEndTime());
@@ -182,15 +207,6 @@
BigDecimal receivableAmount = new BigDecimal(feePrice);
BigDecimal dayReceivableAmount = null;
-
- //todo 涓�娆℃�ц垂鐢� 鏃ュ簲鏀惰绠�
- if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
- int day = DateUtil.daysBetween(endTime, startTime);
- if (day < 1) {
- day = 1;
- }
- dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
- }
// todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
Calendar firstMonthDayCal = Calendar.getInstance();
@@ -212,11 +228,7 @@
calendar.setTime(startMonthDayTime);
curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
-
- //todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
- if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
- dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
- }
+ dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
// todo 璁$畻 搴旀敹
curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
@@ -240,21 +252,86 @@
Calendar calendar = Calendar.getInstance();
calendar.setTime(startMonthDayTime);
curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- // todo 濡傛灉涓嶆槸鏁存湀锛屽垯杞崲涓烘寜澶╄绠�
-// if (curDay != curMonthMaxDay) {
//todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
}
// todo 璁$畻 搴旀敹
curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
-// } else { // todo 濡傛灉鏄暣鏈� 閭e氨鎸夋湀璁$畻锛屼互鍏� 杞崲鎴愬ぉ鍐� 涔樹互澶╂暟鍚庣殑璇樊
-// curMonthReceivableAmount = receivableAmount;
-// }
+
// todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ }
+
+ /**
+ * 涓�娆℃�ф垨鑰呴潪鑷劧鏈堝鐞�
+ * @param feeDto
+ * @param payFeeMonthOwnerDto
+ * @param deadlineTime
+ * @param oweMonth
+ */
+ private void waitDispersedOweFeeOnceUnNormalMonth(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Date deadlineTime, double oweMonth) {
+
+ // 涓嶆槸涓�娆℃�ц垂鐢� 骞朵笖鏄� 鑷劧鏈堝氨杩斿洖
+ if(!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag()) && DateUtil.getMonthDay(feeDto.getStartTime()) == 1){
+ return;
+ }
+ List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
+ // todo 澶勭悊 寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+ Date startTime = DateUtil.timeToDate(feeDto.getEndTime());
+ Date endTime = DateUtil.deadTimeToDate(deadlineTime);
+
+ BigDecimal receivableAmount = new BigDecimal(oweMonth);
+
+ BigDecimal dayReceivableAmount = null;
+
+
+ int day = DateUtil.daysBetween(endTime, startTime);
+ if (day < 1) {
+ day = 1;
+ }
+ dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
+
+ // todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
+ Calendar firstMonthDayCal = Calendar.getInstance();
+ firstMonthDayCal.setTime(startTime);
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayCal.set(Calendar.DAY_OF_MONTH, 1);
+ Date firstMonthDayTime = firstMonthDayCal.getTime();
+
+ Date startMonthDayTime = startTime;
+ // todo 寰幆锛屽彧鍒� firstMonthDayTime 澶т簬 endTime
+ int curDay = 0;
+ int curMonthMaxDay = 30;
+ BigDecimal curMonthReceivableAmount = null;
+
+ while (firstMonthDayTime.getTime() < endTime.getTime()) {
+ curDay = DateUtil.daysBetween(firstMonthDayTime, startMonthDayTime);
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
+
+ // todo 灏唖tartTime 淇敼涓� 涓嬫湀1鏃ユ椂闂�
+ startMonthDayTime = firstMonthDayTime;
+ firstMonthDayCal.add(Calendar.MONTH, 1);
+ firstMonthDayTime = firstMonthDayCal.getTime();
+ }
+
+ //todo 鏈�鍚庡鐞� 鏈�鍚� startMonthDayTime 鍒癳ndTime 鐨�
+ if (startMonthDayTime.getTime() >= endTime.getTime()) {
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
+ return;
+ }
+ curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
+ // todo 璁$畻 搴旀敹
+ curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+ // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
+ toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
+ payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
}
private void doDispersedFeeDetail(FeeDetailDto feeDetailDto, FeeDto feeDto, PayFeeMonthOwnerDto
--
Gitblit v1.8.0