Commit 56294ee0a2b8b3b4467c530de079a6d77430d5bf
1 parent
5ecface9
feat(usr): staff + permission-category existence mappers REQ-USR-001
Showing
4 changed files
with
132 additions
and
0 deletions
backend/src/main/java/com/xly/erp/module/usr/mapper/PermissionCategoryMapper.java
0 → 100644
| 1 | +package com.xly.erp.module.usr.mapper; | ||
| 2 | + | ||
| 3 | +import org.apache.ibatis.annotations.Mapper; | ||
| 4 | +import org.apache.ibatis.annotations.Param; | ||
| 5 | +import org.apache.ibatis.annotations.Select; | ||
| 6 | + | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +@Mapper | ||
| 10 | +public interface PermissionCategoryMapper { | ||
| 11 | + | ||
| 12 | + @Select("<script>" | ||
| 13 | + + "SELECT COUNT(1) FROM tPermissionCategory " | ||
| 14 | + + "WHERE bDeleted = 0 AND iIncrement IN " | ||
| 15 | + + "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>" | ||
| 16 | + + "</script>") | ||
| 17 | + int countActiveByIds(@Param("ids") List<Integer> ids); | ||
| 18 | +} |
backend/src/main/java/com/xly/erp/module/usr/mapper/StaffMapper.java
0 → 100644
| 1 | +package com.xly.erp.module.usr.mapper; | ||
| 2 | + | ||
| 3 | +import org.apache.ibatis.annotations.Mapper; | ||
| 4 | +import org.apache.ibatis.annotations.Param; | ||
| 5 | +import org.apache.ibatis.annotations.Select; | ||
| 6 | + | ||
| 7 | +@Mapper | ||
| 8 | +public interface StaffMapper { | ||
| 9 | + | ||
| 10 | + @Select("SELECT 1 FROM tStaff WHERE iIncrement = #{id} AND bDeleted = 0 LIMIT 1") | ||
| 11 | + Integer findActiveStaffFlag(@Param("id") Integer id); | ||
| 12 | + | ||
| 13 | + default boolean existsActiveById(Integer id) { | ||
| 14 | + return findActiveStaffFlag(id) != null; | ||
| 15 | + } | ||
| 16 | +} |
backend/src/test/java/com/xly/erp/module/usr/mapper/PermissionCategoryMapperIT.java
0 → 100644
| 1 | +package com.xly.erp.module.usr.mapper; | ||
| 2 | + | ||
| 3 | +import org.junit.jupiter.api.AfterEach; | ||
| 4 | +import org.junit.jupiter.api.BeforeEach; | ||
| 5 | +import org.junit.jupiter.api.Test; | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 8 | +import org.springframework.jdbc.core.JdbcTemplate; | ||
| 9 | +import org.springframework.test.context.ActiveProfiles; | ||
| 10 | + | ||
| 11 | +import java.util.List; | ||
| 12 | + | ||
| 13 | +import static org.assertj.core.api.Assertions.assertThat; | ||
| 14 | + | ||
| 15 | +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) | ||
| 16 | +@ActiveProfiles("test") | ||
| 17 | +class PermissionCategoryMapperIT { | ||
| 18 | + | ||
| 19 | + @Autowired | ||
| 20 | + private PermissionCategoryMapper permissionCategoryMapper; | ||
| 21 | + | ||
| 22 | + @Autowired | ||
| 23 | + private JdbcTemplate jdbcTemplate; | ||
| 24 | + | ||
| 25 | + @BeforeEach | ||
| 26 | + @AfterEach | ||
| 27 | + void cleanup() { | ||
| 28 | + jdbcTemplate.update("DELETE FROM tPermissionCategory WHERE sCategoryCode LIKE 'sp_test_%'"); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + @Test | ||
| 32 | + void countActiveByIds_returnsCorrectCount() { | ||
| 33 | + Integer cat1 = insertCategory("sp_test_c1", "权限1", false); | ||
| 34 | + Integer cat2 = insertCategory("sp_test_c2", "权限2", false); | ||
| 35 | + Integer cat3 = insertCategory("sp_test_c3", "权限3", true); | ||
| 36 | + | ||
| 37 | + assertThat(permissionCategoryMapper.countActiveByIds(List.of(cat1, cat2, cat3))).isEqualTo(2); | ||
| 38 | + assertThat(permissionCategoryMapper.countActiveByIds(List.of(cat1, 99999991))).isEqualTo(1); | ||
| 39 | + assertThat(permissionCategoryMapper.countActiveByIds(List.of(99999991))).isZero(); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + private Integer insertCategory(String code, String name, boolean deleted) { | ||
| 43 | + jdbcTemplate.update( | ||
| 44 | + "INSERT INTO tPermissionCategory (sBrandsId, sSubsidiaryId, tCreateDate, sCategoryCode, sCategoryName, " | ||
| 45 | + + "iSortOrder, sCreatedBy, bDeleted) " | ||
| 46 | + + "VALUES ('XLY','XLY', NOW(), ?, ?, 0, 'STUB_ADMIN', ?)", | ||
| 47 | + code, name, deleted ? 1 : 0); | ||
| 48 | + return jdbcTemplate.queryForObject( | ||
| 49 | + "SELECT iIncrement FROM tPermissionCategory WHERE sCategoryCode = ?", Integer.class, code); | ||
| 50 | + } | ||
| 51 | +} |
backend/src/test/java/com/xly/erp/module/usr/mapper/StaffMapperIT.java
0 → 100644
| 1 | +package com.xly.erp.module.usr.mapper; | ||
| 2 | + | ||
| 3 | +import org.junit.jupiter.api.AfterEach; | ||
| 4 | +import org.junit.jupiter.api.BeforeEach; | ||
| 5 | +import org.junit.jupiter.api.Test; | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 8 | +import org.springframework.jdbc.core.JdbcTemplate; | ||
| 9 | +import org.springframework.test.context.ActiveProfiles; | ||
| 10 | + | ||
| 11 | +import static org.assertj.core.api.Assertions.assertThat; | ||
| 12 | + | ||
| 13 | +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) | ||
| 14 | +@ActiveProfiles("test") | ||
| 15 | +class StaffMapperIT { | ||
| 16 | + | ||
| 17 | + @Autowired | ||
| 18 | + private StaffMapper staffMapper; | ||
| 19 | + | ||
| 20 | + @Autowired | ||
| 21 | + private JdbcTemplate jdbcTemplate; | ||
| 22 | + | ||
| 23 | + @BeforeEach | ||
| 24 | + @AfterEach | ||
| 25 | + void cleanup() { | ||
| 26 | + jdbcTemplate.update("DELETE FROM tStaff WHERE sStaffNo LIKE 'sp_test_%'"); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + @Test | ||
| 30 | + void existsActiveById_handlesAliveDeletedMissing() { | ||
| 31 | + Integer aliveId = insertStaff("sp_test_st_alive", "活的", false); | ||
| 32 | + Integer deletedId = insertStaff("sp_test_st_dead", "死的", true); | ||
| 33 | + | ||
| 34 | + assertThat(staffMapper.existsActiveById(aliveId)).isTrue(); | ||
| 35 | + assertThat(staffMapper.existsActiveById(deletedId)).isFalse(); | ||
| 36 | + assertThat(staffMapper.existsActiveById(99999990)).isFalse(); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + private Integer insertStaff(String staffNo, String staffName, boolean deleted) { | ||
| 40 | + jdbcTemplate.update( | ||
| 41 | + "INSERT INTO tStaff (sBrandsId, sSubsidiaryId, tCreateDate, sStaffNo, sStaffName, sCreatedBy, bDeleted) " | ||
| 42 | + + "VALUES ('XLY','XLY', NOW(), ?, ?, 'STUB_ADMIN', ?)", | ||
| 43 | + staffNo, staffName, deleted ? 1 : 0); | ||
| 44 | + return jdbcTemplate.queryForObject( | ||
| 45 | + "SELECT iIncrement FROM tStaff WHERE sStaffNo = ?", Integer.class, staffNo); | ||
| 46 | + } | ||
| 47 | +} |