feat: 新增文档源和技能管理相关功能

1. 新增文档源管理模块(documentSource)
   - 控制器:documentSourceController.py
   - DAO层:documentSourceDao.py
   - 模型:documentSourceModel.py
   - 服务层:documentSourceService.py

2. 新增技能管理模块(skill)
   - 控制器:skillController.py
   - DAO层:skillDao.py
   - 模型:skillModel.py
   - 服务层:skillService.py

3. 新增AI服务(aiService.py)

4. 新增配置文件
   - AI配置:config/ai_config.py
   - 技能配置:config/skills/test-case-generator/

5. 新增SQL脚本
   - 文档权限:add_document_permissions.sql
   - 模块状态字段:add_module_status_field.sql
   - 文档源表:create_document_source_table.sql
   - 技能规则:skills_rules_pgsql.sql
This commit is contained in:
qiaoxinjiu
2026-05-18 10:23:07 +08:00
parent 65524de6fc
commit 420b9e37fa
38 changed files with 9613 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
from sqlalchemy import BigInteger, Column, Integer, SmallInteger, String, TIMESTAMP, Text, text
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.ext.declarative import declarative_base
from common.sqlSession import to_dict
Base = declarative_base()
Base.to_dict = to_dict
class TestSkill(Base):
__tablename__ = 'test_skill'
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
project_id = Column(BigInteger, nullable=False, comment='项目id')
module_id = Column(BigInteger, comment='模块id空表示项目级通用')
name = Column(String(128), nullable=False, comment='Skill名称')
code = Column(String(64), nullable=False, comment='Skill编码项目内唯一')
description = Column(Text, comment='Skill描述')
trigger_condition = Column(Text, nullable=False, comment='触发条件')
reasoning_path = Column(Text, comment='推理路径')
output_spec = Column(Text, comment='输出规范')
skill_file_path = Column(String(512), comment='Skill文件路径指向config/skills下生成的SKILL.md')
skill_type = Column(SmallInteger, nullable=False, default=1, comment='类型1通用测试策略 2历史缺陷模式 3边界场景 4接口测试 5UI测试 6性能测试 7安全测试 8数据一致性 9并发幂等 99其他')
risk_level = Column(SmallInteger, nullable=False, default=2, comment='风险等级0高 1中高 2中 3低')
tags = Column(JSONB, nullable=False, server_default=text("'[]'::jsonb"), comment='标签数组')
status = Column(SmallInteger, nullable=False, default=1, comment='状态1启用 2停用 3草稿')
owner_id = Column(BigInteger, comment='负责人用户id')
created_by = Column(BigInteger, comment='创建人用户id')
usage_count = Column(Integer, nullable=False, default=0, comment='使用次数')
is_delete = Column(Integer, nullable=False, default=0, comment='0未删除 1已删除')
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')
updated_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), server_onupdate=text('CURRENT_TIMESTAMP'), nullable=True, comment='修改时间')
class TestBusinessRule(Base):
__tablename__ = 'test_business_rule'
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
project_id = Column(BigInteger, nullable=False, comment='项目id')
module_id = Column(BigInteger, comment='模块id空表示项目级通用')
name = Column(String(128), nullable=False, comment='业务规则名称')
rule_code = Column(String(64), comment='业务规则编码,项目内唯一')
rule_content = Column(Text, nullable=False, comment='业务规则内容')
applicable_scene = Column(Text, comment='适用场景')
example = Column(Text, comment='示例')
rule_file_path = Column(String(512), comment='业务规则文件路径指向config/rules下生成的RULE.md')
priority = Column(SmallInteger, nullable=False, default=2, comment='优先级0高 1中高 2中 3低')
tags = Column(JSONB, nullable=False, server_default=text("'[]'::jsonb"), comment='标签数组')
status = Column(SmallInteger, nullable=False, default=1, comment='状态1启用 2停用 3草稿')
owner_id = Column(BigInteger, comment='负责人用户id')
created_by = Column(BigInteger, comment='创建人用户id')
usage_count = Column(Integer, nullable=False, default=0, comment='使用次数')
is_delete = Column(Integer, nullable=False, default=0, comment='0未删除 1已删除')
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')
updated_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), server_onupdate=text('CURRENT_TIMESTAMP'), nullable=True, comment='修改时间')
class TestAiGenerationContext(Base):
__tablename__ = 'test_ai_generation_context'
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
generation_id = Column(BigInteger, comment='AI生成任务id兼容现有生成任务')
project_id = Column(BigInteger, nullable=False, comment='项目id')
module_id = Column(BigInteger, comment='模块id')
source_type = Column(SmallInteger, nullable=False, comment='来源类型1 Skill 2业务规则')
source_id = Column(BigInteger, nullable=False, comment='来源id')
source_name = Column(String(128), comment='来源名称快照')
match_score = Column(Integer, nullable=False, default=0, comment='匹配分数')
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')