瀏覽代碼

计划周期调整

jiawuxian 2 年之前
父節點
當前提交
65d1ec5f9f

+ 44 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/CycleCommonEnum.java

@@ -0,0 +1,44 @@
+package com.xunmei.common.core.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * 通用周期枚举
+ *
+ * @author xunmei
+ */
+public enum CycleCommonEnum {
+    NONE(0, "无周期"),
+    HOUR(1,"每小时"),
+    DAILY(2, "每日"),
+    WEEKLY(3, "每周"),
+    MONTHLY(4, "每月"),
+    QUARTERLY(5, "每季度"),
+    HALF_YEARLY(6, "每半年"),
+    YEARLY(7, "每年");
+
+    private final Integer code;
+    private final String desc;
+
+    CycleCommonEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static CycleCommonEnum getEnum(Integer code) {
+        CycleCommonEnum[] values = CycleCommonEnum.values();
+        Optional<CycleCommonEnum> opt = Arrays.stream(values).filter(v -> ObjectUtil.equal(v.getCode(), code)).findFirst();
+        return opt.get();
+    }
+}

+ 21 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/EduTrainingPlanCycleEnum.java

@@ -33,4 +33,25 @@ public enum EduTrainingPlanCycleEnum
     {
         return desc;
     }
+
+    public static CycleCommonEnum toCommmonEnum(Integer code){
+        switch (code){
+            case  0:
+                return CycleCommonEnum.NONE;
+            case  1:
+                return CycleCommonEnum.DAILY;
+            case  2:
+                return CycleCommonEnum.WEEKLY;
+            case  3:
+                return CycleCommonEnum.MONTHLY;
+            case  4:
+                return CycleCommonEnum.QUARTERLY;
+            case  5:
+                return CycleCommonEnum.HALF_YEARLY;
+            case  6:
+                return CycleCommonEnum.YEARLY;
+            default:
+                throw new IllegalArgumentException();
+        }
+    }
 }

+ 54 - 55
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.domain.DateRange;
+import com.xunmei.common.core.enums.CycleCommonEnum;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
 import javax.validation.constraints.NotNull;
@@ -123,7 +124,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     /**
      * 计算时间差
      *
-     * @param endTime   最后时间
+     * @param endDate   最后时间
      * @param startTime 开始时间
      * @return 时间差(天/小时/分钟)
      */
@@ -170,64 +171,62 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return toLocalDateTime(date).toLocalDate();
     }
 
