This commit is contained in:
2026-07-02 16:06:57 +08:00
parent f637e02c08
commit 4afb3bd835
5 changed files with 143 additions and 4 deletions
@@ -134,6 +134,15 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
*/
void removeTaskActor(Long processTaskId, List<String> actors);
/**
* 按最新办理人配置覆盖同步指定流程任务的参与者。
*
* @param processTaskId 流程任务id
* @param actors 最新办理人用户id集合;为空时不处理,避免误清空任务办理人
* @return 新增和移除的参与者数量合计
*/
int syncTaskActors(Long processTaskId, List<String> actors);
/**
* 根据taskId、operator,判断操作人operator是否允许执行任务
*
@@ -279,6 +279,31 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
dao().clear(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", processTaskId).and(ProcessTaskActor::getActorId, "in", actors));
}
@Override
@Aop(TransAop.READ_COMMITTED)
public int syncTaskActors(Long processTaskId, List<String> actors) {
if (CollectionUtil.isEmpty(actors)) {
return 0;
}
List<String> latestActors = actors.stream().filter(StrUtil::isNotBlank).distinct().toList();
if (CollectionUtil.isEmpty(latestActors)) {
return 0;
}
// 以最新负责人配置为准:缺失的办理人补上,不再是负责人的办理人移除。
List<String> dbActors = getTaskActors(processTaskId);
List<String> addActors = latestActors.stream().filter(actor -> !dbActors.contains(actor)).toList();
List<String> removeActors = dbActors.stream().filter(actor -> !latestActors.contains(actor)).toList();
if (CollectionUtil.isNotEmpty(removeActors)) {
removeTaskActor(processTaskId, removeActors);
}
if (CollectionUtil.isNotEmpty(addActors)) {
addTaskActor(processTaskId, addActors);
}
return addActors.size() + removeActors.size();
}
@Override
public boolean isAllowed(ProcessTask task, String operator) {
// 执行者为超级管理员或自动执行用户