From b49dbc7bba46fd2337fc0ef6bf0d93633db92369 Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Thu, 25 Jul 2024 11:48:44 +0800
Subject: [PATCH 1/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20IT=E6=9C=8D=E5=8A=A1?=
=?UTF-8?q?-=E5=A2=9E=E5=8A=A0=E8=AE=B0=E5=BD=95=E6=AD=A5=E9=AA=A4?=
=?UTF-8?q?=E5=A4=84=E7=90=86=E8=BF=87=E7=A8=8B=E4=B8=AD=E6=AF=8F=E4=B8=AA?=
=?UTF-8?q?=E5=A4=84=E7=90=86=E4=BA=BA=E6=AF=8F=E4=B8=AA=E9=98=B6=E6=AE=B5?=
=?UTF-8?q?=E7=9A=84=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=E5=92=8C=E7=BB=93?=
=?UTF-8?q?=E6=9D=9F=E6=97=B6=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1207797998387200]IT服务-增加记录步骤处理过程中每个处理人每个阶段的开始时间和结束时间 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1207797998387200
---
.../mapper/processtask/ProcessTaskMapper.xml | 2 +-
.../ProcessTaskStepTimeAuditMapper.java | 10 ++
.../ProcessTaskStepTimeAuditMapper.xml | 60 +++++++
.../ProcessTaskStepCostPostProcessor.java | 152 ++++++++++++++++++
.../thread/ProcessTaskAuditThread.java | 6 +
.../changelog/2024-07-25/neatlogic_tenant.sql | 28 ++++
.../process/changelog/2024-07-25/version.json | 10 ++
.../resources/process/sqlscript/ddl.sql | 37 ++++-
8 files changed, 303 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2024-07-25/version.json
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.xml
index c3fd9883e..956c61b89 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.xml
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.xml
@@ -2973,7 +2973,7 @@
#{processTaskId},
#{processTaskStepId},
#{userUuid},
- NOW(3),
+ #{actionTime},
#{action},
#{stepStatus},
#{originalUser},
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.java
index 2b6c941c7..38b31e0ce 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.java
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.java
@@ -18,6 +18,8 @@
package neatlogic.module.process.dao.mapper.processtask;
import neatlogic.framework.process.crossover.IProcessTaskStepTimeAuditCrossoverMapper;
+import neatlogic.framework.process.dto.ProcessTaskStepCostVo;
+import neatlogic.framework.process.dto.ProcessTaskStepCostWorkerVo;
import neatlogic.framework.process.dto.ProcessTaskStepTimeAuditVo;
import java.util.List;
@@ -27,7 +29,15 @@ public interface ProcessTaskStepTimeAuditMapper extends IProcessTaskStepTimeAudi
ProcessTaskStepTimeAuditVo getLastProcessTaskStepTimeAuditByStepId(Long processTaskStepId);
+ ProcessTaskStepCostVo getLastProcessTaskStepCostByProcessTaskStepId(Long processTaskStepId);
+
int updateProcessTaskStepTimeAudit(ProcessTaskStepTimeAuditVo processTaskStepTimeAuditVo);
int insertProcessTaskStepTimeAudit(ProcessTaskStepTimeAuditVo processTaskStepTimeAuditVo);
+
+ int insertProcessTaskStepCost(ProcessTaskStepCostVo processTaskStepCostVo);
+
+ int insertProcessTaskStepCostWorker(ProcessTaskStepCostWorkerVo processTaskStepCostWorkerVo);
+
+ int updateProcessTaskStepCost(ProcessTaskStepCostVo processTaskStepCostVo);
}
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
index 5ca4788be..9a4bc5ead 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
@@ -52,6 +52,27 @@
ORDER BY id DESC LIMIT 1
+
+
select LAST_INSERT_ID() as id
@@ -81,6 +102,33 @@
)
+
+ INSERT INTO `processtask_step_cost` (
+ `id`,
+ `processtask_id`,
+ `processtask_step_id`,
+ `start_action`,
+ `start_status`,
+ `start_time`,
+ `start_user_uuid`
+ )
+ VALUES
+ (
+ #{id},
+ #{processTaskId},
+ #{processTaskStepId},
+ #{startAction},
+ #{startStatus},
+ #{startTime},
+ #{startUserUuid}
+ )
+
+
+
+ INSERT INTO `processtask_step_cost_worker` (`id`, `action_type`, `cost_id`, `type`, `uuid`)
+ VALUES (#{id}, #{actionType}, #{costId}, #{type}, #{uuid})
+
+
UPDATE
`processtask_step_timeaudit`
@@ -96,4 +144,16 @@
WHERE `id` = #{id}
+
+
+ UPDATE `processtask_step_cost`
+ SET
+ `end_action` = #{endAction},
+ `end_status` = #{endStatus},
+ `end_time` = #{endTime},
+ `end_user_uuid` = #{endUserUuid},
+ `time_cost` = #{timeCost},
+ `realtime_cost` = #{realTimeCost}
+ WHERE `id` = #{id}
+
\ No newline at end of file
diff --git a/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java b/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
new file mode 100644
index 000000000..e7b814504
--- /dev/null
+++ b/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
@@ -0,0 +1,152 @@
+/*
+ * 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.stephandler.postprocessor;
+
+import com.alibaba.fastjson.JSONObject;
+import neatlogic.framework.asynchronization.threadlocal.UserContext;
+import neatlogic.framework.common.constvalue.GroupSearch;
+import neatlogic.framework.process.constvalue.IOperationType;
+import neatlogic.framework.process.constvalue.ProcessTaskOperationType;
+import neatlogic.framework.process.constvalue.ProcessUserType;
+import neatlogic.framework.process.dto.*;
+import neatlogic.framework.process.stephandler.core.IProcessTaskOperatePostProcessor;
+import neatlogic.framework.util.SnowflakeUtil;
+import neatlogic.framework.worktime.dao.mapper.WorktimeMapper;
+import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper;
+import neatlogic.module.process.dao.mapper.processtask.ProcessTaskStepTimeAuditMapper;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePostProcessor {
+
+ @Resource
+ private ProcessTaskStepTimeAuditMapper processTaskStepTimeAuditMapper;
+
+ @Resource
+ private ProcessTaskMapper processTaskMapper;
+
+ @Resource
+ private WorktimeMapper worktimeMapper;
+
+ @Override
+ public void postProcessAfterProcessTaskStepOperate(ProcessTaskStepVo currentProcessTaskStepVo, IOperationType operationType) {
+ Long processTaskId = currentProcessTaskStepVo.getProcessTaskId();
+ Long processTaskStepId = currentProcessTaskStepVo.getId();
+ JSONObject otherParam = currentProcessTaskStepVo.getParamObj();
+ List list = new ArrayList<>();
+ list.add(ProcessTaskOperationType.STEP_ACTIVE);
+ list.add(ProcessTaskOperationType.STEP_ACCEPT);
+ list.add(ProcessTaskOperationType.STEP_START);
+ list.add(ProcessTaskOperationType.STEP_COMPLETE);
+ list.add(ProcessTaskOperationType.STEP_BACK);
+ list.add(ProcessTaskOperationType.STEP_PAUSE);
+ list.add(ProcessTaskOperationType.STEP_TRANSFER);
+ list.add(ProcessTaskOperationType.STEP_RECOVER);
+ list.add(ProcessTaskOperationType.STEP_RETREAT);
+ list.add(ProcessTaskOperationType.STEP_REDO);
+ list.add(ProcessTaskOperationType.STEP_REAPPROVAL);
+ if (list.contains(operationType)) {
+ Date actionTime = otherParam.getDate("actionTime");
+ if (actionTime == null) {
+ actionTime = new Date();
+ }
+ String stepStatus = currentProcessTaskStepVo.getStatus();
+ if (ProcessTaskOperationType.STEP_COMPLETE == operationType || ProcessTaskOperationType.STEP_BACK == operationType) {
+ List workerList = new ArrayList<>();
+ List processTaskStepUserList = processTaskMapper.getProcessTaskStepUserByStepId(processTaskStepId, ProcessUserType.MAJOR.getValue());
+ if (CollectionUtils.isNotEmpty(processTaskStepUserList)) {
+ for (ProcessTaskStepUserVo processTaskStepUserVo : processTaskStepUserList) {
+ ProcessTaskStepCostWorkerVo workerVo = new ProcessTaskStepCostWorkerVo();
+ workerVo.setType(GroupSearch.USER.getValue());
+ workerVo.setUuid(processTaskStepUserVo.getUserUuid());
+ workerList.add(workerVo);
+ }
+ }
+ saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, actionTime, stepStatus, workerList);
+ } else {
+ List workerList = new ArrayList<>();
+ List processTaskStepWorkerList = processTaskMapper.getProcessTaskStepWorkerListByProcessTaskStepIdListAndUserType(Collections.singletonList(processTaskStepId), ProcessUserType.MAJOR.getValue());
+ if (CollectionUtils.isNotEmpty(processTaskStepWorkerList)) {
+ for (ProcessTaskStepWorkerVo processTaskStepWorkerVo : processTaskStepWorkerList) {
+ ProcessTaskStepCostWorkerVo workerVo = new ProcessTaskStepCostWorkerVo();
+ workerVo.setType(processTaskStepWorkerVo.getType());
+ workerVo.setUuid(processTaskStepWorkerVo.getUuid());
+ workerList.add(workerVo);
+ }
+ }
+ saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, actionTime, stepStatus, workerList);
+ }
+ }
+ }
+
+ private void saveProcessTaskStepCost(Long processTaskId, Long processTaskStepId, IOperationType operationType, Date actionTime, String stepStatus, List workerList) {
+ String startUserUuid = UserContext.get().getUserUuid();
+ ProcessTaskStepCostVo lastProcessTaskStepCostVo = processTaskStepTimeAuditMapper.getLastProcessTaskStepCostByProcessTaskStepId(processTaskStepId);
+ if (lastProcessTaskStepCostVo != null) {
+ lastProcessTaskStepCostVo.setEndAction(operationType.getValue());
+ lastProcessTaskStepCostVo.setEndStatus(stepStatus);
+ lastProcessTaskStepCostVo.setEndTime(actionTime);
+ lastProcessTaskStepCostVo.setEndUserUuid(startUserUuid);
+ long realtimeCost = actionTime.getTime() - lastProcessTaskStepCostVo.getStartTime().getTime();
+ long timeCost = realtimeCost;
+ ProcessTaskVo processTaskVo = processTaskMapper.getProcessTaskBaseInfoById(processTaskId);
+ if (processTaskVo.getWorktimeUuid() != null) {
+ timeCost = worktimeMapper.calculateCostTime(processTaskVo.getWorktimeUuid(), lastProcessTaskStepCostVo.getStartTime().getTime(), actionTime.getTime());
+ }
+ lastProcessTaskStepCostVo.setTimeCost(timeCost);
+ lastProcessTaskStepCostVo.setRealTimeCost(realtimeCost);
+ doSaveProcessTaskStepCost(lastProcessTaskStepCostVo, workerList);
+ }
+ ProcessTaskStepCostVo processTaskStepCostVo = new ProcessTaskStepCostVo();
+ processTaskStepCostVo.setProcessTaskId(processTaskId);
+ processTaskStepCostVo.setProcessTaskStepId(processTaskStepId);
+ processTaskStepCostVo.setStartAction(operationType.getValue());
+ processTaskStepCostVo.setStartStatus(stepStatus);
+ processTaskStepCostVo.setStartTime(actionTime);
+ processTaskStepCostVo.setStartUserUuid(startUserUuid);
+ doSaveProcessTaskStepCost(processTaskStepCostVo, workerList);
+ }
+
+ private void doSaveProcessTaskStepCost(ProcessTaskStepCostVo processTaskStepCostVo, List workderList) {
+ String actionType = "end";
+ Long id = processTaskStepCostVo.getId();
+ if (id == null) {
+ id = SnowflakeUtil.uniqueLong();
+ actionType = "start";
+ processTaskStepCostVo.setId(id);
+ processTaskStepTimeAuditMapper.insertProcessTaskStepCost(processTaskStepCostVo);
+ } else {
+ processTaskStepTimeAuditMapper.updateProcessTaskStepCost(processTaskStepCostVo);
+ }
+ if (CollectionUtils.isNotEmpty(workderList)) {
+ for (ProcessTaskStepCostWorkerVo processTaskStepCostWorkerVo : workderList) {
+ processTaskStepCostWorkerVo.setId(SnowflakeUtil.uniqueLong());
+ processTaskStepCostWorkerVo.setCostId(id);
+ processTaskStepCostWorkerVo.setActionType(actionType);
+ processTaskStepTimeAuditMapper.insertProcessTaskStepCostWorker(processTaskStepCostWorkerVo);
+ }
+ }
+ }
+}
diff --git a/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java b/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
index 7a6aa760f..b48f77fe0 100644
--- a/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
+++ b/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
@@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Date;
import java.util.Objects;
@Service
@@ -82,6 +83,11 @@ public class ProcessTaskAuditThread extends NeatLogicThread {
processTaskStepAuditVo.setUserUuid(UserContext.get().getUserUuid());// 兼容automatic作业无用户
processTaskStepAuditVo.setStepStatus(currentProcessTaskStepVo.getStatus());
processTaskStepAuditVo.setOriginalUser(currentProcessTaskStepVo.getOriginalUser());
+ Date actionTime = paramObj.getDate("actionTime");
+ if (actionTime == null) {
+ actionTime = new Date();
+ }
+ processTaskStepAuditVo.setActionTime(actionTime);
String source = paramObj.getString("source");
if (StringUtils.isNotBlank(source)) {
processTaskStepAuditVo.setSource(source);
diff --git a/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
new file mode 100644
index 000000000..1c2f2db1c
--- /dev/null
+++ b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
@@ -0,0 +1,28 @@
+CREATE TABLE `processtask_step_cost` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `processtask_id` bigint NOT NULL COMMENT '工单id',
+ `processtask_step_id` bigint DEFAULT NULL COMMENT '步骤id',
+ `start_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
+ `start_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作状态',
+ `start_time` timestamp(3) NOT NULL COMMENT '开始操作时间',
+ `start_user_uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作人',
+ `end_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
+ `end_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作状态',
+ `end_time` timestamp(3) NULL DEFAULT NULL COMMENT '结束操作时间',
+ `end_user_uuid` char(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作人',
+ `time_cost` bigint DEFAULT NULL COMMENT '工作时间耗时',
+ `realtime_cost` bigint DEFAULT NULL COMMENT '自然时间耗时',
+ PRIMARY KEY (`id`),
+ KEY `idx_processtask_id_processtask_step_id` (`processtask_id`,`processtask_step_id`),
+ KEY `idx_processtask_step_id` (`processtask_step_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工单步骤操作耗时表';
+
+CREATE TABLE `processtask_step_cost_worker` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `action_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
+ `cost_id` bigint NOT NULL COMMENT '耗时id',
+ `type` enum('user','team','role') COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型',
+ `uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'UUID',
+ PRIMARY KEY (`id`),
+ KEY `idx_cost_id` (`cost_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-25/version.json b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/version.json
new file mode 100644
index 000000000..240eadf4c
--- /dev/null
+++ b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/version.json
@@ -0,0 +1,10 @@
+{
+ "content":[
+ {
+ "type":"新增功能",
+ "detail":[
+ {"msg":"1.IT服务-增加记录步骤处理过程中每个处理人每个阶段的开始时间和结束时间"}
+ ]
+ }
+ ]
+}
diff --git a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
index fc28bf1da..34345e845 100644
--- a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
+++ b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
@@ -1559,4 +1559,39 @@ CREATE TABLE IF NOT EXISTS `process_workcenter_thead_config` (
`hash` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置hash',
`config` text COLLATE utf8mb4_general_ci COMMENT '配置',
PRIMARY KEY (`hash`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+-- ----------------------------
+-- Table structure for processtask_step_cost
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `processtask_step_cost` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `processtask_id` bigint NOT NULL COMMENT '工单id',
+ `processtask_step_id` bigint DEFAULT NULL COMMENT '步骤id',
+ `start_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
+ `start_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作状态',
+ `start_time` timestamp(3) NOT NULL COMMENT '开始操作时间',
+ `start_user_uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作人',
+ `end_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
+ `end_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作状态',
+ `end_time` timestamp(3) NULL DEFAULT NULL COMMENT '结束操作时间',
+ `end_user_uuid` char(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作人',
+ `time_cost` bigint DEFAULT NULL COMMENT '工作时间耗时',
+ `realtime_cost` bigint DEFAULT NULL COMMENT '自然时间耗时',
+ PRIMARY KEY (`id`),
+ KEY `idx_processtask_id_processtask_step_id` (`processtask_id`,`processtask_step_id`),
+ KEY `idx_processtask_step_id` (`processtask_step_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工单步骤操作耗时表';
+
+-- ----------------------------
+-- Table structure for processtask_step_cost_worker
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `processtask_step_cost_worker` (
+ `id` bigint NOT NULL COMMENT 'ID',
+ `action_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
+ `cost_id` bigint NOT NULL COMMENT '耗时id',
+ `type` enum('user','team','role') COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型',
+ `uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'UUID',
+ PRIMARY KEY (`id`),
+ KEY `idx_cost_id` (`cost_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工单步骤操作耗时处理人表';
\ No newline at end of file
--
Gitee
From 3ad410bd55781fde599b21e5cc3c05d1c4615c4e Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Thu, 25 Jul 2024 12:18:55 +0800
Subject: [PATCH 2/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20IT=E6=9C=8D=E5=8A=A1?=
=?UTF-8?q?-=E5=A2=9E=E5=8A=A0=E8=AE=B0=E5=BD=95=E6=AD=A5=E9=AA=A4?=
=?UTF-8?q?=E5=A4=84=E7=90=86=E8=BF=87=E7=A8=8B=E4=B8=AD=E6=AF=8F=E4=B8=AA?=
=?UTF-8?q?=E5=A4=84=E7=90=86=E4=BA=BA=E6=AF=8F=E4=B8=AA=E9=98=B6=E6=AE=B5?=
=?UTF-8?q?=E7=9A=84=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=E5=92=8C=E7=BB=93?=
=?UTF-8?q?=E6=9D=9F=E6=97=B6=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1207797998387200]IT服务-增加记录步骤处理过程中每个处理人每个阶段的开始时间和结束时间 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1207797998387200
---
.../ProcessTaskStepTimeAuditMapper.xml | 14 ++++-----
.../ProcessTaskStepCostPostProcessor.java | 30 +++++++++----------
.../thread/ProcessTaskAuditThread.java | 8 ++---
.../changelog/2024-07-25/neatlogic_tenant.sql | 6 ++--
.../resources/process/sqlscript/ddl.sql | 6 ++--
5 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
index 9a4bc5ead..ab9c64717 100644
--- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
+++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskStepTimeAuditMapper.xml
@@ -57,11 +57,11 @@
`id`,
`processtask_id` AS processTaskId,
`processtask_step_id` AS processTaskStepId,
- `start_action` AS startAction,
+ `start_operate` AS startOperate,
`start_status` AS startStatus,
`start_time` AS startTime,
`start_user_uuid` AS startUserUuid,
- `end_action` AS endAction,
+ `end_operate` AS endOperate,
`end_status` AS endStatus,
`end_time` AS endTime,
`end_user_uuid` AS endUserUuid,
@@ -107,7 +107,7 @@
`id`,
`processtask_id`,
`processtask_step_id`,
- `start_action`,
+ `start_operate`,
`start_status`,
`start_time`,
`start_user_uuid`
@@ -117,7 +117,7 @@
#{id},
#{processTaskId},
#{processTaskStepId},
- #{startAction},
+ #{startOperate},
#{startStatus},
#{startTime},
#{startUserUuid}
@@ -125,8 +125,8 @@
- INSERT INTO `processtask_step_cost_worker` (`id`, `action_type`, `cost_id`, `type`, `uuid`)
- VALUES (#{id}, #{actionType}, #{costId}, #{type}, #{uuid})
+ INSERT INTO `processtask_step_cost_worker` (`id`, `operate_type`, `cost_id`, `type`, `uuid`)
+ VALUES (#{id}, #{operateType}, #{costId}, #{type}, #{uuid})
@@ -148,7 +148,7 @@
UPDATE `processtask_step_cost`
SET
- `end_action` = #{endAction},
+ `end_operate` = #{endOperate},
`end_status` = #{endStatus},
`end_time` = #{endTime},
`end_user_uuid` = #{endUserUuid},
diff --git a/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java b/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
index e7b814504..d62f5ed07 100644
--- a/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
+++ b/src/main/java/neatlogic/module/process/stephandler/postprocessor/ProcessTaskStepCostPostProcessor.java
@@ -68,9 +68,9 @@ public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePost
list.add(ProcessTaskOperationType.STEP_REDO);
list.add(ProcessTaskOperationType.STEP_REAPPROVAL);
if (list.contains(operationType)) {
- Date actionTime = otherParam.getDate("actionTime");
- if (actionTime == null) {
- actionTime = new Date();
+ Date operateTime = otherParam.getDate("operateTime");
+ if (operateTime == null) {
+ operateTime = new Date();
}
String stepStatus = currentProcessTaskStepVo.getStatus();
if (ProcessTaskOperationType.STEP_COMPLETE == operationType || ProcessTaskOperationType.STEP_BACK == operationType) {
@@ -84,7 +84,7 @@ public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePost
workerList.add(workerVo);
}
}
- saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, actionTime, stepStatus, workerList);
+ saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, operateTime, stepStatus, workerList);
} else {
List workerList = new ArrayList<>();
List processTaskStepWorkerList = processTaskMapper.getProcessTaskStepWorkerListByProcessTaskStepIdListAndUserType(Collections.singletonList(processTaskStepId), ProcessUserType.MAJOR.getValue());
@@ -96,24 +96,24 @@ public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePost
workerList.add(workerVo);
}
}
- saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, actionTime, stepStatus, workerList);
+ saveProcessTaskStepCost(processTaskId, processTaskStepId, operationType, operateTime, stepStatus, workerList);
}
}
}
- private void saveProcessTaskStepCost(Long processTaskId, Long processTaskStepId, IOperationType operationType, Date actionTime, String stepStatus, List workerList) {
+ private void saveProcessTaskStepCost(Long processTaskId, Long processTaskStepId, IOperationType operationType, Date operateTime, String stepStatus, List workerList) {
String startUserUuid = UserContext.get().getUserUuid();
ProcessTaskStepCostVo lastProcessTaskStepCostVo = processTaskStepTimeAuditMapper.getLastProcessTaskStepCostByProcessTaskStepId(processTaskStepId);
if (lastProcessTaskStepCostVo != null) {
- lastProcessTaskStepCostVo.setEndAction(operationType.getValue());
+ lastProcessTaskStepCostVo.setEndOperate(operationType.getValue());
lastProcessTaskStepCostVo.setEndStatus(stepStatus);
- lastProcessTaskStepCostVo.setEndTime(actionTime);
+ lastProcessTaskStepCostVo.setEndTime(operateTime);
lastProcessTaskStepCostVo.setEndUserUuid(startUserUuid);
- long realtimeCost = actionTime.getTime() - lastProcessTaskStepCostVo.getStartTime().getTime();
+ long realtimeCost = operateTime.getTime() - lastProcessTaskStepCostVo.getStartTime().getTime();
long timeCost = realtimeCost;
ProcessTaskVo processTaskVo = processTaskMapper.getProcessTaskBaseInfoById(processTaskId);
if (processTaskVo.getWorktimeUuid() != null) {
- timeCost = worktimeMapper.calculateCostTime(processTaskVo.getWorktimeUuid(), lastProcessTaskStepCostVo.getStartTime().getTime(), actionTime.getTime());
+ timeCost = worktimeMapper.calculateCostTime(processTaskVo.getWorktimeUuid(), lastProcessTaskStepCostVo.getStartTime().getTime(), operateTime.getTime());
}
lastProcessTaskStepCostVo.setTimeCost(timeCost);
lastProcessTaskStepCostVo.setRealTimeCost(realtimeCost);
@@ -122,19 +122,19 @@ public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePost
ProcessTaskStepCostVo processTaskStepCostVo = new ProcessTaskStepCostVo();
processTaskStepCostVo.setProcessTaskId(processTaskId);
processTaskStepCostVo.setProcessTaskStepId(processTaskStepId);
- processTaskStepCostVo.setStartAction(operationType.getValue());
+ processTaskStepCostVo.setStartOperate(operationType.getValue());
processTaskStepCostVo.setStartStatus(stepStatus);
- processTaskStepCostVo.setStartTime(actionTime);
+ processTaskStepCostVo.setStartTime(operateTime);
processTaskStepCostVo.setStartUserUuid(startUserUuid);
doSaveProcessTaskStepCost(processTaskStepCostVo, workerList);
}
private void doSaveProcessTaskStepCost(ProcessTaskStepCostVo processTaskStepCostVo, List workderList) {
- String actionType = "end";
+ String operateType = "end";
Long id = processTaskStepCostVo.getId();
if (id == null) {
id = SnowflakeUtil.uniqueLong();
- actionType = "start";
+ operateType = "start";
processTaskStepCostVo.setId(id);
processTaskStepTimeAuditMapper.insertProcessTaskStepCost(processTaskStepCostVo);
} else {
@@ -144,7 +144,7 @@ public class ProcessTaskStepCostPostProcessor implements IProcessTaskOperatePost
for (ProcessTaskStepCostWorkerVo processTaskStepCostWorkerVo : workderList) {
processTaskStepCostWorkerVo.setId(SnowflakeUtil.uniqueLong());
processTaskStepCostWorkerVo.setCostId(id);
- processTaskStepCostWorkerVo.setActionType(actionType);
+ processTaskStepCostWorkerVo.setOperateType(operateType);
processTaskStepTimeAuditMapper.insertProcessTaskStepCostWorker(processTaskStepCostWorkerVo);
}
}
diff --git a/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java b/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
index b48f77fe0..1d9bab429 100644
--- a/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
+++ b/src/main/java/neatlogic/module/process/thread/ProcessTaskAuditThread.java
@@ -83,11 +83,11 @@ public class ProcessTaskAuditThread extends NeatLogicThread {
processTaskStepAuditVo.setUserUuid(UserContext.get().getUserUuid());// 兼容automatic作业无用户
processTaskStepAuditVo.setStepStatus(currentProcessTaskStepVo.getStatus());
processTaskStepAuditVo.setOriginalUser(currentProcessTaskStepVo.getOriginalUser());
- Date actionTime = paramObj.getDate("actionTime");
- if (actionTime == null) {
- actionTime = new Date();
+ Date operateTime = paramObj.getDate("operateTime");
+ if (operateTime == null) {
+ operateTime = new Date();
}
- processTaskStepAuditVo.setActionTime(actionTime);
+ processTaskStepAuditVo.setActionTime(operateTime);
String source = paramObj.getString("source");
if (StringUtils.isNotBlank(source)) {
processTaskStepAuditVo.setSource(source);
diff --git a/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
index 1c2f2db1c..789ad8a79 100644
--- a/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
+++ b/src/main/resources/neatlogic/resources/process/changelog/2024-07-25/neatlogic_tenant.sql
@@ -2,11 +2,11 @@ CREATE TABLE `processtask_step_cost` (
`id` bigint NOT NULL COMMENT 'ID',
`processtask_id` bigint NOT NULL COMMENT '工单id',
`processtask_step_id` bigint DEFAULT NULL COMMENT '步骤id',
- `start_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
+ `start_operate` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
`start_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作状态',
`start_time` timestamp(3) NOT NULL COMMENT '开始操作时间',
`start_user_uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作人',
- `end_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
+ `end_operate` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
`end_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作状态',
`end_time` timestamp(3) NULL DEFAULT NULL COMMENT '结束操作时间',
`end_user_uuid` char(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作人',
@@ -19,7 +19,7 @@ CREATE TABLE `processtask_step_cost` (
CREATE TABLE `processtask_step_cost_worker` (
`id` bigint NOT NULL COMMENT 'ID',
- `action_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
+ `operate_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
`cost_id` bigint NOT NULL COMMENT '耗时id',
`type` enum('user','team','role') COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型',
`uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'UUID',
diff --git a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
index 34345e845..c397a8cc5 100644
--- a/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
+++ b/src/main/resources/neatlogic/resources/process/sqlscript/ddl.sql
@@ -1568,11 +1568,11 @@ CREATE TABLE IF NOT EXISTS `processtask_step_cost` (
`id` bigint NOT NULL COMMENT 'ID',
`processtask_id` bigint NOT NULL COMMENT '工单id',
`processtask_step_id` bigint DEFAULT NULL COMMENT '步骤id',
- `start_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
+ `start_operate` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作类型',
`start_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作状态',
`start_time` timestamp(3) NOT NULL COMMENT '开始操作时间',
`start_user_uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始操作人',
- `end_action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
+ `end_operate` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作类型',
`end_status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作状态',
`end_time` timestamp(3) NULL DEFAULT NULL COMMENT '结束操作时间',
`end_user_uuid` char(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束操作人',
@@ -1588,7 +1588,7 @@ CREATE TABLE IF NOT EXISTS `processtask_step_cost` (
-- ----------------------------
CREATE TABLE IF NOT EXISTS `processtask_step_cost_worker` (
`id` bigint NOT NULL COMMENT 'ID',
- `action_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
+ `operate_type` enum('start','end') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '起止操作',
`cost_id` bigint NOT NULL COMMENT '耗时id',
`type` enum('user','team','role') COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型',
`uuid` char(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'UUID',
--
Gitee