-- ============================================================
-- 1.0.213.sql
-- S5-PRODUCTION-RETURN-MDP-PIPELINE-1
--
-- 业务目标：
--   1) 新建 S5 生产退料单标准层 head-detail 双表（只读数据中台，DOP 内部）：
--      mdp_std_production_return（头）        源 NbrMaster(Type='WOD',IsActive=1,IsReturn=0)
--      mdp_std_production_return_detail（明细）源 NbrDetail(Type='WOD', NbrRecID→NbrMaster.RecID)
--      不建 stg、不建 dwd；不读/不改 S3/S4；不写源表。
--   2) 将「生产退料单」菜单（Id=1329015020004，仓储管理目录下）的 Component
--      由 placeholder 重指到真实页面 /aidop/s5/warehouse/productionReturnList。
--
-- 安全保证：
--   - DDL 仅 CREATE TABLE IF NOT EXISTS，幂等；不 DROP / TRUNCATE。
--   - 菜单仅 UPDATE 该单条 Component / Remark / UpdateTime；不改 Path/Name/Pid/Title/Type/OrderNo；
--     不 INSERT/DELETE；不动 SysTenantMenu / SysRoleMenu；不动其它菜单。
--   - 不动源单据表（NbrMaster/NbrDetail 等），不动 S3/S4 资产，不碰 S2 写路径。
-- ============================================================

