Explorar el Código

1.完成工作历查询历史节假日的接口开发

luxueshi hace 2 años
padre
commit
992b90954b

+ 1 - 0
src/main/java/com/persagy/calendar/config/WebMvcConfig.java

@@ -26,6 +26,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
     public static final List<String> excludePaths = new ArrayList<String>();
     static {
     	excludePaths.add("/v2.0/common/handleParseCalendarRule/**");
+        excludePaths.add("/holiday/**");
     }
 	
     @Override

+ 85 - 0
src/main/java/com/persagy/calendar/controller/HolidayController.java

@@ -1,12 +1,97 @@
 package com.persagy.calendar.controller;
 
+import com.persagy.calendar.pojo.dto.Holiday;
+import com.persagy.calendar.pojo.vo.HolidayQueryVO;
+import com.persagy.calendar.pojo.vo.HolidayVO;
+import com.persagy.calendar.service.HolidayService;
+import com.persagy.calendar.utils.TimeUtil;
+import com.persagy.common.enums.ResponseCode;
+import com.persagy.common.utils.ResponseResult;
+import com.persagy.common.utils.ResponseUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
 @RestController
 @RequestMapping(value = "/holiday", method = RequestMethod.POST)
+@Slf4j
 public class HolidayController {
 
+    @Autowired
+    private HolidayService holidayService;
+
+    @RequestMapping(value = "query")
+    public ResponseResult query(@RequestBody @Valid HolidayQueryVO holidayQueryVO) {
+        try {
+            //1.校验
+            List<String> betweenDays = TimeUtil.getBetweenDays(holidayQueryVO.getStartTime(), holidayQueryVO.getEndTime());
+            if (betweenDays.size() > 365) {
+                return ResponseUtil.errorResult(ResponseCode.A0400.getCode(),"超过可查询的最大时间范围");
+            }
+
+            //2.查询
+            List<Holiday> holidayList = holidayService.queryHoliday(holidayQueryVO);
+
+            //3.转换
+            List<HolidayVO> holidayVOList = convertVoList(holidayList);
+
+            //4.升序排序
+            sortByDateAsc(holidayVOList);
+
+            //5.返回
+            return ResponseUtil.successResult(holidayVOList, Long.valueOf(holidayList.size()));
+        }catch (Exception e) {
+            log.error("查询节假日异常", e);
+            return ResponseUtil.errorResult();
+        }
+    }
+
+    private List<HolidayVO> convertVoList(List<Holiday> list) {
+        List<HolidayVO> voList = new ArrayList<>();
+        for (Holiday holiday : list) {
+            HolidayVO holidayVO = convertVo(holiday);
+            voList.add(holidayVO);
+        }
+        return voList;
+    }
+
+    private HolidayVO convertVo(Holiday po) {
+        HolidayVO workCalendarVO = new HolidayVO();
+        workCalendarVO.setWorkDate(TimeUtil.getStringDate(po.getWorkDate()));
+        workCalendarVO.setWorkdayCode(po.getWorkdayCode());
+        workCalendarVO.setWorkdayName(po.getWorkdayName());
+        workCalendarVO.setWeekCode(po.getWeekCode());
+        workCalendarVO.setWeekName(po.getWeekName());
+        workCalendarVO.setWeekendCode(po.getWeekendCode());
+        workCalendarVO.setWeekendName(po.getWeekendName());
+        workCalendarVO.setHolidayCode(po.getHolidayCode());
+        workCalendarVO.setHolidayName(po.getHolidayName());
+        return workCalendarVO;
+    }
 
+    private void sortByDateAsc(List<HolidayVO> list) {
+        Collections.sort(list, new Comparator<HolidayVO>() {
+            @Override
+            public int compare(HolidayVO o1, HolidayVO o2) {
+                if (TimeUtil.dateToLong(o1.getWorkDate()) >
+                        TimeUtil.dateToLong(o2.getWorkDate())) {
+                    return 1;
+                }
+                if (TimeUtil.dateToLong(o1.getWorkDate()) ==
+                        TimeUtil.dateToLong(o2.getWorkDate())) {
+                    return 0;
+                }
+                return -1;
+            }
+        });
+    }
 }

