fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean

This commit is contained in:
SunYF
2026-08-27 10:56:41 +08:00
parent 380715f8a9
commit 371b494c54
523 changed files with 67923 additions and 24758 deletions
+275 -125
View File
@@ -1,137 +1,287 @@
-- ============================================================================
-- 磨床自动化单元 - 数据库种子数据
-- ============================================================================
-- 设备清单:
-- 1. 接驳台-1 Dock-1 42位,工件入线/出线口(面向产线,从左到右编号)
-- 2. 接驳台-2 Dock-2 42位,工件入线/出线口
-- 3. 磨床 Grinder 1位,支持换料协议(exchange=true)
-- 4. 换向机构 TurnTable 1位,支持换料(方形件换向)
-- 5. 清洗 Wash 1位,复用AirBlow信号M2130-M2139
-- 6. 缓存台 Cache 1位,全检台满时暂存
-- 7. 全检台 FullCheck 2位,纯人工检测
-- 8. 机器人 Robot 搬运设备,slotCount=0,双夹持(dualGrip=true),串行互斥
-- 种子数据 SQL (PostgreSQL)
-- 用法: psql -U postgres -d back_cover -f doc/data.sql
-- 执行前需先启动一次应用创建表结构,或手动执行 migrate 后再运行此脚本。
-- ============================================================================
-- 注意:执行本文件前请先执行 signals.sql 初始化信号表
-- ============================================================================
-- 1. 用户 & 角色 & 部门
-- ============================================================================
-- 清理旧数据(谨慎执行)
DELETE FROM manual_action;
DELETE FROM event_log;
DELETE FROM job_step_instance;
DELETE FROM task_log;
DELETE FROM task;
DELETE FROM job_step_decision;
DELETE FROM job_step_action;
DELETE FROM job_step_signal;
DELETE FROM job_step_resource;
DELETE FROM job_step;
DELETE FROM job;
DELETE FROM work_order;
DELETE FROM resource_lock;
DELETE FROM equipment_signal;
DELETE FROM equipment_slot;
DELETE FROM equipment;
DELETE FROM equipment_type;
DELETE FROM product_type;
DELETE FROM recipe_step_decision;
DELETE FROM recipe_step_action;
DELETE FROM recipe_step_signal;
DELETE FROM recipe_step_resource;
DELETE FROM recipe_step;
DELETE FROM recipe;
DELETE FROM inspection_image;
DELETE
FROM "user";
DELETE
FROM department;
DELETE
FROM role;
-- ========== 1. 设备类型 ==========
INSERT INTO equipment_type (id, code, name, movable, default_capacity) VALUES
(1, 'DOCK', '接驳台', false, 42),
(2, 'GRINDER', '磨床', false, 1),
(3, 'TURN_TABLE', '换向机构', false, 1),
(4, 'AIR_BLOW', '清洗', false, 1),
(5, 'CACHE', '缓存台', false, 1),
(6, 'FULL_CHECK', '全检台', false, 2),
(7, 'ROBOT', '搬运机器人', true, 0);
INSERT INTO role (id, name, created_at, updated_at)
VALUES (1, 'Admin', NOW(), NOW());
-- ========== 2. 设备实例 ==========
INSERT INTO equipment (id, name, equipment_type_id, status, slot_count, exchange, batch, dual_grip, ip_address, location, done_signal_name, ng_signal_name, remark) VALUES
(1, '接驳台-1', 1, 'IDLE', 42, false, false, false, '', '入线/出线口(左)', '', '', '接驳台1号,42位'),
(2, 'Grinder-01', 2, 'IDLE', 1, true, false, false, '', '磨削工位', 'GrinderMachiningDone', '', '单工位,支持换料'),
(3, 'TurnTable-01', 3, 'IDLE', 1, true, false, false, '', '换向工位', '', '', '单工位,方形件换向'),
(4, 'AirBlow-01', 4, 'IDLE', 1, false, false, false, '', '清洗工位', 'AirBlowCompleteDone', '', '复用AirBlow信号M2130-M2139'),
(5, 'Cache-01', 5, 'IDLE', 1, false, false, false, '', '缓存区', '', '', '1位缓存,全检台满时暂存'),
(6, 'FullCheck-01', 6, 'IDLE', 2, false, false, false, '', '全检工位', 'FullCheckInspectDone', '', '2位,纯人工检测'),
(7, 'Robot-01', 7, 'IDLE', 0, false, false, true, '', '搬运区', '', '', '搬运机器人,双夹持,串行互斥'),
(8, '接驳台-2', 1, 'IDLE', 42, false, false, false, '', '入线/出线口(右)', '', '', '接驳台2号,42位');
INSERT INTO department (id, name, created_at, updated_at)
VALUES (1, '默认', NOW(), NOW());
-- ========== 3. 设备槽位 ==========
-- 接驳台-1 (equipment_id=1): 槽位 1-42
-- 接驳台-2 (equipment_id=8): 槽位 1-42
INSERT INTO equipment_slot (id, equipment_id, slot_no, status)
SELECT s, 1, s, 'EMPTY' FROM generate_series(1, 42) AS s;
INSERT INTO equipment_slot (id, equipment_id, slot_no, status)
SELECT s + 42, 8, s, 'EMPTY' FROM generate_series(1, 42) AS s;
INSERT INTO equipment_slot (id, equipment_id, slot_no, status) VALUES
(85, 2, 1, 'EMPTY'), -- Grinder-01
(86, 3, 1, 'EMPTY'), -- TurnTable-01
(87, 4, 1, 'EMPTY'), -- AirBlow-01
(88, 5, 1, 'EMPTY'), -- Cache-01 槽位11位缓存)
(89, 6, 1, 'EMPTY'), (90, 6, 2, 'EMPTY'); -- FullCheck-01 槽位1-22位全检)
-- Robot-01 无槽位(slotCount=0,搬运设备)
-- 密码为 "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());
-- ========== 4. 工艺路线 ==========
-- 缸体工艺:OP10接驳台上料 → OP20磨床磨削 → OP30清洗 → OP35全检台容量判断 → OP40全检检测 / OP50缓存暂存 → OP40回流 → OP60接驳台下料
-- 配油盘工艺:OP10接驳台上料 → OP20换向机构换向 → OP25磨床磨削 → OP30清洗 → OP35全检台容量判断 → OP40全检检测 / OP50缓存暂存 → OP40回流 → OP60接驳台下料
-- 全检台满时:OP35 → OP50缓存暂存 → OP35回流判断
INSERT INTO recipe (id, name, code, version, "desc", is_active) VALUES
(1, '缸体工艺', 'GRINDER-RND', 1, '缸体标准工艺流程:接驳台→磨床→清洗→全检台容量判断→全检/缓存→下料', true),
(2, '配油盘工艺', 'GRINDER-SQR', 1, '配油盘标准工艺流程:接驳台→换向机构→磨床→清洗→全检台容量判断→全检/缓存→下料', true);
-- === 缸体 Recipe (id=1) 工艺步骤 ===
-- OP10 接驳台上料(Dock取毛坯)
-- OP20 磨床磨削(直接放入磨床,无需换向机构换向)
-- OP30 工件清洗(放清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回)
-- OP35 全检台容量判断(决策步骤:有空位→OP40 全检检测;已满→OP50 缓存暂存)
-- OP40 全检检测(放全检台,等待检测完成信号)
-- OP50 缓存暂存(全检台满时暂存到缓存台,等全检台有空位后回流OP35重新判断)
-- OP60 接驳台下料(成品放回接驳台)
INSERT INTO recipe_step (id, recipe_id, step_id, step_name, step_index, step_type, resource_type, next_step_default, "desc") VALUES
(1, 1, 'OP10', '接驳台上料', 10, 'LOAD_DOCK', 'DOCK', 'OP20', '从接驳台取毛坯'),
(2, 1, 'OP20', '磨床磨削', 20, 'OPERATION', 'GRINDER', 'OP30', '缸体直接放入磨床磨削;有料判断由系统槽位状态决定'),
(3, 1, 'OP30', '工件清洗', 30, 'AIR_BLOW', '', 'OP35', '机器人放料到清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回'),
(4, 1, 'OP35', '全检台容量判断', 35, 'DECISION', '', 'OP40', '判断全检台是否有空位:有空位→OP40全检;已满→OP50缓存'),
(5, 1, 'OP40', '全检检测', 40, 'OPERATION', 'FULL_CHECK', 'OP60', '放全检台等待检测完成'),
(6, 1, 'OP50', '缓存暂存', 50, 'BUFFER_STAGE','CACHE', 'OP35', '全检台满时暂存到缓存台;处理完后回流OP35重新判断'),
(7, 1, 'OP60', '接驳台下料', 60, 'UNLOAD_DOCK', 'DOCK', '', '成品放回接驳台');
-- ============================================================================
-- 2. 设备类型 (equipment_type)
-- ============================================================================
-- === 配油盘 Recipe (id=2) 工艺步骤 ===
-- 与缸体区别:OP20 换向机构换向后再 OP25 磨床磨削
INSERT INTO recipe_step (id, recipe_id, step_id, step_name, step_index, step_type, resource_type, next_step_default, "desc") VALUES
(8, 2, 'OP10', '接驳台上料', 10, 'LOAD_DOCK', 'DOCK', 'OP20', '从Dock接驳台取毛坯'),
(9, 2, 'OP20', '换向机构换向', 20, 'OPERATION', 'TURN_TABLE', 'OP25', '配油盘放换向机构,PLC自动旋转换向,完成后取回'),
(10, 2, 'OP25', '磨床磨削', 25, 'OPERATION', 'GRINDER', 'OP30', '换向后的配油盘放入磨床磨削;有料判断由系统槽位状态决定'),
(11, 2, 'OP30', '工件清洗', 30, 'AIR_BLOW', '', 'OP35', '机器人放料到清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回'),
(12, 2, 'OP35', '全检台容量判断', 35, 'DECISION', '', 'OP40', '判断全检台是否有空位:有空位→OP40全检;已满→OP50缓存'),
(13, 2, 'OP40', '全检检测', 40, 'OPERATION', 'FULL_CHECK', 'OP60', '放全检台等待检测完成'),
(14, 2, 'OP50', '缓存暂存', 50, 'BUFFER_STAGE','CACHE', 'OP35', '全检台满时暂存到缓存台;处理完后回流OP35重新判断'),
(15, 2, 'OP60', '接驳台下料', 60, 'UNLOAD_DOCK', 'DOCK', '', '成品放回接驳台');
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', '抽检台');
-- ========== 5. 产品类型(8种:4个型号 × 2种形状) ==========
-- 缸体(GENERAL):无需换向,关联圆形件工艺
INSERT INTO product_type (id, name, code, category, recipe_id, cnc_machine_ids, temp_slot_quota, is_active, remark) VALUES
(1, '缸体-HD-A6VM107', 'PART-RND-107', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM107,直接磨削无需换向'),
(2, '缸体-HD-A6VM160', 'PART-RND-160', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM160,直接磨削无需换向'),
(3, '缸体-HD-A6VM200', 'PART-RND-200', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM200,直接磨削无需换向'),
(4, '缸体-HD-A6VM215', 'PART-RND-215', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM215,直接磨削无需换向');
-- 配油盘(SQUARE):需换向,关联方形件工艺
INSERT INTO product_type (id, name, code, category, recipe_id, cnc_machine_ids, temp_slot_quota, is_active, remark) VALUES
(5, '配油盘-HD-A6VM107', 'PART-SQR-107', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM107,需换向机构换向后再磨削'),
(6, '配油盘-HD-A6VM160', 'PART-SQR-160', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM160,需换向机构换向后再磨削'),
(7, '配油盘-HD-A6VM200', 'PART-SQR-200', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM200,需换向机构换向后再磨削'),
(8, '配油盘-HD-A6VM215', 'PART-SQR-215', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM215,需换向机构换向后再磨削');
-- 重置序列
SELECT setval('equipment_type_id_seq', (SELECT MAX(id) FROM equipment_type));
SELECT setval('equipment_id_seq', (SELECT MAX(id) FROM equipment));
SELECT setval('equipment_slot_id_seq', (SELECT MAX(id) FROM equipment_slot));
SELECT setval('recipe_id_seq', (SELECT MAX(id) FROM recipe));
SELECT setval('recipe_step_id_seq', (SELECT MAX(id) FROM recipe_step));
SELECT setval('product_type_id_seq', (SELECT MAX(id) FROM product_type));
-- ============================================================================
-- 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);