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

118 lines
2.9 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"
)
var CaseService = &caseService{}
type caseService struct{}
func (s *caseService) Save(ctx context.Context, req *dto.SaveCaseReq) (int64, error) {
m := &entity.Case{
Id: req.Id,
Title: req.Title,
CaseNumber: req.CaseNumber,
CaseType: req.CaseType,
Court: req.Court,
Parties: req.Parties,
Description: req.Description,
DatasetIds: req.DatasetIds,
Status: req.Status,
}
if m.Status == 0 {
m.Status = 0 // 待处理
}
if req.Id == 0 {
// 新增
return dao.Case.Insert(ctx, m)
}
// 更新
data := g.Map{
"title": m.Title,
"case_number": m.CaseNumber,
"case_type": m.CaseType,
"court": m.Court,
"parties": m.Parties,
"description": m.Description,
"dataset_ids": m.DatasetIds,
"status": m.Status,
}
if err := dao.Case.Update(ctx, req.Id, data); err != nil {
return 0, err
}
return req.Id, nil
}
func (s *caseService) List(ctx context.Context, page, pageSize int) ([]*entity.Case, int, error) {
return dao.Case.List(ctx, page, pageSize)
}
func (s *caseService) Detail(ctx context.Context, id int64) (*entity.Case, []*entity.Evidence, []*entity.ContractTask, error) {
c, err := dao.Case.GetOne(ctx, id)
if err != nil {
return nil, nil, nil, err
}
if c == nil {
return nil, nil, nil, gerror.New("案例不存在")
}
evidences, err := dao.Evidence.ListByCaseId(ctx, id)
if err != nil {
return c, nil, nil, err
}
contracts, err := dao.ContractTask.ListByCaseId(ctx, id)
if err != nil {
return c, evidences, nil, err
}
return c, evidences, contracts, nil
}
func (s *caseService) Delete(ctx context.Context, id int64) error {
// 清除关联记录(不删除证物本身)
if err := dao.CaseEvidence.DeleteByCaseId(ctx, id); err != nil {
return err
}
// 清除证物的 case_id 关联
evidences, _ := dao.Evidence.ListByCaseId(ctx, id)
for _, ev := range evidences {
_ = dao.Evidence.Update(ctx, ev.Id, g.Map{"case_id": 0})
}
return dao.Case.Delete(ctx, id)
}
func (s *caseService) LinkEvidence(ctx context.Context, caseId int64, evidenceIds []int64) error {
c, err := dao.Case.GetOne(ctx, caseId)
if err != nil {
return err
}
if c == nil {
return gerror.New("案例不存在")
}
// 建立关联
if err := dao.CaseEvidence.InsertAll(ctx, caseId, evidenceIds); err != nil {
return err
}
// 更新证物的 case_id
for _, eid := range evidenceIds {
_ = dao.Evidence.Update(ctx, eid, g.Map{"case_id": caseId})
}
return nil
}
func (s *caseService) UnlinkEvidence(ctx context.Context, caseId, evidenceId int64) error {
if err := dao.CaseEvidence.DeleteByCaseAndEvidence(ctx, caseId, evidenceId); err != nil {
return err
}
_ = dao.Evidence.Update(ctx, evidenceId, g.Map{"case_id": 0})
return nil
}