Browse Source

处理任务生成时重复的代码

jiawuxian 1 year ago
parent
commit
5f851a6cb0

+ 10 - 10
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java

@@ -341,7 +341,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
      * @param end
      * @return
      */
-    protected Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
+    public static Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
         if (start.after(end)) {
             return false;
         }
@@ -377,7 +377,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
      * @param workTimes,为null则认为全是营业
      * @return
      */
-    protected Map<Short, StartEndTime> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
+    public static Map<Short, DateRange> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
         boolean sameDay = DateUtil.isSameDay(start, end); //一天内按半小时分,
 
         DateUnit dateUnit;
@@ -402,7 +402,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
 
         DateTime segStart = new DateTime(start);
 
-        Map<Short, StartEndTime> r = new HashMap<>();
+        Map<Short, DateRange> r = new HashMap<>();
         for (short i = 1; i <= frequency; i++) {
             if (dateField == DateField.DAY_OF_YEAR) {
                 segStart.setField(DateField.HOUR, 0)
@@ -411,7 +411,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
                         .setField(DateField.MILLISECOND, 0);
             }
             DateTime nextStart = DateUtil.offset(segStart, dateField, (int) (seg));
-            StartEndTime et = new StartEndTime();
+            DateRange et = new DateRange();
             et.setStartTime(segStart);
             DateTime segEnd;
             if (i == frequency) {
@@ -443,10 +443,10 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         return r;
     }
 
-    @Data
-    protected class StartEndTime {
-        private Date startTime;
-
-        private Date endTime;
-    }
+//    @Data
+//    protected class StartEndTime {
+//        private Date startTime;
+//
+//        private Date endTime;
+//    }
 }

+ 2 - 102
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -424,106 +424,6 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         }
     }
 
-    /**
-     * 将当前周期开始结束时间,按频次拆分为多个时段。如果该时段歇业,则不包含该次,如返回次数1,3.
-     *
-     * @param frequency
-     * @param start
-     * @param end
-     * @param workTimes,为null则认为全是营业
-     * @return
-     */
-    private Map<Short, DateRange> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
-        boolean sameDay = DateUtil.isSameDay(start, end); //一天内按半小时分,
-
-        DateUnit dateUnit;
-        DateField dateField;
-        if (sameDay) {
-            dateField = DateField.MINUTE;
-            dateUnit = DateUnit.MINUTE;
-        } else {
-            dateField = DateField.DAY_OF_YEAR;
-            dateUnit = DateUnit.DAY;
-        }
-        double diff = DateUtil.between(start, end, dateUnit);
-        double seg = diff / frequency;
-        if (sameDay) {
-            seg = Math.round(seg / 30) * 30;
-        } else {
-            seg = Math.round(seg);
-            if (cycle == CycleCommonEnum.DAILY && frequency == 3) {
-                seg = 10;
-            }
-        }
-
-        DateTime segStart = new DateTime(start);
-
-        Map<Short, DateRange> r = new HashMap<>();
-        for (short i = 1; i <= frequency; i++) {
-            if (dateField == DateField.DAY_OF_YEAR) {
-                segStart.setField(DateField.HOUR, 0)
-                        .setField(DateField.MINUTE, 0)
-                        .setField(DateField.SECOND, 0)
-                        .setField(DateField.MILLISECOND, 0);
-            }
-            DateTime nextStart = DateUtil.offset(segStart, dateField, (int) (seg));
-            DateRange et = new DateRange();
-            et.setStartTime(segStart);
-            DateTime segEnd;
-            if (i == frequency) {
-                segEnd = new DateTime(end);
-            } else {
-                segEnd = nextStart;
-
-                if (dateField == DateField.DAY_OF_YEAR) {
-                    segEnd = DateUtil.offset(nextStart, DateField.SECOND, -1);
-                    segEnd.setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59).setField(DateField.SECOND, 59);
-                }
-                if (segEnd.after(end)) {
-                    segEnd = new DateTime(end);
-                }
-            }
-            segEnd.setField(DateField.MILLISECOND, 0);
-            et.setEndTime(segEnd);
-            segStart = nextStart;
-
-            if (segEnd.before(new Date())) {
-                continue;
-            }
-
-            if (workTimes == null || containCurrentCycle(workTimes, et.getStartTime(), et.getEndTime())) {
-                r.put(i, et);
-            }
-        }
-
-        return r;
-    }
-
-    /**
-     * 获取作息日期与当前周期是否有交集
-     *
-     * @param workTimes
-     * @param start
-     * @param end
-     * @return
-     */
-    private Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
-        if (start.after(end)) {
-            return false;
-        }
-        Set<Long> timeValues = workTimes.stream().map(t -> t.getYmdDate().getTime()).collect(Collectors.toSet());
-        while (true) {
-            if (timeValues.contains(DateUtil.beginOfDay(start).getTime())) {
-                return true;
-            }
-
-            start = DateUtil.offset(start, DateField.DAY_OF_YEAR, 1);
-            if (start.equals(end) || start.after(end)) {
-                return false;
-            }
-        }
-    }
-
     private List<SysOrg> getExecOrgList(CoreDrillPlanDataVo plan, Date start, Date end) {
         List<CoreDrillPlanToExecOrg> planExecOrgList = plan.getPlanExecOrgList();
         List<SysOrg> orgList;
@@ -577,12 +477,12 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             Map<Short, DateRange> rangeMap;
             if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType())) {
                 if (ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
-                    rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
+                    rangeMap = TaskCreatingServiceImplBase. splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
                 } else {
                     continue;
                 }
             } else {
-                rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
+                rangeMap = TaskCreatingServiceImplBase.splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
             }
             int x = 0;
             for (Map.Entry<Short, DateRange> rangeEntry : rangeMap.entrySet()) {

+ 27 - 101
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -43,6 +43,7 @@ import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.edu.mapper.*;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
@@ -454,105 +455,30 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         }
     }
 
