118 lines
2.9 KiB
Go
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
|
|
}
|