USE jiaheng_erp;

SET NAMES utf8mb4;

START TRANSACTION;

-- 基础组织
INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'ADMIN', '综合管理部', NULL, 'ADMIN', '总经理', 'ACTIVE', 10, '负责主数据、权限、经营总览'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'ADMIN');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'SALES', '销售部', NULL, 'SALES', '销售主管', 'ACTIVE', 20, '负责客户、订单、交期'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'SALES');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'PURCHASE', '采购部', NULL, 'PURCHASE', '采购主管', 'ACTIVE', 30, '负责钢板采购与供应商协同'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'PURCHASE');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'WAREHOUSE', '仓储部', NULL, 'WAREHOUSE', '仓库主管', 'ACTIVE', 40, '负责原材料、成品、退货、废料收发存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'WAREHOUSE');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'PRODUCTION', '生产部', NULL, 'PRODUCTION', '车间主任', 'ACTIVE', 50, '负责工单、工序、报工'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'PRODUCTION');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'FINANCE', '财务部', NULL, 'FINANCE', '财务主管', 'ACTIVE', 60, '负责成本、对账、报表'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'FINANCE');

INSERT INTO sys_department (dept_code, dept_name, parent_id, dept_type, manager_name, status, sort_no, remark)
SELECT 'EQUIPMENT', '设备部', NULL, 'EQUIPMENT', '设备主管', 'ACTIVE', 70, '负责设备保养、维修、点检'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_department WHERE dept_code = 'EQUIPMENT');

-- 基础角色
INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'ADMIN', '系统管理员', 'SYSTEM', 'ACTIVE', '全局主数据、参数、异常中心'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'ADMIN');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'SALES', '销售员', 'SYSTEM', 'ACTIVE', '客户与订单维护'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'SALES');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'PURCHASER', '采购员', 'SYSTEM', 'ACTIVE', '采购申请、采购订单、到货跟踪'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'PURCHASER');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'WAREHOUSE', '仓库员', 'SYSTEM', 'ACTIVE', '收货、上架、领料、盘点、发货'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'WAREHOUSE');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'PLANNER', '计划员', 'SYSTEM', 'ACTIVE', 'MRP、工单下达、排产'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'PLANNER');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'SUPERVISOR', '车间主管', 'SYSTEM', 'ACTIVE', '工单进度、异常审核、现场调度'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'SUPERVISOR');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'OPERATOR', '加工员工', 'SYSTEM', 'ACTIVE', '扫码报工、报废反馈、停机反馈'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'OPERATOR');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'FINANCE', '财务员', 'SYSTEM', 'ACTIVE', '费用归集、报表、核对'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'FINANCE');

INSERT INTO sys_role (role_code, role_name, role_scope, status, remark)
SELECT 'EQUIP_ADMIN', '设备管理员', 'SYSTEM', 'ACTIVE', '设备台账、保养计划、维修'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_role WHERE role_code = 'EQUIP_ADMIN');

-- 单位
INSERT INTO md_unit (unit_code, unit_name, precision_digits)
SELECT 'PCS', '件', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_unit WHERE unit_code = 'PCS');

INSERT INTO md_unit (unit_code, unit_name, precision_digits)
SELECT 'KG', '千克', 3 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_unit WHERE unit_code = 'KG');

INSERT INTO md_unit (unit_code, unit_name, precision_digits)
SELECT 'TON', '吨', 3 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_unit WHERE unit_code = 'TON');

INSERT INTO md_unit (unit_code, unit_name, precision_digits)
SELECT 'SHEET', '张', 0 FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_unit WHERE unit_code = 'SHEET');

-- 物料分类
INSERT INTO md_item_category (category_code, category_name, parent_id, item_type, sort_no, status)
SELECT 'CAT-RM-PLATE', '钢板原材料', NULL, 'RAW_MATERIAL', 10, 'ACTIVE'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item_category WHERE category_code = 'CAT-RM-PLATE');

INSERT INTO md_item_category (category_code, category_name, parent_id, item_type, sort_no, status)
SELECT 'CAT-FG-HARDWARE', '五金成品', NULL, 'FINISHED_GOOD', 20, 'ACTIVE'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item_category WHERE category_code = 'CAT-FG-HARDWARE');

INSERT INTO md_item_category (category_code, category_name, parent_id, item_type, sort_no, status)
SELECT 'CAT-SCRAP-METAL', '金属废料', NULL, 'SCRAP', 30, 'ACTIVE'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item_category WHERE category_code = 'CAT-SCRAP-METAL');

