Files
ccdi/docs/reports/implementation/2026-04-30-base-staff-pagination-stable-order-implementation.md
2026-05-06 14:04:21 +08:00

2.1 KiB

员工信息维护分页重复修复实施记录

问题

  • 页面:http://localhost:1025/maintain/baseStaff
  • 接口:GET /ccdi/baseStaff/list
  • 现象:第一页和第二页存在相同员工。
  • 复现结果:接口第一页和第二页出现 90200049020005902000990200039020008 等重复员工。

原因

员工列表 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 页:90200189020009
    • 第 2 页:90200089020001,并继续显示后续员工。
    • 第 1 页与第 2 页 staffId 交集为 none
  • browser-use 打开真实页面 http://localhost:1025/maintain/baseStaff 验证:
    • 第 1 页首行显示 许平 / 9020018
    • 点击分页第 2 页后,页面首行显示 郑丽 / 9020008,未再显示第一页首行员工。