yxk-20260728

改善提案
流程启动成功后,以提案名称写入运行时变量 title。
写入固定流程名称 flow_name=改善提案审批。
同步覆盖 bpm_biz_title 为 提案名称【改善提案审批】,修正启动时因表达式变量缺失产生的空标题。
启动前校验 proposal_name 非空。
This commit is contained in:
ye1023
2026-07-28 10:07:33 +08:00
parent bc0ec8f354
commit 502a227ef9
@@ -17,9 +17,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Map;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
@@ -38,6 +40,7 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
private static final String NORMAL_DEL_FLAG = "0"; private static final String NORMAL_DEL_FLAG = "0";
private static final String BPM_STATUS_DRAFT = "1"; private static final String BPM_STATUS_DRAFT = "1";
private static final String FLOW_CODE = "dev_improvement_proposal_001"; private static final String FLOW_CODE = "dev_improvement_proposal_001";
private static final String FLOW_NAME = "改善提案审批";
private static final String BPM_FORM_URL = "gh/improvementProposal/components/ImprovementProposalBPMForm"; private static final String BPM_FORM_URL = "gh/improvementProposal/components/ImprovementProposalBPMForm";
private static final String TASK_INITIAL_REVIEW = "Task_improve001"; private static final String TASK_INITIAL_REVIEW = "Task_improve001";
private static final String TASK_LEADER_AWARD = "Task_improve003"; private static final String TASK_LEADER_AWARD = "Task_improve003";
@@ -65,6 +68,9 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String startProcess(String id, String username) { public String startProcess(String id, String username) {
ImprovementProposal proposal = getDraftProposalForUpdate(id); ImprovementProposal proposal = getDraftProposalForUpdate(id);
if (oConvertUtils.isEmpty(proposal.getProposalName())) {
throw new IllegalStateException("提案名称不能为空,无法发起流程");
}
try { try {
// 改善提案以自身主表 ID 作为流程业务键,不引入 task_task 的重复督办中间表。 // 改善提案以自身主表 ID 作为流程业务键,不引入 task_task 的重复督办中间表。
Result<String> result = bpmBaseExtApi.startMutilProcess(FLOW_CODE, proposal.getId(), BPM_FORM_URL, BPM_FORM_URL, username, null); Result<String> result = bpmBaseExtApi.startMutilProcess(FLOW_CODE, proposal.getId(), BPM_FORM_URL, BPM_FORM_URL, username, null);
@@ -73,6 +79,13 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
} }
// 流程引擎会按 BPM 配置将 bpm_status 回写为处理中;此处使用局部对象更新,避免旧实体的草稿状态将其覆盖。 // 流程引擎会按 BPM 配置将 bpm_status 回写为处理中;此处使用局部对象更新,避免旧实体的草稿状态将其覆盖。
// 主表没有 title、flow_name 字段,启动时标题表达式无法解析;在流程实例创建后立即补齐并覆盖空业务标题。
Map<String, Object> titleVariables = new HashMap<>(3);
titleVariables.put("title", proposal.getProposalName());
titleVariables.put("flow_name", FLOW_NAME);
titleVariables.put("bpm_biz_title", proposal.getProposalName() + "" + FLOW_NAME + "");
runtimeService.setVariables(result.getResult(), titleVariables);
ImprovementProposal processUpdate = new ImprovementProposal(); ImprovementProposal processUpdate = new ImprovementProposal();
processUpdate.setId(proposal.getId()); processUpdate.setId(proposal.getId());
processUpdate.setProcessInstanceId(result.getResult()); processUpdate.setProcessInstanceId(result.getResult());