Browse Source

预案演练bug修改,增加作息变更事件监听代码

jingyuanchao 2 years ago
parent
commit
10a888a498

+ 27 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/event/WorkTimeChangeEvent.java

@@ -0,0 +1,27 @@
+package com.xunmei.common.core.event;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.List;
+
+
+@Getter
+
+public class WorkTimeChangeEvent extends ApplicationEvent {
+
+    @ApiModelProperty(value = "类型 1:营业 2:歇业")
+    private Integer type;
+
+
+    @ApiModelProperty(value = "机构id数组",notes = "受影响的机构")
+    private List<Long> orgIds;
+
+    public WorkTimeChangeEvent(Object source, Integer type, List<Long> orgIds) {
+        super(source);
+        this.type = type;
+        this.orgIds = orgIds;
+    }
+
+}

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

@@ -137,7 +137,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         BeanUtils.copyProperties(plan, vo);
         vo.setStartDate(plan.getPlanStartDate());
         vo.setEndDate(plan.getPlanEndDate());
-        vo.setBuildTaskNow(ObjectUtil.equal(1,plan.getBuildTaskNow()));
+        vo.setBuildTaskNow(ObjectUtil.equal(1, plan.getBuildTaskNow()));
         vo.setFileList(ObjectUtil.isNotEmpty(plan.getFileList()) ? JSON.parseArray(plan.getFileList(), String.class) : null);
         final List<CoreDrillPlanToExecOrg> execOrgList = coreDrillPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", id));
         final List<Long> execOrgIdList = execOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(Collectors.toList());
@@ -227,7 +227,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             throw new RuntimeException("当前用户所在机构类型无法确认!");
         }
         //如果是省联社或者办事处则返回1,其他机构类型返回0
