补贴统计审计字段改造技术方案
为补贴统计列表和当前页面实际使用的异步 XLSX 导出补充备注、创建、审核与终审信息,并把大批量导出的峰值内存控制在固定批次范围内。
1. 已确认口径
一条实际到账补贴记录 = 列表一行。同一个人不同批次显示多行;同人同批次若出现多条到账记录,视为疑似重复发放,保留多行并记录异常,不静默合并。
- 新增备注、创建人/时间、审核人/时间、终审人/时间七列。
- 只改列表和异步导出
type=6。 - 当前页面没有同步导出入口;历史同步接口和遗留方法不在本期范围。
- 不新增 SQL,不修改补贴资金链路。
2. 数据来源
实际到账真源
aizhct_jsgx.yoshop_user_subsidy使用记录 ID、人员 ID、批次 ID、发放日期以及 money + used_money。只有终审到账数据进入统计。
批次审计真源
zhct_jsgx.ydy_subsidy_log通过 user_subsidy.log_id = subsidy_log.id 获取备注、创建、审核、终审字段。
| 页面字段 | 表字段 |
|---|---|
| 备注 | ydy_subsidy_log.note |
| 创建人 / 创建时间 | create_by / create_time |
| 审核人 / 审核时间 | reviewer / review_time |
| 终审人 / 终审时间 | final_reviewer / final_review_time |
姓名、手机号继续来自 ydy_staff;部门来自 ydy_staff_department + ydy_department,沿用现有数据权限。
3. 查询设计
- 从 AI 账户库按到账记录分页查询,不再按人员合并多个批次。
- 收集当前页或当前导出批次中的有效
log_id。 - 一次性查询主库
ydy_subsidy_log并建立批次映射。 - 批量查询人员、部门;禁止逐行查询。
- 列表总数改为数据库侧
COUNT(id),删除全量结果加载后在 PHP 中计数的做法。
历史兼容:
log_id=0 或批次缺失时,备注、创建人、创建时间降级使用 AI 到账记录;审核和终审字段显示 --。默认时间 2000-01-01 00:00:00 视为空值。4. 页面与接口
列顺序:序号、补贴日期、部门名称、姓名、手机号、补贴金额、备注、创建人、创建时间、审核人、审核时间、终审人、终审时间。
- 备注 180px,支持溢出提示。
- 时间列约 155px,空值显示
--。 - 保持横向滚动;合计行只计算补贴金额。
- 接口只增加响应字段,不改请求参数和响应外层结构。
5. 异步导出与内存门禁
当前真实入口:
POST /p/mealOrder/export,type=6,由 SubsidyReport::statisticExportToFile() 流式生成 XLSX。固定内存
每批 1000 行,当前批次查询人员、部门和发放批次,每行立即写入 XML,完成后释放数组。
当前批次过滤
按到账记录扫描,只查询和过滤当前 1000 条涉及的人员,避免全量 AI 用户 ID 和超长 IN 条件。
失败清理
调用 abort() 删除临时 XML 和 .tmp 文件。
Sheet 上限
超过 1,048,574 条明细提示缩小日期范围,不截断、不自动拆多 Sheet。
结论:内存复杂度由 O(总行数) 降为 O(1000行当前批次 + 当前映射)。主要剩余风险转为数据库耗时、磁盘空间和 OSS 上传时间。
6. 影响范围
| 预计修改 | 不修改 |
|---|---|
SubsidyReport.phpsubsidyStatistics.vue补贴统计专项测试 Apifox PC 响应字段 | 同步导出接口ExportMealOrder.php 分发数据库结构 新增、审核、终审和账户余额逻辑 |
7. 测试和验收
- 单人单批次、单人多批次、同人同批次重复到账异常。
- 手动、自动、批量导入三种来源。
- 历史批次缺失、默认时间、权限隔离和筛选回归。
- 13 列表头、明细、合计一致;特殊字符和换行可打开。
- 1万、10万、20万行测试,记录耗时、峰值内存和文件大小。
- 目标峰值内存不超过 256MB,20万行可生成、下载和打开。
8. 实现验证结果
开发与本地验证完成。专项 3/3、国信 37/37、数据权限 14/14、真实只读列表、真实 13 列 XLSX 和 Node 14 前端构建均通过。
| 明细行 | 总行数 | 耗时 | PHP 峰值内存 | 文件 |
|---|---|---|---|---|
| 10,000 | 10,002 | 4.418s | 2 MiB | 完整 |
| 100,000 | 100,002 | 40.545s | 2 MiB | 完整 |
| 200,000 | 200,002 | 85.147s | 2 MiB | 完整 |
完整记录见 implementation-verification.md。Apifox 增量契约已准备,真实导入需确认“智慧营养健康餐厅”目标目录。
9. 工时与审核
预计人工工时约 5 小时,包含方案、实现、测试、大批量异步导出验证和提交准备。
- ☑ 同意一条实际到账记录一行。
- ☑ 同意重复到账不静默合并。
- ☑ 同意只改列表和异步 type=6。
- ☑ 同意补贴日期继续使用 AI 到账表 push_date。
- ☑ 同意历史缺失审核字段显示 --。
- ☑ 同意超出单 Sheet 上限时提示拆分日期。
审核结论:通过并要求落地 审核人:用户 审核日期:2026-08-19