-    public static DateRange getStartAndEnd(Date date, int planCycle) {
+    public static DateRange getStartAndEnd(Date date, Integer cycle) {
+        return getStartAndEnd(date, CycleCommonEnum.getEnum(cycle));
+    }
+
+    public static DateRange getStartAndEnd(Date date, CycleCommonEnum cycle) {
+
         LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
         LocalDateTime startDateTime;
         LocalDateTime endDateTime;
         Date startTime;
         Date endTime;
-        switch (planCycle) {
-            case 1: // day
-                startDateTime = localDate.atStartOfDay();
-                endDateTime = localDate.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            case 2: // week
-                LocalDate startOfWeek = localDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
-                LocalDate endOfWeek = localDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
-                startDateTime = startOfWeek.atStartOfDay();
-                endDateTime = endOfWeek.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            case 3: // month
-                LocalDate startOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
-                LocalDate endOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
-                startDateTime = startOfMonth.atStartOfDay();
-                endDateTime = endOfMonth.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            case 4: // quarter
-                Month month = localDate.getMonth();
-                int quarter = (month.getValue() - 1) / 3 + 1;
-                LocalDate startOfQuarter = LocalDate.of(localDate.getYear(), (quarter - 1) * 3 + 1, 1);
-                LocalDate endOfQuarter = startOfQuarter.plusMonths(2).with(TemporalAdjusters.lastDayOfMonth());
-                startDateTime = startOfQuarter.atStartOfDay();
-                endDateTime = endOfQuarter.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            case 5: // half-year
-                int halfYear = (localDate.getMonthValue() - 1) / 6 + 1;
-                LocalDate startOfHalfYear = LocalDate.of(localDate.getYear(), (halfYear - 1) * 6 + 1, 1);
-                LocalDate endOfHalfYear = startOfHalfYear.plusMonths(5).with(TemporalAdjusters.lastDayOfMonth());
-                startDateTime = startOfHalfYear.atStartOfDay();
-                endDateTime = endOfHalfYear.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            case 6: // year
-                LocalDate startOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
-                LocalDate endOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());
-                startDateTime = startOfYear.atStartOfDay();
-                endDateTime = endOfYear.atTime(LocalTime.MAX);
-                startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
-                break;
-            default: // unsupported planCycle
-                throw new IllegalArgumentException("Unsupported planCycle: " + planCycle);
+        if (ObjectUtil.equal(cycle, CycleCommonEnum.DAILY)) {
+            startDateTime = localDate.atStartOfDay();
+            endDateTime = localDate.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else if (ObjectUtil.equal(cycle, CycleCommonEnum.WEEKLY)) {
+            LocalDate startOfWeek = localDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
+            LocalDate endOfWeek = localDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
+            startDateTime = startOfWeek.atStartOfDay();
+            endDateTime = endOfWeek.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else if (ObjectUtil.equal(cycle, CycleCommonEnum.MONTHLY)) {
+            LocalDate startOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate endOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
+            startDateTime = startOfMonth.atStartOfDay();
+            endDateTime = endOfMonth.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else if (ObjectUtil.equal(cycle, CycleCommonEnum.QUARTERLY)) {
+            Month month = localDate.getMonth();
+            int quarter = (month.getValue() - 1) / 3 + 1;
+            LocalDate startOfQuarter = LocalDate.of(localDate.getYear(), (quarter - 1) * 3 + 1, 1);
+            LocalDate endOfQuarter = startOfQuarter.plusMonths(2).with(TemporalAdjusters.lastDayOfMonth());
+            startDateTime = startOfQuarter.atStartOfDay();
+            endDateTime = endOfQuarter.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else if (ObjectUtil.equal(cycle, CycleCommonEnum.HALF_YEARLY)) {
+            int halfYear = (localDate.getMonthValue() - 1) / 6 + 1;
+            LocalDate startOfHalfYear = LocalDate.of(localDate.getYear(), (halfYear - 1) * 6 + 1, 1);
+            LocalDate endOfHalfYear = startOfHalfYear.plusMonths(5).with(TemporalAdjusters.lastDayOfMonth());
+            startDateTime = startOfHalfYear.atStartOfDay();
+            endDateTime = endOfHalfYear.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else if (ObjectUtil.equal(cycle, CycleCommonEnum.YEARLY)) {
+            LocalDate startOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
+            LocalDate endOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());
+            startDateTime = startOfYear.atStartOfDay();
+            endDateTime = endOfYear.atTime(LocalTime.MAX);
+            startTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant());
+            endTime = Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        } else {
+            throw new IllegalArgumentException("Unsupported planCycle: " + cycle.getDesc());
         }
 
         return new DateRange(DateTime.of(startTime).setField(DateField.MILLISECOND, 0), DateTime.of(endTime).setField(DateField.MILLISECOND, 0));
@@ -329,7 +328,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         Date dateTime = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
         DateRange startAndEnd = DateUtils.getStartAndEnd(dateTime, 3);
 
-            System.out.println( " Start Time: " + sdf.format(startAndEnd.getStartTime()) + ", End Time: " + sdf.format(startAndEnd.getEndTime()));
+        System.out.println(" Start Time: " + sdf.format(startAndEnd.getStartTime()) + ", End Time: " + sdf.format(startAndEnd.getEndTime()));
     }
 }
 

+ 5 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/ServiceImplBase.java

@@ -11,10 +11,14 @@ import com.xunmei.system.api.RemoteOrgService;
 
 import javax.annotation.Resource;
 
-public class ServiceImplBase<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> {
+public abstract class ServiceImplBase<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> {
     @Resource
     protected RemoteOrgService remoteOrgService;
 
+    /**
+     * 处理查询时,查询条件需要包含上级机构id的情况
+     * @param page
+     */
     protected void handleSupOrgPage(PageDto page) {
         OrgTreeReq req = new OrgTreeReq();
         req.setOrgId(page.getOrgId());

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

@@ -0,0 +1,53 @@
+package com.xunmei.core;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.DateRange;
+import com.xunmei.common.core.domain.worktime.dto.WorkTimeDto;
+import com.xunmei.common.core.event.WorkTimeChangeEvent;
+import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.enums.CycleCommonEnum;
+import com.xunmei.system.api.RemoteWorkTimeService;
+import com.xunmei.system.api.domain.SysWorkTime;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> extends ServiceImplBase<M, T> {
+    @Autowired
+    private RemoteWorkTimeService workTimeService;
+
+    public List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, WorkTimeChangeEvent event) {
+        return selectWorkTimeList(now, cycle, event.getOrgIds());
+    }
+
+    public List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, List<Long> orgIds) {
+        if (CollectionUtil.isEmpty(orgIds)) {
+            return new ArrayList<>();
+        }
+
+        DateRange range = DateUtils.getStartAndEnd(now, cycle);
+        String startTime = DateUtil.format(range.getStartTime(), Constants.DAILY_FORMAT);
+        String endTime = DateUtil.format(range.getEndTime(), Constants.DAILY_FORMAT);
+        WorkTimeDto workTimeDto = new WorkTimeDto();
+        workTimeDto.setOrgIdList(orgIds);
+        workTimeDto.setStartTime(startTime);
+        workTimeDto.setEndTime(endTime);
+        return workTimeService.findWorkTimeByRange(workTimeDto, SecurityConstants.FROM_SOURCE);
+    }
+
+    public Map<Long, Boolean> orgWorkTimeStatusMap(Date now, CycleCommonEnum cycle, List<Long> orgIds) {
+        List<SysWorkTime> times = selectWorkTimeList(now, cycle, orgIds);
+        Map<Long, List<SysWorkTime>> map = times.stream().filter(t -> ObjectUtil.equal(t.getIsEnable(), 1)).collect(Collectors.groupingBy(t -> t.getOrgId()));
+        Map<Long, Boolean> r = new HashMap<>();
+        map.forEach((k, v) -> {
+            r.put(k, CollectionUtil.isNotEmpty(v));
+        });
+        return r;
+    }
+}

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

@@ -21,6 +21,8 @@ import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.worktime.dto.WorkTimeDto;
+import com.xunmei.common.core.enums.CycleCommonEnum;
+import com.xunmei.common.core.enums.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.enums.drill.DrillDoStatus;
@@ -122,7 +124,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             //App的查询, App 默认下穿
             request.setCheckSub(true);
             //App端的时间按季度查询
-            DateRange dateRange = DateUtils.getStartAndEnd(request.getDate(), 4);
+            DateRange dateRange = DateUtils.getStartAndEnd(request.getDate(), CycleCommonEnum.QUARTERLY);
             request.setStartTime(dateRange.getStartTime());
             request.setEndTime(dateRange.getEndTime());
         } else {
@@ -322,11 +324,9 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     @Override
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void createTaskForNow(CoreDrillPlanDataVo plan, Date start, Date end) {
-
-
         if (plan.getPlanCycle() != 0) {
             //如果不是无周期的计划,那么需要查询出他的时间范围,且需要判断作息时间是否存在
-            DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
+            DateRange dateRange = DateUtils.getStartAndEnd(new Date(), EduTrainingPlanCycleEnum.toCommmonEnum(plan.getPlanCycle()));
             start = dateRange.getStartTime();
             end = dateRange.getEndTime();
         } else {
@@ -433,7 +433,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             planIdList = coreDrillPlanMapper.selectIdByParentId(plan.getId());
             planId = null;
         }
-        DateRange range = DateUtils.getStartAndEnd(request.getDate(), 4);
+        DateRange range = DateUtils.getStartAndEnd(request.getDate(), CycleCommonEnum.QUARTERLY);
         request.setStartDate(range.getStartTime());
         request.setEndDate(range.getEndTime());
 
@@ -634,7 +634,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
                 //此处因为planService会导致循环依赖
                 final CoreDrillPlanDataVo detailPlanData = coreDrillPlanMapper.getDetailPlanData(plan.getId());
                 detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
-                DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
+                DateRange range = DateUtils.getStartAndEnd(finalDate, EduTrainingPlanCycleEnum.toCommmonEnum( plan.getPlanCycle()));
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
             }, threadPoolTaskExecutor);
         }
@@ -710,7 +710,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         //App的查询, App 默认下穿
         request.setCheckSub(true);
         //App端的时间按季度查询
-        DateRange dateRange = DateUtils.getStartAndEnd(request.getDate(), 4);
+        DateRange dateRange = DateUtils.getStartAndEnd(request.getDate(), CycleCommonEnum.QUARTERLY);
         request.setStartTime(dateRange.getStartTime());
         request.setEndTime(dateRange.getEndTime());
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);

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

@@ -27,6 +27,7 @@ import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.worktime.dto.WorkTimeDto;
+import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.enums.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
@@ -389,7 +390,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 
         if (plan.getPlanCycle() != 0) {
             //如果不是无周期的计划,那么需要查询出他的时间范围
-            DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
+            DateRange dateRange = DateUtils.getStartAndEnd(new Date(),EduTrainingPlanCycleEnum.toCommmonEnum( plan.getPlanCycle()));
             start = dateRange.getStartTime();
             end = dateRange.getEndTime();
         } else {
@@ -734,7 +735,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 //此处因为planService会导致循环依赖
                 final CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
                 detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
-                DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
+                DateRange range = DateUtils.getStartAndEnd(finalDate,EduTrainingPlanCycleEnum.toCommmonEnum( plan.getPlanCycle()) );
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
             }, threadPoolTaskExecutor);
 
