1.工作流结束后会自动创建一次工单

main
yitonglei 3 years ago
parent 6caf0eee97
commit 69e3816fee
  1. 112
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java
  2. 22
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java

@ -55,67 +55,79 @@ public class TaskConfig {
if(list.size() > 0){
for(AutoStartModel autoStartModel : list){
Date nextStartTime = autoStartModel.getNextStartTime();
LocalDateTime localDateTime = DateUtil.fromDate(nextStartTime);
LocalDate nextStartDay = LocalDate.of(localDateTime.getYear(),localDateTime.getMonth(),localDateTime.getDayOfMonth());
if(nowDay.equals(nextStartDay) || nowDay.isAfter(nextStartDay)){
WorkOrder workOrder = new WorkOrder();
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.setOperateSys(autoStartModel.getOperateSys().toString());
workOrder.setOperateModule(autoStartModel.getOperateModule().toString());
workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId());
workOrder.setType(autoStartModel.getType());
workOrder.setTenantId(autoStartModel.getTenantId());
workOrder.setUploadRecord(autoStartModel.getUploadRecord());
workOrder.setExpectedCompletionTime(autoStartModel.getNextEndTime());
//新增
workOrderService.save(workOrder);
//修改nextFlag = 1,表示已经生成新工单了
// autoStartModel.setNextFlag(1);
//计算下一次的执行时间
Long repeatMode = autoStartModel.getRepeatMode();
if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusWeeks(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusWeeks(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusDays(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusDays(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMinutes(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMinutes(autoStartModel.getNextEndTime(),1));
}
else{
return;
}
if(autoStartModel.getNextFlag() == 1){//说明是首次工作流结束后已经自动生成工单了
autoStartModel.setNextFlag(0);
}else{
Date nextStartTime = autoStartModel.getNextStartTime();
LocalDateTime localDateTime = DateUtil.fromDate(nextStartTime);
LocalDate nextStartDay = LocalDate.of(localDateTime.getYear(),localDateTime.getMonth(),localDateTime.getDayOfMonth());
if(nowDay.equals(nextStartDay) || nowDay.isAfter(nextStartDay)){
WorkOrder workOrder = new WorkOrder();
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.setOperateSys(autoStartModel.getOperateSys().toString());
workOrder.setOperateModule(autoStartModel.getOperateModule().toString());
workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId());
workOrder.setType(autoStartModel.getType());
workOrder.setTenantId(autoStartModel.getTenantId());
workOrder.setUploadRecord(autoStartModel.getUploadRecord());
workOrder.setExpectedCompletionTime(autoStartModel.getNextEndTime());
//新增
workOrderService.save(workOrder);
log.info("TaskConfig生成新工单的流程id:{},生成时间是:{}",autoStartModel.getProcessInstanceId(),autoStartModel.getNextEndTime());
autoStartModelService.updateById(autoStartModel);
}
}
//修改下次开始时间
this.updateNextDateOfOrder(autoStartModel);
log.info("TaskConfig生成新工单的流程id:{},生成时间是:{}",autoStartModel.getProcessInstanceId(),autoStartModel.getNextEndTime());
}
}
}
}
}
/**
* 修改下次工单开始结束时间
* @param autoStartModel
*/
private void updateNextDateOfOrder(AutoStartModel autoStartModel){
Long repeatMode = autoStartModel.getRepeatMode();
if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusWeeks(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusWeeks(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusDays(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusDays(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMinutes(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMinutes(autoStartModel.getNextEndTime(),1));
}
else{
return;
}
autoStartModel.setNextFlag(0);
autoStartModelService.updateById(autoStartModel);
log.info("TaskConfig修改工单的下次结束时间{},流程id:{}",autoStartModel.getNextEndTime(),autoStartModel.getProcessInstanceId());
}
/**
* 自动计算下一次的开始和结束时间,next_flag = 1 status = 10 is_delete = 0
*/
// @Scheduled(fixedDelay = 90*1000)
// @Scheduled(fixedRate = 90*1000)
// @Transactional(rollbackFor = Exception.class)
// @Async("taskExecutor")
public void computerNextDateOfOrder(){

@ -56,7 +56,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotEmpty;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.*;
@ -344,12 +343,7 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
workOrder.setMaintenanceCompany(variables.get("yunweigongsi").toString());
workOrder.setTenantId(WfTaskUtil.getTenantId());
workOrder.setProcessInstanceId(processInstanceId);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
workOrder.setExpectedCompletionTime(dateFormat.parse(variables.get("qiwangwanchengshijian").toString()));
} catch (ParseException e) {
e.printStackTrace();
}
workOrder.setExpectedCompletionTime(DateUtil.parse(variables.get("qiwangwanchengshijian").toString(),"yyyy-MM-dd HH:mm:ss"));
workOrder.setRepeatMode(variables.get("chongfumoshi").toString());
//如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成
User applyUser = UserCache.getUser(Long.valueOf(variables.get("applyUser").toString()));
@ -390,16 +384,18 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString()));
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));
//自动生成工单
this.newWorkOrder(autoStartModel);
//修改status = 10 nextFlag = 1,表示该记录已经生成工单了,并且该记录可以重复执行了
autoStartModel.setCreateTime(DateUtil.now());
autoStartModel.setStatus(10);
save(autoStartModel);
autoStartModel.setNextFlag(1);
baseMapper.insert(autoStartModel);
}
private Date nextDate(Date startTime, String repeatMode){
Date endTime;
if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode)){
@ -440,7 +436,7 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
workOrder.setIsFinish(1);
workOrder.setFinishTime(new Date());
}
workOrder.setExpectedCompletionTime(autoStartModel.getNextEndTime());
workOrderService.save(workOrder);
}
}

Loading…
Cancel
Save