-- 供应商
INSERT INTO md_supplier (supplier_code, supplier_name, short_name, contact_name, contact_phone, address, lead_time_days, default_tax_rate, status, remark)
SELECT 'SUP-NB-JG-001', '宁波嘉钢材料有限公司', '嘉钢材料', '王经理', '13800001111', '宁波市镇海区钢材市场', 5, 0.1300, 'ACTIVE', '本体默认板材供应商'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_supplier WHERE supplier_code = 'SUP-NB-JG-001');

-- 仓库
INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-RM-01', '原材料库', 'RAW', NULL, 'ACTIVE', '自家料、客供料等生产主材库存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-RM-01');

INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-SEMI-01', '半成品库', 'SEMI', NULL, 'ACTIVE', '加工到一半、尚未完成全部工艺的半成品暂存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-SEMI-01');

INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-FG-01', '成品库', 'FINISHED', NULL, 'ACTIVE', '完工入库后可发货的成品库存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-FG-01');

INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-AUX-01', '辅料库', 'AUX', NULL, 'ACTIVE', '手套、薄膜、纸箱、螺丝钉等生产消耗辅料库存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-AUX-01');

INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-RT-01', '退货仓', 'RETURN', NULL, 'ACTIVE', '客户退货待判定区域'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-RT-01');

INSERT INTO wh_warehouse (warehouse_code, warehouse_name, warehouse_type, manager_employee_id, status, remark)
SELECT 'WH-SCRAP-01', '废料库', 'SCRAP', NULL, 'ACTIVE', '生产废料、边角料、委外废料、报废品等废料库存'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM wh_warehouse WHERE warehouse_code = 'WH-SCRAP-01');

-- 默认库位
INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-RM-01'), 'RM-A-01', '原料主库位', 'A区', 1, 0, 'ACTIVE', '默认收货库位'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-RM-01')
    AND location_code = 'RM-A-01'
);

INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-SEMI-01'), 'SEMI-B-01', '半成品暂存位', 'B区', 1, 0, 'ACTIVE', '半成品暂存'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-SEMI-01')
    AND location_code = 'SEMI-B-01'
);

INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-FG-01'), 'FG-C-01', '成品主库位', 'C区', 1, 0, 'ACTIVE', '成品默认库位'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-FG-01')
    AND location_code = 'FG-C-01'
);

INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-AUX-01'), 'AUX-D-01', '辅料主库位', 'D区', 1, 0, 'ACTIVE', '辅料默认库位'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-AUX-01')
    AND location_code = 'AUX-D-01'
);

INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-RT-01'), 'RT-D-01', '退货暂存位', 'D区', 1, 0, 'ACTIVE', '退货待返工或报废'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-RT-01')
    AND location_code = 'RT-D-01'
);

INSERT INTO wh_location (warehouse_id, location_code, location_name, zone_name, is_default, is_locked, status, remark)
SELECT (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-SCRAP-01'), 'SCR-E-01', '废料暂存位', 'E区', 1, 0, 'ACTIVE', '金属废料集中存放'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM wh_location
  WHERE warehouse_id = (SELECT id FROM wh_warehouse WHERE warehouse_code = 'WH-SCRAP-01')
    AND location_code = 'SCR-E-01'
);

-- 工序
INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-KP', '开平', 'PREP', 1, 0, 'ACTIVE', '钢板整平、裁片准备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-KP');

INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-CY', '冲压', 'PRESS', 1, 0, 'ACTIVE', '主成形工序，重点监控报废'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-CY');

INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-MC', '去毛刺', 'FINISH', 1, 0, 'ACTIVE', '去除冲压后毛刺'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-MC');

INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-ZW', '折弯', 'BEND', 1, 0, 'ACTIVE', '形成结构外形'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-ZW');

INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-HJ', '焊接', 'WELD', 1, 0, 'ACTIVE', '关键连接工序'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-HJ');

INSERT INTO md_process (process_code, process_name, process_type, is_report_required, is_quality_gate, status, remark)
SELECT 'PROC-QA', '检验包装', 'QA', 1, 1, 'ACTIVE', '终检、包装、入库前放行'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process WHERE process_code = 'PROC-QA');

-- 工作中心
INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-KP-01', '开平工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'PREP', '两班制', 16.00, 'ACTIVE', '本体板材预处理'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-KP-01');

INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-CY-01', '冲压工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'PRESS', '两班制', 16.00, 'ACTIVE', '本体冲压成形'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-CY-01');

INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-MC-01', '去毛刺工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'FINISH', '两班制', 16.00, 'ACTIVE', '去毛刺与修边'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-MC-01');

INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-ZW-01', '折弯工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'BEND', '两班制', 16.00, 'ACTIVE', '折弯定型'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-ZW-01');

INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-HJ-01', '焊接工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'WELD', '两班制', 16.00, 'ACTIVE', '焊接与补焊'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-HJ-01');

INSERT INTO md_work_center (center_code, center_name, dept_id, center_type, shift_pattern, capacity_hours_per_day, status, remark)
SELECT 'WC-QA-01', '检验包装工作中心', (SELECT id FROM sys_department WHERE dept_code = 'PRODUCTION'), 'QA', '白班', 8.00, 'ACTIVE', '终检、包装、贴标'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_work_center WHERE center_code = 'WC-QA-01');

-- 物料主档：原材料、成品、废料
INSERT INTO md_item (
  item_code, item_name, item_type, category_id, specification, model_no, material_type, material_grade,
  length_mm, width_mm, thickness_mm, density_kg_m3, theoretical_weight_kg, unit_weight_kg,
  sales_unit_id, stock_unit_id, purchase_unit_id, safety_stock_qty, safety_stock_weight_kg,
  scrap_sale_price, status, remark
)
SELECT
  'RM-SAP440-500600-2.5', 'SAP440钢板', 'RAW_MATERIAL',
  (SELECT id FROM md_item_category WHERE category_code = 'CAT-RM-PLATE'),
  '500*600*2.5', NULL, '钢板', 'SAP440',
  500.000, 600.000, 2.500, 7850.000, 5.887500, 5.887500,
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  0.000000, 10000.000000,
  0.0000, 'ACTIVE', '本体标准板材；采购按重量结算，采购倍数按2吨'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item WHERE item_code = 'RM-SAP440-500600-2.5');

INSERT INTO md_item (
  item_code, item_name, item_type, category_id, specification, model_no, material_type, material_grade,
  length_mm, width_mm, thickness_mm, density_kg_m3, theoretical_weight_kg, unit_weight_kg,
  sales_unit_id, stock_unit_id, purchase_unit_id, safety_stock_qty, safety_stock_weight_kg,
  scrap_sale_price, status, remark
)
SELECT
  'FG-BT-001', '本体', 'FINISHED_GOOD',
  (SELECT id FROM md_item_category WHERE category_code = 'CAT-FG-HARDWARE'),
  '标准结构件', 'BT-V1', '五金结构件', NULL,
  320.000, 145.000, 0.000, 0.000, 5.200000, 5.200000,
  (SELECT id FROM md_unit WHERE unit_code = 'PCS'),
  (SELECT id FROM md_unit WHERE unit_code = 'PCS'),
  (SELECT id FROM md_unit WHERE unit_code = 'PCS'),
  500.000000, 0.000000,
  0.0000, 'ACTIVE', '宁波嘉恒智能本体示例成品，用于演示销售、MRP、工单、成本闭环'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item WHERE item_code = 'FG-BT-001');

INSERT INTO md_item (
  item_code, item_name, item_type, category_id, specification, model_no, material_type, material_grade,
  length_mm, width_mm, thickness_mm, density_kg_m3, theoretical_weight_kg, unit_weight_kg,
  sales_unit_id, stock_unit_id, purchase_unit_id, safety_stock_qty, safety_stock_weight_kg,
  scrap_sale_price, status, remark
)
SELECT
  'SCR-SAP440-EDGE', 'SAP440边角废料', 'SCRAP',
  (SELECT id FROM md_item_category WHERE category_code = 'CAT-SCRAP-METAL'),
  '冲压边角料', NULL, '金属废料', 'SAP440',
  0.000, 0.000, 0.000, 7850.000, 1.000000, 1.000000,
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  (SELECT id FROM md_unit WHERE unit_code = 'KG'),
  0.000000, 0.000000,
  1.8000, 'ACTIVE', '本体生产过程中产生的可售废料'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_item WHERE item_code = 'SCR-SAP440-EDGE');

