Explorar el Código

docs(uat): add S1-S4 test data plans

Document global UAT data generation guidance so S1-S4 test data shares one business flow across orders, work orders, procurement, delivery, and KPI validation.

Co-authored-by: Cursor <cursoragent@cursor.com>
skygu hace 1 semana
padre
commit
7642e09f4e

+ 10 - 0
doc/README.md

@@ -47,6 +47,16 @@
 | [Windows后端WinSW守护重启方案.md](./Windows后端WinSW守护重启方案.md) | Windows 服务器上使用 WinSW 守护后端服务、自动重启与日志落盘 |
 | [Windows后端WinSW守护重启方案.md](./Windows后端WinSW守护重启方案.md) | Windows 服务器上使用 WinSW 守护后端服务、自动重启与日志落盘 |
 | [plan/S1/S1-订单管理-审批流程实施方案.md](./plan/S1/S1-订单管理-审批流程实施方案.md) | S1 订单审批实施方案 |
 | [plan/S1/S1-订单管理-审批流程实施方案.md](./plan/S1/S1-订单管理-审批流程实施方案.md) | S1 订单审批实施方案 |
 | [plan/S1-S3业务逻辑测试与数据准备方案.md](./plan/S1-S3业务逻辑测试与数据准备方案.md) | S1-S3 完整业务逻辑测试 case 与测试数据准备方案 |
 | [plan/S1-S3业务逻辑测试与数据准备方案.md](./plan/S1-S3业务逻辑测试与数据准备方案.md) | S1-S3 完整业务逻辑测试 case 与测试数据准备方案 |
+| [plan/S1-S4全局UAT场景测试数据生成方案.md](./plan/S1-S4全局UAT场景测试数据生成方案.md) | S1-S4 全局 UAT 场景测试数据主线,要求订单、工单、物料、采购、交货跨模块串联 |
+| [plan/S1/S1产销协同UAT测试数据抽取与导入方案.md](./plan/S1/S1产销协同UAT测试数据抽取与导入方案.md) | S1 UAT 场景化测试数据抽取范围、AIDOP 租户归属、导入顺序与验收 SQL |
+| [plan/S1/S1产销协同UAT候选数据清单与导入映射.md](./plan/S1/S1产销协同UAT候选数据清单与导入映射.md) | S1 UAT 首批候选单号、场景化造数原则、目标表映射、批次标记与 SQL 草案 |
+| [plan/S1/S1产销协同UAT数据生成执行任务书.md](./plan/S1/S1产销协同UAT数据生成执行任务书.md) | 给其它大模型或协作者执行 S1 UAT 数据生成的阶段任务、约束、确认点与验收标准 |
+| [plan/S2/S2制造协同UAT测试数据生成方案.md](./plan/S2/S2制造协同UAT测试数据生成方案.md) | S2 制造协同 UAT 测试数据包、工单排程、产线日历、日计划、看板与验收方向 |
+| [plan/S2/S2制造协同UAT数据生成执行任务书.md](./plan/S2/S2制造协同UAT数据生成执行任务书.md) | 给其它大模型或协作者执行 S2 UAT 数据生成的阶段任务、约束、确认点与验收标准 |
+| [plan/S3/S3供应协同UAT测试数据生成方案.md](./plan/S3/S3供应协同UAT测试数据生成方案.md) | S3 供应协同 UAT 测试数据包、物料需求、交货计划、采购、委外外协与看板验收方向 |
+| [plan/S3/S3供应协同UAT数据生成执行任务书.md](./plan/S3/S3供应协同UAT数据生成执行任务书.md) | 给其它大模型或协作者执行 S3 UAT 数据生成的阶段任务、约束、确认点与验收标准 |
+| [plan/S4/S4采购执行UAT测试数据生成方案.md](./plan/S4/S4采购执行UAT测试数据生成方案.md) | S4 采购执行 UAT 测试数据包,当前以测试报告驱动,覆盖交货、发货、退货、IQC 与欠料看板 |
+| [plan/S4/S4采购执行UAT数据生成执行任务书.md](./plan/S4/S4采购执行UAT数据生成执行任务书.md) | 给其它大模型或协作者执行 S4 UAT 数据生成的阶段任务、约束、确认点与验收标准 |
 | [plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md](./plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md) | S0 legacy BOM 表 CodeFirst 启动异常、根因与彻底治理步骤 |
 | [plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md](./plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md) | S0 legacy BOM 表 CodeFirst 启动异常、根因与彻底治理步骤 |
 | [plan/S8/S8数据库处理优化方案.md](./plan/S8/S8数据库处理优化方案.md) | S8 调度、检测日志、通知扫描与数据库写入压力优化方案 |
 | [plan/S8/S8数据库处理优化方案.md](./plan/S8/S8数据库处理优化方案.md) | S8 调度、检测日志、通知扫描与数据库写入压力优化方案 |
 | [plan/新系统数据库简明介绍与S1数据流.md](./plan/新系统数据库简明介绍与S1数据流.md) | 新系统数据库简明说明,并以 S1 为例说明数据中台流转 |
 | [plan/新系统数据库简明介绍与S1数据流.md](./plan/新系统数据库简明介绍与S1数据流.md) | 新系统数据库简明说明,并以 S1 为例说明数据中台流转 |

+ 217 - 0
doc/plan/S1-S4全局UAT场景测试数据生成方案.md

@@ -0,0 +1,217 @@
+# S1-S4 全局 UAT 场景测试数据生成方案
+
+## 1. 目标
+
+S1-S4 的 UAT 测试数据不能各模块独立造数,必须围绕同一批业务主线构造,形成可端到端验证的全局场景测试包。
+
+全局主线:
+
+```text
+S1 销售订单/交付需求
+  -> S2 工单/工序排程/日计划
+  -> S3 物料需求/采购申请/采购订单/齐套上线
+  -> S4 供应商交货/发货/IQC/退货/欠料
+  -> 回写 S3/S2/S1 看板、DWD、KPI
+```
+
+本方案不是生产迁移,不要求照搬旧库全字段和旧主键。旧 DOP 数据库仅作为真实业务素材库,最终目标是构造一套归属 AIDOP 租户、跨模块可串联、可演示、可反复测试的数据包。
+
+## 2. 核心约束
+
+| 项 | 值 |
+|----|----|
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 全局批次号 | `S1S4_UAT_20260604_RQ_V1` |
+| 旧库主素材 | SQL Server `dopdemorq` |
+| 目标库 | MySQL `aidopdev` |
+
+约束:
+
+- 所有数据必须写入 AIDOP 租户,不得写入 Demo 租户。
+- S2/S3/S4 的 P0 数据优先复用 S1 的候选订单、订单明细、物料和客户。
+- S2 工单必须能追溯到 S1 订单明细。
+- S3 物料需求必须能追溯到 S2 工单或 S1 订单需求。
+- S4 交货、发货、退货必须能追溯到 S3 采购订单或交货计划。
+- 所有数据需带批次标记,便于人工识别、复查和必要时清理。
+- 不要求复杂回滚脚本。
+
+## 3. 全局 P0 场景包
+
+建议首轮 P0 只做 5-10 条完整链路订单,验证通过后再扩展到完整冗余包。
+
+### 3.1 主闭环样例
+
+| 链路节点 | 数据要求 |
+|----------|----------|
+| S1 销售订单 | 5-10 张销售订单,每单不少于 2 行订单明细 |
+| 客户/物料 | 每张订单能关联客户、成品物料、BOM 或关键半成品 |
+| S2 工单 | 每个订单明细至少生成或关联 1 个工单 |
+| S2 工序 | 每个工单不少于 2 道工序 |
+| S2 日计划 | 每个工单至少 1 条可执行日计划 |
+| S3 物料需求 | 每个工单至少 2 条物料需求 |
+| S3 采购申请 | 缺料物料生成采购申请 |
+| S3 采购订单 | 采购申请生成采购订单,每单不少于 2 行 |
+| S4 供应商交货 | 采购订单生成供应商交货记录 |
+| S4 供应商发货 | 部分交货记录生成发货单 |
+| S4 IQC/退货 | 至少 1 条 IQC 退货或采购退货样例 |
+| 看板/KPI | S1-S4 均有可统计指标和异常样例 |
+
+### 3.2 状态覆盖样例
+
+| 状态类型 | 数据要求 |
+|----------|----------|
+| 正常完成 | 订单、工单、采购、交货、发货完整闭环 |
+| 部分完成 | 订单部分发货、采购部分到货、工单部分完工 |
+| 异常延期 | 供应商延期导致 S3/S4 风险,并影响 S1 交付 |
+| 缺料风险 | S2 工单物料不足,S3 齐套上线看板显示缺料 |
+| 质量退货 | S4 IQC 不合格退货,影响 S3 供应风险 |
+| 空状态 | 某些跟踪子表为空,但主链路页面可正常展示 |
+
+## 4. 全局字段关联
+
+| 关联对象 | 全局关联键 | 说明 |
+|----------|------------|------|
+| 销售订单 | `order_no` / `bill_no` | S1 主线起点 |
+| 订单明细 | `order_line_id` / `item_code` | 关联成品、工单和需求 |
+| 工单 | `work_order_no` | S2 主线,需引用 S1 订单明细 |
+| 工序 | `work_order_no + operation_code` | 排程、外协、执行进度使用 |
+| 物料需求 | `work_order_no + item_code` | S3 需求计划与齐套 |
+| 采购申请 | `pr_no` | 来源于缺料需求 |
+| 采购订单 | `po_no` | S3/S4 共用主线 |
+| 采购订单行 | `po_no + line_no + item_code` | 关联交货、发货、退货 |
+| 供应商 | `supplier_code` | S3/S4 供应商维度 |
+| 交货计划 | `delivery_plan_no` | S3 交货计划,S4 交货管理来源 |
+| 供应商发货单 | `ship_no` | S4 发货、标签、IQC |
+| IQC/退货 | `inspection_no` / `return_no` | 质量退货和采购退货 |
+
+## 5. 模块职责边界
+
+### 5.1 S1 产销协同
+
+S1 是全局链路起点,负责提供:
+
+- 销售订单和订单明细。
+- 客户和成品物料。
+- 交付日期和交付状态。
+- 订单交付看板和 S1 KPI。
+
+### 5.2 S2 制造协同
+
+S2 必须基于 S1 订单明细生成或关联:
+
+- 工单。
+- 工序排程。
+- 可执行日计划。
+- 产线日历、休息、节假日、加班。
+- 工单执行进度。
+- S2 看板和 KPI。
+
+### 5.3 S3 供应协同
+
+S3 必须基于 S2 工单和物料缺口生成或关联:
+
+- 物料需求计划。
+- 采购申请。
+- 采购订单。
+- 交货计划。
+- 委外/外协订单。
+- 齐套上线看板。
+- S3 看板和 KPI。
+
+### 5.4 S4 采购执行
+
+S4 必须基于 S3 采购订单和交货计划生成或关联:
+
+- 供应商交货记录。
+- 供应商发货单。
+- 标签、送货单、质检附件。
+- 采购退货单。
+- IQC 退货查询。
+- 供应商欠料看板。
+- S4 看板和 KPI。
+
+S4 尚未完全完成开发,当前先按测试报告设计全局链路占位。待功能完成后需补做页面/API/表结构/数据中台链路交叉校验。
+
+## 6. 数据规模建议
+
+### 6.1 P0 试导
+
+| 数据类型 | 建议数量 |
+|----------|----------|
+| S1 销售订单 | 5-10 张 |
+| S1 订单明细 | 10-30 行 |
+| S2 工单 | 10-20 个 |
+| S2 工序 | 20-60 行 |
+| S2 日计划 | 10-30 行 |
+| S3 物料需求 | 20-80 行 |
+| S3 采购申请 | 5-15 张 |
+| S3/S4 采购订单 | 5-15 张 |
+| S4 交货记录 | 10-30 行 |
+| S4 发货单 | 3-10 张 |
+| S4 IQC/退货 | 2-5 张 |
+
+### 6.2 完整 UAT 包
+
+| 数据类型 | 建议数量 |
+|----------|----------|
+| S1 销售订单 | 50 张左右 |
+| S1 订单明细 | 150-300 行 |
+| S2 工单 | 80-150 个 |
+| S2 工序 | 200-500 行 |
+| S3 物料需求 | 300-1,000 行 |
+| 采购订单 | 50-150 张 |
+| 供应商 | 20-50 个 |
+| S4 发货/退货/IQC | 50-150 张 |
+
+## 7. 生成顺序
+
+1. 选定 S1 全局订单样本。
+2. 基于 S1 订单明细生成 S2 工单和工序。
+3. 基于 S2 工单生成物料需求和缺料样例。
+4. 基于 S3 物料需求生成采购申请和采购订单。
+5. 基于采购订单生成 S4 供应商交货和发货。
+6. 基于发货/收货生成 IQC、退货和欠料样例。
+7. 补造各模块异常、空状态和看板 KPI。
+8. 执行 S1-S4 MDP/DWD/KPI 验收。
+
+## 8. 验收顺序
+
+1. 验证所有业务表 `tenant_id = 1300000000001`。
+2. 验证 S1 订单能找到 S2 工单。
+3. 验证 S2 工单能找到 S3 物料需求。
+4. 验证 S3 物料需求能找到采购申请和采购订单。
+5. 验证 S3 采购订单能找到 S4 交货和发货。
+6. 验证 S4 IQC/退货能回写供应风险和欠料。
+7. 验证 S1-S4 页面和看板均能查询同一批主线数据。
+8. 验证 S1-S4 KPI 均有数据。
+
+## 9. 给执行模型的提示词
+
+```text
+你要为 Ai-DOP 新系统 UAT 环境生成 S1-S4 全局场景测试数据。
+
+请严格阅读:
+1. doc/plan/S1-S4全局UAT场景测试数据生成方案.md
+2. doc/plan/S1/S1产销协同UAT测试数据抽取与导入方案.md
+3. doc/plan/S2/S2制造协同UAT测试数据生成方案.md
+4. doc/plan/S3/S3供应协同UAT测试数据生成方案.md
+5. doc/plan/S4/S4采购执行UAT测试数据生成方案.md
+
+核心要求:
+- S1-S4 数据必须围绕同一批订单、工单、物料、供应商、采购订单串起来。
+- S2 工单必须来源于 S1 订单明细。
+- S3 物料需求必须来源于 S2 工单或 S1 订单需求。
+- S4 交货/发货/退货必须来源于 S3 采购订单。
+- 所有数据必须写入 AIDOP 租户 tenant_id = 1300000000001。
+- 不得写入 Demo 租户 tenant_id = 1300000000888。
+- 第一阶段只允许只读检查和生成 P0 SQL,未经人工确认不得写库。
+```
+
+## 10. 注意事项
+
+- 不要让 S2/S3/S4 独立造一批互不相关的数据。
+- 不要只满足单页面查询,必须满足跨模块下钻和看板统计。
+- 不要全量导入旧库。
+- S4 当前以测试报告驱动,待开发完成后必须复核字段和接口。
+- 不要把数据库密码写入脚本、日志或 Git。

