From dd69dd49c98e2d8fdd9b1c77e97923bde0d57b57 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 14 九月 2026 16:31:33 +0800
Subject: [PATCH] feat(bpm): 新增流程免审批开关,支持按流程或全局跳过 OA 审批
---
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
index 73f8a01..b32d85f 100644
--- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
+++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -29,6 +29,7 @@
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService;
import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
+import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessAutoApproveService;
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskTimeoutReqDTO;
@@ -74,7 +75,7 @@
/**
* 娴佺▼浠诲姟瀹炰緥 Service 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
* @author jason
*/
@Slf4j
@@ -102,6 +103,8 @@
private BpmMessageService messageService;
@Resource
private BpmFormService formService;
+ @Resource
+ private BpmProcessAutoApproveService processAutoApproveService;
@Resource
private AdminUserApi adminUserApi;
@@ -987,7 +990,7 @@
// 鏀规垚 moveExecutionsToSingleActivityId 濂藉儚骞舵病鏈夐亣鍒� 鈶� 鎻愬埌鐨勮秴鏃舵彁閱掑け鏁堢殑闂銆傛殏鏃跺厛鏀瑰洖 moveExecutionsToSingleActivityId
// 鈶� moveExecutionsToSingleActivityId 鍥為��澶氬疄渚嬬殑鏃跺�欎笉浼氬幓鍒犻櫎澶氬疄渚嬫牴, 搴旀敼鎴� moveActivityIdsToSingleActivityId
// flowable 8.0.0 淇涓婇潰鐩稿叧闂锛� 杩樹慨澶嶄簡骞惰鍒嗘敮鍥為��鐨勯棶棰� https://t.zsxq.com/z4d9i銆�
- // 鈶� 浣跨敤 moveExecutionsToSingleActivityId 鏂规硶杩涜鍥為��鎿嶄綔鏃讹紝濡傛灉鏄瀹炰緥鐨勭敤鎴蜂换鍔°�愯妺閬撶敤鎴蜂换鍔¢粯璁や负澶氬疄渚嬨�戯紝涓嶄細鍒犻櫎澶氬疄渚嬩换鍔$殑鏍规暟鎹� ACT_RU_EXECUTION
+ // 鈶� 浣跨敤 moveExecutionsToSingleActivityId 鏂规硶杩涜鍥為��鎿嶄綔鏃讹紝濡傛灉鏄瀹炰緥鐨勭敤鎴蜂换鍔°�愯秴绾х鐞嗗憳鐢ㄦ埛浠诲姟榛樿涓哄瀹炰緥銆戯紝涓嶄細鍒犻櫎澶氬疄渚嬩换鍔$殑鏍规暟鎹� ACT_RU_EXECUTION
// 浼氬鑷存湁涓�浜涢棶棰橈紝鎵�浠ヤ娇鐢� moveActivityIdsToSingleActivityId銆� 浣嗘槸璇ユ柟娉曞湪 flowable 6.8.1 ~ 7.1.0 鐨勭増鏈細鏈� bug 闃诲鍥為��鍔熻兘
// 鐩稿叧 issue: https://github.com/flowable/flowable-engine/issues/3944
runtimeService.createChangeActivityStateBuilder()
@@ -1400,6 +1403,10 @@
FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
Integer approveType = BpmnModelUtils.parseApproveType(userTaskElement);
Integer assignEmptyHandlerType = BpmnModelUtils.parseAssignEmptyHandlerType(userTaskElement);
+ // 娴佺▼绾с�愬厤瀹℃壒銆戝紑鍏筹細浠呭銆愪汉宸ュ鏍搞�戣妭鐐圭敓鏁堛��
+ // 闈炰汉宸ュ鏍哥殑鑺傜偣锛圓UTO_APPROVE / AUTO_REJECT锛夋湁鍏惰嚜韬殑璁捐鍣ㄩ厤缃紝涓嶅彈鏈紑鍏冲奖鍝嶏紝閬垮厤涓ゅ閰嶇疆浜掔浉骞叉壈銆�
+ boolean autoApproveEnabled = ObjectUtil.equal(approveType, BpmUserTaskApproveTypeEnum.USER.getType())
+ && processAutoApproveService.isAutoApprove(processInstance.getProcessDefinitionKey());
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
/**
@@ -1418,6 +1425,26 @@
&& getTask(task.getId()) == null) {
return;
}
+ // 鐗规畩鎯呭喌闆讹細娴佺▼寮�鍚簡銆愬厤瀹℃壒銆戝紑鍏筹紝浜哄伐瀹℃牳鑺傜偣鐩存帴鑷姩閫氳繃
+ // 璇存槑锛氫笉鏀瑰姩涓氬姟渚т换浣曢�昏緫鈥斺�斾笟鍔$収甯告妸鍗曟嵁缃负銆屽鎵逛腑銆嶏紝闅忓悗璧颁笌姝e父瀹℃壒閫氳繃
+ // 瀹屽叏鐩稿悓鐨� approveTask 娴佺▼锛屽洜姝や笟鍔$洃鍚櫒銆佸鎵圭暀鐥曘�佷互鍙婁笅娓稿姩浣�
+ // 锛堢敓鎴愰噰璐鍗� / MPS / 渚涘簲鍟嗘。妗� / 鎶ュ伐浜у嚭绛夛級鍏ㄩ儴鐓у父鎵ц銆�
+ if (autoApproveEnabled) {
+ // 骞傜瓑淇濇姢锛氫换鍔″彲鑳藉凡琚帹杩涳紙渚嬪銆屽彂璧蜂汉鑺傜偣銆嶇敱寮曟搸鑷甫鐨勭瓥鐣ュ厛琛岃嚜鍔ㄩ�氳繃锛夛紝
+ // 姝ゆ椂浠诲姟宸蹭笉瀛樺湪锛岀洿鎺ヨ烦杩囷紝閬垮厤閲嶅瀹℃壒鎶ラ敊
+ Task autoApproveTask = getTask(task.getId());
+ if (autoApproveTask == null) {
+ return;
+ }
+ // 蹇呴』浼犲叆浠诲姟鐨勫疄闄呭鎵逛汉锛歛pproveTask 浼氭牎楠屻�屾搷浣滀汉蹇呴』鏄浠诲姟鐨勫鎵逛汉銆嶏紝
+ // 浼� null 浠呭銆屽鎵逛汉涓虹┖銆嶇殑浠诲姟鏀捐锛屽惁鍒欎細鎶涖�岃浠诲姟鐨勫鎵逛汉涓嶆槸浣犮��
+ Long assigneeUserId = StrUtil.isNotBlank(autoApproveTask.getAssignee())
+ ? NumberUtils.parseLong(autoApproveTask.getAssignee()) : null;
+ getSelf().approveTask(assigneeUserId, new BpmTaskApproveReqVO()
+ .setId(autoApproveTask.getId())
+ .setReason(BpmReasonEnum.PROCESS_AUTO_APPROVE.getReason()));
+ return;
+ }
// 鐗规畩鎯呭喌涓�锛氥�愪汉宸ュ鏍搞�戝鎵逛汉涓虹┖锛屾牴鎹厤缃槸鍚﹁鑷姩閫氳繃銆佽嚜鍔ㄦ嫆缁�
if (ObjectUtil.equal(approveType, BpmUserTaskApproveTypeEnum.USER.getType())) {
// 濡傛灉鏈夊鎵逛汉銆佹垨鑰呮嫢鏈変汉锛屽垯璇存槑涓嶆弧瓒虫儏鍐典竴锛屼笉鑷姩閫氳繃銆佷笉鑷姩鎷掔粷
--
Gitblit v1.9.3