Przeglądaj źródła

出勤日历返回

yusm 2 tygodni temu
rodzic
commit
d9ea851c64

+ 7 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/AttendanceController.java

@@ -26,10 +26,17 @@ public class AttendanceController {
     @Resource
     private AttendanceService attendanceService;
 
+    //导入考勤记录
     @RequestMapping("/importAttendanceData")
     public HttpRespMsg importAttendanceData(String month, MultipartFile file, HttpServletRequest request){
         return attendanceService.importAttendanceData(month,file,request);
     }
 
+    //出勤日历返回
+    @RequestMapping("/getCalendarByMonth")
+    public HttpRespMsg getCalendarByMonth(String month){
+        return attendanceService.getCalendarByMonth(month);
+    }
+
 }
 

+ 71 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/HighTemperatureSetController.java

@@ -0,0 +1,71 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.HighTemperatureSet;
+import com.management.platform.entity.SpecialDateSet;
+import com.management.platform.service.HighTemperatureSetService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-06-17
+ */
+@RestController
+@RequestMapping("/high-temperature-set")
+public class HighTemperatureSetController {
+
+    @Resource
+    private HighTemperatureSetService highTemperatureSetService;
+
+    @RequestMapping("/list")
+    private HttpRespMsg getList(){
+        HttpRespMsg msg = new HttpRespMsg();
+        List<HighTemperatureSet> list = highTemperatureSetService.list(new QueryWrapper<HighTemperatureSet>().orderByDesc("id"));
+        msg.setData(list);
+        return msg;
+    }
+
+
+    @RequestMapping("/saveOrUpdate")
+    private HttpRespMsg saveOrUpdate(HighTemperatureSet highTemperatureSet){
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        if (highTemperatureSet.getStartDate()==null||highTemperatureSet.getEndDate()==null){
+            httpRespMsg.setError("请选择开始日期或结束日期");
+            return httpRespMsg;
+        }
+        if (highTemperatureSet.getId() == null){
+            int count = highTemperatureSetService.count(new QueryWrapper<HighTemperatureSet>()
+                    .le("start_date", highTemperatureSet.getEndDate()).ge("end_date", highTemperatureSet.getStartDate())
+            );
+            if (count > 0){
+                httpRespMsg.setError("该时间段已被设置为高温日期");
+                return httpRespMsg;
+            }
+            highTemperatureSetService.save(highTemperatureSet);
+        }else {
+            int count = highTemperatureSetService.count(new QueryWrapper<HighTemperatureSet>()
+                    .le("start_date", highTemperatureSet.getEndDate()).ge("end_date", highTemperatureSet.getStartDate())
+                    .ne("id", highTemperatureSet.getId()));
+            if (count > 0){
+                httpRespMsg.setError("该时间段已被设置为高温日期");
+                return httpRespMsg;
+            }
+            highTemperatureSetService.updateById(highTemperatureSet);
+        }
+        return httpRespMsg;
+    }
+
+
+}
+

+ 12 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/DayInfo.java

@@ -0,0 +1,12 @@
+package com.management.platform.entity;
+
+import lombok.Data;
+
+// 日期信息类
+@Data
+public class DayInfo {
+    private String date;       // 日期,格式:yyyy-MM-dd
+    private int dayOfWeek;     // 星期几,1-7 (Monday-Sunday)
+    private int type;          // 0-工作日,1-休息日
+
+}

+ 57 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/HighTemperatureSet.java

@@ -0,0 +1,57 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class HighTemperatureSet extends Model<HighTemperatureSet> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 开始日期
+     */
+    @TableField("start_date")
+    private Date startDate;
+
+    /**
+     * 结束日期
+     */
+    @TableField("end_date")
+    private Date endDate;
+
+    /**
+     * 描述
+     */
+    @TableField("remark")
+    private String remark;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 3 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/SpecialDateSet.java

