From 3b672cb508eded355fb158138f73dd2efe1e4b0c Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 03 一月 2025 15:31:04 +0800
Subject: [PATCH] 客户资料 巡检任务业务

---
 server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
index 38c1273..df82f83 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
@@ -39,12 +39,15 @@
      *                                浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
      *                                浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
      *                                浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
-     * @param fromDate
+     * @param toDateOrigin
      * @return
      */
-    public static DateCompare dayCompare(Date fromDate,Date toDateOrigin,Date freeStart,Date freeEnd){
+    public static DateCompare dayCompare(Date fromDateOrigin,Date toDateOrigin,Date freeStart,Date freeEnd){
         //寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
-        fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,DateUtil.addDaysToDate(toDateOrigin,1),freeStart,DateUtil.addDaysToDate(freeEnd,1)));
+        Date fromDate = DateUtil.addDaysToDate(fromDateOrigin,getIntersectingDays(fromDateOrigin,DateUtil.addDaysToDate(toDateOrigin,1),
+                freeStart,
+                Objects.isNull(freeEnd)?null:DateUtil.addDaysToDate(freeEnd,1))
+        );
         if(toDateOrigin.getTime()<  fromDate.getTime()){
             return DateCompare.builder().day(0).month(0).year(0).yearFloat(new BigDecimal(0)).monthFloat(new BigDecimal(0)).build();
         }
@@ -67,7 +70,7 @@
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1);
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
             if(yearDays <0){
                 year = year-1;
@@ -76,7 +79,7 @@
             }
             yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
-        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
             if(monthDays <0){
                 month = month-1;
@@ -89,7 +92,7 @@
     }
 
     public static void main(String[] args) {
-        DateCompare dateCompare =   DateCompare.monthYearCompare(DateUtil.getDateFromString("2025-03-02 00:00:00"),DateUtil.getDateByString("2025-06-02 00:00:00") );
+        DateCompare dateCompare =   DateCompare.monthYearCompare(DateUtil.getDateFromString("2025-06-03 00:00:00"),DateUtil.getDateByString("2025-09-02 00:00:00") );
         System.out.println(dateCompare.day);
         System.out.println(dateCompare.monthDays);
         System.out.println(dateCompare.month);
@@ -119,7 +122,7 @@
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1);
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
             if(yearDays <0){
                 year = year-1;
@@ -128,7 +131,7 @@
             }
             yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
-        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
             if(monthDays <0){
                 month = month-1;
@@ -141,6 +144,9 @@
     }
 
     public static int getIntersectingDays(Date start1, Date end1, Date start2, Date end2) {
+        if(Objects.isNull(start2)||Objects.isNull(end2)){
+            return 0;
+        }
         Date earlierStart = DateUtil.daysBetweenDates(start1,start2)>0? start1 : start2;
         Date laterEnd =  DateUtil.daysBetweenDates(end2,end1)>0 ? end1 : end2;
 

--
Gitblit v1.9.3