From 05ea8364f36fc6b385e97f4aecc9deb7d304f0b0 Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 09 一月 2025 09:08:47 +0800
Subject: [PATCH] 客户资料 巡检任务业务

---
 server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java |   71 +++++++++++++++++++++++++----------
 1 files changed, 51 insertions(+), 20 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 1164e74..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,16 +39,20 @@
      *                                浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
      *                                浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
      *                                浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
-     * @param fromDate
-     * @param toDate
+     * @param toDateOrigin
      * @return
      */
-    public static DateCompare dayCompare(Date fromDate,Date toDate,Date freeStart,Date freeEnd){
+    public static DateCompare dayCompare(Date fromDateOrigin,Date toDateOrigin,Date freeStart,Date freeEnd){
         //寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
-        fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,toDate,freeStart,freeEnd));
-        if(toDate.getTime()<= fromDate.getTime()){
+        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();
         }
+        Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
+//        toDate = DateUtil.addDaysToDate(toDate,1);//鍖呭惈鎴鏃ユ湡
         Calendar  from  =  Calendar.getInstance();
         from.setTime(fromDate);
         Calendar  to  =  Calendar.getInstance();
@@ -62,31 +66,45 @@
 
         int year = toYear  -  fromYear;
         int month = toYear *  12  + toMonth  -  (fromYear  *  12  +  fromMonth);
-        int day = (int) ((to.getTimeInMillis()  -  from.getTimeInMillis())  /  (24  *  3600  *  1000));
+        int day = DateUtil.daysBetweenDates( toDate,fromDate);
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate) ;
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
-            yearFloat = yearFloat.add(new BigDecimal(yearDays).divide(new BigDecimal(365), 2,RoundingMode.FLOOR));
+            if(yearDays <0){
+                year = year-1;
+                yearFloat = new BigDecimal(year) ;
+                yearDays =DateUtil.daysBetweenDates(toDate,DateUtil.addYearToDate(fromDate,year));
+            }
+            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) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
-            monthFloat = monthFloat.add(new BigDecimal(monthDays*12).divide(new BigDecimal(365), 2,RoundingMode.FLOOR));
+            if(monthDays <0){
+                month = month-1;
+                monthFloat = new BigDecimal(month) ;
+                monthDays =DateUtil.daysBetweenDates(toDate,DateUtil.addMonthToDate(fromDate,month));
+            }
+            monthFloat = monthFloat.add(new BigDecimal(1.0*monthDays*12).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
         return DateCompare.builder().day(day).month(month).year(year).yearFloat(yearFloat).monthFloat(monthFloat).yearDays(yearDays).monthDays(monthDays).build();
     }
 
     public static void main(String[] args) {
-        DateCompare dateCompare =   DateCompare.dayCompare(DateUtil.getDateFromString("2024-12-01 00:00:00"),DateUtil.getDateByString("2025-03-01 00:00:00")
-                ,DateUtil.getDateFromString("2024-12-01 00:00:00"),DateUtil.getDateFromString("2024-12-03 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);
         System.out.println(dateCompare.monthFloat);
-        System.out.println(dateCompare.yearFloat);
-        System.out.println(dateCompare.yearFloat);
+        System.out.println("=========year=============");
+        System.out.println(dateCompare.yearDays);
+        System.out.println(dateCompare.year);
         System.out.println(dateCompare.yearFloat);
     }
-    public static DateCompare monthYearCompare(Date fromDate,Date toDate ){
+    public static DateCompare monthYearCompare(Date fromDate,Date toDateOrigin ){
         //寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
+        Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
         Calendar  from  =  Calendar.getInstance();
         from.setTime(fromDate);
         Calendar  to  =  Calendar.getInstance();
@@ -104,22 +122,35 @@
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate) ;
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
-            yearFloat = yearFloat.add(new BigDecimal(yearDays).divide(new BigDecimal(365), 2,RoundingMode.FLOOR));
+            if(yearDays <0){
+                year = year-1;
+                yearFloat = new BigDecimal(year) ;
+                yearDays =DateUtil.daysBetweenDates(toDate,DateUtil.addYearToDate(fromDate,year));
+            }
+            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) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
-            monthFloat = monthFloat.add(new BigDecimal(monthDays*12).divide(new BigDecimal(365), 2,RoundingMode.FLOOR));
+            if(monthDays <0){
+                month = month-1;
+                monthFloat = new BigDecimal(month) ;
+                monthDays =DateUtil.daysBetweenDates(toDate,DateUtil.addMonthToDate(fromDate,month));
+            }
+            monthFloat = monthFloat.add(new BigDecimal(1.0*monthDays*12).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
         return DateCompare.builder().day(day).month(month).year(year).yearFloat(yearFloat).monthFloat(monthFloat).yearDays(yearDays).monthDays(monthDays).build();
     }
 
     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;
 
-        int days =DateUtil.daysBetweenDates(laterEnd,earlierStart );
+        int days =DateUtil.daysBetweenDates(laterEnd,earlierStart);
         return days>0?days:0 ;
     }
 

--
Gitblit v1.9.3