From d85ec778237cd9af68c8d6b96895d22e0cf158df Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期一, 02 十一月 2026 14:15:17 +0800
Subject: [PATCH] fix(hrm/system): 修复调岗申请与提交报错、公积金误扣、用户搜索,新增核算批量删除
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
index 3d02148..b436b05 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
@@ -1,14 +1,17 @@
package cn.iocoder.yudao.module.hrm.service.approval;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService;
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
+import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationPageReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationRespVO;
import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationSaveReqVO;
@@ -35,6 +38,7 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -77,6 +81,8 @@
private StorageAttachmentApi storageAttachmentApi;
@Resource
private BpmProcessDefinitionService bpmProcessDefinitionService;
+ @Resource
+ private BpmProcessInstanceService bpmProcessInstanceService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -269,17 +275,41 @@
throw exception(TRANSFER_APPLICATION_SUBMIT_FAIL_NOT_DRAFT);
}
validateApproveCategoryAndProcessDefinition();
- ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey);
+ // 鏈寚瀹氭祦绋嬪畾涔� Key 鏃讹紝鑷姩鍙栥�岃皟鍔ㄥ鎵广�嶅垎绫讳笅褰撳墠娲昏穬鐨勬祦绋嬶紝
+ // 閬垮厤鍓嶇鏈紶 key 瀵艰嚧鎺ュ彛鍙傛暟缂哄け鐩存帴鎶ョ郴缁熷紓甯�
+ String key = resolveProcessDefinitionKey(processDefinitionKey);
+ ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(key);
if (processDefinition == null) {
throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS);
}
String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO()
- .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id)));
+ .setProcessDefinitionKey(key).setBusinessKey(String.valueOf(id)));
transferApplicationMapper.updateById(HrmTransferApplicationDO.builder()
.id(id)
.processInstanceId(processInstanceId)
.status(HrmAuditStatusEnum.PROCESS.getStatus())
.build());
+ }
+
+ /**
+ * 瑙f瀽娴佺▼瀹氫箟 Key锛氫紭鍏堜娇鐢ㄨ皟鐢ㄦ柟浼犲叆鍊硷紝涓虹┖鏃跺彇銆岃皟鍔ㄥ鎵广�嶅垎绫讳笅鏈�鏂扮殑娲昏穬娴佺▼
+ */
+ private String resolveProcessDefinitionKey(String processDefinitionKey) {
+ if (StrUtil.isNotBlank(processDefinitionKey)) {
+ return processDefinitionKey.trim();
+ }
+ List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService
+ .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE);
+ if (CollUtil.isEmpty(definitionInfoList)) {
+ throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS);
+ }
+ Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId);
+ List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds);
+ return processDefinitions.stream()
+ .filter(pd -> !pd.isSuspended())
+ .max(Comparator.comparingInt(ProcessDefinition::getVersion))
+ .map(ProcessDefinition::getKey)
+ .orElseThrow(() -> exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS));
}
private void validateApproveCategoryAndProcessDefinition() {
@@ -302,6 +332,26 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
+ public void cancelTransferApplication(Long id, Long userId) {
+ HrmTransferApplicationDO application = validateTransferApplicationExists(id);
+ if (ObjUtil.notEqual(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) {
+ throw exception(TRANSFER_APPLICATION_CANCEL_FAIL_NOT_PROCESS);
+ }
+ // 鍙栨秷瀵瑰簲鐨� BPM 娴佺▼瀹炰緥锛堜互鍙戣捣浜鸿韩浠芥挙閿�锛�
+ if (StrUtil.isNotBlank(application.getProcessInstanceId())) {
+ BpmProcessInstanceCancelReqVO cancelReqVO = new BpmProcessInstanceCancelReqVO();
+ cancelReqVO.setId(application.getProcessInstanceId());
+ cancelReqVO.setReason("鍛樺伐鎾ら攢璋冨矖鐢宠");
+ bpmProcessInstanceService.cancelProcessInstanceByStartUser(userId, cancelReqVO);
+ }
+ transferApplicationMapper.updateById(HrmTransferApplicationDO.builder()
+ .id(id)
+ .status(HrmAuditStatusEnum.CANCEL.getStatus())
+ .build());
+ }
+
+ @Override
public List<Map<String, Object>> getApproveProcessDefinitionList() {
validateApproveCategoryAndProcessDefinition();
List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService
--
Gitblit v1.9.3