From 5b77e227d42fde408fa13c037c9d5d0b3219b60b Mon Sep 17 00:00:00 2001 From: zhourui Date: Thu, 29 Sep 2022 15:57:03 +0800 Subject: [PATCH] fix/processTaskIdentity --- .../processing/processor/AeiObjects.java | 10 +- .../processor/manual/ManualProcessor.java | 99 ++++++++++++++----- 2 files changed, 81 insertions(+), 28 deletions(-) diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java index 7fe39390eb..594b5698eb 100644 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java @@ -321,10 +321,18 @@ public class AeiObjects extends GsonPropertyObject { } public List getJoinInquireTaskCompletedsWithActivityToken(String activityToken) throws Exception { + List routeNames = this.getRoutes().stream().map(Route::getName).collect(Collectors.toList()); return this.getTaskCompleteds().stream() .filter(o -> StringUtils.equalsIgnoreCase(activityToken, o.getActivityToken()) && BooleanUtils.isNotFalse(o.getJoinInquire())) - .collect(Collectors.toList()); + .filter(t -> routeNames.contains(t.getRouteName())).collect(Collectors.toList()); + } + + public List getJoinInquireTaskCompletedsRouteNameAvailableWithActivityToken(String activityToken) + throws Exception { + List routeNames = this.getRoutes().stream().map(Route::getName).collect(Collectors.toList()); + return this.getJoinInquireTaskCompletedsWithActivityToken(activityToken).stream() + .filter(t -> routeNames.contains(t.getRouteName())).collect(Collectors.toList()); } public List getReads() throws Exception { diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/ManualProcessor.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/ManualProcessor.java index d2907f6895..efab9faadb 100644 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/ManualProcessor.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/ManualProcessor.java @@ -197,7 +197,7 @@ public class ManualProcessor extends AbstractManualProcessor { } if (taskIdentities.isEmpty()) { taskIdentities = TranslateTaskIdentityTools.translate(aeiObjects, manual); - this.ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(aeiObjects, taskIdentities); + this.ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(aeiObjects, manual, taskIdentities); // 处理授权 this.writeToEmpowerMap(aeiObjects, taskIdentities); } @@ -238,18 +238,23 @@ public class ManualProcessor extends AbstractManualProcessor { } /** - * 如果没能计算到活动处理人,那么按照流程维护人,应用维护人,工作创建者,平台维护人顺序查找处理人 + * 如果没能计算到活动处理人,先判断人员活动是否有设置人员,如果有那么先返回工作创建者,再按照流程维护人,应用维护人,工作创建者,平台维护人顺序查找处理人 * * @param aeiObjects * @param manual * @param taskIdentities * @throws Exception */ - private void ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(AeiObjects aeiObjects, TaskIdentities taskIdentities) - throws Exception { + private void ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(AeiObjects aeiObjects, Manual manual, + TaskIdentities taskIdentities) throws Exception { if (taskIdentities.isEmpty()) { String identity = null; - if (StringUtils.isNotBlank(aeiObjects.getProcess().getMaintenanceIdentity())) { + if (!ifManualAssignTaskIdentity(manual)) { + identity = aeiObjects.business().organization().identity() + .get(aeiObjects.getWork().getCreatorIdentity()); + } + if (StringUtils.isEmpty(identity) + && StringUtils.isNotBlank(aeiObjects.getProcess().getMaintenanceIdentity())) { identity = aeiObjects.business().organization().identity() .get(aeiObjects.getProcess().getMaintenanceIdentity()); } @@ -275,6 +280,45 @@ public class ManualProcessor extends AbstractManualProcessor { } } + /** + * 判读是否在活动中制定了处理人,这里没有对脚本的注解和空行进行判断 + * + * @param manual + * @return + */ + private boolean ifManualAssignTaskIdentity(Manual manual) { + /* 指定了的身份 */ + if (ListTools.isNotEmpty(manual.getTaskIdentityList())) { + return true; + } + /* 选择了职务 */ + if (StringUtils.isNotBlank(manual.getTaskDuty())) { + return true; + } + /* 指定data数据路径值 */ + if (ListTools.isNotEmpty(manual.getTaskDataPathList())) { + return true; + } + /* 使用脚本计算 */ + if (StringUtils.isNotEmpty(manual.getTaskScriptText())) { + return true; + } else { + if (StringUtils.isNotEmpty(manual.getTaskScript())) { + String clean = manual.getTaskScript().replaceAll("/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/|//.*", ""); + clean = StringUtils.trimToEmpty(clean); + if (StringUtils.isNotBlank(clean)) { + return true; + } + } + } + /* 指定处理组织 */ + if (ListTools.isNotEmpty(manual.getTaskUnitList())) { + return true; + } + /* 指定处理群组 */ + return (ListTools.isNotEmpty(manual.getTaskGroupList())); + } + // 更新授权,通过surface创建且workThroughManual=false 代表是草稿,那么不需要授权. private void writeToEmpowerMap(AeiObjects aeiObjects, TaskIdentities taskIdentities) throws Exception { @@ -331,13 +375,14 @@ public class ManualProcessor extends AbstractManualProcessor { protected List executing(AeiObjects aeiObjects, Manual manual) throws Exception { List results = new ArrayList<>(); ManualTaskIdentityMatrix matrix = executingManualTaskIdentityMatrix(aeiObjects, manual); - List taskCompleteds = executingJoinInquireCheckRouteNameTaskCompleteds(aeiObjects); + List taskCompleteds = aeiObjects.getJoinInquireTaskCompletedsRouteNameAvailableWithActivityToken( + aeiObjects.getWork().getActivityToken()); executingCompletedIdentityInTaskCompleteds(aeiObjects, matrix, taskCompleteds); // 发送ProcessingSignal aeiObjects.getProcessingAttributes().push(Signal.manualExecute(aeiObjects.getWork().getActivityToken(), manual, Objects.toString(manual.getManualMode(), ""), matrix.flat())); - if (matrix.isEmpty()) { + if (matrix.isEmpty() && (!taskCompleteds.isEmpty())) { results.add(aeiObjects.getWork()); aeiObjects.getTasks().stream().filter( t -> StringUtils.equalsIgnoreCase(t.getActivityToken(), aeiObjects.getWork().getActivityToken())) @@ -364,22 +409,22 @@ public class ManualProcessor extends AbstractManualProcessor { return results; } - /** - * 获取当前参与流转的已办,同时过滤路由决策在路由中的已办. - * - * @param aeiObjects - * @return - * @throws Exception - */ - private List executingJoinInquireCheckRouteNameTaskCompleteds(AeiObjects aeiObjects) - throws Exception { - List taskCompleteds = aeiObjects - .getJoinInquireTaskCompletedsWithActivityToken(aeiObjects.getWork().getActivityToken()); - List routeNames = aeiObjects.getRoutes().stream().map(Route::getName).collect(Collectors.toList()); - taskCompleteds = taskCompleteds.stream().filter(t -> routeNames.contains(t.getRouteName())) - .collect(Collectors.toList()); - return taskCompleteds; - } +// /** +// * 获取当前参与流转的已办,同时过滤路由决策在路由中的已办. +// * +// * @param aeiObjects +// * @return +// * @throws Exception +// */ +// private List executingJoinInquireCheckRouteNameTaskCompleteds(AeiObjects aeiObjects) +// throws Exception { +// List taskCompleteds = aeiObjects +// .getJoinInquireTaskCompletedsWithActivityToken(aeiObjects.getWork().getActivityToken()); +// List routeNames = aeiObjects.getRoutes().stream().map(Route::getName).collect(Collectors.toList()); +// taskCompleteds = taskCompleteds.stream().filter(t -> routeNames.contains(t.getRouteName())) +// .collect(Collectors.toList()); +// return taskCompleteds; +// } @SuppressWarnings("unchecked") @Deprecated(forRemoval = true, since = "8.0") @@ -396,15 +441,15 @@ public class ManualProcessor extends AbstractManualProcessor { DEPRECATED_WORK_FIELD_MANUALTASKIDENTITYLIST)); identities = aeiObjects.business().organization().identity().list(identities); } - if (identities.isEmpty() && aeiObjects - .getJoinInquireTaskCompletedsWithActivityToken(aeiObjects.getWork().getActivityToken()).isEmpty()) { + if (identities.isEmpty() && aeiObjects.getJoinInquireTaskCompletedsRouteNameAvailableWithActivityToken( + aeiObjects.getWork().getActivityToken()).isEmpty()) { identities = calculateTaskIdentities(aeiObjects, manual); LOGGER.info("工作设置的处理人已经全部无效,且没有已办,重新计算当前环节所有处理人进行处理,标题:{}, id:{}, 设置的处理人:{}.", aeiObjects.getWork()::getTitle, aeiObjects.getWork()::getId, identities::toString); - matrix = manual.identitiesToManualTaskIdentityMatrix(identities); - // 重新绑定到对象上. } + matrix = manual.identitiesToManualTaskIdentityMatrix(identities); } + // 重新绑定到对象上. aeiObjects.getWork().setManualTaskIdentityMatrix(matrix); return matrix; } -- GitLab