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