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 0000000000000000000000000000000000000000..8484f2ad831a84c24e270ce929c598ab6b600d91
--- /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 "nmpap.processtaskcanreactivatesteplistapi.getname";
+ }
+
+ @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 = "nmpap.processtaskcanreactivatesteplistapi.getname")
+ @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 6cf7fd31a43f17c698e7eb85a74ed88c8f6b4d47..42fdf5e7f099195eff159da62beffc5caef28d94 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 0f71ab2ba1fc9cdbd5ed1b691f09099f18ea51f0..429cd23bbc4c75d63c54a9ecc74168a338d9d595 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 8388306618feac3c443d96375480aa320b4812c0..0f05bd46e422e63a5c2553d010ecdbeee5fc5ad9 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