+ 467 - 0
doc/plan/S1/S1产销协同UAT候选数据清单与导入映射.md

@@ -0,0 +1,467 @@
+# S1 产销协同 UAT 候选数据清单与导入映射
+
+## 1. 文档目的
+
+本文记录 S1 产销协同 UAT 首批测试数据的候选样本、场景化造数原则、目标表映射、导入顺序和 SQL 草案。
+
+本轮目标不是将旧 DOP 数据原样迁移到新系统,而是基于旧库真实业务样本,构造一套归属 AIDOP 租户、能在新系统完整串联的 UAT 测试数据。
+
+## 2. 执行原则
+
+- 旧库 `dopdemorq` 仅作为真实业务素材库,用于参考订单、客户、物料、数量、交期、工单、核验、排程、发货和 ASN 的真实取值。
+- UAT 新系统数据以场景闭环为目标,可以生成新 ID、补齐缺失字段、补造缺失环节。
+- 所有导入数据统一归属 AIDOP 租户:`tenant_id = 1300000000001`。
+- 不写入 Demo 租户:`tenant_id = 1300000000888`。
+- 每次导入必须带批次标记,推荐批次号:`S1_UAT_20260604_RQ_V1`。
+- 优先小批量试导 5-10 单,验证页面、MDP、DWD、KPI 后再扩大到完整数据包。
+- 本轮仅用于 UAT 测试数据准备,不要求复杂回滚脚本;重点是避免覆盖现有数据、批次可识别、必要时可人工清理。
+
+## 3. 已确认环境信息
+
+| 项 | 值 |
+|----|----|
+| 旧库来源 | SQL Server `dopdemorq`,瑞奇生产备份脱敏库 |
+| UAT 目标库 | MySQL `aidopdev` |
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 建议批次号 | `S1_UAT_20260604_RQ_V1` |
+| 首批候选单号数量 | 52 |
+| 旧库候选销售订单 | 27 |
+| 旧库候选销售订单明细 | 305 |
+| 旧库候选需求核验单 | 391 |
+| 旧库候选需求核验明细 | 18,736 |
+| 旧库候选工单 | 320 |
+| 旧库候选排程明细 | 76 |
+| 旧库候选排程结果 | 69 |
+| 旧库候选发货计划明细 | 22 |
+| 旧库候选 ASN 主单 | 20 |
+
+## 4. 首批候选单号
+
+### 4.1 P0 完整闭环优先样例
+
+这些单号优先用于 5-10 单试导,重点验证 S1 主链路。
+
+| 单号 | 建议用途 | 说明 |
+|------|----------|------|
+| `MPO482024102300001` | 完整闭环主样例 | 覆盖销售订单、工单、排程、排程结果、需求核验 |
+| `MPO482025010900002` | 小体量闭环样例 | 覆盖链路较完整,适合冒烟测试 |
+| `MPO482025012100001` | 订单 + 核验 + 工单 + 发货 | 可验证交付侧衔接 |
+| `MPO482024120200003` | 需求核验样例 | 需求核验明细丰富 |
+| `MPO482025010800003` | 核验 + 发货 + ASN | 适合发货计划与 ASN 验证 |
+| `MPO482025011300004` | 工单排程样例 | 覆盖工单、排程和排程结果 |
+| `MPO482025042800001` | 发货计划样例 | 发货计划明细较多 |
+| `SO241020241018001` | 客户订单样例 | 客户为 `CUST0005 / ET0005` |
+| `SO241020241015003` | 客户订单样例 | 客户为 `CUST0005 / ET0005` |
+| `SO241020241021002` | ASN 冗余样例 | 可用于发货侧重复测试 |
+
+### 4.2 P1 冗余测试样例
+
+这些单号用于扩大测试覆盖,便于多轮演示、查询、筛选和统计。
+
+```text
+10014153
+10015150
+10015151
+MPO482025043000001
+MPO482025012000003
+MPO482025042800002
+15002336
+MPO482024041100002
+10014130
+MPO482024121400001
+MPO482024060400002
+MPO482024052700001
+MPO482024053100002
+MPO482024091800004
+15002337
+MPO482024052900002
+MPO482024061500001
+MPO482024051600003
+MPO482024120200004
+MPO482024082800001
+15002328
+MPO482024081900004
+MPO482023121900001
+10014160
+MPO482025081500002
+MPO482025091900001
+SO241020241219001
+MPO482025081500001
+MPO482025041300001
+MPO482025062100003
+SO241020240923001
+MPO482025062100002
+MPO482024102400001
+MPO482025051800001
+SO241020250114003
+MPO482025092200002
+MPO482025022100001
+MPO482025032900001
+MPO482025091800003
+MPO482025082900002
+MPO482025062600003
+MPO482025090400005
+```
+
+## 5. 目标表与场景映射
+
+| 场景 | 目标业务表 | 后续平台层 | 处理策略 |
+|------|------------|------------|----------|
+| 销售订单 | `crm_seorder`、`crm_seorderentry` | `mdp_stg_so`、`mdp_std_so`、`ado_s1_sales_order`、`ado_s1_sales_order_line` | 以旧库订单为蓝本,生成新系统 ID,保留单号和业务字段 |
+| 需求核验 | `b_order_examine_result`、`b_order_detail` | `dwd_requirement_examine_detail` | 可按旧库核验明细抽样,不要求全部 18,736 行一次导入 |
+| 工单 | `mes_morder`、`mes_moentry` | `dwd_order_schedule_trans`、S2 相关看板 | 以订单明细为主线生成工单,保持订单明细到工单关联 |
+| 排程 | `PeriodSequenceDet`、`ScheduleResultOpMaster` | `mdp_std_operation_schedule`、`dwd_order_schedule_trans` | 可保留真实排程日期和工序,也可补齐缺失状态 |
+| 发货计划 | `ShippingPlan`、`ShippingPlanDetail` | `mdp_stg_ship_trans`、`mdp_std_ship_trans`、`dwd_ship_trans` | 保留发货数量、交期、客户信息 |
+| ASN | `ASNBOLShipperMaster`、`ASNBOLShipperDetail` | `dwd_ship_trans` | 可按订单补造明细,支撑发货确认和交付追踪 |
+| 交付承诺/变更 | `ado_s1_delivery_promise`、`ado_s1_delivery_change` | S1 页面与 KPI | 旧库无完整链路时,按订单补造 |
+| 计划联动 | 新系统计划联动表 | S1/S2 联动页面 | 旧库未发现 `LinkagePlan`,应在新系统侧生成样例 |
+
+## 6. 主键与关联策略
+
+### 6.1 不保留旧库主键作为强约束
+
+旧库销售订单、核验、工单多为雪花 ID;发货、ASN、排程部分表为 `RecID` 小整数或业务系统序号。为了避免 UAT 已有数据冲突,建议统一采用新系统 ID 生成策略。
+
+### 6.2 建议使用临时映射表
+
+导入脚本执行期建议维护临时映射表,不长期保留到业务库。
+
+```sql
+CREATE TEMPORARY TABLE tmp_s1_uat_id_map (
+  batch_no varchar(64) NOT NULL,
+  entity_name varchar(64) NOT NULL,
+  source_key varchar(128) NOT NULL,
+  target_id bigint NOT NULL,
+  ref_key varchar(128) NULL,
+  PRIMARY KEY (batch_no, entity_name, source_key)
+);
+```
+
+映射示例:
+
+| entity_name | source_key | target_id | ref_key |
+|-------------|------------|-----------|---------|
+| `crm_seorder` | 旧库 `crm_seorder.Id` | 新生成订单 ID | `bill_no` |
+| `crm_seorderentry` | 旧库 `crm_seorderentry.Id` | 新生成订单明细 ID | 新订单 ID |
+| `b_order_examine_result` | 旧库 `b_examine_result.Id` | 新生成核验 ID | `bill_no` |
+| `b_order_detail` | 旧库 `b_bom_child_examine.Id` | 新生成核验明细 ID | 新核验 ID |
+| `mes_morder` | 旧库 `mes_morder.Id` | 新生成工单 ID | `morder_no` |
+| `mes_moentry` | 旧库 `mes_moentry.Id` | 新生成工单明细 ID | 新工单 ID |
+
+## 7. 字段处理原则
+
+### 7.1 必须保留或生成的字段
+
+- `tenant_id`:固定为 `1300000000001`。
+- `batch_no` 或可承载批次的备注字段:建议写入 `S1_UAT_20260604_RQ_V1`。
+- 订单号、工单号、客户编码、客户名称、物料编码、物料名称、数量、计划日期、交付日期:优先取旧库真实值。
+- `create_time`、`update_time`:可统一设置为导入时间。
+- `IsDeleted` / `is_deleted`:统一未删除。
+
+### 7.2 可补造字段
+
+- `factory_id`、`org_id`、`company_id`:优先使用 AIDOP 租户默认组织;若无法确认,先置空或使用现有 AIDOP 示例数据同值。
+- `create_by`、`create_by_name`:可使用 UAT 测试账号或系统导入账号。
+- 合同评审、设计任务、计划联动、交付承诺、交付变更:旧库链路缺失时按订单补造。
+
+### 7.3 可抽样字段
+
+需求核验明细旧库候选量为 18,736 行,首批不建议全量导入。建议:
+
+- P0 试导:每个核验单保留 10-30 行关键明细,覆盖缺料、齐套、自制、采购、替代料等状态。
+- 完整 UAT 包:保留 2,000-5,000 行核验明细即可,避免页面和转换任务过重。
+
+## 8. 建议导入顺序
+
+1. 基础租户与组织确认:`SysTenant`、`SysOrg`、`SysUser`。
+2. 销售订单主表:`crm_seorder`。
+3. 销售订单明细:`crm_seorderentry`。
+4. 需求核验主表:`b_order_examine_result`。
+5. 需求核验明细:`b_order_detail`。
+6. 工单主表:`mes_morder`。
+7. 工单关联明细:`mes_moentry`。
+8. 排程明细:`PeriodSequenceDet`。
+9. 排程结果:`ScheduleResultOpMaster`。
+10. 发货计划:`ShippingPlan`、`ShippingPlanDetail`。
+11. ASN:`ASNBOLShipperMaster`、`ASNBOLShipperDetail`。
+12. 新系统补造数据:交付承诺、交付变更、计划联动、合同评审、设计任务。
+13. 运行 S1 MDP 转换任务。
+14. 验证 DWD、KPI、S1 页面和主要 Tab。
+
+## 9. SQL 草案
+
+以下 SQL 是执行草案,正式执行前需要根据 ID 生成函数、组织 ID、用户 ID 和目标表最新字段再做一次核对。
+
+### 9.1 导入批次变量
+
+```sql
+SET @tenant_id = 1300000000001;
+SET @batch_no = 'S1_UAT_20260604_RQ_V1';
+SET @operator_id = 1300000000111;
+SET @operator_name = 'UAT数据导入';
+SET @now = NOW();
+```
+
+### 9.2 导入前重复检查
+
+```sql
+SELECT bill_no, tenant_id, COUNT(*) AS rows_count
+FROM crm_seorder
+WHERE bill_no IN (
+  'MPO482024102300001',
+  'MPO482025010900002',
+  'MPO482025012100001',
+  'MPO482024120200003',
+  'MPO482025010800003',
+  'MPO482025011300004',
+  'MPO482025042800001',
+  'SO241020241018001',
+  'SO241020241015003',
+  'SO241020241021002'
+)
+GROUP BY bill_no, tenant_id;
+```
+
+预期:首次试导前返回空结果。
+
+### 9.3 销售订单导入模板
+
+推荐先从旧库抽取候选订单为中间 CSV 或临时表,再导入 MySQL。临时表字段只保留新系统需要的业务字段。
+
+```sql
+CREATE TEMPORARY TABLE tmp_s1_uat_so (
+  source_id varchar(128) NOT NULL,
+  target_id bigint NOT NULL,
+  bill_no varchar(64) NOT NULL,
+  custom_no varchar(64) NULL,
+  custom_name varchar(128) NULL,
+  order_date datetime NULL,
+  delivery_date datetime NULL,
+  urgent int NULL,
+  status int NULL,
+  PRIMARY KEY (source_id)
+);
+
+INSERT INTO crm_seorder (
+  Id, bill_no, custom_no, custom_name, date, rdate, urgent, status,
+  bill_from, create_by, create_by_name, create_time,
+  update_by, update_by_name, update_time,
+  tenant_id, IsDeleted
+)
+SELECT
+  target_id,
+  bill_no,
+  custom_no,
+  custom_name,
+  order_date,
+  delivery_date,
+  COALESCE(urgent, 0),
+  COALESCE(status, 1),
+  CONCAT('UAT导入:', @batch_no),
+  @operator_id,
+  @operator_name,
+  @now,
+  @operator_id,
+  @operator_name,
+  @now,
+  @tenant_id,
+  0
+FROM tmp_s1_uat_so;
+```
+
+### 9.4 销售订单明细导入模板
+
+```sql
+CREATE TEMPORARY TABLE tmp_s1_uat_so_line (
+  source_id varchar(128) NOT NULL,
+  target_id bigint NOT NULL,
+  source_order_id varchar(128) NOT NULL,
+  entry_seq int NULL,
+  item_number varchar(64) NULL,
+  item_name varchar(128) NULL,
+  specification varchar(256) NULL,
+  unit varchar(32) NULL,
+  qty decimal(18,4) NULL,
+  plan_date datetime NULL,
+  PRIMARY KEY (source_id)
+);
+
+INSERT INTO crm_seorderentry (
+  Id, seorder_id, bill_no, entry_seq, item_number, item_name,
+  specification, unit, qty, plan_date, date,
+  create_by, create_by_name, create_time,
+  update_by, update_by_name, update_time,
+  tenant_id, IsDeleted, seorderentry_id
+)
+SELECT
+  l.target_id,
+  so.target_id,
+  so.bill_no,
+  l.entry_seq,
+  l.item_number,
+  l.item_name,
+  l.specification,
+  l.unit,
+  COALESCE(l.qty, 0),
+  l.plan_date,
+  so.order_date,
+  @operator_id,
+  @operator_name,
+  @now,
+  @operator_id,
+  @operator_name,
+  @now,
+  @tenant_id,
+  0,
+  l.target_id
+FROM tmp_s1_uat_so_line l
+JOIN tmp_s1_uat_so so ON so.source_id = l.source_order_id;
+```
+
+### 9.5 需求核验导入模板
+
+```sql
+CREATE TEMPORARY TABLE tmp_s1_uat_examine (
+  source_id varchar(128) NOT NULL,
+  target_id bigint NOT NULL,
+  bill_no varchar(64) NOT NULL,
+  bom_number varchar(450) NULL,
+  need_qty decimal(23,10) NULL,
+  examine_time datetime NULL,
+  PRIMARY KEY (source_id)
+);
+
+INSERT INTO b_order_examine_result (
+  Id, orderid, order_no, type, time, ketting_time, bom_number, need_qty,
+  create_by, create_by_name, create_time,
+  update_by, update_by_name, update_time,
+  tenant_id, IsDeleted
+)
+SELECT
+  e.target_id,
+  so.target_id,
+  e.bill_no,
+  1,
+  e.examine_time,
+  e.examine_time,
+  e.bom_number,
+  COALESCE(e.need_qty, 0),
+  @operator_id,
+  @operator_name,
+  @now,
+  @operator_id,
+  @operator_name,
+  @now,
+  @tenant_id,
+  b'0'
+FROM tmp_s1_uat_examine e
+JOIN tmp_s1_uat_so so ON so.bill_no = e.bill_no;
+```
+
+### 9.6 需求核验明细抽样模板
+
+```sql
+CREATE TEMPORARY TABLE tmp_s1_uat_examine_detail (
+  source_id varchar(128) NOT NULL,
+  target_id bigint NOT NULL,
+  source_examine_id varchar(128) NOT NULL,
+  item_number varchar(450) NULL,
+  item_name text NULL,
+  qty decimal(23,10) NULL,
+  self_lack_qty decimal(23,10) NULL,
+  make_qty decimal(23,10) NULL,
+  purchase_qty decimal(23,10) NULL,
+  PRIMARY KEY (source_id)
+);
+
+INSERT INTO b_order_detail (
+  Id, order_examine_id, fid, item_number, item_name,
+  qty, self_lack_qty, make_qty, purchase_qty,
+  create_by, create_by_name, create_time,
+  update_by, update_by_name, update_time,
+  tenant_id, IsDeleted
+)
+SELECT
+  d.target_id,
+  e.target_id,
+  e.target_id,
+  d.item_number,
+  d.item_name,
+  COALESCE(d.qty, 0),
+  COALESCE(d.self_lack_qty, 0),
+  COALESCE(d.make_qty, 0),
+  COALESCE(d.purchase_qty, 0),
+  @operator_id,
+  @operator_name,
+  @now,
+  @operator_id,
+  @operator_name,
+  @now,
+  @tenant_id,
+  b'0'
+FROM tmp_s1_uat_examine_detail d
+JOIN tmp_s1_uat_examine e ON e.source_id = d.source_examine_id;
+```
+
+### 9.7 验收 SQL
+
+```sql
+SELECT tenant_id, COUNT(*) AS orders_count
+FROM crm_seorder
+WHERE tenant_id = 1300000000001
+  AND bill_from LIKE 'UAT导入:S1_UAT_20260604_RQ_V1%'
+GROUP BY tenant_id;
+
+SELECT tenant_id, COUNT(*) AS lines_count
+FROM crm_seorderentry
+WHERE tenant_id = 1300000000001
+  AND bill_no IN (
+    SELECT bill_no
+    FROM crm_seorder
+    WHERE tenant_id = 1300000000001
+      AND bill_from LIKE 'UAT导入:S1_UAT_20260604_RQ_V1%'
+  )
+GROUP BY tenant_id;
+
+SELECT tenant_id, COUNT(*) AS examine_count
+FROM b_order_examine_result
+WHERE tenant_id = 1300000000001
+  AND order_no IN (
+    SELECT bill_no
+    FROM crm_seorder
+    WHERE tenant_id = 1300000000001
+      AND bill_from LIKE 'UAT导入:S1_UAT_20260604_RQ_V1%'
+  )
+GROUP BY tenant_id;
+```
+
+## 10. 旧库抽取建议
+
+旧库抽取建议先生成中间文件或临时表,不直接跨库写入 UAT:
+
+1. 从 SQL Server `dopdemorq` 抽取候选单号对应的订单、明细、核验、工单、排程、发货、ASN。
+2. 在本地生成 `source_id -> target_id` 映射。
+3. 对缺失链路补造一致数据,例如交付承诺、交付变更、计划联动。
+4. 生成 MySQL 可执行导入 SQL。
+5. 在 UAT MySQL 先导入 P0 试导样例。
+6. 验证通过后再导入完整 52 单数据包。
+
+## 11. 不建议做的事
+
+- 不建议把旧库 18,736 行核验明细一次性全导入首轮试导。
+- 不建议把旧库主键作为必须保留的约束。
+- 不建议全表导入 `ASNBOLShipperMaster`、`PeriodSequenceDet`、`ScheduleResultOpMaster` 等大表。
+- 不建议混用瑞奇 `dopdemorq` 与瑞贝 `dopdemorb` 数据。
+- 不建议写入 Demo 租户或其它历史租户。
+- 不建议为本轮 UAT 数据准备投入复杂事务级回滚方案;如需清理,优先按租户、批次标记和候选单号范围人工处理。
+
+## 12. 下一步
+
+1. 用 P0 的 10 个单号生成本地中间数据。
+2. 生成 `source_id -> target_id` 映射。
+3. 输出 P0 试导 SQL。
+4. 导入 UAT AIDOP 租户。
+5. 执行 S1 MDP 转换。
+6. 验证 S1 页面、DWD、KPI。
+7. 通过后扩大到完整 52 单数据包。