@@ -36,7 +36,7 @@ public class SpecialDateSet extends Model<SpecialDateSet> {
     private Date specialDate;
 
     /**
-     * 日期类型: 0节假日,工作日
+     * 日期类型: 0节假日,1工作日
      */
     @TableField("type")
     private Integer type;
@@ -44,8 +44,8 @@ public class SpecialDateSet extends Model<SpecialDateSet> {
     /**
      * 描述
      */
-    @TableField("desc")
-    private String desc;
+    @TableField("remark")
+    private String remark;
 
 
     @Override

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/HighTemperatureSetMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.HighTemperatureSet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-06-17
+ */
+public interface HighTemperatureSetMapper extends BaseMapper<HighTemperatureSet> {
+
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/AttendanceService.java

@@ -18,4 +18,6 @@ import javax.servlet.http.HttpServletRequest;
 public interface AttendanceService extends IService<Attendance> {
 
     HttpRespMsg importAttendanceData(String month, MultipartFile file, HttpServletRequest request);
+
+    HttpRespMsg getCalendarByMonth(String month);
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/HighTemperatureSetService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.HighTemperatureSet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-06-17
+ */
+public interface HighTemperatureSetService extends IService<HighTemperatureSet> {
+
+}

+ 131 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceServiceImpl.java

@@ -1,16 +1,17 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.entity.Attendance;
-import com.management.platform.entity.CustomerInfo;
-import com.management.platform.entity.User;
+import com.management.platform.entity.*;
 import com.management.platform.mapper.AttendanceMapper;
 import com.management.platform.service.AttendanceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.CustomerInfoService;
+import com.management.platform.service.SpecialDateSetService;
 import com.management.platform.service.UserService;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
@@ -26,12 +27,12 @@ import java.io.InputStream;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -42,6 +43,7 @@ import java.util.stream.Collectors;
  * @author Seyason
  * @since 2025-06-16
  */
+@Slf4j
 @Service
 public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attendance> implements AttendanceService {
     @Resource
@@ -50,6 +52,9 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
     @Resource
     private AttendanceService attendanceService;
 
+    @Resource
+    private SpecialDateSetService specialDateSetService;
+
     @Override
     public HttpRespMsg importAttendanceData(String month, MultipartFile file, HttpServletRequest request) {
         HttpRespMsg msg=new HttpRespMsg();
@@ -172,4 +177,123 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
             return msg;
         }
     }
+
+
+
+    @Override
+    public HttpRespMsg getCalendarByMonth(String month) {
+        HttpRespMsg msg = new HttpRespMsg();
+        try {
+            // 1. 解析月份参数
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            YearMonth yearMonth = YearMonth.parse(month, formatter);
+
+            // 2. 获取自定义休息日列表
+            List<LocalDate> customHolidays = getCustomHolidays(yearMonth);
+
+            // 2.1 获取自定义休息日列表
+            List<LocalDate> workdays = getWorkDays(yearMonth);
+
+            // 3. 生成该月所有日期的信息
+            List<DayInfo> calendar = new ArrayList<>();
+            LocalDate startDate = yearMonth.atDay(1);
+            LocalDate endDate = yearMonth.atEndOfMonth();
+
+            for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
+                DayInfo dayInfo = new DayInfo();
+                dayInfo.setDate(date.format(DateTimeFormatter.ISO_LOCAL_DATE));
+                dayInfo.setDayOfWeek(date.getDayOfWeek().getValue()); // 1-7 (Monday-Sunday)
+
+                // 判断是否为休息日(周末或自定义假日)
+                if (date.getDayOfWeek() == DayOfWeek.SATURDAY
+                        || date.getDayOfWeek() == DayOfWeek.SUNDAY
+                        || customHolidays.contains(date)) {
+                    dayInfo.setType(0); // 休息日
+                }else {
+                    dayInfo.setType(1);//工作日
+                }
+
+                if (workdays.contains(date)){
+                    dayInfo.setType(1);//工作日
+                }
+
+                calendar.add(dayInfo);
+            }
+
+            // 4. 设置返回结果
+            msg.setData(calendar);
+
+        } catch (Exception e) {
+            msg.setError("获取日历信息失败: " + e.getMessage());
+            log.info("获取日历信息失败, month: {}, error: {}", month, e.getMessage(), e);
+        }
+
+        return msg;
+    }
+
+    private List<LocalDate> getWorkDays(YearMonth yearMonth) {
+        List<LocalDate> workDays = new ArrayList<>();
+        LocalDate endOfMonth = yearMonth.atEndOfMonth();
+        LocalDate startOfMonth = yearMonth.atDay(1);
+        List<SpecialDateSet> dateSetList = specialDateSetService.list(new QueryWrapper<SpecialDateSet>()
+                .between("special_date", startOfMonth, endOfMonth).eq("type",1));
+        List<String> collect2 = new ArrayList<>();
+        if (!dateSetList.isEmpty()){
+            List<Date> collect = dateSetList.stream().map(SpecialDateSet::getSpecialDate).collect(Collectors.toList());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            List<String> collect1 = collect.stream()
+                    .map(sdf::format)
+                    .collect(Collectors.toList());
+           collect2.addAll(collect1);
+        }
+        // 将字符串日期转换为LocalDate并添加到列表中
+        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
+        for (String dateStr : collect2) {
+            LocalDate holiday = LocalDate.parse(dateStr, formatter);
+            if (holiday.getYear() == yearMonth.getYear() &&
+                    holiday.getMonth() == yearMonth.getMonth()) {
+                workDays.add(holiday);
+            }
+        }
+        return workDays;
+    }
+
+    // 辅助方法:获取自定义休息日列表(示例)
+    private List<LocalDate> getCustomHolidays(YearMonth yearMonth) {
+        List<LocalDate> holidays = new ArrayList<>();
+
+        // 2025年中国法定节假日列表
+        String[] holidayDates = {
+                "2025-01-01", // 元旦
+                "2025-01-28", "2025-01-29", "2025-01-30", "2025-01-31", "2025-02-03", "2025-02-04", // 春节
+                "2025-04-04", // 清明节
+                "2025-05-01", "2025-05-02", "2025-05-05", // 劳动节
+                "2025-06-02", // 端午节
+                "2025-10-01", "2025-10-02", "2025-10-03", "2025-10-06", "2025-10-07", "2025-10-08" // 国庆节
+        };
+        List<String> collect2 = Arrays.stream(holidayDates).collect(Collectors.toList());
+
+        LocalDate endOfMonth = yearMonth.atEndOfMonth();
+        LocalDate startOfMonth = yearMonth.atDay(1);
+        List<SpecialDateSet> dateSetList = specialDateSetService.list(new QueryWrapper<SpecialDateSet>()
+                .between("special_date", startOfMonth, endOfMonth).eq("type",0));
+        if (!dateSetList.isEmpty()){
+            List<Date> collect = dateSetList.stream().map(SpecialDateSet::getSpecialDate).collect(Collectors.toList());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            List<String> collect1 = collect.stream()
+                    .map(sdf::format)
+                    .collect(Collectors.toList());
+            collect2.addAll(collect1);
+        }
+        // 将字符串日期转换为LocalDate并添加到列表中
+        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
+        for (String dateStr : collect2) {
+            LocalDate holiday = LocalDate.parse(dateStr, formatter);
+            if (holiday.getYear() == yearMonth.getYear() &&
+                    holiday.getMonth() == yearMonth.getMonth()) {
+                holidays.add(holiday);
+            }
+        }
+        return holidays;
+    }
 }

+ 20 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/HighTemperatureSetServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.HighTemperatureSet;
+import com.management.platform.mapper.HighTemperatureSetMapper;
+import com.management.platform.service.HighTemperatureSetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-06-17
+ */
+@Service
+public class HighTemperatureSetServiceImpl extends ServiceImpl<HighTemperatureSetMapper, HighTemperatureSet> implements HighTemperatureSetService {
+
+}

+ 18 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/HighTemperatureSetMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.HighTemperatureSetMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.HighTemperatureSet">
+        <id column="id" property="id" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="desc" property="desc" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, start_date, end_date, desc
+    </sql>
+
+</mapper>