@@ -774,27 +775,27 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         for (EduTrainingPlanCycleEnum value : EduTrainingPlanCycleEnum.values()) {
             switch (value) {
                 case DAILY:
-                    List<SysWorkTime> dailyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.DAILY.getCode(), event);
+                    List<SysWorkTime> dailyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.DAILY, event);
                     dealTimeWorkChangeForDaily(event, date, dailyFutureWorkTime);
                     break;
                 case WEEKLY:
-                    List<SysWorkTime> weeklyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.WEEKLY.getCode(), event);
+                    List<SysWorkTime> weeklyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.WEEKLY, event);
                     dealTimeWorkChangeForWeekly(event, date, weeklyFutureWorkTime);
                     break;
                 case MONTHLY:
-                    List<SysWorkTime> monthlyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.MONTHLY.getCode(), event);
+                    List<SysWorkTime> monthlyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.MONTHLY, event);
                     dealTimeWorkChangeForMonthly(event, date, monthlyFutureWorkTime);
                     break;
                 case QUARTERLY:
-                    List<SysWorkTime> quarterlyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.QUARTERLY.getCode(), event);
+                    List<SysWorkTime> quarterlyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.QUARTERLY, event);
                     dealTimeWorkChangeForQuarterly(event, date, quarterlyFutureWorkTime);
                     break;
                 case HALF_YEARLY:
-                    List<SysWorkTime> halfYearlyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode(), event);
+                    List<SysWorkTime> halfYearlyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.HALF_YEARLY, event);
                     dealTimeWorkChangeForHalfYearly(event, date, halfYearlyFutureWorkTime);
                     break;
                 case YEARLY:
-                    List<SysWorkTime> yearlyFutureWorkTime = selectWorkTimeList(now, EduTrainingPlanCycleEnum.YEARLY.getCode(), event);
+                    List<SysWorkTime> yearlyFutureWorkTime = selectWorkTimeList(now, CycleCommonEnum.YEARLY, event);
                     dealTimeWorkChangeForYearly(event, date, yearlyFutureWorkTime);
                     break;
                 default:
@@ -855,7 +856,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private void dealTimeWorkChangeForWeekly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
         List<Long> orgIds = event.getOrgIds();
         DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