+ 270 - 0
doc/plan/S1/S1产销协同UAT数据生成执行任务书.md

@@ -0,0 +1,270 @@
+# S1 产销协同 UAT 数据生成执行任务书
+
+## 1. 任务目标
+
+基于旧 DOP 瑞奇库 `dopdemorq` 的真实业务样本,为新系统 UAT 环境 `aidopdev` 生成一套 S1 产销协同测试数据。
+
+本任务不是生产迁移,不要求照搬旧库全部字段、主键和历史记录。最终目标是让新系统能够完整串联以下场景:
+
+- 销售订单与订单明细
+- 需求核验与核验明细
+- 工单与订单明细关联
+- 工单排程与排程结果
+- 发货计划与 ASN
+- S1 MDP 分层转换
+- S1 DWD 与 KPI 验收
+- S1 页面主要 Tab 查询、筛选、统计和演示
+
+## 2. 核心约束
+
+- 所有写入 UAT MySQL 的数据必须归属 AIDOP 租户:`tenant_id = 1300000000001`。
+- 不得写入 Demo 租户:`tenant_id = 1300000000888`。
+- 推荐批次号:`S1_UAT_20260604_RQ_V1`。
+- 旧库仅作为素材库,可参考旧库订单、客户、物料、工单、排程、核验、发货和 ASN。
+- 可以生成新系统 ID,不要求保留旧库原始主键。
+- 可以补造旧库缺失环节,但补造数据必须能和候选订单、物料、工单串起来。
+- 不要求复杂回滚脚本。UAT 数据只要求批次可识别、可人工复查、必要时可按租户和批次清理。
+
+## 3. 禁止事项
+
+- 不得全量导入旧库。
+- 不得把瑞奇 `dopdemorq` 和瑞贝 `dopdemorb` 数据混在同一批次。
+- 不得覆盖 UAT 既有数据。
+- 不得把凭据、截图、连接串明文写入脚本或提交到 Git。
+- 不得在未完成只读检查和人工确认前执行写入。
+- 不得把 `tenant_id` 留空或写成其它租户。
+- 不得一次性导入全部 18,736 行需求核验明细作为首轮试导。
+
+## 4. 输入资料
+
+- 主方案:`doc/plan/S1/S1产销协同UAT测试数据抽取与导入方案.md`
+- 候选清单与映射:`doc/plan/S1/S1产销协同UAT候选数据清单与导入映射.md`
+- 数据库资源信息:`doc/plan/aidop项目服务器数据库相关资源信息.md`
+- 旧库来源:SQL Server `dopdemorq`
+- 目标库:MySQL `aidopdev`
+
+## 5. 推荐执行阶段
+
+### 阶段 1:只读确认
+
+只允许执行 SELECT 或元数据查询。
+
+必须确认:
+
+- `SysTenant` 中 AIDOP 租户 ID 是否仍为 `1300000000001`。
+- P0 候选单号在 UAT 目标表中是否不存在。
+- 目标表结构是否包含所需字段。
+- AIDOP 租户下现有 S1 数据量,避免和已有演示或历史测试数据混淆。
+
+输出物:
+
+- 只读检查结果摘要。
+- P0 试导单号最终列表。
+- 字段差异或阻塞项。
+
+### 阶段 2:生成中间数据
+
+从旧库读取 P0 候选单号相关数据,生成本地中间数据,不直接写 UAT。
+
+建议 P0 单号:
+
+```text
+MPO482024102300001
+MPO482025010900002
+MPO482025012100001
+MPO482024120200003
+MPO482025010800003
+MPO482025011300004
+MPO482025042800001
+SO241020241018001
+SO241020241015003
+SO241020241021002
+```
+
+中间数据至少包括:
+
+- 销售订单主表数据
+- 销售订单明细数据
+- 需求核验主表数据
+- 需求核验明细抽样数据
+- 工单主表数据
+- 工单关联明细数据
+- 排程明细数据
+- 排程结果数据
+- 发货计划数据
+- ASN 数据
+
+输出物:
+
+- 中间数据文件或临时表定义。
+- `source_id -> target_id` 映射。
+- 抽样规则说明。
+
+### 阶段 3:补造闭环数据
+
+根据新系统功能现状补造旧库缺失但 UAT 需要的数据。
+
+优先补造:
+
+- 交付承诺:`ado_s1_delivery_promise`
+- 交付变更:`ado_s1_delivery_change`
+- 计划联动样例
+- 合同评审样例
+- 产品设计或 BOM 相关样例
+- 异常状态样例,例如延期、缺料、部分发货、已完成
+
+补造规则:
+
+- 必须和候选订单号、物料编码、工单号关联。
+- 日期要形成合理链路:订单日期 <= 计划日期 <= 排程日期 <= 发货日期。
+- 数量要形成合理链路:订单数量、工单数量、发货数量不能明显矛盾。
+- 所有补造数据仍使用 `tenant_id = 1300000000001`。
+
+### 阶段 4:生成 P0 试导 SQL
+
+生成可人工审查的 MySQL SQL 文件。
+
+SQL 文件必须包含:
+
+- 批次变量。
+- 重复数据检查。
+- 临时映射表或等价映射逻辑。
+- P0 数据写入语句。
+- 写入后验收 SQL。
+- 明确提示:执行前需要人工确认。
+
+不要求包含复杂回滚脚本。
+
+### 阶段 5:人工确认
+
+执行写入前必须由负责人确认:
+
+- P0 单号范围。
+- 写入目标库为 UAT `aidopdev`。
+- 租户 ID 为 `1300000000001`。
+- SQL 未包含凭据明文。
+- SQL 未包含全表删除、全库更新、无条件覆盖。
+- SQL 不写入 Demo 租户。
+
+### 阶段 6:P0 试导
+
+只导入 P0 5-10 单。
+
+导入后立即验证:
+
+- 订单和明细数量。
+- 核验和核验明细数量。
+- 工单和排程数量。
+- 发货计划和 ASN 数量。
+- S1 页面能查询到数据。
+- MDP 转换可运行。
+- DWD 和 KPI 有结果。
+
+### 阶段 7:扩展完整 UAT 包
+
+P0 验证通过后,再扩展到 52 个候选单号。
+
+扩展时可以调整:
+
+- 需求核验明细抽样数量。
+- 异常状态比例。
+- 发货与 ASN 覆盖比例。
+- 交付承诺和交付变更数量。
+- 计划联动和合同评审样例数量。
+
+## 6. ID 生成要求
+
+执行脚本必须明确 ID 生成方式,不能临时手填。
+
+可选方式:
+
+- 使用新系统一致的雪花 ID 生成函数或脚本。
+- 使用本地脚本生成不冲突的大整数 ID。
+- 使用数据库已有最大 ID 加偏移的方式,但必须先检查不冲突。
+
+无论采用哪种方式,都必须维护映射:
+
+```text
+source_entity + source_id -> target_id
+```
+
+## 7. 批次标记要求
+
+本轮不要求复杂回滚,但必须便于识别本批测试数据。
+
+优先使用:
+
+- 业务表已有备注字段,例如 `bill_from`、`remark`、`Remark`。
+- 创建人字段,例如 `create_by_name = 'UAT数据导入'`。
+- 固定单号范围和候选单号清单。
+- `tenant_id = 1300000000001`。
+
+建议标记值:
+
+```text
+S1_UAT_20260604_RQ_V1
+```
+
+## 8. 验收 SQL 要求
+
+验收 SQL 必须包含租户过滤。
+
+至少验证:
+
+- `crm_seorder`
+- `crm_seorderentry`
+- `b_order_examine_result`
+- `b_order_detail`
+- `mes_morder`
+- `mes_moentry`
+- `PeriodSequenceDet`
+- `ScheduleResultOpMaster`
+- `ShippingPlanDetail`
+- `ASNBOLShipperMaster`
+- `mdp_stg_so`
+- `mdp_std_so`
+- `dwd_requirement_examine_detail`
+- `dwd_order_schedule_trans`
+- `dwd_ship_trans`
+- `ado_s9_kpi_value_l1_day`
+
+## 9. 给执行模型的提示词
+
+可以将以下内容作为其它大模型的执行提示词:
+
+```text
+你要为 Ai-DOP 新系统 UAT 环境生成 S1 产销协同测试数据。
+
+请严格阅读并遵守:
+1. doc/plan/S1/S1产销协同UAT测试数据抽取与导入方案.md
+2. doc/plan/S1/S1产销协同UAT候选数据清单与导入映射.md
+3. doc/plan/S1/S1产销协同UAT数据生成执行任务书.md
+4. doc/plan/aidop项目服务器数据库相关资源信息.md
+
+重要约束:
+- 旧 SQL Server 库 dopdemorq 只是素材库,不是生产迁移源。
+- 所有 UAT 数据必须写入 AIDOP 租户 tenant_id = 1300000000001。
+- 不得写入 Demo 租户 tenant_id = 1300000000888。
+- 先做只读检查和 P0 试导 SQL,未经人工确认不得写入 UAT MySQL。
+- 不要求复杂回滚脚本,但必须有批次标记 S1_UAT_20260604_RQ_V1。
+- 不要全量导入旧库,不要覆盖现有数据,不要提交明文凭据。
+
+你的第一步只允许做只读检查,并输出:
+1. AIDOP 租户确认结果
+2. P0 单号是否已存在
+3. 目标表字段缺口
+4. P0 试导 SQL 生成计划
+```
+
+## 10. 完成标准
+
+任务完成时应满足:
+
+- P0 试导数据能在 S1 页面查询。
+- S1 MDP 转换能运行。
+- DWD 表能产出对应数据。
+- KPI 表能产出 S1 指标。
+- 数据全部归属 AIDOP 租户。
+- Demo 租户无新增测试数据。
+- 批次标记可识别。
+- 负责人确认可以扩展到完整 52 单数据包。

