103 lines
3.1 KiB
SQL
103 lines
3.1 KiB
SQL
-- 原材料重量口径清理脚本
|
||
-- 目标:原材料业务只保留重量,不再保留数量口径。
|
||
-- 注意:成品、销售订单、发货、退货仍保留件数/PCS,不在本脚本处理范围内。
|
||
|
||
START TRANSACTION;
|
||
|
||
UPDATE md_material material
|
||
JOIN md_item item ON item.id = material.item_id
|
||
SET
|
||
material.purchase_calc_mode = 'BY_WEIGHT',
|
||
material.purchase_multiple_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE md_bom_item bom_item
|
||
JOIN md_item item ON item.id = bom_item.material_item_id
|
||
SET
|
||
bom_item.usage_type = 'WEIGHT',
|
||
bom_item.qty_per_piece = 1
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE mrp_material_demand
|
||
SET suggested_purchase_qty = 0;
|
||
|
||
UPDATE po_purchase_order_item po_item
|
||
JOIN md_item item ON item.id = po_item.material_item_id
|
||
SET
|
||
po_item.order_qty = 0,
|
||
po_item.received_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE po_receipt_item receipt_item
|
||
JOIN md_item item ON item.id = receipt_item.material_item_id
|
||
SET
|
||
receipt_item.received_qty = 0,
|
||
receipt_item.accepted_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE wh_stock_lot lot
|
||
JOIN md_item item ON item.id = lot.item_id
|
||
SET
|
||
lot.inbound_qty = 0,
|
||
lot.remaining_qty = 0,
|
||
lot.locked_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE wh_stock_balance balance
|
||
JOIN md_item item ON item.id = balance.item_id
|
||
SET
|
||
balance.qty_on_hand = 0,
|
||
balance.qty_available = 0,
|
||
balance.qty_allocated = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE wh_inventory_txn txn
|
||
JOIN md_item item ON item.id = txn.item_id
|
||
SET txn.qty_change = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE pp_work_order_material material
|
||
JOIN md_item item ON item.id = material.material_item_id
|
||
SET
|
||
material.required_qty = 0,
|
||
material.issued_qty = 0,
|
||
material.returned_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE pp_work_order_material_issue issue_row
|
||
JOIN md_item item ON item.id = issue_row.material_item_id
|
||
SET issue_row.issued_qty = 0
|
||
WHERE item.item_type = 'RAW_MATERIAL';
|
||
|
||
UPDATE pp_work_order wo
|
||
JOIN (
|
||
SELECT
|
||
wom.work_order_id,
|
||
FLOOR(
|
||
COALESCE(NULLIF(wom.issued_weight_kg, 0), NULLIF(wom.required_weight_kg, 0), 0)
|
||
/ COALESCE(NULLIF(bi.gross_weight_per_piece_kg, 0), NULLIF(product.unit_weight_kg, 0))
|
||
) AS reference_qty
|
||
FROM pp_work_order_material wom
|
||
JOIN (
|
||
SELECT work_order_id, MIN(id) AS first_material_row_id
|
||
FROM pp_work_order_material
|
||
GROUP BY work_order_id
|
||
) first_row ON first_row.first_material_row_id = wom.id
|
||
JOIN pp_work_order wo_inner ON wo_inner.id = wom.work_order_id
|
||
JOIN md_item product ON product.id = wo_inner.product_item_id
|
||
JOIN md_bom_item bi ON bi.id = wom.bom_item_id
|
||
JOIN md_item material ON material.id = wom.material_item_id
|
||
WHERE material.item_type = 'RAW_MATERIAL'
|
||
) calc ON calc.work_order_id = wo.id
|
||
SET
|
||
wo.planned_qty = calc.reference_qty,
|
||
wo.released_qty = calc.reference_qty
|
||
WHERE calc.reference_qty > 0;
|
||
|
||
UPDATE pp_work_order_operation operation
|
||
JOIN pp_work_order wo ON wo.id = operation.work_order_id
|
||
SET operation.planned_qty = wo.planned_qty
|
||
WHERE wo.planned_qty > 0;
|
||
|
||
COMMIT;
|