From 2a64b537e8e3bce9ce030585a3da17d48379c0ad Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期一, 26 五月 2025 15:04:45 +0800
Subject: [PATCH] 修改json类型转换错误

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java |  191 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 190 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 1a152b9..c57daaa 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,8 @@
 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;
 import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.domain.ApsWorkCalendar;
@@ -8,7 +11,13 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.YearMonth;
+import java.time.ZoneId;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
 
 /**
  * 鏃ュ巻绠$悊Service涓氬姟灞傚鐞�
@@ -97,4 +106,184 @@
     {
         return apsWorkCalendarMapper.deleteApsWorkCalendarById(id);
     }
+
+    public JSONArray getWorkCalendar(String applicableFactory, String datetime) {
+        JSONArray res = new JSONArray();
+        // 鑾峰彇骞翠唤鍜屾湀浠�
+        String[] parts = datetime.split("-");
+        int year = Integer.parseInt(parts[0]);
+        int month = Integer.parseInt(parts[1]);
+        // 鑾峰彇鎸囧畾骞翠唤鍜屾湀浠界殑澶╂暟
+        YearMonth yearMonth = YearMonth.of(year, month);
+        int daysInMonth = yearMonth.lengthOfMonth();
+        ApsWorkCalendar apsWorkCalendar = new ApsWorkCalendar();
+        apsWorkCalendar.setApplicableFactory(applicableFactory);
+        apsWorkCalendar.setEffectiveDate(DateUtils.parseDate(datetime+" 00:00:00"));
+        apsWorkCalendar.setExpiringDate(DateUtils.parseDate(datetime+" 23:59:59"));
+        List<ApsWorkCalendar> list = apsWorkCalendarMapper.selectApsWorkCalendarList(apsWorkCalendar);
+        if (list.isEmpty()) {
+            // 寰幆閬嶅巻褰撴湀鐨勬瘡涓�澶╋紝鑾峰彇鏄熸湡淇℃伅
+            for (int day = 1; day <= daysInMonth; day++) {
+                LocalDate date = LocalDate.of(year, month, day);
+                DayOfWeek dayOfWeek = date.getDayOfWeek();
+                JSONObject dayInfo = new JSONObject();
+                dayInfo.put("date", date.toString());
+                dayInfo.put("dayOfWeek", dayOfWeek.toString());
+                if (dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY) {
+                    dayInfo.put("isWorkDay", false);
+                } else {
+                    dayInfo.put("isWorkDay", true);
+                }
+                res.add(dayInfo);
+            }
+        }
+        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) {
+            baseCalendar.put(date+"", "");
+        }
+        try {
+            List<ApsWorkCalendar> list = apsWorkCalendarMapper.selectApsWorkCalendarList(apsWorkCalendar);
+            for (ApsWorkCalendar apsWorkCalendarTemp : list) {
+                //宸ヤ綔鏃�
+                org.postgresql.util.PGobject pgObjectWeekdays = (org.postgresql.util.PGobject) apsWorkCalendarTemp.getContent();
+                JSONArray weekdays = (JSON.parseObject(pgObjectWeekdays.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"));
+                }
+                List<LocalDate> datesTempWeekdays = getDatesBetween(apsWorkCalendarTemp.getEffectiveDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), apsWorkCalendarTemp.getExpiringDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
+                for (LocalDate dateTemp: datesTempWeekdays) {
+                    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+"", "浼戞伅鏃�");
+                        }
+                    }
+                }
+                //浼戞伅鏃�
+                org.postgresql.util.PGobject pgObjectHolidays = (org.postgresql.util.PGobject) apsWorkCalendarTemp.getHolidays();
+                if(pgObjectHolidays!=null){
+                    JSONArray holidays = JSONArray.parse(pgObjectHolidays.getValue());
+                    for (int i = 0; i < holidays.size(); i++){
+                        JSONObject h = holidays.getJSONObject(i);
+                        List<LocalDate> datesTempHolidays = getDatesBetween(h.getObject("startdate", LocalDate.class), h.getObject("enddate", LocalDate.class));
+                        for (LocalDate dateTemp: datesTempHolidays) {
+                            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;
+    }
+
+    @Override
+    public int deleteApsWorkCalendar(ApsWorkCalendar apsWorkCalendar){
+        return apsWorkCalendarMapper.deleteApsWorkCalendar(apsWorkCalendar);
+    }
+
+    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