提交 4a3d1ab2 编写于 作者: O o2null

Merge branch 'feature/#327' into 'develop'

修正并行活动处理相同路径被选择的情况

See merge request o2oa/o2oa!1458
...@@ -2,10 +2,14 @@ package com.x.processplatform.service.processing.processor.manual; ...@@ -2,10 +2,14 @@ package com.x.processplatform.service.processing.processor.manual;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.script.Bindings; import javax.script.Bindings;
...@@ -13,6 +17,7 @@ import javax.script.ScriptContext; ...@@ -13,6 +17,7 @@ import javax.script.ScriptContext;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
...@@ -53,9 +58,9 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -53,9 +58,9 @@ public class ManualProcessor extends AbstractManualProcessor {
@Override @Override
protected Work arriving(AeiObjects aeiObjects, Manual manual) throws Exception { protected Work arriving(AeiObjects aeiObjects, Manual manual) throws Exception {
/* 根据manual计算出来的活动处理人 */ // 根据manual计算出来的活动处理人
List<String> identities = calculateTaskIdentities(aeiObjects, manual); List<String> identities = calculateTaskIdentities(aeiObjects, manual);
/* 启用同类工作相同活动节点合并,如果有合并的工作,那么直接返回这个工作. */ // 启用同类工作相同活动节点合并,如果有合并的工作,那么直接返回这个工作.
Work merge = this.arrivingMergeSameJob(aeiObjects, manual, identities); Work merge = this.arrivingMergeSameJob(aeiObjects, manual, identities);
if (null != merge) { if (null != merge) {
return merge; return merge;
...@@ -102,10 +107,10 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -102,10 +107,10 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
private void arrivingPassSame(AeiObjects aeiObjects, List<String> identities) throws Exception { private void arrivingPassSame(AeiObjects aeiObjects, List<String> identities) throws Exception {
/* 查找是否有passSameTarget设置 */ // 查找是否有passSameTarget设置
Route route = aeiObjects.getRoutes().stream().filter(o -> BooleanUtils.isTrue(o.getPassSameTarget())) Route route = aeiObjects.getRoutes().stream().filter(o -> BooleanUtils.isTrue(o.getPassSameTarget()))
.findFirst().orElse(null); .findFirst().orElse(null);
/* 如果有passSameTarget,有到达ArriveWorkLog,不是调度到这个节点的 */ // 如果有passSameTarget,有到达ArriveWorkLog,不是调度到这个节点的
if ((null != route) && ((null != aeiObjects.getArriveWorkLog(aeiObjects.getWork()))) if ((null != route) && ((null != aeiObjects.getArriveWorkLog(aeiObjects.getWork())))
&& (!aeiObjects.getProcessingAttributes().ifForceJoinAtArrive())) { && (!aeiObjects.getProcessingAttributes().ifForceJoinAtArrive())) {
WorkLog workLog = findPassSameTargetWorkLog(aeiObjects); WorkLog workLog = findPassSameTargetWorkLog(aeiObjects);
...@@ -140,10 +145,10 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -140,10 +145,10 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
/* 计算处理人 */ // 计算处理人
private List<String> calculateTaskIdentities(AeiObjects aeiObjects, Manual manual) throws Exception { private List<String> calculateTaskIdentities(AeiObjects aeiObjects, Manual manual) throws Exception {
TaskIdentities taskIdentities = new TaskIdentities(); TaskIdentities taskIdentities = new TaskIdentities();
/* 先计算强制处理人 */ // 先计算强制处理人
if (!aeiObjects.getWork().getProperties().getManualForceTaskIdentityList().isEmpty()) { if (!aeiObjects.getWork().getProperties().getManualForceTaskIdentityList().isEmpty()) {
List<String> identities = new ArrayList<>(); List<String> identities = new ArrayList<>();
identities.addAll(aeiObjects.getWork().getProperties().getManualForceTaskIdentityList()); identities.addAll(aeiObjects.getWork().getProperties().getManualForceTaskIdentityList());
...@@ -152,7 +157,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -152,7 +157,7 @@ public class ManualProcessor extends AbstractManualProcessor {
taskIdentities.addIdentities(identities); taskIdentities.addIdentities(identities);
} }
} }
/* 计算退回的结果 */ // 计算退回的结果
if (taskIdentities.isEmpty()) { if (taskIdentities.isEmpty()) {
Route route = aeiObjects.business().element().get(aeiObjects.getWork().getDestinationRoute(), Route.class); Route route = aeiObjects.business().element().get(aeiObjects.getWork().getDestinationRoute(), Route.class);
if ((null != route) && (StringUtils.equals(route.getType(), Route.TYPE_BACK))) { if ((null != route) && (StringUtils.equals(route.getType(), Route.TYPE_BACK))) {
...@@ -194,7 +199,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -194,7 +199,7 @@ public class ManualProcessor extends AbstractManualProcessor {
return taskIdentities.identities(); return taskIdentities.identities();
} }
/* 如果活动没有找到任何可用的处理人,那么强制设置处理人为文档创建者,或者配置的 maintenanceIdentity */ // 如果活动没有找到任何可用的处理人,那么强制设置处理人为文档创建者,或者配置的 maintenanceIdentity
private void ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(AeiObjects aeiObjects, Manual manual, private void ifTaskIdentitiesEmptyForceToCreatorOrMaintenance(AeiObjects aeiObjects, Manual manual,
TaskIdentities taskIdentities) throws Exception { TaskIdentities taskIdentities) throws Exception {
if (taskIdentities.isEmpty()) { if (taskIdentities.isEmpty()) {
...@@ -220,10 +225,10 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -220,10 +225,10 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
/* 更新授权,通过surface创建且workThroughManual=false 代表是草稿,那么不需要授权. */ // 更新授权,通过surface创建且workThroughManual=false 代表是草稿,那么不需要授权.
private void writeToEmpowerMap(AeiObjects aeiObjects, TaskIdentities taskIdentities) throws Exception { private void writeToEmpowerMap(AeiObjects aeiObjects, TaskIdentities taskIdentities) throws Exception {
/* 先清空EmpowerMap */ // 先清空EmpowerMap
aeiObjects.getWork().getProperties().setManualEmpowerMap(new LinkedHashMap<String, String>()); aeiObjects.getWork().getProperties().setManualEmpowerMap(new LinkedHashMap<String, String>());
if (!(StringUtils.equals(aeiObjects.getWork().getWorkCreateType(), Work.WORKCREATETYPE_SURFACE) if (!(StringUtils.equals(aeiObjects.getWork().getWorkCreateType(), Work.WORKCREATETYPE_SURFACE)
&& BooleanUtils.isFalse(aeiObjects.getWork().getWorkThroughManual()))) { && BooleanUtils.isFalse(aeiObjects.getWork().getWorkThroughManual()))) {
...@@ -284,7 +289,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -284,7 +289,7 @@ public class ManualProcessor extends AbstractManualProcessor {
logger.info("工作设置的处理人已经全部无效,重新计算当前环节所有处理人进行处理,标题:{}, id:{}, 设置的处理人:{}.", aeiObjects.getWork().getTitle(), logger.info("工作设置的处理人已经全部无效,重新计算当前环节所有处理人进行处理,标题:{}, id:{}, 设置的处理人:{}.", aeiObjects.getWork().getTitle(),
aeiObjects.getWork().getId(), identities); aeiObjects.getWork().getId(), identities);
/* 后面进行了identitis.remove()这里必须用一个新对象包装 */ // 后面进行了identitis.remove()这里必须用一个新对象包装
aeiObjects.getWork().setManualTaskIdentityList(new ArrayList<String>(identities)); aeiObjects.getWork().setManualTaskIdentityList(new ArrayList<String>(identities));
} }
...@@ -319,11 +324,11 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -319,11 +324,11 @@ public class ManualProcessor extends AbstractManualProcessor {
@Override @Override
protected List<Route> inquiring(AeiObjects aeiObjects, Manual manual) throws Exception { protected List<Route> inquiring(AeiObjects aeiObjects, Manual manual) throws Exception {
List<Route> results = new ArrayList<>(); List<Route> results = new ArrayList<>();
/* 仅有单条路由 */ // 仅有单条路由
if (aeiObjects.getRoutes().size() == 1) { if (aeiObjects.getRoutes().size() == 1) {
results.add(aeiObjects.getRoutes().get(0)); results.add(aeiObjects.getRoutes().get(0));
} else if (aeiObjects.getRoutes().size() > 1) { } else if (aeiObjects.getRoutes().size() > 1) {
/* 存在多条路由 */ // 存在多条路由
List<TaskCompleted> taskCompletedList = aeiObjects.getJoinInquireTaskCompleteds().stream() List<TaskCompleted> taskCompletedList = aeiObjects.getJoinInquireTaskCompleteds().stream()
.filter(o -> StringUtils.equals(o.getActivityToken(), aeiObjects.getWork().getActivityToken()) .filter(o -> StringUtils.equals(o.getActivityToken(), aeiObjects.getWork().getActivityToken())
&& aeiObjects.getWork().getManualTaskIdentityList().contains(o.getIdentity())) && aeiObjects.getWork().getManualTaskIdentityList().contains(o.getIdentity()))
...@@ -338,27 +343,25 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -338,27 +343,25 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
if (!results.isEmpty()) { if (!results.isEmpty()) {
/* 清理掉强制的指定的处理人 */ // 清理掉强制的指定的处理人
aeiObjects.getWork().getProperties().setManualForceTaskIdentityList(new ArrayList<String>()); aeiObjects.getWork().getProperties().setManualForceTaskIdentityList(new ArrayList<String>());
} }
return results; return results;
} }
/* 通过已办存根选择某条路由 */ // 通过已办存根选择某条路由
private String choiceRouteName(List<TaskCompleted> list, List<Route> routes) throws Exception { private String choiceRouteName(List<TaskCompleted> list, List<Route> routes) throws Exception {
String result = ""; String result = "";
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
ListTools.trim(list, false, false).stream().forEach(o -> { ListTools.trim(list, false, false).stream().forEach(o -> names.add(o.getRouteName()));
names.add(o.getRouteName()); // 进行优先路由的判断
});
/* 进行优先路由的判断 */
Route soleRoute = routes.stream().filter(o -> BooleanUtils.isTrue(o.getSole())).findFirst().orElse(null); Route soleRoute = routes.stream().filter(o -> BooleanUtils.isTrue(o.getSole())).findFirst().orElse(null);
if ((null != soleRoute) && names.contains(soleRoute.getName())) { if ((null != soleRoute) && names.contains(soleRoute.getName())) {
result = soleRoute.getName(); result = soleRoute.getName();
} else { } else {
/* 进行默认的策略,选择占比多的 */ // 进行默认的策略,选择占比多的
result = ListTools.maxCountElement(names); result = maxCountOrLatest(list);
} }
if (StringUtils.isEmpty(result)) { if (StringUtils.isEmpty(result)) {
throw new ExceptionChoiceRouteNameError( throw new ExceptionChoiceRouteNameError(
...@@ -367,6 +370,24 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -367,6 +370,24 @@ public class ManualProcessor extends AbstractManualProcessor {
return result; return result;
} }
private String maxCountOrLatest(List<TaskCompleted> list) {
Map<String, List<TaskCompleted>> map = list.stream()
.collect(Collectors.groupingBy(TaskCompleted::getRouteName));
Optional<Entry<String, List<TaskCompleted>>> optional = map.entrySet().stream().sorted((o1, o2) -> {
int c = o2.getValue().size() - o1.getValue().size();
if (c == 0) {
Date d1 = o1.getValue().stream().sorted(Comparator.comparing(TaskCompleted::getCreateTime).reversed())
.findFirst().get().getCreateTime();
Date d2 = o2.getValue().stream().sorted(Comparator.comparing(TaskCompleted::getCreateTime).reversed())
.findFirst().get().getCreateTime();
return ObjectUtils.compare(d2, d1);
} else {
return c;
}
}).findFirst();
return optional.isPresent() ? optional.get().getKey() : null;
}
private boolean single(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception { private boolean single(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception {
boolean passThrough = false; boolean passThrough = false;
Long count = aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> { Long count = aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> {
...@@ -378,7 +399,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -378,7 +399,7 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
}).count(); }).count();
if (count > 0) { if (count > 0) {
/* 已经确定要通过此节点,清除可能是多余的待办 */ // 已经确定要通过此节点,清除可能是多余的待办
aeiObjects.getTasks().stream().filter(o -> { aeiObjects.getTasks().stream().filter(o -> {
return StringUtils.equals(aeiObjects.getWork().getId(), o.getWork()); return StringUtils.equals(aeiObjects.getWork().getId(), o.getWork());
}).forEach(o -> { }).forEach(o -> {
...@@ -389,29 +410,25 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -389,29 +410,25 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
aeiObjects.deleteTask(o); aeiObjects.deleteTask(o);
}); });
/* 所有预计的处理人中已经有已办,这个环节已经产生了已办,可以离开换个环节。 */ // 所有预计的处理人中已经有已办,这个环节已经产生了已办,可以离开换个环节。
passThrough = true; passThrough = true;
} else { } else {
/* 取到期望的待办人员,由于要进行处理需要转换成可读写List */ // 取到期望的待办人员,由于要进行处理需要转换成可读写List
if (ListTools.isEmpty(identities)) { if (ListTools.isEmpty(identities)) {
throw new ExceptionExpectedEmpty(aeiObjects.getWork().getTitle(), aeiObjects.getWork().getId(), throw new ExceptionExpectedEmpty(aeiObjects.getWork().getTitle(), aeiObjects.getWork().getId(),
manual.getName(), manual.getId()); manual.getName(), manual.getId());
} }
/* 删除多余的待办 */ // 删除多余的待办
aeiObjects.getTasks().stream() aeiObjects.getTasks().stream()
.filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()) .filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken())
&& (!ListTools.contains(identities, o.getIdentity()))) && (!ListTools.contains(identities, o.getIdentity())))
.forEach(o -> { .forEach(aeiObjects::deleteTask);
aeiObjects.deleteTask(o); // 将待办已经产生的人从预期值中删除
});
/* 将待办已经产生的人从预期值中删除 */
aeiObjects.getTasks().stream() aeiObjects.getTasks().stream()
.filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()) .filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken())
&& (ListTools.contains(identities, o.getIdentity()))) && (ListTools.contains(identities, o.getIdentity())))
.forEach(o -> { .forEach(o -> identities.remove(o.getIdentity()));
identities.remove(o.getIdentity()); // 这里剩余的应该是没有生成待办的人员
});
/* 这里剩余的应该是没有生成待办的人员 */
if (!identities.isEmpty()) { if (!identities.isEmpty()) {
for (String identity : identities) { for (String identity : identities) {
aeiObjects.createTask(this.createTask(aeiObjects, manual, identity)); aeiObjects.createTask(this.createTask(aeiObjects, manual, identity));
...@@ -423,9 +440,9 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -423,9 +440,9 @@ public class ManualProcessor extends AbstractManualProcessor {
private boolean parallel(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception { private boolean parallel(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception {
boolean passThrough = false; boolean passThrough = false;
/* 取得本环节已经处理的已办 */ // 取得本环节已经处理的已办
List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities); List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities);
/* 存在优先路由,如果有人选择了优先路由那么直接流转. */ // 存在优先路由,如果有人选择了优先路由那么直接流转.
Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst() Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst()
.orElse(null); .orElse(null);
if (null != soleRoute) { if (null != soleRoute) {
...@@ -438,31 +455,25 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -438,31 +455,25 @@ public class ManualProcessor extends AbstractManualProcessor {
return true; return true;
} }
} }
/* 将已经处理的人从期望值中移除 */ // 将已经处理的人从期望值中移除
aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> { aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> {
return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()); return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken());
}).forEach(o -> { }).forEach(o -> identities.remove(o.getIdentity()));
identities.remove(o.getIdentity()); // 清空可能的多余的待办
});
/* 清空可能的多余的待办 */
aeiObjects.getTasks().stream().filter(o -> { aeiObjects.getTasks().stream().filter(o -> {
return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()) return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken())
&& (!ListTools.contains(identities, o.getIdentity())); && (!ListTools.contains(identities, o.getIdentity()));
}).forEach(o -> { }).forEach(aeiObjects::deleteTask);
aeiObjects.deleteTask(o);
});
if (identities.isEmpty()) { if (identities.isEmpty()) {
/* 所有人已经处理完成。 */ // 所有人已经处理完成。
passThrough = true; passThrough = true;
} else { } else {
passThrough = false; passThrough = false;
/* 先清空已经有待办的身份 */ // 先清空已经有待办的身份
aeiObjects.getTasks().stream().filter(o -> { aeiObjects.getTasks().stream()
return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()); .filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()))
}).forEach(o -> { .forEach(o -> identities.remove(o.getIdentity()));
identities.remove(o.getIdentity()); // 这里剩余的应该是没有生成待办的人员
});
/* 这里剩余的应该是没有生成待办的人员 */
if (!identities.isEmpty()) { if (!identities.isEmpty()) {
for (String identity : identities) { for (String identity : identities) {
aeiObjects.createTask(this.createTask(aeiObjects, manual, identity)); aeiObjects.createTask(this.createTask(aeiObjects, manual, identity));
...@@ -472,20 +483,18 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -472,20 +483,18 @@ public class ManualProcessor extends AbstractManualProcessor {
return passThrough; return passThrough;
} }
/** 并行环节下如果有优先路由,那么直接走优先路由,处理的时候需要晴空所有代办 */ // 并行环节下如果有优先路由,那么直接走优先路由,处理的时候需要晴空所有代办
private void parallelSoleTaskCompleted(AeiObjects aeiObjects) throws Exception { private void parallelSoleTaskCompleted(AeiObjects aeiObjects) throws Exception {
/* 清空可能的多余的待办 */ // 清空可能的多余的待办
aeiObjects.getTasks().stream().filter(o -> { aeiObjects.getTasks().stream().filter(o -> {
return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()); return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken());
}).forEach(o -> { }).forEach(aeiObjects::deleteTask);
aeiObjects.deleteTask(o);
});
} }
private boolean queue(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception { private boolean queue(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception {
boolean passThrough = false; boolean passThrough = false;
List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities); List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities);
/* 存在优先路由 */ // 存在优先路由
Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst() Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst()
.orElse(null); .orElse(null);
if (null != soleRoute) { if (null != soleRoute) {
...@@ -497,19 +506,19 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -497,19 +506,19 @@ public class ManualProcessor extends AbstractManualProcessor {
return true; return true;
} }
} }
/* 存在优先路由结束 */ // 存在优先路由结束
/* 将已经处理的人从期望值中移除 */ // 将已经处理的人从期望值中移除
for (TaskCompleted o : taskCompleteds) { for (TaskCompleted o : taskCompleteds) {
identities.remove(o.getIdentity()); identities.remove(o.getIdentity());
} }
if (identities.isEmpty()) { if (identities.isEmpty()) {
/* 所有人已经处理完成。 */ // 所有人已经处理完成。
passThrough = true; passThrough = true;
} else { } else {
passThrough = false; passThrough = false;
String identity = identities.get(0); String identity = identities.get(0);
/* 还有人没有处理,开始判断待办,取到本环节的所有待办,理论上只能有一条待办 */ // 还有人没有处理,开始判断待办,取到本环节的所有待办,理论上只能有一条待办
boolean find = false; boolean find = false;
for (Task t : aeiObjects.getTasks()) { for (Task t : aeiObjects.getTasks()) {
if (StringUtils.equals(aeiObjects.getWork().getActivityToken(), t.getActivityToken())) { if (StringUtils.equals(aeiObjects.getWork().getActivityToken(), t.getActivityToken())) {
...@@ -520,7 +529,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -520,7 +529,7 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
} }
/* 当前处理人没有待办 */ // 当前处理人没有待办
if (!find) { if (!find) {
aeiObjects.createTask(this.createTask(aeiObjects, manual, identity)); aeiObjects.createTask(this.createTask(aeiObjects, manual, identity));
} }
...@@ -529,13 +538,13 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -529,13 +538,13 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
/* 所有有效的已办,去除 reset,retract,appendTask */ // 所有有效的已办,去除 reset,retract,appendTask
private List<TaskCompleted> listJoinInquireTaskCompleted(AeiObjects aeiObjects, List<String> identities) private List<TaskCompleted> listJoinInquireTaskCompleted(AeiObjects aeiObjects, List<String> identities)
throws Exception { throws Exception {
return aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> { return aeiObjects.getJoinInquireTaskCompleteds().stream()
return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken()) .filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken())
&& identities.contains(o.getIdentity()) && BooleanUtils.isTrue(o.getJoinInquire()); && identities.contains(o.getIdentity()) && BooleanUtils.isTrue(o.getJoinInquire()))
}).collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Override @Override
...@@ -559,7 +568,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -559,7 +568,7 @@ public class ManualProcessor extends AbstractManualProcessor {
break; break;
} }
} }
/* 如果work有截至时间 */ // 如果work有截至时间
if (null != aeiObjects.getWork().getExpireTime()) { if (null != aeiObjects.getWork().getExpireTime()) {
if (null == task.getExpireTime()) { if (null == task.getExpireTime()) {
task.setExpireTime(aeiObjects.getWork().getExpireTime()); task.setExpireTime(aeiObjects.getWork().getExpireTime());
...@@ -569,7 +578,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -569,7 +578,7 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
} }
/* 已经有过期时间了,那么设置催办时间 */ // 已经有过期时间了,那么设置催办时间
if (null != task.getExpireTime()) { if (null != task.getExpireTime()) {
task.setUrgeTime(DateUtils.addHours(task.getExpireTime(), -2)); task.setUrgeTime(DateUtils.addHours(task.getExpireTime(), -2));
} else { } else {
...@@ -579,9 +588,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -579,9 +588,7 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
} }
/* // 从不过期
* 从不过期
*/
private void expireNever(Task task) { private void expireNever(Task task) {
task.setExpireTime(null); task.setExpireTime(null);
} }
...@@ -597,10 +604,10 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -597,10 +604,10 @@ public class ManualProcessor extends AbstractManualProcessor {
private void expireAppointWorkTime(Task task, Manual manual) throws Exception { private void expireAppointWorkTime(Task task, Manual manual) throws Exception {
Integer m = 0; Integer m = 0;
WorkTime wt = new WorkTime(); WorkTime wt = new WorkTime();
if (NumberTools.greaterThan(manual.getTaskExpireDay(), 0)) { if (BooleanUtils.isTrue(NumberTools.greaterThan(manual.getTaskExpireDay(), 0))) {
m += manual.getTaskExpireDay() * wt.minutesOfWorkDay(); m += manual.getTaskExpireDay() * wt.minutesOfWorkDay();
} }
if (NumberTools.greaterThan(manual.getTaskExpireHour(), 0)) { if (BooleanUtils.isTrue(NumberTools.greaterThan(manual.getTaskExpireHour(), 0))) {
m += manual.getTaskExpireHour() * 60; m += manual.getTaskExpireHour() * 60;
} }
if (m > 0) { if (m > 0) {
...@@ -634,12 +641,12 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -634,12 +641,12 @@ public class ManualProcessor extends AbstractManualProcessor {
Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE); Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put(ScriptFactory.BINDING_NAME_TASK, task); bindings.put(ScriptFactory.BINDING_NAME_TASK, task);
bindings.put(ScriptFactory.BINDING_NAME_EXPIRE, expire); bindings.put(ScriptFactory.BINDING_NAME_EXPIRE, expire);
/* 重新注入对象需要重新运行 */ // 重新注入对象需要重新运行
ScriptFactory.initialScriptText().eval(scriptContext); ScriptFactory.initialScriptText().eval(scriptContext);
aeiObjects.business().element() aeiObjects.business().element()
.getCompiledScript(aeiObjects.getWork().getApplication(), manual, Business.EVENT_MANUALTASKEXPIRE) .getCompiledScript(aeiObjects.getWork().getApplication(), manual, Business.EVENT_MANUALTASKEXPIRE)
.eval(scriptContext); .eval(scriptContext);
if (NumberTools.greaterThan(expire.getWorkHour(), 0)) { if (BooleanUtils.isTrue(NumberTools.greaterThan(expire.getWorkHour(), 0))) {
Integer m = 0; Integer m = 0;
m += expire.getWorkHour() * 60; m += expire.getWorkHour() * 60;
if (m > 0) { if (m > 0) {
...@@ -648,7 +655,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -648,7 +655,7 @@ public class ManualProcessor extends AbstractManualProcessor {
} else { } else {
task.setExpireTime(null); task.setExpireTime(null);
} }
} else if (NumberTools.greaterThan(expire.getHour(), 0)) { } else if (BooleanUtils.isTrue(NumberTools.greaterThan(expire.getHour(), 0))) {
Integer m = 0; Integer m = 0;
m += expire.getHour() * 60; m += expire.getHour() * 60;
if (m > 0) { if (m > 0) {
...@@ -671,12 +678,8 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -671,12 +678,8 @@ public class ManualProcessor extends AbstractManualProcessor {
String unit = aeiObjects.business().organization().unit().getWithIdentity(identity); String unit = aeiObjects.business().organization().unit().getWithIdentity(identity);
Task task = new Task(aeiObjects.getWork(), identity, person, unit, fromIdentity, new Date(), null, Task task = new Task(aeiObjects.getWork(), identity, person, unit, fromIdentity, new Date(), null,
aeiObjects.getRoutes(), manual.getAllowRapid()); aeiObjects.getRoutes(), manual.getAllowRapid());
/* 是第一条待办,进行标记 */ // 是第一条待办,进行标记
if (ListTools.isEmpty(aeiObjects.getJoinInquireTaskCompleteds())) { task.setFirst(ListTools.isEmpty(aeiObjects.getJoinInquireTaskCompleteds()));
task.setFirst(true);
} else {
task.setFirst(false);
}
this.calculateExpire(aeiObjects, manual, task); this.calculateExpire(aeiObjects, manual, task);
if (StringUtils.isNotEmpty(fromIdentity)) { if (StringUtils.isNotEmpty(fromIdentity)) {
aeiObjects.business().organization().empowerLog() aeiObjects.business().organization().empowerLog()
...@@ -697,14 +700,12 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -697,14 +700,12 @@ public class ManualProcessor extends AbstractManualProcessor {
} }
private EmpowerLog createEmpowerLog(Work work, String fromIdentity, String toIdentity) { private EmpowerLog createEmpowerLog(Work work, String fromIdentity, String toIdentity) {
EmpowerLog empowerLog = new EmpowerLog().setApplication(work.getApplication()) return new EmpowerLog().setApplication(work.getApplication()).setApplicationAlias(work.getApplicationAlias())
.setApplicationAlias(work.getApplicationAlias()).setApplicationName(work.getApplicationName()) .setApplicationName(work.getApplicationName()).setProcess(work.getProcess())
.setProcess(work.getProcess()).setProcessAlias(work.getProcessAlias()) .setProcessAlias(work.getProcessAlias()).setProcessName(work.getProcessName()).setTitle(work.getTitle())
.setProcessName(work.getProcessName()).setTitle(work.getTitle()).setWork(work.getId()) .setWork(work.getId()).setJob(work.getJob()).setFromIdentity(fromIdentity).setToIdentity(toIdentity)
.setJob(work.getJob()).setFromIdentity(fromIdentity).setToIdentity(toIdentity)
.setActivity(work.getActivity()).setActivityAlias(work.getActivityAlias()) .setActivity(work.getActivity()).setActivityAlias(work.getActivityAlias())
.setActivityName(work.getActivityName()).setEmpowerTime(new Date()); .setActivityName(work.getActivityName()).setEmpowerTime(new Date());
return empowerLog;
} }
private List<String> arriving_sameJobActivityExistIdentities(AeiObjects aeiObjects, Manual manual) private List<String> arriving_sameJobActivityExistIdentities(AeiObjects aeiObjects, Manual manual)
...@@ -713,9 +714,7 @@ public class ManualProcessor extends AbstractManualProcessor { ...@@ -713,9 +714,7 @@ public class ManualProcessor extends AbstractManualProcessor {
aeiObjects.getTasks().stream().filter(o -> { aeiObjects.getTasks().stream().filter(o -> {
return StringUtils.equals(o.getActivity(), manual.getId()) return StringUtils.equals(o.getActivity(), manual.getId())
&& StringUtils.equals(o.getJob(), aeiObjects.getWork().getJob()); && StringUtils.equals(o.getJob(), aeiObjects.getWork().getJob());
}).forEach(o -> { }).forEach(o -> exists.add(o.getIdentity()));
exists.add(o.getIdentity());
});
return exists; return exists;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册