SCSAI PLM v5.0 代码审查报告与优化补全方案
审查日期: 2026-05-13
审查范围: server/routes/aml.js, business-system.router.js, meta-model.router.js, frontend/app.js
审查人: SOLO
📊 总体评估
| 维度 | 状态 | 说明 |
|---|---|---|
| Phase1-2 (TOC重建/前端优化) | ✅ 已完成 | 业务系统层46个系统,442个对象类已重建 |
| P0 BUG修复 | ⚠️ 部分完成 | 3个P0 BUG中,1个完成,2个未完成 |
| P1 BUG修复 | ⚠️ 部分完成 | 3个P1 BUG中,1个完成,2个未完成 |
| Phase3 (模板自动生成) | ❌ 未实现 | 缺失关键API和前端UI |
| Phase4-6 | ❌ 未实现 | 闭环机制、自进化、业务提示词均未实现 |
✅ 已落实的功能
1. Phase1-2 已完成
- ✅ 业务系统重建API (
/api/aml/business-systems/rebuild) - ✅ 46个业务系统 + 442个对象类关联
- ✅ 前端业务系统层表格布局 + 搜索 + 筛选
- ✅ 对象类详情弹窗(属性/关系/方法/生命周期)
- ✅ 规则模板编辑器(CRUD + 批量操作)
2. 部分P0/P1修复
- ✅ P0-BUG-1: 对象详情业务系统查询优化
- 后端已添加
/api/aml/business-system/by-item/:nameAPI - 但前端仍在使用旧方式(46次串行请求)
❌ 未落实的功能(需补全)
🔴 P0优先级(必须修复)
#### P0-BUG-2: sciot_import.db 每次请求都新建连接 ❌
位置: server/routes/aml.js 第335-341行
问题代码:
function getSciotDb() {
try {
return require('../sqlite-compat').createDatabase(path.join(__dirname, '..', 'data', 'sciot_import.db'));
} catch (e) {
return null;
}
}
影响: 每个API调用都创建新连接 + close(),性能极差
代码中35处调用,每次都新建连接
修复方案:
// 改为单例模式
let _sciotDb = null;
function getSciotDb() {
if (!_sciotDb) {
_sciotDb = require('../sqlite-compat').createDatabase(
path.join(__dirname, '..', 'data', 'sciot_import.db')
);
}
return _sciotDb;
}
// 移除所有 sciotDb.close() 调用
#### P0-BUG-4: debug路由暴露SCSAI凭证 ❌
位置: server/routes/aml.js 第2508-2553行
问题代码:
if (pathname === '/api/aml/debug-SCSAI' && req.method === 'POST') {
// ...
headers: {
'AUTHUSER': 'admin',
'AUTHPASSWORD': '607920b64fe136f9ab2389e371852af2', // 明文密码!
'DATABASE': 'SCPLM',
}
}
影响: 安全漏洞,SCSAI管理员密码硬编码在代码中
修复方案: 删除这两个debug路由(第2508-2553行)
🟡 P1优先级(建议修复)
#### P1-BUG-3: Cache和DatabasePool类重复定义 ❌
位置:
meta-model.router.js第38-164行business-system.router.js第38-164行
问题: 两个文件各自复制了完全相同的 Cache 类(~50行)和 DatabasePool 类(~70行)
修复方案: 提取到共享工具文件
server/utils/cache.js # Cache类
server/utils/db-pool.js # DatabasePool类
#### P1-BUG-6: is_core判断逻辑不合理 ❌
位置: business-system.router.js 第506行
问题代码:
const isCore = i < 10 ? 1 : 0; // 前10个算核心
问题: 对于只有5个对象的系统,全部是核心;对于144个对象的com系统,只有前10个是核心
修复方案: 从 sciot_item_types 表的 is_core_business 字段判断
#### P1-BUG-1补充: 前端仍使用旧查询方式 ❌
位置: frontend/app.js 第1468-1478行
问题代码:
for (const sys of systems) {
const detailRes = await fetch(`/api/aml/business-system/${sys.system_id}`); // 46次串行请求!
// ...
}
修复方案: 改用新API /api/aml/business-system/by-item/${itemTypeName}
🔵 Phase3: 模板自动生成(完全未实现)
#### 3.1 缺失模板识别API ❌
应实现: GET /api/aml/missing-templates
功能: 返回有属性/方法/关系但缺模板的对象类列表
实现代码:
function getMissingTemplates() {
const sciotDb = getSciotDb();
const missing = sciotDb.prepare(`
SELECT it.item_type_name, it.item_type_label,
(SELECT COUNT(*) FROM sciot_properties WHERE item_type_name = it.item_type_name) as prop_count,
(SELECT COUNT(*) FROM sciot_methods WHERE item_type_name = it.item_type_name) as method_count,
(SELECT COUNT(*) FROM sciot_relationships WHERE item_type_name = it.item_type_name) as rel_count
FROM sciot_item_types it
LEFT JOIN sciot_templates t ON it.item_type_name = t.item_type_name
WHERE t.item_type_name IS NULL
ORDER BY prop_count DESC
`).all();
return missing.filter(m => m.prop_count > 0 || m.method_count > 0);
}
#### 3.2 LLM批量生成模板API ❌
应实现: POST /api/aml/batch-generate-templates
功能: 批量调用LLM为缺失的对象类生成模板
实现要点:
- 接收
item_types数组和force参数 - 逐个获取属性/方法/关系
- 构建Prompt调用LLM
- 解析结果保存到
sciot_templates表 - 返回生成统计(成功/失败/跳过)
#### 3.3 前端模板生成UI ❌
应实现: 业务系统层Tab添加"批量生成模板"按钮
功能:
- 4步向导:分析缺失 → 选择对象 → 配置参数 → 查看结果
- 显示覆盖率统计(298/442 = 67.4%)
- 支持全选/清空/分批生成
🟣 Phase4-6(完全未实现)
| Phase | 功能 | 状态 |
|---|---|---|
| Phase4 | 创建结果记录表 + 闭环机制 | ❌ 未实现 |
| Phase5 | 自进化机制(日志分析 + 规则优化) | ❌ 未实现 |
| Phase6 | 业务系统提示词生成 | ❌ 未实现 |
📋 详细优化补全方案
第一阶段:紧急修复(P0 BUG)- 预计2小时
#### 任务1: 修复数据库连接问题
// server/routes/aml.js 第335行替换为:
let _sciotDb = null;
function getSciotDb() {
if (!_sciotDb) {
_sciotDb = require('../sqlite-compat').createDatabase(
path.join(__dirname, '..', 'data', 'sciot_import.db')
);
}
return _sciotDb;
}
- 删除所有
sciotDb.close()调用(约35处)
#### 任务2: 删除debug路由
// 删除 aml.js 第2508-2553行
// /api/aml/debug-save 和 /api/aml/debug-SCSAI
#### 任务3: 前端改用优化API
// frontend/app.js 第1468-1478行替换为:
const byItemRes = await fetch(`/api/aml/business-system/by-item/${t.item_type_name}`);
const byItemJson = await byItemRes.json();
if (byItemJson.success) {
plmArch.detailBusinessSystem = byItemJson.data;
}
第二阶段:P1修复 + Phase3实现 - 预计6小时
#### 任务4: 提取共享工具类
创建 server/utils/cache.js 和 server/utils/db-pool.js
#### 任务5: 实现缺失模板识别API
在 aml.js 中添加 GET /api/aml/missing-templates
#### 任务6: 实现LLM批量生成API
在 aml.js 中添加 POST /api/aml/batch-generate-templates
#### 任务7: 前端模板生成UI
在 app.js 的业务系统层Tab添加批量生成向导
第三阶段:Phase4-6实现 - 预计10小时
#### 任务8: Phase4 - 闭环机制
- 创建
sciot_creation_logs表 - 修改对象创建流程,记录LLM生成和SCSAI返回结果
- TOC同步后自动刷新业务系统
#### 任务9: Phase5 - 自进化机制
- 创建日志分析API
- 实现规则有效性评分
- 定时任务调度(每周分析)
#### 任务10: Phase6 - 业务系统提示词
- 实现
POST /api/aml/business-systems/generate-prompts - 为46个系统批量生成提示词
- 前端展示业务系统提示词
🎯 优先级排序
| 优先级 | 任务 | 工作量 | 影响 |
|---|---|---|---|
| 🔴 P0 | 修复数据库连接问题 | 30分钟 | 性能提升 |
| 🔴 P0 | 删除debug路由 | 10分钟 | 安全 |
| 🔴 P0 | 前端改用优化API | 20分钟 | 用户体验 |
| 🟡 P1 | 提取共享工具类 | 1小时 | 可维护性 |
| 🟡 P1 | 实现缺失模板识别API | 1小时 | Phase3基础 |
| 🟡 P1 | 实现LLM批量生成API | 2小时 | Phase3核心 |
| 🟡 P1 | 前端模板生成UI | 2小时 | Phase3完整 |
| 🔵 P2 | Phase4-6实现 | 10小时 | 完整闭环 |
📁 文件变更清单
需修改文件
server/routes/aml.js- 修复P0-BUG-2/4,添加Phase3 APIserver/routes/business-system.router.js- 修复P1-BUG-6frontend/app.js- 修复P0-BUG-1补充,添加Phase3 UImeta-model.router.js- 使用共享工具类
需新建文件
server/utils/cache.js- 共享Cache类server/utils/db-pool.js- 共享DatabasePool类
✅ 验收标准
- [ ] P0 BUG全部修复,性能测试通过
- [ ] 缺失模板识别API返回正确数据(144个缺失)
- [ ] LLM批量生成能成功生成模板并保存
- [ ] 前端模板生成UI能完成4步向导流程
- [ ] 模板覆盖率从67.4%提升到90%+
报告生成完成,建议按优先级逐步实施
BossAgents