-        DateRange dateRange = DateUtils.getStartAndEnd(today, EduTrainingPlanCycleEnum.WEEKLY.getCode());
+        DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.WEEKLY);
         //查询机构当周是否存在任务
         List<CoreEduTrainingTask> taskList = lambdaQuery()
                 .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
@@ -901,7 +902,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private void dealTimeWorkChangeForMonthly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
         List<Long> orgIds = event.getOrgIds();
         DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
-        DateRange dateRange = DateUtils.getStartAndEnd(today, EduTrainingPlanCycleEnum.MONTHLY.getCode());
+        DateRange dateRange = DateUtils.getStartAndEnd(today,CycleCommonEnum.MONTHLY);
         //查询机构当周是否存在任务
         List<CoreEduTrainingTask> taskList = lambdaQuery()
                 .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
@@ -947,7 +948,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private void dealTimeWorkChangeForQuarterly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
         List<Long> orgIds = event.getOrgIds();
         DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
-        DateRange dateRange = DateUtils.getStartAndEnd(today, EduTrainingPlanCycleEnum.QUARTERLY.getCode());
+        DateRange dateRange = DateUtils.getStartAndEnd(today,CycleCommonEnum.QUARTERLY);
         //查询机构当周是否存在任务
         List<CoreEduTrainingTask> taskList = lambdaQuery()
                 .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
@@ -993,7 +994,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private void dealTimeWorkChangeForHalfYearly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
         List<Long> orgIds = event.getOrgIds();
         DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
-        DateRange dateRange = DateUtils.getStartAndEnd(today, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode());
+        DateRange dateRange = DateUtils.getStartAndEnd(today,CycleCommonEnum.HALF_YEARLY);
         //查询机构当周是否存在任务
         List<CoreEduTrainingTask> taskList = lambdaQuery()
                 .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
@@ -1040,7 +1041,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private void dealTimeWorkChangeForYearly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
         List<Long> orgIds = event.getOrgIds();
         DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
-        DateRange dateRange = DateUtils.getStartAndEnd(today, EduTrainingPlanCycleEnum.YEARLY.getCode());
+        DateRange dateRange = DateUtils.getStartAndEnd(today,CycleCommonEnum.YEARLY);
         //查询机构当周是否存在任务
         List<CoreEduTrainingTask> taskList = lambdaQuery()
                 .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
@@ -1084,7 +1085,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
 
