Files
plm-backend-service/TECH_DEBT.md
admin 499a65b509 feat: SSO单点登录端点 /api/v1/sso/token
- 从 nginx X-Authenticated-User header 获取用户名
- 自动查找/创建用户
- 颁发 8小时有效期 JWT token
- 安全机制:只 trusting nginx-verified header
- 集成到 FastAPI router
- 依赖:PyJWT
- 文档:注释中包含完整使用说明
2026-04-09 16:21:27 +08:00

15 KiB
Raw Permalink Blame History

技术债务跟踪

版本: v4.3 更新时间: 2026-04-06 04:55 GMT+8 审核人: CTO 进化官


🔄 M2阶段进行中

ID 任务 负责人 状态 截止
M2-001 工作流引擎核心开发 后端工程师 已完成 86baeec
M2-002 ECN变更管理API 后端工程师 已完成 56838a6
M2-003 BOM AI分析接入 后端工程师 已完成 a034be1
M2-004 Project进度计算 后端工程师 已完成 a034be1
M2-005 工作流表达式引擎修复 后端工程师 已完成 fa10f3b
M2-007 模型继承规范统一 后端工程师 已完成 7570350
M2-006 文档规范清理 笔杆子 已完成 3c9dfe3 (plm-docs)
M2-008 产品模块API完善 CTO 已完成 ddca286

M2进度: 8/8 完成 (100%)


🟢 M3阶段已完成

ID 任务 状态
M3-001 前端对接开发 已完成
M3-002 API接口测试验收 已完成
M3-003 数据库性能优化 已完成
M3-004 用户权限集成 已完成
M3-005 文档系统对接 已完成

M3进度: 5/5 完成 (100%)


🔄 M4阶段进行中

ID 任务 状态
M4-001 性能基准测试 已完成
M4-002 数据库查询优化 已完成
M4-003 缓存层引入 已完成
M4-004 API响应时间优化 已完成
M4-005 前端性能优化 🔄 进行中
M4-006 并发性能测试 待执行
M4-007 性能监控集成 待执行

M4进度: 4/7 完成 (57%) 🔄


🔄 M4阶段进行中

变更说明 (v4.0 - M2阶段完成 18:15):

  • 🎉 M2阶段100%完成: 8/8任务全部完成
  • M2-006 : 文档规范清理笔杆子plm-docs 3c9dfe3
  • TD-007~010 : 全部已解决
  • 清理结果: 删除2个重复文件补充工时估算和人员矩阵
  • 测试状态: 222 passed系统稳定

🎉 M2阶段完成总结:

任务 负责人 提交
M2-001 工作流引擎 后端工程师 86baeec
M2-002 ECN变更管理 后端工程师 56838a6
M2-003 BOM AI分析 后端工程师 a034be1
M2-004 Project进度计算 后端工程师 a034be1
M2-005 表达式引擎 后端工程师 fa10f3b
M2-006 文档规范清理 笔杆子 3c9dfe3
M2-007 模型继承规范 后端工程师 7570350
M2-008 产品API完善 CTO ddca286

交付成果:

  • API端点: 100+
  • 测试: 222 passed
  • 文档: 规范统一
  • 技术债务: 全部解决

变更说明 (v3.10 - CTO心跳审核 18:07):

  • 测试增长: 218 → 222 passed
  • 新提交: 968242a BOM修订功能Bug修复
  • 代码库: 干净无未提交修改
  • 状态: 系统稳定运行

  • BOM AI分析: 4/6 18:00
  • Project进度计算: 4/7 18:00
  • 表达式引擎: 4/8 14:00 (CTO负责)

M2-001 工作流引擎审核: CTO通过有3个表达式引擎测试待优化

  • 代码: 1100+行
  • 核心: WorkflowEngine/StateMachine/NodeExecutor/EventEmitter
  • 节点: 7种节点类型
  • 测试: 198 passed, 3 failed (表达式引擎语法)

