소스 검색

修改作息变更事件监听代码

jingyuanchao 2 년 전
부모
커밋
a0282988d1
15개의 변경된 파일461개의 추가작업 그리고 80개의 파일을 삭제
  1. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java
  2. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java
  3. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/Constants.java
  4. 36 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/EduTrainingPlanCycleEnum.java
  5. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/edu/EduTrainingDoStatus.java
  6. 6 7
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/event/WorkTimeChangeEvent.java
  7. 4 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  8. 9 13
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  9. 4 12
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/eventlistener/WorkTimeChangeEventListener.java
  10. 4 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java
  11. 3 9
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  12. 345 18
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  13. 8 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java
  14. 2 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java
  15. 26 15
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java

@@ -19,10 +19,15 @@ public interface RemoteWorkTimeService {
 
     @PostMapping("/work/time/findWorkTimeByYmd")
     R<SysWorkTime> findWorkTimeByYmd(@RequestBody Ymd ymd);
+
     @PostMapping("/work/time/existByYmd")
     R<Boolean> existByYmd(@RequestBody Ymd ymd);
 
     @GetMapping("/work/time/findWorkTimeByDateRangeAndOrgId")
     List<String> findWorkTimeByDateRangeAndOrgId(@RequestParam("startTime") Date startTime, @RequestParam("endTime") Date endTime, @RequestParam("orgId") Long orgId);
 
+
+    @PostMapping("/work/time/findFutureWorkTime")
+    List<SysWorkTime> findFutureWorkTime(@RequestBody List<Long> orgId, @RequestParam(value = "time") String time, @RequestHeader(SecurityConstants.INNER) String source);
+
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java

@@ -40,6 +40,11 @@ public class RemoteWorkTimesFallbackFactory implements FallbackFactory<RemoteWor
             public List<String> findWorkTimeByDateRangeAndOrgId(Date startTime, Date endTime, Long orgId) {
                 return null;
             }
+
+            @Override
+            public List<SysWorkTime> findFutureWorkTime(List<Long> orgId, String time, String source) {
+                return null;
+            }
         };
     }
 }

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/Constants.java

@@ -146,4 +146,7 @@ public class Constants {
      */
     public static final Integer ONE = 1;
     public static final Integer TWO = 2;
+
+
+    public static final String DAILY_FORMAT = "yyyy-MM-dd";
 }

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

