From 4abd0682a91abb06781efbdc931b09b9a07dab96 Mon Sep 17 00:00:00 2001 From: tiezx Date: Sat, 10 May 2025 20:48:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=96=B0=E5=BB=BA=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=8A=A0=E5=85=A5busynesskey=3D=E6=89=B9=E6=AC=A1---?= =?UTF-8?q?=E8=A7=84=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新建流程加入busynesskey=批次---规格 查询流程时用busynesskey 办公管理/全部流程修改完毕 --- .../common/constant/ProcessConstants.java | 14 ++ .../ferrum/flowable/utils/ProcessUtils.java | 26 ++- .../ferrum/workflow/domain/vo/WfTaskVo.java | 1 - .../workflow/service/IWfProcessService.java | 1 - .../service/impl/WfProcessServiceImpl.java | 150 +++++++++++------- 5 files changed, 128 insertions(+), 64 deletions(-) diff --git a/quotation-flowable/src/main/java/net/ferrum/flowable/common/constant/ProcessConstants.java b/quotation-flowable/src/main/java/net/ferrum/flowable/common/constant/ProcessConstants.java index 2d4892c..a5c9b46 100644 --- a/quotation-flowable/src/main/java/net/ferrum/flowable/common/constant/ProcessConstants.java +++ b/quotation-flowable/src/main/java/net/ferrum/flowable/common/constant/ProcessConstants.java @@ -78,5 +78,19 @@ public class ProcessConstants { */ public static final String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + /** + * 自定义属性 批次 + */ + public static final String PROCESS_BATCH = "lbl_Batch"; + + /** + * 自定义属性 规格名称 + */ + public static final String PROCESS_SPEC_NAME = "lbl_name"; + + /** + * 自定义属性 生成Busynesskey时,需要将批次与格名称连接起来,这外作为连接字符 + */ + public static final String PROCESS_BUSYNESSKEY_ConnString = "---"; } diff --git a/quotation-flowable/src/main/java/net/ferrum/flowable/utils/ProcessUtils.java b/quotation-flowable/src/main/java/net/ferrum/flowable/utils/ProcessUtils.java index 37d4fe8..a81c58e 100644 --- a/quotation-flowable/src/main/java/net/ferrum/flowable/utils/ProcessUtils.java +++ b/quotation-flowable/src/main/java/net/ferrum/flowable/utils/ProcessUtils.java @@ -99,6 +99,8 @@ public class ProcessUtils { */ public static void buildHistoricProcessInstanceSearch(HistoricProcessInstanceQuery query, ProcessQuery process) { Map params = process.getParams(); + + /* // 流程标识 if (StringUtils.isNotBlank(process.getProcessKey())) { query.processDefinitionKey(process.getProcessKey()); @@ -107,7 +109,26 @@ public class ProcessUtils { if (StringUtils.isNotBlank(process.getProcessName())) { query.processDefinitionName(process.getProcessName()); } - // 流程名称 + + */ + String sKey = null; + //批次 + if (StringUtils.isNotBlank(process.getSpecBatch())) { + sKey = "%" + process.getSpecBatch(); + } + //规格名称 + if (StringUtils.isNotBlank(process.getSpecName())) { + if(sKey == null){ + sKey = "%" + process.getSpecName() + "%"; + }else{ + sKey += "%" + process.getSpecName() + "%"; + } + } + if(sKey != null) { + query.processInstanceBusinessKeyLike(sKey); + } + + // 流程类别 if (StringUtils.isNotBlank(process.getCategory())) { query.processDefinitionCategory(process.getCategory()); } @@ -119,8 +140,7 @@ public class ProcessUtils { public static void buildHistoricVariableInstanceSearch(HistoricVariableInstanceQuery query, ProcessQuery process) { - Map params = process.getParams(); - // 规格批次 + // 规格批次 if (StringUtils.isNotBlank(process.getSpecBatch())) { query.variableValueLike("lbl_Batch","%" + process.getSpecBatch() + "%"); } diff --git a/quotation-system/src/main/java/net/ferrum/workflow/domain/vo/WfTaskVo.java b/quotation-system/src/main/java/net/ferrum/workflow/domain/vo/WfTaskVo.java index 9b85e52..6608028 100644 --- a/quotation-system/src/main/java/net/ferrum/workflow/domain/vo/WfTaskVo.java +++ b/quotation-system/src/main/java/net/ferrum/workflow/domain/vo/WfTaskVo.java @@ -138,5 +138,4 @@ public class WfTaskVo implements Serializable { * 规格名称 */ private String specName; - } diff --git a/quotation-system/src/main/java/net/ferrum/workflow/service/IWfProcessService.java b/quotation-system/src/main/java/net/ferrum/workflow/service/IWfProcessService.java index 8a45801..7c4b9f9 100644 --- a/quotation-system/src/main/java/net/ferrum/workflow/service/IWfProcessService.java +++ b/quotation-system/src/main/java/net/ferrum/workflow/service/IWfProcessService.java @@ -37,7 +37,6 @@ public interface IWfProcessService { */ TableDataInfo selectPageAllProcessList(ProcessQuery processQuery, PageQuery pageQuery); TableDataInfo selectPageAllProcessList1(ProcessQuery processQuery, PageQuery pageQuery); - /** * 查询我的流程列表 * @param pageQuery 分页参数 diff --git a/quotation-system/src/main/java/net/ferrum/workflow/service/impl/WfProcessServiceImpl.java b/quotation-system/src/main/java/net/ferrum/workflow/service/impl/WfProcessServiceImpl.java index 97f284e..e7e9c3a 100644 --- a/quotation-system/src/main/java/net/ferrum/workflow/service/impl/WfProcessServiceImpl.java +++ b/quotation-system/src/main/java/net/ferrum/workflow/service/impl/WfProcessServiceImpl.java @@ -171,7 +171,21 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce List taskVoList = new ArrayList<>(); for (HistoricProcessInstance hisIns : historicProcessInstances) { WfTaskVo taskVo = new WfTaskVo(); + + // 获取流程 Variables , 为了方便查询,将其放入 Map 中 + List historicVariableInstances = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(hisIns.getId()) + .list(); + Map variablesMap = new HashMap<>(); + for (HistoricVariableInstance hvi : historicVariableInstances) { + variablesMap.put(hvi.getVariableName(), hvi.getValue()); + } + // 获取流程状态 + Object var1Value = variablesMap.get(ProcessConstants.PROCESS_STATUS_KEY); + String processStatus = Convert.toStr(var1Value); + + /* HistoricVariableInstance processStatusVariable = historyService.createHistoricVariableInstanceQuery() .processInstanceId(hisIns.getId()) .variableName(ProcessConstants.PROCESS_STATUS_KEY) @@ -180,6 +194,8 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce if (ObjectUtil.isNotNull(processStatusVariable)) { processStatus = Convert.toStr(processStatusVariable.getValue()); } + */ + // 兼容旧流程 if (processStatus == null) { processStatus = ObjectUtil.isNull(hisIns.getEndTime()) ? ProcessStatus.RUNNING.getStatus() : ProcessStatus.COMPLETED.getStatus(); @@ -189,28 +205,13 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce taskVo.setFinishTime(hisIns.getEndTime()); taskVo.setProcInsId(hisIns.getId()); - //add for test --tzx + Object var2Value = variablesMap.get(ProcessConstants.PROCESS_BATCH ); //批次 + String specBatch = Convert.toStr(var2Value); + taskVo.setSpecBatch(specBatch); - HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery(); - historicTaskInstanceQuery.taskVariableNotExists("lbl_Batch"); - historicTaskInstanceQuery.processVariableValueEquals("lbl_Batch","333"); - - List historicProcessInstances1 = - //HistoricVariableInstance processStatusVariable1 = - - historyService.createHistoricVariableInstanceQuery() - //.processInstanceId(hisIns.getId()) - .variableValueLike("lbl_Batch","%") - .list(); - - //String sTemp = Convert.toStr(processStatusVariable1.getValue()); - - - String spec[] = new String[2]; - getHistSpecInfo(hisIns.getId(),spec); - taskVo.setSpecBatch(spec[0]); - taskVo.setSpecName(spec[1]); - //add end for test --tzx + Object var3Value = variablesMap.get(ProcessConstants.PROCESS_SPEC_NAME); // 规格名称 + String specName = Convert.toStr(var3Value); + taskVo.setSpecName(specName); // 计算耗时 if (Objects.nonNull(hisIns.getEndTime())) { @@ -733,7 +734,12 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce try { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId(procDefId).singleResult(); - startProcess(processDefinition, variables); + + // 启动流程实例并设置流程实例的 Business_key,后续就可以用 Business_key 来检索所需要的流程实例了。 + String procBusynessKey = getBusynessKey(variables); + startProcess(processDefinition, variables,procBusynessKey); + + } catch (Exception e) { e.printStackTrace(); throw new ServiceException("流程启动错误"); @@ -751,13 +757,29 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce try { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionKey(procDefKey).latestVersion().singleResult(); - startProcess(processDefinition, variables); + + // 启动流程实例并设置流程实例的名称 + String procBusynessKey = getBusynessKey(variables); + + startProcess(processDefinition, variables,procBusynessKey); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("流程启动错误"); } } + /** + * 从流程变量生成 BusynessKey + * @param variables 流程的变量 + */ + + String getBusynessKey(Map variables){ + String batch = Convert.toStr(variables.get(ProcessConstants.PROCESS_BATCH)); + String name = Convert.toStr(variables.get(ProcessConstants.PROCESS_SPEC_NAME)); + String procBusynessKey = batch + ProcessConstants.PROCESS_BUSYNESSKEY_ConnString + name; + + return procBusynessKey; + } @Override @Transactional(rollbackFor = Exception.class) public void deleteProcessByIds(String[] instanceIds) { @@ -827,7 +849,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce /** * 启动流程实例 */ - private void startProcess(ProcessDefinition procDef, Map variables) { + private void startProcess(ProcessDefinition procDef, Map variables,String procName) { if (ObjectUtil.isNotNull(procDef) && procDef.isSuspended()) { throw new ServiceException("流程已被挂起,请先激活流程"); } @@ -838,7 +860,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce // 设置流程状态为进行中 variables.put(ProcessConstants.PROCESS_STATUS_KEY, ProcessStatus.RUNNING.getStatus()); // 发起流程实例 - ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(), variables); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(),procName, variables); // 第一个用户任务为发起人,则自动完成任务 wfTaskService.startFirstTask(processInstance, variables); } @@ -1157,38 +1179,47 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce Page page = new Page<>(); HistoricVariableInstanceQuery historicVariableInstanceQuery = historyService.createHistoricVariableInstanceQuery() - .orderByVariableName() + .orderByProcessInstanceId() .desc(); // 构建搜索条件 + //processQuery.setSpecBatch("4"); + ProcessUtils.buildProcessSearch(historicVariableInstanceQuery, processQuery); int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1); List historicVariableInstance = historicVariableInstanceQuery .listPage(offset, pageQuery.getPageSize()); - page.setTotal(historicVariableInstance.stream().count()); - List taskVoList = new ArrayList<>(); + HashSet historicProcessInstances = new HashSet(); + for (HistoricVariableInstance hisVarIns : historicVariableInstance) { - WfTaskVo taskVo = new WfTaskVo(); - - // 获取流程实例 HistoricProcessInstance hisIns = historyService.createHistoricProcessInstanceQuery() .processInstanceId(hisVarIns.getProcessInstanceId()) .includeProcessVariables() .singleResult(); + historicProcessInstances.add(hisIns); + } + page.setTotal(historicProcessInstances.size()); + + List taskVoList = new ArrayList<>(); + for (HistoricProcessInstance hisIns : historicProcessInstances) { + WfTaskVo taskVo = new WfTaskVo(); + + // 获取流程实例 + + List historicVariableInstances = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(hisIns.getProcessDefinitionId()) + .list(); + + Map variablesMap = new HashMap<>(); + for (HistoricVariableInstance hvi : historicVariableInstances) { + variablesMap.put(hvi.getVariableName(), hvi.getValue()); + } // 获取流程状态 - HistoricVariableInstance processStatusVariable = historyService.createHistoricVariableInstanceQuery() - .processInstanceId(hisVarIns.getProcessInstanceId()) - .variableName(ProcessConstants.PROCESS_STATUS_KEY) - .singleResult(); - - hisVarIns.getProcessInstanceId(); - String processStatus = null; - if (ObjectUtil.isNotNull(processStatusVariable)) { - processStatus = Convert.toStr(processStatusVariable.getValue()); - } + Object var1Value = variablesMap.get(ProcessConstants.PROCESS_STATUS_KEY); + String processStatus = Convert.toStr(var1Value); // 兼容旧流程 if (processStatus == null) { processStatus = ObjectUtil.isNull(hisIns.getEndTime()) ? ProcessStatus.RUNNING.getStatus() : ProcessStatus.COMPLETED.getStatus(); @@ -1198,28 +1229,22 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce taskVo.setFinishTime(hisIns.getEndTime()); taskVo.setProcInsId(hisIns.getId()); - //add for test --tzx + Object var2Value = variablesMap.get("lbl_Batch"); + String specBatch = Convert.toStr(var2Value); + taskVo.setSpecBatch(specBatch); - HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery(); - historicTaskInstanceQuery.taskVariableNotExists("lbl_Batch"); - historicTaskInstanceQuery.processVariableValueEquals("lbl_Batch","333"); + Object var3Value = variablesMap.get("lbl_name"); + String specName = Convert.toStr(var3Value); + taskVo.setSpecBatch(specName); - List historicProcessInstances1 = - //HistoricVariableInstance processStatusVariable1 = + hisIns.getName(); + hisIns.getProcessDefinitionName(); - historyService.createHistoricVariableInstanceQuery() - //.processInstanceId(hisIns.getId()) - .variableValueLike("lbl_Batch","%") - .list(); +// String spec[] = new String[2]; +// getHistSpecInfo(hisIns.getId(),spec); +// taskVo.setSpecBatch(spec[0]); +// taskVo.setSpecName(spec[1]); - //String sTemp = Convert.toStr(processStatusVariable1.getValue()); - - - String spec[] = new String[2]; - getHistSpecInfo(hisIns.getId(),spec); - taskVo.setSpecBatch(spec[0]); - taskVo.setSpecName(spec[1]); - //add end for test --tzx // 计算耗时 if (Objects.nonNull(hisIns.getEndTime())) { @@ -1242,6 +1267,13 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce } taskVoList.add(taskVo); } + + Collections.sort(taskVoList, new Comparator() { + @Override + public int compare(WfTaskVo o1, WfTaskVo o2) { + return o2.getCreateTime().compareTo(o1.getCreateTime()); + } + }); page.setRecords(taskVoList); return TableDataInfo.build(page); }