const mysql = require('mysql2/promise'); async function run() { const conn = await mysql.createConnection({ host: '49.232.154.205', port: 13306, user: 'root', password: 'Root@12345', database: 'fad_oa_dev', supportBigNumbers: true, bigNumberStrings: true }); // 获取测试项目A的ID const [projs] = await conn.execute( "SELECT project_id, project_name FROM fad_rm_project WHERE project_name LIKE '%测试%' ORDER BY project_id LIMIT 1" ); if (projs.length === 0) { console.error('未找到测试项目'); await conn.end(); return; } const PID = projs[0].project_id; console.log('测试项目A ID:', PID, projs[0].project_name); // 清除该项目所有旧数据 // 注:fad_rm_mfg_stage 通过 device_id 关联,fad_rm_site_mod_media 通过 mod_id 关联,单独处理 const tables = [ 'fad_rm_budget','fad_rm_tech_plan_item','fad_rm_layout_file','fad_rm_tech_review_item', 'fad_rm_drawing_design','fad_rm_drawing_review','fad_rm_procurement_quote', 'fad_rm_procurement_contract','fad_rm_procurement_progress','fad_rm_mfg_device', 'fad_rm_drawing_compare','fad_rm_doc_lib','fad_rm_site_mod', 'fad_rm_shipping_checklist','fad_rm_shipping_item', 'fad_rm_manual','fad_rm_install_tool','fad_rm_install_personnel', 'fad_rm_install_precision','fad_rm_install_progress','fad_rm_install_daily', 'fad_rm_install_handover','fad_rm_install_feedback','fad_rm_acceptance_item', 'fad_rm_acceptance_checklist','fad_rm_commissioning_checklist', 'fad_rm_commissioning_clause','fad_rm_commissioning_record' ]; for (const t of tables) { await conn.execute('DELETE FROM ' + t + ' WHERE project_id = ?', [PID]); } // 制造阶段通过 device_id 关联 await conn.execute( 'DELETE FROM fad_rm_mfg_stage WHERE device_id IN (SELECT device_id FROM fad_rm_mfg_device WHERE project_id = ?)', [PID] ); // 现场修改多媒体通过 mod_id 关联 await conn.execute('DELETE FROM fad_rm_site_mod_media WHERE mod_id IN (SELECT mod_id FROM fad_rm_site_mod WHERE project_id = ?)', [PID]); console.log('已清除测试项目A旧数据\n'); // ===================================================================== // 1. 项目预算 fad_rm_budget // ===================================================================== console.log('--- 1. 项目预算 ---'); await conn.execute( "INSERT INTO fad_rm_budget (project_id,category,item,budget_amount,spent_amount,status) VALUES (?,?,?,?,?,?)", [PID, '电气设备', '传感器模组', 50000, 30000, 'approved'] ); await conn.execute( "INSERT INTO fad_rm_budget (project_id,category,item,budget_amount,spent_amount,status) VALUES (?,?,?,?,?,?)", [PID, '机械设备', '底座支架加工', 80000, 0, 'draft'] ); await conn.execute( "INSERT INTO fad_rm_budget (project_id,category,item,budget_amount,spent_amount,status) VALUES (?,?,?,?,?,?)", [PID, '液压设备', '液压缸总成', 120000, 50000, 'approved'] ); await conn.execute( "INSERT INTO fad_rm_budget (project_id,category,item,budget_amount,spent_amount,status) VALUES (?,?,?,?,?,?)", [PID, '安装费用', '现场安装调试费', 60000, 0, 'draft'] ); console.log(' 4条预算 √'); // ===================================================================== // 2. 技术方案 fad_rm_tech_plan_item // ===================================================================== console.log('--- 2. 技术方案 ---'); await conn.execute( "INSERT INTO fad_rm_tech_plan_item (project_id,item_name,description,owner,status) VALUES (?,?,?,?,?)", [PID, 'PLC控制方案设计', '西门子S7-1500系列PLC控制方案', '赵工', 'done'] ); await conn.execute( "INSERT INTO fad_rm_tech_plan_item (project_id,item_name,description,owner,status) VALUES (?,?,?,?,?)", [PID, '液压系统方案', '液压站及管路布局设计', '钱工', 'progress'] ); await conn.execute( "INSERT INTO fad_rm_tech_plan_item (project_id,item_name,description,owner,status) VALUES (?,?,?,?,?)", [PID, '电气布线方案', '主电机及辅机电气管线走向', '孙工', 'pending'] ); console.log(' 3条方案 √'); // ===================================================================== // 3. 布局图 fad_rm_layout_file // ===================================================================== console.log('--- 3. 布局图 ---'); await conn.execute( "INSERT INTO fad_rm_layout_file (project_id,file_name,file_type,upload_date,status,version,file_url) VALUES (?,?,?,?,?,?,?)", [PID, '设备基础布局图', 'DWG', '2026-06-01', 'approved', 'V1.0', '/upload/rm/layout/PID/base_layout.dwg'] ); await conn.execute( "INSERT INTO fad_rm_layout_file (project_id,file_name,file_type,upload_date,status,version,file_url) VALUES (?,?,?,?,?,?,?)", [PID, '电气室布局图', 'PDF', '2026-06-05', 'pending', 'V0.9', '/upload/rm/layout/PID/electrical_room.pdf'] ); await conn.execute( "INSERT INTO fad_rm_layout_file (project_id,file_name,file_type,upload_date,status,version,file_url) VALUES (?,?,?,?,?,?,?)", [PID, '液压站平面图', 'DWG', '2026-06-10', 'pending', 'V1.0', '/upload/rm/layout/PID/hydraulic_plan.dwg'] ); console.log(' 3个布局图 √'); // ===================================================================== // 4. 技术审查 fad_rm_tech_review_item // ===================================================================== console.log('--- 4. 技术审查 ---'); await conn.execute( "INSERT INTO fad_rm_tech_review_item (project_id,review_type,item_name,conclusion,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?)", [PID, 'electrical', 'PLC控制柜方案', 'pass', '赵工', '2026-06-08', '方案符合要求,同意通过'] ); await conn.execute( "INSERT INTO fad_rm_tech_review_item (project_id,review_type,item_name,conclusion,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?)", [PID, 'mechanical', '底座安装方案', 'pending', '钱工', null, '待补充强度计算书'] ); await conn.execute( "INSERT INTO fad_rm_tech_review_item (project_id,review_type,item_name,conclusion,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?)", [PID, 'hydraulic', '液压管路设计审查', 'pass', '孙工', '2026-06-12', '管路走向合理,密封选型正确'] ); console.log(' 3条审查 √'); // ===================================================================== // 5. 图纸设计 fad_rm_drawing_design // ===================================================================== console.log('--- 5. 图纸设计 ---'); await conn.execute( "INSERT INTO fad_rm_drawing_design (project_id,drawing_name,drawing_no,version,drawing_type,drawer,start_date,end_date,file_url,status) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '底座基础图', 'BASE-001', 'V1.0', '零件图', '王工', '2026-05-20', '2026-06-01', '/upload/rm/dwg/PID/base_001.dwg', 'completed'] ); await conn.execute( "INSERT INTO fad_rm_drawing_design (project_id,drawing_name,drawing_no,version,drawing_type,drawer,start_date,end_date,file_url,status) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '电气原理图', 'ELEC-001', 'V0.8', '电气原理图', '周工', '2026-06-01', null, '/upload/rm/dwg/PID/elec_001.dwg', 'in_progress'] ); await conn.execute( "INSERT INTO fad_rm_drawing_design (project_id,drawing_name,drawing_no,version,drawing_type,drawer,start_date,end_date,file_url,status) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '液压系统图', 'HYD-001', 'V1.0', '液压原理图', '吴工', '2026-05-25', '2026-06-10', '/upload/rm/dwg/PID/hyd_001.dwg', 'completed'] ); console.log(' 3张图纸 √'); // ===================================================================== // 6. 图纸审查 fad_rm_drawing_review // ===================================================================== console.log('--- 6. 图纸审查 ---'); await conn.execute( "INSERT INTO fad_rm_drawing_review (project_id,drawing_name,drawing_no,version,file_url,status,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?,?,?)", [PID, '底座基础图', 'BASE-001', 'V1.0', '/upload/rm/dwg/PID/base_001.dwg', 'approved', '孙工', '2026-06-05', '尺寸标注完整,同意通过'] ); await conn.execute( "INSERT INTO fad_rm_drawing_review (project_id,drawing_name,drawing_no,version,file_url,status,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?,?,?)", [PID, '电气原理图', 'ELEC-001', 'V0.8', '/upload/rm/dwg/PID/elec_001.dwg', 'pending', '李工', null, null] ); await conn.execute( "INSERT INTO fad_rm_drawing_review (project_id,drawing_name,drawing_no,version,file_url,status,reviewer,review_date,review_opinion) VALUES (?,?,?,?,?,?,?,?,?)", [PID, '液压系统图', 'HYD-001', 'V1.0', '/upload/rm/dwg/PID/hyd_001.dwg', 'approved', '赵工', '2026-06-12', '液压原理正确,同意通过'] ); console.log(' 3条审查 √'); // ===================================================================== // 7. 采购管理 // ===================================================================== console.log('--- 7. 采购管理 ---'); // 7a. 供应商报价 await conn.execute( "INSERT INTO fad_rm_procurement_quote (project_id,supplier_name,item_name,spec,qty,unit,unit_price,total_price,delivery_days,warranty_months,score_price,score_delivery,score_warranty,score_total,score_rank,status) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '上海电机厂', '主电机', '500kW', 1, '台', 120000, 120000, 45, 24, 8.5, 7.0, 9.0, 8.2, 1, '2'] ); await conn.execute( "INSERT INTO fad_rm_procurement_quote (project_id,supplier_name,item_name,spec,qty,unit,unit_price,total_price,delivery_days,warranty_months,score_price,score_delivery,score_warranty,score_total,score_rank,status) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '南京减速机厂', '减速机', 'ZLY560', 1, '台', 80000, 80000, 60, 18, 7.5, 6.5, 8.0, 7.3, 2, '1'] ); // 7b. 采购合同 await conn.execute( "INSERT INTO fad_rm_procurement_contract (project_id,contract_no,contract_name,supplier_name,total_amount,sign_date,file_url,status,clauses,penalty_clause) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, 'CG-2026-001', '主电机采购合同', '上海电机厂', 120000, '2026-06-01', '/upload/rm/contract/PID/motor_contract.pdf', 'signed', '1. 供方提供500kW主电机1台\n2. 交货期45天\n3. 质保期24个月', '逾期交货按合同总价0.5%/天罚款'] ); await conn.execute( "INSERT INTO fad_rm_procurement_contract (project_id,contract_no,contract_name,supplier_name,total_amount,sign_date,file_url,status,clauses,penalty_clause) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, 'CG-2026-002', '减速机采购合同', '南京减速机厂', 80000, '2026-06-05', '/upload/rm/contract/PID/reducer_contract.pdf', 'draft', '1. 供方提供ZLY560减速机1台\n2. 交货期60天', ''] ); // 7c. 采购进度 await conn.execute( "INSERT INTO fad_rm_procurement_progress (project_id,item_name,supplier_name,contract_no,amount,order_date,current_stage,expect_date,actual_date,stages) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '主电机', '上海电机厂', 'CG-2026-001', 120000, '2026-06-01', '5', '2026-07-15', null, '{"0":"done","1":"done","2":"done","3":"done","4":"done","5":"progress"}'] ); await conn.execute( "INSERT INTO fad_rm_procurement_progress (project_id,item_name,supplier_name,contract_no,amount,order_date,current_stage,expect_date,actual_date,stages) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '减速机', '南京减速机厂', 'CG-2026-002', 80000, '2026-06-05', '2', '2026-08-01', null, '{"0":"done","1":"done","2":"progress"}'] ); console.log(' 报价2条 + 合同2份 + 进度2条 √'); // ===================================================================== // 8. 制造进度 // ===================================================================== console.log('--- 8. 制造进度 ---'); // 设备1: 主电机 await conn.execute( "INSERT INTO fad_rm_mfg_device (project_id,device_name,spec,supplier_name,contract_no,order_date,delivery_date,penalty_rate) VALUES (?,?,?,?,?,?,?,?)", [PID, '主电机', '500kW', '上海电机厂', 'CG-2026-001', '2026-06-01', '2026-07-15', 500] ); const [dev1] = await conn.execute('SELECT LAST_INSERT_ID() as id'); const DEV1_ID = dev1[0].id; // 主电机制造阶段 const stages1 = [ ['0', '原材料采购', '2', '2026-06-01', '2026-06-10', '2026-06-01', '2026-06-09', 1], ['1', '机加工', '2', '2026-06-11', '2026-06-20', '2026-06-11', '2026-06-19', 2], ['2', '绕组焊接', '2', '2026-06-21', '2026-06-28', '2026-06-21', '2026-06-27', 3], ['3', '组装', '1', '2026-06-29', '2026-07-05', '2026-06-29', null, 4], ['4', '喷漆', '0', '2026-07-06', '2026-07-08', null, null, 5], ['5', '验收', '0', '2026-07-09', '2026-07-12', null, null, 6], ['6', '包装', '0', '2026-07-13', '2026-07-13', null, null, 7], ['7', '发货', '0', '2026-07-14', '2026-07-15', null, null, 8], ]; for (const st of stages1) { await conn.execute( "INSERT INTO fad_rm_mfg_stage (device_id,stage_key,stage_name,status,plan_start_date,plan_end_date,actual_start,actual_end,sort_order) VALUES (?,?,?,?,?,?,?,?,?)", [DEV1_ID, st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7]] ); } // 设备2: 减速机 await conn.execute( "INSERT INTO fad_rm_mfg_device (project_id,device_name,spec,supplier_name,contract_no,order_date,delivery_date,penalty_rate) VALUES (?,?,?,?,?,?,?,?)", [PID, '减速机', 'ZLY560', '南京减速机厂', 'CG-2026-002', '2026-06-05', '2026-08-01', 300] ); const [dev2] = await conn.execute('SELECT LAST_INSERT_ID() as id'); const DEV2_ID = dev2[0].id; const stages2 = [ ['0', '原材料采购', '2', '2026-06-05', '2026-06-15', '2026-06-05', '2026-06-14', 1], ['1', '机加工', '2', '2026-06-16', '2026-06-30', '2026-06-16', '2026-06-28', 2], ['2', '焊接', '1', '2026-07-01', '2026-07-10', '2026-07-01', null, 3], ['3', '组装', '0', '2026-07-11', '2026-07-18', null, null, 4], ['4', '喷漆', '0', '2026-07-19', '2026-07-20', null, null, 5], ['5', '验收', '0', '2026-07-21', '2026-07-25', null, null, 6], ['6', '包装', '0', '2026-07-26', '2026-07-27', null, null, 7], ['7', '发货', '0', '2026-07-28', '2026-08-01', null, null, 8], ]; for (const st of stages2) { await conn.execute( "INSERT INTO fad_rm_mfg_stage (device_id,stage_key,stage_name,status,plan_start_date,plan_end_date,actual_start,actual_end,sort_order) VALUES (?,?,?,?,?,?,?,?,?)", [DEV2_ID, st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7]] ); } console.log(' 2台设备 + 16个阶段 √'); // ===================================================================== // 9. 图纸优化比较 fad_rm_drawing_compare // ===================================================================== console.log('--- 9. 图纸优化比较 ---'); await conn.execute( "INSERT INTO fad_rm_drawing_compare (project_id,drawing_name,old_version,new_version,optimizer,compare_date,status,before_desc,after_desc,old_file_url,new_file_url,diff_notes) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '底座基础图', 'V1.0', 'V1.1', '王工', '2026-06-15', 'approved', '原始设计地脚螺栓孔距为800mm,现场反馈偏大', '优化为760mm,与设备实际安装孔距匹配', '/upload/rm/dwg/PID/base_001_v1.0.dwg', '/upload/rm/dwg/PID/base_001_v1.1.dwg', '孔距调整:800→760mm;增加4个M24螺纹孔'] ); await conn.execute( "INSERT INTO fad_rm_drawing_compare (project_id,drawing_name,old_version,new_version,optimizer,compare_date,status,before_desc,after_desc,old_file_url,new_file_url,diff_notes) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '电气原理图', 'V1.0', 'V1.1', '周工', '2026-06-16', 'pending', '原设计主电机回路未设置软启动器', '增加软启动器及旁路接触器', '/upload/rm/dwg/PID/elec_001_v1.0.dwg', '/upload/rm/dwg/PID/elec_001_v1.1.dwg', '新增软启动器回路;调整热继电器整定值'] ); console.log(' 2条优化记录 √'); // ===================================================================== // 10. 资料库 fad_rm_doc_lib // ===================================================================== console.log('--- 10. 资料库 ---'); await conn.execute( "INSERT INTO fad_rm_doc_lib (project_id,doc_name,category,file_url) VALUES (?,?,?,?)", [PID, '电机技术规格书', '技术文档', '/upload/rm/doc/PID/motor_spec.pdf'] ); await conn.execute( "INSERT INTO fad_rm_doc_lib (project_id,doc_name,category,file_url) VALUES (?,?,?,?)", [PID, '出厂检测报告', '质检报告', '/upload/rm/doc/PID/inspection_report.pdf'] ); await conn.execute( "INSERT INTO fad_rm_doc_lib (project_id,doc_name,category,file_url) VALUES (?,?,?,?)", [PID, '安装手册', '技术文档', '/upload/rm/doc/PID/install_manual.pdf'] ); await conn.execute( "INSERT INTO fad_rm_doc_lib (project_id,doc_name,category,file_url) VALUES (?,?,?,?)", [PID, '验收报告模板', '质检报告', '/upload/rm/doc/PID/acceptance_template.pdf'] ); console.log(' 4份资料 √'); // ===================================================================== // 11. 现场修改 fad_rm_site_mod + media // ===================================================================== console.log('--- 11. 现场修改 ---'); await conn.execute( "INSERT INTO fad_rm_site_mod (project_id,device_name,location,mod_reason,solution,mod_person,mod_date,status,prevent_action,drawing_updated) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '底座', '基础坑', '地脚螺栓孔位偏差20mm', '现场扩孔处理,增加垫片调整', '李工', '2026-06-10', 'done', '加强来料检验,增加出厂前预装工序', '1'] ); await conn.execute( "INSERT INTO fad_rm_site_mod (project_id,device_name,location,mod_reason,solution,mod_person,mod_date,status,prevent_action,drawing_updated) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '电机', '电机基础', '电机底座与基础安装孔距不匹配', '重新加工电机底座安装板', '王工', '2026-06-12', 'pending', '要求供应商提供实物尺寸确认后再出图', '0'] ); // 现场修改多媒体 const [modRows] = await conn.execute( "SELECT mod_id FROM fad_rm_site_mod WHERE project_id = ? ORDER BY mod_id LIMIT 1", [PID] ); if (modRows.length > 0) { const MOD_ID = modRows[0].mod_id; await conn.execute( "INSERT INTO fad_rm_site_mod_media (mod_id,media_type,file_name,file_url,file_size) VALUES (?,?,?,?,?)", [MOD_ID, 'image', '地脚螺栓偏差.jpg', '/upload/rm/site/PID/bolt_deviation.jpg', 204800] ); await conn.execute( "INSERT INTO fad_rm_site_mod_media (mod_id,media_type,file_name,file_url,file_size) VALUES (?,?,?,?,?)", [MOD_ID, 'image', '扩孔处理后.jpg', '/upload/rm/site/PID/after_repair.jpg', 153600] ); } console.log(' 2条修改记录 + 2张现场照片 √'); // ===================================================================== // 12. 发货清单 // ===================================================================== console.log('--- 12. 发货清单 ---'); // 12a. 发货前CheckList await conn.execute( "INSERT INTO fad_rm_shipping_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '主电机已装箱固定', '1', 1] ); await conn.execute( "INSERT INTO fad_rm_shipping_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '减速机已打包防锈', '1', 2] ); await conn.execute( "INSERT INTO fad_rm_shipping_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '随机备件清点齐全', '0', 3] ); await conn.execute( "INSERT INTO fad_rm_shipping_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '技术资料已随货', '0', 4] ); // 12b. 发货设备项 await conn.execute( "INSERT INTO fad_rm_shipping_item (project_id,device_name,spec,qty,packed,photos,note,destination,ship_date,status) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '主电机', '500kW', 2, '1', '["motor_packed_1.jpg","motor_packed_2.jpg"]', '注意防潮', '江苏张家港项目现场', '2026-07-20', '0'] ); await conn.execute( "INSERT INTO fad_rm_shipping_item (project_id,device_name,spec,qty,packed,photos,note,destination,ship_date,status) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '减速机', 'ZLY560', 1, '0', '[]', '轻拿轻放', '江苏张家港项目现场', null, '0'] ); console.log(' 4条CheckList + 2项设备 √'); // ===================================================================== // 13. 说明书 fad_rm_manual // ===================================================================== console.log('--- 13. 说明书 ---'); await conn.execute( "INSERT INTO fad_rm_manual (project_id,manual_name,doc_type,version,upload_date,file_url,description) VALUES (?,?,?,?,?,?,?)", [PID, '主电机操作手册', '说明书', 'V1.0', '2026-06-01', '/upload/rm/manual/PID/motor_manual.pdf', '500kW主电机操作与维护说明'] ); await conn.execute( "INSERT INTO fad_rm_manual (project_id,manual_name,doc_type,version,upload_date,file_url,description) VALUES (?,?,?,?,?,?,?)", [PID, '减速机维护手册', '维护手册', 'V1.0', '2026-06-05', '/upload/rm/manual/PID/reducer_maintenance.pdf', 'ZLY560减速机日常维护指南'] ); await conn.execute( "INSERT INTO fad_rm_manual (project_id,manual_name,doc_type,version,upload_date,file_url,description) VALUES (?,?,?,?,?,?,?)", [PID, '随机备件清单', '备件清单', 'V1.0', '2026-06-10', '/upload/rm/manual/PID/spare_parts.pdf', '随机备件明细及订购信息'] ); console.log(' 3份说明书 √'); // ===================================================================== // 14. 安装准备(6张子表) // ===================================================================== console.log('--- 14. 安装准备 ---'); // 14a. 安装工具 await conn.execute( "INSERT INTO fad_rm_install_tool (project_id,name,name_en,spec,qty,unit,unit_price,total_price,priority,arrival_date,purpose,responsible,status,category) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '千斤顶', 'Jack', '50T', 4, '台', 1200, 4800, '高', '2026-06-01', '设备就位顶升', '刘工', '已到位', '起重吊装'] ); await conn.execute( "INSERT INTO fad_rm_install_tool (project_id,name,name_en,spec,qty,unit,unit_price,total_price,priority,arrival_date,purpose,responsible,status,category) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '扭力扳手', 'Torque Wrench', '200N·m', 2, '把', 850, 1700, '中', '2026-06-05', '螺栓紧固', '刘工', '已到位', '机械安装'] ); await conn.execute( "INSERT INTO fad_rm_install_tool (project_id,name,name_en,spec,qty,unit,unit_price,total_price,priority,arrival_date,purpose,responsible,status,category) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '水平仪', 'Level Meter', '0.02mm/m', 1, '台', 3500, 3500, '高', '2026-06-10', '设备水平度检测', '陈工', '已到位', '测量仪器'] ); await conn.execute( "INSERT INTO fad_rm_install_tool (project_id,name,name_en,spec,qty,unit,unit_price,total_price,priority,arrival_date,purpose,responsible,status,category) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '激光对中仪', 'Laser Aligner', '0.001mm', 1, '台', 28000, 28000, '高', '2026-06-15', '联轴器对中', '陈工', '待确认', '测量仪器'] ); // 14b. 安装人员 await conn.execute( "INSERT INTO fad_rm_install_personnel (project_id,name,name_en,position,position_en,plan_in,plan_out,days,daily_rate,total_wages,duty,qualification,phone) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '刘建国', 'Liu JG', '安装队长', 'Installation Foreman', '2026-06-15', '2026-08-30', 76, 500, 38000, '现场安装总协调', '10年以上安装经验', '13800001111'] ); await conn.execute( "INSERT INTO fad_rm_install_personnel (project_id,name,name_en,position,position_en,plan_in,plan_out,days,daily_rate,total_wages,duty,qualification,phone) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '陈伟', 'Chen W', '机械安装工', 'Mechanical Fitter', '2026-06-15', '2026-08-30', 76, 350, 26600, '机械设备安装', '中级钳工', '13800002222'] ); await conn.execute( "INSERT INTO fad_rm_install_personnel (project_id,name,name_en,position,position_en,plan_in,plan_out,days,daily_rate,total_wages,duty,qualification,phone) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '张明', 'Zhang M', '电气安装工', 'Electrician', '2026-06-20', '2026-08-15', 56, 400, 22400, '电气设备安装接线', '中级电工', '13800003333'] ); // 14c. 安装精度标准 await conn.execute( "INSERT INTO fad_rm_install_precision (project_id,system_name,item_name,name_en,target_value,unit,importance,tool,method_desc,standard_ref,requirement,is_qualified) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '轧辊系统', '辊缝平行度', 'Roll Gap Parallelism', '≤0.02', 'mm/m', '★★★', '精密水平仪', '使用水平仪在辊面两端测量', 'GB/T 1239.2', '0.02mm/m以内', '1'] ); await conn.execute( "INSERT INTO fad_rm_install_precision (project_id,system_name,item_name,name_en,target_value,unit,importance,tool,method_desc,standard_ref,requirement,is_qualified) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '主机框架', '机架垂直度', 'Frame Verticality', '≤0.05', 'mm/m', '★★★', '经纬仪', '使用经纬仪测量机架四角立柱', 'GB 50231', '0.05mm/m以内', '1'] ); await conn.execute( "INSERT INTO fad_rm_install_precision (project_id,system_name,item_name,name_en,target_value,unit,importance,tool,method_desc,standard_ref,requirement,is_qualified) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, 'AGC系统', '液压缸垂直度', 'Cylinder Verticality', '≤0.10', 'mm/m', '★★', '框式水平仪', '使用框式水平仪在缸体外壁测量', 'JB/T 7929', '0.10mm/m以内', '0'] ); // 14d. 安装进度计划 await conn.execute( "INSERT INTO fad_rm_install_progress (project_id,item_name,plan_start,plan_end,actual_start,actual_end,status,delay_reason,images,videos) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '基础验收', '2026-06-15', '2026-06-20', '2026-06-15', '2026-06-19', 'done', null, '["foundation_1.jpg","foundation_2.jpg"]', '["foundation_check.mp4"]'] ); await conn.execute( "INSERT INTO fad_rm_install_progress (project_id,item_name,plan_start,plan_end,actual_start,actual_end,status,delay_reason,images,videos) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '底座安装', '2026-06-21', '2026-06-28', '2026-06-21', null, 'progress', null, '["base_install_1.jpg"]', '[]'] ); await conn.execute( "INSERT INTO fad_rm_install_progress (project_id,item_name,plan_start,plan_end,actual_start,actual_end,status,delay_reason,images,videos) VALUES (?,?,?,?,?,?,?,?,?,?)", [PID, '主电机安装', '2026-06-29', '2026-07-10', null, null, 'pending', null, '[]', '[]'] ); // 14e. 施工日志 await conn.execute( "INSERT INTO fad_rm_install_daily (project_id,log_date,weather,temperature,work_content,photo_urls) VALUES (?,?,?,?,?,?)", [PID, '2026-06-15', '晴', '28°C', '基础验收:检查基础尺寸、标高、地脚螺栓位置,完成验收记录', '["daily_0615_1.jpg","daily_0615_2.jpg"]'] ); await conn.execute( "INSERT INTO fad_rm_install_daily (project_id,log_date,weather,temperature,work_content,photo_urls) VALUES (?,?,?,?,?,?)", [PID, '2026-06-16', '多云', '26°C', '基础清理:清除基础表面杂物,打磨地脚螺栓孔', '["daily_0616_1.jpg"]'] ); await conn.execute( "INSERT INTO fad_rm_install_daily (project_id,log_date,weather,temperature,work_content,photo_urls) VALUES (?,?,?,?,?,?)", [PID, '2026-06-21', '晴', '30°C', '底座安装:底座吊装就位,初找水平', '["daily_0621_1.jpg","daily_0621_2.jpg","daily_0621_3.jpg"]'] ); // 14f. 工序交接 await conn.execute( "INSERT INTO fad_rm_install_handover (project_id,transfer_from,transfer_to,content,handover_date,sign_photo_url) VALUES (?,?,?,?,?,?)", [PID, '土建施工队', '安装施工队', '设备基础及地脚螺栓验收交接,基础尺寸符合图纸要求', '2026-06-14', '/upload/rm/handover/PID/handover_001.jpg'] ); await conn.execute( "INSERT INTO fad_rm_install_handover (project_id,transfer_from,transfer_to,content,handover_date,sign_photo_url) VALUES (?,?,?,?,?,?)", [PID, '安装施工队', '电气施工队', '电机基础已安装完成,移交电气施工队进行接线', '2026-06-28', null] ); console.log(' 工具4件 + 人员3人 + 精度3项 + 进度3项 + 日志3条 + 交接2条 √'); // ===================================================================== // 15. 安装问题反馈 fad_rm_install_feedback // ===================================================================== console.log('--- 15. 安装问题反馈 ---'); await conn.execute( "INSERT INTO fad_rm_install_feedback (project_id,device_name,title,location,issue_desc,proposer,issue_date,feedback_date,status,resolution,solution,prevent_action) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '底座', '地脚螺栓孔偏位', '基础坑', 'A列2号地脚螺栓孔位偏差5mm,无法安装', '刘建国', '2026-06-22', null, 'pending', null, '现场扩孔至设计尺寸', '加强预埋件定位精度控制'] ); await conn.execute( "INSERT INTO fad_rm_install_feedback (project_id,device_name,title,location,issue_desc,proposer,issue_date,feedback_date,status,resolution,solution,prevent_action) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '电缆', '进线电缆预留不足', '电气室', '主电机进线电缆预留长度不够,需增加中间接线盒', '张明', '2026-06-23', '2026-06-25', 'resolved', '已增加中间接线盒,电缆已接续完成', '增加一个中间接线盒过渡', '后续设计阶段预留足够电缆长度余量'] ); await conn.execute( "INSERT INTO fad_rm_install_feedback (project_id,device_name,title,location,issue_desc,proposer,issue_date,feedback_date,status,resolution,solution,prevent_action) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [PID, '液压站', '液压管接头渗油', '液压站', '液压站出口管接头处轻微渗油,需更换密封圈', '刘建国', '2026-06-24', '2026-06-26', 'resolved', '已更换密封圈,打压测试无渗漏', '更换O型密封圈并重新紧固', '来料检验增加密封圈材质检测'] ); console.log(' 3条反馈 √'); // ===================================================================== // 16. 安装验收 // ===================================================================== console.log('--- 16. 安装验收 ---'); // 16a. 验收条目 await conn.execute( "INSERT INTO fad_rm_acceptance_item (project_id,item_name,standard,result,inspector,inspect_date) VALUES (?,?,?,?,?,?)", [PID, '设备外观检查', '无锈蚀、无变形、无损伤', '1', '赵工', '2026-06-25'] ); await conn.execute( "INSERT INTO fad_rm_acceptance_item (project_id,item_name,standard,result,inspector,inspect_date) VALUES (?,?,?,?,?,?)", [PID, '安装精度检查', '水平度≤0.05mm/m,垂直度≤0.05mm/m', '1', '赵工', '2026-06-25'] ); await conn.execute( "INSERT INTO fad_rm_acceptance_item (project_id,item_name,standard,result,inspector,inspect_date) VALUES (?,?,?,?,?,?)", [PID, '电气接线检查', '接线正确,绝缘电阻≥1MΩ', '0', null, null] ); // 16b. 验收CheckList await conn.execute( "INSERT INTO fad_rm_acceptance_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '设备外观检查', '1', 1] ); await conn.execute( "INSERT INTO fad_rm_acceptance_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '安装精度检查', '1', 2] ); await conn.execute( "INSERT INTO fad_rm_acceptance_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '电气接线检查', '1', 3] ); await conn.execute( "INSERT INTO fad_rm_acceptance_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '空载试运行', '0', 4] ); console.log(' 验收条目3条 + CheckList4项 √'); // ===================================================================== // 17. 热负荷试车 // ===================================================================== console.log('--- 17. 热负荷试车 ---'); // 17a. 试车CheckList await conn.execute( "INSERT INTO fad_rm_commissioning_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '冷却水系统已投入', '0', 1] ); await conn.execute( "INSERT INTO fad_rm_commissioning_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '润滑系统已运行正常', '0', 2] ); await conn.execute( "INSERT INTO fad_rm_commissioning_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '电气保护整定值已确认', '0', 3] ); await conn.execute( "INSERT INTO fad_rm_commissioning_checklist (project_id,item_text,is_checked,sort_order) VALUES (?,?,?,?)", [PID, '紧急停止按钮功能测试通过', '0', 4] ); // 17b. 试车条款 await conn.execute( "INSERT INTO fad_rm_commissioning_clause (project_id,clause_content,sort_order) VALUES (?,?,?)", [PID, '轧机在额定转速下连续运行2小时,轴承温升不超过40°C', 1] ); await conn.execute( "INSERT INTO fad_rm_commissioning_clause (project_id,clause_content,sort_order) VALUES (?,?,?)", [PID, '轧制力控制系统响应时间不超过50ms', 2] ); await conn.execute( "INSERT INTO fad_rm_commissioning_clause (project_id,clause_content,sort_order) VALUES (?,?,?)", [PID, '厚度控制精度达到±0.05mm', 3] ); // 17c. 试车记录 await conn.execute( "INSERT INTO fad_rm_commissioning_record (project_id,record_date,record_type,param_name,param_value,result,issue_desc) VALUES (?,?,?,?,?,?,?)", [PID, '2026-06-26', '0', '电机空载电流', '120A', '1', null] ); await conn.execute( "INSERT INTO fad_rm_commissioning_record (project_id,record_date,record_type,param_name,param_value,result,issue_desc) VALUES (?,?,?,?,?,?,?)", [PID, '2026-06-26', '0', '轴承温升', '35°C', '1', null] ); console.log(' CheckList4项 + 条款3条 + 记录2条 √'); await conn.end(); console.log('\n======================================='); console.log('测试项目A — 全部17阶段数据插入完成!'); console.log('======================================='); } run().catch(e => { console.error('插入失败:', e); process.exit(1); });