Files
rag-local/kb/dao/contract_risk_dao.go
T
2026-08-11 11:19:04 +08:00

96 lines
3.0 KiB
Go

package dao
import (
"context"
"rag-local/kb/consts"
"rag-local/kb/model/entity"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
var ContractRisk = &contractRiskDao{}
type contractRiskDao struct{}
func init() {
ctx := context.Background()
_, err := g.DB(consts.DbGroupDefault).Exec(ctx, `CREATE TABLE IF NOT EXISTS `+consts.TableNameContractRisk+` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id INTEGER NOT NULL DEFAULT 0,
clause_id INTEGER NOT NULL DEFAULT 0,
level TEXT NOT NULL DEFAULT 'mid',
desc TEXT NOT NULL DEFAULT '',
laws TEXT NOT NULL DEFAULT '',
created_at DATETIME DEFAULT (datetime('now','localtime'))
)`)
if err != nil {
g.Log().Warningf(ctx, "create kb_contract_risk table failed: %v", err)
}
if _, err := g.DB(consts.DbGroupDefault).Exec(ctx, "CREATE INDEX IF NOT EXISTS idx_kb_contract_risk_clause ON "+consts.TableNameContractRisk+"(clause_id)"); err != nil {
g.Log().Warningf(ctx, "create index idx_kb_contract_risk_clause failed: %v", err)
}
if _, err := g.DB(consts.DbGroupDefault).Exec(ctx, "CREATE INDEX IF NOT EXISTS idx_kb_contract_risk_task ON "+consts.TableNameContractRisk+"(task_id)"); err != nil {
g.Log().Warningf(ctx, "create index idx_kb_contract_risk_task failed: %v", err)
}
}
func (d *contractRiskDao) InsertAll(ctx context.Context, risks []*entity.ContractRisk) error {
if len(risks) == 0 {
return nil
}
now := gtime.Now().Format("Y-m-d H:i:s")
list := make(g.List, 0, len(risks))
for _, r := range risks {
list = append(list, g.Map{
"task_id": r.TaskId,
"clause_id": r.ClauseId,
"level": r.Level,
"desc": r.Desc,
"laws": r.Laws,
"created_at": now,
})
}
tx, err := g.DB(consts.DbGroupDefault).Begin(ctx)
if err != nil {
return err
}
// Commit 成功后 IsClosed 为 true,跳过 Rollback,避免对已提交事务回滚产生报错日志
defer func() {
if !tx.IsClosed() {
_ = tx.Rollback()
}
}()
if _, err := tx.Model(consts.TableNameContractRisk).Ctx(ctx).Data(list).Batch(100).Insert(); err != nil {
return err
}
return tx.Commit()
}
func (d *contractRiskDao) ListByClause(ctx context.Context, clauseId int64) ([]*entity.ContractRisk, error) {
var list []*entity.ContractRisk
err := g.DB(consts.DbGroupDefault).Model(consts.TableNameContractRisk).Ctx(ctx).
Where("clause_id", clauseId).OrderAsc("id").Scan(&list)
if list == nil {
list = make([]*entity.ContractRisk, 0)
}
return list, err
}
func (d *contractRiskDao) ListByTask(ctx context.Context, taskId int64) ([]*entity.ContractRisk, error) {
var list []*entity.ContractRisk
err := g.DB(consts.DbGroupDefault).Model(consts.TableNameContractRisk).Ctx(ctx).
Where("task_id", taskId).OrderAsc("id").Scan(&list)
if list == nil {
list = make([]*entity.ContractRisk, 0)
}
return list, err
}
func (d *contractRiskDao) DeleteByClause(ctx context.Context, clauseId int64) error {
_, err := g.DB(consts.DbGroupDefault).Model(consts.TableNameContractRisk).Ctx(ctx).
Where("clause_id", clauseId).Delete()
return err
}