feat(oa): 添加日记账批量更新接口并优化流程实例启动逻辑

- 在 IOaJournalAccountService 中添加 batchUpdate 方法
- 在 OaJournalAccountBo 中添加 journalIds 字段用于批量更新
- 实现 OaJournalAccountController 中的 batchUpdate 接口
- 在 OaJournalAccountServiceImpl 中实现 batchUpdate 方法,用于批量更新日记账的 batchId
- 优化 WfProcessServiceImpl 中的 startProcess
This commit is contained in:
2025-09-15 15:29:51 +08:00
parent 7b74ae82a7
commit 743c3133a6
5 changed files with 117 additions and 1 deletions

View File

@@ -853,12 +853,82 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
variables.put(ProcessConstants.PROCESS_STATUS_KEY, ProcessStatus.RUNNING.getStatus());
// 发起流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(), variables);
// 如果包含审批人信息,则设置下一个任务的审批人
try {
if (variables.containsKey("flowable") && variables.get("flowable") != null) {
Object flowableObj = variables.get("flowable");
if (flowableObj instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, Object> flowable = (Map<String, Object>) flowableObj;
if (flowable.containsKey("candidateUsers")) {
Object candidateUsersObj = flowable.get("candidateUsers");
if (candidateUsersObj != null) {
String candidateUsers = candidateUsersObj.toString();
if (StringUtils.isNotBlank(candidateUsers)) {
// 获取流程模型
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
// 设置下一个任务的审批人
this.assignNextUsers(bpmnModel, processInstance.getProcessInstanceId(), candidateUsers);
}
}
}
}
}
} catch (Exception e) {
// 记录异常但不影响流程启动
e.printStackTrace();
}
// 第一个用户任务为发起人,则自动完成任务
wfTaskService.startFirstTask(processInstance, variables);
return processInstance.getProcessInstanceId();
}
/**
* 设置下一个任务的审批人
*
* @param bpmnModel 流程模型
* @param processInstanceId 流程实例ID
* @param candidateUsers 审批人字符串
*/
private void assignNextUsers(BpmnModel bpmnModel, String processInstanceId, String candidateUsers) {
if (StringUtils.isBlank(candidateUsers)) {
return;
}
try {
// 获取当前流程实例的所有任务
List<Task> tasks = taskService.createTaskQuery()
.processInstanceId(processInstanceId)
.list();
if (CollUtil.isEmpty(tasks)) {
return;
}
// 解析审批人字符串格式可能是userId1,userId2,userId3
String[] userIds = candidateUsers.split(",");
// 为每个任务直接指定实际办理人
for (Task task : tasks) {
// 如果只有一个审批人,直接设置为实际办理人
if (userIds.length == 1 && StringUtils.isNotBlank(userIds[0])) {
taskService.setAssignee(task.getId(), userIds[0].trim());
} else if (userIds.length > 1) {
// 如果有多个审批人,设置第一个为实际办理人,其他为候选人
// 或者根据业务需求,可以只设置候选人让用户自己认领
taskService.setAssignee(task.getId(), userIds[0].trim());
// 如果需要其他人也能看到任务,可以添加候选人
for (int i = 1; i < userIds.length; i++) {
if (StringUtils.isNotBlank(userIds[i])) {
taskService.addCandidateUser(task.getId(), userIds[i].trim());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取流程变量
*