From f537c6ff8e1a1a6303ff0f05987afb319eb1c654 Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Thu, 5 Dec 2024 17:24:07 +0800
Subject: [PATCH 1/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF-I?=
=?UTF-8?q?T=E6=9C=8D=E5=8A=A1-=E6=9D=A1=E4=BB=B6=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E3=80=81=E8=87=AA=E5=8A=A8=E5=8C=96=E8=8A=82=E7=82=B9=E3=80=81?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2=E8=8A=82=E7=82=B9=E5=BC=82?=
=?UTF-8?q?=E5=B8=B8=E6=97=B6=E5=A2=9E=E5=8A=A0=E9=87=8D=E6=96=B0=E6=BF=80?=
=?UTF-8?q?=E6=B4=BB=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1305116722823168]后端-IT服务-条件节点、自动化节点、数据转换节点异常时增加重新激活功能 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1305116722823168
---
.../ProcessTaskCanReactivateStepListApi.java | 87 +++++++++++++++++++
.../ActiveProcessTaskStepApi.java | 9 +-
.../handler/StepOperateHandler.java | 58 +++++++++++++
.../handler/TaskOperateHandler.java | 58 +++++++++++++
4 files changed, 211 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
new file mode 100644
index 000000000..16c431eee
--- /dev/null
+++ b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
@@ -0,0 +1,87 @@
+/*
+ * 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.constvalue.ProcessTaskStepOperationType;
+import neatlogic.framework.process.dto.ProcessTaskStepVo;
+import neatlogic.framework.process.dto.ProcessTaskVo;
+import neatlogic.framework.process.operationauth.core.IOperationType;
+import neatlogic.framework.process.operationauth.core.ProcessAuthManager;
+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.service.ProcessTaskService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Service
+@AuthAction(action = PROCESS_BASE.class)
+@OperationType(type = OperationTypeEnum.SEARCH)
+public class ProcessTaskCanReactivateStepListApi extends PrivateApiComponentBase {
+
+ @Resource
+ private ProcessTaskMapper processTaskMapper;
+
+ @Resource
+ private ProcessTaskService processTaskService;
+ @Override
+ public String getName() {
+ return "当前用户可以重新激活的步骤列表";
+ }
+
+ @Input({
+ @Param(name = "processTaskId", type = ApiParamType.LONG, desc = "term.itsm.processtaskid", isRequired = true)
+ })
+ @Output({
+ @Param(name = "Return", explode = ProcessTaskStepVo[].class, desc = "common.tbodylist")
+ })
+ @Description(desc = "当前用户可以重新激活的步骤列表")
+ @Override
+ public Object myDoService(JSONObject paramObj) throws Exception {
+ Long processTaskId = paramObj.getLong("processTaskId");
+ ProcessTaskVo processTaskVo = processTaskService.checkProcessTaskParamsIsLegal(processTaskId);
+ List resultList = new ArrayList<>();
+ List processTaskStepList = processTaskMapper.getProcessTaskStepBaseInfoByProcessTaskId(processTaskVo.getId());
+ List processTaskStepIdList = processTaskStepList.stream().map(ProcessTaskStepVo::getId).collect(Collectors.toList());
+ Map> operateMap = new ProcessAuthManager.Builder().addProcessTaskStepId(processTaskStepIdList).addOperationType(ProcessTaskStepOperationType.STEP_REACTIVATE).build().getOperateMap();
+ for (ProcessTaskStepVo processTaskStepVo : processTaskStepList) {
+ Set operationTypeSet = operateMap.get(processTaskStepVo.getId());
+ if (CollectionUtils.isNotEmpty(operationTypeSet) && operationTypeSet.contains(ProcessTaskStepOperationType.STEP_REACTIVATE)) {
+ resultList.add(processTaskStepVo);
+ }
+ }
+ return resultList;
+ }
+
+ @Override
+ public String getToken() {
+ return "processtask/canreactivatestep/list";
+ }
+}
diff --git a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java
index 6cf7fd31a..42fdf5e7f 100644
--- a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java
+++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java
@@ -19,10 +19,14 @@ package neatlogic.module.process.api.processtask.manualintervention;
import com.alibaba.fastjson.JSONObject;
import neatlogic.framework.auth.core.AuthAction;
+import neatlogic.framework.auth.core.AuthActionChecker;
import neatlogic.framework.common.constvalue.ApiParamType;
import neatlogic.framework.process.auth.PROCESSTASK_MODIFY;
+import neatlogic.framework.process.auth.PROCESS_BASE;
+import neatlogic.framework.process.constvalue.ProcessTaskStepOperationType;
import neatlogic.framework.process.dto.ProcessTaskStepVo;
import neatlogic.framework.process.dto.ProcessTaskVo;
+import neatlogic.framework.process.operationauth.core.ProcessAuthManager;
import neatlogic.framework.process.stephandler.core.IProcessStepHandler;
import neatlogic.framework.process.stephandler.core.ProcessStepHandlerFactory;
import neatlogic.framework.restful.annotation.*;
@@ -35,7 +39,7 @@ import javax.annotation.Resource;
@Service
@OperationType(type = OperationTypeEnum.UPDATE)
-@AuthAction(action = PROCESSTASK_MODIFY.class)
+@AuthAction(action = PROCESS_BASE.class)
public class ActiveProcessTaskStepApi extends PrivateApiComponentBase {
@Resource
@@ -57,6 +61,9 @@ public class ActiveProcessTaskStepApi extends PrivateApiComponentBase {
Long processTaskId = paramObj.getLong("processTaskId");
Long processTaskStepId = paramObj.getLong("processTaskStepId");
ProcessTaskVo processTaskVo = processTaskService.checkProcessTaskParamsIsLegal(processTaskId, processTaskStepId);
+ if (!AuthActionChecker.check(PROCESSTASK_MODIFY.class)) {
+ new ProcessAuthManager.StepOperationChecker(processTaskStepId, ProcessTaskStepOperationType.STEP_REACTIVATE).build().checkAndNoPermissionThrowException();
+ }
ProcessTaskStepVo currentProcessTaskStep = processTaskVo.getCurrentProcessTaskStep();
IProcessStepHandler processStepHandler = ProcessStepHandlerFactory.getHandler(currentProcessTaskStep.getHandler());
processStepHandler.active(currentProcessTaskStep);
diff --git a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java
index 0f71ab2ba..429cd23bb 100644
--- a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java
+++ b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java
@@ -1039,6 +1039,64 @@ public class StepOperateHandler extends OperationAuthHandlerBase {
.put(operationType, new ProcessTaskStepNotMajorUserException());
return PredicateResult.DENY;
});
+
+ /**
+ * 步骤重新激活权限
+ */
+ operationBiPredicateMap.put(ProcessTaskStepOperationType.STEP_REACTIVATE,
+ (processTaskVo, processTaskStepVo, userUuid, operationTypePermissionDeniedExceptionMap, extraParam) -> {
+ Long id = processTaskStepVo.getId();
+ ProcessTaskStepOperationType operationType = ProcessTaskStepOperationType.STEP_REACTIVATE;
+ //1.判断工单是否被隐藏,如果isShow=0,则提示“工单已隐藏”;
+ if (processTaskVo.getIsShow() == 0) {
+ operationTypePermissionDeniedExceptionMap.computeIfAbsent(id, key -> new HashMap<>())
+ .put(operationType, new ProcessTaskHiddenException());
+ return PredicateResult.DENY;
+ }
+ //2.判断工单状态是否是“未提交”,如果是,则提示“工单未提交”;
+ //3.判断工单状态是否是“已完成”,如果是,则提示“工单已完成”;
+ //4.判断工单状态是否是“已取消”,如果是,则提示“工单已取消”;
+ //5.判断工单状态是否是“异常”,如果是,则提示“工单异常”;
+ //6.判断工单状态是否是“已挂起”,如果是,则提示“工单已挂起”;
+ //7.判断工单状态是否是“已评分”,如果是,则提示“工单已评分”;
+ ProcessTaskPermissionDeniedException exception = processTaskService.checkProcessTaskStatus(processTaskVo.getStatus(),
+ ProcessTaskStatus.DRAFT,
+ ProcessTaskStatus.SUCCEED,
+ ProcessTaskStatus.ABORTED,
+ ProcessTaskStatus.HANG,
+ ProcessTaskStatus.SCORED);
+ if (exception != null) {
+ operationTypePermissionDeniedExceptionMap.computeIfAbsent(id, key -> new HashMap<>())
+ .put(operationType, exception);
+ return PredicateResult.DENY;
+ }
+ //8.判断步骤是否未激活,如果isActive=0,则提示“步骤未激活”;
+ if (processTaskStepVo.getIsActive() == 0) {
+ operationTypePermissionDeniedExceptionMap.computeIfAbsent(id, key -> new HashMap<>())
+ .put(operationType, new ProcessTaskStepNotActiveException());
+ return PredicateResult.DENY;
+ }
+ if (Objects.equals(processTaskStepVo.getHandler(), ProcessStepHandlerType.CONDITION.getHandler())) {
+ if (Objects.equals(processTaskStepVo.getStatus(), ProcessTaskStepStatus.FAILED.getValue())) {
+ if (AuthActionChecker.checkByUserUuid(userUuid, PROCESSTASK_MODIFY.class.getSimpleName())) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ } else if (Objects.equals(processTaskStepVo.getHandler(), "createjob")) {
+ if (Objects.equals(processTaskStepVo.getStatus(), ProcessTaskStepStatus.RUNNING.getValue())) {
+ if (checkIsProcessTaskStepUser(processTaskStepVo, ProcessUserType.MAJOR.getValue(), userUuid)) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ } else if (Objects.equals(processTaskStepVo.getHandler(), "dataconversion")) {
+ if (Objects.equals(processTaskStepVo.getStatus(), ProcessTaskStepStatus.RUNNING.getValue())) {
+ if (checkIsProcessTaskStepUser(processTaskStepVo, ProcessUserType.MAJOR.getValue(), userUuid)) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ }
+ return PredicateResult.DENY;
+ });
}
@Override
diff --git a/src/main/java/neatlogic/module/process/operationauth/handler/TaskOperateHandler.java b/src/main/java/neatlogic/module/process/operationauth/handler/TaskOperateHandler.java
index 838830661..0f05bd46e 100644
--- a/src/main/java/neatlogic/module/process/operationauth/handler/TaskOperateHandler.java
+++ b/src/main/java/neatlogic/module/process/operationauth/handler/TaskOperateHandler.java
@@ -949,6 +949,64 @@ public class TaskOperateHandler extends OperationAuthHandlerBase {
}
return PredicateResult.DENY;
});
+
+ /**
+ * 重新激活权限
+ */
+ operationBiPredicateMap.put(ProcessTaskOperationType.PROCESSTASK_REACTIVATE,
+ (processTaskVo, processTaskStepVo, userUuid, operationTypePermissionDeniedExceptionMap, extraParam) -> {
+ Long id = processTaskVo.getId();
+ IOperationType operationType = ProcessTaskOperationType.PROCESSTASK_REACTIVATE;
+ //1.判断工单是否被隐藏,如果isShow=0,则提示“工单已隐藏”;
+ if (processTaskVo.getIsShow() == 0) {
+ operationTypePermissionDeniedExceptionMap.computeIfAbsent(id, key -> new HashMap<>())
+ .put(operationType, new ProcessTaskHiddenException());
+ return PredicateResult.DENY;
+ }
+ //2.判断工单状态是否是“未提交”,如果是,则提示“工单未提交”;
+ //3.判断工单状态是否是“已完成”,如果是,则提示“工单已完成”;
+ //4.判断工单状态是否是“已取消”,如果是,则提示“工单已取消”;
+ //5.判断工单状态是否是“异常”,如果是,则提示“工单异常”;
+ //6.判断工单状态是否是“已挂起”,如果是,则提示“工单已挂起”;
+ //7.判断工单状态是否是“已评分”,如果是,则提示“工单已评分”;
+ ProcessTaskPermissionDeniedException exception = processTaskService.checkProcessTaskStatus(processTaskVo.getStatus(),
+ ProcessTaskStatus.DRAFT,
+ ProcessTaskStatus.SUCCEED,
+ ProcessTaskStatus.ABORTED,
+ ProcessTaskStatus.HANG,
+ ProcessTaskStatus.SCORED);
+ if (exception != null) {
+ operationTypePermissionDeniedExceptionMap.computeIfAbsent(id, key -> new HashMap<>())
+ .put(operationType, exception);
+ return PredicateResult.DENY;
+ }
+ for (ProcessTaskStepVo processTaskStep : processTaskVo.getStepList()) {
+ // 步骤状态为已激活的才能转交,否则跳过;
+ if (!Objects.equals(processTaskStep.getIsActive(), 1)) {
+ continue;
+ }
+ if (Objects.equals(processTaskStep.getHandler(), ProcessStepHandlerType.CONDITION.getHandler())) {
+ if (Objects.equals(processTaskStep.getStatus(), ProcessTaskStepStatus.FAILED.getValue())) {
+ if (AuthActionChecker.checkByUserUuid(userUuid, PROCESSTASK_MODIFY.class.getSimpleName())) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ } else if (Objects.equals(processTaskStep.getHandler(), "createjob")) {
+ if (Objects.equals(processTaskStep.getStatus(), ProcessTaskStepStatus.RUNNING.getValue())) {
+ if (checkIsProcessTaskStepUser(processTaskStep, ProcessUserType.MAJOR.getValue(), userUuid)) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ } else if (Objects.equals(processTaskStep.getHandler(), "dataconversion")) {
+ if (Objects.equals(processTaskStep.getStatus(), ProcessTaskStepStatus.RUNNING.getValue())) {
+ if (checkIsProcessTaskStepUser(processTaskStep, ProcessUserType.MAJOR.getValue(), userUuid)) {
+ return PredicateResult.ACCEPT;
+ }
+ }
+ }
+ }
+ return PredicateResult.DENY;
+ });
}
@Override
--
Gitee
From fdabcf4f0afbdedbc4a3fda3eec14ec2c321c495 Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Thu, 5 Dec 2024 17:26:16 +0800
Subject: [PATCH 2/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF-I?=
=?UTF-8?q?T=E6=9C=8D=E5=8A=A1-=E6=9D=A1=E4=BB=B6=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E3=80=81=E8=87=AA=E5=8A=A8=E5=8C=96=E8=8A=82=E7=82=B9=E3=80=81?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2=E8=8A=82=E7=82=B9=E5=BC=82?=
=?UTF-8?q?=E5=B8=B8=E6=97=B6=E5=A2=9E=E5=8A=A0=E9=87=8D=E6=96=B0=E6=BF=80?=
=?UTF-8?q?=E6=B4=BB=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1305116722823168]后端-IT服务-条件节点、自动化节点、数据转换节点异常时增加重新激活功能 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1305116722823168
---
.../api/processtask/ProcessTaskCanReactivateStepListApi.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
index 16c431eee..8484f2ad8 100644
--- a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
+++ b/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskCanReactivateStepListApi.java
@@ -53,7 +53,7 @@ public class ProcessTaskCanReactivateStepListApi extends PrivateApiComponentBase
private ProcessTaskService processTaskService;
@Override
public String getName() {
- return "当前用户可以重新激活的步骤列表";
+ return "nmpap.processtaskcanreactivatesteplistapi.getname";
}
@Input({
@@ -62,7 +62,7 @@ public class ProcessTaskCanReactivateStepListApi extends PrivateApiComponentBase
@Output({
@Param(name = "Return", explode = ProcessTaskStepVo[].class, desc = "common.tbodylist")
})
- @Description(desc = "当前用户可以重新激活的步骤列表")
+ @Description(desc = "nmpap.processtaskcanreactivatesteplistapi.getname")
@Override
public Object myDoService(JSONObject paramObj) throws Exception {
Long processTaskId = paramObj.getLong("processTaskId");
--
Gitee