Files
rag-local/kb/service/reference_case_service.go
T
2026-08-20 12:05:53 +08:00

102 lines
2.5 KiB
Go

package service
import (
"context"
"rag-local/kb/dao"
"rag-local/kb/model/dto"
"rag-local/kb/model/entity"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
var ReferenceCaseService = &referenceCaseService{}
type referenceCaseService struct{}
func (s *referenceCaseService) Save(ctx context.Context, req *dto.SaveReferenceCaseReq) (int64, error) {
if req.Id == 0 {
// 新建:自动创建关联数据集
dsId, err := dao.Dataset.Insert(ctx, &entity.Dataset{
Name: req.Title,
Description: "参考案例库 - " + req.Title,
Status: 1,
})
if err != nil {
return 0, err
}
rc := &entity.ReferenceCase{
Title: req.Title,
CaseNumber: req.CaseNumber,
CaseType: req.CaseType,
Court: req.Court,
Parties: req.Parties,
Description: req.Description,
DatasetId: dsId,
Status: 0,
}
return dao.ReferenceCase.Insert(ctx, rc)
}
// 更新
data := g.Map{
"title": req.Title,
"case_number": req.CaseNumber,
"case_type": req.CaseType,
"court": req.Court,
"parties": req.Parties,
"description": req.Description,
}
if err := dao.ReferenceCase.Update(ctx, req.Id, data); err != nil {
return 0, err
}
return req.Id, nil
}
func (s *referenceCaseService) List(ctx context.Context, page, pageSize int) ([]*entity.ReferenceCase, int, error) {
return dao.ReferenceCase.List(ctx, page, pageSize)
}
func (s *referenceCaseService) Detail(ctx context.Context, id int64) (*entity.ReferenceCase, []*entity.Document, error) {
rc, err := dao.ReferenceCase.GetOne(ctx, id)
if err != nil {
return nil, nil, err
}
if rc == nil {
return nil, nil, gerror.New("参考案例不存在")
}
docs, _, err := DocumentService.List(ctx, rc.DatasetId, 1, 1000)
if err != nil {
return rc, nil, err
}
return rc, docs, nil
}
func (s *referenceCaseService) Delete(ctx context.Context, id int64) error {
rc, err := dao.ReferenceCase.GetOne(ctx, id)
if err != nil {
return err
}
if rc == nil {
return gerror.New("参考案例不存在")
}
// 删除关联数据集及其文档
if rc.DatasetId > 0 {
_ = DatasetService.Delete(ctx, rc.DatasetId)
}
return dao.ReferenceCase.Delete(ctx, id)
}
func (s *referenceCaseService) UploadDocument(ctx context.Context, id int64, file *ghttp.UploadFile) error {
rc, err := dao.ReferenceCase.GetOne(ctx, id)
if err != nil {
return err
}
if rc == nil {
return gerror.New("参考案例不存在")
}
_, err = DocumentService.Upload(ctx, rc.DatasetId, file)
return err
}