From e1fba46a50e2f5036b1a5fd59f459e61495eb888 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 08 七月 2026 16:43:44 +0800
Subject: [PATCH] 已进行排班并且人员已打卡的前提下,对应的班次配置不能编辑删除。
---
src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceLocationConfigServiceImpl.java | 33 ++++++++++++----
src/main/java/com/ruoyi/staff/mapper/PersonalShiftMapper.java | 2 +
src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java | 21 +++++++++-
src/main/resources/mapper/staff/PersonalShiftMapper.xml | 11 +++++
src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceLocationConfig.java | 22 +++++++++++
src/main/java/com/ruoyi/staff/service/PersonalAttendanceLocationConfigService.java | 15 +++++++
6 files changed, 93 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java b/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java
index d86ef0b..fc9cf4c 100644
--- a/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java
+++ b/src/main/java/com/ruoyi/staff/controller/PersonalAttendanceLocationConfigController.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.staff.pojo.PersonalAttendanceLocationConfig;
@@ -32,8 +33,10 @@
@Operation(summary = "鏂板/淇敼浜哄憳鎵撳崱瑙勫垯閰嶇疆")
@PostMapping("/add")
public R add(@RequestBody PersonalAttendanceLocationConfig personalAttendanceLocationConfig){
-
-
+ if (personalAttendanceLocationConfig.getId() != null
+ && !personalAttendanceLocationConfigService.canEdit(personalAttendanceLocationConfig.getId())) {
+ return R.fail("璇ョ彮娆¢厤缃凡琚帓鐝苟浜х敓鎵撳崱璁板綍锛屼笉鑳界紪杈�");
+ }
// 鐝闇�瑕佷笉鑳藉閲嶅
if (personalAttendanceLocationConfig.getId() == null && personalAttendanceLocationConfigService.lambdaQuery().eq(PersonalAttendanceLocationConfig::getShift, personalAttendanceLocationConfig.getShift()).one() != null) {
return R.fail("鐝涓嶈兘閲嶅");
@@ -53,13 +56,25 @@
if (query.getShift() != null && !query.getShift().isEmpty()) {
wrapper.eq(PersonalAttendanceLocationConfig::getShift, query.getShift());
}
- return R.ok(personalAttendanceLocationConfigService.page(page, wrapper));
+ IPage<PersonalAttendanceLocationConfig> result = personalAttendanceLocationConfigService.page(page, wrapper);
+ result.getRecords().forEach(item -> {
+ boolean locked = personalAttendanceLocationConfigService.hasAttendanceUsage(item.getId());
+ item.setUsageLocked(locked);
+ item.setCanEdit(!locked);
+ item.setCanDelete(!locked);
+ });
+ return R.ok(result);
}
@Operation(summary = "鍒犻櫎浜哄憳鎵撳崱瑙勫垯閰嶇疆")
@DeleteMapping("/del")
public R del(@RequestBody List<Integer> ids) {
+ for (Integer id : ids) {
+ if (!personalAttendanceLocationConfigService.canDelete(id)) {
+ return R.fail("瀛樺湪宸叉帓鐝笖宸叉湁鎵撳崱璁板綍鐨勭彮娆¢厤缃紝涓嶈兘鍒犻櫎");
+ }
+ }
return R.ok(personalAttendanceLocationConfigService.removeBatchByIds(ids));
}
diff --git a/src/main/java/com/ruoyi/staff/mapper/PersonalShiftMapper.java b/src/main/java/com/ruoyi/staff/mapper/PersonalShiftMapper.java
index 8ae881f..ea48d09 100644
--- a/src/main/java/com/ruoyi/staff/mapper/PersonalShiftMapper.java
+++ b/src/main/java/com/ruoyi/staff/mapper/PersonalShiftMapper.java
@@ -31,4 +31,6 @@
List<Map<String, Object>> performanceShiftYearList(@Param("time") String time, @Param("userName") String userName, @Param("sysDeptId") Integer sysDeptId);
List<PerformanceShiftMapDto> performanceShiftList(@Param("time") String time, @Param("userName") String userName, @Param("sysDeptId") Integer sysDeptId);
+
+ boolean existsAttendanceUsedByConfig(@Param("configId") Integer configId);
}
diff --git a/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceLocationConfig.java b/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceLocationConfig.java
index 13e0ca5..13e93c8 100644
--- a/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceLocationConfig.java
+++ b/src/main/java/com/ruoyi/staff/pojo/PersonalAttendanceLocationConfig.java
@@ -61,6 +61,28 @@
@Schema(description = "鐝")
private String shift;
+
+ /**
+ * 鏄惁宸茶鎺掔彮涓斿凡鏈夋墦鍗¤褰曚娇鐢�
+ */
+ @Schema(description = "鏄惁宸茶鎺掔彮涓斿凡鏈夋墦鍗¤褰曚娇鐢�")
+ @TableField(exist = false)
+ private Boolean usageLocked;
+
+ /**
+ * 鏄惁鍙紪杈�
+ */
+ @Schema(description = "鏄惁鍙紪杈�")
+ @TableField(exist = false)
+ private Boolean canEdit;
+
+ /**
+ * 鏄惁鍙垹闄�
+ */
+ @Schema(description = "鏄惁鍙垹闄�")
+ @TableField(exist = false)
+ private Boolean canDelete;
+
@Schema(description = "鍒涘缓鐢ㄦ埛")
@TableField(fill = FieldFill.INSERT)
private Integer createUser;
diff --git a/src/main/java/com/ruoyi/staff/service/PersonalAttendanceLocationConfigService.java b/src/main/java/com/ruoyi/staff/service/PersonalAttendanceLocationConfigService.java
index 14afa19..f5c1205 100644
--- a/src/main/java/com/ruoyi/staff/service/PersonalAttendanceLocationConfigService.java
+++ b/src/main/java/com/ruoyi/staff/service/PersonalAttendanceLocationConfigService.java
@@ -13,4 +13,19 @@
*/
public interface PersonalAttendanceLocationConfigService extends IService<PersonalAttendanceLocationConfig> {
+ /**
+ * 鍒ゆ柇鐝閰嶇疆鏄惁宸茶鎺掔彮涓斿凡鏈夋墦鍗¤褰曚娇鐢ㄣ��
+ */
+ boolean hasAttendanceUsage(Integer configId);
+
+ /**
+ * 鍒ゆ柇鐝閰嶇疆鏄惁鍏佽缂栬緫銆�
+ */
+ boolean canEdit(Integer configId);
+
+ /**
+ * 鍒ゆ柇鐝閰嶇疆鏄惁鍏佽鍒犻櫎銆�
+ */
+ boolean canDelete(Integer configId);
+
}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceLocationConfigServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceLocationConfigServiceImpl.java
index b1dffca..7548db8 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceLocationConfigServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceLocationConfigServiceImpl.java
@@ -1,15 +1,12 @@
package com.ruoyi.staff.service.impl;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.staff.pojo.PersonalAttendanceLocationConfig;
-import com.ruoyi.staff.mapper.PersonalAttendanceLocationConfigMapper;
-import com.ruoyi.staff.service.PersonalAttendanceLocationConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.ruoyi.staff.mapper.PersonalAttendanceLocationConfigMapper;
+import com.ruoyi.staff.mapper.PersonalShiftMapper;
+import com.ruoyi.staff.pojo.PersonalAttendanceLocationConfig;
+import com.ruoyi.staff.service.PersonalAttendanceLocationConfigService;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
-
-import java.util.List;
/**
* <p>
@@ -20,6 +17,26 @@
* @since 2026-02-11 09:41:34
*/
@Service
+@RequiredArgsConstructor
public class PersonalAttendanceLocationConfigServiceImpl extends ServiceImpl<PersonalAttendanceLocationConfigMapper, PersonalAttendanceLocationConfig> implements PersonalAttendanceLocationConfigService {
+ private final PersonalShiftMapper personalShiftMapper;
+
+ @Override
+ public boolean hasAttendanceUsage(Integer configId) {
+ if (configId == null) {
+ return false;
+ }
+ return personalShiftMapper.existsAttendanceUsedByConfig(configId);
+ }
+
+ @Override
+ public boolean canEdit(Integer configId) {
+ return !hasAttendanceUsage(configId);
+ }
+
+ @Override
+ public boolean canDelete(Integer configId) {
+ return !hasAttendanceUsage(configId);
+ }
}
diff --git a/src/main/resources/mapper/staff/PersonalShiftMapper.xml b/src/main/resources/mapper/staff/PersonalShiftMapper.xml
index e872e01..b912e24 100644
--- a/src/main/resources/mapper/staff/PersonalShiftMapper.xml
+++ b/src/main/resources/mapper/staff/PersonalShiftMapper.xml
@@ -112,4 +112,15 @@
order by s.create_time
</select>
+ <select id="existsAttendanceUsedByConfig" resultType="boolean">
+ SELECT EXISTS (
+ SELECT 1
+ FROM personal_shift ps
+ INNER JOIN personal_attendance_records par
+ ON par.staff_on_job_id = ps.staff_on_job_id
+ AND par.date = DATE(ps.work_time)
+ WHERE ps.personal_attendance_location_config_id = #{configId}
+ )
+ </select>
+
</mapper>
--
Gitblit v1.9.3