From bec1e27df1cce02f0a4b9aa19a2fc50f4551fb64 Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期日, 27 四月 2025 15:00:28 +0800
Subject: [PATCH] 【UPDATE】1.新增或修改日历数据时验证有效日期和失效日期是否重叠 2.增加日历视图页面接口

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java |  151 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 150 insertions(+), 1 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java
index 758a32c..a88f928 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java
@@ -1,5 +1,6 @@
 package com.aps.core.service.impl;
 
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.aps.common.core.utils.DateUtils;
@@ -10,10 +11,13 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.YearMonth;
-import java.util.List;
+import java.time.ZoneId;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
 
 /**
  * 鏃ュ巻绠$悊Service涓氬姟灞傚鐞�
@@ -135,4 +139,149 @@
         }
         return res;
     }
+
+    @Override
+    public JSONArray selectCalendarView(ApsWorkCalendar apsWorkCalendar) {
+        JSONArray res = new JSONArray();
+        String[] parts = new SimpleDateFormat("yyyy-MM-dd").format(apsWorkCalendar.getEffectiveDate()).split("-");
+        int year = Integer.parseInt(parts[0]);
+        int month = Integer.parseInt(parts[1]);
+        List<LocalDate> dates = getCalendarData(year, month);
+        apsWorkCalendar.setEffectiveDate(Date.from(dates.get(0).atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        apsWorkCalendar.setExpiringDate(Date.from(dates.get(dates.size()-1).atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        //鐢熸垚鏃ュ巻鍩虹鏁版嵁
+        LinkedHashMap<String, String> baseCalendar = new LinkedHashMap<>();
+        for (LocalDate date : dates) {
+            String dayOfWeekChinese = getChineseDayOfWeek(date.getDayOfWeek());
+            String dayOfWeekEnglish = date.getDayOfWeek().getDisplayName(java.time.format.TextStyle.FULL, Locale.ENGLISH);
+            System.out.println(date + " - " + dayOfWeekChinese + " (" + dayOfWeekEnglish + ")");
+            baseCalendar.put(date+"", "");
+        }
+        try {
+            List<ApsWorkCalendar> list = apsWorkCalendarMapper.selectApsWorkCalendarList(apsWorkCalendar);
+            for (ApsWorkCalendar apsWorkCalendarTemp : list) {
+                //宸ヤ綔鏃�
+                if("1".equals(apsWorkCalendarTemp.getType())){
+                    //鑾峰彇鏃ュ巻瑙勫垯
+                    org.postgresql.util.PGobject pgObject = (org.postgresql.util.PGobject) apsWorkCalendarTemp.getContent();
+                    JSONArray weekdays = (JSON.parseObject(pgObject.getValue())).getJSONArray("weekdays");
+                    HashMap<String, String> weekdaysMap = new HashMap<>();
+                    for (int i = 0; i < weekdays.size(); i++) {
+                        weekdaysMap.put(weekdays.getJSONObject(i).getString("day"), weekdays.getJSONObject(i).getString("work"));
+                    }
+                    //鏍规嵁effectiveDate鍜宔xpiringDate绠楀嚭鏃ユ湡鑼冨洿鍐呯殑姣忎竴澶�
+                    List<LocalDate> datesTemp = getDatesBetween(apsWorkCalendarTemp.getEffectiveDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), apsWorkCalendarTemp.getExpiringDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
+                    for (LocalDate dateTemp: datesTemp) {
+                        if(baseCalendar.containsKey(dateTemp+"")){
+                            if ("y".equals(weekdaysMap.get(dateTemp.getDayOfWeek().getDisplayName(java.time.format.TextStyle.FULL, Locale.ENGLISH)))) {
+                                baseCalendar.put(dateTemp+"", "宸ヤ綔鏃�");
+                            } else if("n".equals(weekdaysMap.get(dateTemp.getDayOfWeek().getDisplayName(java.time.format.TextStyle.FULL, Locale.ENGLISH)))) {
+                                baseCalendar.put(dateTemp+"", "浼戞伅鏃�");
+                            }
+                        }
+                    }
+                }else if("2".equals(apsWorkCalendarTemp.getType())){
+                    //浼戞伅鏃�
+                    org.postgresql.util.PGobject pgObject = (org.postgresql.util.PGobject) apsWorkCalendarTemp.getContent();
+                    JSONObject holidays = (JSON.parseObject(pgObject.getValue())).getJSONObject("holidays");
+                    List<LocalDate> datesTemp = getDatesBetween(holidays.getObject("startdate", LocalDate.class), holidays.getObject("enddate", LocalDate.class));
+                    for (LocalDate dateTemp: datesTemp) {
+                        if(baseCalendar.containsKey(dateTemp+"")){
+                            baseCalendar.put(dateTemp+"", "鑺傚亣鏃�");
+                        }
+                    }
+                }
+            }
+            for (Map.Entry<String, String> entry : baseCalendar.entrySet()) {
+                JSONObject dayInfo = new JSONObject();
+                dayInfo.put("date", entry.getKey());
+                dayInfo.put("type", entry.getValue());
+                res.add(dayInfo);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return res;
+        }
+        return res;
+    }
+
+    private List<LocalDate> getCalendarData(int year, int month) {
+        // 鑾峰彇4鏈�1鍙风殑褰撳懆鐨勫懆鏃�
+        LocalDate startDate = LocalDate.of(year, month, 1)
+                .with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
+
+        // 鑾峰彇4鏈堢殑鏈�鍚庝竴澶�
+        LocalDate lastDayOfMonth = LocalDate.of(year, month, 1)
+                .with(TemporalAdjusters.lastDayOfMonth());
+
+        // 鑾峰彇4鏈堟渶鍚庝竴澶╃殑褰撳懆鐨勫懆鍏�
+        LocalDate endDate = lastDayOfMonth.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
+
+        // 鑾峰彇鏃ユ湡鑼冨洿鍐呯殑鎵�鏈夋棩鏈�
+        List<LocalDate> dates = getDatesBetween(startDate, endDate);
+
+        // 鎵撳嵃缁撴灉
+        for (LocalDate date : dates) {
+            String dayOfWeekChinese = getChineseDayOfWeek(date.getDayOfWeek());
+            String dayOfWeekEnglish = date.getDayOfWeek().getDisplayName(java.time.format.TextStyle.FULL, Locale.ENGLISH);
+            System.out.println(date + " - " + dayOfWeekChinese + " (" + dayOfWeekEnglish + ")");
+        }
+        return dates;
+    }
+
+    private static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
+        List<LocalDate> dates = new ArrayList<>();
+        for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
+            dates.add(date);
+        }
+        return dates;
+    }
+
+    private static String getChineseDayOfWeek(DayOfWeek dayOfWeek) {
+        switch (dayOfWeek) {
+            case MONDAY:
+                return "鏄熸湡涓�";
+            case TUESDAY:
+                return "鏄熸湡浜�";
+            case WEDNESDAY:
+                return "鏄熸湡涓�";
+            case THURSDAY:
+                return "鏄熸湡鍥�";
+            case FRIDAY:
+                return "鏄熸湡浜�";
+            case SATURDAY:
+                return "鏄熸湡鍏�";
+            case SUNDAY:
+                return "鏄熸湡鏃�";
+            default:
+                return "";
+        }
+    }
+
+    public static void main(String[] args) {
+        // 瀹氫箟鐩爣鏈堜唤鍜屽勾浠�
+        int year = 2025;
+        int month = 4;
+
+        // 鑾峰彇4鏈�1鍙风殑褰撳懆鐨勫懆鏃�
+        LocalDate startDate = LocalDate.of(year, month, 1)
+                .with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
+
+        // 鑾峰彇4鏈堢殑鏈�鍚庝竴澶�
+        LocalDate lastDayOfMonth = LocalDate.of(year, month, 1)
+                .with(TemporalAdjusters.lastDayOfMonth());
+
+        // 鑾峰彇4鏈堟渶鍚庝竴澶╃殑褰撳懆鐨勫懆鍏�
+        LocalDate endDate = lastDayOfMonth.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
+
+        // 鑾峰彇鏃ユ湡鑼冨洿鍐呯殑鎵�鏈夋棩鏈�
+        List<LocalDate> dates = getDatesBetween(startDate, endDate);
+
+        // 鎵撳嵃缁撴灉
+        for (LocalDate date : dates) {
+            String dayOfWeekChinese = getChineseDayOfWeek(date.getDayOfWeek());
+            String dayOfWeekEnglish = date.getDayOfWeek().getDisplayName(java.time.format.TextStyle.FULL, Locale.ENGLISH);
+            System.out.println(date + " - " + dayOfWeekChinese + " (" + dayOfWeekEnglish + ")");
+        }
+    }
 }

--
Gitblit v1.9.3