订单统计工具升级需求
兼容性与输入
保留第四章默认查询、商品和状态组合筛选、全量统计及已实现的商品统计。使用 Python 3 标准库,不修改输入,不增加服务或数据库。
增加 --input-dir 与 --output-dir。默认输入仍为脚本同目录的订单数据.json;显式目录相对路径按终端当前目录解释。批量模式读取目录第一层 .json 文件,按文件名排序,不递归。没有 JSON 文件时报错;每份文件须为 UTF-8 JSON 数组。任一文件读取失败、解析失败或顶层不是数组时,整批停止,不创建输出目录。空数组合法。
清洗与统计
记录必须为对象,只允许 id、product、status、channel 四个字段。前三项须为非空字符串(纯空白也为空);status 仅接受已支付、待支付、已取消。channel 缺失或空白时规范为未填写;非字符串值非法。其余字符串不自动修剪或改写。额外字段非法。
先隔离非法记录,再规范渠道,按四字段全等合并重复,再按 id 检查冲突。相同 id 的全部不同版本隔离,不按文件顺序选择状态。非法记录不参加冲突判断。
保留源文件名和从 1 开始的数组记录序号。重复问题只记录额外行;冲突每个不同版本记录一行,说明中保留该版本的所有来源,包括被合并的重复来源。
有效订单用于全量统计。商品、状态筛选同时满足,不改变全量统计;列表和导出按 id 排序。不计算金额或推断履约情况。
指标包括原始记录、非法记录、完全重复的额外记录、冲突编号、冲突版本、有效订单、全量各状态数量和匹配数。原始数=非法数+重复额外数+冲突版本数+有效数。
输出
未指定 --output-dir 不创建文件。指定时必须是新目录,已存在(包括空目录)一律拒绝;允许创建缺失父目录。完成输入格式校验后再创建输出。
- 筛选结果.csv:编号、商品、状态、来源渠道;仅匹配记录,无匹配也写表头。
- 问题清单.csv:类型、订单编号、源文件、记录序号、说明;类型为重复、冲突、非法。不受筛选影响,无法取得编号时留空。
- 处理摘要.json:输入文件、清洗指标、全量状态统计、筛选条件、匹配数、是否存在待处理问题(冲突或非法)。
CSV 使用 utf-8-sig,标准库 csv 配合 newline="";JSON 使用 UTF-8。写入失败明确报告,可能留下部分文件,应检查后改用新目录重试,不报告成功。
退出码:0 为正常(重复及合法空输入不导致失败);1 为处理完成但有冲突或非法记录;2 为参数、读取、格式、顶层结构或输出失败。指定输出且退出码为 1 时,结果仍已完整写出。
README 写清真实实现、运行方式、规则、实际检查和限制。
