yxk-20260710
首节点跳过的情况,允许用户写入审批意见
This commit is contained in:
+29
-4
@@ -33,6 +33,7 @@ import java.util.Map;
|
|||||||
public class TaskCreatedAutoSubmitListener implements TaskListener {
|
public class TaskCreatedAutoSubmitListener implements TaskListener {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static final String DEFAULT_START_APPROVAL_OPINION = "发起督办流程。";
|
||||||
private static ISysBaseAPI sysBaseAPI;
|
private static ISysBaseAPI sysBaseAPI;
|
||||||
private static IExtActBpmLogService extActBpmLogService;
|
private static IExtActBpmLogService extActBpmLogService;
|
||||||
protected static RuntimeService runtimeService;
|
protected static RuntimeService runtimeService;
|
||||||
@@ -72,6 +73,7 @@ public class TaskCreatedAutoSubmitListener implements TaskListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String applyUserId = (String)delegateTask.getVariable("applyUserId");
|
String applyUserId = (String)delegateTask.getVariable("applyUserId");
|
||||||
|
String startApprovalOpinion = resolveStartApprovalOpinion(delegateTask);
|
||||||
//设置任务处理人为发起人
|
//设置任务处理人为发起人
|
||||||
taskService.setAssignee(delegateTask.getId(), applyUserId);
|
taskService.setAssignee(delegateTask.getId(), applyUserId);
|
||||||
//自动完成
|
//自动完成
|
||||||
@@ -79,7 +81,7 @@ public class TaskCreatedAutoSubmitListener implements TaskListener {
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
//记录审批日志
|
//记录审批日志
|
||||||
String username = JwtUtil.getUserNameByToken(SpringContextUtils.getHttpServletRequest());
|
String username = resolveUsername(applyUserId);
|
||||||
LoginUser user = sysBaseAPI.getUserByName(username);
|
LoginUser user = sysBaseAPI.getUserByName(username);
|
||||||
String processInstanceId = delegateTask.getProcessInstanceId();
|
String processInstanceId = delegateTask.getProcessInstanceId();
|
||||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||||
@@ -94,16 +96,39 @@ public class TaskCreatedAutoSubmitListener implements TaskListener {
|
|||||||
bpmlog.setOpUserName(user.getRealname());
|
bpmlog.setOpUserName(user.getRealname());
|
||||||
}
|
}
|
||||||
bpmlog.setProcInstId(processInstanceId);
|
bpmlog.setProcInstId(processInstanceId);
|
||||||
bpmlog.setRemarks("系统自动完成");
|
bpmlog.setRemarks(startApprovalOpinion);
|
||||||
bpmlog.setTaskDefKey(delegateTask.getTaskDefinitionKey());
|
bpmlog.setTaskDefKey(delegateTask.getTaskDefinitionKey());
|
||||||
bpmlog.setTaskId(delegateTask.getId());
|
bpmlog.setTaskId(delegateTask.getId());
|
||||||
bpmlog.setTaskName(delegateTask.getName());
|
bpmlog.setTaskName(delegateTask.getName());
|
||||||
extActBpmLogService.save(bpmlog);
|
extActBpmLogService.save(bpmlog);
|
||||||
// 首节点自动完成原本只写旧日志,这里同步补写新审批历史表用于页面展示。
|
// 首节点由系统自动推进,但审批历史按发起人的审批动作展示。
|
||||||
extActBpmLogService.saveSystemApprovalOpinion(bpmlog, delegateTask.getCreateTime());
|
extActBpmLogService.saveStartApprovalOpinion(bpmlog, delegateTask.getCreateTime());
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String resolveStartApprovalOpinion(DelegateTask delegateTask) {
|
||||||
|
Object opinion = delegateTask.getVariable("startApprovalOpinion");
|
||||||
|
if (opinion != null) {
|
||||||
|
String text = String.valueOf(opinion).trim();
|
||||||
|
if (text.length() > 0) {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DEFAULT_START_APPROVAL_OPINION;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String resolveUsername(String applyUserId) {
|
||||||
|
try {
|
||||||
|
String username = JwtUtil.getUserNameByToken(SpringContextUtils.getHttpServletRequest());
|
||||||
|
if (username != null && username.trim().length() > 0) {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
// 周期任务等非 Web 请求场景没有 request/token,使用流程发起人兜底。
|
||||||
|
}
|
||||||
|
return applyUserId;
|
||||||
|
}
|
||||||
|
|
||||||
public RepositoryService getRepositoryService(){
|
public RepositoryService getRepositoryService(){
|
||||||
return SpringContextUtils.getBean(RepositoryService.class);
|
return SpringContextUtils.getBean(RepositoryService.class);
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -58,6 +58,14 @@ public interface IExtActBpmLogService extends IService<ExtActBpmLog> {
|
|||||||
*/
|
*/
|
||||||
void saveSystemApprovalOpinion(ExtActBpmLog bpmLog, Date startTime);
|
void saveSystemApprovalOpinion(ExtActBpmLog bpmLog, Date startTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将首节点自动完成的发起审批意见同步写入新审批历史表。
|
||||||
|
*
|
||||||
|
* @param bpmLog 旧审批日志
|
||||||
|
* @param startTime 任务创建时间
|
||||||
|
*/
|
||||||
|
void saveStartApprovalOpinion(ExtActBpmLog bpmLog, Date startTime);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过流程实例id获取审批意见列表
|
* 通过流程实例id获取审批意见列表
|
||||||
|
|||||||
+30
@@ -241,6 +241,36 @@ public class ExtActBpmLogServiceImpl extends ServiceImpl<ExtActBpmLogMapper, Ext
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首节点自动完成本质仍由系统推进,但业务上代表发起人提交审批。
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void saveStartApprovalOpinion(ExtActBpmLog bpmLog, Date startTime) {
|
||||||
|
if (bpmLog == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
ProcessInstance processInstance = null;
|
||||||
|
if (oConvertUtils.isNotEmpty(bpmLog.getProcInstId())) {
|
||||||
|
processInstance = runtimeService.createProcessInstanceQuery()
|
||||||
|
.processInstanceId(bpmLog.getProcInstId()).singleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
String username = bpmLog.getOpUserId();
|
||||||
|
LoginUser user = oConvertUtils.isNotEmpty(username) ? sysBaseAPI.getUserByName(username) : null;
|
||||||
|
ApprovalDeptInfo approvalDept = resolveCurrentApprovalDept(user, username);
|
||||||
|
saveTaskApprovalOpinion(bpmLog, processInstance, RECORD_TYPE_PROCESS,
|
||||||
|
ACTION_APPROVE, resolveActionResult(bpmLog.getRemarks(), ACTION_APPROVE),
|
||||||
|
startTime,
|
||||||
|
approvalDept.id,
|
||||||
|
approvalDept.name,
|
||||||
|
approvalDept.code);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("补写发起审批历史失败,已保留原 ext_act_bpm_log。procInstId={}, taskId={}",
|
||||||
|
bpmLog.getProcInstId(), bpmLog.getTaskId(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 以旧表写入结果为准,新审批意见表只做尽力双写,失败不能影响办理主流程。
|
* 以旧表写入结果为准,新审批意见表只做尽力双写,失败不能影响办理主流程。
|
||||||
*/
|
*/
|
||||||
|
|||||||
+15
@@ -732,6 +732,21 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
dataForm = new HashMap<String, Object>();
|
dataForm = new HashMap<String, Object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 督办类发起弹窗传入的审批意见不落新字段,启动时提升为流程变量供首节点监听器读取。
|
||||||
|
if(oConvertUtils.isNotEmpty(jsonData)){
|
||||||
|
try {
|
||||||
|
Map<String, Object> submittedJsonData = JSONHelper.json2MapNoObj(jsonData);
|
||||||
|
if(submittedJsonData != null){
|
||||||
|
Object startApprovalOpinion = submittedJsonData.get("startApprovalOpinion");
|
||||||
|
if(oConvertUtils.isNotEmpty(startApprovalOpinion)){
|
||||||
|
dataForm.put("startApprovalOpinion", startApprovalOpinion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception parseException) {
|
||||||
|
log.warn("解析流程发起 jsonData 中的审批意见失败,跳过。flowCode={}, id={}", flowCode, id, parseException);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dataForm.put(WorkFlowGlobals.BPM_DATA_ID, id);
|
dataForm.put(WorkFlowGlobals.BPM_DATA_ID, id);
|
||||||
dataForm.put(WorkFlowGlobals.BPM_FORM_CONTENT_URL, formUrl);
|
dataForm.put(WorkFlowGlobals.BPM_FORM_CONTENT_URL, formUrl);
|
||||||
if(oConvertUtils.isNotEmpty(formUrlMobile)){
|
if(oConvertUtils.isNotEmpty(formUrlMobile)){
|
||||||
|
|||||||
Reference in New Issue
Block a user