-    private List<SysWorkTime> selectWorkTimeList(Date now, Integer cycle, WorkTimeChangeEvent event) {
+    private List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, WorkTimeChangeEvent event) {
         DateRange range = DateUtils.getStartAndEnd(now, cycle);
         String startTime = DateUtil.format(range.getStartTime(), Constants.DAILY_FORMAT);
         String endTime = DateUtil.format(range.getEndTime(), Constants.DAILY_FORMAT);

+ 27 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/listener/WorkTimeChangeEventListener.java

@@ -0,0 +1,27 @@
+package com.xunmei.core.resumption.listener;
+
+import com.xunmei.common.core.event.WorkTimeChangeEvent;
+import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.event.TransactionPhase;
+import org.springframework.transaction.event.TransactionalEventListener;
+
+@Component
+public class WorkTimeChangeEventListener implements ApplicationListener<WorkTimeChangeEvent> {
+
+    @Autowired
+    private ICoreEduTrainingTaskService coreEduTrainingTaskService;
+
+    @Override
+    @EventListener(WorkTimeChangeEvent.class)
+    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
+    public void onApplicationEvent(WorkTimeChangeEvent event) {
+
+        coreEduTrainingTaskService.taskChangeForTimeWorkChange(event);
+
+
+    }
+}

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

@@ -9,20 +9,20 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.utils.*;
 import com.xunmei.common.core.utils.snowId.DateHelper;
+import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.resumption.domain.AppPlan;
 import com.xunmei.core.resumption.domain.Resumption;
-import com.xunmei.core.resumption.domain.Resumption;
+import com.xunmei.core.resumption.mapper.AppPlanMapper;
 import com.xunmei.core.resumption.service.AppPlanService;
 import com.xunmei.core.resumption.service.IAppRulePointService;
 import com.xunmei.core.resumption.service.ResumptionService;
 import com.xunmei.core.resumption.vo.AppRulePointTaskVo;
 import com.xunmei.core.resumption.vo.WorkChangeResumptionVo;
 import com.xunmei.system.api.Eto.OrgListByTypesConditionEto;
-import com.xunmei.system.api.RemoteConfigService;
-import com.xunmei.system.api.RemoteLogService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteWorkTimeService;
 import com.xunmei.system.api.domain.SysOrg;
@@ -34,7 +34,6 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -44,7 +43,7 @@ import java.util.stream.Collectors;
  */
 @Slf4j
 @Component
-public class ResumptionTaskBusiness {
+public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<AppPlanMapper,AppPlan> {
 
     @Autowired
     private ResumptionService resumptionService;
@@ -72,126 +71,126 @@ public class ResumptionTaskBusiness {
 //    @Resource
 //    RemoteLogService remoteLogService;
 
-    @Async
-    public void syncHour(final DateTime dateTime, int plancycle) {//plancycle==6
-        //获取履职计划
-        List<AppPlan> appPlanList = appPlanService.list((new QueryWrapper<AppPlan>()).lambda()
-                .eq(AppPlan::getPlanStatus, 0)
-                .eq(AppPlan::getPlanCycle, plancycle)
-                .eq(AppPlan::getPlanType, 0)
-                .notIn(AppPlan::getPlanExec, canteenPlanExec));//findExecOrgByPlan(6);
-        for (AppPlan appPlan : appPlanList) {
-            //获取履职计划中对应的检查要点
-            List<AppRulePointTaskVo> pointList = appRulePointService.findPointByPlan(appPlan.getId());
-            if (pointList.size() <= 0) {//没有检查项不生成履职任务
-//                RESUMPTIONLOG.error("error:该计划ID:{}没有检查项", appPlan.getId());
-                continue;
-            }
-            //根据计划获取履职任务执行机构
-            List<Long> orgIds = getPlanOrgIds(appPlan);
-            if (orgIds == null || orgIds.size() <= 0) {//没有检查项不生成履职任务
-//                RESUMPTIONLOG.error("error:该计划ID:{}没有执行机构", appPlan.getId());
-                continue;
-            }
-            //获取履职角色
-            List<Long> roleIds = appPlanService.findRoleByPlan(appPlan.getId());
-            if (roleIds.size() <= 0) {//没有检查项不生成履职任务
-//                RESUMPTIONLOG.error("error:该计划ID:{}没有履职角色", appPlan.getId());
-                continue;
-            }
-            //获取所有要点中的区域id
-            Set<Long> nfcBindIdList = new HashSet<>();
-            for (AppRulePointTaskVo p : pointList) {
-                if (p.getNfcBindId() != null && p.getPointScan() == 1) {
-                    nfcBindIdList.add(p.getNfcBindId());
-                }
-            }
-
-            //根据区域获取区域内绑定的nfc
-          /*  NFCBindJobDto jobDto = new NFCBindJobDto();
-            jobDto.setAreaIds(new ArrayList(areaList));
-            List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
-            //获取有 作息的机构id
-            R<List<Long>> listR = workTimeService.findOrgIdsByYmd(dateTime.toString().substring(0, 10), SecurityConstants.INNER);
-            List<Long> orgIdsNew = new ArrayList<>();
-            if (listR.getCode() == 200) {
-                orgIdsNew = listR.getData();
-            }
-            List<Long> finalOrgIdsNew = orgIdsNew;
-            List<Long> orgIdList = orgIds.stream().filter(r -> finalOrgIdsNew.contains(r)).collect(Collectors.toList());
-            //List<Long> orgIdsNew =  StreamHelper.filter(orgIds,(v)->workTimeList.contains(v));
-            for (final Long orgId : orgIdList) {
-                //获取当天的作息
-                /*NFCBindJobDto jobDto = new NFCBindJobDto();
-                jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
-                jobDto.setOrgId(orgId);
-                List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
-                Ymd ymd = toYmd(dateTime, "DAY");
-                ymd.setOrgId(orgId);
-                ymd.setEnable(true);
-                SysWorkTime workTime = workTimeService.findWorkTimeByYmd(ymd).getData();
-                if (workTime != null) {
-                    List<String[]> workTimes = new ArrayList<>();
-                    if (appPlan.getNotResumptionOnRest() != null && appPlan.getNotResumptionOnRest() == 1 &&
-                            StringUtils.isNotEmpty(workTime.getNoonbreakStart()) && StringUtils.isNotEmpty(workTime.getNoonbreakEnd())) {
-                        workTimes.add(new String[]{workTime.getOpenTime(), workTime.getNoonbreakStart()});
-                        workTimes.add(new String[]{workTime.getNoonbreakEnd(), workTime.getCloseTime()});
-                    } else {
-                        workTimes.add(new String[]{workTime.getOpenTime(), workTime.getCloseTime()});
-                    }
-                    for (int ti = 0; ti < workTimes.size(); ti++) {
-                        String[] time = workTimes.get(ti);
-                        String openStr = time[0];
-                        String closeStr = time[1];
-                        String[] openArr = openStr.split(":");
-                        String[] closeArr = closeStr.split(":");
-                        /*如果营业前是00:00-09:00,营业后是17:00-24:00,
-                        当前每小时履职任务是10:00-16:00,少了09:00-10:00和16:00-17:00的任务,
-                        建议这2个时间段也生成履职任务*/
-                        //如果有午休,要考虑分段第一段往前移1个小时第二段不移
-                        int openHour = 0;
-                        if (ti == 0) {
-                            openHour = Integer.parseInt(openArr[0]) - 1;
-                        } else {
-                            openHour = Integer.parseInt(openArr[0]);
-                        }
-                        int openMinute = Integer.parseInt(openArr[1]);
-                        int closeHour = Integer.parseInt(closeArr[0]);
-                        //int closeHour = Integer.parseInt(closeArr[0])+1;
-                        int closeMinute = Integer.parseInt(closeArr[1]);
-                        if (openMinute < closeMinute) {
-                            closeHour += 1;
-                        }
-                        int len = closeHour - openHour;
-                        if (len > 1) {
-                            int i = ti == 0 ? 1 : 0;
-                            for (; i < len; i++) {//为每个作息点生成履职任务
-                                dateTime.setField(DateField.HOUR_OF_DAY, openHour + i);
-                                dateTime.setField(DateField.MINUTE, openMinute);
-                                //this.resumptionService.build(orgId, ResumptionType.HOUR, dateTime, true);
-                                //每个作息点的开始时间和结束时间,不能直接操作dateTime,后面的操作会覆盖前面的操作
-                                DateTime time1 = new DateTime(dateTime);
-                                time1.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
-                                DateTime time2 = new DateTime(dateTime);
-                                time2.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
-                                DateTime planstartTime = time1.setField(DateField.HOUR_OF_DAY, openHour + i).setField(DateField.MINUTE, openMinute).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
-                                DateTime planendTime = time2.setField(DateField.HOUR_OF_DAY, openHour + i + 1).setField(DateField.MINUTE, openMinute).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
-                                //for(Long roleId:roleIds){
-                                resumptionService.newbuild(orgId, ResumptionType.HOUR, dateTime, true, appPlan, null, pointList, roleIds, planstartTime, planendTime);
-                                // }
-
-                            }
-                        }
-                    }
-
-
-                } else {
-//                    RESUMPTIONLOG.error("{} 没有作息", ResumptionType.DAY.toYmd(dateTime));
-                }
-            }
-        }
-
-    }
+//    @Async
+//    public void syncHour(final DateTime dateTime, int plancycle) {//plancycle==6
+//        //获取履职计划
+//        List<AppPlan> appPlanList = appPlanService.list((new QueryWrapper<AppPlan>()).lambda()
+//                .eq(AppPlan::getPlanStatus, 0)
+//                .eq(AppPlan::getPlanCycle, plancycle)
+//                .eq(AppPlan::getPlanType, 0)
+//                .notIn(AppPlan::getPlanExec, canteenPlanExec));//findExecOrgByPlan(6);
+//        for (AppPlan appPlan : appPlanList) {
+//            //获取履职计划中对应的检查要点
+//            List<AppRulePointTaskVo> pointList = appRulePointService.findPointByPlan(appPlan.getId());
+//            if (pointList.size() <= 0) {//没有检查项不生成履职任务
+////                RESUMPTIONLOG.error("error:该计划ID:{}没有检查项", appPlan.getId());
+//                continue;
+//            }
+//            //根据计划获取履职任务执行机构
+//            List<Long> orgIds = getPlanOrgIds(appPlan);
+//            if (orgIds == null || orgIds.size() <= 0) {//没有检查项不生成履职任务
+////                RESUMPTIONLOG.error("error:该计划ID:{}没有执行机构", appPlan.getId());
+//                continue;
+//            }
+//            //获取履职角色
+//            List<Long> roleIds = appPlanService.findRoleByPlan(appPlan.getId());
+//            if (roleIds.size() <= 0) {//没有检查项不生成履职任务
+////                RESUMPTIONLOG.error("error:该计划ID:{}没有履职角色", appPlan.getId());
+//                continue;
+//            }
+//            //获取所有要点中的区域id
+//            Set<Long> nfcBindIdList = new HashSet<>();
+//            for (AppRulePointTaskVo p : pointList) {
+//                if (p.getNfcBindId() != null && p.getPointScan() == 1) {
+//                    nfcBindIdList.add(p.getNfcBindId());
+//                }
+//            }
+//
+//            //根据区域获取区域内绑定的nfc
+//          /*  NFCBindJobDto jobDto = new NFCBindJobDto();
+//            jobDto.setAreaIds(new ArrayList(areaList));
+//            List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+//            //获取有 作息的机构id
+//            R<List<Long>> listR = workTimeService.findOrgIdsByYmd(dateTime.toString().substring(0, 10), SecurityConstants.INNER);
+//            List<Long> orgIdsNew = new ArrayList<>();
+//            if (listR.getCode() == 200) {
+//                orgIdsNew = listR.getData();
+//            }
+//            List<Long> finalOrgIdsNew = orgIdsNew;
+//            List<Long> orgIdList = orgIds.stream().filter(r -> finalOrgIdsNew.contains(r)).collect(Collectors.toList());
+//            //List<Long> orgIdsNew =  StreamHelper.filter(orgIds,(v)->workTimeList.contains(v));
+//            for (final Long orgId : orgIdList) {
+//                //获取当天的作息
+//                /*NFCBindJobDto jobDto = new NFCBindJobDto();
+//                jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
+//                jobDto.setOrgId(orgId);
+//                List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+//                Ymd ymd = toYmd(dateTime, "DAY");
+//                ymd.setOrgId(orgId);
+//                ymd.setEnable(true);
+//                SysWorkTime workTime = workTimeService.findWorkTimeByYmd(ymd).getData();
+//                if (workTime != null) {
+//                    List<String[]> workTimes = new ArrayList<>();
+//                    if (appPlan.getNotResumptionOnRest() != null && appPlan.getNotResumptionOnRest() == 1 &&
+//                            StringUtils.isNotEmpty(workTime.getNoonbreakStart()) && StringUtils.isNotEmpty(workTime.getNoonbreakEnd())) {
+//                        workTimes.add(new String[]{workTime.getOpenTime(), workTime.getNoonbreakStart()});
+//                        workTimes.add(new String[]{workTime.getNoonbreakEnd(), workTime.getCloseTime()});
+//                    } else {
+//                        workTimes.add(new String[]{workTime.getOpenTime(), workTime.getCloseTime()});
+//                    }
+//                    for (int ti = 0; ti < workTimes.size(); ti++) {
+//                        String[] time = workTimes.get(ti);
+//                        String openStr = time[0];
+//                        String closeStr = time[1];
+//                        String[] openArr = openStr.split(":");
+//                        String[] closeArr = closeStr.split(":");
+//                        /*如果营业前是00:00-09:00,营业后是17:00-24:00,
+//                        当前每小时履职任务是10:00-16:00,少了09:00-10:00和16:00-17:00的任务,
+//                        建议这2个时间段也生成履职任务*/
+//                        //如果有午休,要考虑分段第一段往前移1个小时第二段不移
+//                        int openHour = 0;
+//                        if (ti == 0) {
+//                            openHour = Integer.parseInt(openArr[0]) - 1;
+//                        } else {
+//                            openHour = Integer.parseInt(openArr[0]);
+//                        }
+//                        int openMinute = Integer.parseInt(openArr[1]);
+//                        int closeHour = Integer.parseInt(closeArr[0]);
+//                        //int closeHour = Integer.parseInt(closeArr[0])+1;
+//                        int closeMinute = Integer.parseInt(closeArr[1]);
+//                        if (openMinute < closeMinute) {
+//                            closeHour += 1;
+//                        }
+//                        int len = closeHour - openHour;
+//                        if (len > 1) {
+//                            int i = ti == 0 ? 1 : 0;
+//                            for (; i < len; i++) {//为每个作息点生成履职任务
+//                                dateTime.setField(DateField.HOUR_OF_DAY, openHour + i);
+//                                dateTime.setField(DateField.MINUTE, openMinute);
+//                                //this.resumptionService.build(orgId, ResumptionType.HOUR, dateTime, true);
+//                                //每个作息点的开始时间和结束时间,不能直接操作dateTime,后面的操作会覆盖前面的操作
+//                                DateTime time1 = new DateTime(dateTime);
+//                                time1.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+//                                DateTime time2 = new DateTime(dateTime);
+//                                time2.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+//                                DateTime planstartTime = time1.setField(DateField.HOUR_OF_DAY, openHour + i).setField(DateField.MINUTE, openMinute).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
+//                                DateTime planendTime = time2.setField(DateField.HOUR_OF_DAY, openHour + i + 1).setField(DateField.MINUTE, openMinute).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
+//                                //for(Long roleId:roleIds){
+//                                resumptionService.newbuild(orgId, ResumptionType.HOUR, dateTime, true, appPlan, null, pointList, roleIds, planstartTime, planendTime);
+//                                // }
+//
+//                            }
+//                        }
+//                    }
+//
+//
+//                } else {
+////                    RESUMPTIONLOG.error("{} 没有作息", ResumptionType.DAY.toYmd(dateTime));
+//                }
+//            }
+//        }
+//
+//    }
 
 
     /**
@@ -395,19 +394,19 @@ public class ResumptionTaskBusiness {
                     nfcBindIdList.add(p.getNfcBindId());
                 }
             }
+            Map<Long, Boolean> workingMap=orgWorkTimeStatusMap(new Date(), CycleCommonEnum.WEEKLY,orgIds);
             for (Long orgId : orgIds) {
                 //根据区域获取区域内绑定的nfc
                 /*NFCBindJobDto jobDto = new NFCBindJobDto();
                 jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
                 jobDto.setOrgId(orgId);
                 List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
-                // 判断这周是否有作息
-                boolean isExist = workTimeService.existByYmd(Ymd.builder().year(yearWeek.getKey()).week(yearWeek.getValue()).orgId(orgId).isEnable(true).build()).getData();
-//                final boolean isExist = false;
+
                 // 应该用周的第一天, 不然页面查是查询不到的
                 //dateTime即为本周第一天
                 //final Date dateTime = DateHelper.getFirstDayOfWeek(yearWeek.getKey(), yearWeek.getValue());
                 // for(Long roleId:roleIds){
+                boolean isExist=workingMap.containsKey(orgId) && workingMap.get(orgId);
                 this.resumptionService.newbuild(orgId, ResumptionType.WEEK, dateTime, isExist, appPlan, null, pointList, roleIds, planstartTime, planendTime);
                 //}
 
@@ -470,6 +469,7 @@ public class ResumptionTaskBusiness {
        /*     NFCBindJobDto jobDto = new NFCBindJobDto();
             jobDto.setAreaIds(new ArrayList(areaList));
             List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+            Map<Long, Boolean> workingMap=orgWorkTimeStatusMap(new Date(), CycleCommonEnum.MONTHLY,orgIds);
             for (Long orgId : orgIds) {
               /*  NFCBindJobDto jobDto = new NFCBindJobDto();
                 jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
@@ -477,12 +477,14 @@ public class ResumptionTaskBusiness {
                 List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
                 // 判断这月是否有作息
 //                final boolean isExist = this.workTimeService.existByYmd(orgId, Ymd.builder().year(yearMonth.getKey()).month(yearMonth.getValue()).build(), true);
-                final boolean isExist = workTimeService.existByYmd(Ymd.builder().year(yearMonth.getKey()).week(yearMonth.getValue()).orgId(orgId).isEnable(true).build()).getData();
+//                final boolean isExist = workTimeService.existByYmd(Ymd.builder().year(yearMonth.getKey()).week(yearMonth.getValue()).orgId(orgId).isEnable(true).build())
+//                        .getData();
 
                 // 应该用月的第一天, 不然页面查是查询不到的
                 //dateTime即为本月第一天
                 //final Date dateTime = DateHelper.getFirstDayOfMonth(yearMonth.getKey(), yearMonth.getValue());
                 //for(Long roleId:roleIds){
+                boolean isExist=workingMap.containsKey(orgId) && workingMap.get(orgId);
                 this.resumptionService.newbuild(orgId, ResumptionType.MONTH, dateTime, isExist, appPlan, null, pointList, roleIds, planstartTime, planendTime);
                 // }
 
@@ -543,6 +545,7 @@ public class ResumptionTaskBusiness {
           /*  NFCBindJobDto jobDto = new NFCBindJobDto();
             jobDto.setAreaIds(new ArrayList(areaList));
             List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+            Map<Long, Boolean> workingMap=orgWorkTimeStatusMap(new Date(), CycleCommonEnum.QUARTERLY,orgIds);
             for (Long orgId : orgIds) {
                /* NFCBindJobDto jobDto = new NFCBindJobDto();
                 jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
@@ -554,7 +557,8 @@ public class ResumptionTaskBusiness {
                 //dateTime即为本季度第一天
                 //final Date dateTime = DateHelper.getFirstDayOfQuarter(yearQuarter.getKey(), yearQuarter.getValue());
                 // for(Long roleId:roleIds){
-                this.resumptionService.newbuild(orgId, ResumptionType.QUARTER, dateTime, true, appPlan, null, pointList, roleIds, planstartTime, planendTime);
+                boolean isExist=workingMap.containsKey(orgId) && workingMap.get(orgId);
+                this.resumptionService.newbuild(orgId, ResumptionType.QUARTER, dateTime, isExist, appPlan, null, pointList, roleIds, planstartTime, planendTime);
                 // }
             }
         }
@@ -613,13 +617,15 @@ public class ResumptionTaskBusiness {
            /* NFCBindJobDto jobDto = new NFCBindJobDto();
             jobDto.setAreaIds(new ArrayList(areaList));
             List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+            Map<Long, Boolean> workingMap=orgWorkTimeStatusMap(new Date(), CycleCommonEnum.HALF_YEARLY,orgIds);
             for (Long orgId : orgIds) {
               /*  NFCBindJobDto jobDto = new NFCBindJobDto();
                 jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
                 jobDto.setOrgId(orgId);
                 List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
                 //for(Long roleId:roleIds){
-                this.resumptionService.newbuild(orgId, ResumptionType.HALFYEAR, dateTime, true, appPlan, null, pointList, roleIds, planstartTime, planendTime);
+                boolean isExist=workingMap.containsKey(orgId) && workingMap.get(orgId);
+                this.resumptionService.newbuild(orgId, ResumptionType.HALFYEAR, dateTime, isExist, appPlan, null, pointList, roleIds, planstartTime, planendTime);
                 // }
             }
         }
@@ -675,13 +681,15 @@ public class ResumptionTaskBusiness {
            /* NFCBindJobDto jobDto = new NFCBindJobDto();
             jobDto.setAreaIds(new ArrayList(areaList));
             List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
+            Map<Long, Boolean> workingMap=orgWorkTimeStatusMap(new Date(), CycleCommonEnum.YEARLY,orgIds);
             for (Long orgId : orgIds) {
                 /*NFCBindJobDto jobDto = new NFCBindJobDto();
                 jobDto.setNfcBindIdList(new ArrayList(nfcBindIdList));
                 jobDto.setOrgId(orgId);
                 List<NFCBindPageVo> nfcList =  nfcBindService.all(jobDto,NFCBindPageVo::to);*/
                 // for(Long roleId:roleIds){
-                this.resumptionService.newbuild(orgId, ResumptionType.YEAR, dateTime, true, appPlan, null, pointList, roleIds, planstartTime, planendTime);
+                boolean isExist=workingMap.containsKey(orgId) && workingMap.get(orgId);
+                this.resumptionService.newbuild(orgId, ResumptionType.YEAR, dateTime, isExist, appPlan, null, pointList, roleIds, planstartTime, planendTime);
                 //}
 
             }

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java