-    /**
-     * 将当前周期开始结束时间,按频次拆分为多个时段。如果该时段歇业,则不包含该次,如返回次数1,3.
-     *
-     * @param frequency
-     * @param start
-     * @param end
-     * @param workTimes,为null则认为全是营业
-     * @return
-     */
-    private Map<Short, DateRange> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
-        boolean sameDay = DateUtil.isSameDay(start, end); //一天内按半小时分,
-
-        DateUnit dateUnit;
-        DateField dateField;
-        if (sameDay) {
-            dateField = DateField.MINUTE;
-            dateUnit = DateUnit.MINUTE;
-        } else {
-            dateField = DateField.DAY_OF_YEAR;
-            dateUnit = DateUnit.DAY;
-        }
-        double diff = DateUtil.between(start, end, dateUnit);
-        double seg = diff / frequency;
-        if (sameDay) {
-            seg = Math.round(seg / 30) * 30;
-        } else {
-            seg = Math.round(seg);
-            if (cycle == CycleCommonEnum.DAILY && frequency == 3) {
-                seg = 10;
-            }
-        }
-
-        DateTime segStart = new DateTime(start);
-
-        Map<Short, DateRange> r = new HashMap<>();
-        for (short i = 1; i <= frequency; i++) {
-            if (dateField == DateField.DAY_OF_YEAR) {
-                segStart.setField(DateField.HOUR, 0)
-                        .setField(DateField.MINUTE, 0)
-                        .setField(DateField.SECOND, 0)
-                        .setField(DateField.MILLISECOND, 0);
-            }
-            DateTime nextStart = DateUtil.offset(segStart, dateField, (int) (seg));
-            DateRange et = new DateRange();
-            et.setStartTime(segStart);
-            DateTime segEnd;
-            if (i == frequency) {
-                segEnd = new DateTime(end);
-            } else {
-                segEnd = nextStart;
-
-                if (dateField == DateField.DAY_OF_YEAR) {
-                    segEnd = DateUtil.offset(nextStart, DateField.SECOND, -1);
-                    segEnd.setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59).setField(DateField.SECOND, 59);
-                }
-                if (segEnd.after(end)) {
-                    segEnd = new DateTime(end);
-                }
-            }
-            segEnd.setField(DateField.MILLISECOND, 0);
-            et.setEndTime(segEnd);
-            segStart = nextStart;
-
-            if (segEnd.before(new Date())) {
-                continue;
-            }
-
-            if (workTimes == null || containCurrentCycle(workTimes, et.getStartTime(), et.getEndTime())) {
-                r.put(i, et);
-            }
-        }
-
-        return r;
-    }
-
-    /**
-     * 获取作息日期与当前周期是否有交集
-     *
-     * @param workTimes
-     * @param start
-     * @param end
-     * @return
-     */
-    private Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
-        if (start.after(end)) {
-            return false;
-        }
-        Set<Long> timeValues = workTimes.stream().map(t -> t.getYmdDate().getTime()).collect(Collectors.toSet());
-        while (true) {
-            if (timeValues.contains(DateUtil.beginOfDay(start).getTime())) {
-                return true;
-            }
-
-            start = DateUtil.offset(start, DateField.DAY_OF_YEAR, 1);
-            if (start.equals(end) || start.after(end)) {
-                return false;
-            }
-        }
-    }
+//    /**
+//     * 获取作息日期与当前周期是否有交集
+//     *
+//     * @param workTimes
+//     * @param start
+//     * @param end
+//     * @return
+//     */
+//    private Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
+//        if (start.after(end)) {
+//            return false;
+//        }
+//        Set<Long> timeValues = workTimes.stream().map(t -> t.getYmdDate().getTime()).collect(Collectors.toSet());
+//        while (true) {
+//            if (timeValues.contains(DateUtil.beginOfDay(start).getTime())) {
+//                return true;
+//            }
+//
+//            start = DateUtil.offset(start, DateField.DAY_OF_YEAR, 1);
+//            if (start.equals(end) || start.after(end)) {
+//                return false;
+//            }
+//        }
+//    }
 
 
     private void saveTaskAndRoleData(CoreEduTrainingPlanDataVo plan, Date start, Date end, List<SysOrg> orgList, List<SysWorkTime> workTimeList) {
@@ -576,12 +502,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             Map<Short, DateRange> rangeMap;
             if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType())) {
                 if (ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
-                    rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
+                    rangeMap = TaskCreatingServiceImplBase.splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
                 } else {
                     continue;
                 }
             } else {
-                rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
+                rangeMap = TaskCreatingServiceImplBase.splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
             }
 
 

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -489,7 +489,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         if (ObjectUtil.equal(execOrg.getIsLock(), 1)) {
             return new ArrayList<>();
         }
