sfd
2025-05-26 2a64b537e8e3bce9ce030585a3da17d48379c0ad
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java
@@ -152,42 +152,39 @@
        //生成日历基础数据
        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和expiringDate算出日期范围内的每一天
                    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+"", "休息日");
                            }
                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+"", "休息日");
                        }
                    }
                }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+"", "节假日");
                }
                //休息日
                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+"", "节假日");
                            }
                        }
                    }
                }
@@ -203,6 +200,11 @@
            return res;
        }
        return res;
    }
    @Override
    public int deleteApsWorkCalendar(ApsWorkCalendar apsWorkCalendar){
        return apsWorkCalendarMapper.deleteApsWorkCalendar(apsWorkCalendar);
    }
    private List<LocalDate> getCalendarData(int year, int month) {
@@ -221,11 +223,11 @@
        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 + ")");
        }
//        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;
    }