From b56c0758e2158261d973e90b581d1ed78c5dfc79 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期三, 11 九月 2024 15:38:54 +0800
Subject: [PATCH] 告警实时socket和历史分库分表历史查询

---
 src/main/java/com/whyc/util/DateUtil.java |  620 ++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 507 insertions(+), 113 deletions(-)

diff --git a/src/main/java/com/whyc/util/DateUtil.java b/src/main/java/com/whyc/util/DateUtil.java
index 35f2df0..aef26cb 100644
--- a/src/main/java/com/whyc/util/DateUtil.java
+++ b/src/main/java/com/whyc/util/DateUtil.java
@@ -5,135 +5,289 @@
 import java.util.*;
 
 /**
- * 鏃ユ湡澶勭悊宸ュ叿绫�
- * @Author xuzhongpei
- * @Date 2023-11-16
- * */
+ * @Description : 鏃堕棿宸ュ叿绫�
+ * @date 2020/10/15
+ **/
 public class DateUtil {
 
-    /**ThreadLocal鍓湰褰㈠紡閬垮厤澶氱嚎绋嬩腑 鏁版嵁瀹夊叏闂*/
-    private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));
-    private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS2 = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss"));
-    private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS_UNION = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMddHHmmss"));
-    private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd"));
-    private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_UNION = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMdd"));
+    public static SimpleDateFormat YYYY_MM_DD_HH_MM_SS=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    public static SimpleDateFormat YYYY_MM_DD_HH_MM_SS_UNION=new SimpleDateFormat("yyyyMMddHHmmss");
+	public static SimpleDateFormat YYYY_MM_DD=new SimpleDateFormat("yyyy-MM-dd");
+	public static SimpleDateFormat YYYY_MM=new SimpleDateFormat("yyyy-MM");
+	public static SimpleDateFormat YYYY_MM_TABLE=new SimpleDateFormat("yyyy_MM");
 