-        Map<Short, StartEndTime> rangeMap = null;
+        Map<Short, DateRange> rangeMap = null;
 
 
         List<Resumption> resumptionList = new ArrayList<>();
@@ -533,7 +533,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
                 continue;
             }
 
-            StartEndTime timeRange = rangeMap.get(i);
+            DateRange timeRange = rangeMap.get(i);
 
             Resumption resumption = new Resumption();
             Ymd ymd = Ymd.of(timeRange.getStartTime());

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java

@@ -420,7 +420,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
             //配合履职次数为short类型
             short coun = Short.parseShort(plan.getCount().toString());
             //获取当前受检机构当前周期营业中的作息
-            Map<Short, StartEndTime> rangeMap = null;
+            Map<Short, DateRange> rangeMap = null;
             if (needUsedWorkTime(org)) {
                 List<SysWorkTime> workTimes = getWorkTime(dateRange.getStartTime(), dateRange.getEndTime(), org.getId());
                 if (CollectionUtil.isEmpty(workTimes)) {
@@ -441,7 +441,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
                 if (!rangeMap.containsKey(i)) {
                     continue;
                 }
-                StartEndTime timeRange = rangeMap.get(i);
+                DateRange timeRange = rangeMap.get(i);
                 vo = new PlanTaskBuildVo();
                 vo.setPlanId(plan.getId());
                 vo.setEndTime(timeRange.getEndTime());