2026-08-27 10:09:54 +08:00
|
|
|
-- ============================================================================
|
2026-08-27 10:56:41 +08:00
|
|
|
-- 种子数据 SQL (PostgreSQL)
|
|
|
|
|
-- 用法: psql -U postgres -d back_cover -f doc/data.sql
|
|
|
|
|
-- 执行前需先启动一次应用创建表结构,或手动执行 migrate 后再运行此脚本。
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 1. 用户 & 角色 & 部门
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM "user";
|
|
|
|
|
DELETE
|
|
|
|
|
FROM department;
|
|
|
|
|
DELETE
|
|
|
|
|
FROM role;
|
|
|
|
|
|
|
|
|
|
INSERT INTO role (id, name, created_at, updated_at)
|
|
|
|
|
VALUES (1, 'Admin', NOW(), NOW());
|
|
|
|
|
|
|
|
|
|
INSERT INTO department (id, name, created_at, updated_at)
|
|
|
|
|
VALUES (1, '默认', NOW(), NOW());
|
|
|
|
|
|
|
|
|
|
-- 密码为 "123456" 的 bcrypt 哈希(值由 auth.HashPassword 生成,此处为占位)
|
|
|
|
|
-- 实际运行时应替换为以下 Go 代码的输出:
|
|
|
|
|
-- hash, _ := auth.HashPassword("123456")
|
|
|
|
|
INSERT INTO "user" (id, name, mobile, username, password, role_id, dept_id, gender, status, created_at, updated_at)
|
|
|
|
|
VALUES (1, 'Admin', '13900000001', 'admin', '$2a$10$Kyu/a8pCQ1XKGj/g/Pt19OFPV.TfyDwn.BY4hhYOD2jVwCYBPaobS', 1, 1, 1, 1,
|
|
|
|
|
NOW(), NOW());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 2. 设备类型 (equipment_type)
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM equipment_type;
|
|
|
|
|
ALTER sequence equipment_type_id_seq restart with 1;
|
|
|
|
|
INSERT INTO equipment_type (code, name)
|
|
|
|
|
VALUES ('ROBOT', '工业机器人'),
|
|
|
|
|
('TEMP_STORE', '随行暂存台'),
|
|
|
|
|
('CNC', 'CNC加工中心'),
|
|
|
|
|
('WASHER_HP', '高压清洗机'),
|
|
|
|
|
('INSPECTION', '内窥镜检测线'),
|
|
|
|
|
('DEBURR', '热能去毛刺机'),
|
|
|
|
|
('CLEANING_LINE', '除锈清洗线'),
|
|
|
|
|
('MARKING', '激光打标台'),
|
|
|
|
|
('SAMPLING', '抽检台');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 3. 设备 (equipment)
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM equipment;
|
|
|
|
|
ALTER sequence equipment_id_seq restart with 1;
|
|
|
|
|
INSERT INTO equipment (name, equipment_type_id, slot_count, exchange, batch, ip_address, location, done_signal_name,
|
|
|
|
|
ng_signal_name)
|
|
|
|
|
VALUES ('CNC-1', 3, 2, true, false, '192.168.1.160', 'A区', 'CNCDone1', ''),
|
|
|
|
|
('CNC-2', 3, 2, true, false, '192.168.1.161', 'A区', 'CNCDone2', ''),
|
|
|
|
|
('CNC-3', 3, 2, true, false, '192.168.1.162', 'A区', 'CNCDone3', ''),
|
|
|
|
|
('CNC-4', 3, 2, true, false, '192.168.1.163', 'A区', 'CNCDone4', ''),
|
|
|
|
|
('高压清洗机', 4, 2, true, true, '', 'A区', 'WasherDone', ''),
|
|
|
|
|
('内窥镜检测线', 5, 2, false, false, '', 'A区', 'MeasureOK', 'MeasureNG'),
|
|
|
|
|
('热能去毛刺机', 6, 1, false, false, '', 'A区', 'DeburrDone', ''),
|
|
|
|
|
('除锈清洗线', 7, 8, true, false, '192.168.1.151', 'A区', 'CleaningDone', ''),
|
|
|
|
|
('抽检台', 9, 1, false, false, '', 'A区', 'SamplingOK', 'SamplingNG');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 4. 设备槽位 (equipment_slot) — 固定 ID,真幂等
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM equipment_slot;
|
|
|
|
|
ALTER sequence equipment_slot_id_seq restart with 1;
|
|
|
|
|
INSERT INTO equipment_slot (equipment_id, slot_no, status)
|
|
|
|
|
VALUES
|
|
|
|
|
-- CNC 1-4 (各 1 槽位)
|
|
|
|
|
(1, 1, 'EMPTY'),
|
|
|
|
|
(2, 1, 'EMPTY'),
|
|
|
|
|
(3, 1, 'EMPTY'),
|
|
|
|
|
(4, 1, 'EMPTY'),
|
|
|
|
|
-- 高压清洗机 (2 槽位)
|
|
|
|
|
(5, 1, 'EMPTY'),
|
|
|
|
|
(5, 2, 'EMPTY'),
|
|
|
|
|
-- 内窥镜检测线 (3 槽位: 上料检测位/出口位)
|
|
|
|
|
(6, 1, 'EMPTY'),
|
|
|
|
|
(6, 2, 'EMPTY'),
|
|
|
|
|
-- 热能去毛刺机 (1 槽位)
|
|
|
|
|
(7, 1, 'EMPTY'),
|
|
|
|
|
-- 除锈清洗线 (8 槽位)
|
|
|
|
|
(8, 1, 'EMPTY'),
|
|
|
|
|
(8, 2, 'EMPTY'),
|
|
|
|
|
(8, 3, 'EMPTY'),
|
|
|
|
|
(8, 4, 'EMPTY'),
|
|
|
|
|
(8, 5, 'EMPTY'),
|
|
|
|
|
(8, 6, 'EMPTY'),
|
|
|
|
|
(8, 7, 'EMPTY'),
|
|
|
|
|
(8, 8, 'EMPTY'),
|
|
|
|
|
-- 抽检台 (1 槽位)
|
|
|
|
|
(9, 1, 'EMPTY');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 5. 产品类型 (product_type)
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM product_type;
|
|
|
|
|
ALTER sequence product_type_id_seq restart with 1;
|
|
|
|
|
INSERT INTO product_type (name, code, category, recipe_id, cnc_machine_ids, temp_slot_quota, is_active)
|
|
|
|
|
VALUES ('A6VM107-B99414', 'B99414', 'A6VM107', 1, '[3,4]'::jsonb, 3, true),
|
|
|
|
|
('A6VM107-B99487', 'B99487', 'A6VM107', 1, '[3,4]'::jsonb, 3, true),
|
|
|
|
|
('A6VM160-B99464', 'B99464', 'A6VM160', 1, '[1,2]'::jsonb, 3, true),
|
|
|
|
|
('A6VM160-B99488', 'B99488', 'A6VM160', 1, '[1,2]'::jsonb, 3, true),
|
|
|
|
|
('A6VM200-B99259', 'B99259', 'A6VM200', 1, '[1]'::jsonb, 2, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 5.1 零件号 (part_no) — 高压清洗机按零件号分9组程序,组号即 FANUC 宏变量 #666/#888 的值
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM part_no;
|
|
|
|
|
ALTER sequence part_no_id_seq restart with 1;
|
|
|
|
|
INSERT INTO part_no (code, product_type_id, washer_group_no, remark, created_at)
|
|
|
|
|
VALUES ('B02858', 1, 1, '', NOW()),
|
|
|
|
|
('B20044', 1, 1, '', NOW()),
|
|
|
|
|
('B20223', 1, 1, '', NOW()),
|
|
|
|
|
('B20480', 1, 1, '', NOW()),
|
|
|
|
|
('B20177', 1, 2, '', NOW()),
|
|
|
|
|
('B20248', 1, 2, '', NOW()),
|
|
|
|
|
('B20538', 1, 2, '', NOW()),
|
|
|
|
|
('B20227', 2, 3, '', NOW()),
|
|
|
|
|
('B20257', 2, 3, '', NOW()),
|
|
|
|
|
('B20141', 3, 4, '', NOW()),
|
|
|
|
|
('B20061', 3, 5, '', NOW()),
|
|
|
|
|
('B20235', 3, 5, '', NOW()),
|
|
|
|
|
('B02943', 3, 6, '', NOW()),
|
|
|
|
|
('B20149', 3, 7, '', NOW()),
|
|
|
|
|
('B20240', 4, 8, '', NOW()),
|
|
|
|
|
('B02533', 5, 9, '', NOW()),
|
|
|
|
|
('B02681', 5, 9, '', NOW()),
|
|
|
|
|
('B20102', 5, 9, '', NOW()),
|
|
|
|
|
('B20144', 5, 9, '', NOW());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
-- 6. 接驳台槽位 (dock_slot) — 各 9 槽位
|
|
|
|
|
-- ============================================================================
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM dock_slot;
|
|
|
|
|
ALTER sequence dock_slot_id_seq restart with 1;
|
|
|
|
|
INSERT INTO dock_slot (dock_no, slot_no, updated_at)
|
|
|
|
|
VALUES (1, 1, NOW()),
|
|
|
|
|
(1, 2, NOW()),
|
|
|
|
|
(1, 3, NOW()),
|
|
|
|
|
(1, 4, NOW()),
|
|
|
|
|
(1, 5, NOW()),
|
|
|
|
|
(1, 6, NOW()),
|
|
|
|
|
(1, 7, NOW()),
|
|
|
|
|
(1, 8, NOW()),
|
|
|
|
|
(1, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(2, 1, NOW()),
|
|
|
|
|
(2, 2, NOW()),
|
|
|
|
|
(2, 3, NOW()),
|
|
|
|
|
(2, 4, NOW()),
|
|
|
|
|
(2, 5, NOW()),
|
|
|
|
|
(2, 6, NOW()),
|
|
|
|
|
(2, 7, NOW()),
|
|
|
|
|
(2, 8, NOW()),
|
|
|
|
|
(2, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(3, 1, NOW()),
|
|
|
|
|
(3, 2, NOW()),
|
|
|
|
|
(3, 3, NOW()),
|
|
|
|
|
(3, 4, NOW()),
|
|
|
|
|
(3, 5, NOW()),
|
|
|
|
|
(3, 6, NOW()),
|
|
|
|
|
(3, 7, NOW()),
|
|
|
|
|
(3, 8, NOW()),
|
|
|
|
|
(3, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(4, 1, NOW()),
|
|
|
|
|
(4, 2, NOW()),
|
|
|
|
|
(4, 3, NOW()),
|
|
|
|
|
(4, 4, NOW()),
|
|
|
|
|
(4, 5, NOW()),
|
|
|
|
|
(4, 6, NOW()),
|
|
|
|
|
(4, 7, NOW()),
|
|
|
|
|
(4, 8, NOW()),
|
|
|
|
|
(4, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(5, 1, NOW()),
|
|
|
|
|
(5, 2, NOW()),
|
|
|
|
|
(5, 3, NOW()),
|
|
|
|
|
(5, 4, NOW()),
|
|
|
|
|
(5, 5, NOW()),
|
|
|
|
|
(5, 6, NOW()),
|
|
|
|
|
(5, 7, NOW()),
|
|
|
|
|
(5, 8, NOW()),
|
|
|
|
|
(5, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(6, 1, NOW()),
|
|
|
|
|
(6, 2, NOW()),
|
|
|
|
|
(6, 3, NOW()),
|
|
|
|
|
(6, 4, NOW()),
|
|
|
|
|
(6, 5, NOW()),
|
|
|
|
|
(6, 6, NOW()),
|
|
|
|
|
(6, 7, NOW()),
|
|
|
|
|
(6, 8, NOW()),
|
|
|
|
|
(6, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(7, 1, NOW()),
|
|
|
|
|
(7, 2, NOW()),
|
|
|
|
|
(7, 3, NOW()),
|
|
|
|
|
(7, 4, NOW()),
|
|
|
|
|
(7, 5, NOW()),
|
|
|
|
|
(7, 6, NOW()),
|
|
|
|
|
(7, 7, NOW()),
|
|
|
|
|
(7, 8, NOW()),
|
|
|
|
|
(7, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(8, 1, NOW()),
|
|
|
|
|
(8, 2, NOW()),
|
|
|
|
|
(8, 3, NOW()),
|
|
|
|
|
(8, 4, NOW()),
|
|
|
|
|
(8, 5, NOW()),
|
|
|
|
|
(8, 6, NOW()),
|
|
|
|
|
(8, 7, NOW()),
|
|
|
|
|
(8, 8, NOW()),
|
|
|
|
|
(8, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(9, 1, NOW()),
|
|
|
|
|
(9, 2, NOW()),
|
|
|
|
|
(9, 3, NOW()),
|
|
|
|
|
(9, 4, NOW()),
|
|
|
|
|
(9, 5, NOW()),
|
|
|
|
|
(9, 6, NOW()),
|
|
|
|
|
(9, 7, NOW()),
|
|
|
|
|
(9, 8, NOW()),
|
|
|
|
|
(9, 9, NOW()),
|
|
|
|
|
|
|
|
|
|
(10, 1, NOW()),
|
|
|
|
|
(10, 2, NOW()),
|
|
|
|
|
(10, 3, NOW()),
|
|
|
|
|
(10, 4, NOW()),
|
|
|
|
|
(10, 5, NOW()),
|
|
|
|
|
(10, 6, NOW()),
|
|
|
|
|
(10, 7, NOW()),
|
|
|
|
|
(10, 8, NOW()),
|
|
|
|
|
(10, 9, NOW());
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM recipe;
|
|
|
|
|
ALTER sequence recipe_id_seq restart with 1;
|
|
|
|
|
INSERT INTO recipe ("name", "code", "version", "desc", "total_steps", "is_active")
|
|
|
|
|
VALUES ('标准12步工艺路线', 'STD-12STEP', 1, 'CNC加工→高压清洗→内窥镜检测→去毛刺→除锈清洗→终检扫码→打标→抽检→下线', 12,
|
|
|
|
|
't');
|
|
|
|
|
|
|
|
|
|
DELETE
|
|
|
|
|
FROM recipe_step;
|
|
|
|
|
ALTER sequence recipe_step_id_seq restart with 1;
|
|
|
|
|
INSERT INTO recipe_step ("step_id", "step_name", "step_index", "step_type", "resource_type", "tool_type",
|
|
|
|
|
"allowed_resources", "processing_params", "next_step_default", "next_step_branches",
|
|
|
|
|
"restore_step", "desc", "recipe_id")
|
|
|
|
|
VALUES ('OP10', 'CNC加工', 1, 'OPERATION', 'CNC', '', NULL, '{}', 'OP20', '{}', 0, '', 1),
|
|
|
|
|
('OP20', '高压清洗', 2, 'OPERATION', 'WASHER_HP', '', NULL, '{}', 'OP30', '{}', 0, '', 1),
|
|
|
|
|
('OP30', '内窥镜检测', 3, 'OPERATION', 'INSPECTION', '', NULL, '{}', 'OP40', '{}', 0, '', 1),
|
|
|
|
|
('OP40', '检测判断', 4, 'JUDGE', '', '', NULL,
|
|
|
|
|
'{"setKey": "MEASURE_NG", "inputKey": "inspectionPass", "decisionType": "negate_bool"}', 'OP50',
|
|
|
|
|
'{"MEASURE_NG": "OP120"}', -1, '', 1),
|
|
|
|
|
('OP50', '热能去毛刺', 5, 'OPERATION', 'DEBURR', '', NULL, '{}', 'OP60', '{}', 0, '', 1),
|
|
|
|
|
('OP60', '除锈清洗', 6, 'OPERATION', 'CLEANING_LINE', '', NULL, '{}', 'OP70', '{}', 0, '', 1),
|
|
|
|
|
('OP70', '二次扫码', 7, 'FINAL_SCAN', '', 'SCANNER', NULL, '{}', 'OP80', '{}', 0, '', 1),
|
|
|
|
|
('OP80', '打标判断', 8, 'DECISION', '', '', NULL, '{"setKey": "NEED_MARKING", "decisionType": "scan_mismatch"}',
|
|
|
|
|
'OP100', '{"NEED_MARKING": "OP90"}', 0, '', 1),
|
|
|
|
|
('OP90', '激光打标', 9, 'LASER_MARK', '', 'LASER', NULL, '{}', 'OP100', '{}', 0, '', 1),
|
|
|
|
|
('OP100', '抽检判断', 10, 'DECISION', '', '', NULL,
|
|
|
|
|
'{"setKey": "NEED_SAMPLING", "signalName": "SamplingRequest", "decisionType": "signal_true"}', 'OP120',
|
|
|
|
|
'{"NEED_SAMPLING": "OP110"}', 0, '', 1),
|
|
|
|
|
('OP110', '抽检', 11, 'OPERATION', 'SAMPLING', '', NULL, '{}', 'OP120', '{}', 0, '', 1),
|
|
|
|
|
('OP120', '下线', 12, 'UNLOAD_DOCK', 'DOCK', '', NULL, '{}', '', '{}', 0, '', 1);
|