From f794c2e60deed2a51dc75d4efff7c8b0ca7ffa65 Mon Sep 17 00:00:00 2001 From: yitonglei Date: Thu, 2 Mar 2023 18:07:08 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=87=AA=E5=8A=A8=E5=B7=A5=E5=8D=95=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=87=AA=E5=8A=A8=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/config/SpringContextHolder.java | 75 +++++ .../springblade/plugin/config/TaskConfig.java | 5 +- .../plugin/listener/FormEndListener.java | 35 ++ .../plugin/listener/ProcessEndListener.java | 43 +++ .../operation/workorder/entity/WorkOrder.java | 1 + .../workbench/entity/AutoStartModel.java | 2 + .../service/IAutoStartModelService.java | 3 +- .../impl/AutoStartModelServiceImpl.java | 300 ++++++++++++++---- .../service/impl/WfProcessService.java | 51 +-- 9 files changed, 419 insertions(+), 96 deletions(-) create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/SpringContextHolder.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/FormEndListener.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/SpringContextHolder.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/SpringContextHolder.java new file mode 100644 index 0000000..fff9a34 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/SpringContextHolder.java @@ -0,0 +1,75 @@ +package org.springblade.plugin.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; + +/** + * @Description + * @Author ytl + * @Date 2023/3/2 0002 15:36 + */ +@Slf4j +@Configuration +public class SpringContextHolder implements ApplicationContextAware, DisposableBean { + private static ApplicationContext applicationContext = null; + /** + * 取得存储在静态变量中的ApplicationContext. + */ + public static ApplicationContext getApplicationContext() { + assertContextInjected(); + return applicationContext; + } + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) { + log.debug("从SpringContextHolder中取出Bean:" + name); + assertContextInjected(); + return (T) applicationContext.getBean(name); + } + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(Class requiredType) { + assertContextInjected(); + return applicationContext.getBean(requiredType); + } + /** + * 清除SpringContextHolder中的ApplicationContext为Null. + */ + public static void clearHolder() { + log.info("清除SpringContextHolder中的ApplicationContext:" + + applicationContext); + applicationContext = null; + } + /** + * 实现ApplicationContextAware接口, 注入Context到静态变量中. + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) { +// logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext); + if (SpringContextHolder.applicationContext != null) { + log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext); + } + SpringContextHolder.applicationContext = applicationContext; // NOSONAR + } + /** + * 实现DisposableBean接口, 在Context关闭时清理静态变量. + */ + @Override + public void destroy() throws Exception { + SpringContextHolder.clearHolder(); + } + /** + * 检查ApplicationContext不为空. + */ + private static void assertContextInjected() { + if(applicationContext == null) { + throw new IllegalStateException("applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder."); + } + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java index c9ce57c..06763f9 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java @@ -40,7 +40,7 @@ public class TaskConfig { * *只要autoStartModel中存在 next_flag = 0 且 is_break = 0 * *然后 next_Start_time <= 当前时间就生成新工单并修改next_flag = 1 */ - @Scheduled(fixedDelay = 6000*1000)//上次任务结束后10分钟执行一次 + @Scheduled(fixedDelay = 15*1000)//上次任务结束后10分钟执行一次 @Transactional(rollbackFor = Exception.class) @Async("taskExecutor") public void autoStartWorkOrder(){ @@ -70,6 +70,7 @@ public class TaskConfig { workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId()); workOrder.setType(autoStartModel.getType()); workOrder.setTenantId(WfTaskUtil.getTenantId()); + workOrder.setUploadRecord(autoStartModel.getUploadRecord()); //新增 workOrderService.save(workOrder); //修改nextFlag = 1,表示已经生成新工单了 @@ -84,7 +85,7 @@ public class TaskConfig { /** * 自动计算下一次的开始和结束时间 */ - @Scheduled(fixedDelay = 6000*1000) + @Scheduled(fixedDelay = 15*1000) @Transactional(rollbackFor = Exception.class) @Async("taskExecutor") public void computerNextDateOfOrder(){ diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/FormEndListener.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/FormEndListener.java new file mode 100644 index 0000000..6dbd44f --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/FormEndListener.java @@ -0,0 +1,35 @@ +package org.springblade.plugin.listener; + +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springblade.plugin.config.SpringContextHolder; +import org.springblade.plugin.workbench.service.IAutoStartModelService; +import org.springblade.plugin.workbench.service.impl.AutoStartModelServiceImpl; +import org.springframework.stereotype.Component; + +/** + * @Description + * @Author ytl + * @Date 2023/3/2 0002 15:52 + */ +@Component +public class FormEndListener implements ExecutionListener{ + @Override + public void notify(DelegateExecution delegateExecution) { + String event = delegateExecution.getEventName(); + String processInstanceId = delegateExecution.getProcessInstanceId(); + switch (event) { + case "start" : + System.out.println("FormEndListener--start event-------------------"); + break; + case "end" : + System.out.println("FormEndListener--end event----------------------"); +// IAutoStartModelService autoStartModelService = (IAutoStartModelService)SpringContextHolder.getBean(AutoStartModelServiceImpl.class); +// autoStartModelService.saveStartProcess(processInstanceId,delegateExecution.getVariables()); + break; + case "take" : + System.out.println("FormEndListener--take event---------------------"); + break; + } + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java new file mode 100644 index 0000000..2e8a848 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java @@ -0,0 +1,43 @@ +package org.springblade.plugin.listener; + + +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springblade.plugin.config.SpringContextHolder; +import org.springblade.plugin.workbench.service.IAutoStartModelService; +import org.springblade.plugin.workbench.service.impl.AutoStartModelServiceImpl; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @Description + * @Author ytl + * @Date 2023/3/2 0002 15:05 + */ +@Component +public class ProcessEndListener implements ExecutionListener { + + @Override + public void notify(DelegateExecution delegateExecution) { + String event = delegateExecution.getEventName(); + String processInstanceId = delegateExecution.getProcessInstanceId(); + Map variables = delegateExecution.getVariables(); + switch (event) { + case "start" : + System.out.println("ProcessEndListener-start event-------------------"); + + IAutoStartModelService autoStartModelService = (IAutoStartModelService)SpringContextHolder.getBean(AutoStartModelServiceImpl.class); + autoStartModelService.saveStartProcess(processInstanceId,variables); + autoStartModelService.updateAutoStartModel(processInstanceId,variables); + break; + case "end" : + System.out.println("ProcessEndListener-end event----------------------"); + + break; + case "take" : + System.out.println("ProcessEndListener-take event---------------------"); + break; + } + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/entity/WorkOrder.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/entity/WorkOrder.java index 5d62c8d..33c78de 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/entity/WorkOrder.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/entity/WorkOrder.java @@ -81,4 +81,5 @@ public class WorkOrder extends TenantEntity { @TableField(exist = false) private Date endTime2; + private String uploadRecord; } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/entity/AutoStartModel.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/entity/AutoStartModel.java index 5a250dc..bffb296 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/entity/AutoStartModel.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/entity/AutoStartModel.java @@ -81,4 +81,6 @@ public class AutoStartModel extends TenantEntity { */ @TableField(exist = false) private Date endTime; + + private String uploadRecord; } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java index 4ba2031..63247ca 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java @@ -24,6 +24,7 @@ public interface IAutoStartModelService extends BaseService { boolean breakAutoStartModel(String ids); - void updateAutoStartModel(String processinstanceId); + void updateAutoStartModel(String processinstanceId,Map variables); + void saveStartProcess(String processinstanceId,Map variables); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java index 8d782af..73a6a4f 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java @@ -2,6 +2,7 @@ package org.springblade.plugin.workbench.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import liquibase.pro.packaged.E; import lombok.AllArgsConstructor; import lombok.NonNull; import org.apache.commons.lang3.StringUtils; @@ -30,6 +31,8 @@ import org.springblade.plugin.operation.system.service.IModuleInfoService; import org.springblade.plugin.operation.system.service.IProjectInfoService; import org.springblade.plugin.operation.task.entity.TaskInfo; import org.springblade.plugin.operation.task.service.ITaskInfoService; +import org.springblade.plugin.operation.workorder.entity.WorkOrder; +import org.springblade.plugin.operation.workorder.service.IWorkOrderService; import org.springblade.plugin.workbench.cache.FlowCache; import org.springblade.plugin.workbench.entity.AutoStartModel; import org.springblade.plugin.workbench.enumutil.RepeatEnum; @@ -37,15 +40,18 @@ import org.springblade.plugin.workbench.enumutil.RepeatTypeEnum; import org.springblade.plugin.workbench.mapper.BladeManMadeMapper; import org.springblade.plugin.workbench.service.IAutoStartModelService; import org.springblade.plugin.workbench.vo.AutoStartModelVO; +import org.springblade.plugin.workflow.core.utils.WfTaskUtil; import org.springblade.system.cache.DictBizCache; import org.springblade.system.cache.SysCache; import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; import org.springblade.system.user.cache.UserCache; import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.validation.constraints.NotEmpty; +import java.time.Duration; import java.util.*; /** @@ -71,6 +77,8 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl autoStartModelWrapper = Wrappers.lambdaQuery(); +// autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0); +// List list = this.list(autoStartModelWrapper); +// if(list.size() > 0){ +// list.forEach(autoStartModel -> { +// autoStartModel.setStatus(10); +// List variableList = historyService.createHistoricVariableInstanceQuery().processInstanceId(processinstanceId).list(); +// Date qiwangwanchengshijian = DateUtil.plusDays(DateUtil.now(),1); +// for(HistoricVariableInstance hv : variableList){ +// switch (hv.getVariableName()){ +// case "guanlibumen": +// autoStartModel.setManagement(Long.valueOf(hv.getValue().toString())); +// break; +// case "renwufulei": +// autoStartModel.setTaskParent(Long.valueOf(hv.getValue().toString())); +// break; +// case "renwuzhonglei": +// autoStartModel.setTaskType(Long.valueOf(hv.getValue().toString())); +// break; +// case "renwudengji": +// autoStartModel.setTaskLevel(Long.valueOf(hv.getValue().toString())); +// break; +// case "xitongmingchengshujuku": +// autoStartModel.setOperateSys(Long.valueOf(hv.getValue().toString())); +// break; +// case "xitongmokuaishujubiao": +// autoStartModel.setOperateModule(Long.valueOf(hv.getValue().toString())); +// break; +// case "chongfumoshi": +// autoStartModel.setRepeatMode(Long.valueOf(hv.getValue().toString())); +// break; +// case "qiwangwanchengshijian": +// qiwangwanchengshijian = DateUtil.parse(hv.getValue().toString(),"yyyy-MM-dd HH:mm:ss"); +// break; +// case "type": +// autoStartModel.setRepeatMode(Long.valueOf(hv.getValue().toString())); +// break; +// } +// } +// //获取工作流的开始时间 +// HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processinstanceId).singleResult(); +// Date startTime = historicProcessInstance.getStartTime(); +//// Date nextStartTime; +//// Date nextEndTime; +//// //获取任务重复模式 +//// Long repeatMode = autoStartModel.getRepeatMode(); +//// System.out.println(Long.valueOf(RepeatEnum.每周.getCode())); +//// System.out.println(repeatMode); +//// if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){ +//// nextStartTime = DateUtil.plusWeeks(startTime,1); +//// nextEndTime = DateUtil.plusWeeks(qiwangwanchengshijian,1); +//// }else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){ +//// nextStartTime = DateUtil.plusMonths(startTime,1); +//// nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,1); +//// }else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){ +//// nextStartTime = DateUtil.plusMonths(startTime,3); +//// nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,3); +//// }else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){ +//// nextStartTime = DateUtil.plusDays(startTime,1); +//// nextEndTime = DateUtil.plusDays(qiwangwanchengshijian,1); +//// }else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){ +//// nextStartTime = DateUtil.plusMinutes(startTime,1); +//// nextEndTime = DateUtil.plusMinutes(qiwangwanchengshijian,1); +//// } +//// else{ +//// return; +//// } +// //还要自动生成work_order,所以以本次的信息为依据,auto_start_model nextFlag = 1 ,表示已经生成工单了 +// autoStartModel.setNextStartTime(startTime); +// autoStartModel.setNextEndTime(qiwangwanchengshijian); +// autoStartModel.setNextFlag(1); +// baseMapper.updateById(autoStartModel); +// +// +// //生成工单 +// WorkOrder workOrder = new WorkOrder(); +// workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId()); +// workOrder.setTenantId(autoStartModel.getTenantId()); +// workOrder.setApplyUser(autoStartModel.getApplyUser().toString()); +// workOrder.setMaintenanceCompany(autoStartModel.getMaintenanceCompany().toString()); +// workOrder.setManagement(autoStartModel.getManagement().toString()); +// workOrder.setTaskParent(autoStartModel.getTaskParent().toString()); +// workOrder.setTaskType(autoStartModel.getTaskType().toString()); +// workOrder.setTaskLevel(autoStartModel.getTaskLevel().toString()); +// workOrder.setRepeatMode(autoStartModel.getRepeatMode().toString()); +// workOrder.setType(autoStartModel.getType()); +// workOrder.setOperateSys(autoStartModel.getOperateSys().toString()); +// workOrder.setOperateModule(autoStartModel.getOperateModule().toString()); +// //如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成 +// if(StringUtils.equals(autoStartModel.getApplyRole(),"运维公司") && StringUtils.equals(autoStartModel.getTaskLevel().toString(),"1624973130579636225")){ +// workOrder.setIsFinish(1); +// workOrder.setFinishTime(qiwangwanchengshijian); +// } +// +// workOrderService.save(workOrder); +// }); +// } +// } + @Override - @Async("taskExecutor") - public void updateAutoStartModel(String processinstanceId){ - //查询AutoStartModel status = 10 isBreak = 0的数据 + public void updateAutoStartModel(String processinstanceId,Map variables){ + try{ + Thread.sleep(200); + }catch (Exception e){ + e.printStackTrace(); + } + + //查询AutoStartModel status = 1 isBreak = 0的数据 LambdaQueryWrapper autoStartModelWrapper = Wrappers.lambdaQuery(); autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0); - List list = this.list(autoStartModelWrapper); - if(list.size() > 0){ - list.forEach(autoStartModel -> { + AutoStartModel autoStartModel = baseMapper.selectOne(autoStartModelWrapper); + Date qiwangwanchengshijian; + if(Func.isNotEmpty(autoStartModel)){ autoStartModel.setStatus(10); - List variableList = historyService.createHistoricVariableInstanceQuery().processInstanceId(processinstanceId).list(); - Date qiwangwanchengshijian = DateUtil.plusDays(DateUtil.now(),1); - for(HistoricVariableInstance hv : variableList){ - switch (hv.getVariableName()){ - case "guanlibumen": - autoStartModel.setManagement(Long.valueOf(hv.getValue().toString())); - break; - case "renwufulei": - autoStartModel.setTaskParent(Long.valueOf(hv.getValue().toString())); - break; - case "renwuzhonglei": - autoStartModel.setTaskType(Long.valueOf(hv.getValue().toString())); - break; - case "renwudengji": - autoStartModel.setTaskLevel(Long.valueOf(hv.getValue().toString())); - break; - case "xitongmingchengshujuku": - autoStartModel.setOperateSys(Long.valueOf(hv.getValue().toString())); - break; - case "xitongmokuaishujubiao": - autoStartModel.setOperateModule(Long.valueOf(hv.getValue().toString())); - break; - case "chongfumoshi": - autoStartModel.setRepeatMode(Long.valueOf(hv.getValue().toString())); - break; - case "qiwangwanchengshijian": - qiwangwanchengshijian = DateUtil.parse(hv.getValue().toString(),"yyyy-MM-dd HH:mm:ss"); - break; - case "type": - autoStartModel.setRepeatMode(Long.valueOf(hv.getValue().toString())); - break; - } - } + + autoStartModel.setManagement(Long.valueOf(variables.get("guanlibumen").toString())); + + autoStartModel.setTaskParent(Long.valueOf(variables.get("renwufulei").toString())); + + autoStartModel.setTaskType(Long.valueOf(variables.get("renwuzhonglei").toString())); + + autoStartModel.setTaskLevel(Long.valueOf(variables.get("renwudengji").toString())); + + autoStartModel.setOperateSys(Long.valueOf(variables.get("xitongmingchengshujuku").toString())); + + autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString())); + + autoStartModel.setRepeatMode(Long.valueOf(variables.get("chongfumoshi").toString())); + + qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(),"yyyy-MM-dd HH:mm:ss"); + + //获取工作流的开始时间 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processinstanceId).singleResult(); Date startTime = historicProcessInstance.getStartTime(); - Date nextStartTime; - Date nextEndTime; - //获取任务重复模式 - Long repeatMode = autoStartModel.getRepeatMode(); - System.out.println(Long.valueOf(RepeatEnum.每周.getCode())); - System.out.println(repeatMode); - if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){ - nextStartTime = DateUtil.plusWeeks(startTime,1); - nextEndTime = DateUtil.plusWeeks(qiwangwanchengshijian,1); - }else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){ - nextStartTime = DateUtil.plusMonths(startTime,1); - nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,1); - }else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){ - nextStartTime = DateUtil.plusMonths(startTime,3); - nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,3); - }else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){ - nextStartTime = DateUtil.plusDays(startTime,1); - nextEndTime = DateUtil.plusDays(qiwangwanchengshijian,1); - }else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){ - nextStartTime = DateUtil.plusMinutes(startTime,1); - nextEndTime = DateUtil.plusMinutes(qiwangwanchengshijian,1); - } - else{ - return; - } - autoStartModel.setNextStartTime(nextStartTime); - autoStartModel.setNextEndTime(nextEndTime); - autoStartModel.setNextFlag(0); +// Date nextStartTime; +// Date nextEndTime; +// //获取任务重复模式 +// Long repeatMode = autoStartModel.getRepeatMode(); +// System.out.println(Long.valueOf(RepeatEnum.每周.getCode())); +// System.out.println(repeatMode); +// if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){ +// nextStartTime = DateUtil.plusWeeks(startTime,1); +// nextEndTime = DateUtil.plusWeeks(qiwangwanchengshijian,1); +// }else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){ +// nextStartTime = DateUtil.plusMonths(startTime,1); +// nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,1); +// }else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){ +// nextStartTime = DateUtil.plusMonths(startTime,3); +// nextEndTime = DateUtil.plusMonths(qiwangwanchengshijian,3); +// }else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){ +// nextStartTime = DateUtil.plusDays(startTime,1); +// nextEndTime = DateUtil.plusDays(qiwangwanchengshijian,1); +// }else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){ +// nextStartTime = DateUtil.plusMinutes(startTime,1); +// nextEndTime = DateUtil.plusMinutes(qiwangwanchengshijian,1); +// } +// else{ +// return; +// } + //还要自动生成work_order,所以以本次的信息为依据,auto_start_model nextFlag = 1 ,表示已经生成工单了 + autoStartModel.setNextStartTime(startTime); + autoStartModel.setNextEndTime(qiwangwanchengshijian); + autoStartModel.setNextFlag(1); baseMapper.updateById(autoStartModel); - }); + + + //生成工单 + WorkOrder workOrder = new WorkOrder(); + workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId()); + workOrder.setTenantId(autoStartModel.getTenantId()); + workOrder.setApplyUser(autoStartModel.getApplyUser().toString()); + workOrder.setMaintenanceCompany(autoStartModel.getMaintenanceCompany().toString()); + workOrder.setManagement(autoStartModel.getManagement().toString()); + workOrder.setTaskParent(autoStartModel.getTaskParent().toString()); + workOrder.setTaskType(autoStartModel.getTaskType().toString()); + workOrder.setTaskLevel(autoStartModel.getTaskLevel().toString()); + workOrder.setRepeatMode(autoStartModel.getRepeatMode().toString()); + workOrder.setType(autoStartModel.getType()); + workOrder.setOperateSys(autoStartModel.getOperateSys().toString()); + workOrder.setOperateModule(autoStartModel.getOperateModule().toString()); + //如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成 + if(StringUtils.equals(autoStartModel.getApplyRole(),"运维公司") && StringUtils.equals(autoStartModel.getTaskLevel().toString(),"1625035000825049090")){ + workOrder.setIsFinish(1); + workOrder.setFinishTime(qiwangwanchengshijian); + } + + workOrderService.save(workOrder); + } } + @Override + public void saveStartProcess(String processinstanceId,Map variables){ + //将新增的流程实例id保存到blade_flow_autostart_model + AutoStartModel autoStartModel = new AutoStartModel(); + autoStartModel.setProcessInstanceId(processinstanceId); + HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processinstanceId).singleResult(); + Date startTime = processInstance.getStartTime(); + Date qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss"); +// Duration between = DateUtil.between(startTime, qiwangwanchengshijian); +// autoStartModel.setProcessSeconds(between.getSeconds()); + autoStartModel.setApplyUser(Long.valueOf(variables.get("applyUser").toString())); + autoStartModel.setApplyRole(variables.get("createRole").toString()); + autoStartModel.setMaintenanceCompany(Long.valueOf(variables.get("yunweigongsi").toString())); + autoStartModel.setManagement(Long.valueOf(variables.get("guanlibumen").toString())); + autoStartModel.setTaskParent(Long.valueOf(variables.get("renwufulei").toString())); + autoStartModel.setTaskType(Long.valueOf(variables.get("renwuzhonglei").toString())); + autoStartModel.setTaskLevel(Long.valueOf(variables.get("renwudengji").toString())); + autoStartModel.setRepeatMode(Long.valueOf(variables.get("chongfumoshi").toString())); + autoStartModel.setType(Integer.parseInt(variables.get("type").toString())); + autoStartModel.setOperateSys(Long.valueOf(variables.get("xitongmingchengshujuku").toString())); + autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString())); + autoStartModel.setCreateTime(processInstance.getStartTime()); + autoStartModel.setIsDeleted(0); + autoStartModel.setUploadRecord(variables.get("uploadrecord").toString()); + String deptId = AuthUtil.getDeptId(); + Long userId = AuthUtil.getUser().getUserId(); + + autoStartModel.setCreateUser(userId); + autoStartModel.setCreateDept(Long.valueOf(deptId)); + autoStartModel.setCreateTime(DateUtil.now()); + baseMapper.insert(autoStartModel); + + } } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java index 80a2576..1b8dfbb 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java @@ -203,26 +203,26 @@ public class WfProcessService implements IWfProcessService { ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, definition.getKey(), variables); - //将新增的流程实例id保存到blade_flow_autostart_model - AutoStartModel autoStartModel = new AutoStartModel(); - autoStartModel.setProcessInstanceId(processInstance.getId()); - Date startTime = processInstance.getStartTime(); - Date qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss"); - Duration between = DateUtil.between(startTime, qiwangwanchengshijian); - autoStartModel.setProcessSeconds(between.getSeconds()); - autoStartModel.setApplyUser(Long.valueOf(variables.get("applyUser").toString())); - autoStartModel.setApplyRole(variables.get("createRole").toString()); - autoStartModel.setMaintenanceCompany(Long.valueOf(variables.get("yunweigongsi").toString())); - autoStartModel.setManagement(Long.valueOf(variables.get("guanlibumen").toString())); - autoStartModel.setTaskParent(Long.valueOf(variables.get("renwufulei").toString())); - autoStartModel.setTaskType(Long.valueOf(variables.get("renwuzhonglei").toString())); - autoStartModel.setTaskLevel(Long.valueOf(variables.get("renwudengji").toString())); - autoStartModel.setRepeatMode(Long.valueOf(variables.get("chongfumoshi").toString())); - autoStartModel.setType(Integer.parseInt(variables.get("type").toString())); - autoStartModel.setOperateSys(Long.valueOf(variables.get("xitongmingchengshujuku").toString())); - autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString())); - autoStartModel.setCreateTime(processInstance.getStartTime()); - autoStartModelService.save(autoStartModel); +// //将新增的流程实例id保存到blade_flow_autostart_model +// AutoStartModel autoStartModel = new AutoStartModel(); +// autoStartModel.setProcessInstanceId(processInstance.getId()); +// Date startTime = processInstance.getStartTime(); +// Date qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss"); +// Duration between = DateUtil.between(startTime, qiwangwanchengshijian); +// autoStartModel.setProcessSeconds(between.getSeconds()); +// autoStartModel.setApplyUser(Long.valueOf(variables.get("applyUser").toString())); +// autoStartModel.setApplyRole(variables.get("createRole").toString()); +// autoStartModel.setMaintenanceCompany(Long.valueOf(variables.get("yunweigongsi").toString())); +// autoStartModel.setManagement(Long.valueOf(variables.get("guanlibumen").toString())); +// autoStartModel.setTaskParent(Long.valueOf(variables.get("renwufulei").toString())); +// autoStartModel.setTaskType(Long.valueOf(variables.get("renwuzhonglei").toString())); +// autoStartModel.setTaskLevel(Long.valueOf(variables.get("renwudengji").toString())); +// autoStartModel.setRepeatMode(Long.valueOf(variables.get("chongfumoshi").toString())); +// autoStartModel.setType(Integer.parseInt(variables.get("type").toString())); +// autoStartModel.setOperateSys(Long.valueOf(variables.get("xitongmingchengshujuku").toString())); +// autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString())); +// autoStartModel.setCreateTime(processInstance.getStartTime()); +// autoStartModelService.save(autoStartModel); // FlowCache.clearBladeManMadeCache(); return handleProcessInstance(processInstance, variables); } @@ -761,11 +761,12 @@ public class WfProcessService implements IWfProcessService { // //每次处理都要清空一下FLOW_CACHE缓存,使缓存中的参数使最新的 // CacheUtil.clear(FLOW_CACHE, Boolean.FALSE); - //判断这个流程是否整体结束,如果整体结束,修改变量值,并且修改blade_flow_autostart_model status = 10,也就是说此任务可以重复执行了 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).finished().singleResult(); - if(Func.isNotEmpty(historicProcessInstance)){ - autoStartModelService.updateAutoStartModel(task.getProcessInstanceId()); - } + //判断这个流程是否整体结束,如果整体结束,修改变量值,并且修改blade_flow_autostart_model status = 10,也就是说此任务可以重复执行了。 + //并且要在work_order表中加一条记录 +// HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).finished().singleResult(); +// if(Func.isNotEmpty(historicProcessInstance)){ +// autoStartModelService.updateAutoStartModel(task.getProcessInstanceId()); +// } return R.success("操作成功"); }