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

## 问题

- 页面：`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`，未再显示第一页首行员工。