-- 原材料扩展
INSERT INTO md_material (
  item_id, default_supplier_id, purchase_calc_mode, min_purchase_qty, purchase_multiple_qty,
  purchase_multiple_weight_kg, lead_time_days, quality_rule
)
SELECT
  (SELECT id FROM md_item WHERE item_code = 'RM-SAP440-500600-2.5'),
  (SELECT id FROM md_supplier WHERE supplier_code = 'SUP-NB-JG-001'),
  'BY_WEIGHT', 2000.000000, 0.000000, 2000.000000, 5,
  '需提供材质证明；来料需检验厚度、表面状态、重量偏差'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_material
  WHERE item_id = (SELECT id FROM md_item WHERE item_code = 'RM-SAP440-500600-2.5')
);

-- 产品扩展
INSERT INTO md_product (
  item_id, drawing_no, product_family, version_no, standard_output_qty,
  allowed_scrap_rate, quality_standard
)
SELECT
  (SELECT id FROM md_item WHERE item_code = 'FG-BT-001'),
  'JH-BT-001', '结构件', 'V1.0', 1.000000, 0.0350,
  '尺寸公差控制在图纸范围内；焊点连续；表面无明显压伤、裂纹、毛刺'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_product
  WHERE item_id = (SELECT id FROM md_item WHERE item_code = 'FG-BT-001')
);

-- BOM
INSERT INTO md_bom (bom_code, product_item_id, version_no, is_default, status, effective_date, expire_date, remark)
SELECT
  'BOM-BT-001',
  (SELECT id FROM md_item WHERE item_code = 'FG-BT-001'),
  'V1.0', 1, 'ACTIVE', CURRENT_DATE(), NULL,
  '本体标准BOM：单件毛重5.9kg，单件净重5.2kg'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_bom WHERE bom_code = 'BOM-BT-001');

INSERT INTO md_bom_item (
  bom_id, seq_no, material_item_id, usage_type, qty_per_piece, net_weight_per_piece_kg,
  gross_weight_per_piece_kg, loss_rate, issue_over_tolerance_rate, remark
)
SELECT
  (SELECT id FROM md_bom WHERE bom_code = 'BOM-BT-001'),
  10,
  (SELECT id FROM md_item WHERE item_code = 'RM-SAP440-500600-2.5'),
  'WEIGHT', 1.000000, 5.200000, 5.900000, 0.1180, 0.0200,
  '按单件毛重5.9kg参与MRP；按采购2吨倍数向上取整'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_bom_item
  WHERE bom_id = (SELECT id FROM md_bom WHERE bom_code = 'BOM-BT-001')
    AND seq_no = 10
);

-- 工艺路线
INSERT INTO md_process_route (
  route_code, route_name, product_item_id, version_no, is_default, status, effective_date, expire_date, remark
)
SELECT
  'ROUTE-BT-001', '本体标准工艺路线',
  (SELECT id FROM md_item WHERE item_code = 'FG-BT-001'),
  'V1.0', 1, 'ACTIVE', CURRENT_DATE(), NULL,
  '适用于本体标准批量生产的六道工序路线'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM md_process_route WHERE route_code = 'ROUTE-BT-001');

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  10,
  (SELECT id FROM md_process WHERE process_code = 'PROC-KP'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-KP-01'),
  '开平',
  20.00, 6.00, 0.12, 0.18, 0.00, 0.0050, 1, 0, 'ACTIVE', '板材整平、送料准备'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 10
);

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  20,
  (SELECT id FROM md_process WHERE process_code = 'PROC-CY'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-CY-01'),
  '冲压',
  45.00, 9.00, 0.34, 0.46, 0.00, 0.0200, 1, 1, 'ACTIVE', '主成形工序，模具与板材波动需重点监控'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 20
);

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  30,
  (SELECT id FROM md_process WHERE process_code = 'PROC-MC'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-MC-01'),
  '去毛刺',
  15.00, 5.00, 0.08, 0.06, 0.00, 0.0080, 1, 0, 'ACTIVE', '清理毛刺与锐边'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 30
);

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  40,
  (SELECT id FROM md_process WHERE process_code = 'PROC-ZW'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-ZW-01'),
  '折弯',
  20.00, 8.00, 0.21, 0.22, 0.00, 0.0100, 1, 1, 'ACTIVE', '关键角度成形控制'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 40
);

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  50,
  (SELECT id FROM md_process WHERE process_code = 'PROC-HJ'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-HJ-01'),
  '焊接',
  30.00, 15.00, 0.48, 0.28, 0.00, 0.0150, 1, 1, 'ACTIVE', '焊缝质量对成品稳定性影响大'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 50
);