+ 270 - 0
doc/plan/S1/S1产销协同UAT测试数据抽取与导入方案.md

@@ -0,0 +1,270 @@
+# S1 产销协同 UAT 测试数据抽取与导入方案
+
+## 1. 目标
+
+为新系统正式 UAT 测试准备 S1 产销协同业务数据。旧 DOP 瑞奇库 `dopdemorq` 仅作为真实业务素材库,目标是构造一套归属 AIDOP 租户、能在新系统完整串联的测试数据。
+
+本方案不是生产迁移,不要求逐表、逐字段、逐主键照搬旧库数据。执行重点是适度冗余、可反复测试、可演示、可覆盖主流程和异常场景。
+
+本方案同时作为 S1-S4 全局 UAT 场景测试的起点。S1 订单、订单明细、客户和物料应优先被 S2 工单、S3 物料需求、S4 采购执行复用,避免 S2/S3/S4 各自独立造一批无法串联的数据。全局链路要求见 `doc/plan/S1-S4全局UAT场景测试数据生成方案.md`。
+
+## 2. 数据来源与目标
+
+| 类型 | 数据库 | 用途 |
+|------|--------|------|
+| 旧 DOP 瑞奇库 | SQL Server `dopdemorq` | S1 UAT 主素材来源 |
+| 旧 DOP 瑞贝库 | SQL Server `dopdemorb` | 备用增强来源,不与瑞奇主样本混用 |
+| UAT 新系统库 | MySQL `aidopdev` | 目标导入库 |
+
+S1 首批 UAT 数据优先使用 `dopdemorq`。如确需使用 `dopdemorb`,应单独标记批次。
+
+## 3. 租户归属规则
+
+所有导入到 UAT MySQL 的测试数据必须统一归属 AIDOP 租户,便于区分测试数据、演示数据和正式生产数据。
+
+| 项 | 值 |
+|----|----|
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 推荐批次号 | `S1_UAT_20260604_RQ_V1` |
+
+导入要求:
+
+- 目标表如有 `tenant_id`,统一写入 `1300000000001`。
+- 不得写入 Demo 租户或其它历史租户。
+- 目标表如有 `factory_id`、`org_id`、`company_id`,按 AIDOP UAT 默认组织口径统一映射;无法确认时先置空或沿用 AIDOP 现有样例值。
+- 验收 SQL 必须带租户过滤。
+- 本轮是 UAT 测试数据准备,不要求复杂回滚脚本;但数据必须有批次标记,便于必要时人工识别和清理。
+
+## 4. UAT 覆盖范围
+
+S1 UAT 数据需要支撑以下业务场景:
+
+| 序号 | 场景 | 数据要求 |
+|------|------|----------|
+| 1 | 合同评审 | 客户、产品、订单或合同评审样例 |
+| 2 | 产品设计 | 产品、BOM、工艺路线、产线、工作中心 |
+| 3 | 订单评审 | 销售订单、订单明细、订单状态、变更样例 |
+| 4 | 订单交付 | 销售订单、需求核验、工单、排程、发货、联动 |
+| 5 | 订单发货 | 发货计划、发货明细、ASN |
+| 6 | 工单下达 | 工单、工单明细、工艺路线、排程结果 |
+| 7 | 指标看板 | S1 MDP、DWD、KPI |
+| 8 | 需求明细核验 | 需求核验主表、BOM 明细 |
+| 9 | 计划联动看板 | 计划联动样例,可在新系统侧补造 |
+
+## 5. 四类场景化数据包
+
+### 5.1 主流程闭环数据包
+
+用于验证从订单到交付、从业务表到 MDP/DWD/KPI 的完整链路。
+
+链路要求:
+
+```text
+销售订单 -> 订单明细 -> 客户/物料 -> BOM/工艺 -> 工单 -> 排程 -> 需求核验 -> 发货/ASN -> S1 MDP -> DWD/KPI
+```
+
+### 5.2 业务状态与异常数据包
+
+用于验证筛选、异常提示、边界状态和重复测试。
+
+建议覆盖:
+
+- 新建、评审中、已确认、已完成订单。
+- 无需求核验订单。
+- 无排程订单。
+- 未发货、部分发货、已发货订单。
+- 缺料、延期、采购未完成样例。
+- 重复单号校验样例。
+- 筛选无结果样例。
+
+### 5.3 跨模块联动数据包
+
+用于验证 S1 页面中依赖 S2/S3/S4/S6/S7 的数据展示。
+
+建议覆盖:
+
+- S2 工单与排程。
+- S3/S4 采购与供应交付。
+- S6/S7 库存、发货、质量或 ASN 相关数据。
+- 计划联动、交付承诺、交付变更。
+
+### 5.4 基础配置与权限数据包
+
+用于保证 UAT 用户能操作页面和查看数据。
+
+建议确认:
+
+- AIDOP 租户、组织、工厂。
+- UAT 测试账号、角色、菜单权限。
+- 客户、物料、BOM、工艺、产线、工作中心。
+- 单号规则和基础字典。
+
+## 6. 首批候选数据结论
+
+已从 `dopdemorq` 只读筛选出首批 52 个候选业务单号,建议先以 P0 的 5-10 单做试导。
+
+首批只读统计:
+
+| 数据项 | 数量 |
+|--------|------|
+| 候选单号 | 52 |
+| 匹配销售订单 | 27 |
+| 销售订单明细 | 305 |
+| 需求核验单 | 391 |
+| 需求核验明细 | 18,736 |
+| 工单 | 320 |
+| 排程明细 | 76 |
+| 排程结果 | 69 |
+| 发货计划明细 | 22 |
+| ASN 主单 | 20 |
+
+P0 优先样例见 `doc/plan/S1/S1产销协同UAT候选数据清单与导入映射.md`。
+
+## 7. 必导与建议导入数据
+
+### 7.1 P0 必导
+
+- `crm_seorder`
+- `crm_seorderentry`
+- `b_order_examine_result`
+- `b_order_detail`
+- `mes_morder`
+- `mes_moentry`
+- `ShippingPlan`
+- `ShippingPlanDetail`
+- `ASNBOLShipperMaster`
+- `ASNBOLShipperDetail`
+
+### 7.2 P1 建议同步导入
+
+- `PeriodSequenceDet`
+- `ScheduleResultOpMaster`
+- `ProductStructureMaster`
+- `ProductStructureOp`
+- `RoutingOpDetail`
+- `WorkOrdMaster`
+- `WorkOrdDetail`
+- `WorkOrdRouting`
+
+### 7.3 P2 增强数据
+
+- `srm_pr_main`
+- `PurOrdMaster`
+- `PurOrdDetail`
+- `srm_polist_ds`
+- `NbrMaster`
+- `NbrDetail`
+- `OpTransEmployee`
+
+## 8. 造数与导入原则
+
+1. 旧库只作为素材库,不要求保留旧库原始主键。
+2. 导入 UAT 时可统一生成新系统 ID,并通过临时映射表维护关联关系。
+3. 不要求导入旧库全字段,只填新系统页面、接口、MDP、DWD、KPI 所需字段。
+4. 可补造旧库缺失环节,例如计划联动、交付承诺、合同评审、设计任务和异常状态。
+5. 日期要形成合理链路:订单日期 <= 计划日期 <= 排程日期 <= 发货日期。
+6. 数量要形成合理链路:订单数量、工单数量、发货数量不能明显矛盾。
+7. 大表必须按订单、工单、物料、发货单、采购单等业务键过滤。
+8. 需求核验明细首轮建议抽样,不一次性导入全部 18,736 行。
+9. 导入完成后执行 S1 MDP 刷新。
+10. 刷新后执行 DWD/KPI 验收 SQL。
+
+## 9. 新系统功能现状交叉校验要求
+
+数据准备不能只参考 UAT Excel 测试用例,还必须与新系统当前功能现状交叉验证。
+
+必须核对:
+
+- 新系统菜单和页面实际入口。
+- 后端 API / Service 实际读取的表。
+- S1 MDP 数据流是否覆盖导入数据。
+- DWD/KPI 是否能产出结果。
+- S1/S2/S3 已完成验收文档中的已实现能力。
+- UAT 数据库现有 AIDOP 租户数据量。
+
+差异处理:
+
+- 测试用例缺失但新系统已有功能:补测试数据和测试点。
+- 测试用例与新系统实现不一致:标注为需产品确认。
+- 旧库缺失但新系统需要:按同一批订单和物料补造一致样例。
+
+## 10. 建议导入顺序
+
+1. 基础租户、组织、账号和权限确认。
+2. 销售订单主表。
+3. 销售订单明细。
+4. 需求核验主表。
+5. 需求核验明细。
+6. 工单主表。
+7. 工单关联明细。
+8. 排程明细与排程结果。
+9. 发货计划与 ASN。
+10. 新系统补造数据:交付承诺、交付变更、计划联动、合同评审、设计任务。
+11. 运行 S1 MDP 转换任务。
+12. 验证 DWD、KPI、S1 页面和主要 Tab。
+
+## 11. 建议验收 SQL
+
+```sql
+-- 1. S1 MDP 最近批次
+SELECT job_code, batch_id, status, stage_rows, standard_rows, dwd_rows, start_time, end_time, error_message
+FROM mdp_transform_run_log
+WHERE job_code = 'S1_MDP_SYNC_TRANSFORM'
+ORDER BY start_time DESC, id DESC
+LIMIT 5;
+
+-- 2. 订单主表和明细
+SELECT COUNT(*) AS order_count
+FROM crm_seorder
+WHERE tenant_id = <AIDOP_TENANT_ID>;
+
+SELECT COUNT(*) AS order_entry_count
+FROM crm_seorderentry
+WHERE tenant_id = <AIDOP_TENANT_ID>;
+
+-- 3. S1 标准层
+SELECT COUNT(*) AS std_so_count
+FROM mdp_std_so
+WHERE tenant_id = <AIDOP_TENANT_ID>;
+
+-- 4. 订单交付 DWD
+SELECT COUNT(*) AS dwd_ship_count
+FROM dwd_ship_trans
+WHERE tenant_id = <AIDOP_TENANT_ID>;
+
+-- 5. 需求核验 DWD
+SELECT COUNT(*) AS requirement_count
+FROM dwd_requirement_examine_detail
+WHERE tenant_id = <AIDOP_TENANT_ID>;
+
+-- 6. KPI 写入
+SELECT module_code, metric_code, COUNT(*) AS rows_count, MAX(biz_date) AS latest_biz_date
+FROM ado_s9_kpi_value_l1_day
+WHERE module_code = 'S1'
+  AND is_deleted = 0
+GROUP BY module_code, metric_code
+ORDER BY metric_code;
+```
+
+## 12. 风险与注意事项
+
+- 不要全量导入 `b_bom_child_examine`、`ScheduleResultOpMaster`、`OpTransEmployee` 等大表。
+- 不要按表随机抽样,必须按订单主线带出上下游关联数据。
+- 不要只导主表不导明细。
+- 不要混用瑞奇、瑞贝两个库的订单和主数据。
+- 合同评审、产品设计建议通过新系统 UAT 页面新建或补造样例。
+- 导入测试数据不得覆盖 UAT 既有演示数据或正式生产样例。
+- 密码、连接串、截图不写入脚本和 Git。
+
+## 13. 下一步建议
+
+1. 先按四类场景化测试数据包生成候选清单。
+2. 生成 P0 试导 SQL,不直接写库。
+3. 人工确认 P0 单号、租户 ID、目标库和 SQL 安全性。
+4. 小批量导入 5-10 条完整闭环订单做试跑。
+5. 验证 S1 页面、S1 MDP、DWD、KPI 和主要交付跟踪 Tab。
+6. 再扩大到完整 UAT 数据包。
+7. 保留批次号用于人工识别、复查和必要时清理。
+
+对应的首批候选清单、导入映射和 SQL 草案见:`doc/plan/S1/S1产销协同UAT候选数据清单与导入映射.md`。