+ 15 - 0
src/main/java/com/persagy/calendar/mapper/HolidayMapper.java

@@ -0,0 +1,15 @@
+package com.persagy.calendar.mapper;
+
+import com.persagy.calendar.pojo.dto.Holiday;
+import com.persagy.calendar.pojo.vo.HolidayQueryVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface HolidayMapper {
+
+    boolean insertBatch(List<Holiday> list);
+
+    List<Holiday> getHolidayList(HolidayQueryVO query);
+}

+ 28 - 0
src/main/java/com/persagy/calendar/pojo/dto/Holiday.java

@@ -0,0 +1,28 @@
+package com.persagy.calendar.pojo.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class Holiday {
+
+    private Integer id;
+    private Date workDate;
+    private String workdayCode;
+    private String workdayName;
+    private String weekCode;
+    private String weekName;
+    private String weekendCode;
+    private String weekendName;
+    private String holidayCode;
+    private String holidayName;
+    private String creator;
+    private Date createTime;
+    private String modifier;
+    private Date modifiedTime;
+    private Integer valid;
+
+}

+ 17 - 0
src/main/java/com/persagy/calendar/pojo/vo/HolidayQueryVO.java

@@ -0,0 +1,17 @@
+package com.persagy.calendar.pojo.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+@Getter
+@Setter
+public class HolidayQueryVO {
+
+    @NotNull(message = "开始时间不能为空")
+    private String startTime;
+
+    @NotNull(message = "结束时间不能为空")
+    private String endTime;
+}

+ 20 - 0
src/main/java/com/persagy/calendar/pojo/vo/HolidayVO.java

@@ -0,0 +1,20 @@
+package com.persagy.calendar.pojo.vo;
+
+import lombok.Data;
+
+@Data
+public class HolidayVO {
+
+    private String workDate;
+    private String airConditionSeasonCode;
+    private String airConditionSeason;
+    private String workdayCode;
+    private String workdayName;
+    private String weekCode;
+    private String weekName;
+    private String weekendCode;
+    private String weekendName;
+    private String holidayCode;
+    private String holidayName;
+
+}

+ 12 - 0
src/main/java/com/persagy/calendar/service/HolidayService.java

@@ -0,0 +1,12 @@
+package com.persagy.calendar.service;
+
+import com.persagy.calendar.pojo.dto.Holiday;
+import com.persagy.calendar.pojo.vo.HolidayQueryVO;
+
+import java.util.List;
+
+public interface HolidayService {
+
+    List<Holiday> queryHoliday(HolidayQueryVO holidayQueryVO);
+
+}

+ 26 - 0
src/main/java/com/persagy/calendar/service/impl/HolidayServiceImpl.java

@@ -0,0 +1,26 @@
+package com.persagy.calendar.service.impl;
+
+import com.persagy.calendar.mapper.HolidayMapper;
+import com.persagy.calendar.pojo.dto.Holiday;
+import com.persagy.calendar.pojo.vo.HolidayQueryVO;
+import com.persagy.calendar.service.HolidayService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@Slf4j
+public class HolidayServiceImpl implements HolidayService {
+
+    @Autowired
+    private HolidayMapper holidayMapper;
+
+    @Override
+    public List<Holiday> queryHoliday(HolidayQueryVO holidayQueryVO) {
+        List<Holiday> holidayList = holidayMapper.getHolidayList(holidayQueryVO);
+        return holidayList;
+    }
+
+}

+ 228 - 0
src/main/java/com/persagy/calendar/utils/TimeUtil.java