🟢 M1阶段已解决

ID 位置 描述 状态
TD-001 tests/ 测试覆盖率不足 191 passed
BUG-TEST-002 tests/conftest.py 异步测试配置错误 已解决
TD-011 tests/conftest.py 测试数据库seed数据 已添加
BUG-TEST-001 tests/test_substitutes.py TODO占位测试 已解决
TD-006 migrations/ DDL脚本缺失 已补充
TD-004 app/api/auth.py API性能优化 已优化
FE-REVIEW-001 frontend 属性编辑未保存 已修复
FE-REVIEW-005 frontend 文件上传无限制 已修复

M1验收: 通过2026-04-03 22:30

🔴 高优先级 (M2阻塞)

ID 位置 描述 状态 分析
M2-005 app/services/workflow_engine.py 表达式引擎语法错误 已解决 fa10f3b
M2-007 app/models/* 模型继承规范统一 已解决 7570350
BUG-CONFIGS-001 app/api/configs.py /categories路由422错误 已解决 路由顺序调整

BUG-CONFIGS-001 技术分析 (CTO审核) 🔴新发现

问题: /api/v1/configs/grouped 返回 422 Unprocessable Entity

测试: test_get_config_categories failed

根因: configs.py 路由定义问题(需后端工程师排查)


M2-005 技术分析 (CTO审核) 已解决

问题现象:

  • ${amount > 10000} → SyntaxError
  • ${approved == True} → SyntaxError

根因分析: 表达式引擎直接调用 eval(),不支持 ${...} 模板语法包裹。

解决方案:

# 方案A: 修改表达式引擎,支持模板语法
import re
def evaluate_expression(expr: str, context: dict):
    # 提取 ${...} 内部表达式
    match = re.match(r'\$\{(.+)\}', expr.strip())
    if match:
        expr = match.group(1)
    return eval(expr, {"__builtins__": {}}, context)

# 方案B: 修改测试用例,去掉 ${} 包裹
# 测试用例应使用纯表达式: amount > 10000

推荐: 方案A (兼容模板语法,符合业务场景)

BUG-TEST-004 技术分析

问题: sqlite3.OperationalError: index idx_task_assignee_status already exists

根因: 测试数据库 fixture 未正确清理,多次测试运行导致索引重复创建。

解决方案: 在测试前清理旧数据库 rm test_db.sqlite 已解决

BUG-INDEX-001 状态更新

检查结果: 索引命名已正确区分

  • task.py:100: idx_task_assignee_status
  • workflow_engine.py:200: idx_wf_task_assignee_status

结论: 索引命名规范正确,无冲突。问题根因是旧数据库残留。

BUG-TASKS-001 技术分析 (CTO审核)

问题: tasks.py 移除了 deleted_at.is_(None) 过滤条件

影响:

  • 查询可能返回已软删除的任务
  • 统计数据不准确(包含已删除任务)

修改位置:

  • get_project_task_statistics() 第365-385行
  • 移除3处 deleted_at.is_(None) 过滤

正确做法: 应使用 base.py 提供的 filter_active() 方法

# 错误修改 (当前)
stmt = select(Task).where(Task.project_id == project_id)

# 正确做法
stmt = select(Task).where(Task.project_id == project_id, Task.deleted_at.is_(None))
# 或使用
stmt = filter_active(select(Task)).where(Task.project_id == project_id)

建议: 恢复软删除过滤或使用统一过滤方法


🟡 中优先级

ID 位置 描述 状态 计划
FE-REVIEW-001 frontend/ProductDetail.vue 属性编辑未保存后端 已修复 dedc774
FE-REVIEW-005 frontend/AttachmentManager.vue 文件上传无大小限制 已修复 dedc774
TD-002 app/api/bom.py:367 BOM AI分析待接入实际服务 待实现 M2阶段
TD-003 app/models/project.py Project进度计算待实现 待实现 M1-S3
TD-007 docs 任务清单文档内容重复需清理 已解决 plm-docs 3c9dfe3
TD-008 docs 任务清单缺少工时估算和人员分配矩阵 已解决 m1-s4-manual.md
TD-009 docs plm-ai-engine仓库未在命名规范列出 已解决 技术文档摘要
TD-010 docs 仓库与微服务映射需补充对照表 已解决 已创建
TD-012 tests/ 缓存功能缺少专门测试用例 待实现 M4阶段
TD-013 docs/api/ API文档缺少缓存相关信息 已完成 v2.1.0
BUG-AUTH-002 docs 文档改进建议 📝 低优先级 文档迭代

🟢 低优先级

ID 位置 描述 状态 计划
TD-005 docker 容器名称冲突清理 待处理 运维阶段

已确认

ID 描述 确认时间
TC-001 服务注册中心选型Nacos 2.2 2026-04-03

已解决

ID 描述 解决时间 提交
TD-006 DDL脚本补充(14表: users, products, bom, workflows等) 2026-04-03 15:45 64349b5
BUG-TEST-001 test_substitutes.py TODO占位替换为实际测试 2026-04-03 13:45 919d1a8
BUG-TEST-003 test_products.py使用conftest fixtures 2026-04-03 11:45 c5b77dd
BUG-TEST-002 异步测试配置错误+seed数据 2026-04-03 11:35 5dffce3
BUG-SUBSTITUTE-001 ImportError: Check应改为CheckConstraint 2026-04-03 07:10 5c2f572
BUG-AUTH-001 datetime序列化500错误 2026-03-31 -
BUG-USER-001 角色检查错误 2026-03-31 -
BUG-BOM-001 BOM明细超大数量返回500 2026-03-31 23:18 7dcc1ff
BUG-WORKFLOW-001 Workflow API路由冲突 2026-04-01 03:49 4cd6e45

📊 测试进度跟踪 (v3.4)

测试运行结果 (2026-04-04 08:20) 恢复正常

模块 passed failed skipped errors
test_auth.py 12 0 0 0
test_workflow.py 173 3 20 0
其他模块 13 0 3 0
总计 198 3 23 0

测试已恢复正常: 173 errors → 198 passed 根因: 旧 test_db.sqlite 残留,已清理 剩余问题: 3 failed (M2-005 表达式引擎语法)

测试运行结果 (2026-04-04 08:00) 🔴临时退化

模块 passed failed skipped errors
test_auth.py 12 0 0 0
test_workflow.py 1 2 48 173
总计 - - - -

⚠️ 测试严重退化: 198 passed → 173 errors 根因: BUG-INDEX-001 索引名称重复定义 阻塞: 所有 workflow 相关测试无法执行

测试运行结果 (2026-04-04 04:10)

测试运行结果 (2026-04-03 11:45)

模块 passed failed skipped
test_auth.py 12 0 0
test_bom.py 17 0 0
test_workflows.py 15 0 0
test_products.py 10 0 0
test_substitutes.py 11 0 0
test_api.py 0 0 19
总计 55 0 19

Phase 1 完成

模块 测试文件 测试用例数 状态
auth test_auth.py 12个 实际测试
bom test_bom.py 17个 实际测试
workflows test_workflows.py 15个 实际测试
products test_products.py 11个 实际测试
substitutes test_substitutes.py 9个 已修复

覆盖率: ~75% (55/74 端点) 实际有效覆盖率: ~75% (55个实际测试无TODO占位)


变更说明 (v3.7 - CTO心跳审核 12:00):

  • 状态同步: M2-005/M2-007 高优先级表格已更新为已解决
  • 新发现: BUG-CONFIGS-001 /grouped路由422错误待修复
  • 测试状态: 200 passed, 1 failed (configs)
  • M2进度: 6/7完成 (仅M2-006文档清理待执行)

变更说明 (v3.6 - CTO心跳审核 10:00):

  • M2-005 已完成: 表达式引擎模板语法支持 (fa10f3b)
  • M2-007 已完成: 模型继承规范统一 (7570350)
    • 14个模型改为BaseModel继承
    • DDL脚本 002_add_deleted_at.sql
    • 决策文档 MODEL-INHERITANCE-STANDARD.md
  • 测试状态: 200 passed, 1 failed (configs路由遗留)
  • 遗留问题: test_get_config_categories 422 (非本次修改造成)

变更说明 (v3.5 - CTO处理 08:25):

  • BUG-TEST-004 : 清理旧 test_db.sqlite测试恢复正常
  • BUG-INDEX-001 : 索引命名已正确区分,无需修改
  • BUG-TASKS-001 : 恢复 tasks.py 软删除过滤条件
  • configs.py: 恢复路由重构修改(待后端工程师正式提交)
  • 测试状态: 198 passed, 3 failed (仅M2-005表达式引擎)
  • 代码库: 干净无未提交修改

变更说明 (v3.4 - CTO心跳审核 08:20):

  • BUG-TEST-004 已解决: 清理旧 test_db.sqlite测试恢复正常
  • BUG-INDEX-001 已确认: 索引命名已正确区分idx_task_assignee_status / idx_wf_task_assignee_status
  • 测试状态: 198 passed, 3 failed, 0 errors
  • 剩余阻塞: M2-005 表达式引擎语法3个测试失败
  • BUG-TASKS-001: 仍有未提交修改(软删除过滤移除)

变更说明 (v3.3 - CTO心跳审核 08:00):

  • 🔴 发现严重问题 BUG-INDEX-001: 索引名称重复定义
    • app/models/task.py:100: idx_task_assignee_status
    • app/models/workflow_engine.py:200: idx_task_assignee_status
    • 导致测试 173 errors严重退化
  • BUG-TEST-004 更新: 根因已明确索引重复定义非fixture问题
  • BUG-TASKS-001: 仍有未提交修改(软删除过滤移除)
  • 紧急通知: 需工作时间立即修复

变更说明 (v3.1 - CTO心跳审核 04:10):

  • M2-003 : BOM AI分析已完成 (a034be1, 594行代码)
  • M2-004 : Project进度计算已完成 (a034be1, 429行代码)
  • M2-005 : 表达式引擎语法错误,已提供技术方案分析
  • BUG-TEST-004 : 测试数据库索引重复,已提供修复方案
  • 任务分配调整: M2-005 由CTO改为后端工程师CTO不直接写代码
  • 测试统计: 198 passed, 2 failed, 1 error

Phase 2 待执行

模块 目标用例数 状态
documents 9个 待创建
configs 9个 待创建
users 8个 待创建
projects 7个 待创建

变更说明 (v2.7 - CTO审核 17:16):

  • API性能优化里程碑 :
    • 新增统一错误处理 (app/core/errors.py)
    • 新增API日志中间件 (app/core/logging_middleware.py)
    • 新增Redis缓存支持 (app/core/cache.py)
    • 新增性能测试脚本 (scripts/performance_test.py)
  • 性能测试结果: 11个端点平均响应45ms100%成功率
  • TD-004已优化: API性能优化完成
  • Git提交: 0069ea2 feat(api), a336daa docs

变更说明 (v2.6):

  • TD-006 已解决: DDL脚本补充完成 (migrations/001_main_ddl.sql)
  • 14个核心表: users, products, bom_headers, bom_items, workflows, documents等
  • 生产部署: 无阻塞项

变更说明 (v2.5 - CTO审核 15:10):

  • 测试质量里程碑 : BUG-TEST-001已修复55个实际测试
  • test_substitutes.py: TODO占位→实际API调用+响应验证
  • ⚠️ TD-006 DDL严重缺失: 9个models仅1个migration阻塞生产部署
  • 缺失清单: users, products, bom_headers, bom_items, workflows, documents, projects, configs
  • 行动: 督促后端工程师补充主DDL脚本