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