@@ -0,0 +1,36 @@
+package com.xunmei.common.core.enums;
+
+/**
+ * 教育培训周期枚举
+ * 
+ * @author xunmei
+ */
+public enum EduTrainingPlanCycleEnum
+{
+    NONE(0, "无周期"),
+    DAILY(1, "每日"),
+    WEEKLY(2, "每周"),
+    MONTHLY(3, "每月"),
+    QUARTERLY(4, "每季度"),
+    HALF_YEARLY(5, "每半年"),
+    YEARLY(6, "每年");
+
+    private final Integer code;
+    private final String desc;
+
+    EduTrainingPlanCycleEnum(Integer code, String desc)
+    {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getDesc()
+    {
+        return desc;
+    }
+}

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/edu/EduTrainingDoStatus.java

@@ -10,7 +10,7 @@ import java.util.Map;
 @AllArgsConstructor
 public enum EduTrainingDoStatus {
 
-    WAIT_RECORDED(0, "待记录"),
+    WAIT_RECORDED(0, "待培训"),
     WAIT_SIGN(1, "待签名"),
     DONE(2, "已完成"),
     OVERDUE(3, "已逾期"),

+ 6 - 7
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/event/WorkTimeChangeEvent.java

@@ -8,20 +8,19 @@ import java.util.List;
 
 
 @Getter
-
 public class WorkTimeChangeEvent extends ApplicationEvent {
 
-    @ApiModelProperty(value = "类型 1:营业 2:歇业")
-    private Integer type;
+    @ApiModelProperty(value = "机构id数组", notes = "受影响的机构")
+    private final List<Long> orgIds;
 
+   /* @ApiModelProperty(value = "作息时间列表", notes = "受影响的作息时间列表")
+    private final List<SysWorkTime> dataList;*/
 
-    @ApiModelProperty(value = "机构id数组",notes = "受影响的机构")
-    private List<Long> orgIds;
 
-    public WorkTimeChangeEvent(Object source, Integer type, List<Long> orgIds) {
+    public WorkTimeChangeEvent(Object source, List<Long> orgIds/*, List<SysWorkTime> dataList*/) {
         super(source);
-        this.type = type;
         this.orgIds = orgIds;
+      //  this.dataList = dataList;
     }
 
 }

+ 4 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -275,7 +275,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         Long planId = plan.getId();
 
         deletePlanAndTaskByParentPlanId(planId);
-        List<CoreDrillPlan> planList = buildPlanData(plan, drillPlanToRoleList);
+        List<CoreDrillPlan> planList = buildPlanData(plan, drillPlanToRoleList,false);
 
         if (plan.getPlanStatus() == DrillPlanStatus.DELETED.getCode()) {
             log.info("计划已被修改为" + DrillPlanStatus.DELETED.getDesc() + ",不再生成任务!");
@@ -649,7 +649,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
         // 下发 按钮显示逻辑:仅省联社安全保卫管理人员进入且由省联社管理安全保卫人员创建的计划才显示
         //todo 判断当前人的角色信息
-        List<CoreDrillPlan> list = buildPlanData(plan, new ArrayList<>());
+        List<CoreDrillPlan> list = buildPlanData(plan, new ArrayList<>(),true);
         //下发后修改为使用中
         plan.setPlanStatus(DrillPlanStatus.USING.getCode());
         plan.setIssue(1);
@@ -728,7 +728,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         );
     }
 
-    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, List<CoreDrillPlanToRole> planRoleList) {
+    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, List<CoreDrillPlanToRole> planRoleList,boolean isPublish) {
         if (ObjectUtil.isEmpty(planRoleList)) {
             //获取执行角色
             LambdaQueryWrapper<CoreDrillPlanToRole> ros = new LambdaQueryWrapper<>();
@@ -761,6 +761,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             drillPlan.setStandard(0);
             drillPlan.setIssue(0);
             drillPlan.setBeIssue(1);
+            drillPlan.setPlanStatus(isPublish ? DrillPlanStatus.USING.getCode() : plan.getPlanStatus());
             drillPlan.setParentId(plan.getId());
             drillPlan.setCreateTime(new Date());
             drillPlan.setUpdateTime(new Date());

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

@@ -327,13 +327,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     public void createTaskForNow(CoreDrillPlanDataVo plan, Date start, Date end) {
 
 
-
-
-
         if (plan.getPlanCycle() != 0) {
             //如果不是无周期的计划,那么需要查询出他的时间范围,且需要判断作息时间是否存在
             List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
-            if (workTimeList.isEmpty()){
+            if (workTimeList.isEmpty()) {
                 log.error("未获取到该机构的作息时间");
                 return;
             }
@@ -421,10 +418,9 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             planIdList = coreDrillPlanMapper.selectIdByParentId(plan.getId());
             planId = null;
         }
-
-        request.setStartDate(DateUtils.getStartAndEnd(request.getDate(), 4).getStartTime());
-
-        request.setEndDate(DateUtils.getStartAndEnd(request.getDate(), 4).getEndTime());
+        DateRange range = DateUtils.getStartAndEnd(request.getDate(), 4);
+        request.setStartDate(range.getStartTime());
+        request.setEndDate(range.getEndTime());
 
         Long orgId = request.getOrgId();
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
@@ -781,7 +777,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     private void checkRecNum(CoreDrillTask drillTask, Integer recStatus) {
 
         List<Long> collect = Stream.of(drillTask.getOrgPath().split("-")).map(Long::valueOf).collect(Collectors.toList());
-        List<SysOrg> sysOrgList = RemoteCallHandlerExecutor.executeRemoteCall(()->
+        List<SysOrg> sysOrgList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
                 orgService.selectOrgByIdList(collect, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
 
         DrillRecStatus drillRecStatus = DrillRecStatus.getDrillRecStatus(recStatus);
@@ -792,7 +788,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         if (ObjectUtil.equal(drillRecStatus, DrillRecStatus.REC_REGION_EXCELLENT_CASE)) {
 
             sysConfig = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                    remoteConfigService.findSysConfigByCode(SystemParameterConstant.HS_REC_DRILL_TASK_MAX, SecurityConstants.INNER),
+                            remoteConfigService.findSysConfigByCode(SystemParameterConstant.HS_REC_DRILL_TASK_MAX, SecurityConstants.INNER),
                     ErrorMsgConstants.QUERY_CONFIG_ERROR);
 
             SysOrg sysOrg = sysOrgList.stream().filter(org -> ObjectUtil.equal(org.getType(), OrgTypeEnum.HANG_SHE.getCode()))
@@ -808,7 +804,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         if (ObjectUtil.equal(drillRecStatus, DrillRecStatus.REC_PROVINCE_EXCELLENT_CASE)) {
 
             sysConfig = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                    remoteConfigService.findSysConfigByCode(SystemParameterConstant.AREA_REC_DRILL_TASK_MAX, SecurityConstants.INNER),
+                            remoteConfigService.findSysConfigByCode(SystemParameterConstant.AREA_REC_DRILL_TASK_MAX, SecurityConstants.INNER),
                     ErrorMsgConstants.QUERY_CONFIG_ERROR);
 
             SysOrg sysOrg = sysOrgList.stream().filter(org -> ObjectUtil.equal(org.getType(), OrgTypeEnum.BAN_SHI_CHU.getCode()))
@@ -835,7 +831,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             panelListDto.setOrgPath(sysOrg.getPath());
             //查询待评价数据
             List<PanelListVo> list2 = coreDrillTaskMapper.selectWaitEvaluateTaskList(panelListDto);
-            list2.removeIf(item->DateUtil.compare(new Date(), item.getEndTime()) > 0);
+            list2.removeIf(item -> DateUtil.compare(new Date(), item.getEndTime()) > 0);
             list.addAll(list2);
         }
 
@@ -851,7 +847,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             return;
         }
         //如果当前时间大于任务的结束时间,将该数据移除
-        list.removeIf(item->DateUtil.compare(new Date(), item.getEndTime()) > 0);
+        list.removeIf(item -> DateUtil.compare(new Date(), item.getEndTime()) > 0);
         //筛选出待签名的数据
         //List<PanelListVo> signList = list.stream().filter(item -> item.getStatus() == 1).collect(Collectors.toList());
         //如果用户不在某条数据的待签名范围中,将该数据移除

+ 4 - 12
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/eventlistener/WorkTimeChangeEventListener.java

@@ -5,6 +5,7 @@ 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.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.event.TransactionPhase;
 import org.springframework.transaction.event.TransactionalEventListener;
@@ -16,22 +17,13 @@ public class WorkTimeChangeEventListener implements ApplicationListener<WorkTime
     private ICoreEduTrainingTaskService coreEduTrainingTaskService;
 
     @Override
+    @Async
     @EventListener(WorkTimeChangeEvent.class)
     @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
     public void onApplicationEvent(WorkTimeChangeEvent event) {
 
-        switch (event.getType()) {
-            case 1:
-                //营业
-                coreEduTrainingTaskService.timeChangeForTaskAdd(event.getOrgIds());
-                break;
-            case 2:
-                //歇业
-                coreEduTrainingTaskService.timeChangeForTaskDel(event.getOrgIds());
-                break;
-            default:
-                break;
-        }
+        coreEduTrainingTaskService.taskChangeForTimeWorkChange(event);
+
 
     }
 }

+ 4 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java

@@ -11,6 +11,7 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskPageVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
+import com.xunmei.common.core.event.WorkTimeChangeEvent;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 
@@ -99,7 +100,8 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
     List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto);
 
 
-    void timeChangeForTaskAdd(List<Long> orgIds);
+    void taskChangeForTimeWorkChange(WorkTimeChangeEvent event);
 
-    void timeChangeForTaskDel(List<Long> orgIds);
+
+    void delTaskByIdList(List<Long> idList);
 }

+ 3 - 9
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -492,10 +492,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                     .select(CoreEduTrainingTask::getId));
             final List<Long> taskIdList = coreEduTrainingTasks.stream().map(CoreEduTrainingTask::getId).collect(Collectors.toList());
             //删除任务相关
-            if (ObjectUtil.isNotEmpty(taskIdList)) {
-                coreEduTrainingTaskMapper.deleteBatchIds(taskIdList);
-                coreEduTrainingTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>().in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, taskIdList));
-            }
+            coreEduTrainingTaskService.delTaskByIdList(taskIdList);
             //删除计划
             return coreEduTrainingPlanMapper.deleteBatchIds(Collections.singletonList((id)));
         } else {
@@ -507,10 +504,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                         .in(CoreEduTrainingTask::getPlanId, planIdList)
                         .select(CoreEduTrainingTask::getId));
                 final List<Long> taskIdList = trainingTaskList.stream().map(CoreEduTrainingTask::getId).collect(Collectors.toList());