-        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType,  OrgTypeEnum.BAN_SHI_CHU.getCode());
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType, OrgTypeEnum.BAN_SHI_CHU.getCode());
     }
 
     /**
@@ -240,7 +240,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Transactional(rollbackFor = Exception.class)
     public int updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
         final CoreDrillPlan plan = getById(request.getId());
-        AssertUtil.isEmpty(plan, "计划不存在!");
+        AssertUtil.isNotEmpty(plan, "计划不存在!");
         //此处判断能否修改,如果可以 需要删除任务,且还需要判断是否需要生成任务
         Boolean can = checkCanUpdate(request, plan);
         if (!can) {
@@ -277,8 +277,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         deletePlanAndTaskByParentPlanId(planId);
         List<CoreDrillPlan> planList = buildPlanData(plan, drillPlanToRoleList);
 
-        if (plan.getPlanStatus()==DrillPlanStatus.DELETED.getCode()){
-            log.info("计划已被修改为"+DrillPlanStatus.DELETED.getDesc()+",不再生成任务!");
+        if (plan.getPlanStatus() == DrillPlanStatus.DELETED.getCode()) {
+            log.info("计划已被修改为" + DrillPlanStatus.DELETED.getDesc() + ",不再生成任务!");
             return;
         }
 
@@ -288,14 +288,14 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreDrillTaskService.createTaskForNow(dataVo, plan.getPlanStartDate(), plan.getPlanEndDate());
-            },threadPoolTaskExecutor);
+            }, threadPoolTaskExecutor);
         }
     }
 
     private void deletePlanAndTaskByParentPlanId(Long planId) {
         //删除原有数据, 然后重新生成计划,任务
         List<Long> planIdList = coreDrillPlanMapper.selectAllIdByParentId(planId);
-        if (ObjectUtil.isEmpty(planIdList)){
+        if (ObjectUtil.isEmpty(planIdList)) {
             return;
         }
         if (ObjectUtil.isNotEmpty(planIdList)) {
@@ -326,8 +326,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             return;
         }
 
-        if (plan.getPlanStatus()==DrillPlanStatus.DELETED.getCode()){
-            log.info("计划已被修改为"+DrillPlanStatus.DELETED.getDesc()+",不再生成任务!");
+        if (plan.getPlanStatus() == DrillPlanStatus.DELETED.getCode()) {
+            log.info("计划已被修改为" + DrillPlanStatus.DELETED.getDesc() + ",不再生成任务!");
             return;
         }
 
@@ -338,9 +338,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreDrillTaskService.createTaskForNow(dataVo, plan.getPlanStartDate(), plan.getPlanEndDate());
-            },threadPoolTaskExecutor);
+            }, threadPoolTaskExecutor);
         }
     }
+
     private Boolean checkCanUpdate(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
         if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
             throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
@@ -370,13 +371,13 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     }
 
     private void validatePlanForStandard(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
-        if (request.getExecTimes() < plan.getExecTimes()){
+        if (request.getExecTimes() < plan.getExecTimes()) {
             throw new RuntimeException("培训次数不应低于基准次数!");
         }
         validateFieldForStandard(request.getPlanStatus(), plan.getPlanStatus(), "下发计划仅允许修改培训次数!");
         validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "下发计划仅允许修改培训次数!");
         validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "下发计划仅允许修改培训次数!");
-        validateFieldForStandard(request.getPlanName(),plan.getPlanName(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getPlanName(), plan.getPlanName(), "下发计划仅允许修改培训次数!");
 
         validateRoleAndOrgForStandard(request, plan);
     }
@@ -649,7 +650,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         // 下发 按钮显示逻辑:仅省联社安全保卫管理人员进入且由省联社管理安全保卫人员创建的计划才显示
         //todo 判断当前人的角色信息
         List<CoreDrillPlan> list = buildPlanData(plan, new ArrayList<>());
-
+        //下发后修改为使用中
+        plan.setPlanStatus(DrillPlanStatus.USING.getCode());
         plan.setIssue(1);
         this.updateById(plan);
         //事务提交后执行
@@ -663,7 +665,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                             final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
                         }
-                    },threadPoolTaskExecutor);
+                    }, threadPoolTaskExecutor);
                 }
             }
         });

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

@@ -326,18 +326,22 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void createTaskForNow(CoreDrillPlanDataVo plan, Date start, Date end) {
 
-        List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
-        if (workTimeList.isEmpty()){
-            log.error("未获取到该机构的作息时间");
-            return;
-        }
 
-        //如果不是无周期的计划,那么需要查询出他的时间范围
+
+
+
         if (plan.getPlanCycle() != 0) {
+            //如果不是无周期的计划,那么需要查询出他的时间范围,且需要判断作息时间是否存在
+            List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
+            if (workTimeList.isEmpty()){
+                log.error("未获取到该机构的作息时间");
+                return;
+            }
             DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
             start = dateRange.getStartTime();
             end = dateRange.getEndTime();
         } else {
+            //无周期
             start = DateUtil.beginOfDay(start).setField(DateField.MILLISECOND, 0);
             end = DateUtil.endOfDay(end).setField(DateField.MILLISECOND, 0);
         }

+ 37 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/eventlistener/WorkTimeChangeEventListener.java

@@ -0,0 +1,37 @@
+package com.xunmei.core.edu.eventlistener;
+
+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) {
+
+        switch (event.getType()) {
+            case 1:
+                //营业
+                coreEduTrainingTaskService.timeChangeForTaskAdd(event.getOrgIds());
+                break;
+            case 2:
+                //歇业
+                coreEduTrainingTaskService.timeChangeForTaskDel(event.getOrgIds());
+                break;
+            default:
+                break;
+        }
+
+    }
+}

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java

@@ -97,4 +97,9 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
 
 
     List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto);
+
+
+    void timeChangeForTaskAdd(List<Long> orgIds);
+
+    void timeChangeForTaskDel(List<Long> orgIds);
 }

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

@@ -356,17 +356,20 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     @Override
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void createTaskForNow(CoreEduTrainingPlanDataVo plan, Date start, Date end) {
-        List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
-        if (workTimeList.isEmpty()){
-            log.error("未获取到该机构的作息时间");
-            return;
-        }
-        //如果不是无周期的计划,那么需要查询出他的时间范围
+
+
         if (plan.getPlanCycle() != 0) {
+            //如果不是无周期的计划,那么需要查询出他的时间范围
+            List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
+            if (workTimeList.isEmpty()){
+                log.error("未获取到该机构的作息时间");
+                return;
+            }
             DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
             start = dateRange.getStartTime();
             end = dateRange.getEndTime();
         } else {
+            //无周期
             start = DateUtil.beginOfDay(start).setField(DateField.MILLISECOND, 0);
             end = DateUtil.endOfDay(end).setField(DateField.MILLISECOND, 0);
         }
@@ -693,6 +696,18 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         });
         return list;
     }
+
+    @Override
+    public void timeChangeForTaskAdd(List<Long> orgIds) {
+
+
+
+    }
+
+    @Override
+    public void timeChangeForTaskDel(List<Long> orgIds) {
+
+    }
 }