-- ============================================================================ -- 种子数据 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);