+ 126 - 0
doc/plan/S2/S2制造协同UAT数据生成执行任务书.md

@@ -0,0 +1,126 @@
+# S2 制造协同 UAT 数据生成执行任务书
+
+## 1. 任务目标
+
+为 S2 制造协同生成 UAT 测试数据,支撑工单工序排程、排产异常、可执行日计划、产线日历、执行进度看板和 S2 制造协同看板测试。
+
+## 2. 必读文档
+
+- `doc/plan/S2/S2制造协同UAT测试数据生成方案.md`
+- `doc/plan/S1/S1产销协同UAT测试数据抽取与导入方案.md`
+- `doc/plan/S1/S1产销协同UAT数据生成执行任务书.md`
+- `doc/plan/aidop项目服务器数据库相关资源信息.md`
+
+## 3. 核心约束
+
+- 所有写入数据必须使用 AIDOP 租户:`tenant_id = 1300000000001`。
+- 不得写入 Demo 租户:`tenant_id = 1300000000888`。
+- 推荐批次号:`S2_UAT_20260604_RQ_V1`。
+- 旧库仅作素材库,不做生产迁移。
+- 先做只读检查和 P0 SQL,未经人工确认不得写入 UAT MySQL。
+- 不要求复杂回滚脚本,但必须有批次标记。
+
+## 4. 执行阶段
+
+### 阶段 1:只读检查
+
+只允许执行 SELECT 或元数据查询。
+
+必须输出:
+
+- AIDOP 租户确认结果。
+- S2 目标表清单和字段缺口。
+- AIDOP 租户下现有 S2 数据量。
+- P0 工单、产线、物料是否已存在。
+
+### 阶段 2:生成 P0 中间数据
+
+生成本地中间数据,不直接写库。
+
+P0 至少包含:
+
+- 5-10 个工单。
+- 每工单 2-3 道工序。
+- 每工单 2-5 行物料需求。
+- 2 条排产异常。
+- 2 条可执行日计划。
+- 2 条产线日历配置。
+- 1 条休息时间、1 条节假日、1 条加班记录。
+
+### 阶段 3:补造制造协同场景
+
+补造旧库缺失但测试报告要求的数据:
+
+- 产线工作日历。
+- 产线休息时间。
+- 产线节假日。
+- 产线加班。
+- 资源冲突、产能不足、物料不足、工艺缺失等排产异常。
+- 工单执行进度阶段数据。
+
+### 阶段 4:生成 P0 SQL
+
+SQL 必须包含:
+
+- 批次变量。
+- 重复数据检查。
+- ID 映射逻辑。
+- 工单、工序、排程、日计划、产线日历、异常数据写入。
+- 验收 SQL。
+- 执行前人工确认提示。
+
+### 阶段 5:人工确认
+
+执行写入前确认:
+
+- 目标库为 UAT `aidopdev`。
+- 租户 ID 为 `1300000000001`。
+- 不包含全表删除、全库更新、无条件覆盖。
+- 不包含明文凭据。
+- P0 数据量符合测试报告最小要求。
+
+### 阶段 6:P0 试导与验收
+
+导入后验证:
+
+- 工单排程列表可查询。
+- 优先级调整、加急/特急、工单关闭样例可测试。
+- 可执行日计划能按未来 3 天和全部计划查询。
+- 产线日历、休息、节假日、加班可查询。
+- 排产异常可查询。
+- S2 看板和 DWD/KPI 有结果。
+
+## 5. 给执行模型的提示词
+
+```text
+你要为 Ai-DOP 新系统 UAT 环境生成 S2 制造协同测试数据。
+
+请严格阅读:
+1. doc/plan/S2/S2制造协同UAT测试数据生成方案.md
+2. doc/plan/S2/S2制造协同UAT数据生成执行任务书.md
+3. doc/plan/aidop项目服务器数据库相关资源信息.md
+
+第一步只允许做只读检查,不得写 UAT 数据库。
+
+重要约束:
+- 所有数据必须写入 AIDOP 租户 tenant_id = 1300000000001。
+- 不得写入 Demo 租户 tenant_id = 1300000000888。
+- 批次号使用 S2_UAT_20260604_RQ_V1。
+- 旧库只是素材库,不要全量导入。
+- 未经人工确认不得执行写入。
+
+请先输出:
+1. S2 目标表和字段确认
+2. AIDOP 租户下现有 S2 数据量
+3. P0 数据生成计划
+4. P0 SQL 生成计划
+```
+
+## 6. 完成标准
+
+- P0 工单排程和日计划能在页面查询。
+- S2 产线日历相关数据能查询。
+- S2 异常记录能查询。
+- S2 MDP、DWD、KPI 有结果。
+- 数据全部归属 AIDOP 租户。
+- Demo 租户无新增数据。