CREATE TABLE IF NOT EXISTS mdp_std_production_return (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    tenant_id BIGINT NOT NULL DEFAULT 0,
    factory_id BIGINT NULL DEFAULT 1,
    source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
    domain VARCHAR(80) NOT NULL COMMENT '工厂/域 NbrMaster.Domain',
    rec_id INT NOT NULL COMMENT '源头主键 NbrMaster.RecID',
    nbr VARCHAR(24) NULL COMMENT '退料单号 NbrMaster.Nbr',
    return_date DATETIME NULL COMMENT '退料日期 NbrMaster.Date',
    status VARCHAR(8) NULL COMMENT '状态原值 NbrMaster.Status',
    status_desc VARCHAR(20) NULL COMMENT '状态中文（C→关闭）',
    work_ord VARCHAR(64) NULL COMMENT 'SAP单号/工单号 NbrMaster.WorkOrd',
    department VARCHAR(8) NULL COMMENT '部门编码 NbrMaster.Department',
    department_desc VARCHAR(255) NULL COMMENT '部门（编码+DepartmentMaster.Descr）',
    qty_ord DECIMAL(18,5) NULL DEFAULT 0 COMMENT '数量 NbrMaster.QtyOrd（默认隐藏）',
    prod_line VARCHAR(8) NULL COMMENT '生产线 NbrMaster.ProdLine',
    applicant_name VARCHAR(12) NULL COMMENT '申请人 NbrMaster.Name',
    return_user VARCHAR(255) NULL COMMENT '退料人（本批取 NbrMaster.User1）',
    user1 TEXT NULL COMMENT '原始 NbrMaster.User1',
    user2 TEXT NULL COMMENT '原始 NbrMaster.User2',
    remark VARCHAR(200) NULL COMMENT '备注 NbrMaster.Remark',
    create_user VARCHAR(24) NULL COMMENT '创建用户 NbrMaster.CreateUser',
    source_create_time DATETIME NULL COMMENT '源创建时间 NbrMaster.CreateTime',
    trans_type VARCHAR(24) NULL COMMENT '事务类型 NbrMaster.TransType',
    trans_type_text VARCHAR(50) NULL COMMENT '事务类型文案（旧系统恒空）',
    eff_date DATETIME NULL COMMENT '生效日期 NbrMaster.EffDate',
    ufld1 VARCHAR(50) NULL COMMENT '用户字段1 NbrMaster.Ufld1',
    source_biz_key VARCHAR(200) NULL COMMENT 'domain:rec_id',
    sync_batch_id VARCHAR(100) NOT NULL,
    sync_time DATETIME NOT NULL,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_mdp_std_prod_rtn (tenant_id, domain, rec_id),
    KEY idx_mdp_std_prod_rtn_nbr (tenant_id, nbr),
    KEY idx_mdp_std_prod_rtn_date (tenant_id, return_date),
    KEY idx_mdp_std_prod_rtn_status (tenant_id, status),
    KEY idx_mdp_std_prod_rtn_workord (tenant_id, work_ord),
    KEY idx_mdp_std_prod_rtn_prodline (tenant_id, prod_line),
    KEY idx_mdp_std_prod_rtn_dept (tenant_id, department)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S5生产退料单头标准层';

CREATE TABLE IF NOT EXISTS mdp_std_production_return_detail (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    tenant_id BIGINT NOT NULL DEFAULT 0,
    std_head_id BIGINT NULL COMMENT '回填头 mdp_std_production_return.id',
    domain VARCHAR(80) NOT NULL COMMENT '工厂/域',
    nbr_rec_id INT NOT NULL COMMENT '关联头 NbrDetail.NbrRecID→NbrMaster.RecID',
    rec_id INT NULL COMMENT '源明细主键 NbrDetail.RecID',
    line SMALLINT NOT NULL DEFAULT 0 COMMENT '项次 NbrDetail.Line',
    item_num VARCHAR(24) NULL COMMENT '物料编码 NbrDetail.ItemNum',
    item_name VARCHAR(200) NULL COMMENT '物料名称 ItemMaster.Descr',
    item_spec VARCHAR(200) NULL COMMENT '物料规格 ItemMaster.Descr1',
    um VARCHAR(8) NULL COMMENT '单位 NbrDetail.UM',
    qty_to DECIMAL(18,5) NULL DEFAULT 0 COMMENT '退料数量 NbrDetail.QtyTo',
    qty_rec DECIMAL(18,5) NULL DEFAULT 0 COMMENT '已退数 NbrDetail.QtyRec',
    location_from VARCHAR(8) NULL COMMENT '转出库位 NbrDetail.LocationFrom',
    location_from_desc VARCHAR(255) NULL COMMENT '转出库位名 LocationMaster.descr',
    location_to VARCHAR(8) NULL COMMENT '转入库位 NbrDetail.LocationTo',
    location_to_desc VARCHAR(255) NULL COMMENT '转入库位名 LocationMaster.descr',
    lot_serial VARCHAR(120) NULL COMMENT '批序号 NbrDetail.LotSerial',
    status VARCHAR(8) NULL COMMENT '状态原值 NbrDetail.Status',
    status_desc VARCHAR(20) NULL COMMENT '状态中文（C→关闭）',
    remark VARCHAR(500) NULL COMMENT '备注 NbrDetail.Remark',
    work_ord VARCHAR(64) NULL COMMENT '工单 NbrDetail.WorkOrd',
    source_biz_key VARCHAR(200) NULL COMMENT 'domain:nbr_rec_id:line',
    sync_batch_id VARCHAR(100) NOT NULL,
    sync_time DATETIME NOT NULL,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_mdp_std_prod_rtn_dtl (tenant_id, domain, nbr_rec_id, line),
    KEY idx_mdp_std_prod_rtn_dtl_head (tenant_id, std_head_id),
    KEY idx_mdp_std_prod_rtn_dtl_item (tenant_id, item_num),
    KEY idx_mdp_std_prod_rtn_dtl_locto (tenant_id, location_to),
    KEY idx_mdp_std_prod_rtn_dtl_lot (tenant_id, lot_serial)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S5生产退料单明细标准层';

UPDATE SysMenu
SET Component  = '/aidop/s5/warehouse/productionReturnList',
    Remark     = 'S5 生产退料单（只读 head-detail，数据中台标准层 mdp_std_production_return）',
    UpdateTime = NOW()
WHERE Id = 1329015020004;
