This commit is contained in:
那些花儿
2025-09-02 15:35:28 +08:00
parent 1531aea1d6
commit 7665726c84
51 changed files with 893 additions and 472 deletions
@@ -25,7 +25,7 @@ import java.util.Map;
@IocBean
@At("/flow/todoCenter")
@Ok("json:full")
public class FlowTodoCenter {
public class FlowTodoCenterController {
@Inject
private Dao dao;
@@ -44,6 +44,7 @@ public class FlowTodoCenter {
Sql sql = Sqls.create("""
SELECT
t.id AS taskId,
t.taskName AS taskKey,
t.displayName AS taskName,
t.taskState,
t.formKey,
@@ -79,6 +80,7 @@ public class FlowTodoCenter {
Sql sql = Sqls.create("""
SELECT
t.id AS taskId,
t.taskName AS taskKey,
t.displayName AS taskName,
t.taskState,
t.formKey,
@@ -0,0 +1,41 @@
package com.budwk.app.flow.handler;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import java.util.List;
/**
* 获取协会审批人根据流程变量参数(clubId) 必传
*/
public class FlowClubPresidentByArgsAssignmentHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
String clubId = execution.getArgs().getStr("clubId");
if (StrUtil.isBlank(clubId)) {
throw new BaseException("参数 clubId 不能为空");
}
CommonService commonService = ServiceContext.find(CommonService.class);
List<Sys_user> users = commonService.findUserInfoByRoleCode(Sys_user_role::getClubId, clubId, RoleConstant.CLUB_PRESIDENT);
return users.stream().map(Sys_user::getId).toList();
}
@Override
public String getMessage() {
return "获取协会会长(根据args中的clubId)";
}
@Override
public int getOrder() {
return AssignmentHandler.super.getOrder();
}
}
@@ -0,0 +1,21 @@
package com.budwk.app.flow.listenter;
import com.budwk.app.flow.engine.event.ProcessEvent;
import com.budwk.app.flow.engine.event.ProcessEventListener;
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* 流程实例开始事件监听器
*/
@IocBean
public class ProcessInstanceStartEventListener implements ProcessEventListener {
@Override
public void onEvent(ProcessEvent event) {
// TODO: 可以对接到学校OA的流程实例进行同步
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_INSTANCE_START) {
Long sourceId = event.getSourceId();
System.out.println("流程实例开始事件:" + sourceId);
}
}
}
@@ -0,0 +1,28 @@
package com.budwk.app.flow.listenter;
import com.budwk.app.flow.engine.event.ProcessEvent;
import com.budwk.app.flow.engine.event.ProcessEventListener;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* 流程任务完成事件监听器
*/
@IocBean
public class ProcessTaskEndEventListener implements ProcessEventListener {
@Inject
private Dao dao;
@Override
public void onEvent(ProcessEvent event) {
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_END) {
Long sourceId = event.getSourceId();
ProcessTask task = dao.fetch(ProcessTask.class, sourceId);
System.out.println("流程任务完成事件:" + task.getDisplayName());
}
}
}
@@ -0,0 +1,64 @@
package com.budwk.app.flow.listenter;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.event.ProcessEvent;
import com.budwk.app.flow.engine.event.ProcessEventListener;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.entity.ProcessTaskActor;
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* 流程任务开始监听器
*/
@IocBean
public class ProcessTaskStartEventListener implements ProcessEventListener {
@Inject
private Dao dao;
@Override
public void onEvent(ProcessEvent event) {
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_START) {
Long sourceId = event.getSourceId();
ProcessTask task = dao.fetch(ProcessTask.class, sourceId);
sendMessage( task);
}
}
private void sendMessage(ProcessTask task) {
// 说明是流程开始 用户首次完成任务
if (task.getTaskParentId() == 0 && task.getTaskName().equals("startTask")) {
return;
}
// 节点名称
String taskDisplayName = task.getDisplayName();
// 实例名称
Long instanceId = task.getProcessInstanceId();
ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId);
String instanceName = Json.fromJson(NutMap.class, instance.getVariable()).getString(FlowConst.PROCESS_INSTANCE_NAME);
// 任务接收人
List<ProcessTaskActor> taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId()));
for (ProcessTaskActor taskActor : taskActors) {
// 模拟发送消息
String message = StrUtil.format("{}您有一条待办任务,实例:{},任务:{}", taskActor.getActorName(), instanceName, taskDisplayName);
System.out.println(message);
}
}
}