-                if (ObjectUtil.isNotEmpty(taskIdList)) {
-                    coreEduTrainingTaskMapper.deleteBatchIds(taskIdList);
-                    coreEduTrainingTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>().in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, taskIdList));
-                }
+                coreEduTrainingTaskService.delTaskByIdList(taskIdList);
             }
             //删除计划
             planIdList.add(id);
@@ -635,7 +629,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingPlan.setBelongOrgPath(sysOrg.getPath());
             coreEduTrainingPlan.setStandard(0);
             coreEduTrainingPlan.setIssue(0);
-            coreEduTrainingPlan.setPlanStatus(isPublish ? EduTrainingPlanStatus.USING.getCode() : EduTrainingPlanStatus.DELETED.getCode());
+            coreEduTrainingPlan.setPlanStatus(isPublish ? EduTrainingPlanStatus.USING.getCode():plan.getPlanStatus());
             coreEduTrainingPlan.setParentId(plan.getId());
             coreEduTrainingPlan.setCreateTime(new Date());
             coreEduTrainingPlan.setUpdateTime(new Date());

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

@@ -1,6 +1,7 @@
 package com.xunmei.core.edu.service.impl;
 
 import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
@@ -24,9 +26,11 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 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.enums.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
+import com.xunmei.common.core.event.WorkTimeChangeEvent;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
@@ -46,6 +50,7 @@ import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.RemoteWorkTimeService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.api.domain.SysWorkTime;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -62,6 +67,8 @@ import java.io.File;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.NumberFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -76,6 +83,8 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingTaskMapper, CoreEduTrainingTask> implements ICoreEduTrainingTaskService {
+    public static final long UN_WORK = 0L;
+    public static final long WORK = 1L;
     @Autowired
     private CoreEduTrainingTaskMapper coreEduTrainingTaskMapper;
     @Autowired
@@ -129,6 +138,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         }
         IPage<CoreEduTrainingTaskPageVo> pageData = coreEduTrainingTaskMapper.selectPageData(request.getPageRequest(), request);
         if (ObjectUtil.isNotEmpty(pageData.getRecords())) {
+            pageData.getRecords().sort(getComparator());
             List<Long> idList = pageData.getRecords().stream().map(CoreEduTrainingTaskPageVo::getId).collect(Collectors.toList());
             List<CoreEduTrainingTaskToRole> roleList = taskToRoleMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>()
                     .in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, idList));
