-- ============================================================================
-- 甲方报价系统优化 - 数据库迁移脚本
-- 日期: 2026-06-01
-- 说明:
--   1. biz_client_quote_item 表添加 material_id 字段，建立与物料表的正式关联
--   2. 添加必要的索引优化查询性能
--   3. 添加统计数据辅助字段
--   4. 修复历史数据中的 material_id 关联
-- ============================================================================

-- ============================================================================
-- PART 1: 甲方报价明细表 - 添加 material_id 字段
-- ============================================================================
ALTER TABLE biz_client_quote_item
  ADD COLUMN material_id BIGINT DEFAULT NULL COMMENT '关联物料ID（biz_material.material_id）' AFTER quote_id;

-- 创建索引以加速按物料查询
CREATE INDEX idx_cqi_quote_id ON biz_client_quote_item (quote_id);
CREATE INDEX idx_cqi_material_id ON biz_client_quote_item (material_id);

-- ============================================================================
-- PART 2: 甲方报价主表 - 添加统计优化索引
-- ============================================================================
CREATE INDEX idx_cq_create_time ON biz_client_quote (create_time);
CREATE INDEX idx_cq_client_name ON biz_client_quote (client_name);
CREATE INDEX idx_cq_status ON biz_client_quote (status);

-- ============================================================================
-- PART 3: 修复历史数据 - 通过物料名称匹配回填 material_id
-- ============================================================================
-- 注意: 此操作为一次性数据修复，基于 material_name 精确匹配。
-- 如果存在同名的多个物料，只会关联第一个匹配到的物料ID。
-- 请在执行前确认数据准确性。
UPDATE biz_client_quote_item cqi
  JOIN biz_material m ON cqi.material_name = m.material_name
SET cqi.material_id = m.material_id
WHERE cqi.material_id IS NULL
  AND cqi.material_name IS NOT NULL
  AND cqi.material_name != '';

-- ============================================================================
-- PART 4: 验证数据修复结果
-- ============================================================================
-- 检查仍有未关联的记录数（如果 > 0，说明有些物料名称在 biz_material 表中不存在）
-- SELECT COUNT(*) AS unlinked_count
-- FROM biz_client_quote_item
-- WHERE material_id IS NULL AND material_name IS NOT NULL AND material_name != '';

-- 查看关联情况统计
-- SELECT
--   CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END AS status,
--   COUNT(*) AS count
-- FROM biz_client_quote_item cqi
-- GROUP BY CASE WHEN cqi.material_id IS NOT NULL THEN '已关联' ELSE '未关联' END;

-- ============================================================================
-- 完成
-- ============================================================================
