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/controller/basicData/ApsWorkCalendarController.java | 29 ++++++
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsWorkCalendarServiceImpl.java | 151 +++++++++++++++++++++++++++++++++++++
aps-modules/aps-core/src/main/resources/mapper/core/ApsWorkCalendarMapper.xml | 3
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsWorkCalendarService.java | 7 +
4 files changed, 185 insertions(+), 5 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsWorkCalendarController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsWorkCalendarController.java
index 88f8355..0e84a40 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsWorkCalendarController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsWorkCalendarController.java
@@ -71,7 +71,16 @@
@PostMapping
public AjaxResult add(@RequestBody ApsWorkCalendar apsWorkCalendar)
{
- return toAjax(apsWorkCalendarService.insertApsWorkCalendar(apsWorkCalendar));
+ ApsWorkCalendar tempCheck = new ApsWorkCalendar();
+ tempCheck.setEffectiveDate(apsWorkCalendar.getEffectiveDate());
+ tempCheck.setExpiringDate(apsWorkCalendar.getExpiringDate());
+ tempCheck.setApplicableFactory(apsWorkCalendar.getApplicableFactory());
+ List<ApsWorkCalendar> list = apsWorkCalendarService.selectApsWorkCalendarList(tempCheck);
+ if(!list.isEmpty()){
+ return AjaxResult.error("璇ユ椂闂存鏃ュ巻宸插瓨鍦�", list);
+ }else{
+ return toAjax(apsWorkCalendarService.insertApsWorkCalendar(apsWorkCalendar));
+ }
}
/**
@@ -82,7 +91,16 @@
@PutMapping
public AjaxResult edit(@RequestBody ApsWorkCalendar apsWorkCalendar)
{
- return toAjax(apsWorkCalendarService.updateApsWorkCalendar(apsWorkCalendar));
+ ApsWorkCalendar tempCheck = new ApsWorkCalendar();
+ tempCheck.setEffectiveDate(apsWorkCalendar.getEffectiveDate());
+ tempCheck.setExpiringDate(apsWorkCalendar.getExpiringDate());
+ tempCheck.setApplicableFactory(apsWorkCalendar.getApplicableFactory());
+ List<ApsWorkCalendar> list = apsWorkCalendarService.selectApsWorkCalendarList(tempCheck);
+ if(!list.isEmpty()){
+ return AjaxResult.error("璇ユ椂闂存鏃ュ巻宸插瓨鍦�", list);
+ }else{
+ return toAjax(apsWorkCalendarService.updateApsWorkCalendar(apsWorkCalendar));
+ }
}
/**
@@ -106,4 +124,11 @@
List<ApsWorkCalendar> list = apsWorkCalendarService.selectApsWorkCalendarList(apsWorkCalendar);
return AjaxResult.success(list);
}
+
+ @Log(title = "鏌ヨ鏃ュ巻瑙嗗浘鏁版嵁", businessType = BusinessType.INSERT)
+ @PostMapping("/selectCalendarView")
+ public AjaxResult selectCalendarView(@RequestBody ApsWorkCalendar apsWorkCalendar)
+ {
+ return AjaxResult.success(apsWorkCalendarService.selectCalendarView(apsWorkCalendar));
+ }
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsWorkCalendarService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsWorkCalendarService.java
index 65e0b50..95d639f 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsWorkCalendarService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsWorkCalendarService.java
@@ -68,4 +68,11 @@
* @return
*/
public JSONArray getWorkCalendar(String applicableFactory, String datetime);
+
+ /**
+ * 鑾峰彇鏃ュ巻瑙嗗浘鏁版嵁
+ * @param apsWorkCalendar
+ * @return JSONArray
+ */
+ JSONArray selectCalendarView(ApsWorkCalendar apsWorkCalendar);
}
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 + ")");
+ }
+ }
}
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsWorkCalendarMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsWorkCalendarMapper.xml
index 1552fe3..b0b0b98 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsWorkCalendarMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsWorkCalendarMapper.xml
@@ -29,8 +29,7 @@
<where>
<if test="description != null and description != ''"> and description like '%' || #{description} || '%'</if>
<if test="type != null and type != ''"> and type = #{type}</if>
- <if test="effectiveDate != null "> and effective_date >= #{effectiveDate}</if>
- <if test="expiringDate != null "> and expiring_date <= #{expiringDate}</if>
+ <if test="effectiveDate != null and expiringDate != null"> and ((effective_date >= #{effectiveDate} and effective_date <= #{expiringDate}) or (expiring_date >= #{effectiveDate} and expiring_date <= #{expiringDate}))</if>
<if test="content != null and content != ''"> and content = #{content}</if>
<if test="applicableFactory != null and applicableFactory != ''"> and applicable_factory = #{applicableFactory}</if>
<if test="applicableWorkshop != null and applicableWorkshop != ''"> and applicable_workshop = #{applicableWorkshop}</if>
--
Gitblit v1.9.3