Commit eba6afa7d4c1e67f9c18570c7cc5a9dd2f3ecb41

Authored by zichun
1 parent 105b9039

feat(usr): user/staff/permission/userPermission entities + mappers REQ-USR-001

UserPermissionEntity 不含 bSelected 列——docs/03 § tUserPermission 修订版无此列
(关联记录存在即「已选」),早期 spec/plan 草稿与 SSoT 不一致,以 docs/03 为准。
backend/src/main/java/com/xly/erp/module/usr/entity/PermissionCategoryEntity.java 0 → 100644
  1 +package com.xly.erp.module.usr.entity;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.Data;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/** REQ-USR-001 引入。表 tPermissionCategory(详见 docs/03 § tPermissionCategory)。 */
  12 +@Data
  13 +@TableName("tPermissionCategory")
  14 +public class PermissionCategoryEntity {
  15 +
  16 + @TableId(value = "iIncrement", type = IdType.AUTO)
  17 + private Integer iIncrement;
  18 +
  19 + @TableField("sId")
  20 + private String sId;
  21 +
  22 + @TableField("sBrandsId")
  23 + private String sBrandsId;
  24 +
  25 + @TableField("sSubsidiaryId")
  26 + private String sSubsidiaryId;
  27 +
  28 + @TableField("tCreateDate")
  29 + private LocalDateTime tCreateDate;
  30 +
  31 + @TableField("sCategoryCode")
  32 + private String sCategoryCode;
  33 +
  34 + @TableField("sCategoryName")
  35 + private String sCategoryName;
  36 +
  37 + @TableField("iParentId")
  38 + private Integer iParentId;
  39 +
  40 + @TableField("iSortOrder")
  41 + private Integer iSortOrder;
  42 +
  43 + @TableField("sCreatedBy")
  44 + private String sCreatedBy;
  45 +
  46 + @TableField("bDeleted")
  47 + private Boolean bDeleted;
  48 +
  49 + @TableField("tDeletedDate")
  50 + private LocalDateTime tDeletedDate;
  51 +
  52 + @TableField("sDeletedBy")
  53 + private String sDeletedBy;
  54 +}
... ...
backend/src/main/java/com/xly/erp/module/usr/entity/StaffEntity.java 0 → 100644
  1 +package com.xly.erp.module.usr.entity;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.Data;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/** REQ-USR-001 引入。表 tStaff(详见 docs/03 § tStaff)。 */
  12 +@Data
  13 +@TableName("tStaff")
  14 +public class StaffEntity {
  15 +
  16 + @TableId(value = "iIncrement", type = IdType.AUTO)
  17 + private Integer iIncrement;
  18 +
  19 + @TableField("sId")
  20 + private String sId;
  21 +
  22 + @TableField("sBrandsId")
  23 + private String sBrandsId;
  24 +
  25 + @TableField("sSubsidiaryId")
  26 + private String sSubsidiaryId;
  27 +
  28 + @TableField("tCreateDate")
  29 + private LocalDateTime tCreateDate;
  30 +
  31 + @TableField("sStaffNo")
  32 + private String sStaffNo;
  33 +
  34 + @TableField("sStaffName")
  35 + private String sStaffName;
  36 +
  37 + @TableField("sDepartment")
  38 + private String sDepartment;
  39 +
  40 + @TableField("sCreatedBy")
  41 + private String sCreatedBy;
  42 +
  43 + @TableField("bDeleted")
  44 + private Boolean bDeleted;
  45 +
  46 + @TableField("tDeletedDate")
  47 + private LocalDateTime tDeletedDate;
  48 +
  49 + @TableField("sDeletedBy")
  50 + private String sDeletedBy;
  51 +}
