From 3880de9f96b068dfa8b1f35fcac0060f3d4ad604 Mon Sep 17 00:00:00 2001 From: zhanghl <253316343@qq.com> Date: 星期日, 27 四月 2025 15:08:10 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- 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