# 三端 1:1 回归比对报告

> 比对对象：**demo**（`/data/www/files/rmsys/`，前端硬编码数据）
> 　　　　　**正式工程**（`/data/www/files/rmsys-app/`，ASP.NET Core 8 + MySQL 5.7 + Android）
> 比对时间：2026-10-17　比对方式：脚本化抓取实测，非目测
> 结论：**结构与数据 100% 对齐，3 处主动修正见第五节**

---

## 一、数据一致性（demo 内置数据 vs MySQL）

比对 25 个字段 × 12 名干部，外加 3 张子表。

| 比对项 | 数量 | 结果 |
|---|---|---|
| 干部主表字段 | 25 字段 × 12 人 = 300 项 | ✔ **全部一致，0 差异** |
| 简历 | 62 条（时间段 + 内容逐字） | ✔ 一致 |
| 家庭主要成员 | 24 条（称谓/姓名/年龄/政治面貌/工作单位） | ✔ 一致 |
| 批注 | 5 条（正文逐字） | ✔ 一致 |

比对脚本：`tools/regress_data.py`（可重跑）

---

## 二、后台界面结构（demo vs 正式工程）

### 侧栏菜单（7 项，全部一致）

```
会议管理 / 任免表及考察材料 12 / 数据包管理 / 处室维护 / PAD端数据设置 / 用户与登录管理 / 系统与审计
```

### 各模块表头与行数

| 模块 | demo 表头 | 正式工程 | 列数 | 行数 | 结果 |
|---|---|---|---|---|---|
| 会议管理 | 届次号\|会议类型\|会议名称\|日期时间\|地点\|主持人\|密级\|口令级别\|状态\|上会人数\|材料完整度\|操作 | 同 | 12 | 3 = 3 | ✔ |
| 任免表及考察材料·任免文件 | 操作\|序号\|所属处室\|文件名称\|文号\|干部人数\|页数\|上传人\|上传时间\|版本\|状态 | 同 | 11 | 3 = 3 | ✔ |
| 任免表及考察材料·任免表 | 操作\|现任职务\|序号\|姓名\|出生年月\|民族\|籍贯\|入党时间\|参加工作时间\|全日制学历学位\|在职学历学位\|拟任（免）职务\|完整度\|状态 | 同 | 14 | 12 = 12 | ✔ |
| 任免表及考察材料·考察材料 | 操作\|上传人\|上传时间\|序号\|姓名\|所属处室\|考察材料\|页数 | 同 | 8 | 12 = 12 | ✔ |
| 数据包管理 | 包编号\|所属会议\|内容范围\|大小\|加密\|有效期\|绑定PAD\|状态\|生成时间\|操作 | 同 | 10 | 2 = 2 | ✔ |
| PAD端数据设置 | PAD编号\|型号\|责任人 / 席位\|状态\|绑定会议\|最后在线\|操作 | 同 | 7 | 8 = 8 | ✔ |
| 用户与登录管理 | 登录账号\|姓名\|角色\|所属处室\|数据权限\|状态\|最后登录\|登录IP\|操作 | 同 | 9 | 9 = 9 | ✔ |
| 系统与审计 | 时间\|操作人\|角色\|动作\|对象\|来源设备 | 同 | 6 | 6 = 6 | ✔ |
| 处室维护 | 序号\|处室名称\|职责范围\|负责人\|上会干部\|用于会议\|排序\|状态\|操作 | 同 | 9 | 3 = 3 | ✔ |

### 逐行抽检（会议管理，与 demo 逐字一致）

```
第192次 | 部务会     | 中共海东市委第192次部务会   | 2026-10-12 09:00 | 市委组织部三楼会议室 | 市委组织部部长 | 机密 | B级 | 材料已审核 | 12 人 | 2 人待补件
第58次  | 常委会     | 中共海东市委第58次常委会会议 | 2026-10-15 09:00 | 市委常委会议室      | 市委书记      | 机密 | A级 | 筹备中    | 12 人 | 2 人待补件
—       | 书记专题会 | 中共海东市委书记专题会议    | 2026-10-11 15:00 | 市委书记办公室      | 市委书记      | 机密 | A级 | 已归档    | 12 人 | 2 人待补件
```