-    public static String format_YYYY_MM_DD_HH_MM_SS(Date date){
-        return YYYY_MM_DD_HH_MM_SS.get().format(date);
+	public static int compare(String date1Str,String date2Str) throws ParseException {
+        Date date1 = YYYY_MM_DD_HH_MM_SS.parse(date1Str);
+        Date date2 = YYYY_MM_DD_HH_MM_SS.parse(date2Str);
+        if(date1.compareTo(date2)>0){
+            return 1;
+        }else if(date1.compareTo(date2) == 0){
+            return 0;
+        }else{
+            return -1;
+        }
     }
 
-    public static String format_YYYY_MM_DD_HH_MM_SS2(Date date){
-        return YYYY_MM_DD_HH_MM_SS2.get().format(date);
+    public static Date getMaxTime(String date1Str,String date2Str,String date3Str) {
+	    try {
+            Date date1 = YYYY_MM_DD_HH_MM_SS.parse(date1Str);
+            Date date2 = YYYY_MM_DD_HH_MM_SS.parse(date2Str);
+            Date date3 = YYYY_MM_DD_HH_MM_SS.parse(date3Str);
+
+            Date maxTime = date1;
+            if (maxTime.compareTo(date2) < 0) {
+                maxTime = date2;
+            }
+            if (maxTime.compareTo(date3) < 0) {
+                maxTime = date3;
+            }
+            return maxTime;
+        }catch (ParseException e){
+	        return null;
+        }
     }
 
-    public static String format_YYYY_MM_DD_HH_MM_SS_UNION(Date date){
-        return YYYY_MM_DD_HH_MM_SS_UNION.get().format(date);
+    public static List<List<Date>> getMonthTime(Date startTimeDate,Date endTimeDate) throws ParseException {
+        List<List<Date>> timeList = new LinkedList<>();
+
+        Calendar startTimeCalendar = Calendar.getInstance();
+        startTimeCalendar.setTime(startTimeDate);
+
+        Calendar endTimeCalendar = Calendar.getInstance();
+        endTimeCalendar.setTime(endTimeDate);
+
+        //鎸夋湀浠藉垏鍒嗘椂娈�
+        int startY = startTimeCalendar.get(Calendar.YEAR);
+        int startM = startTimeCalendar.get(Calendar.MONTH)+1;
+
+        int endY = endTimeCalendar.get(Calendar.YEAR);
+        int endM = endTimeCalendar.get(Calendar.MONTH)+1;
+
+       int Y = endY - startY;
+       int len = Y*12+(endM-startM)+1;
+
+        Calendar dateTemp = Calendar.getInstance();
+        for (int i = 0; i < len; i++) {
+            List<Date> SEList = new LinkedList<>();
+            //dateTemp.setTime(YYYY_MM_DD_HH_MM_SS.parse(startY+"-"+startM+"-01 00:00:00"));
+            dateTemp.setTime(ThreadLocalUtil.parse(startY+"-"+startM+"-01 00:00:00",1));
+            Date recordTime,recordTime1;
+
+            dateTemp.add(Calendar.MONTH,i);
+            recordTime = dateTemp.getTime();
+
+            int lastDay = dateTemp.getActualMaximum(Calendar.DAY_OF_MONTH);
+            dateTemp.set(Calendar.DAY_OF_MONTH,lastDay);
+            dateTemp.set(Calendar.HOUR_OF_DAY,23);
+            dateTemp.set(Calendar.MINUTE,59);
+            dateTemp.set(Calendar.SECOND,59);
+            recordTime1 = dateTemp.getTime();
+
+            if(i==0){
+                recordTime = startTimeDate;
+            }
+            if(i==len-1){
+                recordTime1 = endTimeDate;
+            }
+            SEList.add(recordTime);
+            SEList.add(recordTime1);
+
+            timeList.add(SEList);
+        }
+        return timeList;
     }
 
-    public static String YYYY_MM_DD(Date date){
-        return YYYY_MM_DD.get().format(date);
+    /**
+     * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夊勾鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢�
+     * <p>
+     * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収骞村垏鍓叉垚涓嶅悓鏃堕棿娈�
+     *
+     * @param startTime 2021-01-01 10:00:00
+     * @param endTime   2023-05-01 10:10:10
+     * @return 绀轰緥[2021, 2022, 2023]
+     * 浣跨敤鏂规硶:
+     * 鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂�
+     * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂�
+     * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃
+     */
+    public static Map<String,List<Date>> getYearList(Date startTime,Date endTime) throws ParseException {
+        Map<String,List<Date>> result = new LinkedHashMap<>();
+        Calendar startTimeC = Calendar.getInstance();
+        startTimeC.setTime(startTime);
+        int startYear = startTimeC.get(Calendar.YEAR);
+
+        Calendar endTimeC = Calendar.getInstance();
+        endTimeC.setTime(endTime);
+        int endYear = endTimeC.get(Calendar.YEAR);
+        int yearSize = endYear - startYear + 1;
+        for (int i = startYear; i <= endYear; i++) {
+            List<Date> dateList = new LinkedList<>();
+            if(yearSize == 1){ //璧锋鏃堕棿娌℃湁璺ㄥ勾
+                dateList.add(startTime);
+                dateList.add(endTime);
+            }
+            else if(i==startYear){ //绗竴骞�
+                dateList.add(startTime);
+
+                Calendar instance = Calendar.getInstance();
+                instance.set(Calendar.YEAR,i);
+                instance.set(Calendar.MONTH,instance.getActualMaximum(Calendar.MONTH));
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMaximum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+            }
+            else if(i== endYear){ //灏惧勾
+                Calendar instance = Calendar.getInstance();
+                instance.set(Calendar.YEAR,i);
+                instance.set(Calendar.MONTH,instance.getActualMinimum(Calendar.MONTH));
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                dateList.add(endTime);
+            }else{
+                Calendar instance = Calendar.getInstance();
+                instance.set(Calendar.YEAR,i);
+                instance.set(Calendar.MONTH,instance.getActualMinimum(Calendar.MONTH));
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                Calendar instance2 = Calendar.getInstance();
+                instance2.set(Calendar.YEAR,i);
+                instance2.set(Calendar.MONTH,instance2.getActualMaximum(Calendar.MONTH));
+                instance2.set(Calendar.DAY_OF_MONTH,instance2.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance2.set(Calendar.HOUR_OF_DAY,instance2.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance2.set(Calendar.MINUTE,instance2.getActualMaximum(Calendar.MINUTE));
+                instance2.set(Calendar.SECOND,instance2.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance2.getTime());
+
+            }
+            result.put(String.valueOf(i),dateList);
+        }
+        return result;
     }
 
-    public static String format_YYYY_MM_DD_UNION(Date date){
-        return YYYY_MM_DD_UNION.get().format(date);
+    /**
+     *
+     * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夋湀鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢�
+     *
+     * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収鏈堝垏鍓叉垚涓嶅悓鏃堕棿娈�
+     * @param startTimeStr 2022-11-01 10:00:00
+     * @param endTimeStr 2023-05-01 10:10:10
+     * @return  绀轰緥[2022_12,2023_1,2023_2,2023_3,2023_4,2023_5] TODO 杩欎釜杩斿洖瀵硅薄鏍煎紡 闇�瑕佹牴鎹笟鍔¢渶瑕佽繘琛岃皟鏁�
+     * 浣跨敤鏂规硶:
+     *   鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂�
+     *   鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂�
+     *   杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃
+     *
+     */
+    public static List<String> getMonthList(String startTimeStr,String endTimeStr) throws ParseException {
+        Calendar startTimeCalendar = Calendar.getInstance();
+        //Date startTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(startTimeStr);
+        Date startTime = ThreadLocalUtil.parse(startTimeStr,1);
+        startTimeCalendar.setTime(startTime);
+
+        Calendar endTimeCalendar = Calendar.getInstance();
+        //Date endTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(endTimeStr);
+        Date endTime = ThreadLocalUtil.parse(endTimeStr,1);
+        endTimeCalendar.setTime(endTime);
+
+        /*String[] startTimeSplit = startTimeStr.split("-");
+        int startYear = Integer.parseInt(startTimeSplit[0]);
+        int startMonth = Integer.parseInt(startTimeSplit[1]);
+
+        String[] endTimeSplit = endTimeStr.split("-");
+        int endYear = Integer.parseInt(endTimeSplit[0]);
+        int endMonth = Integer.parseInt(endTimeSplit[1]);*/
+
+        List<String> yearMonthList = new LinkedList<>();
+        while (!startTimeCalendar.after(endTimeCalendar)){ //璧峰鏃堕棿澶т簬缁堟鏃堕棿鍒欏仠姝�
+            yearMonthList.add(startTimeCalendar.get(Calendar.YEAR)+"_"+(startTimeCalendar.get(Calendar.MONTH)+1));
+            startTimeCalendar.add(Calendar.MONTH,1);
+        }
+        return yearMonthList;
     }
 
+    /**
+     *  鏌ヨ浣跨敤鏃�,闇�瑕佸鐞� 榛樿琛ㄦ煡璇㈢殑闂
+     *  绀轰緥:
+     *  <p>
+     * {2020=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]}
+     * {2021=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021]}
+     * {2022=[Sat Jan 01 00:00:00 CST 2022, Tue Nov 29 09:12:22 CST 2022]}
+     * 鎴�
+     * {2020=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]}
+     * {2021=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021]}
+     * {2022=[Sat Jan 01 00:00:00 CST 2022, Thu Dec 29 09:12:22 CST 2022]}
+     * {default=[Wed Dec 14 15:27:13 CST 2022, Thu Dec 29 09:12:22 CST 2022]}
+     * </p>
+     * key涓烘暟瀛�,琛ㄧず骞村害鍒嗚〃;default涓洪粯璁よ〃
+     * @param startTimeDate 璧峰鏃堕棿
+     * @param endTimeDate 缁堟鏃堕棿
+     * @return 闇�瑕佹煡璇㈢殑琛ㄥ強鏌ヨ鏃堕棿
+     * @throws ParseException
+     */
+    public static Map<String,List<Date>> getQueryTimeForSubTables(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar instance = Calendar.getInstance();
+        if(endTimeDate.compareTo(instance.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = instance.getTime();
+        }
+        int nowYear = instance.get(Calendar.YEAR);
+        instance.add(Calendar.MONTH,-6);
+        int beforeYear = instance.get(Calendar.YEAR);
+        Date beforeYearTime = instance.getTime();
+        instance.setTime(endTimeDate);
+        int endTimeYear = instance.get(Calendar.YEAR);
 
-    //鑾峰彇鎸囧畾骞存湀鐨勫ぉ鏁�
-    public static int getDaysByYearMonth(int year, int month) {
+        Calendar startTime = Calendar.getInstance();
+        startTime.setTime(startTimeDate);
 
-        Calendar a = Calendar.getInstance();
-        a.set(Calendar.YEAR, year);
-        a.set(Calendar.MONTH, month - 1);
-        a.set(Calendar.DATE, 1);
-        a.roll(Calendar.DATE, -1);
-        int maxDate = a.get(Calendar.DATE);
-        return maxDate;
+        Map<String,List<Date>> yearTimeMap = DateUtil.getYearList(startTimeDate, endTimeDate);;
+        if(nowYear == beforeYear){ //榛樿琛ㄥ彧鏈夋湰骞村害鐨�(瓒呰繃浜嗗崐骞�,榛樿琛ㄨ褰曞叏閮ㄥ彧鏈夋湰骞村害鐨�,鍚屾椂浼氱敓鎴愪簡褰撳墠骞村害鐨勫垎琛�)
+            //濡傛灉鏌ヨ鏃堕棿鑼冨洿鍖呭惈褰撳墠骞村害,鍒欓渶瑕佹煡璇㈤粯璁よ〃
+            if(startTime.get(Calendar.YEAR) >= nowYear && endTimeYear <= nowYear){
+                //寮�濮嬫椂闂磋缃勾搴﹀垵濮嬫椂闂�
+                Calendar defaultTableStartTime = Calendar.getInstance();
+                defaultTableStartTime.set(Calendar.YEAR,nowYear);
+                defaultTableStartTime.set(Calendar.MONTH,defaultTableStartTime.getActualMinimum(Calendar.MONTH));
+                defaultTableStartTime.set(Calendar.DAY_OF_MONTH,defaultTableStartTime.getActualMinimum(Calendar.DAY_OF_MONTH));
+                defaultTableStartTime.set(Calendar.HOUR_OF_DAY,defaultTableStartTime.getActualMinimum(Calendar.HOUR_OF_DAY));
+                defaultTableStartTime.set(Calendar.MINUTE,defaultTableStartTime.getActualMinimum(Calendar.MINUTE));
+                defaultTableStartTime.set(Calendar.SECOND,defaultTableStartTime.getActualMinimum(Calendar.SECOND));
+                //缁堟鏃堕棿璁剧疆涓哄綋鍓嶆椂闂�
+                List<Date> defaultDateList = new LinkedList<>();
+                defaultDateList.add(defaultTableStartTime.getTime());
+                defaultDateList.add(endTimeDate);
+
+                yearTimeMap.put("default",defaultDateList);
+
+            }
+
+        }else{ //鏌ヨ鏃堕棿鑼冨洿涓嶅湪褰撳墠骞村害
+            //榛樿琛ㄤ腑瀛樺湪涓婁竴骞村害鐨勮褰�.涓婁竴骞寸殑鏈�鏃╂椂闂翠负beforeYearTime-涓婁竴骞寸殑骞存湯
+            //鍒ゆ柇鏌ヨ鏃堕棿鑼冨洿鏄惁鍖呭惈榛樿琛ㄤ腑涓婁竴骞村害鐨勬椂闂�
+            if(instance.getTime().compareTo(beforeYearTime)>0){ //鏌ヨ鏃堕棿澶т簬榛樿琛ㄤ腑涓婁竴骞村害鏃堕棿,璇存槑鏌ヨ璁板綍涔熷寘鍚湪榛樿琛ㄤ腑
+                //璧峰鏃堕棿
+                //缁堟鏃堕棿
+                List<Date> defaultDateList = new LinkedList<>();
+                defaultDateList.add(beforeYearTime);
+                defaultDateList.add(endTimeDate);
+
+                yearTimeMap.put("default",defaultDateList);
+            }
+        }
+        return yearTimeMap;
     }
 
-    //鑾峰彇鏌愬勾鏌愭湀鐨勮捣濮嬪拰缁撴潫鏃堕棿
-    //闇�瑕佹敞鎰忕殑鏄細鏈堜唤鏄粠0寮�濮嬬殑锛屾瘮濡傝濡傛灉杈撳叆5鐨勮瘽锛屽疄闄呬笂鏄剧ず鐨勬槸4鏈堜唤鐨勬渶鍚庝竴澶╋紝鍗冧竾涓嶈鎼為敊浜嗗摝
-    public static String getLastDayOfMonth(int year, int month) {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, year);
-        cal.set(Calendar.MONTH, month);
-        cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
-        return  new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime())+"23:59:59";
-    }
-
-    public static String getFirstDayOfMonth(int year, int month) {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, year);
-        cal.set(Calendar.MONTH, month);
-        cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
-        return   new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime())+"00:00:00";
-    }
-    //鑾峰彇褰撳墠鏃堕棿鐨勫勾浠�
-    public static int getNowYear(){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int year = ca.get(Calendar.YEAR);
-        //System.out.println(month);
-        return year;
-    }
-    //鑾峰彇褰撳墠鏃堕棿鐨勬湀浠�
-    public static int getNowMonth(){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int month = ca.get(Calendar.MONTH) + 1;
-        //System.out.println(month);
-        return month;
-    }
-    //鑾峰彇褰撳墠鏃堕棿鐨勬棩鏈�
-    public static int getNowDay(){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int day = ca.get(Calendar.DAY_OF_MONTH);
-        //System.out.println(month);
-        return day;
-    }
-    //褰撳墠鏃堕棿鍔犱笂x灏忔椂
-    public static String getDateAdd(int minute){
-        Date date = new Date();
-        Calendar c = Calendar.getInstance();
-        c.setTime(date);
-        c.add(Calendar.MINUTE, minute);
-        return new   SimpleDateFormat( "yyyy-MM-dd HH:mm:ss").format(c.getTime());
-    }
-
-    //鑾峰彇鏃堕棿鐨勫勾浠�
-    public static int getDateYear(Date date){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int year = ca.get(Calendar.YEAR);
-        //System.out.println(month);
-        return year;
-    }
-    //鑾峰彇鏃堕棿鐨勬湀浠�
-    public static int getDateMonth(Date date){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int month = ca.get(Calendar.MONTH) + 1;
-        //System.out.println(month);
-        return month;
-    }
-    //鑾峰彇鏃堕棿鐨勬棩鏈�
-    public static int getDateDay(Date date){
-        Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚�
-        ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂�
-        int day = ca.get(Calendar.DAY_OF_MONTH);
-        //System.out.println(month);
-        return day;
-    }
-    //褰撳墠鏃堕棿鍔犱笂x灏忔椂
-    public static Date getDateAdd(Date date,int minute){
-        Calendar c = Calendar.getInstance();
-        c.setTime(date);
-        c.add(Calendar.MINUTE, minute);
-        return c.getTime();
-    }
-
-    /*==========鏃堕棿鍒囧壊,鎸夊勾==========*/
     /**
      * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夊勾鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� 鏃堕棿鍊掑簭
      * <p>
@@ -147,7 +301,7 @@
      * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂�
      * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃
      */
-    public static Map<String, List<Date>> getYearListDesc(Date startTime, Date endTime) throws ParseException {
+    public static Map<String,List<Date>> getYearListDesc(Date startTime,Date endTime) throws ParseException {
         Map<String,List<Date>> result = new LinkedHashMap<>();
         Calendar startTimeC = Calendar.getInstance();
         startTimeC.setTime(startTime);
@@ -212,6 +366,94 @@
     }
 
     /**
+     * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夋湀鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� 鏃堕棿鍊掑簭
+     * <p>
+     * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収骞村垏鍓叉垚涓嶅悓鏃堕棿娈�
+     *
+     * @param startTime 2023-01-01 10:00:00
+     * @param endTime   2023-05-01 10:10:10
+     * @return 绀轰緥
+     * {
+     *  2023_04=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]
+     *  2023_03=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021],
+     *  2023_02=[Sat Jan 01 00:00:00 CST 2022, Sat Dec 31 23:59:59 CST 2022],
+     *  2023_01=[Sun Jan 01 00:00:00 CST 2023, Tue Jan 24 16:45:22 CST 2023],
+     *
+     * }
+     * 浣跨敤鏂规硶:
+     * 鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂�
+     * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂�
+     * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃
+     */
+    public static Map<String,List<Date>> getMonthListDesc(Date startTime,Date endTime) throws ParseException {
+        Map<String,List<Date>> result = new LinkedHashMap<>();
+        Calendar startTimeC = Calendar.getInstance();
+        startTimeC.setTime(startTime);
+        int startYear = startTimeC.get(Calendar.YEAR);
+        int startMonth = startTimeC.get(Calendar.MONTH);
+
+        Calendar endTimeC = Calendar.getInstance();
+        endTimeC.setTime(endTime);
+        int endYear = endTimeC.get(Calendar.YEAR);
+        int endMonth = endTimeC.get(Calendar.MONTH);
+
+        //鐩稿樊鐨勬湀浠�
+        int monthCount = endYear*12+endMonth-(startYear*12+startMonth);
+
+        for (int i = monthCount; i >= 0; i--) {
+            List<Date> dateList = new LinkedList<>();
+            if(monthCount == 0 ){ //璧锋鏃堕棿娌℃湁璺ㄦ湀
+                dateList.add(startTime);
+                dateList.add(endTime);
+            }
+            else if(i==0){ //绗竴鏈�
+                dateList.add(startTime);
+
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(startTime);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMaximum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+            }
+            else if(i== monthCount){ //灏炬湀
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(endTime);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                dateList.add(endTime);
+            }else{
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(startTime);
+                instance.add(Calendar.MONTH,i);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                Calendar instance2 = Calendar.getInstance();
+                instance2.setTime(startTime);
+                instance2.add(Calendar.MONTH,i);
+                instance2.set(Calendar.DAY_OF_MONTH,instance2.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance2.set(Calendar.HOUR_OF_DAY,instance2.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance2.set(Calendar.MINUTE,instance2.getActualMaximum(Calendar.MINUTE));
+                instance2.set(Calendar.SECOND,instance2.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance2.getTime());
+
+            }
+            //result.put(DateUtil.YYYY_MM_TABLE.format(dateList.get(0)),dateList);
+            result.put(ThreadLocalUtil.format(dateList.get(0),2),dateList);
+        }
+        return result;
+    }
+
+    /**
      *  鏌ヨ浣跨敤鏃�,闇�瑕佸鐞� 榛樿琛ㄦ煡璇㈢殑闂 鍊掑簭
      *  绀轰緥:
      *  <p>
@@ -243,6 +485,42 @@
         LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getYearListDesc(startTimeDate, endTimeDate);
         Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
         boolean existDefaultYear = false;
+        /*if(nowYear == beforeYear){ //榛樿琛ㄥ彧鏈夋湰骞村害鐨�(瓒呰繃浜嗗崐骞�,榛樿琛ㄨ褰曞叏閮ㄥ彧鏈夋湰骞村害鐨�,鍚屾椂浼氱敓鎴愪簡褰撳墠骞村害鐨勫垎琛�)
+            //濡傛灉鏌ヨ鏃堕棿鑼冨洿鍖呭惈褰撳墠骞村害,鍒欓渶瑕佹煡璇㈤粯璁よ〃
+            if(startTime.get(Calendar.YEAR) >= nowYear && endTimeYear <= nowYear){
+                //寮�濮嬫椂闂磋缃勾搴﹀垵濮嬫椂闂�
+                Calendar defaultTableStartTime = Calendar.getInstance();
+                defaultTableStartTime.set(Calendar.YEAR,nowYear);
+                defaultTableStartTime.set(Calendar.MONTH,defaultTableStartTime.getActualMinimum(Calendar.MONTH));
+                defaultTableStartTime.set(Calendar.DAY_OF_MONTH,defaultTableStartTime.getActualMinimum(Calendar.DAY_OF_MONTH));
+                defaultTableStartTime.set(Calendar.HOUR_OF_DAY,defaultTableStartTime.getActualMinimum(Calendar.HOUR_OF_DAY));
+                defaultTableStartTime.set(Calendar.MINUTE,defaultTableStartTime.getActualMinimum(Calendar.MINUTE));
+                defaultTableStartTime.set(Calendar.SECOND,defaultTableStartTime.getActualMinimum(Calendar.SECOND));
+                //缁堟鏃堕棿璁剧疆涓哄綋鍓嶆椂闂�
+                List<Date> defaultDateList = new LinkedList<>();
+                //defaultDateList.add(defaultTableStartTime.getTime());
+                defaultDateList.add(startTimeDate);
+                defaultDateList.add(endTimeDate);
+
+                yearTimeMap.put("default",defaultDateList);
+                existDefaultYear = true;
+
+            }
+
+        }else{ //鏌ヨ鏃堕棿鑼冨洿涓嶅湪褰撳墠骞村害
+            //榛樿琛ㄤ腑瀛樺湪涓婁竴骞村害鐨勮褰�.涓婁竴骞寸殑鏈�鏃╂椂闂翠负beforeYearTime-涓婁竴骞寸殑骞存湯
+            //鍒ゆ柇鏌ヨ鏃堕棿鑼冨洿鏄惁鍖呭惈榛樿琛ㄤ腑涓婁竴骞村害鐨勬椂闂�
+            if(instance.getTime().compareTo(beforeYearTime)>0){ //鏌ヨ鏃堕棿澶т簬榛樿琛ㄤ腑涓婁竴骞村害鏃堕棿,璇存槑鏌ヨ璁板綍涔熷寘鍚湪榛樿琛ㄤ腑
+                //璧峰鏃堕棿
+                //缁堟鏃堕棿
+                List<Date> defaultDateList = new LinkedList<>();
+                defaultDateList.add(startTimeDate);
+                defaultDateList.add(endTimeDate);
+
+                yearTimeMap.put("default",defaultDateList);
+                existDefaultYear = true;
+            }
+        }*/
         if(startTimeDate.before(now.getTime()) || endTimeDate.after(timeBefore7Month.getTime())){
             List<Date> defaultDateList = new LinkedList<>();
             defaultDateList.add(startTimeDate);
@@ -266,5 +544,121 @@
         return yearTimeDescMap;
     }
 
+    /**
+     * 鎸夊勾鍒掑垎
+     * 浼樺寲getQueryTimeForSubTablesDesc,寰呮祴璇�
+     * 鏇存柊default琛ㄦ槸鍚︽煡璇㈢殑閫昏緫,鏀箌|涓�&&
+     *
+     */
+    public static Map<String,List<Date>> getQueryTimeForSubTablesDesc2(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar now = Calendar.getInstance();
+        if(endTimeDate.compareTo(now.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = now.getTime();
+        }
+        Calendar timeBefore7Month = Calendar.getInstance();
+        timeBefore7Month.add(Calendar.MONTH,-7);
+
+        LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getYearListDesc(startTimeDate, endTimeDate);
+        Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
+        boolean existDefaultYear = false;
+        //鏌ヨ鐨勫紑濮嬫椂闂� 灏忎簬鐜板湪
+        //鏌ヨ鐨勭粨鏉熸椂闂� 澶т簬 涓冧釜鏈堝墠
+        if(startTimeDate.before(now.getTime()) && endTimeDate.after(timeBefore7Month.getTime())){
+            List<Date> defaultDateList = new LinkedList<>();
+            defaultDateList.add(startTimeDate);
+            defaultDateList.add(endTimeDate);
+
+            yearTimeMap.put("default",defaultDateList);
+            existDefaultYear = true;
+        }
+        //璋冩暣涓嬮『搴�,灏哾efault璋冩暣鍒伴浣�
+        if(existDefaultYear){
+            List<Date> defaultTimeList = yearTimeMap.get("default");
+            yearTimeDescMap.put("default",defaultTimeList);
+        }
+        Set<String> yearSet = yearTimeMap.keySet();
+        for (String year : yearSet) {
+            if(!year.equals("default")){
+                yearTimeDescMap.put(year,yearTimeMap.get(year));
+            }
+        }
+
+        return yearTimeDescMap;
+    }
+
+    /**
+     * 鎸夋湀鍒掑垎,鏃堕棿鍊掑簭
+     * 鍦ㄥ師鏉ユ寜璧锋鏃堕棿鑾峰彇鏈堜唤鍒掑垎闆嗗悎鐨勫熀纭�涓�,鍔犲叆瀹為檯瀛愯〃閫昏緫,褰撳墠鏈堝唴鐨�,鍦╠efault琛�
+     * */
+    public static Map<String,List<Date>> getQueryTimeForSubTablesByMonthDesc(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar now = Calendar.getInstance();
+        if(endTimeDate.compareTo(now.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = now.getTime();
+        }
+        LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getMonthListDesc(startTimeDate, endTimeDate);
+        Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
+        boolean existDefaultYear = false;
+        //鏌ヨ鐨勭粨鏉熸椂闂� 鍦ㄥ綋鏈�,鍒欐湁default琛�
+        //鍚屾椂,鎶瑰幓鏈堜唤闆嗗悎閲岀殑褰撴湀
+        //if(DateUtil.YYYY_MM_TABLE.format(endTimeDate).equals(DateUtil.YYYY_MM_TABLE.format(now.getTime()))){
+        if(ThreadLocalUtil.format(endTimeDate,2).equals(ThreadLocalUtil.format(now.getTime(),2))){
+            List<Date> defaultDateList = new LinkedList<>();
+            defaultDateList.add(startTimeDate);
+            defaultDateList.add(endTimeDate);
+
+            yearTimeMap.put("default",defaultDateList);
+            existDefaultYear = true;
+
+            //yearTimeMap.remove(DateUtil.YYYY_MM_TABLE.format(endTimeDate));
+            yearTimeMap.remove(ThreadLocalUtil.format(endTimeDate,2));
+        }
+        //璋冩暣涓嬮『搴�,灏哾efault璋冩暣鍒伴浣�
+        if(existDefaultYear){
+            List<Date> defaultTimeList = yearTimeMap.get("default");
+            yearTimeDescMap.put("default",defaultTimeList);
+        }
+        Set<String> yearSet = yearTimeMap.keySet();
+        for (String year : yearSet) {
+            if(!year.equals("default")){
+                yearTimeDescMap.put(year,yearTimeMap.get(year));
+            }
+        }
+
+        return yearTimeDescMap;
+    }
+
+
+    public static void main(String[] args) throws ParseException {
+        //Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2023-01-22 14:12:22");
+        //Date d2 = YYYY_MM_DD_HH_MM_SS.parse("2023-08-24 16:45:22");
+        //Map<String, List<Date>> monthListDesc = getQueryTimeForSubTablesByMonthDesc(d1, d2);
+        //
+        //Set<Map.Entry<String, List<Date>>> entries = monthListDesc.entrySet();
+        //for (Map.Entry<String, List<Date>> entry : entries) {
+        //    System.out.println(entry);
+        //}
+        //Map<String,String> map = new HashMap<>();
+        //map.put("2022_01","");
+        //map.put("2022_02","");
+        //map.put("2022_10","");
+        //map.put("2022_12","");
+        //map.put("2021_03","");
+        //map.put("2023_01","");
+        //map.put("2023_05","");
+        //map.put("2021_10","");
+        //Set<String> keySet = map.keySet();
+        //List<String> keySetDesc = keySet.stream().sorted(Comparator.comparing(String::hashCode).reversed()).collect(Collectors.toList());
+        String t1 = "2024-01-25 12:22:29";
+        String t2 = "2024-01-25 12:32:24";
+        String t3 = "2024-01-25 12:42:26";
+        Date maxTime = getMaxTime(t1, t2, t3);
+        System.out.println(maxTime.toString());
+
+
+    }
 
 }

--
Gitblit v1.9.1