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 b876518..5aff01b 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 @@ -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(){ 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 e728bb3..f023231 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 @@ -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