-- 修复 WX-20260730001 / WX-20260730002 调拨明细归属异常
-- 修改人:Ld 修改时间:2026-07-31 15:56:00;
SET NOCOUNT ON;
SET XACT_ABORT ON;

-- 修复前快照，便于回溯。修改人:Ld 修改时间:2026-07-31 15:56:00;
IF OBJECT_ID(N'dbo.GPT_调拨修复备份_20260731_1556_单', N'U') IS NULL
    SELECT * INTO dbo.GPT_调拨修复备份_20260731_1556_单 FROM dbo.车间生产管理_外协调拨单 WHERE 外协调拨单流水号 IN (2369,2370);
IF OBJECT_ID(N'dbo.GPT_调拨修复备份_20260731_1556_明细', N'U') IS NULL
    SELECT * INTO dbo.GPT_调拨修复备份_20260731_1556_明细 FROM dbo.车间生产管理_外协调拨单明细 WHERE 外协调拨单流水号 IN (2369,2370) OR 外协调拨单明细流水号 IN (6325,6326,6327,6328,6329);
IF OBJECT_ID(N'dbo.GPT_调拨修复备份_20260731_1556_工序', N'U') IS NULL
    SELECT * INTO dbo.GPT_调拨修复备份_20260731_1556_工序 FROM dbo.车间生产管理_外协调拨单明细_工序 WHERE 外协调拨单流水号 IN (2369,2370) OR 外协调拨单明细流水号 IN (6325,6326,6327,6328,6329) OR 工序流水号 IN (108349,81720,30967);
IF OBJECT_ID(N'dbo.GPT_调拨修复备份_20260731_1556_零件工序', N'U') IS NULL
    SELECT * INTO dbo.GPT_调拨修复备份_20260731_1556_零件工序 FROM dbo.车间生产管理工艺_零件工序 WHERE 工序流水号 IN (108349,81720,30967);
IF OBJECT_ID(N'dbo.GPT_调拨修复备份_20260731_1556_任务分配', N'U') IS NULL
    SELECT * INTO dbo.GPT_调拨修复备份_20260731_1556_任务分配 FROM dbo.车间生产管理工艺_零件工序_任务分配 WHERE 工艺任务流水号 IN (39177,36624,38805) OR 工序流水号 IN (108349,81720,30967);

BEGIN TRAN;

IF NOT EXISTS (SELECT 1 FROM dbo.车间生产管理_外协调拨单 WHERE 外协调拨单流水号 = 2369 AND 调拨单号 = N'WX-20260730001')
BEGIN
    RAISERROR(N'未找到 WX-20260730001 对应流水号 2369，停止修复', 16, 1);
    ROLLBACK TRAN;
    RETURN;
END
IF NOT EXISTS (SELECT 1 FROM dbo.车间生产管理_外协调拨单 WHERE 外协调拨单流水号 = 2370 AND 调拨单号 = N'WX-20260730002')
BEGIN
    RAISERROR(N'未找到 WX-20260730002 对应流水号 2370，停止修复', 16, 1);
    ROLLBACK TRAN;
    RETURN;
END
IF NOT EXISTS (SELECT 1 FROM dbo.车间生产管理_外协调拨单明细 WHERE 外协调拨单明细流水号 = 6328 AND 外协调拨单流水号 = 2369 AND 工艺计划流水号 = 1724 AND 外协数量 = 1)
BEGIN
    RAISERROR(N'未找到待移动明细 6328，停止修复', 16, 1);
    ROLLBACK TRAN;
    RETURN;
END
IF EXISTS (SELECT 1 FROM dbo.车间生产管理_外协调拨单明细 WHERE 外协调拨单明细流水号 IN (6325,6326))
BEGIN
    RAISERROR(N'原明细流水号 6325/6326 已存在，停止修复', 16, 1);
    ROLLBACK TRAN;
    RETURN;
END
IF NOT EXISTS (SELECT 1 FROM dbo.车间生产管理_外协调拨单明细 WHERE 外协调拨单明细流水号 = 6329 AND 外协调拨单流水号 = 2369 AND 工艺计划流水号 = 4313 AND 外协数量 = 100)
BEGIN
    RAISERROR(N'未找到待替换明细 6329，停止修复', 16, 1);
    ROLLBACK TRAN;
    RETURN;
END