@@ -142,8 +152,26 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         return TableDataInfo.build(pageData);
     }
 
-    private String getStaticPathPrefix() {
-        return RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_STATICS_SAVE_PATH_ERROR);
+
+    public static Comparator<CoreEduTrainingTaskPageVo> getComparator() {
+        //将0映射为0,4映射为1,1映射为2,2映射为3,3映射为4,其他情况映射为5
+        //0:待培训,1:待签名,2:已完成,3:已逾期,4:待提交
+        return Comparator.comparingInt((CoreEduTrainingTaskPageVo vo) -> {
+            Integer num = vo.getStatus();
+            if (num == 0) {
+                return 0;
+            } else if (num == 4) {
+                return 1;
+            } else if (num == 1) {
+                return 2;
+            } else if (num == 2) {
+                return 3;
+            } else if (num == 3) {
+                return 4;
+            } else {
+                return 5;
+            }
+        });
     }
 
     private void dealData(CoreEduTrainingTaskPageVo record, List<CoreEduTrainingTaskPageVo> records, Map<Long, List<CoreEduTrainingTaskToRole>> listMap) {
@@ -219,12 +247,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     public int insertCoreEduTrainingTask(CoreEduTrainingTaskInsertDto request) {
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(
                 () -> orgService.selectOrgById(SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-        CoreEduTrainingTask task=new CoreEduTrainingTask();
+        CoreEduTrainingTask task = new CoreEduTrainingTask();
         task.setId(IdWorker.getId());
         task.setOrgId(sysOrg.getId());
         task.setOrgName(sysOrg.getName());
         task.setOrgPath(sysOrg.getPath());
-        BeanUtils.copyProperties(request,task);
+        BeanUtils.copyProperties(request, task);
         task.setCreateTime(DateUtils.getNowDate());
         task.setUpdateTime(DateUtils.getNowDate());
         task.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
@@ -306,13 +334,13 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         return coreEduTrainingTaskMapper.updateById(coreEduTrainingTask);
     }
 
-    private Long getHostUserId(Long orgId){
+    private Long getHostUserId(Long orgId) {
         List<SysUser> userList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
                 roleService.selectUserByRoleNameAndOrgId("网点负责人", orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_USER_DATA_ERROR);
         if (ObjectUtil.isNotEmpty(userList)) {
-         return userList.get(0).getId();
+            return userList.get(0).getId();
         } else {
-           return SecurityUtils.getUserId();
+            return SecurityUtils.getUserId();
         }
     }
 
@@ -361,7 +389,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         if (plan.getPlanCycle() != 0) {
             //如果不是无周期的计划,那么需要查询出他的时间范围
             List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
-            if (workTimeList.isEmpty()){
+            if (workTimeList.isEmpty()) {
                 log.error("未获取到该机构的作息时间");
                 return;
             }
@@ -386,11 +414,11 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
     private void saveTaskAndRoleData(CoreEduTrainingPlanDataVo plan, Date start, Date end, List<SysOrg> orgList) {
-        System.out.println("12121212");
         //List<CoreEduTrainingPlanToRole> planRoleList = plan.getPlanRoleList();
         List<CoreEduTrainingTask> taskList = new ArrayList<>();
         List<CoreEduTrainingTaskToRole> taskRoleList = new ArrayList<>();
         Map<Integer, DateRange> dateRangeMap = DateUtils.splitDateRange(start, end, plan.getExecTimes());
+        Date date = new Date();
         for (SysOrg org : orgList) {
             for (int i = 1; i <= plan.getExecTimes(); i++) {
                 DateRange dateRange = dateRangeMap.get(i);
@@ -413,8 +441,17 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 trainingTask.setOrgPath(org.getPath());
                 trainingTask.setStatus(EduTrainingDoStatus.WAIT_RECORDED.getCode());
                 trainingTask.setPdfUrl(null);
-                trainingTask.setCreateTime(new Date());
-                trainingTask.setUpdateTime(new Date());
+                trainingTask.setCreateTime(date);
+                trainingTask.setUpdateTime(date);
+                Long count = baseMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
+                        .eq(CoreEduTrainingTask::getOrgId, org.getId())
+                        .eq(CoreEduTrainingTask::getStartDate, trainingTask.getStartDate())
+                        .eq(CoreEduTrainingTask::getEndDate, trainingTask.getEndDate())
+                        .eq(CoreEduTrainingTask::getPlanId, plan.getId())
+                );
+                if (count > 0) {
+                    continue;
+                }
                 taskList.add(trainingTask);
                 /*for (CoreEduTrainingPlanToRole planToRole : planRoleList) {
                     CoreEduTrainingTaskToRole coreEduTrainingTaskToRole = new CoreEduTrainingTaskToRole();
@@ -469,7 +506,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         return result;
     }
 
-    private  void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
+    private void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
         if (list.size() == 1 && list.get(0).getOrgId() == null) {
             //走到这 说明mapper没有查到数据 构建空数据返回
             for (SysOrg org : sysOrgList) {
@@ -664,12 +701,15 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                     .eq(CoreEduTrainingPlan::getDeleted, 0)
                     .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
         }
+        //此list中Plan对象仅id与planCycle字段有值,其他字段为空
         if (ObjectUtil.isEmpty(planList)) {
             return "没有需要生成的任务";
         }
-        Date finalDate = date;
+        buildTaskByPlan(planList, date);
+        return "创建成功";
+    }
 
-        //此list中Plan对象仅id与planCycle字段有值,
+    private void buildTaskByPlan(List<CoreEduTrainingPlan> planList, Date finalDate) {
         for (CoreEduTrainingPlan plan : planList) {
             CompletableFuture.runAsync(() -> {
                 //此处因为planService会导致循环依赖
@@ -678,8 +718,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
             }, threadPoolTaskExecutor);
+
         }
-        return "创建成功";
     }
 
     @Override
@@ -688,6 +728,17 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
     @Override
+    public void delTaskByIdList(List<Long> taskIdList) {
+        if (ObjectUtil.isNotEmpty(taskIdList)) {
+            coreEduTrainingTaskMapper.deleteBatchIds(taskIdList);
+            taskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>()
+                    .in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, taskIdList));
+            /*taskToUserMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
+                    .in(CoreEduTrainingTaskToUser::getEduTrainingTaskId, taskIdList));*/
+        }
+    }
+
+    @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
         List<PanelListVo> list = coreEduTrainingTaskMapper.selectCurUserTaskList(panelListDto);
         list.removeIf(item -> DateUtil.compare(new Date(), item.getEndTime()) > 0);
@@ -698,15 +749,291 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
     @Override
-    public void timeChangeForTaskAdd(List<Long> orgIds) {
+    public void taskChangeForTimeWorkChange(WorkTimeChangeEvent event) {
+        String date = LocalDate.now().format(DateTimeFormatter.ofPattern(Constants.DAILY_FORMAT));
+        List<SysWorkTime> futureWorkTime = workTimeService.findFutureWorkTime(event.getOrgIds(), date, SecurityConstants.INNER);
+        for (EduTrainingPlanCycleEnum value : EduTrainingPlanCycleEnum.values()) {
+            switch (value) {
+                case DAILY:
+                    List<SysWorkTime> timeList = futureWorkTime.stream()
+                            .filter(time -> ObjectUtil.equal(time.getYmdDate(), date))
+                            .collect(Collectors.toList());
+                    dealTimeWorkChangeForDaily(event, date, timeList);
+                    break;
+                case WEEKLY:
+                    dealTimeWorkChangeForWeekly(event, date, futureWorkTime);
+                    break;
+                case MONTHLY:
+                    dealTimeWorkChangeForMonthly(event, date, futureWorkTime);
+                    break;
+                case QUARTERLY:
+                    dealTimeWorkChangeForQuarterly(event, date, futureWorkTime);
+                    break;
+                case HALF_YEARLY:
+                    dealTimeWorkChangeForHalfYearly(event, date, futureWorkTime);
+                    break;
+                case YEARLY:
+                    dealTimeWorkChangeForYearly(event, date, futureWorkTime);
+                    break;
+                default:
+                    break;
+            }
+        }
 
 
+    }
+
 
+    private void dealTimeWorkChangeForDaily(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
+        DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
+        List<Long> orgIds = event.getOrgIds();
+        //查询机构当天是否存在任务
+        //因为是每日,每日的任务都是在当天凌晨生成,所以这里只考虑今天的任务情况就行
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
+                .like(CoreEduTrainingTask::getStartDate, todayStr)
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        //获取歇业的机构信息
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //删除已经歇业且未执行的任务
+        List<Long> delTaskIdList = taskList.stream()
+                .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
+                .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
+                .map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        //删除任务
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        //营业的机构id
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
     }
 
-    @Override
-    public void timeChangeForTaskDel(List<Long> orgIds) {
 
+    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());
+        //查询机构当周是否存在任务
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
+                .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
+                .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
+    }
+
+    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());
+        //查询机构当月是否存在任务
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
+                .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
+                .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
+    }
+
+    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());
+        //查询机构当季度是否存在任务
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
+                .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
+                .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
+    }
+
+    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());
+        //查询机构当半年度是否存在任务
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
+                .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
+                .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
+    }
+
+
+    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());
+        //查询机构当半年度是否存在任务
+        List<CoreEduTrainingTask> taskList = lambdaQuery()
+                .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
+                .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
+                .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
+                .in(CoreEduTrainingTask::getOrgId, orgIds)
+                .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
+                .list();
+
+        //获取任务中存在的机构id
+        List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
+
+        //根据营业歇业分组
+        Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
+        //歇业的数据
+        List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
+        List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
+        delTaskByIdList(delTaskIdList);
+
+        //营业的数据
+        List<SysWorkTime> workTimeList = listMap.get(WORK);
+        List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
+        //查询在任务表中不存在的营业机构id,即需要生成任务的机构
+        List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
+        //查询需要生成任务的机构的计划
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                .eq(CoreEduTrainingPlan::getStandard, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
+                .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
+                .eq(CoreEduTrainingPlan::getDeleted, 0)
+                .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
+                .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        //此list中Plan对象仅id与planCycle字段有值,
+        buildTaskByPlan(planList, today);
     }
 }
 

