|
- import fs from 'node:fs';
- import assert from 'node:assert/strict';
- const dir='reports/bridge-workbook-review-20260917';
- const sheets=JSON.parse(fs.readFileSync(dir+'/source.json','utf8'));
- const tasks=JSON.parse(fs.readFileSync(dir+'/current-tasks.json','utf8'));
- const notes={
- 30:['005 第1步','部分对应','能确认预设故障泵;没有双泵对照或根据不同故障现象选择故障泵的诊断分支。'],
- 31:['005 第2步','动作对应','断开取力器;实物开关外形仍受模型准确度限制。'],
- 32:['005 第3步','动作对应','球阀打开动作已有;文档要求垂直到平行,几何正确性应以实际管轴为准,不能仅用固定90°证明。'],
- 33:['005 第4步','动作对应','按相反方向重新接通取力器。'],
- 34:['005 第5步','动作对应','开盖后操作互救开关;新模型验证入口已修复准备保存后的盖子状态恢复。'],
- 35:['005 末尾','缺项','没有单泵继续驱动支腿、移动架、架设架或吊机的联动结果演示。'],
- 37:['006 导入','缺项','现有任务从具体操作开始,没有独立的替代概念讲解段。'],
- 38:['006 导入','部分对应','新模型已经有双车场景,但缺独立的互救原理讲解和供动力过程演示。'],
- 39:['006 第1步','部分对应','顺序对应;发动机运行仅点击着色,不是发动机运行状态或动力联动。'],
- 40:['006 第2步','部分对应','双车和原形软管已接入;操作实际是移动两个接口盖并显示已成形软管,缺接头插接/锁紧过程。'],
- 41:['006 第3步','动作对应','使用保障车回油截止阀节点并旋转;位置准确性仍需按文档待确认项核定。'],
- 42:['006 第4步','动作对应','开盒盖、开互救开关已实现;与005是否同一开关仍是原稿待确认项。'],
- 43:['006 第5步','动作对应','现在是两个独立球阀,分别完成操作,不再只操作一个。'],
- 44:['006 第6步','部分对应','保障车取力器开关仍为补充示意件;供油用软管颜色提示,未呈现真实液压泵和动力传递。'],
- 45:['006 第7步','部分对应','仅移动示意手柄,未完成双车供油后的整机作业演示。'],
- 47:['007 第1步','部分对应','有停机着色和初裁纸片缩放;没有依结合面轮廓裁剪的工具动作。'],
- 48:['007 第2步','待确认','有旋转关闭动作;当前将2_07球阀开关02和3-02球阀开关复用为1号球阀,文档要求确认编号对应。'],
- 49:['007 第3步','部分对应','真实接头和封口袋已绑定;接头仅位移,没有大活动扳手旋松过程或工具规格约束。'],
- 50:['007 第4步','部分对应','已逐个拆4颗真实螺栓,原模型5颗的问题已处理;未展示开口扳手操作,螺栓半圈是示意行程。'],
- 51:['007 第5步','动作对应','使用新模型原位前泵执行取下;工程配合尺寸不由流程通关证明。'],
- 52:['007 第6步','部分对应','切换精裁纸垫模型,没有实际沿安装轮廓裁剪过程。'],
- 53:['007 第7步','部分对应','纸垫移动到推定结合面位置,未按文档要求取得法兰轮廓与尺寸核验。'],
- 54:['007 第8步','动作对应','新泵归位并逐个安装4颗螺栓;未推定拧紧扭矩。'],
- 55:['007 第9步','部分对应','新泵注油口盖随泵移动并可打开;加油壶和油流为示意。后续没有关盖动作(文档也未列,属流程闭合建议)。'],
- 56:['007 第10步','部分对应','取袋、接头归位顺序对应;“并拧紧”没有接头旋转或扳手动作。'],
- 57:['007 第11步','部分对应','只启动着色并移动示意试验手柄;未接整机试车,也没有泄漏、压力等合格判据,文档明确需甲方补充。'],
- 59:['008 第1步','部分对应','仅布块擦拭和阀体变色;没有油污到洁净贴图,也没有各管接头的清洗覆盖。'],
- 60:['008 第2步','部分对应','接头移开、袋子封口已有;缺19号开口扳手及旋松动作。'],
- 61:['008 第3步','部分对应','4颗螺栓逐件旋转拆下并取阀;缺8号内六角工具动作与规格约束。'],
- 62:['008 第4步','部分对应','2个真实油堵逐件封堵;擦阀座是点击变色的示意平面。'],
- 64:['008 第5步','部分对应','同小腔:无油污贴图和接头清洗覆盖。'],
- 65:['008 第6步','部分对应','同小腔:有接头/封袋位移,缺19号扳手旋松。'],
- 66:['008 第7步','部分对应','同小腔:4颗螺栓与阀体已有,缺8号内六角工具。'],
- 67:['008 第8步','部分对应','2个真实油堵已有;阀座仍是补充接触平面示意。'],
- 69:['008 第9步','部分对应','取下2油堵已有;只对阀座着色,没有阀体和阀座两者的擦拭去污过程。'],
- 70:['008 第10步','部分对应','小腔来源阀体换装到大腔安装面,按四螺栓安装面校准姿态;有4颗螺栓,无8号工具。文案未清楚区分阀体来源与安装位置。'],
- 71:['008 第11步','待确认','当前执行取袋、接管,并要求填写依据交教员核对。与C列装配方向一致,但D列及第三表仍明确指出原稿反向拆卸矛盾;不能认作已澄清。'],
- 72:['008 第12步','待确认','当前复用第10步同一组4颗螺栓再次旋转;原稿未确认固定螺栓与阀体连接螺栓是否同一组。'],
- 74:['008 第13步','部分对应','同第9步:取油堵已有,缺阀体/阀座擦拭全流程。'],
- 75:['008 第14步','部分对应','大腔来源阀体换装到小腔安装面,姿态已校准;工具和来源/目的地提示仍需完善。'],
- 76:['008 第15步','待确认','同第11步:取袋接管并记录依据;原稿相反动作仍待确认。'],
- 77:['008 第16步','待确认','同第12步:复用第14步同一组4颗螺栓,需确认是否应有另一组。'],
- };
- const animationRows=sheets[0].rows.filter(r=>Object.keys(r).some(k=>/^C\d+$/.test(k)) && !r.C3);
- assert.equal(animationRows.length,65);
- const introRows=new Set([...Array.from({length:13},(_,i)=>i+5),...Array.from({length:10},(_,i)=>i+19)]);
- const escape=s=>String(s??'').replaceAll('|','/').replaceAll('\n',' ');
- const lines=animationRows.map(r=>{
- const row=Number(Object.keys(r)[0].slice(1));const n=notes[row]||(introRows.has(row)?['005 导入/原理','缺项',([12,13,...Array.from({length:10},(_,i)=>i+19)].includes(row)?'没有原理图及回路演示,文档明确要求提供液压原理图。':row===17?'没有双泵定位讲解;新模型没有可按名称确认的独立后泵节点。':row>=8&&row<=10?'没有此独立环境素材段;训练场地背景不能替代三类画面。':'未编排成文档要求的独立字幕/画面/讲解段;通用任务标题或步骤语音不算该段。')]:null);
- assert.ok(n,'missing row '+row);
- const serial=row>=39&&row<=44?`2-${String(row-36).padStart(2,'0')}`:row===47?'3-01':row===49?'3-03':row===59?'4-01':row===64?'4-05':r['A'+row];
- return [serial,`1-动画!B${row}:F${row}`,r['B'+row],n[0],n[1],n[2]].map(escape).join(' | ');
- });
- const modelNotes=[
- '已按0916模型在原位绑定旧泵、新泵与取力器面;纸垫贴合仍是推定位置,不能用新模型存在替代装配尺寸验收。',
- '已分离为4颗真实螺栓;旧的5颗不再用于007操作。',
- '006~008已用统一0916架桥车坐标,附件保留共同导出坐标;005原发布入口仍旧模型,新模型在独立编排验证入口。',
- '保障车整车、接口盖和回油阀已有;独立取力器/液压泵未完整绑定,开关仍补充示意。',
- '未找到可按节点名称确认的独立后泵,也没有双泵定位步骤。',
- '双车连接油管.glb已使用;符合给定成形软管的交付方式,接头连接过程仍简化。',
- '当前操作件绑定接口盖,不等同于快速接头插接与锁紧。实装位置仍需确认。',
- '两个独立球阀已绑定,006第5步分别操作。',
- '模型节点注明2_07与3-02复用;编号与工况仍需按第三表确认。',
- '两个管接头已有且可分开;动作只有位移,未实现扳手旋松/旋紧。',
- '已使用牛皮纸附件的初裁/精裁形态;与建议单片贴图方案不同,但可表现状态;裁切轮廓未核定。',
- '007和008已用新封口袋附件;袋口包扎动作简化为移动就位。',
- '008每侧两个油堵已由实际模型分离使用。',
- '未实现带油污贴图到洁净贴图切换,当前为颜色变化。',
- '已用真实注油口盖并随新泵移动;开盖有动作。',
- '已按4_01/4_05等不同来源名和稳定交互ID区分,螺栓按独立几何拆分。',
- '已接两侧真实阀体与四螺栓;阀座接触面仍为示意平面。',
- '005五步已有,新模型验证入口也可运行;006复用同一辅助控制盒开关。',
- '当前新GLB无内嵌动画,三个任务未绑定整机联动轨道。文档所说12条/12秒旧演示尚未接到末步,需定位可迁移来源。',
- ];
- const clientNotes=[
- '当前未接入;缺原理图会阻挡005原理演示,不阻挡现有五步操作。',
- '当前未接三类独立素材段。',
- '按新模型命名绑定大小腔阀;未获得实装位置指认确认,不能称已工程核定。',
- '按新模型给定坐标放置;仍需实装位置确认。',
- '纸垫位置可演示,但形状尺寸未取得可验收依据。',
- '当前采用模型合并命名的同一球阀;需确认编号与功能。',
- '尚缺;目前试验手柄动作不能代表试车合格。',
- '005没有额外手动自救阀步骤;保持原5步,不能擅加或认为互救开关必然等同该阀。',
- '当前005和006确实复用同一互救开关;对应关系尚待甲方确认。',
- '现有006展示外部供油操作;未区分前泵故障和液压系统完全失效情景。',
- '当前按同一组4颗处理两次紧固;是实现假设,需确认后决定是否增加另一组。',
- '当前008第11/15步取袋接管并要求人工核对,不自动宣告管路处置正确;文档仍未解决相反动作。',
- '当前统一写大活动扳手;属于合理文字归一,最终仍可按原稿确认。',
- '目前未设具体规格;不应凭空指定开口尺寸。',
- ];
- function supporting(sheet,arr){const rows=sheet.rows.filter(r=>Object.keys(r).some(k=>/^B\d+$/.test(k))&&!r.B3);assert.equal(rows.length,arr.length);return rows.map((r,i)=>{const row=Object.keys(r)[0].slice(1);return `| ${sheet.name}!B${row}:D${row} | ${escape(r['B'+row])} | ${arr[i]} |`;}).join('\n');}
- const md=`# 四个桥梁脚本与说明文本核对
-
- 核对时间:2026-09-17。源文件:E:/work/edit_3d/模型/重型支援桥四份脚本说明文本.xlsx。读取三个工作表全部非空内容;只读核对,没有修改原表、已发布任务或业务代码。
-
- ## 结论
-
- 当前流程可走通,但不能据此认定已完整满足65条动画/讲解要求。文档包含005的29条、006的9条、007的11条、008的16条;系统操作步骤为5/7/11/16,共39步,二者统计口径不同。005缺23条导入/原理条目及最后单泵联动作业,006缺独立概念讲解,三套末尾的整机作业/试验仍有缺口。
-
- 此前34步、89项交互通过,指006~008当前已配置动作的可执行性,不是这份文档的内容完整性或实装准确性验收。
-
- 核验了实时任务接口:005=任务86/内容533;006=87/553;007=88/554;008=89/555。005新模型编排验证另为任务116/内容552,未替换原列表005。
-
- ## 优先处理
-
- 1. 补005末尾单泵联动、006双车供油联动、007起动试车结果;旧12条动画需要先找来源再适配新节点。新GLB没有内嵌动画,当前步骤也未绑定整机动画。
- 2. 接头旋松/旋紧目前只有位移;007/008需补工具动作。步骤toolId均为空,19号开口扳手、8号内六角未形成精确工具约束。
- 3. 008清洗补脏净材质、管接头清洗和阀体/阀座擦拭;目前只有布块移动或变色。
- 4. 明确008同一组还是两组螺栓、接管方向;明确自救阀、互救开关及球阀编号。这些文档已列待确认,不应凭代码猜定。
- 5. 补005导入与原理讲解;原理图、三类环境画面需要对应资料。不得用当前步骤视频充当未制作的原理动画。
- 6. 已发布006第7步、007第8/9/11步的屏幕说明仍有“原图/原稿未展开”字样。语音有覆盖文案不代表屏幕说明已清理;008矛盾说明宜放教师审核说明,不当作正常操作口播。
-
- 本报告的“动作对应”只表示目标与顺序已有实现,不表示模型尺寸、维修安全条件、扭矩或压力判据已实装核验。“部分对应”表示代码实现与文字目标之间仍有可见差距。
-
- ## 65条逐项核对
-
- 原表部分编号被Excel储存为日期序列值(如46056);下表按所在脚本和顺序恢复展示编号,原文件未改。
-
- | 编号 | 原表位置 | 内容 | 当前位置 | 判断 | 差异与说明 |
- |---|---|---|---|---|---|
- ${lines.map(l=>'| '+l+' |').join('\n')}
-
- ## 建模需求19项复核
-
- 此表的“缺模型”包含旧交付状态,不能直接视为0916新模型仍然全部缺失。
-
- | 原表位置 | 需求 | 当前情况 |
- |---|---|---|
- ${supporting(sheets[1],modelNotes)}
-
- ## 甲方资料与待澄清14项
-
- | 原表位置 | 事项 | 对当前实现的影响 |
- |---|---|---|
- ${supporting(sheets[2],clientNotes)}
-
- ## 实现依据
-
- - src/features/virtual-training-scripts/bridge-pump-switch.js:005操作五步。
- - bridge-pump-substitute.js:006软管显示、供油着色、末步示意手柄。
- - bridge-pump-replace.js:007接头位移、纸片状态、新泵安装与试验手柄。
- - bridge-balance-valve-swap.js:008同一组螺栓复用、清洗着色、未决接管步骤。
- - bridge-new-model-definition.js:006两独立球阀和新模型来源。
- - bridge-new-model-runtime.js:真实部件映射、示意件、阀体互换安装面校准。
- - bridge-3d-definition.js:工具ID为空,动作与顺序为主要评定维度。
- - 实时任务接口返回的步骤与模型路径;0916三个主要GLB的animations数组为空。
-
- 本次没有再运行全套浏览器回归;依据为工作簿原文、实时接口定义、动作代码和模型结构。先前通关截图属于前一轮执行验证,不能替代本次发现的内容差异。
- `;
- fs.writeFileSync(dir+'/核对报告.md',md);
- let table=false;const blocks=[];
- for(const line of md.split('\n')){
- const s=line.replaceAll('&','&').replaceAll('<','<').replaceAll('>','>');
- if(s.startsWith('|')){
- if(/^\|[\s|:-]+$/.test(s))continue;
- const tag=table?'td':'th';if(!table){blocks.push('<div class="table"><table>');table=true;}
- blocks.push('<tr>'+s.split('|').slice(1,-1).map(c=>`<${tag}>${c.trim()}</${tag}>`).join('')+'</tr>');continue;
- }
- if(table){blocks.push('</table></div>');table=false;}
- blocks.push(s.startsWith('# ')?'<h1>'+s.slice(2)+'</h1>':s.startsWith('## ')?'<h2>'+s.slice(3)+'</h2>':s?'<p>'+s+'</p>':'');
- }
- if(table)blocks.push('</table></div>');
- fs.writeFileSync(dir+'/index.html',`<!doctype html><html lang="zh-CN"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>四个桥梁脚本核对</title><style>body{font:15px/1.8 system-ui;max-width:1500px;margin:32px auto;padding:20px;color:#183c37}p{margin:10px 0}h2{margin-top:32px}.table{overflow:auto}table{width:100%;border-collapse:collapse;font-size:14px}td,th{border:1px solid #bdd3cc;padding:9px;text-align:left;vertical-align:top}th{background:#e8f4ef}td:first-child{white-space:nowrap}tr:nth-child(even){background:#f7faf9}</style>${blocks.join('\n')}</html>`);
- console.log(JSON.stringify({animationRows:lines.length,modelRequirements:modelNotes.length,clientRequirements:clientNotes.length,currentTasks:tasks.map(t=>({code:t.code,steps:t.steps.length})),report:dir+'/核对报告.md'}));
|