Files
fad_oa/fad-rolling-mill/seed_test_a.js

586 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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); });