-- 将本应属于 WX-20260730002 的明细移到新单。修改人:Ld 修改时间:2026-07-31 15:56:00;
UPDATE dbo.车间生产管理_外协调拨单明细
SET 外协调拨单流水号 = 2370
WHERE 外协调拨单明细流水号 = 6328;

UPDATE dbo.车间生产管理_外协调拨单明细_工序
SET 外协调拨单流水号 = 2370
WHERE 外协调拨单明细流水号 = 6328;

-- 恢复 WX-20260730001 原明细流水号，避免保留误补流水号。修改人:Ld 修改时间:2026-07-31 15:56:00;
DELETE FROM dbo.车间生产管理_外协调拨单明细_工序
WHERE 外协调拨单明细流水号 = 6329;

DELETE FROM dbo.车间生产管理_外协调拨单明细
WHERE 外协调拨单明细流水号 = 6329;

SET IDENTITY_INSERT dbo.车间生产管理_外协调拨单明细 ON;
INSERT INTO dbo.车间生产管理_外协调拨单明细
    (外协调拨单明细流水号, 外协调拨单流水号, 工艺计划流水号, 外协价格, 外协数量, 到货状态, 到货数量, 操作日期, 到货时间, 备注)
VALUES
    (6325, 2369, 5710, NULL, 171, 0, NULL, '2026-07-30T10:48:58.617', NULL, NULL),
    (6326, 2369, 4313, NULL, 100, 0, NULL, '2026-07-30T10:49:29.737', NULL, NULL);
SET IDENTITY_INSERT dbo.车间生产管理_外协调拨单明细 OFF;

SET IDENTITY_INSERT dbo.车间生产管理_外协调拨单明细_工序 ON;
INSERT INTO dbo.车间生产管理_外协调拨单明细_工序
    (id, 外协调拨单流水号, 外协调拨单明细流水号, 工序流水号, 工序工时, 操作日期)
VALUES
    (6325, 2369, 6325, 108349, NULL, '2026-07-30T10:48:58.617'),
    (6326, 2369, 6326, 81720, NULL, '2026-07-30T10:49:29.737');
SET IDENTITY_INSERT dbo.车间生产管理_外协调拨单明细_工序 OFF;

-- 修正工序和任务选中/加工状态，不重复累加已外协数。修改人:Ld 修改时间:2026-07-31 15:56:00;
UPDATE dbo.车间生产管理工艺_零件工序
SET 是否选进外协单中 = CASE WHEN 工序流水号 = 30967 THEN 1 ELSE 0 END
WHERE 工序流水号 IN (108349,81720,30967);

UPDATE dbo.车间生产管理工艺_零件工序_任务分配
SET 是否加工中 = 1
WHERE 工艺任务流水号 IN (39177,36624,38805);

COMMIT TRAN;

SELECT N'修复完成' AS 结果;

SELECT o.外协调拨单流水号,o.调拨单号,o.单据状态,o.操作日期,o.备注
FROM dbo.车间生产管理_外协调拨单 o
WHERE o.外协调拨单流水号 IN (2369,2370)
ORDER BY o.外协调拨单流水号;

SELECT d.外协调拨单明细流水号,d.外协调拨单流水号,o.调拨单号,d.工艺计划流水号,g.工序流水号,d.外协数量,d.到货状态,d.到货数量,d.操作日期,d.到货时间,d.备注
FROM dbo.车间生产管理_外协调拨单明细 d
LEFT JOIN dbo.车间生产管理_外协调拨单 o ON d.外协调拨单流水号 = o.外协调拨单流水号
LEFT JOIN dbo.车间生产管理_外协调拨单明细_工序 g ON d.外协调拨单明细流水号 = g.外协调拨单明细流水号
WHERE d.外协调拨单流水号 IN (2369,2370)
ORDER BY d.外协调拨单流水号,d.外协调拨单明细流水号;

SELECT 工序流水号,工艺计划流水号,是否选进外协单中,已外协数,外协数量,到货数量,工序状态
FROM dbo.车间生产管理工艺_零件工序
WHERE 工序流水号 IN (108349,81720,30967)
ORDER BY 工序流水号;

SELECT 工艺任务流水号,工序流水号,人员编号,数量,已领数量,是否加工中
FROM dbo.车间生产管理工艺_零件工序_任务分配
WHERE 工艺任务流水号 IN (39177,36624,38805)
ORDER BY 工艺任务流水号;
