From ef3cbc1c6882786e8218b08be3e52ea44587f03b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 08 十一月 2026 09:45:42 +0800
Subject: [PATCH] feat(hrm): 请假批量导入、加班代申请人、批量排班与节假日区间联动
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmOvertimeApplicationServiceImpl.java | 46 ++++++++++++++++++++++++++++++++--------------
1 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmOvertimeApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmOvertimeApplicationServiceImpl.java
index a044fba..37bfe49 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmOvertimeApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmOvertimeApplicationServiceImpl.java
@@ -60,7 +60,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(HrmOvertimeApplicationSaveReqVO reqVO, Long loginUserId) {
- HrmEmployeeDO employee = requireEmployee(loginUserId);
+ HrmEmployeeDO employee = resolveEmployee(reqVO.getEmployeeId(), loginUserId);
HrmOvertimeApplicationDO application = BeanUtils.toBean(reqVO, HrmOvertimeApplicationDO.class);
applyApplicantAndCalculatedTime(application, employee);
application.setNo(noRedisDAO.generateOvertimeApplicationNo());
@@ -70,20 +70,20 @@
}
@Override
- public void update(HrmOvertimeApplicationSaveReqVO reqVO, Long loginUserId) {
- HrmOvertimeApplicationDO existing = requireOwnedDraft(reqVO.getId(), loginUserId);
+ public void update(HrmOvertimeApplicationSaveReqVO reqVO, Long loginUserId, boolean canManage) {
+ HrmOvertimeApplicationDO existing = requireManageableDraft(reqVO.getId(), loginUserId, canManage);
HrmOvertimeApplicationDO update = BeanUtils.toBean(reqVO, HrmOvertimeApplicationDO.class);
- applyApplicantAndCalculatedTime(update, requireEmployee(loginUserId));
+ applyApplicantAndCalculatedTime(update, resolveEmployee(reqVO.getEmployeeId(), loginUserId));
update.setId(existing.getId());
mapper.updateById(update);
}
@Override
- public void delete(Long id, Long loginUserId) {
+ public void delete(Long id, Long loginUserId, boolean canManage) {
HrmOvertimeApplicationDO application = require(id);
boolean deletable = Objects.equals(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())
|| Objects.equals(application.getStatus(), HrmAuditStatusEnum.CANCEL.getStatus());
- if (!Objects.equals(application.getUserId(), loginUserId) || !deletable) {
+ if ((!canManage && !Objects.equals(application.getUserId(), loginUserId)) || !deletable) {
throw exception(OVERTIME_APPLICATION_UPDATE_FAIL_NOT_DRAFT);
}
mapper.deleteById(id);
@@ -115,14 +115,15 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void submit(Long id, String processDefinitionKey, Long loginUserId) {
- HrmOvertimeApplicationDO application = requireOwnedDraft(id, loginUserId);
+ public void submit(Long id, String processDefinitionKey, Long loginUserId, boolean canManage) {
+ HrmOvertimeApplicationDO application = requireManageableDraft(id, loginUserId, canManage);
validateProcessDefinitions();
ProcessDefinition definition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey);
if (definition == null || !BPM_PROCESS_DEFINITION_KEY.equals(definition.getKey())) {
throw exception(OVERTIME_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS);
}
- String processInstanceId = bpmProcessInstanceApi.createProcessInstance(loginUserId,
+ // 浠e憳宸ユ彁浜ゆ椂锛屾祦绋嬪彂璧蜂汉浠嶅簲涓虹敵璇疯〃涓婄殑鐢宠浜�
+ String processInstanceId = bpmProcessInstanceApi.createProcessInstance(application.getUserId(),
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(processDefinitionKey)
.setBusinessKey(String.valueOf(id)));
mapper.updateById(HrmOvertimeApplicationDO.builder().id(id).processInstanceId(processInstanceId)
@@ -131,13 +132,13 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void cancel(Long id, Long loginUserId) {
+ public void cancel(Long id, Long loginUserId, boolean canManage) {
HrmOvertimeApplicationDO application = require(id);
- if (!Objects.equals(application.getUserId(), loginUserId)
+ if ((!canManage && !Objects.equals(application.getUserId(), loginUserId))
|| !Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) {
throw exception(OVERTIME_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS);
}
- bpmProcessInstanceService.cancelProcessInstanceByStartUser(loginUserId,
+ bpmProcessInstanceService.cancelProcessInstanceByStartUser(application.getUserId(),
new BpmProcessInstanceCancelReqVO().setId(application.getProcessInstanceId()).setReason("鐢宠浜烘挙閿�鍔犵彮鐢宠"));
}
@@ -215,9 +216,9 @@
return value;
}
- private HrmOvertimeApplicationDO requireOwnedDraft(Long id, Long userId) {
+ private HrmOvertimeApplicationDO requireManageableDraft(Long id, Long userId, boolean canManage) {
HrmOvertimeApplicationDO value = require(id);
- if (!Objects.equals(value.getUserId(), userId)
+ if ((!canManage && !Objects.equals(value.getUserId(), userId))
|| !Objects.equals(value.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) {
throw exception(OVERTIME_APPLICATION_UPDATE_FAIL_NOT_DRAFT);
}
@@ -230,6 +231,23 @@
return employee;
}
+ /**
+ * 鐢宠浜轰负绌烘椂鍥為��鍒板綋鍓嶇櫥褰曡处鍙峰叧鑱旂殑鍛樺伐锛涢�夋嫨浠栦汉鏃舵寜鍛樺伐ID鍔犺浇
+ */
+ private HrmEmployeeDO resolveEmployee(Long employeeId, Long loginUserId) {
+ if (employeeId == null) {
+ return requireEmployee(loginUserId);
+ }
+ HrmEmployeeDO employee = employeeMapper.selectById(employeeId);
+ if (employee == null) {
+ throw exception(OVERTIME_APPLICATION_SELECTED_EMPLOYEE_NOT_EXISTS);
+ }
+ if (employee.getUserId() == null) {
+ throw exception(OVERTIME_APPLICATION_SELECTED_EMPLOYEE_NO_USER, employee.getName());
+ }
+ return employee;
+ }
+
/** 褰撳墠寰呭姙瀹℃壒浜烘垨鏇惧鐞嗚繃璇ユ祦绋嬬殑瀹℃壒浜哄彲鏌ョ湅涓氬姟璇︽儏銆� */
private boolean isProcessParticipant(String processInstanceId, Long userId) {
if (processInstanceId == null || userId == null) {
--
Gitblit v1.9.3