From 76a00d72eefd843a07bca0095c8af300defe90c7 Mon Sep 17 00:00:00 2001 From: "JinLu.Yin" <411641505@qq.com> Date: Sun, 12 Jun 2022 22:49:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E7=8F=AD=E6=97=A5=E5=8E=86=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ktg/RuoYiApplication.java | 2 + .../ktg/common/constant/UserConstants.java | 4 + .../mes/cal/controller/CalPlanController.java | 13 + .../com/ktg/mes/cal/mapper/CalPlanMapper.java | 1 + .../ktg/mes/cal/mapper/CalShiftMapper.java | 2 + .../mes/cal/mapper/CalTeamshiftMapper.java | 2 + .../mes/cal/service/ICalPlanTeamService.java | 3 + .../ktg/mes/cal/service/ICalShiftService.java | 8 + .../mes/cal/service/ICalTeamshiftService.java | 5 + .../service/impl/CalPlanTeamServiceImpl.java | 7 + .../cal/service/impl/CalShiftServiceImpl.java | 7 + .../service/impl/CalTeamshiftServiceImpl.java | 280 +++++++++++ .../com/ktg/mes/cal/utils/CalendarUtil.java | 441 +++++++++++++++++- .../resources/mapper/cal/CalPlanMapper.xml | 2 +- 14 files changed, 773 insertions(+), 4 deletions(-) diff --git a/ktg-admin/src/main/java/com/ktg/RuoYiApplication.java b/ktg-admin/src/main/java/com/ktg/RuoYiApplication.java index 15e6274..f680b19 100644 --- a/ktg-admin/src/main/java/com/ktg/RuoYiApplication.java +++ b/ktg-admin/src/main/java/com/ktg/RuoYiApplication.java @@ -3,12 +3,14 @@ package com.ktg; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableAsync; /** * 启动程序 * * @author ruoyi */ +@EnableAsync @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class RuoYiApplication { diff --git a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java index cc92601..abe3ad2 100644 --- a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java +++ b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java @@ -140,6 +140,10 @@ public class UserConstants public static final String CAL_SHIFT_NAME_DAY="白班"; public static final String CAL_SHIFT_NAME_NIGHT="夜班"; public static final String CAL_SHIFT_NAME_MID="中班"; + public static final String CAL_SHIFT_METHOD_QUARTER="QUARTER"; + public static final String CAL_SHIFT_METHOD_MONTH="MONTH"; + public static final String CAL_SHIFT_METHOD_WEEK="WEEK"; + public static final String CAL_SHIFT_METHOD_DAY="DAY"; /** * 排班日历的查询方式 diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/controller/CalPlanController.java b/ktg-mes/src/main/java/com/ktg/mes/cal/controller/CalPlanController.java index 8f3defd..7a4ce5f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/controller/CalPlanController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/controller/CalPlanController.java @@ -1,10 +1,14 @@ package com.ktg.mes.cal.controller; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; import javax.servlet.http.HttpServletResponse; +import com.ktg.common.constant.UserConstants; import com.ktg.mes.cal.service.ICalPlanTeamService; import com.ktg.mes.cal.service.ICalShiftService; +import com.ktg.mes.cal.service.ICalTeamshiftService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -44,6 +48,9 @@ public class CalPlanController extends BaseController @Autowired private ICalPlanTeamService calPlanTeamService; + @Autowired + private ICalTeamshiftService calTeamshiftService; + /** * 查询排班计划列表 */ @@ -94,14 +101,20 @@ public class CalPlanController extends BaseController return toAjax(ret); } + /** * 修改排班计划 */ @PreAuthorize("@ss.hasPermi('mes:cal:calplan:edit')") @Log(title = "排班计划", businessType = BusinessType.UPDATE) + @Transactional @PutMapping public AjaxResult edit(@RequestBody CalPlan calPlan) { + if(UserConstants.ORDER_STATUS_CONFIRMED.equals(calPlan.getStatus())){ + + calTeamshiftService.genRecords(calPlan.getPlanId()); + } return toAjax(calPlanService.updateCalPlan(calPlan)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalPlanMapper.java b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalPlanMapper.java index 772504d..958a266 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalPlanMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalPlanMapper.java @@ -30,6 +30,7 @@ public interface CalPlanMapper + /** * 新增排班计划 * diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalShiftMapper.java b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalShiftMapper.java index aa506c7..c965988 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalShiftMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalShiftMapper.java @@ -28,6 +28,8 @@ public interface CalShiftMapper public List selectCalShiftList(CalShift calShift); + + public int checkShiftCount(Long planId); /** diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalTeamshiftMapper.java b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalTeamshiftMapper.java index a01b107..7250a84 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalTeamshiftMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/mapper/CalTeamshiftMapper.java @@ -27,6 +27,8 @@ public interface CalTeamshiftMapper */ public List selectCalTeamshiftList(CalTeamshift calTeamshift); + + /** * 新增班组排班 * diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalPlanTeamService.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalPlanTeamService.java index 54f9886..98dcab0 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalPlanTeamService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalPlanTeamService.java @@ -27,6 +27,9 @@ public interface ICalPlanTeamService */ public List selectCalPlanTeamList(CalPlanTeam calPlanTeam); + public List selectCalPlanTeamListByPlanId(Long plandId); + + public String checkPlanTeamUnique(CalPlanTeam calPlanTeam); /** diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalShiftService.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalShiftService.java index d031f22..d8954d1 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalShiftService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalShiftService.java @@ -27,6 +27,14 @@ public interface ICalShiftService */ public List selectCalShiftList(CalShift calShift); + /** + * 根据计划ID查询班次 + * @param planId + * @return + */ + public List selectCalShiftListByPlanId(Long planId); + + public int checkShiftCount(Long planId); diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalTeamshiftService.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalTeamshiftService.java index b85dd7f..25a2a96 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalTeamshiftService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/ICalTeamshiftService.java @@ -58,4 +58,9 @@ public interface ICalTeamshiftService * @return 结果 */ public int deleteCalTeamshiftByRecordId(Long recordId); + + + public void genRecords(Long plandId); + + } diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalPlanTeamServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalPlanTeamServiceImpl.java index 637b345..636433b 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalPlanTeamServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalPlanTeamServiceImpl.java @@ -47,6 +47,13 @@ public class CalPlanTeamServiceImpl implements ICalPlanTeamService return calPlanTeamMapper.selectCalPlanTeamList(calPlanTeam); } + @Override + public List selectCalPlanTeamListByPlanId(Long plandId) { + CalPlanTeam param = new CalPlanTeam(); + param.setPlanId(plandId); + return calPlanTeamMapper.selectCalPlanTeamList(param); + } + @Override public String checkPlanTeamUnique(CalPlanTeam calPlanTeam) { CalPlanTeam team = calPlanTeamMapper.checkPlanTeamUnique(calPlanTeam); diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalShiftServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalShiftServiceImpl.java index e4b6989..fea9ab5 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalShiftServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalShiftServiceImpl.java @@ -46,6 +46,13 @@ public class CalShiftServiceImpl implements ICalShiftService return calShiftMapper.selectCalShiftList(calShift); } + @Override + public List selectCalShiftListByPlanId(Long planId) { + CalShift param = new CalShift(); + param.setPlanId(planId); + return calShiftMapper.selectCalShiftList(param); + } + @Override public int checkShiftCount(Long planId) { return calShiftMapper.checkShiftCount(planId); diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalTeamshiftServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalTeamshiftServiceImpl.java index 2a6c61f..4d28b28 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalTeamshiftServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/service/impl/CalTeamshiftServiceImpl.java @@ -1,8 +1,20 @@ package com.ktg.mes.cal.service.impl; +import java.util.Date; import java.util.List; + +import cn.hutool.core.collection.CollUtil; +import com.ktg.common.constant.UserConstants; import com.ktg.common.utils.DateUtils; +import com.ktg.mes.cal.domain.CalPlan; +import com.ktg.mes.cal.domain.CalPlanTeam; +import com.ktg.mes.cal.domain.CalShift; +import com.ktg.mes.cal.mapper.CalPlanMapper; +import com.ktg.mes.cal.mapper.CalPlanTeamMapper; +import com.ktg.mes.cal.mapper.CalShiftMapper; +import com.ktg.mes.cal.utils.CalendarUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.ktg.mes.cal.mapper.CalTeamshiftMapper; import com.ktg.mes.cal.domain.CalTeamshift; @@ -20,6 +32,15 @@ public class CalTeamshiftServiceImpl implements ICalTeamshiftService @Autowired private CalTeamshiftMapper calTeamshiftMapper; + @Autowired + private CalPlanMapper calPlanMapper; + + @Autowired + private CalShiftMapper calShiftMapper; + + @Autowired + private CalPlanTeamMapper calPlanTeamMapper; + /** * 查询班组排班 * @@ -93,4 +114,263 @@ public class CalTeamshiftServiceImpl implements ICalTeamshiftService { return calTeamshiftMapper.deleteCalTeamshiftByRecordId(recordId); } + + /** + * 根据排班计划生成每个班组的明细排班记录 + * 1.查询计划头 + * 2.查询计划中的班组 + * 3.查询计划中的班次 + * 4.计算计划的开始日期和结束日期的差值 + * 5.遍历每一天,设置每一天的班组与班次的对应关系(要结合轮班方式) + * @param plandId + */ + @Async + @Override + public void genRecords(Long plandId) { + CalPlan plan =calPlanMapper.selectCalPlanByPlanId(plandId); + CalShift p1 = new CalShift(); + p1.setPlanId(plandId); + List shifts = calShiftMapper.selectCalShiftList(p1); + CalPlanTeam p2 = new CalPlanTeam(); + p2.setPlanId(plandId); + List teams = calPlanTeamMapper.selectCalPlanTeamList(p2); + Long days = CalendarUtil.getDateDiff(plan.getStartDate(),plan.getEndDate()); + + int shiftIndex =0; + Date nowDate =null; + for(int i =0;i teamshifts = calTeamshiftMapper.selectCalTeamshiftList(param); + if(CollUtil.isNotEmpty(teamshifts)){ + calTeamshift.setRecordId(teamshifts.get(0).getRecordId()); + calTeamshiftMapper.updateCalTeamshift(calTeamshift); + }else{ + calTeamshiftMapper.insertCalTeamshift(calTeamshift); + } + } + } diff --git a/ktg-mes/src/main/java/com/ktg/mes/cal/utils/CalendarUtil.java b/ktg-mes/src/main/java/com/ktg/mes/cal/utils/CalendarUtil.java index 1d4430c..a5d503c 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/cal/utils/CalendarUtil.java +++ b/ktg-mes/src/main/java/com/ktg/mes/cal/utils/CalendarUtil.java @@ -4,6 +4,8 @@ import com.ktg.mes.cal.domain.CalCalendar; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; @@ -12,8 +14,335 @@ public class CalendarUtil { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + /** + * 星期日; + */ + public static final String SUNDAY = "星期日"; - private static Date getMonthStart(Date date) { + /** + * 星期一; + */ + public static final String MONDAY = "星期一"; + + /** + * 星期二; + */ + public static final String TUESDAY = "星期二"; + + /** + * 星期三; + */ + public static final String WEDNESDAY = "星期三"; + + /** + * 星期四; + */ + public static final String THURSDAY = "星期四"; + + /** + * 星期五; + */ + public static final String FRIDAY = "星期五"; + + /** + * 星期六; + */ + public static final String SATURDAY = "星期六"; + + /** + * 显示年月日时分秒,例如 2015-08-11 09:51:53. + */ + public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + /** + * 显示年月日时分,例如 2015-08-11 09:51. + */ + public static final String NO_SECOND_DATETIME_PATTERN = "yyyy-MM-dd HH:mm"; + /** + * 仅显示年月日,例如 2015-08-11. + */ + public static final String DATE_PATTERN = "yyyy-MM-dd"; + /** + * 仅显示时分秒,例如 09:51:53. + */ + public static final String TIME_PATTERN = "HH:mm:ss"; + /** + * 显示年月日时分秒(由/分割),例如 2015/08/11 09:51:53. + */ + public static final String DATETIME_PATTERN_WITH_SLASH = "yyyy/MM/dd HH:mm:ss"; + /** + * 显示年月日(由/分割),例如 2015/08/11. + */ + public static final String DATE_PATTERN_WITH_SLASH = "yyyy/MM/dd"; + /** + * 仅显示年(无符号),例如 2015. + */ + private static final String YEAR_PATTERN = "yyyy"; + /** + * 仅显示年月,例如 2015-08. + */ + private static final String MONTH_PATTERN = "yyyy-MM"; + + /** + * 获取当前日期和时间字符串. + * + * @return String 日期时间字符串,例如 2015-08-11 09:51:53 + */ + public static String getDateTimeStr() { + return format(new Date(), DATETIME_PATTERN); + } + + /** + * 时间戳转换为日期时间字符串 + * + * @param timestamp 时间戳 + * @param pattern 日期格式 例如DATETIME_PATTERN + * @return String 日期时间字符串,例如 2015-08-11 09:51:53 + */ + public static String getDateTimeStr(long timestamp, String pattern) { + return new SimpleDateFormat(pattern).format(timestamp); + } + + /** + * 获取当前日期字符串. + * + * @return String 日期字符串,例如2015-08-11 + */ + public static String getDateStr() { + return format(new Date(), DATE_PATTERN); + } + + /** + * 获取指定日期字符串. + * + * @return String 日期字符串,例如2015-08-11 + */ + public static String getDateStr(Date theday) { + return format(theday, DATE_PATTERN); + } + + /** + * 获取当前时间字符串. + * + * @return String 时间字符串,例如 09:51:53 + */ + public static String getTimeStr() { + return format(new Date(), TIME_PATTERN); + } + + /** + * 获取当前年份字符串. + * + * @return String 当前年份字符串,例如 2015 + */ + public static String getYearStr() { + return format(new Date(), YEAR_PATTERN); + } + + /** + * 获取当前月份字符串. + * + * @return String 当前月份字符串,例如 08 + */ + public static String getMonthStr() { + return format(new Date(), "MM"); + } + + /** + * 获取当前天数字符串. + * + * @return String 当前天数字符串,例如 11 + */ + public static String getDayStr() { + return format(new Date(), "dd"); + } + + /** + * 获取当前星期字符串. + * + * @return String 当前星期字符串,例如 星期二 + */ + public static String getDayOfWeekStr() { + return format(new Date(), "E"); + } + + /** + * 获取指定日期是星期几 + * + * @param date 日期 + * @return String 星期几 + */ + public static String getDayOfWeekStr(Date date) { + String[] weekOfDays = {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int num = calendar.get(Calendar.DAY_OF_WEEK) - 1; + return weekOfDays[num]; + } + + + /** + * 获取日期时间字符串 + * + * @param date 需要转化的日期时间 + * @param pattern 时间格式 + * @return String 日期时间字符串,例如 2015-08-11 09:51:53 + */ + public static String format(Date date, String pattern) { + return new SimpleDateFormat(pattern).format(date); + } + + /** + * 获取指定日期num年数之后的日期. + * + * @param num 间隔年数(负数表示之前) + * @return Date 日期 + */ + public static Date addYears(Date date, int num) { + return add(date, num, Calendar.YEAR); + } + + /** + * 获取指定日期num月数之后的日期. + * + * @param num 间隔月数(负数表示之前) + * @return Date 日期 + */ + public static Date addMonths(Date date, int num) { + return add(date, num, Calendar.MONTH); + } + + /** + * 获取指定日期num周数之后的日期. + * + * @param date 日期 + * @param num 周数(负数表示之前) + * @return Date 新的日期 + */ + public static Date addWeeks(Date date, int num) { + return add(date, num, Calendar.WEEK_OF_YEAR); + } + + /** + * 获取指定日期num天数之后的日期. + * + * @param date 日期 + * @param num 天数(负数表示之前) + * @return Date 新的日期 + */ + public static Date addDays(Date date, int num) { + return add(date, num, Calendar.DAY_OF_MONTH); + } + + /** + * 获取指定日期num小时之后的日期. + * + * @param date 日期 + * @param num 小时数(负数表示之前) + * @return Date 新的日期 + */ + public static Date addHours(Date date, int num) { + return add(date, num, Calendar.HOUR_OF_DAY); + } + + /** + * 获取指定日期num分钟之后的日期. + * + * @param date 日期 + * @param num 分钟数(负数表示之前) + * @return Date 新的日期 + */ + public static Date addMinutes(Date date, int num) { + return add(date, num, Calendar.MINUTE); + } + + /** + * 获取指定日期num秒钟之后的日期. + * + * @param date 日期 + * @param num 秒钟数(负数表示之前) + * @return Date 新的日期 + */ + public static Date addSeconds(Date date, int num) { + return add(date, num, Calendar.SECOND); + } + + /** + * 获取当前日期指定数量日期时间单位之后的日期. + * + * @param date 日期 + * @param num 数量 + * @param unit 日期时间单位 + * @return Date 新的日期 + */ + public static Date add(Date date, int num, int unit) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(unit, num); + return calendar.getTime(); + } + + /** + * 获取本周的第一天,一个星期的第一天是星期一,最后一天是星期天 + * + * @return Calendar 日历 + */ + public static Date getStartDayOfWeek(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + return calendar.getTime(); + } + + /** + * 获取本周的最后一天,一个星期的第一天是星期一,最后一天是星期天 + * + * @return Calendar 日历 + */ + public static Date getEndDayOfWeek(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + return calendar.getTime(); + } + + /** + * 获取指定日期当周第一天的日期字符串 + * + * @param date 指定日期 + * @return String 格式:yyyy-MM-dd + */ + public static String getWeekStartTimeStr(Date date) { + return getDateStr(getStartDayOfWeek(date)); + } + + /** + * 获取本周最后一天的日期字符串 + * + * @return String 格式:yyyy-MM-dd + */ + public static String getWeekEndTimeStr() { + return getDateStr(getEndDayOfWeek(new Date())); + } + + + /** + * 获取指定日期所在月份的开始日期 + * @param date + * @return + */ + public static Date getMonthStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int index = calendar.get(Calendar.DAY_OF_MONTH); @@ -21,7 +350,12 @@ public class CalendarUtil { return calendar.getTime(); } - private static Date getMonthEnd(Date date) { + /** + * 获取指定日期所在月份的最后一天 + * @param date + * @return + */ + public static Date getMonthEnd(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); @@ -30,6 +364,74 @@ public class CalendarUtil { return calendar.getTime(); } + /** + * 获取指定日期对应月份第一天 + * @param date + * @return + */ + public static String getMonthStartStr(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int index = calendar.get(Calendar.DAY_OF_MONTH); + calendar.add(Calendar.DATE, (1 - index)); + return sdf.format(calendar.getTime()); + } + + /** + * 获取指定日期对应月份最后一天 + * @param date + * @return + */ + public static String getMonthEndStr(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, 1); + int index = calendar.get(Calendar.DAY_OF_MONTH); + calendar.add(Calendar.DATE, (-index)); + return sdf.format(calendar.getTime()); + } + + + /** + * 获取指定日期对应季度的第一天 + * @param theDay + * @return + */ + public static String getQuarterStartStr(Date theDay){ + LocalDate resDate = null; + if (theDay == null) { + resDate = LocalDate.now(); + }else{ + resDate = LocalDate.parse(sdf.format(theDay),formatter); + } + Month month = resDate.getMonth(); + Month firstMonthOfQuarter = month.firstMonthOfQuarter(); + + resDate = LocalDate.of(resDate.getYear(), firstMonthOfQuarter, 1); + + return resDate.toString(); + } + + /** + * 获取指定日期对应季度的最后一天 + * @param theDay + * @return + */ + public static String getQuarterEandStr(Date theDay){ + LocalDate resDate = LocalDate.now(); + if (theDay == null) { + resDate = LocalDate.now(); + }else { + resDate = LocalDate.parse(sdf.format(theDay),formatter); + } + Month month = resDate.getMonth(); + Month firstMonthOfQuarter = month.firstMonthOfQuarter(); + Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2); + resDate = LocalDate.of(resDate.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(resDate.isLeapYear())); + return resDate.toString(); + } + + private static Date getNext(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); @@ -40,7 +442,7 @@ public class CalendarUtil { public static Long getDateDiff(Date start,Date end){ LocalDate sdate = LocalDate.parse(sdf.format(start),formatter); LocalDate edate = LocalDate.parse(sdf.format(end),formatter); - return edate.until(sdate,ChronoUnit.DAYS); + return sdate.until(edate,ChronoUnit.DAYS); } public static Long getDateDiff(String start,Date end){ @@ -67,6 +469,13 @@ public class CalendarUtil { return edate.until(sdate,ChronoUnit.DAYS); } + public static Date getDatePlus(Date theDay,Integer count){ + LocalDate sdate = LocalDate.parse(sdf.format(theDay),formatter); + sdate.plusDays(count); + return Date.from(sdate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + /** * 获取指定月份的所有日期 * @param d @@ -84,4 +493,30 @@ public class CalendarUtil { } return lst; } + + /** + * 获取指定日期前后N天的所有日期 + * @param date + * @param num + * @param pattern + * @return + */ + public static List getDateStrList(Date date, int num, String pattern) { + List result = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + c.setTime(date); + boolean flag = false; + if (num < 0) { + num = Math.abs(num); + flag = true; + } + for (int i = 0; i < num; i++) { + result.add(new SimpleDateFormat(pattern).format(c.getTimeInMillis())); + c.add(Calendar.DATE, flag ? -1 : 1); + } + if (flag) { + Collections.reverse(result); + } + return result; + } } diff --git a/ktg-mes/src/main/resources/mapper/cal/CalPlanMapper.xml b/ktg-mes/src/main/resources/mapper/cal/CalPlanMapper.xml index 57985d2..9aad506 100644 --- a/ktg-mes/src/main/resources/mapper/cal/CalPlanMapper.xml +++ b/ktg-mes/src/main/resources/mapper/cal/CalPlanMapper.xml @@ -41,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and shift_type = #{shiftType} and shift_method = #{shiftMethod} and shift_count = #{shiftCount} - and status = #{status} + and status = #{status}