102 lines
2.5 KiB
Go
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
|
|
}
|