From 9bb72289952cb57c44817ee48a3629d3cb374412 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 27 Nov 2024 10:54:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=90=E4=B8=AA=E5=B7=A5=E5=8D=95=E5=9B=9E=E9=80=80=E5=88=B0?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=AD=A5=E9=AA=A4=EF=BC=88=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E4=B8=AD=E6=88=96=E8=80=85?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=89=E5=89=8D=E4=B8=80=E4=B8=AA=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=E5=B9=B6=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1284609688436736]添加某个工单回退到当前步骤(当前状态处理中或者失败)前一个步骤并激活接口 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1284609688436736 --- .../process/ProcessNotifyPolicyParamList.java | 86 ----------- .../ActiveProcessTaskStepApi.java | 70 +++++++++ .../UpdateProcessTaskConfigApi.java | 143 ++++++++++++++++++ .../UpdateProcessTaskFormConfigApi.java | 108 +++++++++++++ .../UpdateProcessTaskStepStatusApi.java} | 95 ++++++------ .../mapper/processtask/ProcessTaskMapper.java | 6 + .../mapper/processtask/ProcessTaskMapper.xml | 21 +++ .../handler/StepOperateHandler.java | 55 ++++++- 8 files changed, 438 insertions(+), 146 deletions(-) delete mode 100644 src/main/java/neatlogic/module/process/api/process/ProcessNotifyPolicyParamList.java create mode 100644 src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java create mode 100644 src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskConfigApi.java create mode 100644 src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskFormConfigApi.java rename src/main/java/neatlogic/module/process/api/processtask/{ProcessTaskStepStatusChangeApi.java => manualintervention/UpdateProcessTaskStepStatusApi.java} (85%) diff --git a/src/main/java/neatlogic/module/process/api/process/ProcessNotifyPolicyParamList.java b/src/main/java/neatlogic/module/process/api/process/ProcessNotifyPolicyParamList.java deleted file mode 100644 index 772d27480..000000000 --- a/src/main/java/neatlogic/module/process/api/process/ProcessNotifyPolicyParamList.java +++ /dev/null @@ -1,86 +0,0 @@ -package neatlogic.module.process.api.process; - -import com.alibaba.fastjson.JSONObject; -import neatlogic.framework.auth.core.AuthAction; -import neatlogic.framework.common.constvalue.ApiParamType; -import neatlogic.framework.dto.ConditionParamVo; -import neatlogic.framework.notify.core.INotifyPolicyHandler; -import neatlogic.framework.notify.core.NotifyPolicyHandlerFactory; -import neatlogic.framework.notify.exception.NotifyPolicyHandlerNotFoundException; -import neatlogic.framework.process.auth.PROCESS; -import neatlogic.framework.restful.annotation.*; -import neatlogic.framework.restful.constvalue.OperationTypeEnum; -import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; - -@Service -@AuthAction(action = PROCESS.class) -@OperationType(type = OperationTypeEnum.SEARCH) -public class ProcessNotifyPolicyParamList extends PrivateApiComponentBase { - - - @Override - public String getToken() { - return "process/notify/policy/param/list"; - } - - @Override - public String getName() { - return "流程通知策略参数列表接口"; - } - - @Override - public String getConfig() { - return null; - } - - @Input({ - @Param(name = "notifyPolicyHandler", type = ApiParamType.STRING, isRequired = true, desc = "通知策略处理器"), -// @Param(name = "formUuid", type = ApiParamType.STRING, desc = "流程绑定表单的uuid") - }) - @Output({ - @Param(name = "tbodyList", explode = ConditionParamVo[].class, desc = "流程通知策略参数列表") - }) - @Description(desc = "流程通知策略参数列表接口") - @Override - public Object myDoService(JSONObject jsonObj) throws Exception { - String notifyPolicyHandler = jsonObj.getString("notifyPolicyHandler"); - INotifyPolicyHandler handler = NotifyPolicyHandlerFactory.getHandler(notifyPolicyHandler); - if (handler == null) { - throw new NotifyPolicyHandlerNotFoundException(notifyPolicyHandler); - } - List systemParamList = handler.getSystemParamList(); - systemParamList.sort((e1, e2) -> e1.getName().compareToIgnoreCase(e2.getName())); - List paramList = new ArrayList<>(systemParamList); - // 表单条件 -// String formUuid = jsonObj.getString("formUuid"); -// if (StringUtils.isNotBlank(formUuid)) { -// List formAttrList = formMapper.getFormAttributeList(new FormAttributeVo(formUuid)); -// for (FormAttributeVo formAttributeVo : formAttrList) { -// IFormAttributeHandler formHandler = FormAttributeHandlerFactory.getHandler(formAttributeVo.getHandler()); -// if (formHandler == null) { -// continue; -// } -// if (formHandler.isConditionable()) { -// ConditionParamVo conditionParamVo = new ConditionParamVo(); -// conditionParamVo.setName(formAttributeVo.getUuid()); -// conditionParamVo.setLabel(formAttributeVo.getLabel()); -// if (formHandler.getParamType() != null) { -// conditionParamVo.setParamType(formHandler.getParamType().getName()); -// conditionParamVo.setParamTypeName(formHandler.getParamType().getText()); -// } -// conditionParamVo.setIsEditable(0); -// conditionParamVo.setType("form"); -// paramList.add(conditionParamVo); -// } -// } -// } - JSONObject resultObj = new JSONObject(); - resultObj.put("tbodyList", paramList); - return resultObj; - } - -} 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 new file mode 100644 index 000000000..6cf7fd31a --- /dev/null +++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/ActiveProcessTaskStepApi.java @@ -0,0 +1,70 @@ +/* + * 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.manualintervention; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; +import neatlogic.framework.process.dto.ProcessTaskStepVo; +import neatlogic.framework.process.dto.ProcessTaskVo; +import neatlogic.framework.process.stephandler.core.IProcessStepHandler; +import neatlogic.framework.process.stephandler.core.ProcessStepHandlerFactory; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.process.service.ProcessTaskService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@OperationType(type = OperationTypeEnum.UPDATE) +@AuthAction(action = PROCESSTASK_MODIFY.class) +public class ActiveProcessTaskStepApi extends PrivateApiComponentBase { + + @Resource + private ProcessTaskService processTaskService; + + @Override + public String getName() { + return "nmpapm.activeprocesstaskstepapi.getname"; + } + + @Input({ + @Param(name = "processTaskId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.processtaskid"), + @Param(name = "processTaskStepId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.processtaskstepid"), + }) + @Output({}) + @Description(desc = "nmpapm.activeprocesstaskstepapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long processTaskId = paramObj.getLong("processTaskId"); + Long processTaskStepId = paramObj.getLong("processTaskStepId"); + ProcessTaskVo processTaskVo = processTaskService.checkProcessTaskParamsIsLegal(processTaskId, processTaskStepId); + ProcessTaskStepVo currentProcessTaskStep = processTaskVo.getCurrentProcessTaskStep(); + IProcessStepHandler processStepHandler = ProcessStepHandlerFactory.getHandler(currentProcessTaskStep.getHandler()); + processStepHandler.active(currentProcessTaskStep); + return null; + } + + @Override + public String getToken() { + return "manualintervention/processtask/step/active"; + } +} diff --git a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskConfigApi.java b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskConfigApi.java new file mode 100644 index 000000000..03d254e9c --- /dev/null +++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskConfigApi.java @@ -0,0 +1,143 @@ +/* + * 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.manualintervention; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; +import neatlogic.framework.process.dto.*; +import neatlogic.framework.process.exception.process.ProcessNotFoundException; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.process.dao.mapper.process.ProcessMapper; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; +import neatlogic.module.process.service.ProcessTaskService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@OperationType(type = OperationTypeEnum.UPDATE) +@AuthAction(action = PROCESSTASK_MODIFY.class) +public class UpdateProcessTaskConfigApi extends PrivateApiComponentBase { + + @Resource + private ProcessTaskService processTaskService; + + @Resource + private ProcessMapper processMapper; + + @Resource + private ProcessTaskMapper processTaskMapper; + + @Override + public String getName() { + return "nmpapm.updateprocesstaskconfigapi.getname"; + } + + @Input({ + @Param(name = "processTaskId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.processtaskid"), + @Param(name = "processUuid", type = ApiParamType.LONG, desc = "term.itsm.processuuid"), + }) + @Output({}) + @Description(desc = "nmpapm.updateprocesstaskconfigapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long processTaskId = paramObj.getLong("processTaskId"); + ProcessTaskVo processTaskVo = processTaskService.checkProcessTaskParamsIsLegal(processTaskId); + String processUuid = paramObj.getString("processUuid"); + if (StringUtils.isBlank(processUuid)) { + processUuid = processTaskVo.getProcessUuid(); + } + ProcessVo processVo = processMapper.getProcessByUuid(processUuid); + if (processVo == null) { + throw new ProcessNotFoundException(processUuid); + } + String configStr = processVo.getConfigStr(); + String configHash = DigestUtils.md5DigestAsHex(configStr.getBytes()); + ProcessTaskConfigVo processTaskConfigVo = new ProcessTaskConfigVo(); + processTaskConfigVo.setConfig(configStr); + processTaskConfigVo.setHash(configHash); + processTaskMapper.insertIgnoreProcessTaskConfig(processTaskConfigVo); + processTaskMapper.updateProcessTaskConfigHashById(processTaskId, configHash); + List processTaskStepList = processTaskMapper.getProcessTaskStepListByProcessTaskId(processTaskId); + Map processStepUuid2IdMap = processTaskStepList.stream().collect(Collectors.toMap(ProcessTaskStepVo::getProcessStepUuid, ProcessTaskStepVo::getId)); + JSONObject config = JSONObject.parseObject(configStr); + JSONObject process = config.getJSONObject("process"); + JSONArray stepList = process.getJSONArray("stepList"); + if (CollectionUtils.isNotEmpty(stepList)) { + for (int i = 0; i < stepList.size(); i++) { + JSONObject stepObj = stepList.getJSONObject(i); + if (MapUtils.isNotEmpty(stepObj)) { + String uuid = stepObj.getString("uuid"); + Long processTaskStepId = processStepUuid2IdMap.get(uuid); + if (processTaskStepId == null) { + continue; + } + JSONObject stepConfigObj = stepObj.getJSONObject("stepConfig"); + String stepConfig = stepConfigObj.toJSONString(); + String stepConfigHash = DigestUtils.md5DigestAsHex(stepConfig.getBytes()); + processTaskMapper.insertIgnoreProcessTaskStepConfig(new ProcessTaskStepConfigVo(stepConfigHash, stepConfig)); + processTaskMapper.updateProcessTaskStepConfigHashByProcessTaskIdAndProcessStepUuid(processTaskId, uuid, stepConfigHash); + processTaskMapper.deleteProcessTaskStepWorkerPolicyByProcessTaskStepId(processTaskStepId); + JSONObject workerPolicyConfig = stepConfigObj.getJSONObject("workerPolicyConfig"); + if (MapUtils.isNotEmpty(workerPolicyConfig)) { + JSONArray policyList = workerPolicyConfig.getJSONArray("policyList"); + if (CollectionUtils.isNotEmpty(policyList)) { + List workerPolicyList = new ArrayList<>(); + for (int k = 0; k < policyList.size(); k++) { + JSONObject policyObj = policyList.getJSONObject(k); + if (!"1".equals(policyObj.getString("isChecked"))) { + continue; + } + ProcessTaskStepWorkerPolicyVo processStepWorkerPolicyVo = new ProcessTaskStepWorkerPolicyVo(); + processStepWorkerPolicyVo.setProcessTaskId(processTaskId); + processStepWorkerPolicyVo.setProcessTaskStepId(processTaskStepId); + processStepWorkerPolicyVo.setProcessStepUuid(uuid); + processStepWorkerPolicyVo.setPolicy(policyObj.getString("type")); + processStepWorkerPolicyVo.setSort(k + 1); + processStepWorkerPolicyVo.setConfig(policyObj.getString("config")); + workerPolicyList.add(processStepWorkerPolicyVo); + } + if (CollectionUtils.isNotEmpty(workerPolicyList)) { + processTaskMapper.insertProcessTaskStepWorkerPolicyList(workerPolicyList); + } + } + } + } + } + } + return null; + } + + @Override + public String getToken() { + return "manualintervention/processtask/config/update"; + } +} diff --git a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskFormConfigApi.java b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskFormConfigApi.java new file mode 100644 index 000000000..51bbc9ed8 --- /dev/null +++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskFormConfigApi.java @@ -0,0 +1,108 @@ +/* + * 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.manualintervention; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.form.dao.mapper.FormMapper; +import neatlogic.framework.form.dto.FormVersionVo; +import neatlogic.framework.form.exception.FormActiveVersionNotFoundExcepiton; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; +import neatlogic.framework.process.dto.ProcessTaskFormVo; +import neatlogic.framework.process.dto.ProcessTaskVo; +import neatlogic.framework.process.dto.ProcessVo; +import neatlogic.framework.process.exception.process.ProcessNotFoundException; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.process.dao.mapper.process.ProcessMapper; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; +import neatlogic.module.process.service.ProcessTaskService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.DigestUtils; + +import javax.annotation.Resource; + +@Service +@OperationType(type = OperationTypeEnum.UPDATE) +@AuthAction(action = PROCESSTASK_MODIFY.class) +public class UpdateProcessTaskFormConfigApi extends PrivateApiComponentBase { + + @Resource + private ProcessTaskService processTaskService; + + @Resource + private ProcessMapper processMapper; + + @Resource + private FormMapper formMapper; + + @Resource + private ProcessTaskMapper processTaskMapper; + + @Override + public String getName() { + return "nmpapm.updateprocesstaskformconfigapi.getname"; + } + + @Input({ + @Param(name = "processTaskId", type = ApiParamType.LONG, isRequired = true, desc = "term.itsm.processtaskid"), + @Param(name = "formUuid", type = ApiParamType.LONG, desc = "term.framework.formuuid"), + }) + @Output({}) + @Description(desc = "nmpapm.updateprocesstaskformconfigapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long processTaskId = paramObj.getLong("processTaskId"); + ProcessTaskVo processTaskVo = processTaskService.checkProcessTaskParamsIsLegal(processTaskId); + String formUuid = paramObj.getString("formUuid"); + if (StringUtils.isBlank(formUuid)) { + ProcessVo processVo = processMapper.getProcessByUuid(processTaskVo.getProcessUuid()); + if (processVo == null) { + throw new ProcessNotFoundException(processTaskVo.getProcessUuid()); + } + formUuid = processVo.getFormUuid(); + } + if (StringUtils.isNotBlank(formUuid)) { + FormVersionVo formVersion = formMapper.getActionFormVersionByFormUuid(formUuid); + if (formVersion == null) { + throw new FormActiveVersionNotFoundExcepiton(formUuid); + } + String formContent = formVersion.getFormConfigStr(); + String formContentHash = DigestUtils.md5DigestAsHex(formContent.getBytes()); + ProcessTaskFormVo processTaskFormVo = new ProcessTaskFormVo(); + processTaskFormVo.setFormContent(formContent); + processTaskFormVo.setFormContentHash(formContentHash); + processTaskMapper.insertIgnoreProcessTaskFormContent(processTaskFormVo); + + processTaskMapper.deleteProcessTaskFormByProcessTaskId(processTaskId); + processTaskFormVo.setProcessTaskId(processTaskId); + processTaskFormVo.setFormUuid(formUuid); + processTaskFormVo.setFormName(formVersion.getFormName()); + processTaskMapper.insertProcessTaskForm(processTaskFormVo); + } + return null; + } + + @Override + public String getToken() { + return "manualintervention/processtask/form/config/update"; + } +} diff --git a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskStepStatusChangeApi.java b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java similarity index 85% rename from src/main/java/neatlogic/module/process/api/processtask/ProcessTaskStepStatusChangeApi.java rename to src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java index d27921e79..cdf33b6b8 100644 --- a/src/main/java/neatlogic/module/process/api/processtask/ProcessTaskStepStatusChangeApi.java +++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java @@ -1,37 +1,24 @@ -/*Copyright (C) 2024 深圳极向量科技有限公司 All Rights Reserved. +/* + * 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 . + */ -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 java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Consumer; - -import neatlogic.framework.process.constvalue.*; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +package neatlogic.module.process.api.processtask.manualintervention; import com.alibaba.fastjson.JSONObject; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; - import neatlogic.framework.auth.core.AuthAction; import neatlogic.framework.common.constvalue.ApiParamType; import neatlogic.framework.common.constvalue.GroupSearch; @@ -40,29 +27,33 @@ import neatlogic.framework.dto.UserVo; import neatlogic.framework.exception.type.ParamNotExistsException; import neatlogic.framework.exception.user.UserNotFoundException; import neatlogic.framework.process.auth.PROCESS_BASE; -import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; -import neatlogic.framework.process.dto.ProcessTaskStepRelVo; -import neatlogic.framework.process.dto.ProcessTaskStepUserVo; -import neatlogic.framework.process.dto.ProcessTaskStepVo; -import neatlogic.framework.process.dto.ProcessTaskStepWorkerVo; -import neatlogic.framework.process.dto.ProcessTaskVo; -import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepIllegalException; -import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepNameOrIdUnAssignException; -import neatlogic.framework.process.exception.processtask.ProcessTaskStepFoundMultipleException; -import neatlogic.framework.process.exception.processtask.ProcessTaskStepNotFoundException; -import neatlogic.framework.process.exception.processtask.ProcessTaskStepUserUnAssignException; +import neatlogic.framework.process.constvalue.*; +import neatlogic.framework.process.dto.*; +import neatlogic.framework.process.exception.processtask.*; import neatlogic.framework.restful.annotation.Description; import neatlogic.framework.restful.annotation.Input; import neatlogic.framework.restful.annotation.OperationType; import neatlogic.framework.restful.annotation.Param; import neatlogic.framework.restful.constvalue.OperationTypeEnum; import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; @Service @AuthAction(action = PROCESS_BASE.class) @Transactional @OperationType(type = OperationTypeEnum.OPERATE) -public class ProcessTaskStepStatusChangeApi extends PrivateApiComponentBase { +public class UpdateProcessTaskStepStatusApi extends PrivateApiComponentBase {// @Resource private ProcessTaskMapper processTaskMapper; @@ -72,12 +63,12 @@ public class ProcessTaskStepStatusChangeApi extends PrivateApiComponentBase { @Override public String getToken() { - return "processtask/step/status/change"; + return "manualintervention/processtask/step/status/update"; } @Override public String getName() { - return "手动更改工单步骤状态"; + return "nmpapm.updateprocesstaskstepstatusapi.getname"; } @Override @@ -86,15 +77,15 @@ public class ProcessTaskStepStatusChangeApi extends PrivateApiComponentBase { } @Input({ - @Param(name = "processTaskId", type = ApiParamType.LONG, desc = "工单Id"), - @Param(name = "processTaskStepName", type = ApiParamType.STRING, desc = "工单步骤名称"), - @Param(name = "processTaskNextStepName", type = ApiParamType.STRING, desc = "需要激活的下一步骤名称(更改步骤状态为succeed时需要填此参数)"), - @Param(name = "processTaskStepId", type = ApiParamType.LONG, desc = "工单步骤Id(待更改状态的步骤名称重复时需要填此参数。此参数存在时,无需填processTaskId与processTaskStepName)"), - @Param(name = "processTaskNextStepId", type = ApiParamType.LONG, desc = "下一步工单步骤Id(待激活的下一步骤名称重复时需要填此参数。此参数存在时,无需填processTaskNextStepName)"), - @Param(name = "status", type = ApiParamType.ENUM, rule = "pending,running,succeed,hang", isRequired = true, desc = "工单步骤状态"), - @Param(name = "userId", type = ApiParamType.STRING, desc = "处理人userId"), + @Param(name = "processTaskId", type = ApiParamType.LONG, desc = "term.itsm.processtaskid"), + @Param(name = "processTaskStepName", type = ApiParamType.STRING, desc = "term.itsm.processtaskstepname"), + @Param(name = "processTaskNextStepName", type = ApiParamType.STRING, desc = "term.itsm.processtasknextstepname", help = "更改步骤状态为succeed时需要填此参数"), + @Param(name = "processTaskStepId", type = ApiParamType.LONG, desc = "term.itsm.processtaskstepid", help = "待更改状态的步骤名称重复时需要填此参数。此参数存在时,无需填processTaskId与processTaskStepName"), + @Param(name = "processTaskNextStepId", type = ApiParamType.LONG, desc = "term.itsm.processtasknextstepid", help = "待激活的下一步骤名称重复时需要填此参数。此参数存在时,无需填processTaskNextStepName"), + @Param(name = "status", type = ApiParamType.ENUM, rule = "pending,running,succeed,hang", isRequired = true, desc = "common.status"), + @Param(name = "userId", type = ApiParamType.STRING, desc = "common.userid"), }) - @Description(desc = "手动更改工单步骤状态") + @Description(desc = "nmpapm.updateprocesstaskstepstatusapi.getname") @Override public Object myDoService(JSONObject jsonObj) throws Exception { Long processTaskId = jsonObj.getLong("processTaskId"); diff --git a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.java index e878b0650..47ad55a30 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.java +++ b/src/main/java/neatlogic/module/process/dao/mapper/processtask/ProcessTaskMapper.java @@ -528,6 +528,10 @@ public interface ProcessTaskMapper extends IProcessTaskCrossoverMapper { int updateProcessTaskIsDeletedById(@Param("id") Long id, @Param("isDeleted") Integer isDeleted); + int updateProcessTaskConfigHashById(@Param("id") Long id, @Param("configHash") String configHash); + + int updateProcessTaskStepConfigHashByProcessTaskIdAndProcessStepUuid(@Param("processTaskId") Long processTaskId, @Param("processStepUuid") String processStepUuid, @Param("configHash") String configHash); + int deleteProcessTaskFormAttributeByProcessTaskId(Long processTaskId); int deleteProcessTaskExtendFormAttributeByProcessTaskId(Long processTaskId); @@ -594,4 +598,6 @@ public interface ProcessTaskMapper extends IProcessTaskCrossoverMapper { int deleteProcessTaskTimeCostByProcessTaskId(Long processTaskId); int deleteProcessTaskFormContentByHash(String hash); + + int deleteProcessTaskStepWorkerPolicyByProcessTaskStepId(Long processTaskStepId); } 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 7c47db558..8b699077c 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 @@ -3893,6 +3893,21 @@ WHERE `id` = #{id} + + UPDATE `processtask` + SET + `config_hash` = #{configHash} + WHERE `id` = #{id} + + + + UPDATE `processtask_step` + SET + `config_hash` = #{configHash} + WHERE `processtask_id` = #{processTaskId} + AND `process_step_uuid` = #{processStepUuid} + + DELETE FROM `processtask_converge` @@ -4146,4 +4161,10 @@ FROM `processtask_form_content` WHERE `hash` = #{value} + + + DELETE + FROM `processtask_step_worker_policy` + WHERE `processtask_step_id` = #{value} + 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 b84f78599..c49aa11ea 100644 --- a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java +++ b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java @@ -13,20 +13,14 @@ import neatlogic.framework.process.dto.ProcessTaskStepUserVo; import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.ProcessTaskVo; import neatlogic.framework.process.exception.operationauth.*; -import neatlogic.framework.process.operationauth.core.IOperationType; -import neatlogic.framework.process.operationauth.core.OperationAuthHandlerBase; -import neatlogic.framework.process.operationauth.core.OperationAuthHandlerType; -import neatlogic.framework.process.operationauth.core.TernaryPredicate; +import neatlogic.framework.process.operationauth.core.*; import neatlogic.module.process.service.ProcessTaskService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; @Component public class StepOperateHandler extends OperationAuthHandlerBase { @@ -1055,4 +1049,49 @@ public class StepOperateHandler extends OperationAuthHandlerBase { return operationBiPredicateMap; } +// @Override +// public Boolean getOperateMap(ProcessTaskVo processTaskVo, String userUuid, IOperationType operationType, Map> operationTypePermissionDeniedExceptionMap, Map extraParamMap, Set processTaskStepIdSet) { +// if (CollectionUtils.isNotEmpty(processTaskStepIdSet)) { +// for (ProcessTaskStepVo processTaskStepVo : processTaskVo.getStepList()) { +// if (processTaskStepIdSet.contains(processTaskStepVo.getId())) { +// JSONObject extraParam = extraParamMap.computeIfAbsent(processTaskStepVo.getId(), key -> new JSONObject()); +// Boolean result = null; +// IOperationAuthHandler handler = OperationAuthHandlerFactory.getHandler(processTaskStepVo.getHandler()); +// if (handler != null) { +// result = handler.getOperateMap(processTaskVo, processTaskStepVo, userUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); +// } +// if(result == null || result) { +// result = operationAuthHandler.getOperateMap(processTaskVo, processTaskStepVo, userUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); +// if (result == null) { +// result = false; +// } +// } +// if (result) { +// resultMap.computeIfAbsent(processTaskStepVo.getId(), key -> new HashSet<>()).add(operationType); +// } else { +// /** 如果当前用户接受了其他用户的授权,查出其他用户拥有的权限,叠加当前用户权限里 **/ +// List fromUuidList = getFromUuidListByChannelUuid(processTaskVo.getChannelUuid(), userUuid); +// if (CollectionUtils.isNotEmpty(fromUuidList)) { +// result = null; +// for (String fromUuid : fromUuidList) { +// if (handler != null) { +// result = handler.getOperateMap(processTaskVo, processTaskStepVo, fromUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); +// } +// if(result == null || result) { +// result = operationAuthHandler.getOperateMap(processTaskVo, processTaskStepVo, fromUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); +// if (result == null) { +// result = false; +// } +// } +// if (result) { +// resultMap.computeIfAbsent(processTaskStepVo.getId(), key -> new HashSet<>()).add(operationType); +// break; +// } +// } +// } +// } +// } +// } +// } +// } } -- Gitee From b57d24e38eb08f1adb79c48ce597a769d2c6c61d Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 27 Nov 2024 10:58:42 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=90=E4=B8=AA=E5=B7=A5=E5=8D=95=E5=9B=9E=E9=80=80=E5=88=B0?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=AD=A5=E9=AA=A4=EF=BC=88=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E4=B8=AD=E6=88=96=E8=80=85?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=89=E5=89=8D=E4=B8=80=E4=B8=AA=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=E5=B9=B6=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1284609688436736]添加某个工单回退到当前步骤(当前状态处理中或者失败)前一个步骤并激活接口 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1284609688436736 --- .../UpdateProcessTaskStepStatusApi.java | 4 +- .../handler/StepOperateHandler.java | 45 ------------------- 2 files changed, 2 insertions(+), 47 deletions(-) diff --git a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java index cdf33b6b8..a0b4fc8c2 100644 --- a/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java +++ b/src/main/java/neatlogic/module/process/api/processtask/manualintervention/UpdateProcessTaskStepStatusApi.java @@ -26,7 +26,7 @@ import neatlogic.framework.dao.mapper.UserMapper; import neatlogic.framework.dto.UserVo; import neatlogic.framework.exception.type.ParamNotExistsException; import neatlogic.framework.exception.user.UserNotFoundException; -import neatlogic.framework.process.auth.PROCESS_BASE; +import neatlogic.framework.process.auth.PROCESSTASK_MODIFY; import neatlogic.framework.process.constvalue.*; import neatlogic.framework.process.dto.*; import neatlogic.framework.process.exception.processtask.*; @@ -50,7 +50,7 @@ import java.util.Objects; import java.util.function.Consumer; @Service -@AuthAction(action = PROCESS_BASE.class) +@AuthAction(action = PROCESSTASK_MODIFY.class) @Transactional @OperationType(type = OperationTypeEnum.OPERATE) public class UpdateProcessTaskStepStatusApi extends PrivateApiComponentBase {// 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 c49aa11ea..89e74b8a8 100644 --- a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java +++ b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java @@ -1049,49 +1049,4 @@ public class StepOperateHandler extends OperationAuthHandlerBase { return operationBiPredicateMap; } -// @Override -// public Boolean getOperateMap(ProcessTaskVo processTaskVo, String userUuid, IOperationType operationType, Map> operationTypePermissionDeniedExceptionMap, Map extraParamMap, Set processTaskStepIdSet) { -// if (CollectionUtils.isNotEmpty(processTaskStepIdSet)) { -// for (ProcessTaskStepVo processTaskStepVo : processTaskVo.getStepList()) { -// if (processTaskStepIdSet.contains(processTaskStepVo.getId())) { -// JSONObject extraParam = extraParamMap.computeIfAbsent(processTaskStepVo.getId(), key -> new JSONObject()); -// Boolean result = null; -// IOperationAuthHandler handler = OperationAuthHandlerFactory.getHandler(processTaskStepVo.getHandler()); -// if (handler != null) { -// result = handler.getOperateMap(processTaskVo, processTaskStepVo, userUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); -// } -// if(result == null || result) { -// result = operationAuthHandler.getOperateMap(processTaskVo, processTaskStepVo, userUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); -// if (result == null) { -// result = false; -// } -// } -// if (result) { -// resultMap.computeIfAbsent(processTaskStepVo.getId(), key -> new HashSet<>()).add(operationType); -// } else { -// /** 如果当前用户接受了其他用户的授权,查出其他用户拥有的权限,叠加当前用户权限里 **/ -// List fromUuidList = getFromUuidListByChannelUuid(processTaskVo.getChannelUuid(), userUuid); -// if (CollectionUtils.isNotEmpty(fromUuidList)) { -// result = null; -// for (String fromUuid : fromUuidList) { -// if (handler != null) { -// result = handler.getOperateMap(processTaskVo, processTaskStepVo, fromUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); -// } -// if(result == null || result) { -// result = operationAuthHandler.getOperateMap(processTaskVo, processTaskStepVo, fromUuid, operationType, operationTypePermissionDeniedExceptionMap, extraParam); -// if (result == null) { -// result = false; -// } -// } -// if (result) { -// resultMap.computeIfAbsent(processTaskStepVo.getId(), key -> new HashSet<>()).add(operationType); -// break; -// } -// } -// } -// } -// } -// } -// } -// } } -- Gitee From 56f09f70dec57b4586ee49f36da08b7b1097a1fa Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 27 Nov 2024 11:01:14 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=90=E4=B8=AA=E5=B7=A5=E5=8D=95=E5=9B=9E=E9=80=80=E5=88=B0?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=AD=A5=E9=AA=A4=EF=BC=88=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E4=B8=AD=E6=88=96=E8=80=85?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=89=E5=89=8D=E4=B8=80=E4=B8=AA=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=E5=B9=B6=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1284609688436736]添加某个工单回退到当前步骤(当前状态处理中或者失败)前一个步骤并激活接口 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1284609688436736 --- .../operationauth/handler/StepOperateHandler.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 89e74b8a8..b22fbb9e3 100644 --- a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java +++ b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java @@ -13,20 +13,26 @@ import neatlogic.framework.process.dto.ProcessTaskStepUserVo; import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.ProcessTaskVo; import neatlogic.framework.process.exception.operationauth.*; -import neatlogic.framework.process.operationauth.core.*; +import neatlogic.framework.process.operationauth.core.IOperationType; +import neatlogic.framework.process.operationauth.core.OperationAuthHandlerBase; +import neatlogic.framework.process.operationauth.core.OperationAuthHandlerType; +import neatlogic.framework.process.operationauth.core.TernaryPredicate; import neatlogic.module.process.service.ProcessTaskService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; @Component public class StepOperateHandler extends OperationAuthHandlerBase { private final Map>, JSONObject>> operationBiPredicateMap = new HashMap<>(); + TernaryPredicate>, JSONObject>> operationBiPredicateMap = new HashMap<>(); @Resource private UserMapper userMapper; -- Gitee From b149d4f612a14d768752572d03c230e370dcf13a Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 27 Nov 2024 11:02:59 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=90=E4=B8=AA=E5=B7=A5=E5=8D=95=E5=9B=9E=E9=80=80=E5=88=B0?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=AD=A5=E9=AA=A4=EF=BC=88=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86=E4=B8=AD=E6=88=96=E8=80=85?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=89=E5=89=8D=E4=B8=80=E4=B8=AA=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4=E5=B9=B6=E6=BF=80=E6=B4=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1284609688436736]添加某个工单回退到当前步骤(当前状态处理中或者失败)前一个步骤并激活接口 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1284609688436736 --- .../process/operationauth/handler/StepOperateHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b22fbb9e3..b84f78599 100644 --- a/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java +++ b/src/main/java/neatlogic/module/process/operationauth/handler/StepOperateHandler.java @@ -32,7 +32,7 @@ import java.util.Objects; public class StepOperateHandler extends OperationAuthHandlerBase { private final Map>, JSONObject>> operationBiPredicateMap = new HashMap<>(); + TernaryPredicate>, JSONObject>> operationBiPredicateMap = new HashMap<>(); @Resource private UserMapper userMapper; -- Gitee