+ 148 - 0
doc/plan/S2/S2制造协同UAT测试数据生成方案.md

@@ -0,0 +1,148 @@
+# S2 制造协同 UAT 测试数据生成方案
+
+## 1. 目标
+
+为新系统正式 UAT 测试准备 S2 制造协同业务数据。旧 DOP 数据库仅作为真实业务素材库,最终目标是构造一套归属 AIDOP 租户、能支撑工单排程、日计划、产线日历、执行跟踪和 S2 看板的测试数据。
+
+本方案参考 `S2制造协同_UAT测试报告v1.0.xlsx`,并沿用 S1 UAT 数据准备原则:不做生产迁移,不要求照搬旧库主键和全字段,优先保证业务场景闭环、数据可查询、看板可统计、异常可验证。
+
+S2 的 P0 数据必须优先复用 S1 全局订单样本。工单、工序、日计划、排程和执行进度应能追溯到 S1 订单明细,后续 S3 物料需求也应基于这些 S2 工单生成。全局链路要求见 `doc/plan/S1-S4全局UAT场景测试数据生成方案.md`。
+
+## 2. 来源与目标
+
+| 类型 | 数据库/文件 | 用途 |
+|------|-------------|------|
+| 测试报告 | `D:\Projects\Ai-DOP\项目\项目测试\S2制造协同_UAT测试报告v1.0.xlsx` | S2 场景和用例来源 |
+| 旧 DOP 瑞奇库 | SQL Server `dopdemorq` | 工单、工艺、排程、报工、日历等素材来源 |
+| UAT 新系统库 | MySQL `aidopdev` | 目标导入库 |
+
+## 3. 租户与批次
+
+| 项 | 值 |
+|----|----|
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 推荐批次号 | `S2_UAT_20260604_RQ_V1` |
+
+所有写入 UAT 的数据必须使用 `tenant_id = 1300000000001`,不得写入 Demo 租户。每批数据需带批次标记,便于人工识别、复查和必要时清理。
+
+## 4. 测试报告覆盖场景
+
+S2 测试报告包含 9 个分场景,报告要求每个场景不少于 2 张单据、每单行数不少于 2 行,并包含异常场景验证。
+
+| 序号 | 场景 | 数据要求 |
+|------|------|----------|
+| 1 | 工单工序排程 | 工单、工序、物料、产线、计划日期、排程状态、齐套数量 |
+| 2 | 排产异常记录 | 工单号、异常类型、异常描述、发生时间、处理状态 |
+| 3 | 可执行日计划 | 产线、物料、计划日期、数量、报工点、物料状态、下达状态 |
+| 4 | 产线工作日历管理 | 产线、周工作时间、工作时段 |
+| 5 | 产线休息时间管理 | 产线、休息开始/结束时间、有效日期 |
+| 6 | 产线节假日管理 | 产线、节假日、停线日期、节假日类型 |
+| 7 | 产线加班管理 | 产线、加班日期、加班时段、审批/启用状态 |
+| 8 | 工单执行进度看板 | 资源检查、计划排程、执行采购、生产备料、生产执行、成品入库 |
+| 9 | S2 制造协同看板 | S2 KPI、排程趋势、异常、工单进度、产线负荷 |
+
+## 5. 场景化数据包
+
+### 5.1 工单排程闭环数据包
+
+用于验证工单工序排程列表、优先级调整、生产排程、同步物料需求、执行追踪、物料明细、工序明细、同步工艺路线、加急/特急、工单关闭、导出。
+
+建议准备:
+
+- 10-20 个工单,覆盖未排程、已排程、已下达、执行中、已完工、已关闭。
+- 每个工单不少于 2 道工序。
+- 每个工单不少于 2 行物料需求。
+- 至少 2 个加急/特急工单。
+- 至少 2 个已有完工数量的工单,用于验证“已有完工数量不允许同步工艺路线”。
+
+### 5.2 生产日历与产线能力数据包
+
+用于验证产线工作日历、休息时间、节假日、加班管理,以及日计划计算。
+
+建议准备:
+
+- 3-5 条产线。
+- 每条产线配置周一到周日工作日历。
+- 每条产线配置 1-2 条休息时间。
+- 至少 2 条节假日停线记录。
+- 至少 2 条加班记录。
+- 至少 1 条异常样例:时间重叠、结束时间早于开始时间或无效产线。
+
+### 5.3 可执行日计划数据包
+
+用于验证未来 3 天计划、全部已下单计划、计划下达、产线/物料/日期筛选。
+
+建议准备:
+
+- 未来 3 天内日计划 20-50 行。
+- 超出 3 天范围但已下单计划 10-20 行。
+- 覆盖未下达、已下达、暂停、完成状态。
+- 关联工单、产线、物料、报工点和物料状态。
+
+### 5.4 异常与看板数据包
+
+用于验证排产异常记录、工单执行进度看板和 S2 制造协同看板。
+
+建议准备:
+
+- 排产异常 10-20 条,覆盖资源冲突、产能不足、物料不足、工艺缺失、日历不可用。
+- 工单执行进度数据覆盖资源检查、采购、备料、生产、入库各阶段。
+- 至少 2 个工单缺少部分跟踪数据,用于验证空状态不影响其它数据展示。
+- KPI 数据覆盖排程达成率、工单准时率、异常数、产线负荷、齐套率。
+
+## 6. 目标表与数据来源建议
+
+| 数据类型 | 旧库素材表/来源 | 新系统目标/平台层 | 处理策略 |
+|----------|-----------------|-------------------|----------|
+| 工单主数据 | `mes_morder`、`WorkOrdMaster` | `mes_morder`、`ado_s2_work_order`、`dwd_order_schedule_trans` | 以旧库工单为蓝本,生成新系统 ID |
+| 工单明细 | `mes_moentry`、`WorkOrdDetail` | `mes_moentry`、`ado_s2_work_order_op` | 保持工单到明细关联 |
+| 工艺路线 | `RoutingOpDetail`、`WorkOrdRouting` | 工序/工艺明细、S2 看板 | 可按物料补造 |
+| 排程明细 | `PeriodSequenceDet` | `mdp_stg_schedule`、`mdp_std_work_order_schedule` | 保留计划日期、产线、工序 |
+| 排程结果 | `ScheduleResultOpMaster` | `dwd_order_schedule_trans` | 保留执行结果和时间 |
+| 报工/执行 | `OpTransEmployee` | 执行进度、DWD/KPI | 按工单抽样 |
+| 产线日历 | 旧库主数据或补造 | 产线工作日历相关表 | 可按测试报告补造 |
+| 异常记录 | 旧库异常或补造 | 排产异常记录表、看板异常 | 优先补造覆盖异常类型 |
+
+## 7. 导入与生成原则
+
+1. 旧库只作为素材库,不保留旧库原始主键作为强约束。
+2. 工单、工序、物料、产线、日历、排程必须能串联。
+3. 日计划日期应覆盖未来 3 天和更长范围。
+4. 产线日历、休息、节假日、加班之间不能互相矛盾,异常样例需单独标记。
+5. 看板数据应同时覆盖有数据、缺数据、异常数据。
+6. 所有数据写入 AIDOP 租户,并带批次标记。
+7. 首轮只导入 P0 工单排程闭环样例,验证通过后扩展日历和看板。
+
+## 8. P0 试导建议
+
+P0 试导建议选择:
+
+- 5-10 个工单。
+- 每工单 2-3 道工序。
+- 每工单 2-5 行物料需求。
+- 2 条排产异常。
+- 2 条可执行日计划。
+- 2 条产线日历配置。
+- 1 条休息时间、1 条节假日、1 条加班记录。
+
+## 9. 验收 SQL 方向
+
+正式 SQL 需结合实际表结构生成,至少验证:
+
+- 工单主表、工单明细、工序明细数量。
+- 排程明细、排程结果数量。
+- 可执行日计划数量。
+- 产线工作日历、休息、节假日、加班数量。
+- 排产异常数量。
+- `mdp_stg_schedule`、`mdp_std_work_order_schedule`、`dwd_order_schedule_trans`。
+- `ado_s9_kpi_value_l1_day` 中 S2 指标写入。
+
+## 10. 下一步
+
+1. 只读确认 UAT S2 目标表结构和现有 AIDOP 租户数据量。
+2. 从旧库筛选工单、工艺、排程、执行样本。
+3. 补造产线日历、休息、节假日、加班和异常样例。
+4. 生成 P0 试导 SQL。
+5. 人工确认后执行 P0 试导。
+6. 验证 S2 页面、MDP、DWD、KPI 和看板。

+ 124 - 0
doc/plan/S3/S3供应协同UAT数据生成执行任务书.md

@@ -0,0 +1,124 @@
+# S3 供应协同 UAT 数据生成执行任务书
+
+## 1. 任务目标
+
+为 S3 供应协同生成 UAT 测试数据,支撑物料需求计划、交货计划、采购申请、要货令、采购订单、委外加工、工序外协、供应协同看板和工单齐套上线看板测试。
+
+## 2. 必读文档
+
+- `doc/plan/S3/S3供应协同UAT测试数据生成方案.md`
+- `doc/plan/S1/S1产销协同UAT数据生成执行任务书.md`
+- `doc/plan/数据库迁移/S3/S3数据中台与看板动态化验收.md`
+- `doc/plan/aidop项目服务器数据库相关资源信息.md`
+
+## 3. 核心约束
+
+- 所有写入数据必须使用 AIDOP 租户:`tenant_id = 1300000000001`。
+- 不得写入 Demo 租户:`tenant_id = 1300000000888`。
+- 推荐批次号:`S3_UAT_20260604_RQ_V1`。
+- 旧库仅作素材库,不做生产迁移。
+- 先做只读检查和 P0 SQL,未经人工确认不得写入 UAT MySQL。
+- 不要求复杂回滚脚本,但必须有批次标记。
+
+## 4. 执行阶段
+
+### 阶段 1:只读检查
+
+只允许执行 SELECT 或元数据查询。
+
+必须输出:
+
+- AIDOP 租户确认结果。
+- S3 目标表清单和字段缺口。
+- AIDOP 租户下现有 S3 数据量。
+- P0 物料、供应商、采购订单是否已存在。
+
+### 阶段 2:生成 P0 中间数据
+
+P0 至少包含:
+
+- 10-20 条物料需求计划。
+- 5-10 条交货计划。
+- 5 张采购申请。
+- 5 张采购订单,每张不少于 2 行。
+- 3 个供应商。
+- 3 条交货异常。
+- 2 条齐套缺料样例。
+
+### 阶段 3:补造供应协同场景
+
+补造旧库缺失但测试报告要求的数据:
+
+- 供应商主数据与供应商物料关系。
+- 发布/取消发布/生成交货单状态。
+- 交货异常与供应风险。
+- 委外加工订单。
+- 工序外协订单。
+- 齐套上线缺料和风险状态。
+
+### 阶段 4:生成 P0 SQL
+
+SQL 必须包含:
+
+- 批次变量。
+- 重复数据检查。
+- ID 映射逻辑。
+- 物料、供应商、需求、采购、交货、异常、齐套数据写入。
+- MDP/DWD/KPI 验收 SQL。
+- 执行前人工确认提示。
+
+### 阶段 5:人工确认
+
+执行写入前确认:
+
+- 目标库为 UAT `aidopdev`。
+- 租户 ID 为 `1300000000001`。
+- 不包含全表删除、全库更新、无条件覆盖。
+- 不包含明文凭据。
+- P0 数据量符合测试报告最小要求。
+
+### 阶段 6:P0 试导与验收
+
+导入后验证:
+
+- 物料需求计划可查询、发布、全部发布、新增、编辑、删除。
+- 交货计划可查询、发布、取消发布、生成交货单、批量添加。
+- 采购申请、采购订单、要货令可查询。
+- 委外、外协订单可查询。
+- 交货异常和齐套上线看板有数据。
+- S3 MDP、DWD、KPI 有结果。
+
+## 5. 给执行模型的提示词
+
+```text
+你要为 Ai-DOP 新系统 UAT 环境生成 S3 供应协同测试数据。
+
+请严格阅读:
+1. doc/plan/S3/S3供应协同UAT测试数据生成方案.md
+2. doc/plan/S3/S3供应协同UAT数据生成执行任务书.md
+3. doc/plan/数据库迁移/S3/S3数据中台与看板动态化验收.md
+4. doc/plan/aidop项目服务器数据库相关资源信息.md
+
+第一步只允许做只读检查,不得写 UAT 数据库。
+
+重要约束:
+- 所有数据必须写入 AIDOP 租户 tenant_id = 1300000000001。
+- 不得写入 Demo 租户 tenant_id = 1300000000888。
+- 批次号使用 S3_UAT_20260604_RQ_V1。
+- 旧库只是素材库,不要全量导入。
+- 未经人工确认不得执行写入。
+
+请先输出:
+1. S3 目标表和字段确认
+2. AIDOP 租户下现有 S3 数据量
+3. P0 数据生成计划
+4. P0 SQL 生成计划
+```
+
+## 6. 完成标准
+
+- P0 物料需求、交货计划、采购订单能在页面查询。
+- S3 交货异常、委外、外协、齐套上线样例可测试。
+- S3 MDP、DWD、KPI 有结果。
+- 数据全部归属 AIDOP 租户。
+- Demo 租户无新增数据。

