Эх сурвалжийг харах

优化sop执行计划定时任务扫描接口

车车 2 сар өмнө
parent
commit
0b7efd55eb

+ 4 - 25
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/job/SopExecutionPlanJob.java

@@ -1,27 +1,13 @@
 package cn.iocoder.yudao.module.iscs.job;
 package cn.iocoder.yudao.module.iscs.job;
 
 
-import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
 import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketMessVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketSaveReqVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.notifyconfig.vo.MessSaveVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopExecutionPlanRespVO;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.JobTicketDO;
-import cn.iocoder.yudao.module.iscs.service.jobticket.JobTicketService;
-import cn.iocoder.yudao.module.iscs.service.notifyconfig.NotifyConfigService;
 import cn.iocoder.yudao.module.iscs.service.sop.SopExecutionPlanService;
 import cn.iocoder.yudao.module.iscs.service.sop.SopExecutionPlanService;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-
 /**
 /**
  * SOP执行计划任务
  * SOP执行计划任务
  *
  *
@@ -33,10 +19,6 @@ public class SopExecutionPlanJob implements JobHandler {
 
 
     @Resource
     @Resource
     private SopExecutionPlanService sopExecutionPlanService;
     private SopExecutionPlanService sopExecutionPlanService;
-    @Resource
-    private JobTicketService jobTicketService;
-    @Resource
-    private NotifyConfigService notifyConfigService;
 
 
     /**
     /**
      * 查找需要执行的数据,生成作业
      * 查找需要执行的数据,生成作业
@@ -48,12 +30,7 @@ public class SopExecutionPlanJob implements JobHandler {
     @Override
     @Override
     @TenantJob
     @TenantJob
     public String execute(String param) throws JsonProcessingException {
     public String execute(String param) throws JsonProcessingException {
-        /*TenantUtils.execute(1L, () -> {
-            AdminUserRespDTO user = new AdminUserRespDTO();
-            user.setId(0L);
-            return BeanUtils.toBean(user, Response.class);
-        });*/
-        String yyyymmdd = DateUtil.format(new Date(), "yyyy-MM-dd");
+        /*String yyyymmdd = DateUtil.format(new Date(), "yyyy-MM-dd");
         SopExecutionPlanRespVO sopExecutionPlanRespVO = new SopExecutionPlanRespVO();
         SopExecutionPlanRespVO sopExecutionPlanRespVO = new SopExecutionPlanRespVO();
         sopExecutionPlanRespVO.setNextExecutDate(yyyymmdd);
         sopExecutionPlanRespVO.setNextExecutDate(yyyymmdd);
         List<SopExecutionPlanRespVO> list = sopExecutionPlanService.getList(sopExecutionPlanRespVO);
         List<SopExecutionPlanRespVO> list = sopExecutionPlanService.getList(sopExecutionPlanRespVO);
@@ -105,7 +82,9 @@ public class SopExecutionPlanJob implements JobHandler {
                 notifyConfigService.insertMessByRule(messSaveVO);
                 notifyConfigService.insertMessByRule(messSaveVO);
             }
             }
         }
         }
-        return String.format("定时执行sop生成作业,sopIds = " + sopIds + ",ticketIds = " + ticketIds);
+        return String.format("定时执行sop生成作业,sopIds = " + sopIds + ",ticketIds = " + ticketIds);*/
+        sopExecutionPlanService.addJobBySopExecutionPlan();
+        return "true";
     }
     }
 
 
 }
 }

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopExecutionPlanService.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopExecutionPlanResp
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopExecutionPlanSaveReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.SopExecutionPlanSaveReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
 
 
 import java.util.List;
 import java.util.List;
@@ -67,4 +68,7 @@ public interface SopExecutionPlanService extends IService<SopExecutionPlanDO> {
 
 
     List<SopExecutionPlanRespVO> getList(SopExecutionPlanRespVO vo);
     List<SopExecutionPlanRespVO> getList(SopExecutionPlanRespVO vo);
 
 
+
+    Boolean addJobBySopExecutionPlan() throws JsonProcessingException;
+
 }
 }

+ 83 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/sop/SopExecutionPlanServiceImpl.java

@@ -5,22 +5,31 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.lang.Assert;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketMessVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.notifyconfig.vo.MessSaveVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
 import cn.iocoder.yudao.module.iscs.controller.admin.sop.vo.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.holiday.HolidayDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.holiday.HolidayDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.JobTicketDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.SopExecutionPlanDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopExecutionPlanMapper;
 import cn.iocoder.yudao.module.iscs.dal.mysql.sop.SopExecutionPlanMapper;
 import cn.iocoder.yudao.module.iscs.service.holiday.HolidayService;
 import cn.iocoder.yudao.module.iscs.service.holiday.HolidayService;
