# 员工信息维护分页重复修复实施记录 ## 问题 - 页面:`http://localhost:1025/maintain/baseStaff` - 接口:`GET /ccdi/baseStaff/list` - 现象:第一页和第二页存在相同员工。 - 复现结果:接口第一页和第二页出现 `9020004`、`9020005`、`9020009`、`9020003`、`9020008` 等重复员工。 ## 原因 员工列表 SQL 仅按 `create_time DESC` 排序。批量导入的员工会在同一批次写入相同 `create_time`,数据库在相同排序值之间没有稳定顺序,分页时可能导致同一员工跨页重复出现。 ## 修改内容 - `ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiBaseStaffMapper.xml` - 将员工分页列表排序从 `ORDER BY e.create_time DESC` 调整为 `ORDER BY e.create_time DESC, e.staff_id DESC`。 - 使用唯一的 `staff_id` 作为二级排序字段,保证同一创建时间内分页顺序稳定。 - `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/mapper/CcdiBaseStaffMapperTest.java` - 增加 Mapper XML 断言,防止后续误删稳定分页排序。 ## 影响范围 - 仅影响员工信息维护列表分页顺序。 - 不改变筛选条件、列表字段、总数统计、导入、新增、编辑、删除逻辑。 ## 验证 - 修改前已通过后端接口复现第一页和第二页员工重复。 - `node -e` 轻量 XML 断言通过,确认 Mapper 中包含 `ORDER BY e.create_time DESC, e.staff_id DESC`。 - `mvn -pl ruoyi-admin -am clean package -DskipTests` 构建通过。 - `mvn -pl ccdi-info-collection -am -Dtest=CcdiBaseStaffMapperTest -Dsurefire.failIfNoSpecifiedTests=false test` 通过,`CcdiBaseStaffMapperTest` 共 2 个用例全部通过。 - 后端接口复验: - 第 1 页:`9020018` 至 `9020009`。 - 第 2 页:`9020008` 至 `9020001`,并继续显示后续员工。 - 第 1 页与第 2 页 `staffId` 交集为 `none`。 - browser-use 打开真实页面 `http://localhost:1025/maintain/baseStaff` 验证: - 第 1 页首行显示 `许平 / 9020018`。 - 点击分页第 2 页后,页面首行显示 `郑丽 / 9020008`,未再显示第一页首行员工。