@@ -0,0 +1,228 @@
+package com.persagy.calendar.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+public class TimeUtil {
+
+    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+    private static final String DATE_PATTERN = "yyyy-MM-dd";
+    private static final String DATE_CONTINUITY_PATTERN = "yyyyMMdd";
+    private static final String year = "2022-";
+    private static final String time = " 00:00:00";
+
+    public static Long timeToLong(String dateTimeStr) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_PATTERN);
+            Date date = df.parse(dateTimeStr);
+            long time = date.getTime();
+            return time;
+        }catch (Exception e) {
+            log.error("日期格式化异常", e);
+            return null;
+        }
+    }
+
+    public static Long dateToLong(String dateTimeStr) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN);
+            Date date = df.parse(dateTimeStr);
+            long time = date.getTime();
+            return time;
+        }catch (Exception e) {
+            log.error("日期格式化异常", e);
+            return null;
+        }
+    }
+
+    public static int getYear(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        int year = calendar.get(Calendar.YEAR);
+        return year;
+    }
+
+    public static String getStringDate(Date date) {
+        SimpleDateFormat formatter = new SimpleDateFormat(DATE_PATTERN);
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+    public static Date dateStrToDate(String dateTimeStr) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN);
+            Date date = df.parse(dateTimeStr);
+            return date;
+        }catch (Exception e) {
+            log.error("日期格式化异常", e);
+            return null;
+        }
+    }
+
+    public static Date dateStrFromRpcToDate(String dateTimeStr) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_PATTERN);
+            Date date = df.parse(dateTimeStr + time);
+            return date;
+        }catch (Exception e) {
+            log.error("日期格式化异常", e);
+            return null;
+        }
+    }
+
+    public static Long combineAndGetLong(String dateTimeStr) {
+        dateTimeStr = year + dateTimeStr + time;
+        return timeToLong(dateTimeStr);
+    }
+
+    public static List<String> getBetweenDays(String startTime, String endTime) {
+        try {
+            if(StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)){
+                return null;
+            }
+            //1、定义转换格式
+            SimpleDateFormat df  = new SimpleDateFormat(DATE_PATTERN);
+
+            Date start = df.parse(startTime);
+            Date end = df.parse(endTime);
+            List<String> result = new ArrayList<>();
+
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(start);
+
+            tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
+            Calendar tempEnd = Calendar.getInstance();
+            tempEnd.setTime(end);
+            result.add(sdf.format(start));
+            while (tempStart.before(tempEnd)) {
+                result.add(sdf.format(tempStart.getTime()));
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            }
+            return result;
+        }catch (Exception e) {
+            log.error("日期转换异常", e);
+            return null;
+        }
+    }
+
+    //TODo 待优化
+    public static String longTimeToString(Long time) {
+        Date date = new Date(time);
+        SimpleDateFormat sformat = new SimpleDateFormat(DATE_TIME_PATTERN);
+        String timeStr = sformat.format(date);
+        return timeStr;
+    }
+
+    public static Boolean timeStrIsAfter(String startTimeStr, String endTimeStr) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN);
+            Date startTime=df.parse(startTimeStr);
+            Date endTime=df.parse(endTimeStr);
+            return startTime.after(endTime);
+        }catch (Exception e) {
+            log.error("字符串格式化成日期异常", e);
+            return null;
+        }
+    }
+
+    public static String dateAddDay(String dateTime, int day) {
+        try {
+            SimpleDateFormat sformat = new SimpleDateFormat(DATE_TIME_PATTERN);
+            Date date = sformat.parse(dateTime);
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(date);//设置起时间
+            cal.add(Calendar.DATE, day);//增加一天
+            String dateTimeAddDay = sformat.format(cal.getTime());
+            return dateTimeAddDay;
+        }catch (Exception e) {
+            log.error("字符串格式化成日期异常", e);
+            return null;
+        }
+    }
+
+    /**
+     * @param date(2015-09-25)
+     * @return 功能:校验日期是否为自然年日期
+     */
+    public static boolean validateDate(String date) {
+        boolean result = false;
+        try {
+            if (date != null && !"".equals(date) && date.length() == 10) {
+                String year = date.substring(0, 4);
+                String month = date.substring(5, 7);
+                String day = date.substring(8, 10);
+                if (year.matches("^[0-9]*[1-9][0-9]*$") && month.matches("^[0-9]*[1-9][0-9]*$") && day.matches("^[0-9]*[1-9][0-9]*$")) {
+                    int y = Integer.parseInt(year);
+                    int m = Integer.parseInt(month);
+                    int d = Integer.parseInt(day);
+                    if (y >= 1900 && y <= 2999) {
+                        if (m >= 1 && m <= 12) {
+                            if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
+                                if (d >= 1 && d <= 31) {
+                                    result = true;
+                                }
+                            } else if (m == 4 || m == 6 || m == 9 || m == 11) {
+                                if (d >= 1 && d <= 30) {
+                                    result = true;
+                                }
+                            } else if (m == 2) {
+                                if (y % 4 == 0) {
+                                    if (d >= 1 && d <= 29) {
+                                        result = true;
+                                    }
+                                } else {
+                                    if (d >= 1 && d <= 28) {
+                                        result = true;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        }
+        return result;
+    }
+
+    public static boolean dateInsection(Date nowTime, Date startTime, Date endTime){
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+        //date 2022-11-18  start 2022-11-16  end 2022-03-15
+        if (date.after(begin) && end.before(begin)) {
+            end.add(Calendar.YEAR, 1);
+        }
+
+        //date 2022-01-18  start 2022-11-16  end 2022-03-15
+        if (date.before(begin) && end.before(begin)) {
+            begin.add(Calendar.YEAR, -1);
+        }
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+}

+ 50 - 0
src/main/resources/mapper/HolidayMapper.xml

@@ -0,0 +1,50 @@
+<?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.persagy.calendar.mapper.HolidayMapper">
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        ID,WORK_DATE,WORKDAY_CODE,WORKDAY_NAME,WEEK_CODE,WEEK_NAME,WEEKEND_CODE,WEEKEND_NAME,HOLIDAY_CODE,HOLIDAY_NAME,
+        CREATOR,CREATE_TIME,MODIFIER, MODIFIED_TIME,VALID
+    </sql>
+
+    <resultMap id="BaseResultMap" type="com.persagy.calendar.pojo.dto.Holiday" >
+        <id property="id" column="ID"/>
+        <result property="workDate" column="WORK_DATE"/>
+        <result property="workdayCode" column="WORKDAY_CODE"/>
+        <result property="workdayName" column="WORKDAY_NAME"/>
+        <result property="weekCode" column="WEEK_CODE"/>
+        <result property="weekName" column="WEEK_NAME"/>
+        <result property="weekendCode" column="WEEKEND_CODE"/>
+        <result property="weekendName" column="WEEKEND_NAME"/>
+        <result property="holidayCode" column="HOLIDAY_CODE"/>
+        <result property="holidayName" column="HOLIDAY_NAME"/>
+        <result property="creator" column="CREATOR"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="modifier" column="MODIFIER"/>
+        <result property="modifiedTime" column="MODIFIED_TIME"/>
+        <result property="valid" column="VALID"/>
+    </resultMap>
+
+    <insert id="insertBatch" parameterType="java.util.List">
+        INSERT INTO t_holiday(
+            WORK_DATE,WORKDAY_CODE,WORKDAY_NAME,WEEK_CODE,WEEK_NAME,WEEKEND_CODE,WEEKEND_NAME,HOLIDAY_CODE,HOLIDAY_NAME,
+            CREATOR,CREATE_TIME,MODIFIER,MODIFIED_TIME,VALID)
+        VALUES
+        <foreach collection="list" close="" index="index" item="item" open="" separator=",">
+            (#{item.workDate},#{item.workdayCode},#{item.workdayName},#{item.weekCode},#{item.weekName},
+             #{item.weekendCode},#{item.weekendName},#{item.holidayCode},#{item.holidayName},#{item.creator},
+            #{item.createTime},#{item.modifier},#{item.modifiedTime},#{item.valid})
+        </foreach>
+    </insert>
+
+    <select id="getHolidayList" parameterType="com.persagy.calendar.pojo.vo.HolidayQueryVO" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM t_holiday
+        WHERE 1=1
+        <if test="(startTime != null and startTime != '') and (endTime != null and endTime != '')">
+            AND WORK_DATE BETWEEN #{startTime} AND #{endTime}
+        </if>
+    </select>
+
+</mapper>