... ...
backend/src/main/java/com/xly/erp/module/usr/entity/UserEntity.java 0 → 100644
  1 +package com.xly.erp.module.usr.entity;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.Data;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/** REQ-USR-001 用户主数据。表 tUser(详见 docs/03 § tUser)。 */
  12 +@Data
  13 +@TableName("tUser")
  14 +public class UserEntity {
  15 +
  16 + @TableId(value = "iIncrement", type = IdType.AUTO)
  17 + private Integer iIncrement;
  18 +
  19 + @TableField("sId")
  20 + private String sId;
  21 +
  22 + @TableField("sBrandsId")
  23 + private String sBrandsId;
  24 +
  25 + @TableField("sSubsidiaryId")
  26 + private String sSubsidiaryId;
  27 +
  28 + @TableField("tCreateDate")
  29 + private LocalDateTime tCreateDate;
  30 +
  31 + @TableField("sUserNo")
  32 + private String sUserNo;
  33 +
  34 + @TableField("sUserName")
  35 + private String sUserName;
  36 +
  37 + @TableField("iStaffId")
  38 + private Integer iStaffId;
  39 +
  40 + @TableField("sUserType")
  41 + private String sUserType;
  42 +
  43 + @TableField("sLanguage")
  44 + private String sLanguage;
  45 +
  46 + @TableField("bCanModifyDocs")
  47 + private Boolean bCanModifyDocs;
  48 +
  49 + @TableField("sPasswordHash")
  50 + private String sPasswordHash;
  51 +
  52 + @TableField("tLastLoginDate")
  53 + private LocalDateTime tLastLoginDate;
  54 +
  55 + @TableField("sCreatedBy")
  56 + private String sCreatedBy;
  57 +
  58 + @TableField("bDeleted")
  59 + private Boolean bDeleted;
  60 +
  61 + @TableField("tDeletedDate")
  62 + private LocalDateTime tDeletedDate;
  63 +
  64 + @TableField("sDeletedBy")
  65 + private String sDeletedBy;
  66 +}
... ...
backend/src/main/java/com/xly/erp/module/usr/entity/UserPermissionEntity.java 0 → 100644
  1 +package com.xly.erp.module.usr.entity;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.Data;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/** REQ-USR-001 引入。表 tUserPermission(详见 docs/03 § tUserPermission)。 */
  12 +@Data
  13 +@TableName("tUserPermission")
  14 +public class UserPermissionEntity {
  15 +
  16 + @TableId(value = "iIncrement", type = IdType.AUTO)
  17 + private Integer iIncrement;
  18 +
  19 + @TableField("sId")
  20 + private String sId;
  21 +
  22 + @TableField("sBrandsId")
  23 + private String sBrandsId;
  24 +
  25 + @TableField("sSubsidiaryId")
  26 + private String sSubsidiaryId;
  27 +
  28 + @TableField("tCreateDate")
  29 + private LocalDateTime tCreateDate;
  30 +
  31 + @TableField("iUserId")
  32 + private Integer iUserId;
  33 +
  34 + @TableField("iCategoryId")
  35 + private Integer iCategoryId;
  36 +
  37 + // docs/03 § tUserPermission 修订版无 bSelected 列——关联记录存在即「已选」,无需独立 flag。
  38 + // 早期 REQ-USR-001 spec/plan 草稿曾包含 bSelected,与 SSoT docs/03 不一致;以 docs/03 为准。
  39 +
  40 + @TableField("sCreatedBy")
  41 + private String sCreatedBy;
  42 +}
... ...
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 com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.xly.erp.module.usr.entity.PermissionCategoryEntity;
  5 +
  6 +public interface PermissionCategoryMapper extends BaseMapper<PermissionCategoryEntity> {
  7 +}
... ...
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 com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.xly.erp.module.usr.entity.StaffEntity;
  5 +
  6 +public interface StaffMapper extends BaseMapper<StaffEntity> {
  7 +}
... ...
backend/src/main/java/com/xly/erp/module/usr/mapper/UserMapper.java 0 → 100644
  1 +package com.xly.erp.module.usr.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.xly.erp.module.usr.entity.UserEntity;
  5 +
  6 +public interface UserMapper extends BaseMapper<UserEntity> {
  7 +}
... ...
backend/src/main/java/com/xly/erp/module/usr/mapper/UserPermissionMapper.java 0 → 100644
  1 +package com.xly.erp.module.usr.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.xly.erp.module.usr.entity.UserPermissionEntity;
  5 +
  6 +public interface UserPermissionMapper extends BaseMapper<UserPermissionEntity> {
  7 +}
