From fba02533a03606f9b4e27b681357244244e81a12 Mon Sep 17 00:00:00 2001 From: PQZ Date: Tue, 11 Nov 2025 19:48:32 +0800 Subject: [PATCH] 1111 --- .../controller/BaseCalendarController.java | 14 +- .../ruoyi/base/domain/BaseCalendarEvent.java | 3 +- .../ruoyi/base/mapper/BaseCalendarMapper.java | 19 ++- .../service/IBaseCalendarEventService.java | 5 + .../base/service/IBaseCalendarService.java | 27 +++- .../impl/BaseCalendarEventServiceImpl.java | 122 ++++++++++++++++-- .../service/impl/BaseCalendarServiceImpl.java | 50 ++++++- .../com/ruoyi/base/vo/BaseCalendarVO.java | 16 +++ .../mapper/base/BaseCalendarMapper.xml | 20 +-- dl_vue/src/utils/request.js | 2 +- dl_vue/src/views/base/calendar/index.vue | 26 +++- 11 files changed, 267 insertions(+), 37 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCalendarVO.java diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseCalendarController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseCalendarController.java index 886183a..d510e00 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseCalendarController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseCalendarController.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.base.vo.BaseCalendarVO; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,15 +41,22 @@ public class BaseCalendarController extends BaseController { private IBaseCalendarService baseCalendarService; /** - * 查询日历列表 - */ + * 分页查询日历列表 + * + * @param baseCalendar {@link BaseCalendar} + * @param pageNum 分页参数 + * @param pageSize 分页参数 + * @return com.ruoyi.common.core.domain.AjaxResult + * @author PQZ + * @date 18:18 2025/11/11 + **/ @PreAuthorize("@ss.hasPermi('base:calendar:list')") @GetMapping("/list") public AjaxResult list(BaseCalendar baseCalendar, @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNum, pageSize); - IPage list = baseCalendarService.queryListPage(baseCalendar, page); + IPage list = baseCalendarService.queryListPage(baseCalendar, page); return success(list); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseCalendarEvent.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseCalendarEvent.java index 98531f6..e5215bb 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseCalendarEvent.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseCalendarEvent.java @@ -15,12 +15,11 @@ import com.ruoyi.common.core.domain.DlBaseEntity; */ @TableName("base_calendar_event") @Data -@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class BaseCalendarEvent extends DlBaseEntity +public class BaseCalendarEvent { private static final long serialVersionUID = 1L; diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCalendarMapper.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCalendarMapper.java index edce292..4fb3a47 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCalendarMapper.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCalendarMapper.java @@ -1,21 +1,32 @@ package com.ruoyi.base.mapper; import java.util.List; + import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.base.domain.BaseCalendar; +import com.ruoyi.base.vo.BaseCalendarVO; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * 日历Mapper接口 - * + * * @author pqz * @date 2025-10-31 */ @Mapper -public interface BaseCalendarMapper extends BaseMapper -{ - IPage queryListPage(@Param("entity") BaseCalendar entity, Page page); +public interface BaseCalendarMapper extends BaseMapper { + + /** + * 分页查询日历列表 + * + * @param entity {@link BaseCalendar} + * @param page 分页参数 + * @return com.baomidou.mybatisplus.core.metadata.IPage + * @author PQZ + * @date 18:19 2025/11/11 + **/ + IPage queryListPage(@Param("entity") BaseCalendar entity, Page page); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarEventService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarEventService.java index a0ad38f..aec2395 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarEventService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarEventService.java @@ -16,5 +16,10 @@ public interface IBaseCalendarEventService extends IService { IPage queryListPage(BaseCalendarEvent pageReqVO, Page page); + /** + * 同步国内节假日 + * @author PQZ + * @date 17:55 2025/11/11 + **/ void syncEvent(); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarService.java index 05e250b..a83248f 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCalendarService.java @@ -1,11 +1,13 @@ package com.ruoyi.base.service; import java.util.List; +import java.util.Map; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.base.domain.BaseCalendar; +import com.ruoyi.base.vo.BaseCalendarVO; /** * 日历Service接口 @@ -14,14 +16,33 @@ import com.ruoyi.base.domain.BaseCalendar; * @date 2025-10-31 */ public interface IBaseCalendarService extends IService { - IPage queryListPage(BaseCalendar pageReqVO, Page page); /** - * 通过当前时间生成近5年的日历 + * 分页查询日历列表 + * + * @param pageReqVO {@link BaseCalendar} + * @param page 分页参数 + * @return com.baomidou.mybatisplus.core.metadata.IPage + * @author PQZ + * @date 18:19 2025/11/11 + **/ + IPage queryListPage(BaseCalendar pageReqVO, Page page); + + /** + * 通过当前时间生成指定年份的日历 * - * @return void * @author PQZ * @date 10:47 2025/11/3 **/ void generateCalendar(); + + /** + * 根据集合修改法定作息状态 + * + * @param dateList List> list + * @param workStatus 法定作息状态 + * @author PQZ + * @date 17:52 2025/11/11 + **/ + void updateWorkStatus(List> dateList, String workStatus); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarEventServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarEventServiceImpl.java index 69d9fcc..4685639 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarEventServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarEventServiceImpl.java @@ -7,14 +7,15 @@ import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.Year; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.base.domain.BaseCalendar; +import com.ruoyi.base.service.IBaseCalendarService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; @@ -38,11 +39,20 @@ public class BaseCalendarEventServiceImpl extends ServiceImpl queryListPage(BaseCalendarEvent pageReqVO, Page page) { return baseCalendarEventMapper.queryListPage(pageReqVO, page); } + /** + * 同步国内节假日 + * @author PQZ + * @date 17:55 2025/11/11 + * @return void + **/ @Override public void syncEvent() { String apiKey = "55bc9d05a05e5e1c0183f7ab380707d8"; @@ -69,23 +79,113 @@ public class BaseCalendarEventServiceImpl extends ServiceImpl newsMap = (Map) resultMap.get("result"); List> dataList = (List>) newsMap.get("list"); + // 创建三个集合 + List> holidayList = new ArrayList<>(); + List> vacationList = new ArrayList<>(); + List> remarkList = new ArrayList<>(); - // 输出数据到控制台 - System.out.println("获取到 " + dataList.size() + " 条节假日数据:"); for (Map data : dataList) { - System.out.println("日期: " + data.get("date") + - ", 名称: " + data.get("name") + - ", 类型: " + data.get("type")); + String name = (String) data.get("name"); + String holidayStr = (String) data.get("holiday"); + String vacationStr = (String) data.get("vacation"); + String remarkStr = (String) data.get("remark"); + + // 处理节假日集合 + if (holidayStr != null && !holidayStr.isEmpty()) { + // 解析 holiday 字段,例如 "1月1号" + String[] parts = holidayStr.replace("号", "").split("月"); + int month = Integer.parseInt(parts[0]); + int day = Integer.parseInt(parts[1]); + + Map holiday = new HashMap<>(); + holiday.put("year", 2025); + holiday.put("month", month); + holiday.put("day", day); + holiday.put("name", name); + holidayList.add(holiday); + } + + // 处理休息日集合 + if (vacationStr != null && !vacationStr.isEmpty()) { + String[] dates = vacationStr.split("\\|"); + for (String vacationDate : dates) { + String[] dateParts = vacationDate.split("-"); + Map vacation = new HashMap<>(); + vacation.put("year", Integer.parseInt(dateParts[0])); + vacation.put("month", Integer.parseInt(dateParts[1])); + vacation.put("day", Integer.parseInt(dateParts[2])); + vacationList.add(vacation); + } + } + + // 处理调休加班日集合 + if (remarkStr != null && !remarkStr.isEmpty()) { + String[] dates = remarkStr.split("\\|"); + for (String remarkDate : dates) { + String[] dateParts = remarkDate.split("-"); + Map remark = new HashMap<>(); + remark.put("year", Integer.parseInt(dateParts[0])); + remark.put("month", Integer.parseInt(dateParts[1])); + remark.put("day", Integer.parseInt(dateParts[2])); + remarkList.add(remark); + } + } } - } else { - System.err.println("获取节假日数据失败,错误码: " + code + - ", 错误信息: " + resultMap.get("msg")); + +// baseCalendarService.updateWorkStatus(vacationList, "休"); + baseCalendarService.updateWorkStatus(remarkList, "班"); +// saveCalendarEvent(holidayList); } } } catch (Exception e) { e.printStackTrace(); } } + + /** + * 保存节假日数据 + * @author PQZ + * @date 18:09 2025/11/11 + * @param holidayList List> + * @return void + **/ + void saveCalendarEvent(List> holidayList){ + if (holidayList == null || holidayList.isEmpty()) { + return; + } + + List eventList = new ArrayList<>(); + + for (Map holiday : holidayList) { + Integer year = (Integer) holiday.get("year"); + Integer month = (Integer) holiday.get("month"); + Integer day = (Integer) holiday.get("day"); + String name = (String) holiday.get("name"); + + if (year != null && month != null && day != null && name != null) { + // 查询baseCalendar表中是否存在该日期记录 + BaseCalendar calendar = baseCalendarService.getOne(new LambdaQueryWrapper() + .eq(BaseCalendar::getYear, year) + .eq(BaseCalendar::getMonth, month) + .eq(BaseCalendar::getDay, day)); + + // 如果存在该日期记录,则创建节日事件 + if (calendar != null) { + BaseCalendarEvent event = new BaseCalendarEvent(); + // 使用baseCalendar表的ID作为dateId + event.setDateId(calendar.getId()); + event.setCountry("中国"); + event.setEventName(name); + eventList.add(event); + } + } + } + // 批量保存节日事件 + if (!eventList.isEmpty()) { + this.saveBatch(eventList); + } + + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarServiceImpl.java index de143e3..9c04303 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCalendarServiceImpl.java @@ -9,9 +9,14 @@ import java.time.temporal.IsoFields; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.base.vo.BaseCalendarVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -30,13 +35,22 @@ public class BaseCalendarServiceImpl extends ServiceImpl + * @author PQZ + * @date 18:19 2025/11/11 + **/ @Override - public IPage queryListPage(BaseCalendar pageReqVO, Page page) { + public IPage queryListPage(BaseCalendar pageReqVO, Page page) { return baseCalendarMapper.queryListPage(pageReqVO, page); } /** - * 通过当前时间生成近5年的日历 + * 通过当前时间生成指定年份的日历 * * @return void * @author PQZ @@ -64,6 +78,7 @@ public class BaseCalendarServiceImpl extends ServiceImpl> list + * @param workStatus 法定作息状态 + * @author PQZ + * @date 17:52 2025/11/11 + **/ + @Override + public void updateWorkStatus(List> dateList, String workStatus) { + if (dateList == null || dateList.isEmpty()) { + return; + } + // 转换为BaseCalendar对象列表 + for (Map dateMap : dateList) { + Integer year = (Integer) dateMap.get("year"); + Integer month = (Integer) dateMap.get("month"); + Integer day = (Integer) dateMap.get("day"); + + if (year != null && month != null && day != null) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("year", year.longValue()) + .eq("month", month.longValue()) + .eq("day", day.longValue()) + .set("work_status", workStatus); + this.update(updateWrapper); + } + } + + } + /** * 使用Hutool计算农历日期 * diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCalendarVO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCalendarVO.java new file mode 100644 index 0000000..63f5e12 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCalendarVO.java @@ -0,0 +1,16 @@ +package com.ruoyi.base.vo; + +import com.ruoyi.base.domain.BaseCalendar; +import lombok.Data; + +/** + * 日历对象 base_calendar + * + * @author pqz + * @date 2025-10-31 + */ +@Data +public class BaseCalendarVO extends BaseCalendar { + /**节日*/ + String eventName; +} diff --git a/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseCalendarMapper.xml b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseCalendarMapper.xml index d9427fd..8c1eb4a 100644 --- a/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseCalendarMapper.xml +++ b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseCalendarMapper.xml @@ -19,16 +19,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id, year, month, day, lunar_date, weekday, week, work_status from base_calendar - + select main.*, event.event_name as eventName + from base_calendar main + left join base_calendar_event event on main.id = event.date_id - and year = #{entity.year} - and month = #{entity.month} - and day = #{entity.day} - and lunar_date = #{entity.lunarDate} - and weekday = #{entity.weekday} - and week = #{entity.week} - and work_status = #{entity.workStatus} + and main.year = #{entity.year} + and main.month = #{entity.month} + and main.day = #{entity.day} + and main.lunar_date = #{entity.lunarDate} + and main.weekday = #{entity.weekday} + and main.week = #{entity.week} + and main.work_status = #{entity.workStatus} \ No newline at end of file diff --git a/dl_vue/src/utils/request.js b/dl_vue/src/utils/request.js index ffb0d21..ca434df 100644 --- a/dl_vue/src/utils/request.js +++ b/dl_vue/src/utils/request.js @@ -113,7 +113,7 @@ service.interceptors.response.use(res => { if (message == "Network Error") { message = "后端接口连接异常"; } else if (message.includes("timeout")) { - message = "系统接口请求超时"; + // message = "系统接口请求超时"; } else if (message.includes("Request failed with status code")) { message = "系统接口" + message.substr(message.length - 3) + "异常"; } diff --git a/dl_vue/src/views/base/calendar/index.vue b/dl_vue/src/views/base/calendar/index.vue index d22de9b..bf63557 100644 --- a/dl_vue/src/views/base/calendar/index.vue +++ b/dl_vue/src/views/base/calendar/index.vue @@ -17,7 +17,12 @@
{{ data.day.split('-')[2] }}
{{ getLunarDate(data.day) }}
-
+
+ {{ getWorkStatus(data.day) }} +
@@ -99,6 +104,9 @@ export default { */ getLunarDate(dateStr) { const record = this.getCalendarRecord(dateStr) + if(record!=null && record.eventName != null){ + return record.eventName + } return record ? record.lunarDate : null }, @@ -136,9 +144,23 @@ export default { .work-status { font-size: 12px; - color: #ef9e11; font-weight: bold; margin-top: 2px; + display: inline-block; + width: 16px; + height: 16px; + border-radius: 8px; + text-align: center; + line-height: 16px; + color: white; +} + +.work-status.休 { + background-color: #1890ff; /* 蓝色 */ +} + +.work-status.班 { + background-color: #52c41a; /* 绿色 */ } .el-calendar-table .el-calendar-day:hover {