Files
mcp-auth/mcp-for-erp/sql/init.sql
T

235 lines
12 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 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;