From f1958310e207f1d85d34c55e1ae4d85103667ade Mon Sep 17 00:00:00 2001 From: litao Date: Mon, 6 Mar 2023 09:09:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/plugin/config/TaskConfig.java | 4 +- .../controller/DataBaseController.java | 4 +- .../controller/WorkOrderController.java | 54 ++++++- .../operation/workorder/entity/WorkOrder.java | 43 +++++- .../workorder/service/IWorkOrderService.java | 6 + .../service/impl/WorkOrderServiceImpl.java | 135 ++++++++++++++---- .../impl/AutoStartModelServiceImpl.java | 9 +- 7 files changed, 218 insertions(+), 37 deletions(-) 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 06763f9..4462541 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.plugin.operation.workorder.entity.WorkOrder; @@ -69,8 +70,9 @@ public class TaskConfig { workOrder.setOperateModule(autoStartModel.getOperateModule().toString()); workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId()); workOrder.setType(autoStartModel.getType()); - workOrder.setTenantId(WfTaskUtil.getTenantId()); + workOrder.setTenantId(autoStartModel.getTenantId()); workOrder.setUploadRecord(autoStartModel.getUploadRecord()); + workOrder.setExpectedCompletionTime(autoStartModel.getNextEndTime().toString()); //新增 workOrderService.save(workOrder); //修改nextFlag = 1,表示已经生成新工单了 diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java index 642838c..c9897cf 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java @@ -188,13 +188,13 @@ public class DataBaseController extends BladeController { try { // 4、将临时文件转存到指定位置 - file.transferTo(new File(basePath + "/" + fileName)); + file.transferTo(new File(basePath + "//" + fileName)); } catch (IOException e) { e.printStackTrace(); } UploadReturn uploadReturn = new UploadReturn(); uploadReturn.setName(originalFilename); - uploadReturn.setPath(basePath + "/" + fileName); + uploadReturn.setPath(basePath + "//" + fileName); uploadReturn.setCreateUser(AuthUtil.getNickName()); uploadReturn.setCreateTime(new Date()); return R.data(uploadReturn); diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/controller/WorkOrderController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/controller/WorkOrderController.java index 956d00d..7476b33 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/controller/WorkOrderController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/controller/WorkOrderController.java @@ -1,18 +1,27 @@ package org.springblade.plugin.operation.workorder.controller; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.plugin.operation.database.service.IDataBaseService; +import org.springblade.plugin.operation.database.service.IDataTableService; +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.excel.WorkOrderExcel; import org.springblade.plugin.operation.workorder.service.IWorkOrderService; import org.springblade.system.cache.DictBizCache; import org.springblade.system.entity.Dept; @@ -45,7 +54,7 @@ public class WorkOrderController extends BladeController { private final IUserClient userClient; /** - * 历史工单 + * 流程中心 */ @GetMapping("/historyWorkOrder") public R>> historyWorkOrder(WorkOrder workOrder, Query query) { @@ -93,7 +102,7 @@ public class WorkOrderController extends BladeController { } /** - * excel导出 + * 流程中心导出 */ @GetMapping("/exportExcel") public void exportExcel(WorkOrder workOrder, HttpServletResponse response) throws ParseException { @@ -107,6 +116,7 @@ public class WorkOrderController extends BladeController { public R submit(@RequestBody WorkOrder workOrder) { workOrder.setIsFinish(1); workOrder.setFinishTime(new Date()); + workOrder.setUploadRecord(JSON.toJSONString(workOrder.getUploadRecords())); return R.data(workOrderService.updateById(workOrder)); } @@ -115,12 +125,44 @@ public class WorkOrderController extends BladeController { */ @GetMapping("/workOrderRecord") public R> workOrderRecord(WorkOrder workOrder, Query query) { + return R.data(workOrderService.myPage(workOrder, query)); + } + + /** + * 工单记录导出 + */ + @GetMapping("/workOrderExcel") + public void workOrderExcel(WorkOrder workOrder, HttpServletResponse response) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(workOrder); wrapper.eq(WorkOrder::getManagement, AuthUtil.getDeptId()); + if (workOrder.getTaskType() == null + && workOrder.getTaskParent() == null + && workOrder.getManagement() == null + && workOrder.getTaskLevel() == null + && workOrder.getIsFinish() == null + && workOrder.getApplyUser() == null + && workOrder.getStartTime() == null + && workOrder.getEndTime() == null + && workOrder.getStartTime2() == null + && workOrder.getEndTime2() == null + ) { + Calendar c = Calendar.getInstance(); + //过去半年 + c.setTime(new Date()); + c.add(Calendar.MONTH, -6); + Date m3 = c.getTime(); + wrapper.ge(WorkOrder::getCreateTime, m3); + } + if (workOrder.getStartTime() != null && workOrder.getEndTime() != null) { + wrapper.between(WorkOrder::getCreateTime, workOrder.getStartTime(), workOrder.getEndTime()); + } + if (workOrder.getStartTime2() != null && workOrder.getEndTime2() != null) { + wrapper.between(WorkOrder::getFinishTime, workOrder.getStartTime2(), workOrder.getEndTime2()); + } wrapper.orderByDesc(WorkOrder::getCreateTime); - IPage page = workOrderService.page(Condition.getPage(query), wrapper); - return R.data(page); - } + List workOrderList = workOrderService.list(wrapper); + workOrderService.workOrderExcel(response, workOrderList); + } -} +} \ No newline at end of file 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 db328fa..6d10c0a 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 @@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; import java.util.Date; +import java.util.List; +import java.util.Map; @Data @TableName("t_work_order") @@ -69,7 +71,7 @@ public class WorkOrder extends TenantEntity { private Date endTime; // 期望完成时间 - @TableField(exist = false) +// @TableField(exist = false) private String expectedCompletionTime; @TableField(exist = false) @@ -86,4 +88,43 @@ public class WorkOrder extends TenantEntity { //上传文件JSON private String uploadRecord; + + // 任务种类 + @TableField(exist = false) + private String taskTypeName; + + // 任务父类 + @TableField(exist = false) + private String taskParentName; + + // 分管部门 + @TableField(exist = false) + private String managementName; + + // 任务等级 + @TableField(exist = false) + private String taskLevelName; + + //重复模式id 字典 + @TableField(exist = false) + private String repeatModeName; + + // 运维公司 + @TableField(exist = false) + private String maintenanceCompanyName; + + // 发起人 + @TableField(exist = false) + private String applyUserName; + + //系统名称或数据库id + @TableField(exist = false) + private String operateSysName; + + //模块或数据库表id + @TableField(exist = false) + private String operateModuleName; + + @TableField(exist = false) + private List uploadRecords; } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/IWorkOrderService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/IWorkOrderService.java index d353210..048f5ce 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/IWorkOrderService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/IWorkOrderService.java @@ -11,6 +11,7 @@ import org.springblade.plugin.workflow.process.model.WfProcess; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; +import java.util.List; import java.util.Map; /** @@ -25,4 +26,9 @@ public interface IWorkOrderService extends BaseService { IPage myToDo(WorkOrder workOrder, Query query); void exportExcel(WorkOrder workOrder, HttpServletResponse response) throws ParseException; + + IPage myPage(WorkOrder workOrder, Query query); + + void workOrderExcel(HttpServletResponse response, List workOrderList); + } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/impl/WorkOrderServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/impl/WorkOrderServiceImpl.java index 0e48fba..43013a9 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/impl/WorkOrderServiceImpl.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/workorder/service/impl/WorkOrderServiceImpl.java @@ -1,5 +1,7 @@ package org.springblade.plugin.operation.workorder.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -10,36 +12,36 @@ import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; -import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.flowable.variable.api.history.HistoricVariableInstance; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.plugin.operation.database.service.IDataBaseService; +import org.springblade.plugin.operation.database.service.IDataTableService; import org.springblade.plugin.operation.system.entity.ProjectInfo; +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.mapper.TaskInfoMapper; +import org.springblade.plugin.operation.task.service.ITaskInfoService; import org.springblade.plugin.operation.workorder.entity.WorkOrder; import org.springblade.plugin.operation.workorder.excel.WorkOrderExcel; import org.springblade.plugin.operation.workorder.mapper.WorkOrderMapper; import org.springblade.plugin.operation.workorder.service.IWorkOrderService; import org.springblade.plugin.workflow.core.utils.WfTaskUtil; import org.springblade.system.cache.DictBizCache; +import org.springblade.system.feign.ISysClient; import org.springblade.system.user.feign.IUserClient; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.Duration; import java.util.*; import java.util.stream.Collectors; @@ -54,9 +56,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl variables = runtimeService.getVariables(task.getExecutionId()); // 任务种类 - order.setTaskType(variables.get("$renwuzhonglei").toString()); + order.setTaskTypeName(variables.get("$renwuzhonglei").toString()); // 任务父类 - order.setTaskParent(DictBizCache.getById(Long.parseLong(variables.get("renwufulei").toString())).getDictValue()); + order.setTaskParentName(DictBizCache.getById(Long.parseLong(variables.get("renwufulei").toString())).getDictValue()); // 操作模块 ProjectInfo projectInfo = projectInfoService.getById(variables.get("xitongmingchengshujuku").toString()); if (projectInfo != null) { - order.setOperateSys(projectInfo.getProjectName()); + order.setOperateSysName(projectInfo.getProjectName()); } else { - order.setOperateSys(dataBaseService.getById(variables.get("xitongmingchengshujuku").toString()).getDataBaseName()); + order.setOperateSysName(dataBaseService.getById(variables.get("xitongmingchengshujuku").toString()).getDataBaseName()); } // 当前责任人 order.setCurrentResponsiblePerson(userClient.userInfoById(Long.parseLong(task.getAssignee())).getData().getRealName()); - order.setManagement(variables.get("$guanlibumen").toString()); + order.setManagementName(variables.get("$guanlibumen").toString()); // 运维公司 - order.setMaintenanceCompany(userClient.userInfoById(Long.parseLong(variables.get("yunweigongsi").toString())).getData().getRealName()); - order.setApplyUser(userClient.userInfoById(Long.parseLong(historicProcessInstance.getStartUserId())).getData().getRealName()); + order.setMaintenanceCompanyName(userClient.userInfoById(Long.parseLong(variables.get("yunweigongsi").toString())).getData().getRealName()); + order.setApplyUserName(userClient.userInfoById(Long.parseLong(historicProcessInstance.getStartUserId())).getData().getRealName()); if (task.getName().contains("审批")) { order.setApprovalStatus("审批中"); } else { - order.setApprovalStatus("进行中"); + order.setApprovalStatus("待实施"); } order.setCreateTime(historicProcessInstance.getStartTime()); order.setEndTime(historicProcessInstance.getEndTime()); @@ -159,17 +165,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(WorkOrder::getMaintenanceCompany, AuthUtil.getUserId()); wrapper.eq(WorkOrder::getIsFinish, 0); - List list = list(wrapper); - workOrders.addAll(list); + List records = list(wrapper); + setAllName(records); + + workOrders.addAll(records); // 任务父类 - if (StringUtils.isNotBlank(workOrder.getTaskParent())) { - workOrders = workOrders.stream().filter(s -> s.getTaskParent().equals(workOrder.getTaskParent())).collect(Collectors.toList()); + if (StringUtils.isNotBlank(workOrder.getTaskParentName())) { + workOrders = workOrders.stream().filter(s -> s.getTaskParentName().equals(workOrder.getTaskParentName())).collect(Collectors.toList()); } // 任务种类 - if (StringUtils.isNotBlank(workOrder.getTaskType())) { - workOrders = workOrders.stream().filter(s -> s.getTaskType().equals(workOrder.getTaskType())).collect(Collectors.toList()); + if (StringUtils.isNotBlank(workOrder.getTaskTypeName())) { + workOrders = workOrders.stream().filter(s -> s.getTaskTypeName().equals(workOrder.getTaskTypeName())).collect(Collectors.toList()); } // 当前责任人 @@ -178,8 +186,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl s.getManagement().equals(workOrder.getManagement())).collect(Collectors.toList()); + if (StringUtils.isNotBlank(workOrder.getManagementName())) { + workOrders = workOrders.stream().filter(s -> s.getManagementName().equals(workOrder.getManagementName())).collect(Collectors.toList()); } // 审批状态 @@ -188,8 +196,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl s.getApplyUser().equals(workOrder.getApplyUser())).collect(Collectors.toList()); + if (StringUtils.isNotBlank(workOrder.getApplyUserName())) { + workOrders = workOrders.stream().filter(s -> s.getApplyUserName().equals(workOrder.getApplyUserName())).collect(Collectors.toList()); } // 创建时间范围 @@ -244,7 +252,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl myPage(WorkOrder workOrder, Query query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(workOrder); + wrapper.eq(WorkOrder::getManagement, AuthUtil.getDeptId()); + if (workOrder.getStartTime() != null && workOrder.getEndTime() != null) { + wrapper.between(WorkOrder::getCreateTime, workOrder.getStartTime(), workOrder.getEndTime()); + } + if (workOrder.getStartTime2() != null && workOrder.getEndTime2() != null) { + wrapper.between(WorkOrder::getFinishTime, workOrder.getStartTime2(), workOrder.getEndTime2()); + } + wrapper.orderByDesc(WorkOrder::getCreateTime); + IPage page = page(Condition.getPage(query), wrapper); + List records = page.getRecords(); + setAllName(records); + return page; + } + + @Override + public void workOrderExcel(HttpServletResponse response, List workOrderList) { + List excels = new ArrayList<>(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(workOrderList)) { + for (WorkOrder record : workOrderList) { + WorkOrderExcel excel = new WorkOrderExcel(); + excel.setTaskType(taskInfoService.getById(record.getTaskType()).getTaskTypeName()); + excel.setTaskParent(DictBizCache.getById(Long.parseLong(record.getTaskParent())).getDictValue()); + if (record.getType() == 1) { + excel.setOperationModule(projectInfoService.getById(record.getOperateSys()).getProjectName()); + } else { + excel.setOperationModule(dataBaseService.getById(record.getOperateSys()).getSystemName()); + } + excel.setDept(sysClient.getDeptName(Long.parseLong(record.getManagement())).getData()); + excel.setLevel(DictBizCache.getById(Long.parseLong(record.getTaskLevel())).getDictValue()); + excel.setCompany(userClient.userInfoById(Long.parseLong(record.getMaintenanceCompany())).getData().getName()); + excel.setSponsor(userClient.userInfoById(Long.parseLong(record.getApplyUser())).getData().getName()); + if (record.getIsFinish() == 0) { + excel.setApprovalStatus("待实施"); + } else { + excel.setApprovalStatus("已完成"); + } + excel.setCreateTime(format.format(record.getCreateTime())); + if (record.getFinishTime() != null) { + excel.setEndTime(format.format(record.getFinishTime())); + } else { + excel.setEndTime(""); + } + excel.setExpectedCompletionTime(record.getExpectedCompletionTime()); + excels.add(excel); + } + } + ExcelUtil.export(response, "工单记录" + DateUtil.time(), "工单记录", excels, WorkOrderExcel.class); + } + + private void setAllName(List records) { + if (CollectionUtils.isNotEmpty(records)) { + for (WorkOrder record : records) { + record.setTaskTypeName(taskInfoService.getById(record.getTaskType()).getTaskTypeName()); + record.setTaskParentName(DictBizCache.getById(Long.parseLong(record.getTaskParent())).getDictValue()); + record.setManagementName(sysClient.getDeptName(Long.parseLong(record.getManagement())).getData()); + record.setTaskLevelName(DictBizCache.getById(Long.parseLong(record.getTaskLevel())).getDictValue()); + record.setRepeatModeName(DictBizCache.getById(Long.parseLong(record.getRepeatMode())).getDictValue()); + record.setMaintenanceCompanyName(userClient.userInfoById(Long.parseLong(record.getMaintenanceCompany())).getData().getName()); + record.setApplyUserName(userClient.userInfoById(Long.parseLong(record.getApplyUser())).getData().getName()); + record.setCurrentResponsiblePerson(userClient.userInfoById(AuthUtil.getUserId()).getData().getName()); + record.setApprovalStatus("待实施"); + record.setUploadRecords(JSONObject.parseArray(record.getUploadRecord(), Map.class)); + if (record.getType() == 1) { + record.setOperateSysName(projectInfoService.getById(record.getOperateSys()).getProjectName()); + record.setOperateModuleName(moduleInfoService.getById(record.getOperateModule()).getModuleName()); + } else { + record.setOperateSysName(dataBaseService.getById(record.getOperateSys()).getSystemName()); + record.setOperateModuleName(dataTableService.getById(record.getOperateModule()).getSystemModuleName()); + } + } + } + } + private List> getList(WorkOrder workOrder) { List list = historyService.createHistoricProcessInstanceQuery() .orderByProcessInstanceStartTime() 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 73a6a4f..b8d73aa 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 @@ -1,5 +1,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; @@ -51,6 +52,7 @@ import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.validation.constraints.NotEmpty; +import java.text.SimpleDateFormat; import java.time.Duration; import java.util.*; @@ -365,10 +367,13 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl