-- 托盘保存品种;仅从有效袋码中唯一且与已有批次兼容的品种回填。 SET @pallet_item_exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='mes_pro_pallet' AND column_name='item_id'); SET @pallet_item_ddl = IF(@pallet_item_exists=0, 'ALTER TABLE mes_pro_pallet ADD COLUMN item_id BIGINT DEFAULT NULL COMMENT ''托盘品种编号'' AFTER temp_code', 'SELECT 1'); PREPARE pallet_item_stmt FROM @pallet_item_ddl; EXECUTE pallet_item_stmt; DEALLOCATE PREPARE pallet_item_stmt; UPDATE mes_pro_pallet p JOIN (SELECT pallet_id, MIN(item_id) item_id FROM mes_pro_bag_code WHERE deleted=0 AND status<>30 AND pallet_id IS NOT NULL GROUP BY pallet_id HAVING COUNT(DISTINCT item_id)=1 AND COUNT(*)=COUNT(item_id)) b ON b.pallet_id=p.id LEFT JOIN mes_pro_batch ba ON ba.id=p.batch_id AND ba.deleted=0 SET p.item_id=b.item_id WHERE p.deleted=0 AND p.item_id IS NULL AND (ba.item_id IS NULL OR ba.item_id=b.item_id); UPDATE mes_pro_batch ba JOIN (SELECT batch_id,MIN(item_id) item_id FROM mes_pro_bag_code WHERE deleted=0 AND status<>30 AND batch_id IS NOT NULL GROUP BY batch_id HAVING COUNT(DISTINCT item_id)=1 AND COUNT(*)=COUNT(item_id)) b ON b.batch_id=ba.id SET ba.item_id=b.item_id WHERE ba.deleted=0 AND ba.item_id IS NULL AND NOT EXISTS (SELECT 1 FROM mes_trace_integrity_record r WHERE r.biz_type='BATCH' AND r.biz_id=ba.id AND r.deleted=0) AND NOT EXISTS (SELECT 1 FROM mes_pro_pallet p WHERE p.batch_id=ba.id AND p.deleted=0 AND p.item_id IS NOT NULL AND p.item_id<>b.item_id);