235 lines
12 KiB
SQL
235 lines
12 KiB
SQL
-- ============================================================
|
||
-- MCP for ERP — 汽车零部件智能报价 ERP 数据服务
|
||
-- 数据库:smart_quotation_auto
|
||
-- v3: 幂等可重跑(唯一约束+去重);扩充至 16 物料/13 牌号/9 吨位/26 节拍/10 后处理
|
||
-- 新增 O1 material_price_history、O2 machining_rate
|
||
-- ============================================================
|
||
|
||
-- 1. 物料主数据(含体积,用于算铝水重量)
|
||
CREATE TABLE IF NOT EXISTS material_master (
|
||
material_code VARCHAR(50) PRIMARY KEY,
|
||
part_name VARCHAR(200) NOT NULL,
|
||
part_category VARCHAR(50) NOT NULL,
|
||
material_grade VARCHAR(50) NOT NULL,
|
||
density DECIMAL(6,3) NOT NULL DEFAULT 2.700,
|
||
volume_cc DECIMAL(10,2) NOT NULL,
|
||
net_weight_kg DECIMAL(8,3) NOT NULL,
|
||
die_casting_ton INTEGER NOT NULL,
|
||
surface_treatment VARCHAR(50),
|
||
unit VARCHAR(10) DEFAULT '件',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 2. 材质牌号对照表
|
||
CREATE TABLE IF NOT EXISTS material_grade_mapping (
|
||
id SERIAL PRIMARY KEY,
|
||
grade_group VARCHAR(50) NOT NULL,
|
||
gb_code VARCHAR(80),
|
||
astm_code VARCHAR(80),
|
||
jis_code VARCHAR(80),
|
||
en_code VARCHAR(80),
|
||
iso_code VARCHAR(80),
|
||
internal_code VARCHAR(50) NOT NULL,
|
||
density DECIMAL(6,3) NOT NULL,
|
||
price_per_kg DECIMAL(10,2) NOT NULL
|
||
);
|
||
|
||
-- 3. 压铸参数表(吨位 → 固定节拍)
|
||
CREATE TABLE IF NOT EXISTS die_casting_params (
|
||
tonnage INTEGER PRIMARY KEY,
|
||
shot_weight_kg DECIMAL(8,3) NOT NULL,
|
||
cycle_time_sec DECIMAL(8,2) NOT NULL,
|
||
machine_rate DECIMAL(10,2) NOT NULL,
|
||
mold_cavities INTEGER DEFAULT 1
|
||
);
|
||
|
||
-- 4. 机加工节拍表(固化工装节拍)
|
||
CREATE TABLE IF NOT EXISTS machining_cycle (
|
||
id SERIAL PRIMARY KEY,
|
||
operation_type VARCHAR(30) NOT NULL,
|
||
spec VARCHAR(50) NOT NULL,
|
||
cycle_time_sec DECIMAL(8,2) NOT NULL,
|
||
tool_rate DECIMAL(8,4) DEFAULT 0,
|
||
notes VARCHAR(200)
|
||
);
|
||
|
||
-- 5. 后处理费率表(按重量计价)
|
||
CREATE TABLE IF NOT EXISTS post_process_rate (
|
||
id SERIAL PRIMARY KEY,
|
||
process_type VARCHAR(50) NOT NULL,
|
||
unit VARCHAR(10) DEFAULT 'kg',
|
||
rate DECIMAL(10,2) NOT NULL,
|
||
currency VARCHAR(10) DEFAULT 'CNY'
|
||
);
|
||
|
||
-- 6. O1 材料价格历史表(月度参考价,核价取最新月份)
|
||
CREATE TABLE IF NOT EXISTS material_price_history (
|
||
id SERIAL PRIMARY KEY,
|
||
internal_code VARCHAR(50) NOT NULL,
|
||
price_date DATE NOT NULL,
|
||
price_per_kg DECIMAL(10,2) NOT NULL,
|
||
source VARCHAR(100) DEFAULT '市场参考价',
|
||
UNIQUE (internal_code, price_date)
|
||
);
|
||
|
||
-- 7. O2 机加工费率表(按材质族,替换硬编码 60 元/h)
|
||
CREATE TABLE IF NOT EXISTS machining_rate (
|
||
grade_group VARCHAR(50) PRIMARY KEY,
|
||
rate_per_hour DECIMAL(10,2) NOT NULL,
|
||
notes VARCHAR(200)
|
||
);
|
||
|
||
-- ============================================================
|
||
-- 幂等性:去重 + 唯一约束(可重复执行)
|
||
-- ============================================================
|
||
|
||
DELETE FROM machining_cycle a USING machining_cycle b
|
||
WHERE a.id > b.id AND a.operation_type = b.operation_type AND a.spec = b.spec;
|
||
|
||
DELETE FROM material_grade_mapping a USING material_grade_mapping b
|
||
WHERE a.id > b.id AND a.internal_code = b.internal_code;
|
||
|
||
DELETE FROM post_process_rate a USING post_process_rate b
|
||
WHERE a.id > b.id AND a.process_type = b.process_type;
|
||
|
||
DO $$ BEGIN
|
||
ALTER TABLE machining_cycle ADD CONSTRAINT uq_machining_cycle UNIQUE (operation_type, spec);
|
||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||
|
||
DO $$ BEGIN
|
||
ALTER TABLE material_grade_mapping ADD CONSTRAINT uq_grade_mapping UNIQUE (internal_code);
|
||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||
|
||
DO $$ BEGIN
|
||
ALTER TABLE post_process_rate ADD CONSTRAINT uq_post_process UNIQUE (process_type);
|
||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||
|
||
-- ============================================================
|
||
-- 种子数据
|
||
-- ============================================================
|
||
|
||
-- 物料主数据(16 种阀体外壳:铝12/灰铁3/球铁1,吨位 160~1000T 全覆盖)
|
||
INSERT INTO material_master (material_code, part_name, part_category, material_grade, density, volume_cc, net_weight_kg, die_casting_ton, surface_treatment) VALUES
|
||
('VHB-AT-001', '变速箱阀体外壳', '阀体外壳', 'ADC12', 2.700, 444.44, 1.200, 400, '阳极氧化'),
|
||
('VHB-BK-002', '制动阀体壳', '阀体外壳', 'HT250', 7.200, 388.89, 2.800, 630, '电泳涂装'),
|
||
('VHB-SP-003', '转向器阀体壳', '阀体外壳', 'A356-T6', 2.650, 296.30, 0.785, 280, '钝化'),
|
||
('VHB-EG-004', '发动机油路阀体壳', '阀体外壳', 'EN AC-4600', 2.700, 555.56, 1.500, 400, '阳极氧化'),
|
||
('VHB-CL-005', '离合器控制阀体壳', '阀体外壳', 'ADC10', 2.700, 480.00, 1.300, 400, '阳极氧化'),
|
||
('VHB-TR-006', '变速箱液压控制阀体', '阀体外壳', 'AlSi9Cu3', 2.700, 620.00, 1.670, 630, '电泳涂装'),
|
||
('VHB-EB-007', '电子制动阀体壳', '阀体外壳', 'AlSi10MnMg', 2.650, 350.00, 0.930, 400, '钝化'),
|
||
('VHB-QT-008', '悬架阻尼阀体壳', '阀体外壳', 'QT500-7', 7.100, 520.00, 3.690, 630, '喷涂'),
|
||
('VHB-MN-009', '微型泵阀体壳', '阀体外壳', 'ADC12', 2.700, 96.30, 0.260, 160, '钝化'),
|
||
('VHB-LG-010', '大型主阀体壳', '阀体外壳', 'ADC12', 2.700, 1037.00, 2.800, 800, '电泳涂装'),
|
||
('VHB-TC-011', '涡轮增压控制阀体壳', '阀体外壳', 'ADC12', 2.700, 320.00, 0.860, 350, '钝化'),
|
||
('VHB-EG-012', 'EGR阀体壳', '阀体外壳', 'ADC10', 2.700, 265.00, 0.720, 280, '钝化'),
|
||
('VHB-WP-013', '水泵阀体壳', '阀体外壳', 'AlSi12', 2.650, 380.00, 1.010, 400, '阳极氧化'),
|
||
('VHB-TM-014', '热管理阀体壳(新能源)', '阀体外壳', 'AlSi10MnMg', 2.650, 505.00, 1.340, 500, '钝化'),
|
||
('VHB-OP-015', '机油泵阀体壳', '阀体外壳', 'ZL101', 2.650, 210.00, 0.560, 200, '钝化'),
|
||
('VHB-HD-016', '重卡制动阀体壳', '阀体外壳', 'HT300', 7.250, 850.00, 6.160, 1000, '达克罗')
|
||
ON CONFLICT (material_code) DO NOTHING;
|
||
|
||
-- 材质牌号对照表(13 条:铝合金/铸铝/灰铸铁/球墨铸铁)
|
||
INSERT INTO material_grade_mapping (grade_group, gb_code, astm_code, jis_code, en_code, iso_code, internal_code, density, price_per_kg) VALUES
|
||
('铝合金', 'ZAlSi10Cu(ADC12)', 'A380', 'ADC12', 'EN AC-4600', 'AlSi9Cu3', 'AL-ADC12', 2.700, 18.50),
|
||
('铝合金', 'ZAlSi7Mg(A356)', 'A356', 'AC4C-T6', 'EN AC-4210', 'AlSi7Mg', 'AL-A356', 2.650, 20.00),
|
||
('铝合金', 'ZAlSi9Cu(AlSi9Cu)', 'B443', 'AC4B', 'EN AC-4600', 'AlSi9Cu', 'AL-4600', 2.700, 18.00),
|
||
('铸铝', 'ZL101', '356.0', 'AC4C', 'EN AC-4200', 'AlSi7', 'AL-ZL101', 2.650, 19.00),
|
||
('铸铁', 'HT250', 'G2500', 'FC250', 'EN-GJL-250', 'GJL-250', 'IR-HT250', 7.200, 6.50),
|
||
('球墨铸铁', 'QT500-7', 'D5007', 'FCD500', 'EN-GJS-500', 'GJS-500', 'IR-QT500', 7.100, 7.20),
|
||
('铝合金', 'ZAlSi8Cu(ADC10)', 'A384', 'ADC10', 'EN AC-4650', 'AlSi8Cu', 'AL-ADC10', 2.700, 18.20),
|
||
('铝合金', 'ZAlSi10MnMg', '—', '—', 'AlSi10MnMg', 'AlSi10MnMg', 'AL-S10MM', 2.650, 22.00),
|
||
('铝合金', 'ZAlSi12', '413.0', 'AC3A', 'EN AC-4420', 'AlSi12', 'AL-S12', 2.650, 17.80),
|
||
('铸铁', 'HT200', 'G3000', 'FC200', 'EN-GJL-200', 'GJL-200', 'IR-HT200', 7.200, 6.00),
|
||
('铸铁', 'HT300', 'G3500', 'FC300', 'EN-GJL-300', 'GJL-300', 'IR-HT300', 7.250, 6.80),
|
||
('球墨铸铁', 'QT450-10', 'D4510', 'FCD450', 'EN-GJS-450', 'GJS-450', 'IR-QT450', 7.100, 7.00),
|
||
('球墨铸铁', 'QT600-3', 'D6003', 'FCD600', 'EN-GJS-600', 'GJS-600', 'IR-QT600', 7.100, 7.50)
|
||
ON CONFLICT (internal_code) DO NOTHING;
|
||
|
||
-- 球铁牌号组别归位(历史数据曾归入"铸铁"组)
|
||
UPDATE material_grade_mapping SET grade_group = '球墨铸铁' WHERE internal_code LIKE 'IR-QT%';
|
||
|
||
-- 压铸参数表(9 档吨位:160~1000T;故意不含 1250T 用于回退测试)
|
||
INSERT INTO die_casting_params (tonnage, shot_weight_kg, cycle_time_sec, machine_rate, mold_cavities) VALUES
|
||
( 160, 0.50, 15.00, 120.00, 2),
|
||
( 200, 0.80, 18.00, 140.00, 2),
|
||
( 280, 1.20, 22.00, 180.00, 1),
|
||
( 350, 1.80, 26.00, 220.00, 1),
|
||
( 400, 2.50, 30.00, 260.00, 1),
|
||
( 500, 3.20, 36.00, 320.00, 1),
|
||
( 630, 4.00, 42.00, 380.00, 1),
|
||
( 800, 6.50, 55.00, 520.00, 1),
|
||
(1000, 8.50, 65.00, 650.00, 1)
|
||
ON CONFLICT (tonnage) DO NOTHING;
|
||
|
||
-- 机加工节拍表(26 条全规格谱系;故意不含 Φ25钻/M18攻 用于回退测试)
|
||
INSERT INTO machining_cycle (operation_type, spec, cycle_time_sec, tool_rate, notes) VALUES
|
||
('drill', 'Φ3', 2.00, 0.10, '通孔'),
|
||
('drill', 'Φ4', 2.20, 0.12, '通孔'),
|
||
('drill', 'Φ5', 2.50, 0.13, '通孔'),
|
||
('drill', 'Φ6', 3.00, 0.15, '通孔'),
|
||
('drill', 'Φ8', 4.00, 0.20, '通孔'),
|
||
('drill', 'Φ10', 5.00, 0.25, '通孔'),
|
||
('drill', 'Φ12', 6.00, 0.30, '通孔'),
|
||
('drill', 'Φ14', 7.00, 0.35, '通孔'),
|
||
('drill', 'Φ16', 8.00, 0.40, '通孔'),
|
||
('drill', 'Φ20', 10.00, 0.50, '通孔'),
|
||
('drill', 'Φ24', 12.00, 0.60, '通孔'),
|
||
('tap', 'M4×0.7', 3.00, 0.15, '盲孔'),
|
||
('tap', 'M5×0.8', 3.50, 0.18, '盲孔'),
|
||
('tap', 'M6×1.0', 4.00, 0.20, '盲孔'),
|
||
('tap', 'M8×1.25', 5.00, 0.25, '盲孔'),
|
||
('tap', 'M10×1.5', 6.00, 0.30, '盲孔'),
|
||
('tap', 'M12×1.75', 7.00, 0.35, '盲孔'),
|
||
('tap', 'M14×2.0', 8.00, 0.40, '盲孔'),
|
||
('tap', 'M16×2.0', 9.00, 0.45, '盲孔'),
|
||
('ream', 'Φ6H7', 5.00, 0.45, '铰孔'),
|
||
('ream', 'Φ8H7', 6.00, 0.50, '铰孔'),
|
||
('ream', 'Φ10H7', 7.00, 0.60, '铰孔'),
|
||
('ream', 'Φ12H7', 8.00, 0.70, '铰孔'),
|
||
('ream', 'Φ16H7', 10.00, 0.90, '铰孔'),
|
||
('ream', 'Φ20H7', 12.00, 1.10, '铰孔'),
|
||
('mill', 'face', 12.00, 0.80, '铣面(单面)')
|
||
ON CONFLICT (operation_type, spec) DO NOTHING;
|
||
|
||
-- 后处理费率表(10 种;故意不含"镀铬"用于回退测试)
|
||
INSERT INTO post_process_rate (process_type, unit, rate) VALUES
|
||
('喷砂', 'kg', 1.50),
|
||
('钝化', 'kg', 2.00),
|
||
('阳极氧化', 'kg', 5.00),
|
||
('电泳涂装', 'kg', 3.50),
|
||
('喷涂', 'kg', 2.50),
|
||
('粉末喷涂', 'kg', 3.00),
|
||
('磷化', 'kg', 1.80),
|
||
('达克罗', 'kg', 4.00),
|
||
('硬质阳极氧化', 'kg', 8.00),
|
||
('化学镀镍', 'kg', 9.00)
|
||
ON CONFLICT (process_type) DO NOTHING;
|
||
|
||
-- O2 机加工费率表(按材质族)
|
||
INSERT INTO machining_rate (grade_group, rate_per_hour, notes) VALUES
|
||
('铝合金', 60.00, '铝合金常规机加工费率'),
|
||
('铸铝', 60.00, '铸铝同铝合金费率'),
|
||
('铸铁', 75.00, '灰铸铁刀具损耗高,费率上浮'),
|
||
('球墨铸铁', 80.00, '球铁强度高,机加工费率最高')
|
||
ON CONFLICT (grade_group) DO NOTHING;
|
||
|
||
-- O1 材料价格历史表(2025-01 ~ 2026-08 共 20 个月 × 13 牌号,最新月系数=1.00 与对照表价格一致)
|
||
WITH factors(price_date, al_factor, ir_factor) AS (VALUES
|
||
('2025-01-01'::date, 0.92, 0.95), ('2025-02-01'::date, 0.93, 0.96),
|
||
('2025-03-01'::date, 0.95, 0.96), ('2025-04-01'::date, 0.94, 0.97),
|
||
('2025-05-01'::date, 0.96, 0.98), ('2025-06-01'::date, 0.98, 0.99),
|
||
('2025-07-01'::date, 0.97, 0.98), ('2025-08-01'::date, 0.99, 1.00),
|
||
('2025-09-01'::date, 1.01, 1.01), ('2025-10-01'::date, 1.00, 1.00),
|
||
('2025-11-01'::date, 0.98, 0.99), ('2025-12-01'::date, 0.97, 0.98),
|
||
('2026-01-01'::date, 0.99, 0.99), ('2026-02-01'::date, 1.02, 1.00),
|
||
('2026-03-01'::date, 1.01, 1.01), ('2026-04-01'::date, 1.00, 1.00),
|
||
('2026-05-01'::date, 0.99, 0.99), ('2026-06-01'::date, 1.01, 1.00),
|
||
('2026-07-01'::date, 1.00, 1.00), ('2026-08-01'::date, 1.00, 1.00)
|
||
)
|
||
INSERT INTO material_price_history (internal_code, price_date, price_per_kg, source)
|
||
SELECT m.internal_code, f.price_date,
|
||
ROUND(m.price_per_kg * CASE WHEN m.grade_group IN ('铸铁', '球墨铸铁') THEN f.ir_factor ELSE f.al_factor END, 2),
|
||
'市场参考价'
|
||
FROM material_grade_mapping m CROSS JOIN factors f
|
||
ON CONFLICT (internal_code, price_date) DO NOTHING;
|