+ 146 - 0
doc/plan/S3/S3供应协同UAT测试数据生成方案.md

@@ -0,0 +1,146 @@
+# S3 供应协同 UAT 测试数据生成方案
+
+## 1. 目标
+
+为新系统正式 UAT 测试准备 S3 供应协同业务数据。旧 DOP 数据库仅作为真实业务素材库,最终目标是构造一套归属 AIDOP 租户、能支撑物料需求、交货计划、采购申请、采购订单、委外外协、齐套上线和 S3 看板的测试数据。
+
+本方案参考 `S3供应协同_UAT测试报告v1.0.xlsx`,并沿用 S1/S2 的 UAT 数据准备原则:不做生产迁移,不照搬旧库主键和全字段,优先保证业务链路、测试场景、异常状态、数据中台和看板指标可验证。
+
+S3 的 P0 数据必须优先复用 S1-S2 全局主线。物料需求、采购申请、采购订单、交货计划和齐套上线数据应能追溯到 S2 工单或 S1 订单需求,后续 S4 采购执行应基于这些 S3 采购订单和交货计划生成。全局链路要求见 `doc/plan/S1-S4全局UAT场景测试数据生成方案.md`。
+
+## 2. 来源与目标
+
+| 类型 | 数据库/文件 | 用途 |
+|------|-------------|------|
+| 测试报告 | `D:\Projects\Ai-DOP\项目\项目测试\S3供应协同_UAT测试报告v1.0.xlsx` | S3 场景和用例来源 |
+| 旧 DOP 瑞奇库 | SQL Server `dopdemorq` | 物料、供应商、采购、交付、委外等素材来源 |
+| UAT 新系统库 | MySQL `aidopdev` | 目标导入库 |
+
+## 3. 租户与批次
+
+| 项 | 值 |
+|----|----|
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 推荐批次号 | `S3_UAT_20260604_RQ_V1` |
+
+所有写入 UAT 的数据必须使用 `tenant_id = 1300000000001`,不得写入 Demo 租户。每批数据需带批次标记。
+
+## 4. 测试报告覆盖场景
+
+S3 测试报告包含 10 个分场景,报告要求每个场景不少于 2 张单据、每单行数不少于 2 行,并包含异常场景验证。
+
+| 序号 | 场景 | 数据要求 |
+|------|------|----------|
+| 1 | 物料需求计划 | 物料、需求日期、需求量、可用库存、净需求、建议采购量、MRP 状态 |
+| 2 | 物料交货计划 | 物料、供应商、交货日期、交货数量、发布状态、到货状态 |
+| 3 | 交货单异常记录 | 交货单、供应商、异常类型、异常描述、发生时间 |
+| 4 | 物料采购申请 | 物料、需求来源、申请数量、申请状态、审批/发布状态 |
+| 5 | 要货令 | 要货令主表、明细、供应商、交期、状态 |
+| 6 | 物料采购订单 | 采购订单、明细、供应商、物料、数量、价格、交期 |
+| 7 | 委外加工订单 | 委外供应商、加工物料、数量、交期、收发料状态 |
+| 8 | 工序外协订单 | 工单、工序、外协供应商、外协数量、交期 |
+| 9 | 供应协同看板 | 供应 KPI、交货计划、风险、异常、供应商表现 |
+| 10 | 工单物料齐套上线看板 | 工单、物料齐套、缺料、上线日期、风险状态 |
+
+## 5. 场景化数据包
+
+### 5.1 需求到交货闭环数据包
+
+用于验证物料需求计划、发布、交货计划、生成交货单、采购申请和采购订单链路。
+
+建议准备:
+
+- 30-80 条物料需求计划。
+- 覆盖未发布、已发布、部分转交货、已生成采购申请状态。
+- 20-50 条交货计划,关联供应商和采购订单。
+- 10-30 条采购申请,关联物料需求。
+- 10-30 张采购订单,每张不少于 2 行明细。
+
+### 5.2 供应异常与风险数据包
+
+用于验证交货单异常、供应风险和看板预警。
+
+建议准备:
+
+- 10-20 条交货异常,覆盖延期、数量不足、供应商未回复、质量风险、计划变更。
+- 至少 5 个供应商,覆盖正常、延期、高风险、黑名单/禁用样例。
+- 至少 5 条物料缺口,支撑齐套上线看板。
+
+### 5.3 委外与外协数据包
+
+用于验证委外加工订单和工序外协订单。
+
+建议准备:
+
+- 5-10 张委外加工订单,每张不少于 2 行明细。
+- 5-10 张工序外协订单,关联工单、工序和供应商。
+- 覆盖未下达、已下达、部分收货、已完成、异常状态。
+
+### 5.4 看板与数据中台数据包
+
+用于验证 S3 供应协同看板、工单齐套上线看板、MDP/DWD/KPI。
+
+建议准备:
+
+- 供应商交付准时率、延期数、缺料数、风险数等指标样例。
+- 物料齐套率、缺料明细、预计上线日期。
+- 覆盖有数据、空数据、异常数据三种状态。
+
+## 6. 目标表与数据来源建议
+
+| 数据类型 | 旧库素材表/来源 | 新系统目标/平台层 | 处理策略 |
+|----------|-----------------|-------------------|----------|
+| 物料主数据 | `ItemMaster` | `mdp_std_item`、S3 页面 | 抽取需求/采购/订单涉及物料 |
+| 供应商主数据 | 供应商相关旧表或补造 | `mdp_std_supplier`、S3 页面 | 至少覆盖 5-10 个供应商 |
+| 物料需求 | `srm_pr_main`、工单物料需求 | `mdp_stg_supply_demand`、`mdp_std_supply_demand`、`dwd_supply_demand` | 按物料和工单生成 |
+| 采购申请 | `srm_pr_main` | `mdp_std_purchase_request` | 保留申请数量、需求来源、状态 |
+| 采购订单 | `PurOrdMaster`、`PurOrdDetail` | `mdp_stg_purchase_order`、`mdp_std_purchase_order` | 关联供应商、物料、交期 |
+| 交货计划 | `srm_polist_ds` | `mdp_std_delivery_schedule` | 覆盖发布/取消/生成交货单 |
+| 交付结果 | 收货/发货相关旧表或补造 | `mdp_std_delivery_result`、`dwd_supplier_delivery` | 支撑准时率、延期、风险 |
+| 委外外协 | 委外/外协旧表或补造 | `mdp_std_process_outsource_order`、`dwd_process_outsource_delivery` | 按测试报告补造 |
+| 齐套上线 | 工单、物料、需求核验 | `dwd_material_readiness`、`dwd_material_shortage` | 关联 S2 工单和物料 |
+
+## 7. 生成与导入原则
+
+1. 旧库只作为素材库,不保留旧库原始主键作为强约束。
+2. 物料、供应商、采购申请、采购订单、交货计划必须能串联。
+3. 所有测试数据必须归属 AIDOP 租户,并带批次标记。
+4. 交货计划与采购订单数量不能明显矛盾。
+5. 交付结果需要覆盖准时、延期、部分交付、未交付。
+6. 委外和外协若旧库链路不足,可按同一批工单、物料和供应商补造。
+7. 首轮先导入需求到交货闭环,再扩展委外、外协和看板。
+
+## 8. P0 试导建议
+
+P0 试导建议选择:
+
+- 10-20 条物料需求计划。
+- 5-10 条交货计划。
+- 5 张采购申请。
+- 5 张采购订单,每张不少于 2 行。
+- 3 个供应商。
+- 3 条交货异常。
+- 2 条齐套缺料样例。
+
+## 9. 验收 SQL 方向
+
+正式 SQL 需结合实际表结构生成,至少验证:
+
+- 物料需求、交货计划、采购申请、采购订单数量。
+- 供应商、供应商物料关系数量。
+- 委外、外协订单数量。
+- 交货异常数量。
+- `mdp_stg_supply_demand`、`mdp_std_supply_demand`、`dwd_supply_demand`。
+- `mdp_std_purchase_request`、`mdp_std_purchase_order`、`mdp_std_delivery_schedule`、`mdp_std_delivery_result`。
+- `dwd_supplier_delivery`、`dwd_supplier_risk`、`dwd_material_readiness`、`dwd_material_shortage`。
+- `ado_s9_kpi_value_l1_day` 中 S3 指标写入。
+
+## 10. 下一步
+
+1. 只读确认 UAT S3 目标表结构和 AIDOP 租户数据量。
+2. 从旧库筛选物料、供应商、采购订单、交货计划样本。
+3. 补造交货异常、委外、外协、齐套上线样例。
+4. 生成 P0 试导 SQL。
+5. 人工确认后执行 P0 试导。
+6. 验证 S3 页面、MDP、DWD、KPI 和看板。

+ 131 - 0
doc/plan/S4/S4采购执行UAT数据生成执行任务书.md

