From a26c074129afced8fe87e300fb501030fde0c056 Mon Sep 17 00:00:00 2001
From: chengf <2156125618@qq.com>
Date: 星期五, 04 七月 2025 18:38:29 +0800
Subject: [PATCH] 添加二级费用项

---
 service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java |   86 ++++++++++++++++++++++++++-----------------
 1 files changed, 52 insertions(+), 34 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 ac03b23..6fe0331 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
@@ -53,34 +53,34 @@
         payFeeMonthOwnerDto.setObjId(feeDto.getPayerObjId());
         payFeeMonthOwnerDto.setObjFpcId("-1");
 
-        if(StringUtil.isEmpty(feeDto.getPayerObjId())){
+        if (StringUtil.isEmpty(feeDto.getPayerObjId())) {
             return payFeeMonthOwnerDto;
         }
 
         // 濡傛灉鏄埧灞�
-        if(FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())){
+        if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
 
             RoomDto roomDto = new RoomDto();
             roomDto.setRoomId(feeDto.getPayerObjId());
             roomDto.setCommunityId(feeDto.getCommunityId());
             List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-            if(!ListUtil.isNull(roomDtos)){
+            if (!ListUtil.isNull(roomDtos)) {
                 payFeeMonthOwnerDto.setObjFpcId(roomDtos.get(0).getFloorId());
             }
-        }else if(FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())){
+        } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
 
             OwnerCarDto ownerCarDto = new OwnerCarDto();
             ownerCarDto.setMemberId(feeDto.getPayerObjId());
             ownerCarDto.setCommunityId(feeDto.getCommunityId());
             List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-            if(!ListUtil.isNull(ownerCarDtos)){
+            if (!ListUtil.isNull(ownerCarDtos)) {
                 payFeeMonthOwnerDto.setObjFpcId(ownerCarDtos.get(0).getPaId());
             }
-        }else {
+        } else {
             ContractDto contractDto = new ContractDto();
             contractDto.setContractId(feeDto.getPayerObjId());
             List<ContractDto> contractDtos = contractInnerServiceSMOImpl.queryContracts(contractDto);
-            if(!ListUtil.isNull(contractDtos)){
+            if (!ListUtil.isNull(contractDtos)) {
                 payFeeMonthOwnerDto.setObjFpcId(contractDtos.get(0).getContractType());
             }
         }
@@ -132,20 +132,20 @@
      * @param payFeeMonthOwnerDto
      */
     @Override
-    public void waitDispersedFeeDetail(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto) {
+    public void waitDispersedFeeDetail(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
         PayFeeDetailMonthDto payFeeDetailMonthDto = new PayFeeDetailMonthDto();
         payFeeDetailMonthDto.setCommunityId(feeDto.getCommunityId());
         payFeeDetailMonthDto.setFeeId(feeDto.getFeeId());
         List<FeeDetailDto> feeDetailDtos = payFeeDetailMonthInnerServiceSMOImpl.getWaitDispersedFeeDetail(payFeeDetailMonthDto);
 
-        if (feeDetailDtos == null || feeDetailDtos.size() < 1) {
+        if (ListUtil.isNull(feeDetailDtos)) {
             return;
         }
 
 
         for (FeeDetailDto feeDetailDto : feeDetailDtos) {
             // todo 閫愭潯鍘荤鏁�
-            doDispersedFeeDetail(feeDetailDto, feeDto, payFeeMonthOwnerDto);
+            doDispersedFeeDetail(feeDetailDto, feeDto, payFeeMonthOwnerDto, feePrice);
         }
     }
 
@@ -212,17 +212,14 @@
             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 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
+            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);
+
             // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
             toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
 
@@ -244,16 +241,16 @@
         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), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
-            }
-            // todo 璁$畻 搴旀敹
-            curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
-        } else { // todo 濡傛灉鏄暣鏈� 閭e氨鎸夋湀璁$畻锛屼互鍏� 杞崲鎴愬ぉ鍐� 涔樹互澶╂暟鍚庣殑璇樊
-            curMonthReceivableAmount = receivableAmount;
+//        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);
@@ -261,19 +258,22 @@
     }
 
     private void doDispersedFeeDetail(FeeDetailDto feeDetailDto, FeeDto feeDto, PayFeeMonthOwnerDto
-            payFeeMonthOwnerDto) {
+            payFeeMonthOwnerDto, Double feePrice) {
         List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
 
         // todo 鍘婚櫎 寮�濮嬫椂闂村拰 缁撴潫鏃堕棿鐨� 灏忔椂 鍒嗛挓 绉�
         Date startTime = DateUtil.timeToDate(feeDetailDto.getStartTime());
-        Date endTime = DateUtil.timeToDate(feeDetailDto.getEndTime());
+        Date endTime = feeDetailDto.getEndTime();
+        endTime = DateUtil.getNextSecDateTime(endTime);
+        endTime = DateUtil.timeToDate(endTime);
 
         int day = DateUtil.daysBetween(endTime, startTime);
         if (day < 1) {
             day = 1;
         }
+        double month = DateUtil.dayCompare(feeDetailDto.getStartTime(), feeDetailDto.getEndTime(), true);
 
-        BigDecimal receivableAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivableAmount()));
+        BigDecimal receivableAmount = new BigDecimal(feePrice + "");
         BigDecimal receivedAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivedAmount()));
 
         BigDecimal dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
@@ -291,13 +291,22 @@
         int curDay = 0;
         BigDecimal curMonthReceivableAmount = null;
         BigDecimal curMonthReceivedAmount = null;
+        int curMonthMaxDay = 30;
         while (firstMonthDayTime.getTime() < endTime.getTime()) {
             curDay = DateUtil.daysBetween(firstMonthDayTime, startMonthDayTime);
+            // todo 璁$畻褰撴湀澶╂暟
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(startMonthDayTime);
+            curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+            if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+                dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+                dayReceivedAmount = receivedAmount.divide(new BigDecimal(month + ""), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+                dayReceivedAmount = dayReceivedAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+            }
             // todo 璁$畻 搴旀敹
             curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
             // todo 璁$畻 瀹炴敹
             curMonthReceivedAmount = new BigDecimal(curDay).multiply(dayReceivedAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
-
             // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
             toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, endTime);
 
@@ -314,6 +323,15 @@
         }
 
         curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
+        // todo 璁$畻褰撴湀澶╂暟
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(startMonthDayTime);
+        curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+            dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+            dayReceivedAmount = receivedAmount.divide(new BigDecimal(month + ""), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+            dayReceivedAmount = dayReceivedAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+        }
         // todo 璁$畻 搴旀敹
         curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
         // todo 璁$畻 瀹炴敹

--
Gitblit v1.8.0