diff --git a/backend/src/main/java/com/xly/erp/module/usr/mapper/UserMapper.java b/backend/src/main/java/com/xly/erp/module/usr/mapper/UserMapper.java index 1333a45..e8aa0ba 100644 --- a/backend/src/main/java/com/xly/erp/module/usr/mapper/UserMapper.java +++ b/backend/src/main/java/com/xly/erp/module/usr/mapper/UserMapper.java @@ -2,6 +2,20 @@ package com.xly.erp.module.usr.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xly.erp.module.usr.entity.User; +import com.xly.erp.module.usr.vo.UserListVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface UserMapper extends BaseMapper { + + List pageWithFilter(@Param("field") String field, + @Param("matchOp") String matchOp, + @Param("value") Object value, + @Param("offset") int offset, + @Param("size") int size); + + long countWithFilter(@Param("field") String field, + @Param("matchOp") String matchOp, + @Param("value") Object value); } diff --git a/backend/src/main/java/com/xly/erp/module/usr/vo/UserListVO.java b/backend/src/main/java/com/xly/erp/module/usr/vo/UserListVO.java new file mode 100644 index 0000000..04bf148 --- /dev/null +++ b/backend/src/main/java/com/xly/erp/module/usr/vo/UserListVO.java @@ -0,0 +1,64 @@ +package com.xly.erp.module.usr.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.time.LocalDateTime; + +public class UserListVO { + + @JsonProperty("iIncrement") + private Integer iIncrement; + + @JsonProperty("sUserName") + private String sUserName; + + @JsonProperty("staffName") + private String staffName; + + @JsonProperty("sUserNo") + private String sUserNo; + + @JsonProperty("department") + private String department; + + @JsonProperty("sUserType") + private String sUserType; + + @JsonProperty("sLanguage") + private String sLanguage; + + @JsonProperty("bDeleted") + private Boolean bDeleted; + + @JsonProperty("tLastLoginDate") + private LocalDateTime tLastLoginDate; + + @JsonProperty("sCreatedBy") + private String sCreatedBy; + + @JsonProperty("tCreateDate") + private LocalDateTime tCreateDate; + + public Integer getIIncrement() { return iIncrement; } + public void setIIncrement(Integer iIncrement) { this.iIncrement = iIncrement; } + public String getSUserName() { return sUserName; } + public void setSUserName(String sUserName) { this.sUserName = sUserName; } + public String getStaffName() { return staffName; } + public void setStaffName(String staffName) { this.staffName = staffName; } + public String getSUserNo() { return sUserNo; } + public void setSUserNo(String sUserNo) { this.sUserNo = sUserNo; } + public String getDepartment() { return department; } + public void setDepartment(String department) { this.department = department; } + public String getSUserType() { return sUserType; } + public void setSUserType(String sUserType) { this.sUserType = sUserType; } + public String getSLanguage() { return sLanguage; } + public void setSLanguage(String sLanguage) { this.sLanguage = sLanguage; } + public Boolean getBDeleted() { return bDeleted; } + public void setBDeleted(Boolean bDeleted) { this.bDeleted = bDeleted; } + public LocalDateTime getTLastLoginDate() { return tLastLoginDate; } + public void setTLastLoginDate(LocalDateTime tLastLoginDate) { this.tLastLoginDate = tLastLoginDate; } + public String getSCreatedBy() { return sCreatedBy; } + public void setSCreatedBy(String sCreatedBy) { this.sCreatedBy = sCreatedBy; } + public LocalDateTime getTCreateDate() { return tCreateDate; } + public void setTCreateDate(LocalDateTime tCreateDate) { this.tCreateDate = tCreateDate; } +} diff --git a/backend/src/main/resources/mapper/usr/UserMapper.xml b/backend/src/main/resources/mapper/usr/UserMapper.xml new file mode 100644 index 0000000..28caade --- /dev/null +++ b/backend/src/main/resources/mapper/usr/UserMapper.xml @@ -0,0 +1,48 @@ + + + + + + u.iIncrement AS iIncrement, + u.sUserName AS sUserName, + s.sStaffName AS staffName, + u.sUserNo AS sUserNo, + s.sDepartment AS department, + u.sUserType AS sUserType, + u.sLanguage AS sLanguage, + u.bDeleted AS bDeleted, + u.tLastLoginDate AS tLastLoginDate, + u.sCreatedBy AS sCreatedBy, + u.tCreateDate AS tCreateDate + + + + + + + ${field} LIKE CONCAT('%', #{value}, '%') + ${field} NOT LIKE CONCAT('%', #{value}, '%') + ${field} = #{value} + + + + + + + + + + diff --git a/backend/src/test/java/com/xly/erp/module/usr/mapper/UserMapperIT.java b/backend/src/test/java/com/xly/erp/module/usr/mapper/UserMapperIT.java index b40b961..9e8cc40 100644 --- a/backend/src/test/java/com/xly/erp/module/usr/mapper/UserMapperIT.java +++ b/backend/src/test/java/com/xly/erp/module/usr/mapper/UserMapperIT.java @@ -94,6 +94,39 @@ class UserMapperIT { } @Test + void pageWithFilter_filtersAndJoins() { + jdbcTemplate.update( + "INSERT INTO tStaff (sBrandsId, sSubsidiaryId, tCreateDate, sStaffNo, sStaffName, sDepartment, " + + "sCreatedBy, bDeleted) VALUES ('XLY','XLY', NOW(), 'sp_test_lst_st', '员工X', '研发', 'STUB', 0)"); + Integer staffId = jdbcTemplate.queryForObject( + "SELECT iIncrement FROM tStaff WHERE sStaffNo = 'sp_test_lst_st'", Integer.class); + + User u1 = newUser("sp_test_lst_u1", "查询用户1"); + u1.setIStaffId(staffId); + userMapper.insert(u1); + User u2 = newUser("sp_test_lst_u2", "查询用户2"); + userMapper.insert(u2); + + java.util.List result = userMapper.pageWithFilter( + "u.sUserNo", "contains", "sp_test_lst_", 0, 10); + + assertThat(result).extracting(com.xly.erp.module.usr.vo.UserListVO::getSUserNo) + .contains("sp_test_lst_u1", "sp_test_lst_u2"); + com.xly.erp.module.usr.vo.UserListVO row1 = result.stream() + .filter(v -> "sp_test_lst_u1".equals(v.getSUserNo())).findFirst().orElseThrow(); + assertThat(row1.getStaffName()).isEqualTo("员工X"); + assertThat(row1.getDepartment()).isEqualTo("研发"); + com.xly.erp.module.usr.vo.UserListVO row2 = result.stream() + .filter(v -> "sp_test_lst_u2".equals(v.getSUserNo())).findFirst().orElseThrow(); + assertThat(row2.getStaffName()).isNull(); + + long total = userMapper.countWithFilter("u.sUserNo", "contains", "sp_test_lst_"); + assertThat(total).isGreaterThanOrEqualTo(2); + + jdbcTemplate.update("DELETE FROM tStaff WHERE sStaffNo = 'sp_test_lst_st'"); + } + + @Test void userPermissionMapper_deleteByUserId_removesAllRowsForGivenUser() { User user1 = newUser("sp_test_del_u1", "用户1"); userMapper.insert(user1);