diff --git a/backend/src/main/java/com/xly/erp/module/mod/mapper/ModuleMapper.java b/backend/src/main/java/com/xly/erp/module/mod/mapper/ModuleMapper.java index bb81f20..421a3fc 100644 --- a/backend/src/main/java/com/xly/erp/module/mod/mapper/ModuleMapper.java +++ b/backend/src/main/java/com/xly/erp/module/mod/mapper/ModuleMapper.java @@ -5,6 +5,8 @@ import com.xly.erp.module.mod.entity.Module; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + public interface ModuleMapper extends BaseMapper { @Select("SELECT 1 FROM tModule WHERE iIncrement = #{id} AND bDeleted = 0 LIMIT 1") @@ -23,4 +25,9 @@ public interface ModuleMapper extends BaseMapper { default boolean hasActiveChildren(Integer parentId) { return findActiveChildFlag(parentId) != null; } + + @Select("SELECT iIncrement, sModuleNameZh, sDisplayType, sManageDeptEn, iParentId, iSortOrder " + + "FROM tModule WHERE bDeleted = 0 AND sModuleNameZh LIKE CONCAT('%', #{keyword}, '%') " + + "ORDER BY iSortOrder ASC, iIncrement ASC") + List selectActiveByKeyword(@Param("keyword") String keyword); } diff --git a/backend/src/test/java/com/xly/erp/module/mod/mapper/ModuleMapperIT.java b/backend/src/test/java/com/xly/erp/module/mod/mapper/ModuleMapperIT.java index 726f79f..2432da2 100644 --- a/backend/src/test/java/com/xly/erp/module/mod/mapper/ModuleMapperIT.java +++ b/backend/src/test/java/com/xly/erp/module/mod/mapper/ModuleMapperIT.java @@ -97,6 +97,33 @@ class ModuleMapperIT { assertThat(moduleMapper.hasActiveChildren(root.getIIncrement())).isFalse(); } + @Test + void selectActiveByKeyword_filtersAndOrders() { + Module a = newModule("sp_test_kw_a", "系统-A", null); a.setISortOrder(1); moduleMapper.insert(a); + Module b = newModule("sp_test_kw_b", "系统-B", null); b.setISortOrder(0); moduleMapper.insert(b); + Module c = newModule("sp_test_kw_c", "用户", null); c.setISortOrder(2); moduleMapper.insert(c); + Module d = newModule("sp_test_kw_d", "系统-D", null); d.setISortOrder(3); d.setBDeleted(true); moduleMapper.insert(d); + Module e = newModule("sp_test_kw_e", "测试", null); e.setISortOrder(4); moduleMapper.insert(e); + + java.util.List namesByEmpty = moduleMapper.selectActiveByKeyword("").stream() + .filter(m -> m.getSProcedureName() == null && m.getSModuleNameZh().matches("系统-[ABDE]|用户|测试")) + .map(Module::getSModuleNameZh).toList(); + // 只取本测试用例插入的 4 行(用 sProcedureName 与名字过滤会丢字段,改为按 iIncrement 集合判定) + java.util.Set insertedIds = java.util.Set.of( + a.getIIncrement(), b.getIIncrement(), c.getIIncrement(), e.getIIncrement()); + java.util.List empty = moduleMapper.selectActiveByKeyword("").stream() + .filter(m -> insertedIds.contains(m.getIIncrement())).toList(); + assertThat(empty).extracting(Module::getIIncrement) + .containsExactly(b.getIIncrement(), a.getIIncrement(), c.getIIncrement(), e.getIIncrement()); + + java.util.List sys = moduleMapper.selectActiveByKeyword("系统").stream() + .filter(m -> insertedIds.contains(m.getIIncrement())).toList(); + assertThat(sys).extracting(Module::getIIncrement) + .containsExactly(b.getIIncrement(), a.getIIncrement()); + + assertThat(moduleMapper.selectActiveByKeyword("不存在XYZ-zzz")).isEmpty(); + } + private Module newModule(String procedureName, String nameZh, Integer parentId) { Module m = new Module(); m.setSBrandsId("XLY");