初始提交:MCP Server Demo(ERP/CRM/Bexell 三模组,动态 Bearer Token 鉴权)
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
-- ============================================================
|
||||
-- 试产排程评估及优化系统 - 数据库初始化脚本
|
||||
-- Database: bexell_schedule_ai (PostgreSQL)
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 系统参数表
|
||||
CREATE TABLE IF NOT EXISTS sys_parameter (
|
||||
id SERIAL PRIMARY KEY,
|
||||
param_code VARCHAR(50) NOT NULL UNIQUE,
|
||||
param_name VARCHAR(100) NOT NULL,
|
||||
param_value VARCHAR(200) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 2. 设备产能表
|
||||
CREATE TABLE IF NOT EXISTS equipment_capacity (
|
||||
id SERIAL PRIMARY KEY,
|
||||
equipment_code VARCHAR(20) NOT NULL UNIQUE,
|
||||
equipment_name VARCHAR(100) NOT NULL,
|
||||
equipment_type VARCHAR(50) NOT NULL,
|
||||
max_capacity NUMERIC(10,2) NOT NULL,
|
||||
standard_capacity NUMERIC(10,2) NOT NULL,
|
||||
min_startup NUMERIC(10,2) NOT NULL,
|
||||
line_change_cost NUMERIC(10,2) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 3. 品号信息表
|
||||
CREATE TABLE IF NOT EXISTS product_info (
|
||||
id SERIAL PRIMARY KEY,
|
||||
product_code VARCHAR(50) NOT NULL UNIQUE,
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
specification VARCHAR(200) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 4. 品号设备产能负荷表
|
||||
CREATE TABLE IF NOT EXISTS product_equipment_load (
|
||||
id SERIAL PRIMARY KEY,
|
||||
product_code VARCHAR(50) NOT NULL REFERENCES product_info(product_code),
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
specification VARCHAR(200) NOT NULL,
|
||||
equipment_code VARCHAR(20) NOT NULL REFERENCES equipment_capacity(equipment_code),
|
||||
equipment_name VARCHAR(100) NOT NULL,
|
||||
standard_capacity NUMERIC(10,4) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(product_code, equipment_code)
|
||||
);
|
||||
|
||||
-- 5. 品号设备排产明细表
|
||||
CREATE TABLE IF NOT EXISTS product_equipment_schedule (
|
||||
id SERIAL PRIMARY KEY,
|
||||
schedule_id VARCHAR(20) NOT NULL UNIQUE,
|
||||
equipment_code VARCHAR(20) NOT NULL REFERENCES equipment_capacity(equipment_code),
|
||||
equipment_name VARCHAR(100) NOT NULL,
|
||||
equipment_type VARCHAR(50) NOT NULL,
|
||||
product_code VARCHAR(50) NOT NULL REFERENCES product_info(product_code),
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
specification VARCHAR(200) NOT NULL,
|
||||
quantity INTEGER NOT NULL,
|
||||
occupied_capacity NUMERIC(10,2) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 6. 设备实时产能实时数据视图
|
||||
CREATE OR REPLACE VIEW v_equipment_realtime_capacity AS
|
||||
SELECT
|
||||
e.equipment_type,
|
||||
e.equipment_code,
|
||||
e.equipment_name,
|
||||
e.max_capacity AS max_capacity_h,
|
||||
e.standard_capacity AS standard_capacity_h,
|
||||
COALESCE(SUM(s.occupied_capacity), 0) AS current_load_h
|
||||
FROM equipment_capacity e
|
||||
LEFT JOIN product_equipment_schedule s
|
||||
ON e.equipment_code = s.equipment_code
|
||||
GROUP BY e.id, e.equipment_type, e.equipment_code, e.equipment_name,
|
||||
e.max_capacity, e.standard_capacity;
|
||||
|
||||
-- ============================================================
|
||||
-- 种子数据
|
||||
-- ============================================================
|
||||
|
||||
-- 系统参数
|
||||
INSERT INTO sys_parameter (param_code, param_name, param_value) VALUES
|
||||
('sys_s_parameter', '影响系数', '0.1');
|
||||
|
||||
-- 设备产能
|
||||
INSERT INTO equipment_capacity (equipment_code, equipment_name, equipment_type, max_capacity, standard_capacity, min_startup, line_change_cost) VALUES
|
||||
('CY001','冲压机1','冲压',15,12,4,1),
|
||||
('CY002','冲压机2','冲压',15,12,4,1),
|
||||
('CY003','冲压机3','冲压',15,12,4,1),
|
||||
('CY004','冲压机4','冲压',15,12,4,1),
|
||||
('CY005','冲压机5','冲压',15,12,4,1),
|
||||
('CY006','冲压机6','冲压',15,12,4,1),
|
||||
('CY007','冲压机7','冲压',15,12,4,1),
|
||||
('CY008','冲压机8','冲压',15,12,4,1),
|
||||
('CY009','冲压机9','冲压',15,12,4,1),
|
||||
('CY010','冲压机10','冲压',15,12,4,1),
|
||||
('DN001','镀镍机1','表面',12,8,6,1.5),
|
||||
('DN002','镀镍机2','表面',12,8,6,1.5),
|
||||
('DN003','镀镍机3','表面',12,8,6,1.5),
|
||||
('DN004','镀镍机4','表面',12,8,6,1.5),
|
||||
('DN005','镀镍机5','表面',12,8,6,1.5),
|
||||
('DN006','镀镍机6','表面',12,8,6,1.5),
|
||||
('DN007','镀镍机7','表面',12,8,6,1.5),
|
||||
('DN008','镀镍机8','表面',12,8,6,1.5),
|
||||
('DN009','镀镍机9','表面',12,8,6,1.5),
|
||||
('DN010','镀镍机10','表面',12,8,6,1.5),
|
||||
('DN011','镀镍机11','表面',12,8,6,1.5),
|
||||
('DN012','镀镍机12','表面',12,8,6,1.5),
|
||||
('VJ001','AI视觉检测机1','检测',24,12,1,0.5),
|
||||
('VJ002','AI视觉检测机2','检测',24,12,1,0.5),
|
||||
('VJ003','AI视觉检测机3','检测',24,12,1,0.5),
|
||||
('VJ004','AI视觉检测机4','检测',24,12,1,0.5),
|
||||
('VJ005','AI视觉检测机5','检测',24,12,1,0.5);
|
||||
|
||||
-- 品号信息
|
||||
INSERT INTO product_info (product_code, product_name, specification) VALUES
|
||||
('A0001','电池钢壳','电池钢壳'),
|
||||
('A0002','电池底盖','电池底盖'),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳');
|
||||
|
||||
-- 品号设备产能负荷 (81 rows)
|
||||
INSERT INTO product_equipment_load (product_code, product_name, specification, equipment_code, equipment_name, standard_capacity) VALUES
|
||||
('A0001','电池钢壳','电池钢壳','CY001','冲压机1',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY002','冲压机2',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY003','冲压机3',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY004','冲压机4',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY005','冲压机5',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY006','冲压机6',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY007','冲压机7',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY008','冲压机8',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY009','冲压机9',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','CY010','冲压机10',0.2),
|
||||
('A0001','电池钢壳','电池钢壳','DN001','镀镍机1',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN002','镀镍机2',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN003','镀镍机3',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN004','镀镍机4',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN005','镀镍机5',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN006','镀镍机6',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN007','镀镍机7',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN008','镀镍机8',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN009','镀镍机9',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN010','镀镍机10',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN011','镀镍机11',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','DN012','镀镍机12',0.1),
|
||||
('A0001','电池钢壳','电池钢壳','VJ001','AI视觉检测机1',0.01),
|
||||
('A0001','电池钢壳','电池钢壳','VJ002','AI视觉检测机2',0.01),
|
||||
('A0001','电池钢壳','电池钢壳','VJ003','AI视觉检测机3',0.01),
|
||||
('A0001','电池钢壳','电池钢壳','VJ004','AI视觉检测机4',0.01),
|
||||
('A0001','电池钢壳','电池钢壳','VJ005','AI视觉检测机5',0.01),
|
||||
('A0002','电池底盖','电池底盖','CY001','冲压机1',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY002','冲压机2',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY003','冲压机3',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY004','冲压机4',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY005','冲压机5',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY006','冲压机6',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY007','冲压机7',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY008','冲压机8',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY009','冲压机9',0.2),
|
||||
('A0002','电池底盖','电池底盖','CY010','冲压机10',0.2),
|
||||
('A0002','电池底盖','电池底盖','DN001','镀镍机1',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN002','镀镍机2',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN003','镀镍机3',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN004','镀镍机4',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN005','镀镍机5',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN006','镀镍机6',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN007','镀镍机7',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN008','镀镍机8',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN009','镀镍机9',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN010','镀镍机10',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN011','镀镍机11',0.1),
|
||||
('A0002','电池底盖','电池底盖','DN012','镀镍机12',0.1),
|
||||
('A0002','电池底盖','电池底盖','VJ001','AI视觉检测机1',0.01),
|
||||
('A0002','电池底盖','电池底盖','VJ002','AI视觉检测机2',0.01),
|
||||
('A0002','电池底盖','电池底盖','VJ003','AI视觉检测机3',0.01),
|
||||
('A0002','电池底盖','电池底盖','VJ004','AI视觉检测机4',0.01),
|
||||
('A0002','电池底盖','电池底盖','VJ005','AI视觉检测机5',0.01),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY001','冲压机1',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY002','冲压机2',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY003','冲压机3',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY004','冲压机4',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY005','冲压机5',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY006','冲压机6',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY007','冲压机7',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY008','冲压机8',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY009','冲压机9',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','CY010','冲压机10',0.2),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN001','镀镍机1',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN002','镀镍机2',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN003','镀镍机3',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN004','镀镍机4',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN005','镀镍机5',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN006','镀镍机6',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN007','镀镍机7',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN008','镀镍机8',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN009','镀镍机9',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN010','镀镍机10',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN011','镀镍机11',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','DN012','镀镍机12',0.1),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','VJ001','AI视觉检测机1',0.01),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','VJ002','AI视觉检测机2',0.01),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','VJ003','AI视觉检测机3',0.01),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','VJ004','AI视觉检测机4',0.01),
|
||||
('A0003','圆柱电池钢壳','圆柱电池钢壳','VJ005','AI视觉检测机5',0.01);
|
||||
|
||||
-- 品号设备排产明细
|
||||
INSERT INTO product_equipment_schedule (schedule_id, equipment_code, equipment_name, equipment_type, product_code, product_name, specification, quantity, occupied_capacity) VALUES
|
||||
('2026080001','CY001','冲压机1','冲压','A0001','电池钢壳','电池钢壳',50,10),
|
||||
('2026080002','CY001','冲压机1','冲压','A0002','电池底盖','电池底盖',25,5),
|
||||
('2026080003','CY002','冲压机2','冲压','A0001','电池钢壳','电池钢壳',50,10),
|
||||
('2026080004','CY002','冲压机2','冲压','A0003','圆柱电池钢壳','圆柱电池钢壳',10,2),
|
||||
('2026080005','CY003','冲压机3','冲压','A0001','电池钢壳','电池钢壳',40,8),
|
||||
('2026080006','CY004','冲压机4','冲压','A0002','电池底盖','电池底盖',50,10),
|
||||
('2026080007','CY005','冲压机5','冲压','A0001','电池钢壳','电池钢壳',75,15),
|
||||
('2026080008','CY006','冲压机6','冲压','A0003','圆柱电池钢壳','圆柱电池钢壳',60,12),
|
||||
('2026080009','CY007','冲压机7','冲压','A0001','电池钢壳','电池钢壳',45,9),
|
||||
('2026080010','CY008','冲压机8','冲压','A0002','电池底盖','电池底盖',50,10),
|
||||
('2026080011','CY009','冲压机9','冲压','A0002','电池底盖','电池底盖',50,10),
|
||||
('2026080012','CY010','冲压机10','冲压','A0003','圆柱电池钢壳','圆柱电池钢壳',55,11),
|
||||
('2026080013','DN001','镀镍机1','表面','A0001','电池钢壳','电池钢壳',100,10),
|
||||
('2026080014','DN002','镀镍机2','表面','A0003','圆柱电池钢壳','圆柱电池钢壳',90,9),
|
||||
('2026080015','DN003','镀镍机3','表面','A0001','电池钢壳','电池钢壳',110,11),
|
||||
('2026080016','DN004','镀镍机4','表面','A0002','电池底盖','电池底盖',80,8),
|
||||
('2026080017','DN005','镀镍机5','表面','A0002','电池底盖','电池底盖',60,6),
|
||||
('2026080018','DN006','镀镍机6','表面','A0003','圆柱电池钢壳','圆柱电池钢壳',100,10),
|
||||
('2026080019','DN007','镀镍机7','表面','A0001','电池钢壳','电池钢壳',80,8),
|
||||
('2026080020','DN008','镀镍机8','表面','A0003','圆柱电池钢壳','圆柱电池钢壳',100,10),
|
||||
('2026080021','DN009','镀镍机9','表面','A0001','电池钢壳','电池钢壳',60,6),
|
||||
('2026080022','DN010','镀镍机10','表面','A0002','电池底盖','电池底盖',70,7),
|
||||
('2026080023','DN011','镀镍机11','表面','A0002','电池底盖','电池底盖',70,7),
|
||||
('2026080024','DN012','镀镍机12','表面','A0003','圆柱电池钢壳','圆柱电池钢壳',70,7),
|
||||
('2026080025','VJ001','AI视觉检测机1','检测','A0001','电池钢壳','电池钢壳',800,8),
|
||||
('2026080026','VJ002','AI视觉检测机2','检测','A0002','电池底盖','电池底盖',800,8),
|
||||
('2026080027','VJ003','AI视觉检测机3','检测','A0002','电池底盖','电池底盖',800,8),
|
||||
('2026080028','VJ004','AI视觉检测机4','检测','A0003','圆柱电池钢壳','圆柱电池钢壳',900,9),
|
||||
('2026080029','VJ005','AI视觉检测机5','检测','A0003','圆柱电池钢壳','圆柱电池钢壳',1000,10);
|
||||
@@ -0,0 +1,271 @@
|
||||
-- ============================================================
|
||||
-- MCP for CRM — 汽车零部件智能报价 CRM 数据服务
|
||||
-- 数据库:smart_quotation_auto
|
||||
-- v3: 幂等可重跑(唯一约束+去重);扩充至 20 客户 + 历史询价/报价/商机全谱系
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 客户
|
||||
CREATE TABLE IF NOT EXISTS customer (
|
||||
customer_code VARCHAR(50) PRIMARY KEY,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
oem_tier VARCHAR(20) NOT NULL,
|
||||
credit_level VARCHAR(5) DEFAULT 'B',
|
||||
discount_rate DECIMAL(4,3) DEFAULT 0,
|
||||
payment_days INTEGER DEFAULT 30,
|
||||
contact_person VARCHAR(50),
|
||||
phone VARCHAR(30),
|
||||
email VARCHAR(100),
|
||||
industry VARCHAR(50),
|
||||
region VARCHAR(50),
|
||||
total_orders INTEGER DEFAULT 0,
|
||||
total_amount DECIMAL(14,2) DEFAULT 0,
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 2. 询价记录
|
||||
CREATE TABLE IF NOT EXISTS inquiry (
|
||||
inquiry_id VARCHAR(50) PRIMARY KEY,
|
||||
customer_code VARCHAR(50) NOT NULL REFERENCES customer(customer_code),
|
||||
inquiry_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
drawing_number VARCHAR(100),
|
||||
part_number VARCHAR(100),
|
||||
annual_volume INTEGER,
|
||||
target_price DECIMAL(10,2),
|
||||
status VARCHAR(20) DEFAULT 'pending',
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 3. 询价明细行
|
||||
CREATE TABLE IF NOT EXISTS inquiry_item (
|
||||
id SERIAL PRIMARY KEY,
|
||||
inquiry_id VARCHAR(50) NOT NULL REFERENCES inquiry(inquiry_id),
|
||||
line_no INTEGER NOT NULL,
|
||||
part_name VARCHAR(200),
|
||||
part_number VARCHAR(100),
|
||||
material_grade VARCHAR(50),
|
||||
volume_cc DECIMAL(10,2),
|
||||
annual_qty INTEGER,
|
||||
unit VARCHAR(10) DEFAULT '件',
|
||||
remarks TEXT
|
||||
);
|
||||
|
||||
-- 4. 报价单
|
||||
CREATE TABLE IF NOT EXISTS quotation (
|
||||
quotation_id VARCHAR(50) PRIMARY KEY,
|
||||
inquiry_id VARCHAR(50) REFERENCES inquiry(inquiry_id),
|
||||
customer_code VARCHAR(50) NOT NULL REFERENCES customer(customer_code),
|
||||
quotation_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
valid_until DATE,
|
||||
version INTEGER DEFAULT 1,
|
||||
status VARCHAR(20) DEFAULT 'draft',
|
||||
mold_cost DECIMAL(12,2) DEFAULT 0,
|
||||
unit_price DECIMAL(10,2),
|
||||
annual_volume INTEGER,
|
||||
total_annual DECIMAL(14,2),
|
||||
subtotal DECIMAL(14,2),
|
||||
tax_rate DECIMAL(4,3) DEFAULT 0.130,
|
||||
tax_amount DECIMAL(14,2),
|
||||
total_amount DECIMAL(14,2),
|
||||
currency VARCHAR(10) DEFAULT 'CNY',
|
||||
payment_terms VARCHAR(200) DEFAULT '月结30天',
|
||||
delivery_terms VARCHAR(200) DEFAULT '含税含运',
|
||||
created_by VARCHAR(50) DEFAULT 'AI智能报价',
|
||||
approved_by VARCHAR(50),
|
||||
remarks TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 5. 报价成本明细
|
||||
CREATE TABLE IF NOT EXISTS quotation_cost_detail (
|
||||
id SERIAL PRIMARY KEY,
|
||||
quotation_id VARCHAR(50) NOT NULL REFERENCES quotation(quotation_id),
|
||||
material_cost DECIMAL(10,4),
|
||||
casting_cost DECIMAL(10,4),
|
||||
machining_cost DECIMAL(10,4),
|
||||
post_process_cost DECIMAL(10,4),
|
||||
overhead_rate DECIMAL(4,3),
|
||||
profit_rate DECIMAL(4,3),
|
||||
total_cost DECIMAL(10,4),
|
||||
unit_price DECIMAL(10,4)
|
||||
);
|
||||
|
||||
-- 6. 商机
|
||||
CREATE TABLE IF NOT EXISTS opportunity (
|
||||
opportunity_id VARCHAR(50) PRIMARY KEY,
|
||||
customer_code VARCHAR(50) NOT NULL REFERENCES customer(customer_code),
|
||||
title VARCHAR(200) NOT NULL,
|
||||
stage VARCHAR(20) DEFAULT 'lead',
|
||||
expected_amount DECIMAL(14,2) DEFAULT 0,
|
||||
probability INTEGER DEFAULT 20,
|
||||
oem_program VARCHAR(200),
|
||||
expected_close_date DATE,
|
||||
source VARCHAR(100),
|
||||
created_by VARCHAR(50),
|
||||
created_at DATE DEFAULT CURRENT_DATE,
|
||||
updated_at DATE DEFAULT CURRENT_DATE
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- 幂等性:去重 + 唯一约束(可重复执行)
|
||||
-- ============================================================
|
||||
|
||||
DELETE FROM inquiry_item a USING inquiry_item b
|
||||
WHERE a.id > b.id AND a.inquiry_id = b.inquiry_id AND a.line_no = b.line_no;
|
||||
|
||||
DELETE FROM quotation_cost_detail a USING quotation_cost_detail b
|
||||
WHERE a.id > b.id AND a.quotation_id = b.quotation_id;
|
||||
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE inquiry_item ADD CONSTRAINT uq_inquiry_item UNIQUE (inquiry_id, line_no);
|
||||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE quotation_cost_detail ADD CONSTRAINT uq_quotation_cost UNIQUE (quotation_id);
|
||||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||||
|
||||
-- 多版本报价支持:同一询价单不限报价次数
|
||||
-- 1) 规范化历史版本号:同一询价单下按时间序重写为 1..n(幂等,已是 1..n 的行不变)
|
||||
WITH ranked AS (
|
||||
SELECT quotation_id,
|
||||
ROW_NUMBER() OVER (PARTITION BY inquiry_id ORDER BY created_at, quotation_id) AS rn
|
||||
FROM quotation
|
||||
WHERE inquiry_id IS NOT NULL
|
||||
)
|
||||
UPDATE quotation q
|
||||
SET version = r.rn
|
||||
FROM ranked r
|
||||
WHERE q.quotation_id = r.quotation_id AND q.version <> r.rn;
|
||||
|
||||
-- 2) 同一询价单内版本号唯一(并发防重)
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE quotation ADD CONSTRAINT uq_quotation_version UNIQUE (inquiry_id, version);
|
||||
EXCEPTION WHEN duplicate_table THEN NULL; END $$;
|
||||
|
||||
-- 3) 版本链查询索引
|
||||
CREATE INDEX IF NOT EXISTS idx_quotation_inquiry ON quotation(inquiry_id);
|
||||
|
||||
-- ============================================================
|
||||
-- 种子数据
|
||||
-- ============================================================
|
||||
|
||||
-- 客户(20 家:OEM×7 / Tier1×7 / Tier2×6;信用 A×8 / B×6 / C×2 / D×1 / 无评级×3)
|
||||
INSERT INTO customer (customer_code, name, oem_tier, credit_level, discount_rate, payment_days, contact_person, phone, email, industry, region, total_orders, total_amount, notes) VALUES
|
||||
('OEM-2024-001', '某日系主机厂', 'OEM', 'A', 0.050, 60, '张工', '021-5555-0001', 'zhang@oem-jp.example.com', '汽车', '上海', 45, 28000000, '长期合作,主要采购铝合金阀体壳'),
|
||||
('OEM-2024-002', '某德系主机厂', 'OEM', 'A', 0.030, 45, '李总', '010-8888-0002', 'li@oem-de.example.com', '汽车', '北京', 30, 15000000, '质量要求高,偏好铸铁件'),
|
||||
('OEM-2024-003', '某新能源主机厂', 'OEM', 'A', 0.040, 60, '刘工', '0551-2222-0005', 'liu@oem-nev.example.com', '汽车', '合肥', 22, 9800000, '新能源三电系统配套,增长快'),
|
||||
('OEM-2024-004', '某美系主机厂', 'OEM', 'A', 0.030, 45, '孙总', '027-3333-0006', 'sun@oem-us.example.com', '汽车', '武汉', 26, 11200000, '混合动力变速箱项目'),
|
||||
('OEM-2025-001', '某商用车主机厂', 'OEM', 'B', 0.020, 90, '赵工', '0431-4444-0007', 'zhao@oem-cv.example.com', '商用车', '长春', 12, 4600000, '长账期客户,注意现金流'),
|
||||
('OEM-2025-002', '某乘商两用主机厂', 'OEM', 'B', 0.025, 60, '周工', '0772-5555-0008', 'zhou@oem-mpv.example.com', '汽车', '柳州', 9, 3200000, '乘用车+商用车双线采购'),
|
||||
('OEM-2026-001', '某智能电动新势力', 'OEM', 'A', 0.050, 45, '吴总', '021-6666-0009', 'wu@oem-ev.example.com', '新能源', '上海', 3, 850000, '高折扣新OEM,战略培育客户'),
|
||||
('T1-2025-001', '某博世供应商', 'Tier1', 'B', 0.020, 30, '王经理','0512-6666-0003', 'wang@tier1-bs.example.com', '汽车零部件', '江苏苏州', 18, 5600000, '变速箱配套阀体'),
|
||||
('T1-2025-002', '某大陆供应商', 'Tier1', 'B', 0.000, 30, '陈工', '020-7777-0004', 'chen@tier1-cr.example.com', '汽车零部件', '广东广州', 8, 1200000, '制动系统配套,新开发客户'),
|
||||
('T1-2025-003', '某采埃孚供应商', 'Tier1', 'A', 0.020, 45, '郑总', '021-7777-0010', 'zheng@tier1-zf.example.com', '汽车零部件', '上海', 15, 4800000, 'ZF悬架系统配套'),
|
||||
('T1-2025-004', '某电装系供应商', 'Tier1', 'A', 0.025, 45, '林总', '020-8888-0011', 'lin@tier1-ds.example.com', '汽车零部件', '广州', 20, 6300000, '日系热管理系统配套'),
|
||||
('T1-2025-005', '某日立安斯泰莫供应商', 'Tier1', 'A', 0.020, 45, '徐总', '0411-9999-0012', 'xu@tier1-ha.example.com', '汽车零部件', '大连', 14, 4100000, '日系制动/转向配套'),
|
||||
('T1-2026-001', '某制动系统供应商', 'Tier1', 'B', 0.015, 30, '何工', '023-1111-0013', 'he@tier1-bk.example.com', '汽车零部件', '重庆', 6, 1500000, '国产线控制动项目'),
|
||||
('T1-2026-002', '某液压系统供应商', 'Tier1', 'B', 0.010, 60, '高工', '0731-2222-0014', 'gao@tier1-hy.example.com', '工程机械', '长沙', 5, 980000, '液压阀体,账期较长'),
|
||||
('T2-2025-001', '某售后市场贸易商', 'Tier2', 'C', 0.000, 0, '罗经理','0571-3333-0015', 'luo@am-trade.example.com', '售后市场', '杭州', 3, 210000, '货到付款,信用C级,注意风险'),
|
||||
('T2-2025-002', '某智能底盘初创公司', 'Tier2', '无评级', 0.000, 30, '宋工', '0512-4444-0016', 'song@chassis.example.com', '智能底盘', '苏州', 0, 0, '零订单历史新客户,需信用评审'),
|
||||
('T2-2025-003', '某非道路机械贸易商', 'Tier2', 'D', 0.000, 0, '蒋经理','0537-5555-0017', 'jiang@offroad.example.com', '非道路机械', '济宁', 1, 45000, '信用D级,仅接受预付款订单'),
|
||||
('T2-2025-004', '某改装件连锁商', 'Tier2', 'C', 0.000, 0, '邓总', '028-5555-0018', 'deng@mod-chain.example.com', '售后市场', '成都', 5, 320000, '改装市场连锁,货到付款'),
|
||||
('T2-2026-001', '某机器人关节初创公司', 'Tier2', '无评级', 0.000, 30, '冯工', '0755-6666-0019', 'feng@robot-joint.example.com','机器人', '深圳', 0, 0, '零历史,人形机器人关节部件'),
|
||||
('T2-2026-002', '某低空经济无人机公司', 'Tier2', '无评级', 0.000, 30, '曹工', '0755-7777-0020', 'cao@uav.example.com', '低空经济', '深圳', 0, 0, '新兴行业,eVTOL液压部件询价')
|
||||
ON CONFLICT (customer_code) DO NOTHING;
|
||||
|
||||
-- 历史询价(2024-2025 闭环 + 2026 在途)
|
||||
INSERT INTO inquiry (inquiry_id, customer_code, inquiry_date, drawing_number, part_number, annual_volume, target_price, status, notes) VALUES
|
||||
('INQ-2024-9005', 'OEM-2024-001', '2024-10-20', 'DWG-VHB-EG-Rev1', 'P-VHB-004', 200000, 55.00, 'completed', '2024年发动机油路阀体壳询价,已成交'),
|
||||
('INQ-2025-9001', 'OEM-2024-001', '2025-09-25', 'DWG-VBH-AT-Rev2', 'P-VBH-001', 300000, 96.00, 'completed', '2025年变速箱阀体外壳年价谈判'),
|
||||
('INQ-2025-9002', 'OEM-2024-002', '2025-08-10', 'DWG-VHB-BK-Rev2', 'P-VHB-002', 150000, 155.00, 'completed', '2025年制动阀体壳询价,已中标'),
|
||||
('INQ-2025-9003', 'T1-2025-001', '2025-05-28', 'DWG-VHB-SP-Rev1', 'P-VHB-003', 150000, 25.00, 'lost', '转向器阀体壳,因报价偏高丢单'),
|
||||
('INQ-2025-9006', 'OEM-2024-002', '2025-11-05', 'DWG-VBH-AT-Rev2', 'P-VBH-001', 100000, 100.00, 'completed', '德系小批量采购变速箱阀体外壳'),
|
||||
('INQ-2026-0006', 'OEM-2024-004', '2026-08-05', 'DWG-VHB-TC-Rev1', 'P-VHB-011', 120000, 48.00, 'pending', '涡轮增压控制阀体壳新询价'),
|
||||
('INQ-2026-0007', 'OEM-2025-001', '2026-08-06', 'DWG-VHB-HD-Rev1', 'P-VHB-016', 60000, 260.00, 'processing', '重卡制动阀体壳,1000T大件')
|
||||
ON CONFLICT (inquiry_id) DO NOTHING;
|
||||
|
||||
-- 询价明细行(与询价单一一对应)
|
||||
INSERT INTO inquiry_item (inquiry_id, line_no, part_name, part_number, material_grade, volume_cc, annual_qty, remarks) VALUES
|
||||
('INQ-2024-9005', 1, '发动机油路阀体壳', 'P-VHB-004', 'EN AC-4600', 555.56, 200000, '400T压铸,阳极氧化'),
|
||||
('INQ-2025-9001', 1, '变速箱阀体外壳', 'P-VBH-001', 'ADC12', 444.44, 300000, '400T压铸,阳极氧化'),
|
||||
('INQ-2025-9002', 1, '制动阀体壳', 'P-VHB-002', 'HT250', 388.89, 150000, '630T压铸,电泳涂装'),
|
||||
('INQ-2025-9003', 1, '转向器阀体壳', 'P-VHB-003', 'A356-T6', 296.30, 150000, '280T压铸,钝化'),
|
||||
('INQ-2025-9006', 1, '变速箱阀体外壳', 'P-VBH-001', 'ADC12', 444.44, 100000, '小批量'),
|
||||
('INQ-2026-0006', 1, '涡轮增压控制阀体壳', 'P-VHB-011', 'ADC12', 320.00, 120000, '350T压铸,钝化'),
|
||||
('INQ-2026-0007', 1, '重卡制动阀体壳', 'P-VHB-016', 'HT300', 850.00, 60000, '1000T压铸,达克罗')
|
||||
ON CONFLICT (inquiry_id, line_no) DO NOTHING;
|
||||
|
||||
-- 基础询价(保留原种子)
|
||||
INSERT INTO inquiry (inquiry_id, customer_code, inquiry_date, drawing_number, part_number, annual_volume, target_price, status, notes) VALUES
|
||||
('INQ-2026-0001', 'OEM-2024-001', '2026-08-01', 'DWG-VBH-AT-Rev3', 'P-VBH-001', 300000, 95.00, 'processing', '新车型配套阀体壳,要求阳极氧化'),
|
||||
('INQ-2026-0002', 'T1-2025-001', '2026-08-03', 'DWG-VHB-SP-Rev1', 'P-VHB-003', 150000, 55.00, 'pending', '转向器阀体壳,钝化处理')
|
||||
ON CONFLICT (inquiry_id) DO NOTHING;
|
||||
|
||||
INSERT INTO inquiry_item (inquiry_id, line_no, part_name, part_number, material_grade, volume_cc, annual_qty, remarks) VALUES
|
||||
('INQ-2026-0001', 1, '变速箱阀体外壳', 'P-VBH-001', 'ADC12', 444.44, 300000, '体积444.44cm³,400T压铸'),
|
||||
('INQ-2026-0002', 1, '转向器阀体壳', 'P-VHB-003', 'A356-T6', 296.30, 150000, '体积296.30cm³,280T压铸')
|
||||
ON CONFLICT (inquiry_id, line_no) DO NOTHING;
|
||||
|
||||
-- 历史报价(2024Q4-2025,含 won/lost,用于价格趋势与一致性校验)
|
||||
INSERT INTO quotation (quotation_id, inquiry_id, customer_code, quotation_date, valid_until, version, status, mold_cost, unit_price, annual_volume, total_annual, subtotal, tax_rate, tax_amount, total_amount, payment_terms, delivery_terms, created_by, approved_by, remarks) VALUES
|
||||
('QUO-2024-9005', 'INQ-2024-9005', 'OEM-2024-001', '2024-11-08', '2024-12-08', 1, 'approved', 180000, 52.30, 200000, 10460000, 10460000, 0.130, 1359800, 11819800, '月结60天', '含税含运', 'AI智能报价', '销售经理-赵总', '2024年基线价'),
|
||||
('QUO-2025-9001', 'INQ-2025-9001', 'OEM-2024-001', '2025-10-15', '2025-11-15', 1, 'approved', 0, 42.50, 300000, 12750000, 12750000, 0.130, 1657500, 14407500, '月结60天', '含税含运', 'AI智能报价', '销售经理-赵总', '2025年年价,模具费已摊销'),
|
||||
('QUO-2025-9002', 'INQ-2025-9001', 'OEM-2024-001', '2025-12-20', '2026-01-20', 2, 'approved', 0, 41.90, 300000, 12570000, 12570000, 0.130, 1634100, 14204100, '月结60天', '含税含运', 'AI智能报价', '销售经理-赵总', '第二轮降价,一致性校验基准'),
|
||||
('QUO-2025-9003', 'INQ-2025-9002', 'OEM-2024-002', '2025-09-05', '2025-10-05', 1, 'won', 250000, 46.80, 150000, 7020000, 7020000, 0.130, 912600, 7932600, '月结45天', '含税含运,北京交货', 'AI智能报价', '销售总监-钱总', '已中标'),
|
||||
('QUO-2025-9004', 'INQ-2025-9003', 'T1-2025-001', '2025-06-18', '2025-07-18', 1, 'lost', 120000, 28.40, 150000, 4260000, 4260000, 0.130, 553800, 4813800, '月结30天', '含税含运', 'AI智能报价', NULL, '报价偏高丢单,客户目标价25元'),
|
||||
('QUO-2025-9006', 'INQ-2025-9006', 'OEM-2024-002', '2025-11-30', '2025-12-30', 1, 'sent', 0, 43.20, 100000, 4320000, 4320000, 0.130, 561600, 4881600, '月结45天', '含税含运', 'AI智能报价', '销售经理-赵总', '跨客户价差校验样本')
|
||||
ON CONFLICT (quotation_id) DO NOTHING;
|
||||
|
||||
-- 历史报价成本明细
|
||||
INSERT INTO quotation_cost_detail (quotation_id, material_cost, casting_cost, machining_cost, post_process_cost, overhead_rate, profit_rate, total_cost, unit_price) VALUES
|
||||
('QUO-2024-9005', 28.50, 2.17, 2.45, 7.50, 0.120, 0.150, 40.62, 52.30),
|
||||
('QUO-2025-9001', 23.90, 2.17, 0.87, 6.00, 0.120, 0.150, 32.94, 42.50),
|
||||
('QUO-2025-9002', 23.50, 2.17, 0.87, 6.00, 0.120, 0.150, 32.54, 41.90),
|
||||
('QUO-2025-9003', 20.20, 4.43, 1.91, 9.80, 0.120, 0.150, 36.34, 46.80),
|
||||
('QUO-2025-9004', 16.50, 1.10, 2.88, 1.57, 0.120, 0.280, 22.05, 28.40),
|
||||
('QUO-2025-9006', 24.50, 2.17, 0.87, 6.00, 0.120, 0.150, 33.54, 43.20)
|
||||
ON CONFLICT (quotation_id) DO NOTHING;
|
||||
|
||||
-- 基础报价(保留原种子)
|
||||
INSERT INTO quotation (quotation_id, inquiry_id, customer_code, quotation_date, valid_until, version, status, mold_cost, unit_price, annual_volume, total_annual, subtotal, tax_rate, tax_amount, total_amount, payment_terms, delivery_terms, created_by, approved_by, remarks) VALUES
|
||||
('QUO-2026-0001', 'INQ-2026-0001', 'OEM-2024-001', '2026-07-15', '2026-08-15', 1, 'sent',
|
||||
180000, 92.50, 300000, 27750000, 27750000, 0.130, 3607500, 31357500,
|
||||
'月结60天', '含税含运,上海交货', 'AI智能报价', '销售经理-赵总', '老客户优惠价,含模具费18万')
|
||||
ON CONFLICT (quotation_id) DO NOTHING;
|
||||
|
||||
INSERT INTO quotation_cost_detail (quotation_id, material_cost, casting_cost, machining_cost, post_process_cost, overhead_rate, profit_rate, total_cost, unit_price) VALUES
|
||||
('QUO-2026-0001', 24.50, 8.20, 35.60, 6.00, 0.120, 0.150, 74.30, 92.50)
|
||||
ON CONFLICT (quotation_id) DO NOTHING;
|
||||
|
||||
-- 商机(完整阶段谱系:lead/qualified/proposal/negotiation/quoted/won/lost)
|
||||
INSERT INTO opportunity (opportunity_id, customer_code, title, stage, expected_amount, probability, oem_program, expected_close_date, source, created_by) VALUES
|
||||
('OPP-2025-0005', 'OEM-2024-002', '2025年制动阀体壳定点', 'won', 8200000, 100, '德系新制动系统平台', '2025-09-30', '客户主动询价', '销售团队'),
|
||||
('OPP-2025-0006', 'T1-2025-001', '转向器阀体壳年度供应', 'lost', 4500000, 0, 'EPS转向系统', '2025-07-31', '展会获客', '销售团队'),
|
||||
('OPP-2026-0003', 'T1-2025-003', '采埃孚悬架阀体项目', 'lead', 5000000, 20, '主动悬架系统配套', '2026-12-31', '客户推荐', 'AI智能报价'),
|
||||
('OPP-2026-0004', 'OEM-2024-003', '新能源平台阀体定点', 'negotiation', 9000000, 60, '纯电平台热管理+制动', '2026-11-30', '战略客户开发', '销售团队'),
|
||||
('OPP-2026-0005', 'OEM-2024-004', '美系OEM新项目询价', 'qualified', 12000000, 40, '下一代混动变速箱', '2027-03-31', '客户主动询价', 'AI智能报价'),
|
||||
('OPP-2026-0006', 'OEM-2025-001', '商用车平台重卡阀体', 'lead', 6000000, 15, '重卡制动系统升级', '2026-12-31', '展会获客', '销售团队'),
|
||||
('OPP-2026-0001', 'OEM-2024-001', '2026年新车型阀体壳定点', 'proposal', 27750000, 60, '某日系新车型CVT配套', '2026-10-31', '客户主动询价', 'AI智能报价'),
|
||||
('OPP-2026-0002', 'T1-2025-001', '转向器阀体壳年度采购', 'lead', 8250000, 30, 'EPS转向系统配套', '2026-12-31', '展会获客', 'AI智能报价')
|
||||
ON CONFLICT (opportunity_id) DO NOTHING;
|
||||
|
||||
-- ============================================================
|
||||
-- 7. 报价写入 CRM Mock 表(独立模拟场景,无外键、与其他工具无关)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS quotation_mock (
|
||||
quotation_id VARCHAR(50) PRIMARY KEY,
|
||||
customer_name VARCHAR(200),
|
||||
part_name VARCHAR(200),
|
||||
part_number VARCHAR(50),
|
||||
material_grade VARCHAR(50),
|
||||
mold_cost DECIMAL(12,2) DEFAULT 0,
|
||||
unit_price DECIMAL(10,2),
|
||||
annual_volume INTEGER,
|
||||
total_annual DECIMAL(14,2),
|
||||
currency VARCHAR(10) DEFAULT 'CNY',
|
||||
quotation_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
status VARCHAR(20) DEFAULT 'draft',
|
||||
remarks TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@@ -0,0 +1,234 @@
|
||||
-- ============================================================
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user