@@ -0,0 +1,131 @@
+# S4 采购执行 UAT 数据生成执行任务书
+
+## 1. 任务目标
+
+为 S4 采购执行生成 UAT 测试数据,支撑供应商交货管理、供应商发货单、采购退货单、IQC 退货查询、采购执行看板主页和供应商欠料看板测试。
+
+S4 当前尚未完全完成开发,本任务以测试报告驱动数据准备。待 S4 页面、接口、表结构和数据中台链路完成后,再做实现交叉校验。
+
+## 2. 必读文档
+
+- `doc/plan/S4/S4采购执行UAT测试数据生成方案.md`
+- `doc/plan/S3/S3供应协同UAT测试数据生成方案.md`
+- `doc/plan/S1/S1产销协同UAT数据生成执行任务书.md`
+- `doc/plan/aidop项目服务器数据库相关资源信息.md`
+
+## 3. 核心约束
+
+- 所有写入数据必须使用 AIDOP 租户:`tenant_id = 1300000000001`。
+- 不得写入 Demo 租户:`tenant_id = 1300000000888`。
+- 推荐批次号:`S4_UAT_20260604_RQ_V1`。
+- 旧库仅作素材库,不做生产迁移。
+- S4 未完成前,不得假定目标表和接口已稳定。
+- 先做只读检查和 P0 SQL,未经人工确认不得写入 UAT MySQL。
+- 不要求复杂回滚脚本,但必须有批次标记。
+
+## 4. 执行阶段
+
+### 阶段 1:只读检查
+
+只允许执行 SELECT 或元数据查询。
+
+必须输出:
+
+- AIDOP 租户确认结果。
+- S4 当前已存在目标表清单。
+- 已开发页面/API 与测试报告差异。
+- AIDOP 租户下现有 S4 数据量。
+- P0 采购订单、供应商、物料是否已存在。
+
+### 阶段 2:生成 P0 中间数据
+
+P0 至少包含:
+
+- 5 张采购订单,每张不少于 2 行。
+- 5 条供应商交货记录。
+- 3 张供应商发货单。
+- 2 张采购退货单。
+- 2 条 IQC 退货查询记录。
+- 5 条供应商欠料看板记录。
+- 2 条异常场景记录。
+
+### 阶段 3:补造采购执行场景
+
+补造旧库缺失但测试报告要求的数据:
+
+- 交货发布、交期回复、按计划日期回复。
+- 生成发货单、发货单标签、送货单打印、质检附件。
+- 采购退货和 IQC 退货。
+- 供应商欠料和看板 KPI。
+- 异常场景:多供应商生成发货单、未收完关闭、发货超量、未关联采购订单。
+
+### 阶段 4:生成 P0 SQL
+
+SQL 必须包含:
+
+- 批次变量。
+- 重复数据检查。
+- ID 映射逻辑。
+- 采购订单、交货、发货、退货、IQC、欠料数据写入。
+- 验收 SQL。
+- 执行前人工确认提示。
+
+如目标表尚未完成,则先生成中间数据和字段映射草案,不执行写入。
+
+### 阶段 5:人工确认
+
+执行写入前确认:
+
+- 目标库为 UAT `aidopdev`。
+- 租户 ID 为 `1300000000001`。
+- 目标表确实存在且字段已确认。
+- 不包含全表删除、全库更新、无条件覆盖。
+- 不包含明文凭据。
+- P0 数据量符合测试报告最小要求。
+
+### 阶段 6:P0 试导与验收
+
+导入后验证:
+
+- 供应商交货管理可查询、发布、回复和生成发货单。
+- 供应商发货单可查询、编辑、生成标签、打印、上传附件。
+- 采购退货单和 IQC 退货查询有数据。
+- 采购执行看板和供应商欠料看板有数据。
+- 数据全部归属 AIDOP 租户。
+
+## 5. 给执行模型的提示词
+
+```text
+你要为 Ai-DOP 新系统 UAT 环境生成 S4 采购执行测试数据。
+
+请严格阅读:
+1. doc/plan/S4/S4采购执行UAT测试数据生成方案.md
+2. doc/plan/S4/S4采购执行UAT数据生成执行任务书.md
+3. doc/plan/aidop项目服务器数据库相关资源信息.md
+
+第一步只允许做只读检查,不得写 UAT 数据库。
+
+重要约束:
+- S4 尚未完全完成开发,当前以测试报告驱动造数。
+- 所有数据必须写入 AIDOP 租户 tenant_id = 1300000000001。
+- 不得写入 Demo 租户 tenant_id = 1300000000888。
+- 批次号使用 S4_UAT_20260604_RQ_V1。
+- 旧库只是素材库,不要全量导入。
+- 未确认目标表和字段前,不得执行写入。
+- 未经人工确认不得执行写入。
+
+请先输出:
+1. S4 当前目标表和字段确认
+2. 已开发功能与测试报告差异
+3. AIDOP 租户下现有 S4 数据量
+4. P0 数据生成计划
+5. P0 SQL 或中间数据生成计划
+```
+
+## 6. 完成标准
+
+- P0 采购订单、交货、发货、退货、IQC、欠料数据可识别。
+- 已完成开发的 S4 页面能按测试报告查询和操作。
+- 未完成开发的场景已标注为待实现交叉校验。
+- 数据全部归属 AIDOP 租户。
+- Demo 租户无新增数据。

+ 154 - 0
doc/plan/S4/S4采购执行UAT测试数据生成方案.md

@@ -0,0 +1,154 @@
+# S4 采购执行 UAT 测试数据生成方案
+
+## 1. 目标
+
+为新系统正式 UAT 测试准备 S4 采购执行业务数据。由于 S4 当前尚未完全完成开发,本方案以 `S4采购执行_UAT测试报告v1.0.xlsx` 为主要依据,先设计可支撑测试报告场景的数据包;待 S4 功能、页面、接口和数据中台链路完成后,再进行实现交叉校验和字段级修订。
+
+本方案不是生产迁移,不要求照搬旧库主键和全字段。旧 DOP 数据库仅作为真实业务素材库,必要时可以围绕测试场景补造数据。
+
+S4 的 P0 数据必须优先复用 S1-S3 全局主线。供应商交货、发货、IQC、退货和欠料数据应能追溯到 S3 采购订单或交货计划,并进一步关联到 S2 工单和 S1 销售订单。S4 尚未完全完成开发时,先按该链路设计占位数据,待功能完成后再做字段和接口校验。全局链路要求见 `doc/plan/S1-S4全局UAT场景测试数据生成方案.md`。
+
+## 2. 来源与目标
+
+| 类型 | 数据库/文件 | 用途 |
+|------|-------------|------|
+| 测试报告 | `D:\Projects\Ai-DOP\项目\项目测试\S4采购执行_UAT测试报告v1.0.xlsx` | S4 场景和用例来源 |
+| 旧 DOP 瑞奇库 | SQL Server `dopdemorq` | 采购订单、供应商、交货、发货、退货等素材来源 |
+| UAT 新系统库 | MySQL `aidopdev` | 目标导入库 |
+
+## 3. 租户与批次
+
+| 项 | 值 |
+|----|----|
+| AIDOP 租户 ID | `1300000000001` |
+| Demo 租户 ID | `1300000000888` |
+| 推荐批次号 | `S4_UAT_20260604_RQ_V1` |
+
+所有写入 UAT 的数据必须使用 `tenant_id = 1300000000001`,不得写入 Demo 租户。每批数据需带批次标记。
+
+## 4. 测试报告覆盖场景
+
+S4 测试报告包含 6 个分场景,报告要求每个场景不少于 2 张单据、每单行数不少于 2 行,并包含异常场景验证。
+
+| 序号 | 场景 | 数据要求 |
+|------|------|----------|
+| 1 | 供应商交货管理 | 采购订单、供应商、物料、计划交期、实际交期、交货数量、状态 |
+| 2 | 供应商发货单 | 发货单、供应商、采购订单、发货日期、发货数量、状态、标签、质检附件 |
+| 3 | 采购退货单 | 退货单、供应商、采购订单、退货数量、退货原因、退货状态 |
+| 4 | IQC 退货查询 | IQC 检验、退货记录、供应商、物料、质量状态 |
+| 5 | 采购执行看板主页 | 采购交付 KPI、订单交付、收货、退货、异常、风险 |
+| 6 | 供应商欠料看板 | 供应商欠料、物料缺口、交期风险、欠料数量 |
+
+## 5. 场景化数据包
+
+### 5.1 供应商交货闭环数据包
+
+用于验证供应商交货管理的查询、发布、交期回复、按计划日期回复、生成发货单、交货单关闭和导出。
+
+建议准备:
+
+- 10-20 条供应商交货记录。
+- 5-10 张采购订单,每张不少于 2 行。
+- 3-5 个供应商。
+- 覆盖未发布、已发布、已回复、收货中、已收完、已关闭状态。
+- 至少 2 条异常:多供应商生成发货单、未收完关闭交货单。
+
+### 5.2 供应商发货单数据包
+
+用于验证发货单查询、编辑、查看、生成标签、打印送货单、打印标签、上传质检报告和删除。
+
+建议准备:
+
+- 5-10 张供应商发货单,每张不少于 2 行。
+- 覆盖待确认、已生成标签、收货中、完成、已删除/作废状态。
+- 2-5 条标签数据。
+- 2-5 个质检附件占位数据。
+- 至少 1 条异常:已生成标签的发货单不可编辑。
+
+### 5.3 采购退货与 IQC 数据包
+
+用于验证采购退货单和 IQC 退货查询。
+
+建议准备:
+
+- 5-10 张采购退货单,每张不少于 2 行。
+- 覆盖待提交、已提交、已审核、已完成、作废状态。
+- 5-10 条 IQC 检验或退货查询记录。
+- 退货原因覆盖质量不合格、数量异常、错料、供应商原因。
+- 至少 2 条异常:退货数量超过已收数量、未关联检验记录退货。
+
+### 5.4 看板与欠料数据包
+
+用于验证采购执行看板主页和供应商欠料看板。
+
+建议准备:
+
+- 采购订单总数、按期交付、延期交付、退货数、异常数等 KPI 样例。
+- 供应商欠料 10-20 条,覆盖高/中/低风险。
+- 物料缺口、预计到货日、影响工单或销售订单。
+- 覆盖有数据、空数据、异常数据三种看板状态。
+
+## 6. 目标表与数据来源建议
+
+S4 尚未完全完成开发,以下目标表仅作为数据设计方向,正式执行前必须按实际表结构确认。
+
+| 数据类型 | 旧库素材表/来源 | 新系统目标/平台层 | 处理策略 |
+|----------|-----------------|-------------------|----------|
+| 供应商 | 供应商相关旧表或补造 | 供应商主数据、`mdp_std_supplier` | 至少 3-5 个供应商 |
+| 采购订单 | `PurOrdMaster`、`PurOrdDetail` | 采购订单业务表、`mdp_std_purchase_order` | 保留订单号、供应商、物料、数量、交期 |
+| 交货管理 | `srm_polist_ds` 或补造 | 供应商交货管理表、`mdp_std_delivery_schedule` | 重点覆盖发布、回复、关闭 |
+| 发货单 | 旧库发货/ASN 或补造 | 供应商发货单表、标签表 | 按采购订单生成 |
+| 收货/IQC | 收货、检验相关旧表或补造 | IQC、收货、退货相关表 | S4 未完成时以测试报告字段补造 |
+| 采购退货 | 退货相关旧表或补造 | 采购退货单表 | 覆盖退货状态和原因 |
+| 欠料看板 | 采购订单、交货计划、工单缺料 | 欠料看板、DWD/KPI | 可与 S3 齐套/缺料样例联动 |
+
+## 7. 生成与导入原则
+
+1. S4 当前以测试报告驱动造数,不假定所有页面/API/表已完成。
+2. 正式执行前必须只读确认 S4 目标表结构。
+3. 旧库只作为素材库,不保留旧库原始主键作为强约束。
+4. 采购订单、交货记录、发货单、退货单、IQC、欠料必须能通过供应商、采购订单号、物料编码串联。
+5. 交货数量、发货数量、收货数量、退货数量不能明显矛盾。
+6. 异常样例需单独标记,避免影响正常闭环数据。
+7. 所有数据写入 AIDOP 租户,并带批次标记。
+
+## 8. P0 试导建议
+
+P0 试导建议选择:
+
+- 5 张采购订单,每张不少于 2 行。
+- 5 条供应商交货记录。
+- 3 张供应商发货单。
+- 2 张采购退货单。
+- 2 条 IQC 退货查询记录。
+- 5 条供应商欠料看板记录。
+- 2 条异常场景记录。
+
+## 9. 验收方向
+
+正式 SQL 需结合实际表结构生成,至少验证:
+
+- 采购订单、交货记录、发货单、退货单、IQC 记录数量。
+- 供应商欠料记录数量。
+- 供应商、物料、采购订单关联完整性。
+- 看板 KPI 数据是否能按 AIDOP 租户产出。
+- S4 页面已开发部分是否能按测试报告查询和操作。
+
+## 10. 待开发完成后的补充校验
+
+S4 功能完成后必须补做:
+
+- 页面菜单和按钮与测试报告逐项对照。
+- 后端 API / Service 实际读取表确认。
+- MDP、DWD、KPI 链路确认。
+- 目标表字段级映射确认。
+- P0 试导 SQL 重新生成和人工确认。
+
+## 11. 下一步
+
+1. 只读确认 UAT S4 已有表结构和当前开发完成范围。
+2. 按测试报告生成 P0 中间数据。
+3. 从旧库筛选采购订单、供应商、物料、交货素材。
+4. 补造发货单、采购退货、IQC 和欠料样例。
+5. 生成 P0 试导 SQL。
+6. 待人工确认后执行 P0 试导。