INSERT INTO md_process_route_operation (
  route_id, seq_no, process_id, work_center_id, operation_name,
  std_setup_minutes, std_cycle_seconds, std_labor_cost, std_machine_cost, std_outsource_cost,
  allowed_scrap_rate, report_required, is_key_operation, status, remark
)
SELECT
  (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001'),
  60,
  (SELECT id FROM md_process WHERE process_code = 'PROC-QA'),
  (SELECT id FROM md_work_center WHERE center_code = 'WC-QA-01'),
  '检验包装',
  12.00, 10.00, 0.14, 0.03, 0.00, 0.0020, 1, 1, 'ACTIVE', '终检不合格件转返工或报废'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM md_process_route_operation
  WHERE route_id = (SELECT id FROM md_process_route WHERE route_code = 'ROUTE-BT-001')
    AND seq_no = 60
);

-- 设备台账
INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-KP-01', '开平机 01', '开平机',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-KP-01'),
  '宁波精虎机械', 'KP-1600', '2024-01-15', 18.00, 12.50, 220.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 20 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY),
  'IDLE', '本体板材预处理设备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-KP-01');

INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-CY-01', '冲床 01', '冲床',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-CY-01'),
  '扬力集团', 'JH21-125T', '2024-01-20', 22.00, 16.00, 280.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 15 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 7 DAY),
  'IDLE', '本体主冲压设备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-CY-01');

INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-MC-01', '去毛刺机 01', '去毛刺机',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-MC-01'),
  '苏州锐虎机电', 'MC-800', '2024-02-08', 7.50, 8.00, 180.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 18 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 12 DAY),
  'IDLE', '本体去毛刺设备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-MC-01');

INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-ZW-01', '折弯机 01', '折弯机',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-ZW-01'),
  '江苏亚威', 'PBH-110', '2024-02-16', 15.00, 14.00, 240.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 22 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 8 DAY),
  'IDLE', '本体折弯设备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-ZW-01');

INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-HJ-01', '焊机 01', '焊机',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-HJ-01'),
  '松下焊机', 'YD-350', '2024-03-01', 9.00, 6.00, 160.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 12 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 14 DAY),
  'IDLE', '本体焊接设备'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-HJ-01');

INSERT INTO em_equipment (
  equipment_code, equipment_name, category_name, work_center_id, manufacturer,
  model_no, install_date, rated_power_kw, occupied_area_sqm, maintenance_cycle_hours,
  last_maintenance_at, next_maintenance_at, status, remark
)
SELECT
  'EQ-QA-01', '终检包装工位 01', '检验工位',
  (SELECT id FROM md_work_center WHERE center_code = 'WC-QA-01'),
  '嘉恒内部配置', 'QA-STATION', '2024-03-10', 1.50, 4.00, 300.00,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 25 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 20 DAY),
  'IDLE', '终检与包装工位'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_equipment WHERE equipment_code = 'EQ-QA-01');

-- 设备保养计划
INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-KP-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-KP-01'),
  '开平机周期保养', 'PREVENTIVE', 220.00, 30,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 20 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY),
  'ACTIVE', '每220小时或每30天执行保养'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-KP-01');

INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-CY-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-CY-01'),
  '冲床周期保养', 'PREVENTIVE', 280.00, 30,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 15 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 7 DAY),
  'ACTIVE', '冲床模具与润滑需重点保养'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-CY-01');

INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-MC-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-MC-01'),
  '去毛刺机周期保养', 'PREVENTIVE', 180.00, 30,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 18 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 12 DAY),
  'ACTIVE', '砂轮与集尘装置维护'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-MC-01');

INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-ZW-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-ZW-01'),
  '折弯机周期保养', 'PREVENTIVE', 240.00, 30,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 22 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 8 DAY),
  'ACTIVE', '液压系统与模具保养'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-ZW-01');

INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-HJ-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-HJ-01'),
  '焊机周期保养', 'PREVENTIVE', 160.00, 30,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 12 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 14 DAY),
  'ACTIVE', '焊枪与送丝机构检查'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-HJ-01');

INSERT INTO em_maintenance_plan (
  plan_code, equipment_id, plan_name, maintenance_type, cycle_hours, cycle_days,
  last_execute_at, next_execute_at, status, remark
)
SELECT
  'MP-EQ-QA-01',
  (SELECT id FROM em_equipment WHERE equipment_code = 'EQ-QA-01'),
  '终检工位周期保养', 'PREVENTIVE', 300.00, 45,
  DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 25 DAY), DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 20 DAY),
  'ACTIVE', '量具点检与包装工位维护'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM em_maintenance_plan WHERE plan_code = 'MP-EQ-QA-01');

COMMIT;
