From 35e732c71289cd5355d6126b2a737b7b9b66ac43 Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Mon, 15 Jul 2024 18:52:29 +0800
Subject: [PATCH 1/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF-s?=
=?UTF-8?q?la=E6=94=AF=E6=8C=81=E5=B7=A5=E5=8D=95=E9=A2=9D=E5=A4=96?=
=?UTF-8?q?=E5=BB=B6=E8=BF=9F=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E7=82=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1199325999235072]后端-sla支持工单额外延迟超时时间点 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1199325999235072
---
.../DelayProcessTaskStepSlaApi.java | 116 ++++++++++++++++++
.../processtask/ProcessTaskDraftGetApi.java | 22 ++--
.../processtask/ProcessTaskSlaMapper.java | 8 ++
.../processtask/ProcessTaskSlaMapper.xml | 59 +++++++++
.../ProcessTaskAutomaticServiceImpl.java | 4 +-
.../service/ProcessTaskServiceImpl.java | 10 ++
.../process/thread/ProcessTaskSlaThread.java | 7 ++
7 files changed, 217 insertions(+), 9 deletions(-)
create mode 100644 src/main/java/neatlogic/module/process/api/processtask/DelayProcessTaskStepSlaApi.java
diff --git a/src/main/java/neatlogic/module/process/api/processtask/DelayProcessTaskStepSlaApi.java b/src/main/java/neatlogic/module/process/api/processtask/DelayProcessTaskStepSlaApi.java
new file mode 100644
index 000000000..7bfb6ddd2
--- /dev/null
+++ b/src/main/java/neatlogic/module/process/api/processtask/DelayProcessTaskStepSlaApi.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2024 深圳极向量科技有限公司 All Rights Reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package neatlogic.module.process.api.processtask;
+
+import com.alibaba.fastjson.JSONObject;
+import neatlogic.framework.auth.core.AuthAction;
+import neatlogic.framework.common.constvalue.ApiParamType;
+import neatlogic.framework.process.auth.PROCESS_BASE;
+import neatlogic.framework.process.dto.ProcessTaskStepSlaDelayVo;
+import neatlogic.framework.process.dto.ProcessTaskStepVo;
+import neatlogic.framework.process.exception.processtask.ProcessTaskStepNotFoundException;
+import neatlogic.framework.restful.annotation.*;
+import neatlogic.framework.restful.constvalue.OperationTypeEnum;
+import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase;
+import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper;
+import neatlogic.module.process.dao.mapper.processtask.ProcessTaskSlaMapper;
+import neatlogic.module.process.service.IProcessStepHandlerUtil;
+import neatlogic.module.process.service.ProcessTaskService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Transactional
+@AuthAction(action = PROCESS_BASE.class)
+@OperationType(type = OperationTypeEnum.UPDATE)
+public class DelayProcessTaskStepSlaApi extends PrivateApiComponentBase {
+
+ @Resource
+ private ProcessTaskService processTaskService;
+
+ @Resource
+ private ProcessTaskSlaMapper processTaskSlaMapper;
+
+ @Resource
+ private ProcessTaskMapper processTaskMapper;
+
+ @Resource
+ private IProcessStepHandlerUtil processStepHandlerUtil;
+
+ @Override
+ public String getName() {
+ return "nmpap.delayprocesstaskstepslaapi.getname";
+ }
+
+ @Input({
+ @Param(name = "processTaskId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.processtaskid"),
+ @Param(name = "targetProcessTaskStepId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.targetprocesstaskstepid"),
+ @Param(name = "time", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.delaytime"),
+ @Param(name = "unit", type = ApiParamType.ENUM, rule = "day,hour,minute", defaultValue = "minute", desc = "common.timeunit", help = "day:天,hour:小时,minute:分钟,默认为minute"),
+ })
+ @Output({})
+ @Description(desc = "nmpap.delayprocesstaskstepslaapi.getname")
+ @Override
+ public Object myDoService(JSONObject paramObj) throws Exception {
+ System.out.println("paramObj = " + paramObj);
+ Long processTaskId = paramObj.getLong("processTaskId");
+ Long targetProcessTaskStepId = paramObj.getLong("targetProcessTaskStepId");
+ Long time = paramObj.getLong("time");
+ String unit = paramObj.getString("unit");
+
+ processTaskService.checkProcessTaskParamsIsLegal(processTaskId);
+ ProcessTaskStepVo targetProcessTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(targetProcessTaskStepId);
+ if (targetProcessTaskStepVo == null) {
+ throw new ProcessTaskStepNotFoundException(targetProcessTaskStepId);
+ }
+
+ long millis = 0;
+ if ("hour".equals(unit)) {
+ millis = TimeUnit.HOURS.toMillis(time);
+ } else if ("day".equals(unit)) {
+ millis = TimeUnit.DAYS.toMillis(time);
+ } else {
+ millis = TimeUnit.MINUTES.toMillis(time);
+ }
+
+ List slaIdList = processTaskSlaMapper.getSlaIdListByProcessTaskStepId(targetProcessTaskStepId);
+ if (CollectionUtils.isNotEmpty(slaIdList)) {
+ ProcessTaskStepSlaDelayVo processTaskStepSlaDelayVo = new ProcessTaskStepSlaDelayVo();
+ processTaskStepSlaDelayVo.setProcessTaskId(processTaskId);
+ processTaskStepSlaDelayVo.setTargetProcessTaskId(targetProcessTaskStepVo.getProcessTaskId());
+ processTaskStepSlaDelayVo.setTargetProcessTaskStepId(targetProcessTaskStepVo.getId());
+ processTaskStepSlaDelayVo.setTime(millis);
+ for (Long slaId : slaIdList) {
+ processTaskStepSlaDelayVo.setSlaId(slaId);
+ processTaskSlaMapper.insertProcessTaskStepSlaDelay(processTaskStepSlaDelayVo);
+ }
+ processStepHandlerUtil.calculateSla(targetProcessTaskStepVo);
+ }
+ return null;
+ }
+
+ @Override
+ public String getToken() {
+ return "processtask/step/sla/delay";
+ }
+}
diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftGetApi.java b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftGetApi.java
index 4bc2c3ab2..86a1bf77b 100644
--- a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftGetApi.java
+++ b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskDraftGetApi.java
@@ -110,6 +110,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
@Param(name = "copyProcessTaskId", type = ApiParamType.LONG, desc = "term.itsm.copyprocesstaskid", help = "从复制上报进入上报页时,传copyProcessTaskId"),
@Param(name = "channelUuid", type = ApiParamType.STRING, desc = "term.itsm.channeluuid", help = "从服务目录进入上报页时,传channelUuid"),
@Param(name = "fromProcessTaskId", type = ApiParamType.LONG, desc = "term.itsm.fromprocesstaskid", help = "从转报进入上报页时,传fromProcessTaskId"),
+ @Param(name = "fromProcessTaskStepId", type = ApiParamType.LONG, desc = "term.itsm.fromprocesstaskstepid", help = "从转报进入上报页时,传fromProcessTaskStepId"),
@Param(name = "channelTypeRelationId", type = ApiParamType.LONG, desc = "term.itsm.channeltyperelationid", help = "从转报进入上报页时,传channelTypeRelationId"),
@Param(name = "parentProcessTaskStepId", type = ApiParamType.LONG, desc = "nmpap.processtaskdraftgetapi.input.param.desc.parentprocesstaskstepid", help = "创建子流程时,传parentProcessTaskStepId")
})
@@ -158,6 +159,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
if (!catalogService.channelIsAuthority(channelUuid, UserContext.get().getUserUuid(true))) {
throw new PermissionDeniedException();
}
+ Long fromProcessTaskStepId = jsonObj.getLong("fromProcessTaskStepId");
Long channelTypeRelationId = jsonObj.getLong("channelTypeRelationId");
Long fromProcessTaskId = jsonObj.getLong("fromProcessTaskId");
if (fromProcessTaskId != null) {
@@ -181,7 +183,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
} else if (parentProcessTaskStepId != null) {
return getParentProcessTask(parentProcessTaskStepId, channelUuid);
}
- processTaskVo = getProcessTaskVoByChannelUuid(channelUuid, fromProcessTaskId, channelTypeRelationId);
+ processTaskVo = getProcessTaskVoByChannelUuid(channelUuid, fromProcessTaskId, fromProcessTaskStepId, channelTypeRelationId);
} else {
throw new ParamNotExistsException("processTaskId", "copyProcessTaskId", "channelUuid", "parentProcessTaskStepId");
}
@@ -194,7 +196,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
* @param fromProcessTaskId 来源工单id
* @param toProcessTaskFormConfig 目标工单表单配置
**/
- private Map getFromFormAttributeDataMap(Long fromProcessTaskId, JSONObject toProcessTaskFormConfig) {
+ private Map getFromFormAttributeDataMap(Long fromProcessTaskId, Long fromProcessTaskStepId, JSONObject toProcessTaskFormConfig) {
Map resultObj = new HashMap<>();
if (MapUtils.isEmpty(toProcessTaskFormConfig)) {
return resultObj;
@@ -233,7 +235,11 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
}
}
}
-
+ for (FormAttributeVo formAttributeVo : toFormVersion.getFormAttributeList()) {
+ if (Objects.equals(formAttributeVo.getKey(), "processTaskStepId")) {
+ resultObj.put(formAttributeVo.getUuid(), fromProcessTaskStepId);
+ }
+ }
return resultObj;
}
@@ -361,7 +367,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
private ProcessTaskVo getProcessTaskVoByCopyProcessTaskId(Long copyProcessTaskId) throws Exception {
ProcessTaskVo oldProcessTaskVo = processTaskService.checkProcessTaskParamsIsLegal(copyProcessTaskId);
- ProcessTaskVo processTaskVo = getProcessTaskVoByChannelUuid(oldProcessTaskVo.getChannelUuid(), null, null);
+ ProcessTaskVo processTaskVo = getProcessTaskVoByChannelUuid(oldProcessTaskVo.getChannelUuid(), null, null, null);
processTaskVo.setTitle(oldProcessTaskVo.getTitle());
List channelPriorityList = channelMapper.getChannelPriorityListByChannelUuid(oldProcessTaskVo.getChannelUuid());
@@ -406,17 +412,17 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
throw new ProcessStepHandlerNotFoundException(oldStartProcessTaskStepVo.getHandler());
}
startProcessTaskStepVo.setHandlerStepInfo(startProcessStepUtilHandler.getNonStartStepInfo(oldStartProcessTaskStepVo));
- processTaskVo.setFormAttributeDataMap(getFromFormAttributeDataMap(copyProcessTaskId, processTaskVo.getFormConfig()));
+ processTaskVo.setFormAttributeDataMap(getFromFormAttributeDataMap(copyProcessTaskId, null, processTaskVo.getFormConfig()));
// 标签列表
processTaskVo.setTagVoList(processTaskMapper.getProcessTaskTagListByProcessTaskId(copyProcessTaskId));
return processTaskVo;
}
private ProcessTaskVo getProcessTaskVoByChannelUuid(String channelUuid) {
- return getProcessTaskVoByChannelUuid(channelUuid, null, null);
+ return getProcessTaskVoByChannelUuid(channelUuid, null, null, null);
}
- private ProcessTaskVo getProcessTaskVoByChannelUuid(String channelUuid, Long fromProcessTaskId, Long channelTypeRelationId) {
+ private ProcessTaskVo getProcessTaskVoByChannelUuid(String channelUuid, Long fromProcessTaskId, Long fromProcessTaskStepId, Long channelTypeRelationId) {
ChannelVo channel = channelMapper.getChannelByUuid(channelUuid);
if (channel == null) {
throw new ChannelNotFoundException(channelUuid);
@@ -490,7 +496,7 @@ public class ProcessTaskDraftGetApi extends PrivateApiComponentBase {
}
processTaskVo.getTranferReportProcessTaskList().add(fromProcessTaskVo);
if (MapUtils.isNotEmpty(processTaskVo.getFormConfig())) {
- processTaskVo.setFormAttributeDataMap(getFromFormAttributeDataMap(fromProcessTaskId, processTaskVo.getFormConfig()));
+ processTaskVo.setFormAttributeDataMap(getFromFormAttributeDataMap(fromProcessTaskId, fromProcessTaskStepId, processTaskVo.getFormConfig()));
}
}
return processTaskVo;
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.java
index 9989e230c..9a0197f12 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.java
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.java
@@ -63,6 +63,10 @@ public interface ProcessTaskSlaMapper extends IProcessTaskSlaCrossoverMapper {
List getDoingOrPauseSlaIdListByWorktimeUuid(@Param("worktimeUuid") String worktimeUuid, @Param("startNum") int startNum, @Param("pageSize") int pageSize);
+ List getProcessTaskStepSlaDelayListBySlaId(Long slaId);
+
+ List getProcessTaskStepSlaDelayListBySlaIdList(List slaIdList);
+
int insertProcessTaskSlaNotify(ProcessTaskSlaNotifyVo processTaskSlaNotifyVo);
int insertProcessTaskSlaTransfer(ProcessTaskSlaTransferVo processTaskSlaTransferVo);
@@ -75,6 +79,8 @@ public interface ProcessTaskSlaMapper extends IProcessTaskSlaCrossoverMapper {
int insertProcessTaskStepSlaTime(ProcessTaskStepSlaTimeVo processTaskStepSlaTimeVo);
+ int insertProcessTaskStepSlaDelay(ProcessTaskStepSlaDelayVo processTaskStepSlaDelayVo);
+
int updateProcessTaskSlaTransfer(ProcessTaskSlaTransferVo processTaskSlaTransferVo);
int updateProcessTaskSlaNotify(ProcessTaskSlaNotifyVo processTaskNotifyVo);
@@ -94,4 +100,6 @@ public interface ProcessTaskSlaMapper extends IProcessTaskSlaCrossoverMapper {
int deleteProcessTaskSlaTimeBySlaId(Long slaId);
int deleteProcessTaskStepSlaTimeBySlaId(Long slaId);
+
+ int deleteProcessTaskStepSlaDelayByTargetProcessTaskStepId(Long targetProcessTaskStepId);
}
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.xml
index 05e01f1be..37bd23094 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.xml
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskSlaMapper.xml
@@ -220,6 +220,37 @@
LIMIT #{startNum}, #{pageSize}
+
+
+
+
select LAST_INSERT_ID() as id
@@ -329,6 +360,30 @@
)
+
+ INSERT INTO `processtask_step_sla_delay` (
+ `id`,
+ `processtask_id`,
+ `target_processtask_id`,
+ `target_processtask_step_id`,
+ `sla_id`,
+ `time`,
+ `fcu`,
+ `fcd`
+ )
+ VALUES
+ (
+ #{id},
+ #{processTaskId},
+ #{targetProcessTaskId},
+ #{targetProcessTaskStepId},
+ #{slaId},
+ #{time},
+ #{fcu},
+ NOW(3)
+ )
+
+
UPDATE `processtask_sla_transfer`
SET `trigger_time` = #{triggerTime}
@@ -381,4 +436,8 @@
DELETE FROM `processtask_step_sla_time` WHERE `sla_id` = #{value}
+
+
+ DELETE FROM `processtask_step_sla_delay` WHERE `target_processtask_step_id` = #{value}
+
diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskAutomaticServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskAutomaticServiceImpl.java
index 574a06767..f82af9a85 100644
--- a/src/main/java/neatlogic/module/process/service/ProcessTaskAutomaticServiceImpl.java
+++ b/src/main/java/neatlogic/module/process/service/ProcessTaskAutomaticServiceImpl.java
@@ -715,7 +715,9 @@ public class ProcessTaskAutomaticServiceImpl implements ProcessTaskAutomaticServ
} else if (type.equals("integration") && MapUtils.isNotEmpty(resultJson)) {
integrationParam.put(name, resultJson.get(value.replace("integration#", StringUtils.EMPTY)));
} else {// 常量
- integrationParam.put(name, value);
+ if (StringUtils.isNotBlank(value)) {
+ integrationParam.put(name, value);
+ }
}
}
}
diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java
index 5a696e87d..8540503e5 100644
--- a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java
+++ b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java
@@ -757,6 +757,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC
if (CollectionUtils.isEmpty(processTaskSlaTimeList)) {
return processTaskSlaTimeList;
}
+ List processTaskStepSlaDelayList = processTaskSlaMapper.getProcessTaskStepSlaDelayListBySlaIdList(slaIdList);
Set processTaskIdSet = processTaskSlaTimeList.stream().map(ProcessTaskSlaTimeVo::getProcessTaskId).collect(Collectors.toSet());
List processTaskList = processTaskMapper.getProcessTaskListByIdList(new ArrayList<>(processTaskIdSet));
Map worktimeUuidMap = processTaskList.stream().collect(Collectors.toMap(ProcessTaskVo::getId, ProcessTaskVo::getWorktimeUuid));
@@ -780,6 +781,15 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC
long costTime = worktimeMapper.calculateCostTime(worktimeUuid, calculationTimeLong, currentTimeMillis);
processTaskSlaTimeVo.setTimeLeft(processTaskSlaTimeVo.getTimeLeft() - costTime);
}
+ if (CollectionUtils.isNotEmpty(processTaskStepSlaDelayList)) {
+ List delayList = new ArrayList<>();
+ for (ProcessTaskStepSlaDelayVo processTaskStepSlaDelayVo : processTaskStepSlaDelayList) {
+ if (Objects.equals(processTaskSlaTimeVo.getSlaId(), processTaskStepSlaDelayVo.getSlaId())) {
+ delayList.add(processTaskStepSlaDelayVo);
+ }
+ }
+ processTaskSlaTimeVo.setDelayList(delayList);
+ }
}
return processTaskSlaTimeList;
}
diff --git a/src/main/java/neatlogic/module/process/thread/ProcessTaskSlaThread.java b/src/main/java/neatlogic/module/process/thread/ProcessTaskSlaThread.java
index 6733a7896..ff006d637 100644
--- a/src/main/java/neatlogic/module/process/thread/ProcessTaskSlaThread.java
+++ b/src/main/java/neatlogic/module/process/thread/ProcessTaskSlaThread.java
@@ -564,6 +564,13 @@ public class ProcessTaskSlaThread extends NeatLogicThread {
// 修正最终超时日期
if (timeSum != null) {
+ // 加上延时时长
+ List slaDelayList = processTaskSlaMapper.getProcessTaskStepSlaDelayListBySlaId(slaId);
+ for (ProcessTaskStepSlaDelayVo slaDelay : slaDelayList) {
+ if (slaDelay.getTime() != null) {
+ timeSum += slaDelay.getTime();
+ }
+ }
String calculateHandler = slaConfigObj.getString("calculateHandler");
if (StringUtils.isBlank(calculateHandler)) {
calculateHandler = DefaultSlaCalculateHandler.class.getSimpleName();
--
Gitee
From e42559a058da450b6e77e5a7d419bd80d04f612f Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Mon, 15 Jul 2024 19:01:54 +0800
Subject: [PATCH 2/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF-s?=
=?UTF-8?q?la=E6=94=AF=E6=8C=81=E5=B7=A5=E5=8D=95=E9=A2=9D=E5=A4=96?=
=?UTF-8?q?=E5=BB=B6=E8=BF=9F=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E7=82=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1199325999235072]后端-sla支持工单额外延迟超时时间点 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1199325999235072
---
.../changelog/2024-07-15/neatlogic_tenant.sql | 13 +++++++++++++
.../process/changelog/2024-07-15/version.json | 10 ++++++++++
.../resources/process/sqlscript/ddl.sql | 17 +++++++++++++++++
3 files changed, 40 insertions(+)
create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2024-07-15/neatlogic_tenant.sql
create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2024-07-15/version.json
diff --git a/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/neatlogic_tenant.sql
new file mode 100644
index 000000000..6b7e4c695
--- /dev/null
+++ b/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/neatlogic_tenant.sql
@@ -0,0 +1,13 @@
+CREATE TABLE IF NOT EXISTS `processtask_step_sla_delay` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `processtask_id` bigint NOT NULL COMMENT '工单ID',
+ `target_processtask_id` bigint NOT NULL COMMENT '目标工单ID',
+ `target_processtask_step_id` bigint NOT NULL COMMENT '目标步骤ID',
+ `sla_id` bigint NOT NULL COMMENT '时效ID',
+ `time` bigint NOT NULL COMMENT '追加时间',
+ `fcu` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
+ `fcd` timestamp(3) NOT NULL COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `idx_unique` (`target_processtask_step_id`,`sla_id`,`processtask_id`),
+ KEY `idx_sla_id` (`sla_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工单时效延迟表';
\ No newline at end of file
diff --git a/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/version.json b/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/version.json
new file mode 100644
index 000000000..c47f293c2
--- /dev/null
+++ b/src/main/resources/neatlogic/resources/process/changelog/2024-07-15/version.json
@@ -0,0 +1,10 @@
+{
+ "content":[
+ {
+ "type":"新增功能",
+ "detail":[
+ {"msg":"1.sla支持工单额外延迟超时时间点"}
+ ]
+ }
+ ]
+}
diff --git a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
index 850772df0..55a4faa3a 100644
--- a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
+++ b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
@@ -974,6 +974,23 @@ CREATE TABLE IF NOT EXISTS `processtask_sla_transfer` (
UNIQUE INDEX `sla_id_hash_idx`(`sla_id`, `hash`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '工单步骤时效转交设置表';
+-- ----------------------------
+-- Table structure for processtask_step_sla_delay
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `processtask_step_sla_delay` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `processtask_id` bigint NOT NULL COMMENT '工单ID',
+ `target_processtask_id` bigint NOT NULL COMMENT '目标工单ID',
+ `target_processtask_step_id` bigint NOT NULL COMMENT '目标步骤ID',
+ `sla_id` bigint NOT NULL COMMENT '时效ID',
+ `time` bigint NOT NULL COMMENT '追加时间',
+ `fcu` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
+ `fcd` timestamp(3) NOT NULL COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `idx_unique` (`target_processtask_step_id`,`sla_id`,`processtask_id`),
+ KEY `idx_sla_id` (`sla_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工单时效延迟表';
+
-- ----------------------------
-- Table structure for processtask_step
-- ----------------------------
--
Gitee