diff --git a/src/main/java/neatlogic/module/process/api/process/ProcessConditionList.java b/src/main/java/neatlogic/module/process/api/process/ProcessConditionList.java index e7f4fc4d7a64de5d3136ee39f824dcb7f64c7257..aa49601b67c7f6ce144979e99b4341fa0a3f3841 100644 --- a/src/main/java/neatlogic/module/process/api/process/ProcessConditionList.java +++ b/src/main/java/neatlogic/module/process/api/process/ProcessConditionList.java @@ -24,7 +24,6 @@ import neatlogic.framework.process.constvalue.ConditionProcessTaskOptions; import neatlogic.framework.restful.annotation.*; import neatlogic.framework.restful.constvalue.OperationTypeEnum; import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; -import neatlogic.module.process.stephandler.component.ConditionProcessComponent; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -56,6 +55,7 @@ public class ProcessConditionList extends PrivateApiComponentBase { } @Input({@Param(name = "formUuid", type = ApiParamType.STRING, desc = "term.framework.formuuid"), + @Param(name = "tag", type = ApiParamType.STRING, desc = "common.tag"), @Param(name = "isAll", type = ApiParamType.INTEGER, rule = "0,1", desc = "term.process.isreturnallattr")}) @Output({@Param(explode = ConditionParamVo[].class, desc = "nmpap.processconditionlist.getname")}) @Description(desc = "nmpap.processconditionlist.getname") @@ -103,9 +103,11 @@ public class ProcessConditionList extends PrivateApiComponentBase { if (form == null) { throw new FormNotFoundException(formUuid); } - // TODO 需要确定条件节点表单扩展属性标签 + + String tag = jsonObj.getString("tag"); IFormCrossoverService formCrossoverService = CrossoverServiceFactory.getApi(IFormCrossoverService.class); - List formAttrList = formCrossoverService.getFormAttributeList(formUuid, form.getName(), ConditionProcessComponent.FORM_EXTEND_ATTRIBUTE_TAG); +// List formAttrList = formCrossoverService.getFormAttributeList(formUuid, form.getName(), ConditionProcessComponent.FORM_EXTEND_ATTRIBUTE_TAG); + List formAttrList = formCrossoverService.getFormAttributeListNew(formUuid, form.getName(), tag); for (FormAttributeVo formAttributeVo : formAttrList) { IFormAttributeHandler formHandler = FormAttributeHandlerFactory.getHandler(formAttributeVo.getHandler()); if (formHandler == null) { diff --git a/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java b/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java index 19debb1fde976fad8a97aa4b4a75ab07f761690b..f6d8f35b741795c22e88f3e495c4050760e42cab 100644 --- a/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java +++ b/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java @@ -275,6 +275,31 @@ public class ProcessTaskFormAttributeCondition extends ProcessTaskConditionBase return resultObj; } + @Override + public Object getConditionParamDataNew(ProcessTaskStepVo processTaskStepVo, String formTag) { + JSONObject resultObj = new JSONObject(); + List formAttributeList = processTaskService.getFormAttributeListByProcessTaskIdAngTagNew(processTaskStepVo.getProcessTaskId(), formTag); + if (CollectionUtils.isNotEmpty(formAttributeList)) { + Map formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(FormAttributeVo::getUuid, e -> e)); + List processTaskFormAttributeDataList = processTaskService.getProcessTaskFormAttributeDataListByProcessTaskIdAndTagNew(processTaskStepVo.getProcessTaskId(), formTag); + for (ProcessTaskFormAttributeDataVo processTaskFormAttributeDataVo : processTaskFormAttributeDataList) { + FormAttributeVo formAttributeVo = formAttributeMap.get(processTaskFormAttributeDataVo.getAttributeUuid()); + if (formAttributeVo == null) { + continue; + } + if (Objects.equals(processTaskFormAttributeDataVo.getHandler(), FormHandler.FORMRADIO.getHandler()) + || Objects.equals(processTaskFormAttributeDataVo.getHandler(), FormHandler.FORMCHECKBOX.getHandler()) + || Objects.equals(processTaskFormAttributeDataVo.getHandler(), FormHandler.FORMSELECT.getHandler())) { + Object value = FormUtil.getFormSelectAttributeValueByOriginalValue(processTaskFormAttributeDataVo.getDataObj()); + resultObj.put(processTaskFormAttributeDataVo.getAttributeUuid(), value); + } else { + resultObj.put(processTaskFormAttributeDataVo.getAttributeUuid(), processTaskFormAttributeDataVo.getDataObj()); + } + } + } + return resultObj; + } + @Override public Object getConditionParamDataForHumanization(ProcessTaskStepVo processTaskStepVo) { JSONObject resultObj = new JSONObject(); @@ -317,4 +342,47 @@ public class ProcessTaskFormAttributeCondition extends ProcessTaskConditionBase } return resultObj; } + + @Override + public Object getConditionParamDataForHumanizationNew(ProcessTaskStepVo processTaskStepVo, String formTag) { + JSONObject resultObj = new JSONObject(); + List formAttributeList = processTaskService.getFormAttributeListByProcessTaskIdAngTagNew(processTaskStepVo.getProcessTaskId(), formTag); + if (CollectionUtils.isNotEmpty(formAttributeList)) { + Map formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(FormAttributeVo::getUuid, e -> e)); + List processTaskFormAttributeDataList = processTaskService.getProcessTaskFormAttributeDataListByProcessTaskIdAndTagNew(processTaskStepVo.getProcessTaskId(), formTag); + for (ProcessTaskFormAttributeDataVo processTaskFormAttributeDataVo : processTaskFormAttributeDataList) { + FormAttributeVo formAttributeVo = formAttributeMap.get(processTaskFormAttributeDataVo.getAttributeUuid()); + if (formAttributeVo == null) { + continue; + } + if (Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMRADIO.getHandler()) + || Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMCHECKBOX.getHandler()) + || Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMSELECT.getHandler())) { + Object value = FormUtil.getFormSelectAttributeValueByOriginalValue(processTaskFormAttributeDataVo.getDataObj()); + //另存一份label为key的数据,给条件路由的自定义脚本消费 + resultObj.put(processTaskFormAttributeDataVo.getAttributeLabel(), value); + } else { + String data = processTaskFormAttributeDataVo.getData(); + if (StringUtils.isNotBlank(data)) { + JSONObject componentObj = new JSONObject(); + componentObj.put("handler", formAttributeVo.getHandler()); + componentObj.put("uuid", formAttributeVo.getUuid()); + componentObj.put("label", formAttributeVo.getLabel()); + componentObj.put("config", formAttributeVo.getConfig()); + componentObj.put("type", formAttributeVo.getType()); + List downwardFormAttributeList = FormUtil.getFormAttributeList(componentObj, null); + for (FormAttributeVo downwardFormAttribute : downwardFormAttributeList) { + if (data.contains(downwardFormAttribute.getUuid())) { + data = data.replace(downwardFormAttribute.getUuid(), downwardFormAttribute.getLabel()); + } + } + processTaskFormAttributeDataVo.setData(data); + } + //另存一份label为key的数据,给条件路由的自定义脚本消费 + resultObj.put(processTaskFormAttributeDataVo.getAttributeLabel(), processTaskFormAttributeDataVo.getDataObj()); + } + } + } + return resultObj; + } } diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskService.java b/src/main/java/neatlogic/module/process/service/ProcessTaskService.java index 6ffd95c1615959b298ca367b260a0fdd68920dec..5d314e8e0defd2935f7767cfeffbd72492bfdf16 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskService.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskService.java @@ -464,6 +464,14 @@ public interface ProcessTaskService { */ List getFormAttributeListByProcessTaskIdAngTag(Long processTaskId, String tag); + /** + * 根据工单id获取工单绑定的表单信息 + * @param processTaskId 工单ID + * @param tag 标签 + * @return + */ + List getFormAttributeListByProcessTaskIdAngTagNew(Long processTaskId, String tag); + /** * 根据工单id获取表单属性数据列表 * @param processTaskId 工单id @@ -479,6 +487,14 @@ public interface ProcessTaskService { */ List getProcessTaskFormAttributeDataListByProcessTaskIdAndTag(Long processTaskId, String tag); + /** + * 根据工单id获取表单属性数据列表 + * @param processTaskId 工单id + * @param tag 标签 + * @return + */ + List getProcessTaskFormAttributeDataListByProcessTaskIdAndTagNew(Long processTaskId, String tag); + /** * 根据工单id和表单属性uuid获取表单属性数据 * @param processTaskId 工单id diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java index 8e98cbb0fc0e00dff09d38627622a6c7c0c85cd2..28ac7bfce27869770d763c48451fc52630816c53 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java @@ -2160,15 +2160,6 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC } } } - List formCustomExtendAttributeList = new ArrayList<>(); - List allFormCustomExtendAttributeList = formVersionVo.getFormCustomExtendAttributeList(); - if (CollectionUtils.isNotEmpty(allFormCustomExtendAttributeList)) { - for (FormAttributeVo formAttributeVo : allFormCustomExtendAttributeList) { - if (Objects.equals(formAttributeVo.getTag(), tag)) { - formCustomExtendAttributeList.add(formAttributeVo); - } - } - } for (FormAttributeVo formAttributeVo : formAttributeList) { if (parentUuidList.contains(formAttributeVo.getUuid())) { continue; @@ -2176,10 +2167,53 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC resultList.add(formAttributeVo); } resultList.addAll(formExtendAttributeList); - resultList.addAll(formCustomExtendAttributeList); return resultList; } + @Override + public List getFormAttributeListByProcessTaskIdAngTagNew(Long processTaskId, String tag) { + List resultList = new ArrayList<>(); + ProcessTaskFormVo processTaskFormVo = processTaskMapper.getProcessTaskFormByProcessTaskId(processTaskId); + if (processTaskFormVo == null) { + // 工单没有表单直接返回 + return resultList; + } + String formContent = selectContentByHashMapper.getProcessTaskFromContentByHash(processTaskFormVo.getFormContentHash()); + JSONObject config = JSON.parseObject(formContent); + // 默认场景的表单 + FormVersionVo formVersionVo = new FormVersionVo(); + formVersionVo.setFormUuid(processTaskFormVo.getFormUuid()); + formVersionVo.setFormName(processTaskFormVo.getFormName()); + formVersionVo.setFormConfig(config); + String mainSceneUuid = config.getString("uuid"); + formVersionVo.setSceneUuid(mainSceneUuid); + if (StringUtils.isBlank(tag)) { + tag = "common"; + } + Set tagSet = new HashSet<>(); + { + List formCustomExtendAttributeList = formVersionVo.getFormCustomExtendAttributeList(); + if (CollectionUtils.isNotEmpty(formCustomExtendAttributeList)) { + for (FormAttributeVo formAttributeVo : formCustomExtendAttributeList) { + tagSet.add(formAttributeVo.getTag()); + } + } + } + if (tagSet.contains(tag)) { + List allFormCustomExtendAttributeList = formVersionVo.getFormCustomExtendAttributeList(); + if (CollectionUtils.isNotEmpty(allFormCustomExtendAttributeList)) { + for (FormAttributeVo formAttributeVo : allFormCustomExtendAttributeList) { + if (Objects.equals(formAttributeVo.getTag(), tag)) { + resultList.add(formAttributeVo); + } + } + } + return resultList; + } else { + return getFormAttributeListByProcessTaskIdAngTag(processTaskId, tag); + } + } + @Override public List getProcessTaskFormAttributeDataListByProcessTaskId(Long processTaskId) { return getProcessTaskFormAttributeDataListByProcessTaskIdAndTag(processTaskId, null); @@ -2201,6 +2235,54 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC return processTaskFormAttributeDataList; } + @Override + public List getProcessTaskFormAttributeDataListByProcessTaskIdAndTagNew(Long processTaskId, String tag) { + ProcessTaskFormVo processTaskFormVo = processTaskMapper.getProcessTaskFormByProcessTaskId(processTaskId); + if (processTaskFormVo == null) { + // 工单没有表单直接返回 + return new ArrayList<>(); + } + String formContent = selectContentByHashMapper.getProcessTaskFromContentByHash(processTaskFormVo.getFormContentHash()); + JSONObject config = JSON.parseObject(formContent); + // 默认场景的表单 + FormVersionVo formVersionVo = new FormVersionVo(); + formVersionVo.setFormUuid(processTaskFormVo.getFormUuid()); + formVersionVo.setFormName(processTaskFormVo.getFormName()); + formVersionVo.setFormConfig(config); + String mainSceneUuid = config.getString("uuid"); + formVersionVo.setSceneUuid(mainSceneUuid); + if (StringUtils.isBlank(tag)) { + tag = "common"; + } + Set tagSet = new HashSet<>(); + List formCustomExtendAttributeList = formVersionVo.getFormCustomExtendAttributeList(); + if (CollectionUtils.isNotEmpty(formCustomExtendAttributeList)) { + for (FormAttributeVo formAttributeVo : formCustomExtendAttributeList) { + tagSet.add(formAttributeVo.getTag()); + } + } + if (tagSet.contains(tag)) { + List attributeUuidList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(formCustomExtendAttributeList)) { + for (FormAttributeVo formAttributeVo : formCustomExtendAttributeList) { + if (Objects.equals(formAttributeVo.getTag(), tag)) { + attributeUuidList.add(formAttributeVo.getUuid()); + } + } + } + List processTaskFormAttributeDataList = new ArrayList<>(); + List extendAttributeDataList = processTaskMapper.getProcessTaskExtendFormAttributeDataListByProcessTaskId(processTaskId, tag); + for (AttributeDataVo attributeDataVo : extendAttributeDataList) { + if (attributeUuidList.contains(attributeDataVo.getAttributeUuid())) { + processTaskFormAttributeDataList.add(new ProcessTaskFormAttributeDataVo(processTaskId, attributeDataVo)); + } + } + return processTaskFormAttributeDataList; + } else { + return getProcessTaskFormAttributeDataListByProcessTaskIdAndTag(processTaskId, tag); + } + } + @Override public ProcessTaskFormAttributeDataVo getProcessTaskFormAttributeDataByProcessTaskIdAndAttributeUuid(Long processTaskId, String attributeUuid) { List formAttributeDataIdList = processTaskMapper.getProcessTaskFormAttributeDataIdListByProcessTaskId(processTaskId); diff --git a/src/main/java/neatlogic/module/process/stephandler/component/ConditionProcessComponent.java b/src/main/java/neatlogic/module/process/stephandler/component/ConditionProcessComponent.java index 1d2a036a8d3dee6277cf5628c0b192a526af3a7f..585505ab9d17cda81f85292db5228dccccd4f951 100644 --- a/src/main/java/neatlogic/module/process/stephandler/component/ConditionProcessComponent.java +++ b/src/main/java/neatlogic/module/process/stephandler/component/ConditionProcessComponent.java @@ -136,6 +136,7 @@ public class ConditionProcessComponent extends ProcessStepHandlerBase { ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(currentProcessTaskStepVo.getId()); String stepConfig = selectContentByHashMapper.getProcessTaskStepConfigByHash(processTaskStepVo.getConfigHash()); if (StringUtils.isNotBlank(stepConfig)) { + String formTag = (String) JSONPath.read(stepConfig, "formTag"); JSONArray moveonConfigList = (JSONArray) JSONPath.read(stepConfig, "moveonConfigList"); if (CollectionUtils.isNotEmpty(moveonConfigList)) { JSONArray ruleList = new JSONArray(); @@ -153,14 +154,14 @@ public class ConditionProcessComponent extends ProcessStepHandlerBase { } else if ("optional".equals(type)) {// 自定义 JSONArray conditionGroupList = moveonConfig.getJSONArray("conditionGroupList"); if (CollectionUtils.isNotEmpty(conditionGroupList)) { - JSONObject conditionParamData = ProcessTaskConditionFactory.getConditionParamData(ConditionProcessTaskOptions.values(), currentProcessTaskStepVo); + JSONObject conditionParamData = ProcessTaskConditionFactory.getConditionParamData(ConditionProcessTaskOptions.values(), currentProcessTaskStepVo, formTag); ConditionConfigVo conditionConfigVo = null; try { ConditionParamContext.init(conditionParamData).setTranslate(true); conditionConfigVo = new ConditionConfigVo(moveonConfig); String script = conditionConfigVo.buildScript(); /* 将参数名称、表达式、值的value翻译成对应text,目前条件步骤生成活动时用到**/ - translate(conditionConfigVo, currentProcessTaskStepVo.getProcessTaskId()); + translate(conditionConfigVo, currentProcessTaskStepVo.getProcessTaskId(), formTag); // ((false || true) || (true && false) || (true || false)) canRun = RunScriptUtil.runScript(script); ruleObj.put("result", canRun); @@ -168,8 +169,10 @@ public class ConditionProcessComponent extends ProcessStepHandlerBase { logger.error(e.getMessage(), e); } finally { ConditionParamContext.get().release(); - ruleObj.put("conditionGroupList", conditionConfigVo.getConditionGroupList()); - ruleObj.put("conditionGroupRelList", conditionConfigVo.getConditionGroupRelList()); + if (conditionConfigVo != null) { + ruleObj.put("conditionGroupList", conditionConfigVo.getConditionGroupList()); + ruleObj.put("conditionGroupRelList", conditionConfigVo.getConditionGroupRelList()); + } } } } else { @@ -208,10 +211,11 @@ public class ConditionProcessComponent extends ProcessStepHandlerBase { } } - private void translate(ConditionConfigVo conditionConfigVo, Long processTaskId) { + private void translate(ConditionConfigVo conditionConfigVo, Long processTaskId, String formTag) { List conditionGroupList = conditionConfigVo.getConditionGroupList(); if (CollectionUtils.isNotEmpty(conditionGroupList)) { - List formAttributeList = processTaskService.getFormAttributeListByProcessTaskIdAngTag(processTaskId, ConditionProcessComponent.FORM_EXTEND_ATTRIBUTE_TAG); +// List formAttributeList = processTaskService.getFormAttributeListByProcessTaskIdAngTag(processTaskId, ConditionProcessComponent.FORM_EXTEND_ATTRIBUTE_TAG); + List formAttributeList = processTaskService.getFormAttributeListByProcessTaskIdAngTagNew(processTaskId, formTag); Map formAttributeVoMap = formAttributeList.stream().collect(Collectors.toMap(FormAttributeVo::getUuid, e -> e)); for (ConditionGroupVo conditionGroup : conditionGroupList) { List conditionList = conditionGroup.getConditionList(); diff --git a/src/main/java/neatlogic/module/process/stephandler/utilhandler/ConditionProcessUtilHandler.java b/src/main/java/neatlogic/module/process/stephandler/utilhandler/ConditionProcessUtilHandler.java index 07fbbaae135358dc194618328f4172a253da82a4..d1d8c0e7b0e9b541d68e98bdd2b8ea24ccf79389 100755 --- a/src/main/java/neatlogic/module/process/stephandler/utilhandler/ConditionProcessUtilHandler.java +++ b/src/main/java/neatlogic/module/process/stephandler/utilhandler/ConditionProcessUtilHandler.java @@ -8,6 +8,7 @@ import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.processconfig.MoveonConfigVo; import neatlogic.framework.process.stephandler.core.ProcessStepInternalHandlerBase; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -72,6 +73,11 @@ public class ConditionProcessUtilHandler extends ProcessStepInternalHandlerBase } } resultObj.put("moveonConfigList", moveonConfigList); + String formTag = configObj.getString("formTag"); + if (StringUtils.isBlank(formTag)) { + formTag = StringUtils.EMPTY; + } + resultObj.put("formTag", formTag); return resultObj; } }