All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
4.0 KiB
4.0 KiB
shop-bulk-import Specification
Purpose
定义受控离线迁移工具从已核对的代理商 CSV 生成店铺初始事实 SQL,使维护者可以在执行前审核输入解析、目标库守卫和逐行计划,并以单事务手工执行。
Requirements
Requirement: 导入输入必须在生成 SQL 前完成全量预检
系统 SHALL 在生成 SQL 前校验 CSV 必备列、店铺名称/初始用户名/初始手机号同批唯一性、11 位手机号格式、上下级代理引用、业务员映射、默认角色、迁移操作者和稳定生成的店铺编号。上级代理必须按 CSV 的“奇成代理名称”唯一解析。
Scenario: 输入或映射错误被发现
- WHEN 工具发现任一 CSV 行、配置项或同批关系错误
- THEN 工具输出带 CSV 行号和原因的错误清单,不生成可执行导入 SQL
Scenario: 上级代理按 CSV 标识解析
- WHEN 子店铺的上级代理名称在同一 CSV 中唯一对应一个代理记录
- THEN 工具将该代理记录排在子店铺之前,并在结果清单中记录上级解析结果
Requirement: 生成的 SQL 必须在写入前校验目标库状态
系统 SHALL 在单事务 SQL 的任何店铺、账号、角色、钱包或审计写入前,校验配置指定的默认角色为启用客户角色、业务员映射为启用平台账号、迁移操作者为可用超级管理员,且目标库不存在同店铺编号、用户名或手机号的有效记录。
Scenario: 目标库冲突被发现
- WHEN 维护者执行的 SQL 发现角色、账号映射或任一目标记录冲突
- THEN SQL 以包含对应 CSV 行号和原因的错误终止,且不写入本批店铺、账号、角色、钱包或成功审计事实
Requirement: 批量导入 SQL 必须创建完整的店铺初始事实
系统 SHALL 为每个通过预检和目标库守卫的 CSV 记录创建启用的店铺、一个启用的店铺主账号、该账号和店铺的默认客户角色关联、主钱包和佣金钱包,并按配置写入平台业务员归属和成功审计。店铺默认角色必须是配置指定的启用客户角色。
Scenario: 成功导入店铺
- WHEN 维护者以单事务执行通过审核的导入 SQL
- THEN 每家店铺具有稳定生成的店铺编号、正确的上级层级和业务员归属,并拥有一个主账号、默认角色关联、主钱包、佣金钱包及成功创建审计
Scenario: SQL 中保存初始账号密码哈希
- WHEN 工具根据配置的初始密码规则生成店铺主账号 SQL
- THEN SQL 将该账号的 bcrypt 密码哈希写入数据库,结果清单、错误清单、摘要和控制台输出不包含初始密码明文
Requirement: 导入执行必须由维护者审核后以单事务手工确认
系统 SHALL 只生成 SQL 和审核产物,不直接连接或写入目标 PostgreSQL。维护者 SHALL 在审核通过后以 PostgreSQL 单事务模式执行生成的 SQL;任一记录创建失败时回滚整批。
Scenario: 仅运行生成器
- WHEN 操作者运行 Python 导入生成器
- THEN 工具仅生成审核产物和 SQL,不写入目标 PostgreSQL
Scenario: SQL 执行期间发生创建失败
- WHEN 维护者以单事务模式执行 SQL,且任一记录无法创建
- THEN PostgreSQL 回滚整批,且本批次不保留任何店铺、账号、角色关联、钱包或成功创建审计事实
Requirement: 导入结果必须可审核和重跑定位
系统 SHALL 为每次 SQL 生成输出不含明文密码的结果清单与摘要,至少包含源 CSV 行号、稳定店铺编号、店铺名称、层级、上级解析结果、业务员映射结果、计划状态和成功/失败统计。生成的 SQL、结果清单、错误清单和摘要 SHALL 使用同一批次标识以便审核和定位。
Scenario: 生成完成后审核
- WHEN 工具成功完成 SQL 生成
- THEN 操作者可通过结果清单核对每条源记录及其生成的店铺编号、层级和业务员归属,并通过摘要确认总数和待执行 SQL 文件