### 其他模块抽检

```
数据包:  PK20261012-01 | 中共海东市委第192次部务会 | 全部处室 · 任免表+考察材料 | 218 MB
         PK20261011-02 | 中共海东市委书记专题会议   | 全部干部 · 任免表         | 46 MB | 已过期 | 已销毁
PAD:     PAD-01 | 华为 MatePad 11 | 部长 | 在线     … PAD-07 | 人事处 | 未加载 … PAD-08 | 备用 | 在库
用户:    wangkc | 王科长 | 干部科科长 | 干部一处      … 共 9 个（含 1 个停用）
日志:    2026-10-10 16:20 | 王科长 | 干部科科长 | 生成数据包 | PK20261012-01 | PC-GY-021
```

---

## 三、PAD 端

### 3.1 页面与数据链

| 检查项 | 结果 |
|---|---|
| 任免审批表行数 | **23 行**（与 demo 一致） |
| 表格栅格 | 8 列，竖线偏差 ≤0.13pp，无溢出 |
| 考察材料 | 由 `perf / care / suggest` 生成，标题「关于张建国同志的考察材料」✔ |
| 汇报材料 | 「关于张建国同志的汇报材料」✔ |
| 简历 | 6 条 ✔ |
| 数据来源 | **SQLite 数据包**（非硬编码），经 JS 桥注入，0 报错 |

### 3.2 APK 验证

| 项 | 结果 |
|---|---|
| 包名 / 版本 | `cn.haidong.zzb.rmsys` 1.0.0 |
| minSdk / targetSdk | 26 / 34 |
| 应用名 | 任免上会 |
| 图标 | 自适应图标（官方党徽 + 深红金环） |
| assets | `assets/web/pad.html` 96 KB + 党徽 2 个 ✔ |
| 签名 | 自建 keystore，SHA-256 `4F:00:B2:38:…:72:28` |
| INTERNET 权限 | **未申请**（离线设计） |

---

## 四、数据包（后台 → PAD 唯一通道）

| 检查项 | 结果 |
|---|---|
| 生成 | 108 KB，`PK20261012-01` |
| 校验 | ✔ 通过（表齐全 / 配置齐全 / 顺序连续 / 姓名合规 / 每人有简历 / 清单含必需类型） |
| 配置下发 | 有效期、水印、字号、清除策略、7 个开关、下发清单、绑定设备、口令哈希 **全部在包内** |
| 绑定设备 | 8 台（见第五节说明） |

---

## 五、主动修正的 3 处（与 demo 不同，均为 demo 自身不一致）

| # | demo 的问题 | 正式工程的处理 | 理由 |
|---|---|---|---|
| 1 | 数据包「绑定PAD」写 12，但 PAD 设备列表只有 8 台 | 统一为 **8 台** | demo 自相矛盾。绑定数取实际设备数，才能被 PAD 校验逻辑使用 |
| 2 | 后台「现任职务」列省略了「海东市」前缀（如「市发展和改革委员会…」） | 显示 **完整职务名**（「海东市发展和改革委员会…」） | demo 是为窄列显示截断的；数据库存全称更准确，且列宽已容纳 |
| 3 | 页脚写「演示环境 · 数据为模拟数据」 | 改为「**已连接数据库 rmsys@192.168.20.66**」 | 数据已来自真库，文案必须与事实一致 |

---

## 六、demo 中仍然存在、未擅自改动的 1 处

**郑海燕**拟任职务为「**邓小平故里管理局**党组成员、副局长」——这是**广安**的机构，出现在「海东市」干部身上不合理。
此前那轮「广安→海东」替换把含「广安」二字的都换了，但该机构名不含「广安」故漏掉。

**未擅自修改**：这属于业务内容，需你确认改成哪个海东本地对口机构（如海东市文体旅游广电局、喇家遗址博物馆等），确认后我同步改 demo 与数据库。

---

## 七、复现方式

```bash
# 数据一致性
cd /data/www/files/rmsys-app && python3 tools/regress_data.py

# 数据包校验
cd backend && dotnet run --project src/Rmsys.Tools -- verify-package --file <数据包路径>

# 后台界面结构（浏览器控制台执行 capture 脚本，见 README）
```
