SCSAI PLM v5.0 代码审查报告与优化补全方案

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/:name API
  • 但前端仍在使用旧方式(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.jsserver/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前端改用优化API20分钟用户体验
🟡 P1提取共享工具类1小时可维护性
🟡 P1实现缺失模板识别API1小时Phase3基础
🟡 P1实现LLM批量生成API2小时Phase3核心
🟡 P1前端模板生成UI2小时Phase3完整
🔵 P2Phase4-6实现10小时完整闭环

📁 文件变更清单

需修改文件

  1. server/routes/aml.js - 修复P0-BUG-2/4,添加Phase3 API
  2. server/routes/business-system.router.js - 修复P1-BUG-6
  3. frontend/app.js - 修复P0-BUG-1补充,添加Phase3 UI
  4. meta-model.router.js - 使用共享工具类

需新建文件

  1. server/utils/cache.js - 共享Cache类
  2. server/utils/db-pool.js - 共享DatabasePool类

✅ 验收标准

  • [ ] P0 BUG全部修复,性能测试通过
  • [ ] 缺失模板识别API返回正确数据(144个缺失)
  • [ ] LLM批量生成能成功生成模板并保存
  • [ ] 前端模板生成UI能完成4步向导流程
  • [ ] 模板覆盖率从67.4%提升到90%+

报告生成完成,建议按优先级逐步实施

← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