Просмотр исходного кода

预案演练定时任务新增

jingyuanchao 2 лет назад
Родитель
Сommit
57bfc19804

+ 5 - 0
project_data/sql/0.0.2/quartz/quartz.sql

@@ -9,3 +9,8 @@ INSERT INTO `sys_job`(`job_id`, `job_name`, `job_group`, `invoke_target`, `cron_
 
 DELETE from `sys_job` WHERE invoke_target='CoreResumptionTask.updateTaskStatus';
 INSERT INTO `sys_job` (`job_id`, `job_name`, `job_group`, `invoke_target`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (136, '每天更新履职任务状态', 'DEFAULT', 'CoreResumptionTask.updateTaskStatus', '0 0 1 * * ?', '1', '0', '0', 'jwx', '2023-09-27 17:50:48', '', NULL);
+
+delete from `sys_job` where invoke_target like 'CoreDrillTask.buildDrillTask%';
+INSERT INTO sys_job ( job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time) VALUES ('预案演练任务生成定时任务', 'DEFAULT', 'CoreDrillTask.buildDrillTask()', '0 0 1 * * ?', '1', '1', '0', '超级管理员', '2023-10-10 10:51:13', '', null);
+INSERT INTO sys_job ( job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time) VALUES ('预案演练任务生成定时任务(补偿接口)', 'DEFAULT', 'CoreDrillTask.buildDrillTask(\'cycle\',\'date\')', '0 0 1 * * ?', '1', '1', '1', '超级管理员', '2023-10-10 10:52:03', '', null);
+

+ 33 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteDrillService.java

@@ -0,0 +1,33 @@
+package com.xunmei.system.api;
+
+import com.xunmei.common.core.constant.ServiceNameConstants;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.factory.RemoteEduTrainingFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Date;
+
+/**
+ * 教育培训
+ *
+ * @author xunmei
+ */
+@FeignClient(contextId = "remoteDrillService", path = "/drill/task", value = ServiceNameConstants.CORE_SERVICE, fallbackFactory = RemoteEduTrainingFallbackFactory.class)
+public interface RemoteDrillService {
+
+    /**
+     * 生成教育培训任务
+     *
+     * @param cycle
+     * @param date
+     * @return
+     */
+    @GetMapping(value = "/buildDrillTask")
+    AjaxResult buildDrillTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date);
+
+    @GetMapping(value = "/updateDrillTaskStatus")
+    AjaxResult updateDrillTaskStatus();
+
+}

+ 22 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteDrillFallbackFactory.java

@@ -0,0 +1,22 @@
+package com.xunmei.system.api.factory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * 字典服务降级处理
+ *
+ * @author xunmei
+ */
+@Component
+public class RemoteDrillFallbackFactory implements FallbackFactory<RemoteDrillFallbackFactory> {
+    private static final Logger log = LoggerFactory.getLogger(RemoteDrillFallbackFactory.class);
+
+
+    @Override
+    public RemoteDrillFallbackFactory create(Throwable cause) {
+        return null;
+    }
+}

+ 2 - 1
soc-api/soc-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -11,4 +11,5 @@ com.xunmei.system.api.factory.RemoteRetrievalTaskFallbackFactory
 com.xunmei.system.api.factory.RemoteEduTrainingFallbackFactory
 com.xunmei.system.api.factory.RemoteResumptionTaskFallbackFactory
 com.xunmei.system.api.factory.RemoteWeatherFallbackFactory
-com.xunmei.system.api.factory.RemoteSafetyCheckTaskFallbackFactory
+com.xunmei.system.api.factory.RemoteSafetyCheckTaskFallbackFactory
+com.xunmei.system.api.factory.RemoteDrillFallbackFactory

+ 8 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillTaskController.java

@@ -101,8 +101,8 @@ public class CoreDrillTaskController extends BaseController {
     }
 
     @ApiOperation(value = "生成任务")
-    @GetMapping(value = "/buildEduTask")
-    AjaxResult buildEduTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date) {
+    @GetMapping(value = "/buildDrillTask")
+    AjaxResult buildDrillTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date) {
         return success(coreDrillTaskService.buildDrillTask(cycle, date));
     }
 
@@ -134,4 +134,10 @@ public class CoreDrillTaskController extends BaseController {
     public AjaxResult doRecTask(@RequestBody @Validated CoreDrillTaskDoRec request) {
         return success(coreDrillTaskService.doRecTask(request));
     }
+
+    @ApiOperation(value = "未完成任务修改成已过期")
+    @GetMapping("/updateDrillTaskStatus")
+    public AjaxResult updateDrillTaskStatus() {
+        return success(coreDrillTaskService.updateDrillTaskStatus());
+    }
 }

+ 3 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillTaskMapper.java

@@ -11,7 +11,6 @@ import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskReportDto;
 import com.xunmei.common.core.domain.drill.vo.*;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
-import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -45,4 +44,7 @@ public interface CoreDrillTaskMapper extends BaseMapper<CoreDrillTask> {
     List<PanelListVo> selectCurUserTaskList(@Param("request") PanelListDto request,@Param("list") List<Integer> list);
 
     List<PanelListVo> selectWaitEvaluateTaskList(@Param("request") PanelListDto panelListDto);
+
+    Integer updateTaskStatus();
+
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillTaskService.java

@@ -100,4 +100,7 @@ public interface ICoreDrillTaskService extends IService<CoreDrillTask> {
     int doRecTask(CoreDrillTaskDoRec request);
 
     List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto);
+
+    Integer updateDrillTaskStatus();
+
 }

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

@@ -857,6 +857,12 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
 
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
+    public Integer updateDrillTaskStatus() {
+        return coreDrillTaskMapper.updateTaskStatus();
+    }
 }
 
 

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

@@ -96,7 +96,7 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
 
     List<CoreEduTrainingTaskToUser> signUserList(Long taskId);
 
-    String updateEduTaskStatus();
+    int updateEduTaskStatus();
 
 
     List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto);

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

@@ -234,9 +234,9 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         coreEduTrainingTask.setNote(request.getNote());
         coreEduTrainingTask.setRecorderId(SecurityUtils.getUserId());
         coreEduTrainingTask.setImageList(request.getImageList());
-        if (ObjectUtil.isNotEmpty(request.getFileList())){
+        if (ObjectUtil.isNotEmpty(request.getFileList())) {
             coreEduTrainingTask.setFileList(JSON.toJSONString(request.getFileList()));
-        }else {
+        } else {
             coreEduTrainingTask.setFileList(null);
         }
         List<SysUser> userList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
@@ -255,7 +255,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 //            taskUserList = Stream.of(request.getAbsenceList(), request.getAbsentList()).flatMap(Collection::stream).collect(Collectors.toList());
 //        }
         coreEduTrainingTaskToUserMapper.deleteByMap(MapUtil.of("edu_training_task_id", request.getId()));
-        List<CoreEduTrainingTaskToUser> taskUserList=request.getTaskUserList();
+        List<CoreEduTrainingTaskToUser> taskUserList = request.getTaskUserList();
         if (ObjectUtil.isNotEmpty(taskUserList)) {
             checkTheSameUser(taskUserList);
             for (CoreEduTrainingTaskToUser taskToUser : taskUserList) {
@@ -267,7 +267,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         // 暂存: 待提交    提交:待签名
         if (ObjectUtil.equal(request.getSubmitType(), 1)) {
             coreEduTrainingTask.setStatus(EduTrainingDoStatus.WAIT_SUBMIT.getCode());
-        }else {
+        } else {
             coreEduTrainingTask.setStatus(EduTrainingDoStatus.WAIT_SIGN.getCode());
         }
 
@@ -525,7 +525,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             updateWrapper.eq(CoreEduTrainingTask::getId, id);
             updateWrapper.set(CoreEduTrainingTask::getPdfUrl, pdfUrl);
             this.update(updateWrapper);
-        },threadPoolTaskExecutor);
+        }, threadPoolTaskExecutor);
 
        /* //新方式生成pdf
         try {
@@ -627,24 +627,23 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
                 DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
-            },threadPoolTaskExecutor);
+            }, threadPoolTaskExecutor);
         }
         return "创建成功";
     }
 
     @Override
-    public String updateEduTaskStatus() {
-
-        coreEduTrainingTaskMapper.updateStatusByIdList();
-        return "更新成功";
-
+    public int updateEduTaskStatus() {
+        return coreEduTrainingTaskMapper.updateStatusByIdList();
     }
 
     @Override
     public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
         List<PanelListVo> list = coreEduTrainingTaskMapper.selectCurUserTaskList(panelListDto);
-        list.removeIf(item->DateUtil.compare(new Date(), item.getEndTime()) > 0);
-        list.forEach(item -> {item.setType(PanelTypeEnums.EDU_TRAINING.getCode());});
+        list.removeIf(item -> DateUtil.compare(new Date(), item.getEndTime()) > 0);
+        list.forEach(item -> {
+            item.setType(PanelTypeEnums.EDU_TRAINING.getCode());
+        });
         return list;
     }
 }

+ 29 - 21
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -64,7 +64,8 @@
     <select id="selectPageData" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo"
             parameterType="com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto">
         select t.id, plan_id, t.org_id, t.org_name, title, type as type, status,rec_status, host_id,u.name as hostName,
-        start_date, end_date, t.drill_time, t.pdf_url as pdfUrl,drill_site as drillSite,comment_score as commentScore,comment
+        start_date, end_date, t.drill_time, t.pdf_url as pdfUrl,drill_site as drillSite,comment_score as
+        commentScore,comment
         from core_drill_task t left join sys_user u on t.host_id=u.id
         <where>
             <choose>
@@ -244,8 +245,8 @@
 
     <select id="selectRecTaskListPage" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskRecTaskPageVo">
         select id,org_name,drill_time,type from core_drill_task t
-       where drill_time is not null
-            <include refid="recTaskListPage"/>
+        where drill_time is not null
+        <include refid="recTaskListPage"/>
 
 
         <if test="request.startTime != null and request.endTime != null">
@@ -279,35 +280,35 @@
 
     <select id="selectCurUserTaskList" resultType="com.xunmei.common.core.domain.panel.vo.PanelListVo">
         select distinct t.id as id, title as taskName,t.start_date startTime,t.end_date as endTime,t.status
-        from core_drill_task t inner join core_drill_task_to_role tr  on t.id=tr.drill_task_id
-        where t.org_id =#{request.orgId} and  tr.role_id in
+        from core_drill_task t inner join core_drill_task_to_role tr on t.id=tr.drill_task_id
+        where t.org_id =#{request.orgId} and tr.role_id in
         <foreach collection="request.roleIdList" item="roleId" open="(" separator="," close=")">
             #{roleId}
         </foreach>
         and t.status in (0,1,2)
         <if test="request.startTime != null and request.endTime != null">
-        and (
-        (
-        #{request.startTime}   <![CDATA[<=]]> t.start_date
-        and #{request.endTime}     <![CDATA[>=]]> t.start_date
-        )
-        or
-        (
-        #{request.startTime}   <![CDATA[<=]]> t.end_date
-        and #{request.endTime}     <![CDATA[>=]]> t.end_date
-        )
-        or (
-        #{request.startTime}   <![CDATA[>=]]> t.start_date
-        and #{request.endTime}     <![CDATA[<=]]> t.end_date
-        )
-        )
+            and (
+            (
+            #{request.startTime}   <![CDATA[<=]]> t.start_date
+            and #{request.endTime}     <![CDATA[>=]]> t.start_date
+            )
+            or
+            (
+            #{request.startTime}   <![CDATA[<=]]> t.end_date
+            and #{request.endTime}     <![CDATA[>=]]> t.end_date
+            )
+            or (
+            #{request.startTime}   <![CDATA[>=]]> t.start_date
+            and #{request.endTime}     <![CDATA[<=]]> t.end_date
+            )
+            )
         </if>
     </select>
 
     <select id="selectWaitEvaluateTaskList" resultType="com.xunmei.common.core.domain.panel.vo.PanelListVo">
         select distinct t.id as id, title as taskName,t.start_date startTime,t.end_date as endTime,t.status
         from core_drill_task t
-        where  t.status =2
+        where t.status =2
         and t.org_path like concat(#{request.orgPath},'%')
         <if test="request.startTime != null and request.endTime != null">
             and (
@@ -327,4 +328,11 @@
             )
         </if>
     </select>
+
+    <update id="updateTaskStatus">
+        update core_drill_task
+        set status=3
+        where end_date <![CDATA[<]]> now()
+          and status in (0, 1)
+    </update>
 </mapper>

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -186,7 +186,7 @@
         update core_edu_training_task
         set status=3
         where end_date <![CDATA[<]]> now()
-          and status <![CDATA[<]]> 2
+          and status not in (2,3)
     </update>
 
     <select id="selectCurUserTaskList" resultType="com.xunmei.common.core.domain.panel.vo.PanelListVo">

+ 40 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreDrillTask.java

@@ -0,0 +1,40 @@
+package com.xunmei.job.task;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.RemoteDrillService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Slf4j
+@Component("CoreDrillTask")
+public class CoreDrillTask {
+
+    @Autowired
+    RemoteDrillService remoteDrillService;
+
+    public void buildDrillTask() {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行预案演练定时任务,当前任务 id:{},当前时间:{}", id, new Date());
+        AjaxResult result = remoteDrillService.buildDrillTask(null, null);
+        log.info("执行预案演练定时任务结束....,当前任务 id:{},当前时间:{},结果:{}", id, new Date(), JSON.toJSONString(result));
+    }
+
+    public void buildDrillTask(Integer cycle, Date date) {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行预案演练定时任务,当前任务 id:{},周期:{},时间:{}", id, cycle, date);
+        AjaxResult result = remoteDrillService.buildDrillTask(cycle, date);
+        log.info("执行预案演练定时任务结束,当前任务 id:{},周期:{},时间:{},结果:{}", id, cycle, date, JSON.toJSONString(result));
+    }
+
+    public void updateDrillTaskStatus() {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行预案演练定时任务,处理未完成的数据的任务数据状态为 已逾期,当前任务 id:{}", id);
+        AjaxResult result = remoteDrillService.updateDrillTaskStatus();
+        log.info("执行预案演练定时任务结束....,处理未完成的数据的任务数据状态为 已逾期,当前任务 id:{},结果:{}", id, JSON.toJSONString(result));
+    }
+}