+import cn.iocoder.yudao.module.iscs.service.jobticket.JobTicketService;
+import cn.iocoder.yudao.module.iscs.service.notifyconfig.NotifyConfigService;
 import cn.iocoder.yudao.module.iscs.utils.SuperDateUtils;
 import cn.iocoder.yudao.module.iscs.utils.SuperDateUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 
 
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
 
 
 /**
 /**
@@ -38,6 +47,10 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
     private SopService sopService;
     private SopService sopService;
     @Resource
     @Resource
     private HolidayService holidayService;
     private HolidayService holidayService;
+    @Resource
+    private NotifyConfigService notifyConfigService;
+    @Resource
+    private JobTicketService jobTicketService;
 
 
     @Override
     @Override
     public Long createSopExecutionPlan(SopExecutionPlanSaveReqVO createReqVO) {
     public Long createSopExecutionPlan(SopExecutionPlanSaveReqVO createReqVO) {
@@ -356,4 +369,74 @@ public class SopExecutionPlanServiceImpl extends ServiceImpl<SopExecutionPlanMap
         return sopExecutionPlanMapper.getList(vo);
         return sopExecutionPlanMapper.getList(vo);
     }
     }
 
 
+    @Transactional
+    @Override
+    public Boolean addJobBySopExecutionPlan() throws JsonProcessingException {
+
+        String yyyymmdd = DateUtil.format(new Date(), "yyyy-MM-dd");
+        SopExecutionPlanRespVO sopExecutionPlanRespVO = new SopExecutionPlanRespVO();
+        sopExecutionPlanRespVO.setNextExecutDate(yyyymmdd);
+        List<SopExecutionPlanRespVO> list = getList(sopExecutionPlanRespVO);
+        List<Long> sopIds = new ArrayList<>();
+        List<Long> ticketIds = new ArrayList<>();
+        for (SopExecutionPlanRespVO executionPlanRespVO : list) {
+            if (executionPlanRespVO.getEnableExecutionPlan() != null && executionPlanRespVO.getEnableExecutionPlan().equals(1)) {
+                // 检查有没有生成,没有生成得话补充生成
+                String nextExecutDate = executionPlanRespVO.getNextExecutDate();
+                String startTime = executionPlanRespVO.getStartTime();
+                String planStartTime = StringUtils.isBlank(startTime) ? nextExecutDate : nextExecutDate + " " + startTime;
+                JobTicketDO one = jobTicketService.getOne(Wrappers.<JobTicketDO>lambdaQuery()
+                        .eq(JobTicketDO::getSopId, executionPlanRespVO.getSopId())
+                        .eq(JobTicketDO::getPlanStartTime, planStartTime));
+                if (one != null) {
+                    continue;
+                }
+                // 开始生成作业
+                JobTicketSaveReqVO jobTicketSaveReqVO = new JobTicketSaveReqVO();
+                jobTicketSaveReqVO.setSopId(executionPlanRespVO.getSopId());
+                jobTicketSaveReqVO.setTicketName("SOP计划执行作业-" + executionPlanRespVO.getSopId() + "-" + yyyymmdd);
+                jobTicketSaveReqVO.setCreateType("1");
+                jobTicketSaveReqVO.setPlanStartTime(planStartTime);
+                Long ticketId = jobTicketService.insertJobTicketBySop(jobTicketSaveReqVO);
+                sopIds.add(executionPlanRespVO.getSopId());
+                ticketIds.add(ticketId);
+
+                // 生成完成之后更新isc_sop_execution_plan中的next_execut_date
+                SopExecutionPlanRespVO sopExecutionPlan = getSopExecutionPlan(executionPlanRespVO.getId());
+                if (sopExecutionPlan.getPreviewDataList() != null
+                        && !sopExecutionPlan.getPreviewDataList().isEmpty()
+                        // 应为第一条是今天的数据,所以大于等于2才有后面需要执行的数据
+                        && sopExecutionPlan.getPreviewDataList().size() >= 2) {
+                        update(Wrappers.<SopExecutionPlanDO>lambdaUpdate()
+                                .eq(SopExecutionPlanDO::getSopId, executionPlanRespVO.getId())
+                                .set(SopExecutionPlanDO::getNextExecutDate, sopExecutionPlan.getPreviewDataList().get(1).getPlanDay()));
+                }
+
+                // 发送消息
+                // 定义匹配输入格式的解析器
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                JobTicketMessVO jobMessParams = jobTicketService.getJobMessParams(ticketId);
+                Map<String, Object> stringObjectHashMap = new HashMap<>();
+                stringObjectHashMap.put("workstationName", jobMessParams.getWorkstationName());
+                stringObjectHashMap.put("sopName", jobMessParams.getSopName());
+                stringObjectHashMap.put("jobTicketName", jobMessParams.getJobTicketName());
+                stringObjectHashMap.put("sendUser", "系统管理员");
+                // stringObjectHashMap.put("receiveUser", "收信人名字");
+                stringObjectHashMap.put("ticketStartTime", jobMessParams.getTicketStartTime());
+                stringObjectHashMap.put("ticketEndTime", jobMessParams.getTicketEndTime());
+                stringObjectHashMap.put("machineryName", jobMessParams.getMachineryName());
+                stringObjectHashMap.put("sopTypeName", jobMessParams.getSopTypeName());
+                MessSaveVO messSaveVO = new MessSaveVO();
+                messSaveVO.setSopId(executionPlanRespVO.getSopId());
+                messSaveVO.setType(0);
+                messSaveVO.setRule("0");
+                messSaveVO.setTicketId(ticketId);
+                messSaveVO.setShouldSendTime(LocalDateTime.parse(planStartTime, formatter));
+                messSaveVO.setTemplateParams(stringObjectHashMap);
+                notifyConfigService.insertMessByRule(messSaveVO);
+            }
+        }
+        return true;
+    }
+
 }
 }