2.1 KiB
2.1 KiB
员工信息维护分页重复修复实施记录
问题
- 页面:
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。
- 第 1 页:
- browser-use 打开真实页面
http://localhost:1025/maintain/baseStaff验证:- 第 1 页首行显示
许平 / 9020018。 - 点击分页第 2 页后,页面首行显示
郑丽 / 9020008,未再显示第一页首行员工。
- 第 1 页首行显示