首次提交: OnebotCatalog 项目代码与文档(含 NX 按需生成服务二期、后台、一键启动)

This commit is contained in:
wangruiguo
2026-09-03 17:55:45 +08:00
commit fafa86d3a6
241 changed files with 78656 additions and 0 deletions

92
docs/工作交接.md Normal file
View File

@@ -0,0 +1,92 @@
# 工作交接NX 按需生成服务(二期 A 版)
> 给接手的同事/新会话。读完这份 + `项目总览.md` + `开发记录-NX2506批处理攻坚.md` 即可快速跑起来。
> 更新2026-08-27
## 一、一句话现状
**软件侧全部打通两天卡点NX 批处理导出 0 solid已解决全链路实测通过。现在只等真实母模母版就位。**
## 二、系统由 3 个进程组成
| 进程 | 端口 | 作用 | 怎么启动 |
|---|---|---|---|
| **网页端** serve-web.ps1 | 8080 | 选型界面(客户看到的就是这个)| `_start_all.bat` 不含它,需单独起,或见 §五 |
| **GenServer.exe** | 8899 | 生成服务后端(队列/校验/下载/预览)| `_start_all.bat` 第 3 步 |
| **NX worker** run_journal | — | 常驻轮询任务,调 NX 生成数模 | `_start_all.bat` 第 4 步 |
## 三、一键启动(最关键的一条命令)
```
d:\开发\OnebotCatalog\_start_all.bat
```
它会:停旧进程 → 编译 GenServer → 启动 GenServer → 启动 NX worker → health 自检。
浏览器开 `http://localhost:8080`,底部信息栏右侧有状态圆球:**绿=就绪,橙=等 worker红=故障**。
## 四、UGNX配置后台怎么进
浏览器开:**`http://localhost:8899/admin`**
**密码登录**:默认密码 `onebot888`。打开 `/admin` 先弹登录页 → 输密码 → 进后台。
后台是**顶部三个 tab**(点击切换):
1. **UG 配置**NX 版本目录(自动探测 2506/2512可手动选、数据源/母模/输出/任务/工作各目录、端口、API Key、管理页密码、队列上限、批量上限、限流
2. **参数配置**:直接编辑 `masters.json`expressionMap / switchRules / exports保存后即时热重载无需重启
3. **模型管理**:手动清理(一键清空 output 目录)+ 定时清理(设置留存时长 outputTtlHours0=永不清空)
- 密码改法:`genserver-local\genserver-config.json``adminKey` 字段(默认 `onebot888`
## 五、网页端单独启动
`_start_all.bat` 没包含网页端(它是独立的 serve-web。单独起
```
d:\开发\OnebotCatalog\_start_web.bat
```
(站点在 `release\web_2026.08\``config.js``api` 已指向 `http://localhost:8899`
## 六、母模 ↔ 参数的对应关系(建模工程师必读)
对应靠 `onebot-data\masters.json` 这张翻译字典:
```json
"KC": {
"masterPart": "KC_master.prt",
"expressionMap": { "bore": "bore", "stroke": "stroke" }, // 尺寸参数 → NX表达式名
"switchRules": [
["magnet", "", "magOn", "0"], ["magnet", "M", "magOn", "1"],
["mount", "", "mountIdx", "0"], ["mount", "FA", "mountIdx", "1"], ...
], // 枚举开关 → NX表达式
"exports": { "step": "214", "iges": true, "prt": true }
}
```
**铁律**:母模里的表达式名必须和 `masters.json` 写的**一字不差**`bore`/`stroke`/`magOn`/`mountIdx``bore`/`stroke` 带 mm 单位,`magOn`/`mountIdx` 是纯数字开关;磁石/固定形式用「按表达式抑制」切换。
**待确认**`type`00/02/03是否影响几何影响则补映射不影响则忽略。
## 七、真实母模就位后做什么
1. 把交互式建模的真实气缸母模命名 `KC_master.prt`,放到 `catalog-masters\KC\` 覆盖占位母模
2. 重跑 `_start_all.bat`
3. 网页选 KC + stroke=87非标→ 在线生成 → 预览 → 下载
4. NX 打开生成的 `.stp` 核对缸径/行程与请求一致
## 八、关键踩坑(接手前必看)
1. **`.bat` 必须纯 ASCII 无中文**——cmd 按 GBK 读,中文会拆坏命令报"XX不是内部或外部命令"(见记忆 `bat-ascii-no-chinese`
2. **编译前先停 GenServer**——exe 被运行中进程锁住会 `error CS2012`
3. **批处理里别用 DexManager 导出**——NX 2506 的 ST-DEVELOPER 翻译器在 run_journal 里判 0 solid正解是独立命令行翻译器 `step214ug.exe`(.prt→.step)/`iges.exe`(.prt→.igs)
4. **配置以 D 盘为准**——W 盘是旧 TeamCenter 映射已废弃
5. **前端 dev 源 `web/` 与发布产物 `release\web_2026.08\` 要同时改**——serve-web 服务的是 release 目录
## 九、待办(剩余)
1.**真母模**:建模工程师做真实气缸母模(等用户)—— 唯一真正卡进度的
2. **NX 2512 实测**:换机后先验证 journal API + step214ug.exe 在 2512 下可用
3. **生产部署**netsh urlacl 授权、网页 config.js 填生产地址、桌面端 genApi 字段
4. **待确认**`type`00/02/03是否影响几何影响则补 masters.json 映射后台「参数配置」tab 可直接改)
> 注:参数映射网页后台编辑、密码登录、模型管理(手动/定时清理)均已在 `/admin` 后台实现。

52
docs/用户手册.md Normal file
View File

@@ -0,0 +1,52 @@
# 欧霓博气动元件电子目录 —— 用户手册 / User Manual
## 1. 安装与运行 / Install & Run
- 本软件为绿色程序,**无需安装**,双击 `OnebotCatalog.exe` 即可运行Windows 10/11不需要额外安装 .NET 运行时)。
- 光盘/U 盘自动播放默认被系统禁用,请直接双击 exe。
- 首次运行若杀毒软件提示拦截(程序未做代码签名),请选择"允许"或加入白名单。
## 2. 选型 / Configure a Part
1. 左侧目录树选择产品系列(如:汽车行业气缸 → KC 系列标准气缸)。
2. 中间面板依次选择参数:型号 → 缸径 → 行程 → 磁石 → 固定形式。灰色下拉即已按选型规则过滤,不可能的组合不会出现。
3. 选满后上方显示型号(如 `KC0032-100MLB`3D 预览自动显示该型号外形。
4. 3D 预览操作:鼠标左键拖拽旋转、滚轮缩放;真实数模会提示【在浏览器中打开 3D 预览】按钮(本机运行,不联网)。
5. 三个区域(目录树/参数面板/3D 视图)之间的分隔条可拖拽调宽。
## 3. 下载 STEP 文件 / Download STEP
- 完成选型后点击顶部 **「下载 STEP」**,选择保存位置,文件按 `型号.step` 命名(如 `KC0032-100MLB.step`)。
- STEP 为通用交换格式SolidWorks / NX / CATIA / Creo / Inventor 等主流 CAD 均可直接打开(打开时选择"零件/实体"模板)。
- **批量下载**切换到「参数表」标签页Ctrl/Shift 多选型号行,点击上方「批量导出所选」,得到 zip内含各型号 STEP + BOM.csv 清单)。
## 4. 搜索与筛选 / Search & Filter
- 顶部搜索框支持:型号编码(如 `KC0032``32x50`、中文名缸径、英文名Bore、拼音关键词gangjing
- 多个词用空格分隔;双击搜索结果直接定位到该型号。
- 「参数表」标签页上方可对数值参数做范围筛选(如缸径 32 ~ 63点「应用」生效、「重置」清除。
## 5. 尺寸图与数据表 / Drawings & Datasheet
- 「尺寸图」标签页2D 尺寸图 + **产品手册对照页**(选中系列即显示,滚动翻看规格参数/外形尺寸)
- 「数据表」标签页:打开 PDF 数据表
- 顶栏按钮可在 中文 / EN 之间切换界面语言
## 6. 常见问题 / FAQ
| 问题 | 处理 |
|---|---|
| 双击无反应 / 被杀软拦截 | 加入杀软白名单;确认系统为 Win10/11 |
| 提示"数据包格式版本高于软件支持" | 目录数据比软件新,请联系欧霓博获取新版软件 |
| 提示"数据包格式版本不兼容" | 数据包损坏或过旧,请重新获取 catalog.opc |
| 下载的 STEP 打开报错 | 换一种"打开"方式(文件→打开,模板选零件);或反馈该型号给欧霓博 |
| 3D 标签页显示提示按钮而非模型 | 该型号是真实 CAD 数模,点按钮在浏览器中查看 3D本机运行 |
| 目录内容更新 | 用新 catalog.opc 替换程序旁的旧文件(目录版);单文件版需更换整个 exe |
## 7. English Quick Guide
1. Double-click `OnebotCatalog.exe` (no installation, Windows 10/11).
2. Pick a series in the left tree, then set parameters (type / bore / stroke / magnet / mounting) — invalid combinations are filtered automatically.
3. Click **Download STEP** to save the 3D model (e.g. `KC0032-100MLB.step`), or export many in the **Parameters** tab (Ctrl/Shift multi-select → Export selected).
4. Search by model code, Chinese/English names or pinyin keywords in the top search box.
5. Use **EN/中** button to switch language.

109
docs/维护手册.md Normal file
View File

@@ -0,0 +1,109 @@
# 欧霓博气动元件电子目录 —— 维护手册 / Maintenance Manual
> 面向欧霓博目录维护人员。开发环境要求Windows 10/11 + Visual Studio 2022 Build Tools仅需其自带 csc 编译器)。
> 更完整的团队操作指南(数模替换/新增系列/打包/排查)见 `onebot-data\数据维护说明书.md`。
## 1. 数据源(统一路线)
**唯一数据源 = `onebot-data\catalog\`**
| 文件 | 要求 |
|---|---|
| catalog.json | 目录级定义(版本/分类/系列列表),手工编辑系列列表 |
| series\*.meta.json | 每系列定义(参数/规则/显示名/附件),**由维护向导编辑** |
| csv\*.csv | 参数表:首列=型号编码(唯一),参数列名=参数代码bore/stroke/magnet/mount...**必须含 `step_file` 列**UTF-8 |
| step\*.step | STEP 文件,文件名与 `step_file` 列一致NX 母模批量导出后放这里;**.stp 后缀自动兼容**,同名即可无需改名) |
| crossref.csv | 平替对照表可选brand,foreign_model,our_model,noteour_model 必须存在,构建自动校验 |
| manual\<系列>\ | 手册页 PNGrender-manual-pages.py 生成) |
## 2. 日常编辑与重建
1. 双击 `bin\维护入口.bat`(密码 `onebot888`)→ 顶栏【维护入口】按钮
2. 维护窗口:当前包系列清单 + 校验
3. 【目录制作器】Step1 顶部【数据源目录】(默认已填 `onebot-data\catalog`)→ 下拉选系列 → 编辑参数/规则/显示名/附件 →【保存配置】(写回 series\*.meta.json→ 点 **【重建全量目录】** → 全量 .opc 生成,可一键加载验证
- 新系列:手动导入 CSV → 填系列信息 → 保存配置 → 把系列代码加进 catalog.json 的分类列表 → 放 STEP → 重建
- 等价 CLI`bin\OnebotCatalog.exe --buildfull onebot-data\catalog sample\OnebotCatalog_2026.08.opc`(结果看 `sample\build.log`
## 3. 校验 / Validate
维护入口 →「校验 / Validate」检查STEP 缺失、编码重复、规则引用/冲突、附件缺失。**有 ERROR 不允许发布**(发布门禁会拦)。
## 4. 一键编译发布 / Publish
```powershell
# 前提: 先关闭正在运行的目录软件 exe 和本地预览服务器 (占用文件会导致失败)
powershell -NoProfile -ExecutionPolicy Bypass -File tools\publish.ps1 -Opc sample\OnebotCatalog_2026.08.opc -Version 2026.08
```
自动执行自测门禁31 项)→ 编译客户版(数据内置、维护入口剔除、图标)→ 发布目录(含本机 3D 查看器组件 ~8MB→ 增量包 → 网页站。
产出:
- `release\OnebotCatalog_2026.08\` —— 客户交付目录,压缩成 zip 即发(工作区根有现成 zip 示例)
- `release\update_2026.08\catalog.opc` —— 增量更新包,客户替换同名文件即升级
- `release\web_2026.08\` —— 网页站,整目录上传即上线
发布前建议在**纯净 Win10/11 虚拟机(断网)**上验收:双击运行、选型、下载 STEP 并在 CAD 中打开核对。
## 5. 日常命令 / Daily Commands
| 操作 | 命令 |
|---|---|
| 编译开发版 | `powershell -NoProfile -ExecutionPolicy Bypass -File tools\build.ps1` |
| 自测 | `bin\OnebotCatalog.exe --selftest sample\OnebotCatalog_2026.08.opc`(结果 `sample\selftest.log` |
| 全量构建 | `bin\OnebotCatalog.exe --buildfull onebot-data\catalog sample\OnebotCatalog_2026.08.opc` |
| 本地网页预览 | `powershell -NoProfile -ExecutionPolicy Bypass -File tools\serve-web.ps1`localhost:808016 并发) |
| 刷新源数据(占位几何) | `powershell -NoProfile -ExecutionPolicy Bypass -File onebot-data\tools\gen-onebot-source.ps1`NX 真实 STEP 直接替换 catalog\step\ 同名文件即可,无需跑这个) |
**注意**:编辑任何含中文的 `.ps1`/`.cs`/`.vb` 后必须先运行 `sample-data\tools\fix-bom.ps1` 再编译/运行PowerShell 5.1/csc 对无 BOM 文件按 GBK 读取会乱码报错)。
## 6. 修改维护密码 / Change Admin Password
编辑 `src\App\App.cs``PromptPassword()``"onebot888"`,重新编译开发版即可(客户版不含维护入口,无需处理)。
## 7. 桌面 3D 预览说明
- 占位简化几何 → 桌面内置 3D 直接渲染
- **真实 NX 数模 → 窗口内直渲,不弹浏览器**2026-08-24 起),四级优先级:
1. 有 STL 网格(`mesh\` 侧车目录,与 STEP 同名)→ 开源 Helix Toolkit 窗口内直渲
2. 无网格 → **WebView2 内嵌新迪查看器**(窗口内嵌浏览器控件,真实 STEP 直接渲染Win11 自带运行时Win10 装 Edge 即有)
3. WebView2 不可用 → 外部浏览器回退(程序内嵌本机微型服务器,完全离线;客户版发布目录已附带查看器组件)
4. 占位几何 → 内置自绘
- 网格生成NX journal 导出 STEP 时同步导出(`exportStl` 开关);已有真实 STEP 用 `python onebot-data\tools\step-to-stl.py` + `simplify-stl.py` 批量转换压缩
- 网页端轻量化glTF待办 9`nx-batch-export-glb.vb` 模板已备
## 8. 参数化选型引擎一期2026-08-25两端一致
- **模式开关**series.meta.json 的 series 块加 `"mode": "parametric"` + `"modelCodeTemplate"`(语法 `{field}``{field:padN}` 前补零),参数可定义 range 域:`"type": "range", "min": 10, "max": 200, "step": 1, "gridValues": [10, 20, 30, 50, 75, 100]`。缺失字段 = 枚举模式,老系列零影响
- **语义**CSV 仍是"标准档位网格"(搜索/平替/参数表/下载的数据源);选型面板可输入网格外的**非标组合**range 自由输入),引擎按模板实时生成型号编码
- **非标档位行为**标题带徽标STEP 下载按钮置灰请联系销售或选择标准档位3D 展示最近标准档位近似几何 + 提示条;可加入清单但打包时跳过并注明
- **对拍门禁**:构建期强制校验——参数化系列的**全部 CSV 编码必须能被模板重新生成且一一对应**任何一个不一致构建失败build.log 显示"参数化对拍门禁通过: N 个编码全部一致"
- **双端一致性**:一份规则 JSON + C#/JS 各一个解释器 + 同一份测试向量 `catalog\parametric-vectors.json`(随 .opc 发布):桌面 selftest 自动对拍;网页无头 `node tools\e2e-parametric.js`16 项)+ 购物车回归 `node tools\e2e-cart.js`
- **联动语义(重要)**:参数合法性按"域+规则"判定,**不按网格行存在性**;规则 Then 参数未选不判违背(避免选一半清空其他选项)
- **试点 KC** 已上线推广新系列时确认型号编码模板补零规则对拍门禁会兜底、按产品手册补规则、range 参数列出 gridValues
## 9. NX 按需生成服务(二期 A 版2026-08-25开发完成待 NX 联调/部署)
- **架构**`bin\GenServer.exe`csc 编译轻量后端:服务端二次校验(复用目录端同一规则引擎)→ 检索先行 → 文件任务队列 → 输出留存 → 限流/CORS+ 常驻 NX worker`sample-data\tools\worker_journal.vb`,每席位一个 `run_journal.exe` 进程:认领任务 → 拷母模副本 → 设表达式 → 更新 → 导出多格式 → 写结果;批量任务单会话顺序处理)
- **配置(服务器侧,`onebot-data\`**`genserver-config.json`(端口/API key/目录apiKey 留空=匿名模式仅限流)、`masters.json`(母模+表达式映射+switchRules+exports`catalog-masters\<系列>\<母模>.prt`
- **部署三步**:① 管理员执行 `netsh http add urlacl url=http://+:8899/ user=Everyone`(否则仅本机)② 启动 GenServer ③ 每席位一个:`run_journal.exe worker_journal.vb <worker号> <genserver-config.json 路径>`NXBIN 下,计划任务守护)
- **两端接入**:网页 `web\config.js` 的 api空=非标下载维持置灰过渡态);桌面 = 源目录 `catalog.json``genApi` 字段(重建+发布生效)
- **检索先行**`output\<系列>\<型号编码>\` 留存不删(全格式齐全即命中复用,不再触发 NX任务私有工作副本任务后即删
- **多格式导出**STEP(214)/Parasolid/IGES/STL下载为全格式 zip购物车含非标时打包前自动批量生成型号子文件夹
- **本地联调(无 NX**:模拟 worker 的 PS 脚本 + 网页端 `tools\e2e-gen.js`8 项)
- **NX 2506 实测 API2026-08-26反射探针核对详见 `开发记录-NX2506批处理攻坚.md`**:批处理打开部件用 **OpenBaseDisplay**OpenBase 后 Work=NULLCloseAll 两参数;建表达式 `Expressions.CreateExpression("Number","名=值")`;改表达式 UF `EditExp`(只改已存在);更新 `ufs.Modl.Update()`;导出器在 **Session.DexManager**CreateStepCreator/CreateIgesCreator/CreateParasolidExporter/CreateStlCreatorjournal 环境无 JSON 库 → 任务文件为行式键值;母模/worker 副本**必须清只读属性**(否则保存被拒)
- **待用户确认(上线前)**:① `masters.json` 表达式名按 NX 母模实际命名填写 ② KC 母模放入 `catalog-masters\KC\` ③ run_journal 路径(随 NX 版本)④ **卡点**:批处理模式翻译器导出空几何——需交互式 NX 录制导出宏修正 worker 导出函数,或用真母模直接实测(开发记录 §5 两方案)⑤ 部署时 `netsh http add urlacl url=http://+:8899/ user=Everyone`
## 10. 购物车批量导出2026-08-24两端一致
- 加入:参数面板【加入清单】(选型完成后)/ 参数表行尾"+"或勾选行【加入清单】;顶栏【清单 (N)】角标实时计数
- 清单面板:桌面独立窗口 / 网页右侧抽屉;数量可改(只在 BOM 数量列体现zip 每型号一份);支持删除/清空
- 一键打包:【下载全部 (zip + BOM)】→ `ONEBOT_清单_<时间戳>.zip` = 全部 STEP型号命名+ BOM.csvUTF-8 BOMExcel 直开)+ 清单.txt
- 购物车生命周期:网页刷新浏览器 / 桌面重启软件才清空;切系列/搜索/平替等操作不影响清单
- 桌面零新依赖net48 ZipArchive网页用开源 JSZip 3.10.1MITweb\libs\jszip.min.js前端打包
## 11. English Summary
- Data source: `onebot-data\catalog\` (catalog.json + per-series meta JSON + CSVs with a `step_file` column + STEP files + manual page PNGs).
- Edit: run `bin\维护入口.bat` (password `onebot888`) → Admin → Builder → pick series → save → 【重建全量目录】 (same engine as CLI `--buildfull`).
- Publish: `tools\publish.ps1` runs the selftest gate first, then compiles the customer exe (data embedded, no admin entry), assembles the release folder + incremental update package + static web site.
- Always run `sample-data\tools\fix-bom.ps1` after editing Chinese-containing .ps1/.cs/.vb files.

58
docs/部署清单.md Normal file
View File

@@ -0,0 +1,58 @@
# NX 按需生成服务 · 迁移到不加密服务器验证清单
> 目标:把整套「选型网页 + 生成服务 + NX worker」搬到一台不加密服务器装 NX 2512跑通验证。
> 更新2026-08-27
## 1. 要拷贝的最小集合
服务器只需这 6 项(其余源码/工具可带可不带):
| 目录/文件 | 作用 | 必带 |
|---|---|---|
| `bin\GenServer.exe` | 生成服务后端已编译net48Windows 自带运行时,无需装 VS| ✅ |
| `genserver-local\` | 配置 + jobs/output/work 目录 | ✅ |
| `catalog-masters\` | 母模 `KC_master.prt` | ✅ |
| `onebot-data\catalog\` + `onebot-data\masters.json` | 数据源GenServer 校验规则用)+ 母模映射表 | ✅ |
| `sample-data\tools\worker_journal.vb` | NX worker 脚本 | ✅ |
| `release\web_2026.08\` | 选型网页站(含 config.js| ✅ |
| `viewer\` | 新迪 3D 查看器(网页 3D 预览用,可选)| ⚠️ 可选 |
## 2. 服务器前置条件
- **Windows 10/11**net48 内置)
- **NX 2512**(跑 run_journal + worker + step214ug.exe/iges.exe
- 不需要装 VS Build ToolsGenServer.exe 已编译好;只有改 GenServer 代码才要重编译)
## 3. 必须改的 3 处(按服务器实际路径/版本改)
### ① `genserver-local\genserver-config.json` —— 改绝对路径
当前是 `d:\开发\OnebotCatalog\...`,改成服务器实际路径。`nxBin` 留空即可GenServer 自动探测 `C:\Program Files\Siemens\NX*\NXBIN`,能覆盖 2512
### ② `_start_all.bat` —— 改 run_journal 路径
第 4 步写死了 `C:\Program Files\Siemens\NX2506\NXBIN\run_journal.exe`**要改成 NX2512**(或改成自动探测)。
### ③ `release\web_2026.08\config.js` —— 改生成服务地址
```js
window.GEN_CONFIG = { api: "http://localhost:8899" };
```
- 网页与生成服务**同机** → 保持 `localhost:8899` 不用改
- 不同机 → 改成服务器 IP`http://192.168.x.x:8899`
## 4. 验证步骤
1. 启动:`_start_all.bat`(会自动 编译→启动 GenServer→启动 worker→health 自检)
2. 浏览器开 `http://<服务器>:8080`,看底部信息栏圆球变**绿**(服务就绪)
3. 选 KC 系列stroke 填 87非标点【在线生成数模】
4. 生成完 → 网页内 3D 预览 → 选格式 → 下载
5. 打开 `output\KC\KC0032-87\KC0032-87.stp` 确认含实体(几十 KB非 2KB 空壳)
## 5. 注意点
- **NX 2512 的 journal API 需实测**worker 的反射探针结论基于 25062512 的 `OpenBaseDisplay/EditExp/CloseAll` 是否一致,换机后第一次跑要盯日志。
- **`step214ug.exe`/`iges.exe` 是独立命令行工具**,跨版本大概率稳定,不依赖 NX 会话。
- **license 席位**:跑 worker 前确认交互式 NX 已关(批处理需独立席位)。
- 若 nxBin 自动探测不到NX 装自定义路径),用 `/admin` 页手动选 NX 目录。
- **后台 `/admin` 密码登录**:默认密码 `onebot888`(在 `genserver-local\genserver-config.json``adminKey` 字段改)。后台三 tabUG 配置 / 参数配置 / 模型管理。