|
@@ -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 单数据包。
|