... ...
backend/src/test/java/com/xly/erp/module/usr/mapper/UsrMappersIT.java 0 → 100644
  1 +package com.xly.erp.module.usr.mapper;
  2 +
  3 +import com.xly.erp.module.usr.entity.PermissionCategoryEntity;
  4 +import com.xly.erp.module.usr.entity.StaffEntity;
  5 +import com.xly.erp.module.usr.entity.UserEntity;
  6 +import com.xly.erp.module.usr.entity.UserPermissionEntity;
  7 +import org.junit.jupiter.api.Test;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.boot.test.context.SpringBootTest;
  10 +import org.springframework.test.annotation.Rollback;
  11 +import org.springframework.test.context.ActiveProfiles;
  12 +import org.springframework.transaction.annotation.Transactional;
  13 +
  14 +import java.time.LocalDateTime;
  15 +
  16 +import static org.assertj.core.api.Assertions.assertThat;
  17 +
  18 +@SpringBootTest
  19 +@ActiveProfiles("test")
  20 +@Transactional
  21 +@Rollback
  22 +class UsrMappersIT {
  23 +
  24 + @Autowired UserMapper userMapper;
  25 + @Autowired StaffMapper staffMapper;
  26 + @Autowired PermissionCategoryMapper permissionCategoryMapper;
  27 + @Autowired UserPermissionMapper userPermissionMapper;
  28 +
  29 + @Test
  30 + void staff_insertAndSelect() {
  31 + StaffEntity s = new StaffEntity();
  32 + s.setSStaffNo("staff_" + System.nanoTime());
  33 + s.setSStaffName("张三");
  34 + s.setSDepartment("研发部");
  35 + s.setBDeleted(false);
  36 + s.setTCreateDate(LocalDateTime.now());
  37 + assertThat(staffMapper.insert(s)).isEqualTo(1);
  38 + assertThat(s.getIIncrement()).isPositive();
  39 + StaffEntity loaded = staffMapper.selectById(s.getIIncrement());
  40 + assertThat(loaded.getSStaffName()).isEqualTo("张三");
  41 + assertThat(loaded.getSDepartment()).isEqualTo("研发部");
  42 + }
  43 +
  44 + @Test
  45 + void permissionCategory_insertAndSelect() {
  46 + PermissionCategoryEntity p = new PermissionCategoryEntity();
  47 + p.setSCategoryCode("cat_" + System.nanoTime());
  48 + p.setSCategoryName("基础权限");
  49 + p.setISortOrder(0);
  50 + p.setBDeleted(false);
  51 + p.setTCreateDate(LocalDateTime.now());
  52 + assertThat(permissionCategoryMapper.insert(p)).isEqualTo(1);
  53 + PermissionCategoryEntity loaded = permissionCategoryMapper.selectById(p.getIIncrement());
  54 + assertThat(loaded.getSCategoryName()).isEqualTo("基础权限");
  55 + }
  56 +
  57 + @Test
  58 + void user_insertAndSelect() {
  59 + UserEntity u = new UserEntity();
  60 + u.setSUserNo("u_" + System.nanoTime());
  61 + u.setSUserName("alice_" + System.nanoTime());
  62 + u.setSUserType("普通用户");
  63 + u.setSLanguage("zh");
  64 + u.setBCanModifyDocs(false);
  65 + u.setSPasswordHash("$2a$10$abcdefghijklmnopqrstuv");
  66 + u.setBDeleted(false);
  67 + u.setTCreateDate(LocalDateTime.now());
  68 + assertThat(userMapper.insert(u)).isEqualTo(1);
  69 + UserEntity loaded = userMapper.selectById(u.getIIncrement());
  70 + assertThat(loaded.getSUserName()).startsWith("alice_");
  71 + assertThat(loaded.getSUserType()).isEqualTo("普通用户");
  72 + assertThat(loaded.getSLanguage()).isEqualTo("zh");
  73 + }
  74 +
  75 + @Test
  76 + void userPermission_insertAndSelect_requiresValidUserAndCategory() {
  77 + // 先建合法 user + category(FK 兜底)
  78 + UserEntity u = new UserEntity();
  79 + u.setSUserNo("upu_" + System.nanoTime());
  80 + u.setSUserName("upa_" + System.nanoTime());
  81 + u.setSUserType("普通用户");
  82 + u.setSLanguage("zh");
  83 + u.setBCanModifyDocs(false);
  84 + u.setSPasswordHash("$2a$10$x");
  85 + u.setBDeleted(false);
  86 + u.setTCreateDate(LocalDateTime.now());
  87 + userMapper.insert(u);
  88 +
  89 + PermissionCategoryEntity p = new PermissionCategoryEntity();
  90 + p.setSCategoryCode("upc_" + System.nanoTime());
  91 + p.setSCategoryName("upcat");
  92 + p.setISortOrder(0);
  93 + p.setBDeleted(false);
  94 + p.setTCreateDate(LocalDateTime.now());
  95 + permissionCategoryMapper.insert(p);
  96 +
  97 + UserPermissionEntity up = new UserPermissionEntity();
  98 + up.setIUserId(u.getIIncrement());
  99 + up.setICategoryId(p.getIIncrement());
  100 + up.setTCreateDate(LocalDateTime.now());
  101 + assertThat(userPermissionMapper.insert(up)).isEqualTo(1);
  102 + UserPermissionEntity loaded = userPermissionMapper.selectById(up.getIIncrement());
  103 + assertThat(loaded.getIUserId()).isEqualTo(u.getIIncrement());
  104 + assertThat(loaded.getICategoryId()).isEqualTo(p.getIIncrement());
  105 + }
  106 +}
... ...