+ 8 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java

@@ -7,6 +7,7 @@ import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.log.annotation.Log;
 import com.xunmei.common.log.enums.BusinessType;
+import com.xunmei.common.security.annotation.InnerAuth;
 import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.system.api.domain.SysWorkTime;
 import com.xunmei.system.domain.SysWorkTimeSet;
@@ -143,4 +144,11 @@ public class SysWorkTimeController extends BaseController {
         return sysWorkTimeService.findWorkTimeByDateRangeAndOrgId(startTime,endTime,orgId);
     }
 
+    @ApiOperation(value = "查询未来作息时间")
+    @InnerAuth
+    @PostMapping("/work/time/findFutureWorkTime")
+    List<SysWorkTime> findFutureWorkTime(@RequestBody List<Long> orgId,String time){
+       return sysWorkTimeService.findFutureWorkTime(orgId,time);
+    }
+
 }

+ 2 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java

@@ -94,4 +94,6 @@ public interface ISysWorkTimeService extends IService<SysWorkTime> {
     Map<String, Object> checkData(SysWorkTimeSet sysWorkTime);
 
     List<String> findWorkTimeByDateRangeAndOrgId(Date startTime, Date endTime, Long orgId);
+
+    List<SysWorkTime> findFutureWorkTime(List<Long> orgId, String time);
 }