@@ -23,6 +23,7 @@ import com.xunmei.common.core.domain.retrieval.vo.CoreMonitoringRetrievalTaskOne
 import com.xunmei.common.core.domain.retrieval.vo.CoreMonitoringRetrievalTaskVo;
 import com.xunmei.common.core.domain.retrieval.vo.TaskDataVo;
 import com.xunmei.common.core.domain.safetyindex.domain.CoreSafetyExceptionData;
+import com.xunmei.common.core.enums.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.RetrievalTaskCycle;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
@@ -476,7 +477,7 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
             dateRange = new DateRange(DateUtil.beginOfDay(plan.getStartTime()).setField(DateField.MILLISECOND, 0), DateUtil.endOfDay(plan.getEndTime()).setField(DateField.MILLISECOND, 0));
         } else {
             //周期任务获取计划时间
-            dateRange = DateUtils.getStartAndEnd(dateTime, Integer.parseInt(plan.getPlanCycle()));
+            dateRange = DateUtils.getStartAndEnd(dateTime, EduTrainingPlanCycleEnum.toCommmonEnum(Integer.parseInt(plan.getPlanCycle())));
         }
         Map<Integer, DateRange> dateRanges = DateUtils.splitDateRange(dateRange.getStartTime(), dateRange.getEndTime(), plan.getPlanFrequency().intValue());
         for (int i = 1; i <= plan.getPlanFrequency(); i++) {