1.自动工单生成得自动完成功能修改

main
yitonglei 3 years ago
parent f1958310e2
commit a56aec045e
  1. 12
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java
  2. 20
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java
  3. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java
  4. 194
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java

@ -38,17 +38,17 @@ public class TaskConfig {
/**
* 重复执行新建工单
* *只要autoStartModel中存在 next_flag = 0 is_break = 0
* *只要autoStartModel中存在 next_flag = 0 is_break = 0 status = 10
* *然后 next_Start_time <= 当前时间就生成新工单并修改next_flag = 1
*/
@Scheduled(fixedDelay = 15*1000)//上次任务结束后10分钟执行一次
@Scheduled(fixedDelay = 90*1000)//上次任务结束后10分钟执行一次
@Transactional(rollbackFor = Exception.class)
@Async("taskExecutor")
public void autoStartWorkOrder(){
LocalDate nowDay = LocalDate.now();
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AutoStartModel::getNextFlag, 0).eq(AutoStartModel::getIsBreak,0);
wrapper.eq(AutoStartModel::getNextFlag, 0).eq(AutoStartModel::getIsBreak,0).eq(AutoStartModel::getStatus,10);
List<AutoStartModel> list = autoStartModelService.list(wrapper);
if(list.size() > 0){
@ -85,15 +85,15 @@ public class TaskConfig {
}
/**
* 自动计算下一次的开始和结束时间
* 自动计算下一次的开始和结束时间,next_flag = 1 status = 10 is_delete = 0
*/
@Scheduled(fixedDelay = 15*1000)
@Scheduled(fixedDelay = 90*1000)
@Transactional(rollbackFor = Exception.class)
@Async("taskExecutor")
public void computerNextDateOfOrder(){
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AutoStartModel::getNextFlag, 1).eq(AutoStartModel::getIsBreak,0);
wrapper.eq(AutoStartModel::getNextFlag, 1).eq(AutoStartModel::getIsBreak,0).eq(AutoStartModel::getStatus,10);
List<AutoStartModel> list = autoStartModelService.list(wrapper);
if(list.size() > 0){

@ -1,9 +1,12 @@
package org.springblade.plugin.listener;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springblade.core.tool.utils.Func;
import org.springblade.plugin.config.SpringContextHolder;
import org.springblade.plugin.workbench.enumutil.RepeatEnum;
import org.springblade.plugin.workbench.service.IAutoStartModelService;
import org.springblade.plugin.workbench.service.impl.AutoStartModelServiceImpl;
import org.springframework.stereotype.Component;
@ -11,7 +14,9 @@ import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @Description
* @Description 流程结束监听器
* 流程结束时进行相关判断如果是重复任务才会在autoStartModel表中建立记录
*
* @Author ytl
* @Date 2023/3/2 0002 15:05
*/
@ -25,11 +30,18 @@ public class ProcessEndListener implements ExecutionListener {
Map<String,Object> variables = delegateExecution.getVariables();
switch (event) {
case "start" :
IAutoStartModelService autoStartModelService = (IAutoStartModelService)SpringContextHolder.getBean(AutoStartModelServiceImpl.class);
System.out.println("ProcessEndListener-start event-------------------");
//判断工作流的的重复模式
if(Func.isNotEmpty(variables.get("chongfumoshi")) && !StringUtils.equals(RepeatEnum.不重复.getCode(),variables.get("chongfumoshi").toString())){
//保存任务信息使任务工单可以被自动创建
autoStartModelService.saveStartProcess(processInstanceId,variables);
//使任务可以自动开启,这里不用新建工单,因为TaskConfig会自动创建
// autoStartModelService.updateAutoStartModel(processInstanceId,variables);
}else{//不重复任务
autoStartModelService.newWorkOrder(processInstanceId,variables);
}
IAutoStartModelService autoStartModelService = (IAutoStartModelService)SpringContextHolder.getBean(AutoStartModelServiceImpl.class);
autoStartModelService.saveStartProcess(processInstanceId,variables);
autoStartModelService.updateAutoStartModel(processInstanceId,variables);
break;
case "end" :
System.out.println("ProcessEndListener-end event----------------------");

@ -27,4 +27,6 @@ public interface IAutoStartModelService extends BaseService<AutoStartModel> {
void updateAutoStartModel(String processinstanceId,Map<String,Object> variables);
void saveStartProcess(String processinstanceId,Map<String,Object> variables);
void newWorkOrder(String processInstanceId,Map<String,Object> variables);
}

@ -3,7 +3,6 @@ package org.springblade.plugin.workbench.service.impl;
import com.alibaba.fastjson.JSON;
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;
@ -43,13 +42,18 @@ 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.DictCache;
import org.springblade.system.cache.SysCache;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.Dict;
import org.springblade.system.entity.DictBiz;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.cache.UserCache;
import org.springblade.system.user.entity.User;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotEmpty;
import java.text.SimpleDateFormat;
@ -82,7 +86,6 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
private final IWorkOrderService workOrderService;
@Override
public List<Map<String, Object>> bladeManMadeVariabList() {
LambdaQueryWrapper<AutoStartModel> queryWrapper = Wrappers.lambdaQuery();
@ -285,7 +288,13 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
// }
// }
/**
* 重复任务生成工单并更新重复任务的元数据
* @param processinstanceId
* @param variables
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateAutoStartModel(String processinstanceId,Map<String,Object> variables){
try{
Thread.sleep(200);
@ -293,92 +302,58 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
e.printStackTrace();
}
//查询AutoStartModel status = 1 isBreak = 0的数据
//查询AutoStartModel status = 10 isBreak = 0的数据
LambdaQueryWrapper<AutoStartModel> autoStartModelWrapper = Wrappers.lambdaQuery();
autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0);
autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0)
.ne(AutoStartModel::getNextFlag,0).eq(AutoStartModel::getStatus,1);
AutoStartModel autoStartModel = baseMapper.selectOne(autoStartModelWrapper);
Date qiwangwanchengshijian;
if(Func.isNotEmpty(autoStartModel)){
autoStartModel.setStatus(10);
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");
if(Func.isNotEmpty(autoStartModel)){
//生成工单
//this.newWorkOrder(autoStartModel);
//获取工作流的开始时间
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);
//更新autostartModel,使该条记录可以重复执行
// autoStartModel.setNextFlag(1);
autoStartModel.setStatus(10);
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());
workOrder.setUploadRecord(autoStartModel.getUploadRecord());
workOrder.setExpectedCompletionTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(qiwangwanchengshijian));
workOrder.setIsFinish(0);
//如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成
if(StringUtils.equals(autoStartModel.getApplyRole(),"运维公司") && StringUtils.equals(autoStartModel.getTaskLevel().toString(),"1625035000825049090")){
workOrder.setIsFinish(1);
workOrder.setFinishTime(new Date());
}
workOrderService.save(workOrder);
/**
* 不重复任务直接生成工单
* @param processInstanceId
* @param variables
*/
@Override
public void newWorkOrder(String processInstanceId,Map<String,Object> variables){
WorkOrder workOrder = new WorkOrder();
workOrder.setUploadRecord(JSON.toJSONString(variables.get("uploadrecord")));
workOrder.setOperateSys(variables.get("xitongmingchengshujuku").toString());
workOrder.setOperateModule(variables.get("xitongmokuaishujubiao").toString());
workOrder.setType(Integer.parseInt(variables.get("type").toString()));
workOrder.setTaskParent(variables.get("renwufulei").toString());
workOrder.setTaskType(variables.get("renwuzhonglei").toString());
workOrder.setTaskLevel(variables.get("renwudengji").toString());
workOrder.setApplyUser(variables.get("applyUser").toString());
workOrder.setOperateSys(variables.get("xitongmingchengshujuku").toString());
workOrder.setOperateModule(variables.get("xitongmokuaishujubiao").toString());
workOrder.setApplyUser(variables.get("applyUser").toString());
workOrder.setManagement(variables.get("guanlibumen").toString());
workOrder.setMaintenanceCompany(variables.get("yunweigongsi").toString());
workOrder.setTenantId(WfTaskUtil.getTenantId());
workOrder.setProcessInstanceId(processInstanceId);
workOrder.setExpectedCompletionTime(variables.get("qiwangwanchengshijian").toString());
//如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成
User applyUser = UserCache.getUser(Long.valueOf(variables.get("applyUser").toString()));
String roleId = applyUser.getRoleId();
if(StringUtils.equals(roleId,"1623514957507272705") && StringUtils.equals(variables.get("renwudengji").toString(),"1625035000825049090")){
workOrder.setIsFinish(1);
workOrder.setFinishTime(new Date());
}
workOrderService.save(workOrder);
}
@Override
@ -387,10 +362,14 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
AutoStartModel autoStartModel = new AutoStartModel();
autoStartModel.setProcessInstanceId(processinstanceId);
HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processinstanceId).singleResult();
Date startTime = processInstance.getStartTime();
Date processStartTime = processInstance.getStartTime();
String chongfumoshi = variables.get("chongfumoshi") == null ? "" : variables.get("chongfumoshi").toString();
//Date nextStartTime = this.nextDate(processStartTime,chongfumoshi);
autoStartModel.setNextStartTime(DateUtil.now());
Date qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss");
// Duration between = DateUtil.between(startTime, qiwangwanchengshijian);
// autoStartModel.setProcessSeconds(between.getSeconds());
//Date nextEndTime = this.nextDate(qiwangwanchengshijian,chongfumoshi);
autoStartModel.setNextEndTime(qiwangwanchengshijian);
autoStartModel.setNextFlag(0);
autoStartModel.setApplyUser(Long.valueOf(variables.get("applyUser").toString()));
autoStartModel.setApplyRole(variables.get("createRole").toString());
autoStartModel.setMaintenanceCompany(Long.valueOf(variables.get("yunweigongsi").toString()));
@ -402,16 +381,59 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
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(JSON.toJSONString(variables.get("uploadrecord")));
String deptId = AuthUtil.getDeptId();
Long userId = AuthUtil.getUser().getUserId();
autoStartModel.setCreateUser(userId);
autoStartModel.setCreateDept(Long.valueOf(deptId));
autoStartModel.setCreateTime(DateUtil.now());
autoStartModel.setStatus(10);
baseMapper.insert(autoStartModel);
}
private Date nextDate(Date startTime, String repeatMode){
Date endTime;
if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode)){
endTime = DateUtil.plusWeeks(startTime,1);
}else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode)){
endTime = DateUtil.plusMonths(startTime,1);
}else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode)){
endTime = DateUtil.plusMonths(startTime,3);
}else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode)){
endTime = DateUtil.plusMinutes(startTime,1);
}else{
endTime = startTime;
}
return endTime;
}
private void newWorkOrder(AutoStartModel 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());
workOrder.setUploadRecord(autoStartModel.getUploadRecord());
workOrder.setExpectedCompletionTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(autoStartModel.getNextEndTime()));
workOrder.setIsFinish(0);
//如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成
if(StringUtils.equals(autoStartModel.getApplyRole(),"运维公司") && StringUtils.equals(autoStartModel.getTaskLevel().toString(),"1625035000825049090")){
workOrder.setIsFinish(1);
workOrder.setFinishTime(new Date());
}
workOrderService.save(workOrder);
}
}

Loading…
Cancel
Save