|
@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.holiday.HolidayDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopExecutionPlanMapper;
|
|
import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopExecutionPlanMapper;
|
|
@@ -14,12 +15,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import jakarta.annotation.Resource;
|
|
import jakarta.annotation.Resource;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.checkerframework.checker.units.qual.A;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.Set;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* SOP计划执行 Service 实现类
|
|
* SOP计划执行 Service 实现类
|
|
@@ -96,7 +101,7 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
// 年
|
|
// 年
|
|
|
if (frequencyUnit.equals(0)) {
|
|
if (frequencyUnit.equals(0)) {
|
|
|
// 处理年的数据
|
|
// 处理年的数据
|
|
|
- String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
|
|
|
|
+ String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
List<String> adjacentDatesYearDay = SuperDateUtils.getAdjacentDatesYearDay(
|
|
List<String> adjacentDatesYearDay = SuperDateUtils.getAdjacentDatesYearDay(
|
|
|
yyyymmdd,
|
|
yyyymmdd,
|
|
|
"9999-12-31",
|
|
"9999-12-31",
|
|
@@ -108,7 +113,7 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
// 月
|
|
// 月
|
|
|
if (frequencyUnit.equals(1)) {
|
|
if (frequencyUnit.equals(1)) {
|
|
|
// 处理月的数据
|
|
// 处理月的数据
|
|
|
- String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
|
|
|
|
+ String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
List<String> adjacentDatesMonthDay = SuperDateUtils.getAdjacentDatesMonthDay(
|
|
List<String> adjacentDatesMonthDay = SuperDateUtils.getAdjacentDatesMonthDay(
|
|
|
yyyymmdd,
|
|
yyyymmdd,
|
|
|
"9999-12-31",
|
|
"9999-12-31",
|
|
@@ -120,7 +125,7 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
// 周
|
|
// 周
|
|
|
if (frequencyUnit.equals(2)) {
|
|
if (frequencyUnit.equals(2)) {
|
|
|
// 处理周的数据
|
|
// 处理周的数据
|
|
|
- String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
|
|
|
|
+ String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
List<String> adjacentDatesByWeekday = SuperDateUtils.getAdjacentDatesByWeekday(
|
|
List<String> adjacentDatesByWeekday = SuperDateUtils.getAdjacentDatesByWeekday(
|
|
|
yyyymmdd,
|
|
yyyymmdd,
|
|
|
"9999-12-31",
|
|
"9999-12-31",
|
|
@@ -132,7 +137,7 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
// 天
|
|
// 天
|
|
|
if (frequencyUnit.equals(3)) {
|
|
if (frequencyUnit.equals(3)) {
|
|
|
// 处理天的数据
|
|
// 处理天的数据
|
|
|
- String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
|
|
|
|
+ String yyyymmdd = StringUtils.isBlank(effectiveTime) ? SuperDateUtils.getYYYYMMDD() : effectiveTime;
|
|
|
List<String> adjacentDatesByDay = SuperDateUtils.getAdjacentDatesByDay(
|
|
List<String> adjacentDatesByDay = SuperDateUtils.getAdjacentDatesByDay(
|
|
|
yyyymmdd,
|
|
yyyymmdd,
|
|
|
"9999-12-31",
|
|
"9999-12-31",
|
|
@@ -215,10 +220,10 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
bean.getFrequency(),
|
|
bean.getFrequency(),
|
|
|
count);
|
|
count);
|
|
|
}
|
|
}
|
|
|
- // 3.去除日历里面安排的休息日
|
|
|
|
|
- List<String> workDaysFromDays = holidayService.getWorkDaysFromDays(days);
|
|
|
|
|
|
|
+ // 3.开始处理有效时间
|
|
|
|
|
+ List<String> workDaysFromDays = handleNonWork(days, sopExecutionPlanDO.getNonWorkDay(), sopExecutionPlanDO.getNonWorkMoveDay());
|
|
|
// 4.获取有效天数的模拟数据
|
|
// 4.获取有效天数的模拟数据
|
|
|
- if (!workDaysFromDays.isEmpty()) {
|
|
|
|
|
|
|
+ if (workDaysFromDays != null && !workDaysFromDays.isEmpty()) {
|
|
|
for (String s : workDaysFromDays) {
|
|
for (String s : workDaysFromDays) {
|
|
|
SopPreviewDataVO sopPreviewDataVO = new SopPreviewDataVO();
|
|
SopPreviewDataVO sopPreviewDataVO = new SopPreviewDataVO();
|
|
|
sopPreviewDataVO.setPlanDay(s);
|
|
sopPreviewDataVO.setPlanDay(s);
|
|
@@ -234,6 +239,88 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
|
|
|
return bean;
|
|
return bean;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理非工作日的数据
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param days 生成的日期,未作非工作日处理
|
|
|
|
|
+ * @param nonWorkDay 非工作日(0-照常执行 1-不执行 2-向前顺延 3-向后顺延 )
|
|
|
|
|
+ * @param nonWorkMoveDay 延长天数
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<String> handleNonWork(List<String> days, Integer nonWorkDay, Integer nonWorkMoveDay) {
|
|
|
|
|
+ if (days.isEmpty() || nonWorkDay == null) {
|
|
|
|
|
+ return days;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 1.照常执行
|
|
|
|
|
+ if (nonWorkDay.equals(0)) {
|
|
|
|
|
+ return days;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 2.不执行
|
|
|
|
|
+ if (nonWorkDay.equals(1)) {
|
|
|
|
|
+ List<String> workDaysFromDays = holidayService.getWorkDaysFromDays(days);
|
|
|
|
|
+ return workDaysFromDays;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 3.向前顺延
|
|
|
|
|
+ if (nonWorkDay.equals(2) && nonWorkMoveDay != null && nonWorkMoveDay > 0) {
|
|
|
|
|
+ Set<String> workDaysFromDays = new HashSet<>();
|
|
|
|
|
+ // 属于假日的日期
|
|
|
|
|
+ List<HolidayDO> holidayDOS = holidayService.list(Wrappers.<HolidayDO>lambdaQuery()
|
|
|
|
|
+ .in(HolidayDO::getTheDay, days)
|
|
|
|
|
+ .eq(HolidayDO::getHolidayType, "HOLIDAY"));
|
|
|
|
|
+ // 循环,把假日的日期往前顺延
|
|
|
|
|
+ for (String day : days) {
|
|
|
|
|
+ boolean b = false;
|
|
|
|
|
+ for (HolidayDO holidayDO : holidayDOS) {
|
|
|
|
|
+ if (holidayDO.getTheDay().equals(day)) {
|
|
|
|
|
+ b = true;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (b) {
|
|
|
|
|
+ // 节假日,开始顺延变更数据
|
|
|
|
|
+ LocalDate parse = LocalDate.parse(day);
|
|
|
|
|
+ LocalDate localDate = parse.minusDays(nonWorkMoveDay);
|
|
|
|
|
+ String string = localDate.toString();
|
|
|
|
|
+ workDaysFromDays.add(string);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 工作日,不做处理
|
|
|
|
|
+ workDaysFromDays.add(day);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return workDaysFromDays.stream().sorted().toList();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 4.向后顺延
|
|
|
|
|
+ if (nonWorkDay.equals(2) && nonWorkMoveDay != null && nonWorkMoveDay > 0) {
|
|
|
|
|
+ Set<String> workDaysFromDays = new HashSet<>();
|
|
|
|
|
+ // 属于假日的日期
|
|
|
|
|
+ List<HolidayDO> holidayDOS = holidayService.list(Wrappers.<HolidayDO>lambdaQuery()
|
|
|
|
|
+ .in(HolidayDO::getTheDay, days)
|
|
|
|
|
+ .eq(HolidayDO::getHolidayType, "HOLIDAY"));
|
|
|
|
|
+ // 循环,把假日的日期往前顺延
|
|
|
|
|
+ for (String day : days) {
|
|
|
|
|
+ boolean b = false;
|
|
|
|
|
+ for (HolidayDO holidayDO : holidayDOS) {
|
|
|
|
|
+ if (holidayDO.getTheDay().equals(day)) {
|
|
|
|
|
+ b = true;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (b) {
|
|
|
|
|
+ // 节假日,开始顺延变更数据
|
|
|
|
|
+ LocalDate parse = LocalDate.parse(day);
|
|
|
|
|
+ LocalDate localDate = parse.plusDays(nonWorkMoveDay);
|
|
|
|
|
+ String string = localDate.toString();
|
|
|
|
|
+ workDaysFromDays.add(string);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 工作日,不做处理
|
|
|
|
|
+ workDaysFromDays.add(day);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return workDaysFromDays.stream().sorted().toList();
|
|
|
|
|
+ }
|
|
|
|
|
+ return days;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public SopExecutionPlanRespVO selectSopExecutionPlanBySopId(Long sopId) {
|
|
public SopExecutionPlanRespVO selectSopExecutionPlanBySopId(Long sopId) {
|
|
|
SopExecutionPlanDO sopExecutionPlanDO = getOne(Wrappers.<SopExecutionPlanDO>lambdaQuery()
|
|
SopExecutionPlanDO sopExecutionPlanDO = getOne(Wrappers.<SopExecutionPlanDO>lambdaQuery()
|