+ 26 - 15
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

@@ -73,6 +73,7 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
 
         return calendar.getTime();
     }
+
     @Override
     public TableDataInfo<SysWorkTimeDto> selectPage(SysWorkTime sysWorkTime) throws ParseException {
 
@@ -99,15 +100,15 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         }
         //下穿
         if (sysWorkTime.getCheckSub()) {
-                query.like("o.path", sysWorkTime.getOrgId());
-        }else{
-            query.likeLeft("o.path", sysWorkTime.getOrgId()+"-");
+            query.like("o.path", sysWorkTime.getOrgId());
+        } else {
+            query.likeLeft("o.path", sysWorkTime.getOrgId() + "-");
         }
         sysWorkTime.setOrgId(null);
         query.orderByDesc("ymd_date");
         //时间范围查询
         if (sysWorkTime.getRange() != null && sysWorkTime.getRange().length > 1) {
-            query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(),"EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(),"EEE MMM dd HH:mm:ss zzz yyyy"));
+            query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"));
         }
         //获取数据
         IPage<SysWorkTimeDto> page1 = sysWorkTimeMapper.selectByPage(page, query);
@@ -337,15 +338,15 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
                 s.setModifiedName(SecurityUtils.getUsername());
                 baseMapper.insert(s);
             }
-            if(DateUtil.isSameDay(s.getYmdDate(),now)){
-                List<Long> orgIds =new ArrayList<>();
+            if (DateUtil.isSameDay(s.getYmdDate(), now)) {
+                List<Long> orgIds = new ArrayList<>();
                 orgIds.add(orgId);
-                Map<String,Object> param = new HashMap<>();
-                param.put("orgIds",orgIds);
+                Map<String, Object> param = new HashMap<>();
+                param.put("orgIds", orgIds);
                 param.put("sysWorkTime", new Gson().toJson(s));
-                log.info("时间{}修改作息远程调用生成履职任务",new Date());
+                log.info("时间{}修改作息远程调用生成履职任务", new Date());
                 AjaxResult result = remoteResumptionTaskService.dayTaskByWorkTime(param, SecurityConstants.INNER);
-                log.info("时间{}修改作息远程调用生成履职任务返回{}",new Date(),result.get("msg"));
+                log.info("时间{}修改作息远程调用生成履职任务返回{}", new Date(), result.get("msg"));
             }
 
         }
