This commit is contained in:
那些花儿
2025-09-25 13:42:37 +08:00
parent 37e23100e1
commit 271b5837c8
78 changed files with 2197 additions and 1164 deletions
@@ -17,9 +17,6 @@ import java.util.List;
* <p>
* 流程实例 服务类
* </p>
*
* @author mldong
* @since 2023-09-26
*/
public interface ProcessInstanceService extends BaseService<ProcessInstance> {
/**
@@ -28,12 +28,6 @@ public interface ProcessSurrogateService extends BaseService<ProcessSurrogate> {
*/
boolean update(ProcessSurrogate param);
/**
* 自定义分页查询流程委托代理
* @param param
* @return
*/
// CommonPage<ProcessSurrogateVO> page(ProcessSurrogatePageParam param);
/**
* 通过id查询
* @param id
@@ -9,9 +9,6 @@ import com.budwk.app.flow.vo.ProcessTaskActorVO;
* <p>
* 流程任务和参与人关系 服务类
* </p>
*
* @author mldong
* @since 2023-09-26
*/
public interface ProcessTaskActorService extends BaseService<ProcessTaskActor> {
/**
@@ -28,12 +25,6 @@ public interface ProcessTaskActorService extends BaseService<ProcessTaskActor> {
*/
boolean update(ProcessTaskActor param);
/**
* 自定义分页查询流程任务和参与人关系
* @param param
* @return
*/
// CommonPage<ProcessTaskActorVO> page(ProcessTaskActorPageParam param);
/**
* 通过id查询
* @param id
@@ -11,77 +11,82 @@ import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.vo.ProcessTaskVO;
import java.util.List;
import java.util.Map;
/**
* <p>
* 流程任务 服务类
* </p>
*
* @author mldong
* @since 2023-09-26
*/
public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 添加流程任务
* @param param
* @return
*/
* 添加流程任务
*
* @param param
* @return
*/
boolean save(ProcessTask param);
/**
* 更新流程任务
* @param param
* @return
*/
* 更新流程任务
*
* @param param
* @return
*/
boolean update(ProcessTask param);
/**
* 通过id查询
* @param id
* @return
*/
* 通过id查询
*
* @param id
* @return
*/
ProcessTaskVO findById(Long id);
/**
* 保存流程任务
*
* @param processTask
*/
void saveProcessTask(ProcessTask processTask);
/**
* 更新流程任务
*
* @param processTask
*/
void updateProcessTask(ProcessTask processTask);
/**
* 根据流程实例ID获取正在进行的任务
*
* @param processInstanceId 流程实例ID
* @param taskNames 任务名称
* @param taskNames 任务名称
* @return
*/
List<ProcessTask> getDoingTaskList(Long processInstanceId, String[] taskNames);
/**
* 根据流程实例ID获取已完成的任务
*
* @param processInstanceId 流程实例ID
* @param taskNames 任务名称
* @param taskNames 任务名称
* @return
*/
List<ProcessTask> getDoneTaskList(Long processInstanceId, String[] taskNames);
/**
* 将流程任务修改为已完成
*
* @param processTaskId
* @param operator 任务处理人
* @param operator 任务处理人
* @param args
*/
void finishProcessTask(Long processTaskId, String operator, Dict args);
/**
* 废弃任务
*
* @param processTaskId
* @param operator
* @param args
@@ -90,6 +95,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 根据任务模型和流程执行对象创建任务
*
* @param taskModel
* @param execution
* @return
@@ -98,6 +104,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 通过id获取流程任务
*
* @param id
* @return
*/
@@ -105,27 +112,32 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 向指定的任务id添加参与者
*
* @param processTaskId 任务id
* @param actors 参与者
* @param actors 参与者
*/
void addTaskActor(Long processTaskId, List<String> actors);
/**
* 向指定的任务id添加参与者
*
* @param processTaskId 流程任务id
* @param actors 参与者
* @param actors 参与者
*/
void addCandidateActor(Long processTaskId, List<String> actors);
/**
* 向指定任务移除参与者
*
* @param processTaskId 任务id
* @param actors 参与者
* @param actors 参与者
*/
void removeTaskActor(Long processTaskId, List<String> actors);
/**
* 根据taskId、operator,判断操作人operator是否允许执行任务
* @param task 任务对象
*
* @param task 任务对象
* @param operator 操作人
* @return boolean 是否允许操作
*/
@@ -133,6 +145,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 根据任务ID获取参与者ID
*
* @param processTaskId
* @return
*/
@@ -140,7 +153,8 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 根据当前任务对象驳回至上一步处理
* @param model 流程定义模型,用以获取上一步模型对象
*
* @param model 流程定义模型,用以获取上一步模型对象
* @param currentTask 当前任务对象
* @return Task 任务对象
*/
@@ -148,6 +162,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 获取可跳转的任务节点名称
*
* @param processInstanceId
* @return
*/
@@ -155,6 +170,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 创建会签任务
*
* @param taskModel
* @param execution
* @return
@@ -163,16 +179,26 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
/**
* 根据执行对象、自定义节点模型创建历史任务记录
*
* @param execution 执行对象
* @param model 自定义节点模型
* @param model 自定义节点模型
* @return 历史任务
*/
ProcessTask history(Execution execution, CustomModel model);
/**
* 根据流程实例ID获取最新的进行中的任务
*
* @param processInstanceId
* @return
*/
ProcessTaskVO latest(Long processInstanceId);
/**
* 转办任务
*
* @param taskId 任务ID
* @param transferUserId 转办用户ID
*/
void transfer(Long taskId, String transferUserId);
}
@@ -211,7 +211,7 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
if (CollectionUtil.isEmpty(actors)) return;
List<String> dbActors = getTaskActors(processTaskId);
List<String> newActors = actors.stream().filter(actor -> !dbActors.contains(actor)).toList();
Sql sql = Sqls.create("select id,username,loginname,unitName from vw_user where id in (@ids)");
Sql sql = Sqls.create("select id,username,loginname,unitName,unitId from vw_user where id in (@ids)");
sql.setParam("ids", newActors);
List<NutMap> list = listMap(sql);
@@ -222,19 +222,11 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
processTaskActor.setActorName(actor.getString("username"));
processTaskActor.setActorAccount(actor.getString("loginname"));
processTaskActor.setActorUnitName(actor.getString("unitName"));
processTaskActor.setActorUnitId(actor.getString("unitId"));
processTaskActor.setCreatedAt(System.currentTimeMillis());
System.out.println(StrUtil.format("给任务:{},添加参与者:{}", processTaskId, actor.toString()));
insert(processTaskActor);
}
// actors.stream().filter(actor -> !dbActors.contains(actor)).forEach(actor -> {
// ProcessTaskActor processTaskActor = new ProcessTaskActor();
// processTaskActor.setProcessTaskId(processTaskId);
// processTaskActor.setActorId(actor);
// processTaskActor.setCreatedAt(System.currentTimeMillis());
// System.out.println(StrUtil.format("给任务:{},添加参与者:{}", processTaskId, actor));
// insert(processTaskActor);
// });
}
@Override
@@ -465,6 +457,41 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
return findById(processTaskList.get(0).getId());
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void transfer(Long taskId, String transferUserId) {
// 设置原任务状态为已转办
ProcessTask task = fetch(taskId);
task.setTaskState(ProcessTaskStateEnum.TRANSFER.getCode());
Dict variable = FlowUtil.variableToDict(task.getVariable());
variable.put(FlowConst.TASK_FORM_DATA_PREFIX + "transferUserId", transferUserId);
task.setVariable(JSONUtil.toJsonStr(variable));
updateIgnoreNull(task);
// 创建转办任务
ProcessTask newTask = BeanUtil.copyProperties(task, ProcessTask.class, "id");
newTask.setTaskParentId(taskId);
newTask.setId(null);
newTask.setCreatedAt(null);
newTask.setUpdatedAt(null);
newTask.setCreatedBy(null);
newTask.setUpdatedBy(null);
variable.put(FlowConst.TASK_FORM_DATA_PREFIX + "transferUserId", null);
newTask.setVariable(JSONUtil.toJsonStr(variable));
newTask.setTaskState(ProcessTaskStateEnum.DOING.getCode());
dao().insert(newTask);
// 创建转办任务参与者
addTaskActor(newTask.getId(), List.of(transferUserId));
// 发布流程任务开始事件
List<ProcessTask> processTaskList = List.of(task);
processTaskList.forEach(processTask -> {
ProcessPublisher.notify(ProcessEvent.builder().eventType(ProcessEventTypeEnum.PROCESS_TASK_START).sourceId(processTask.getId()).build());
});
}
/**
* 根据Task模型的assignee、assignmentHandler属性以及运行时数据,确定参与者
*