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,75 @@
# encoding: UTF-8
from sqlalchemy import func
from ..model.documentSourceModel import DocumentSource
class DocumentSourceDao:
@staticmethod
def create(session, document_source):
session.add(document_source)
session.flush()
return document_source.id
@staticmethod
def get_by_id(session, document_id):
return session.query(DocumentSource).filter(
DocumentSource.id == document_id,
DocumentSource.is_delete == 0
).first()
@staticmethod
def get_by_source(session, source):
return session.query(DocumentSource).filter(
DocumentSource.source == source,
DocumentSource.is_delete == 0
).first()
@staticmethod
def list_by_filters(session, filters, page_no=1, page_size=20, order_by=None):
query = session.query(DocumentSource).filter(*filters)
if order_by is not None:
query = query.order_by(order_by)
total = query.count()
items = query.offset((page_no - 1) * page_size).limit(page_size).all()
return items, total
@staticmethod
def update_by_id(session, document_id, update_info):
result = session.query(DocumentSource).filter(
DocumentSource.id == document_id,
DocumentSource.is_delete == 0
).update(update_info)
session.flush()
return result
@staticmethod
def delete_by_id(session, document_id):
return session.query(DocumentSource).filter(
DocumentSource.id == document_id,
DocumentSource.is_delete == 0
).update({'is_delete': 1})
@staticmethod
def get_latest_version(session, product_id, project_id, source):
return session.query(DocumentSource).filter(
DocumentSource.product_id == product_id,
DocumentSource.project_id == project_id,
DocumentSource.source == source,
DocumentSource.is_delete == 0
).order_by(DocumentSource.version.desc()).first()
@staticmethod
def get_max_version(session, product_id, project_id, source):
result = session.query(func.max(DocumentSource.version)).filter(
DocumentSource.product_id == product_id,
DocumentSource.project_id == project_id,
DocumentSource.source == source,
DocumentSource.is_delete == 0
).scalar()
return result if result else 0