@@ -406,14 +407,14 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         sysWorkTimeMapper.updateById(sysWorkTime);
         //判断日期是否为今天
         if (DateUtil.format(sysWorkTime.getYmdDate(), "yyyy-MM-dd").equals(DateUtil.format(new Date(), "yyyy-MM-dd"))) {
-            List<Long> orgIds =new ArrayList<>();
+            List<Long> orgIds = new ArrayList<>();
             orgIds.add(sysWorkTime.getOrgId());
-            Map<String,Object> param = new HashMap<>();
-            param.put("orgIds",orgIds);
+            Map<String, Object> param = new HashMap<>();
+            param.put("orgIds", orgIds);
             param.put("sysWorkTime", new Gson().toJson(sysWorkTime));
-            log.info("时间{}修改作息远程调用生成履职任务",new Date());
+            log.info("时间{}修改作息远程调用生成履职任务", new Date());
             AjaxResult result = remoteResumptionTaskService.dayTaskByWorkTime(param, SecurityConstants.INNER);
-            log.info("时间{}修改作息远程调用生成履职任务返回{}",new Date(),result.get("msg"));
+            log.info("时间{}修改作息远程调用生成履职任务返回{}", new Date(), result.get("msg"));
 
         }
     }
@@ -451,4 +452,14 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         }
         return new ArrayList<>();
     }
+
+    @Override
+    public List<SysWorkTime> findFutureWorkTime(List<Long> orgId, String time) {
+        return lambdaQuery()
+                .ge(SysWorkTime::getYmdDate, time)
+                .in(SysWorkTime::getOrgId, orgId)
+                .select(SysWorkTime::getId, SysWorkTime::getIsEnable, SysWorkTime::getYmdDate, SysWorkTime::getOrgId)
+                .list();
+
+    }
 }