diff --git a/src/main/java/com/yunhai/homeleave/enums/LeaveTypeEnum.java b/src/main/java/com/yunhai/homeleave/enums/LeaveTypeEnum.java deleted file mode 100644 index b9b0925..0000000 --- a/src/main/java/com/yunhai/homeleave/enums/LeaveTypeEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.yunhai.homeleave.enums; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; -import java.util.Objects; - -/** - * 请假类型(历史 LeaveTypeEnum 语义:1 病假;2 事假及其他原因)。 - */ -public enum LeaveTypeEnum { - SICK(1, "病假"), - PERSONAL(2, "事假及其他"); - - private final Integer id; - private final String name; - - LeaveTypeEnum(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public String getName() { - return name; - } - - public static String nameById(Integer id) { - for (LeaveTypeEnum type : list()) { - if (Objects.equals(type.getId(), id)) { - return type.getName(); - } - } - return null; - } - - public static boolean isValid(Integer id) { - return nameById(id) != null; - } - - private static List list; - - private static List list() { - if (list != null) { - return list; - } - list = new ArrayList<>(); - for (LeaveTypeEnum type : EnumSet.allOf(LeaveTypeEnum.class)) { - list.add(type); - } - return list; - } -} diff --git a/src/main/java/com/yunhai/homeleave/service/IDictService.java b/src/main/java/com/yunhai/homeleave/service/IDictService.java index 3675751..8fb8c45 100644 --- a/src/main/java/com/yunhai/homeleave/service/IDictService.java +++ b/src/main/java/com/yunhai/homeleave/service/IDictService.java @@ -88,6 +88,6 @@ public interface IDictService { /** 请假类型排序:ids 按前端顺序(升序)重排 sortOrder */ void sortLeaveTypes(String ids); - /** 按学校解析请假类型名称(本校优先、其次全局;未命中回退 null,调用方可再退枚举名) */ + /** 按学校解析请假类型名称(本校优先、其次全局,含停用项;未命中返回 null) */ String resolveLeaveTypeName(Integer leaveType, Integer schId); } diff --git a/src/main/java/com/yunhai/homeleave/service/impl/LeaveServiceImpl.java b/src/main/java/com/yunhai/homeleave/service/impl/LeaveServiceImpl.java index e7e8ff6..b52b4cb 100644 --- a/src/main/java/com/yunhai/homeleave/service/impl/LeaveServiceImpl.java +++ b/src/main/java/com/yunhai/homeleave/service/impl/LeaveServiceImpl.java @@ -5,7 +5,6 @@ import com.yunhai.homeleave.entity.LeaveReportBack; import com.yunhai.homeleave.entity.LeaveTime; import com.yunhai.homeleave.enums.LeaveRegisterTypeEnum; import com.yunhai.homeleave.enums.LeaveStatusEnum; -import com.yunhai.homeleave.enums.LeaveTypeEnum; import com.yunhai.homeleave.model.BasePageResult; import com.yunhai.homeleave.model.UpFileVo; import com.yunhai.homeleave.model.bsch.SchClassDto; @@ -926,47 +925,19 @@ public class LeaveServiceImpl implements ILeaveService { } } - /** - * 请假类型校验:sys_dict(leave_type) 启用项;字典完全未配置时回退固定枚举(1/2)。 - */ - /** 取异常链最底层的真实原因文本(MySQL 错误在链尾) */ - private static String rootMessage(Throwable e) { - Throwable r = e; - while (r.getCause() != null && r.getCause() != r) { - r = r.getCause(); - } - return r.getClass().getSimpleName() + ": " + r.getMessage(); - } - + /** 请假类型校验:sys_dict(leave_type) 启用项(本校 + 全局),以字典配置为准 */ private boolean isValidLeaveType(Integer leaveType) { if (leaveType == null) { return false; } - try { - List> options = dictService.getLeaveTypeOptions(); - if (!options.isEmpty()) { - String key = String.valueOf(leaveType); - return options.stream().anyMatch(o -> key.equals(String.valueOf(o.get("k")))); - } - } catch (Exception e) { - // 字典查询异常不阻断提交:回退固定枚举,并把最底层原因打出来便于排查 - log.error("[isValidLeaveType] 请假类型字典查询失败, 回退枚举校验. cause={}", rootMessage(e), e); - } - return LeaveTypeEnum.isValid(leaveType); + String key = String.valueOf(leaveType); + return dictService.getLeaveTypeOptions().stream() + .anyMatch(o -> key.equals(String.valueOf(o.get("k")))); } - /** 请假类型名称:sys_dict 优先,未命中回退固定枚举名(字典查询异常同样回退,不阻断列表) */ + /** 请假类型名称:sys_dict(leave_type),本校优先、其次全局,含停用项;未命中返回 null */ private String leaveTypeName(Leave leave) { - try { - String name = dictService.resolveLeaveTypeName(leave.getLeaveType(), leave.getSchId()); - if (name != null) { - return name; - } - } catch (Exception e) { - log.error("[leaveTypeName] 请假类型字典查询失败, 回退枚举名. leaveType={}, cause={}", - leave.getLeaveType(), rootMessage(e), e); - } - return LeaveTypeEnum.nameById(leave.getLeaveType()); + return dictService.resolveLeaveTypeName(leave.getLeaveType(), leave.getSchId()); } /** 销假时间段回传规范化(不连续合成单条;连续要求与请假时间段一一对应) */ diff --git a/src/test/java/com/yunhai/homeleave/service/impl/LeaveServiceImplClassCheckTest.java b/src/test/java/com/yunhai/homeleave/service/impl/LeaveServiceImplClassCheckTest.java index 07eee7a..5774a59 100644 --- a/src/test/java/com/yunhai/homeleave/service/impl/LeaveServiceImplClassCheckTest.java +++ b/src/test/java/com/yunhai/homeleave/service/impl/LeaveServiceImplClassCheckTest.java @@ -76,6 +76,8 @@ class LeaveServiceImplClassCheckTest { rosterService = mock(RosterService.class); CurrentBoaUser currentBoaUser = mock(CurrentBoaUser.class); when(currentBoaUser.get()).thenReturn(null); // 非校管理员 + // 请假类型只认 sys_dict(leave_type) 启用项(枚举已删除),mock 字典下发 key=1 + when(dictService.getLeaveTypeOptions()).thenReturn(Collections.singletonList(dictOption("1", "病假"))); leaveService = new LeaveServiceImpl(); ReflectionTestUtils.setField(leaveService, "leaveRepository", leaveRepository); @@ -227,6 +229,13 @@ class LeaveServiceImplClassCheckTest { return map; } + private static Map dictOption(String k, String v) { + Map m = new LinkedHashMap<>(); + m.put("k", k); + m.put("v", v); + return m; + } + private static RosterService.RosterEntry entry(Integer classId, String className) { RosterService.RosterEntry e = new RosterService.RosterEntry(); e.studentId = STU_USER_ID;