209 lines
5.6 KiB
Go
209 lines
5.6 KiB
Go
package biz
|
|
|
|
import (
|
|
"ai_scheduler/internal/data/impl"
|
|
"ai_scheduler/internal/data/model"
|
|
"ai_scheduler/internal/data/mongo_model"
|
|
"ai_scheduler/internal/entitys"
|
|
"ai_scheduler/internal/pkg"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"context"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"xorm.io/builder"
|
|
)
|
|
|
|
type AdviceAdvicerBiz struct {
|
|
advicerImpl *impl.AdviceAdvicerImpl
|
|
advicerVersionMongo *mongo_model.AdvicerVersionMongo
|
|
mongo *pkg.Mongo
|
|
}
|
|
|
|
func NewAdviceAdvicerBiz(
|
|
advicerImpl *impl.AdviceAdvicerImpl,
|
|
advicerVersionMongo *mongo_model.AdvicerVersionMongo,
|
|
mongo *pkg.Mongo,
|
|
) *AdviceAdvicerBiz {
|
|
return &AdviceAdvicerBiz{
|
|
advicerImpl: advicerImpl,
|
|
advicerVersionMongo: advicerVersionMongo,
|
|
mongo: mongo,
|
|
}
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) Update(ctx context.Context, data *entitys.AdvicerInitReq) error {
|
|
birth, err := time.Parse("2006-01-02", data.Birth)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
param := &model.AiAdviceAdvicer{
|
|
AdvicerID: data.AdvicerID,
|
|
ProjectID: data.ProjectID,
|
|
Name: data.Name,
|
|
Birth: birth,
|
|
Gender: data.Gender,
|
|
WorkingYears: data.WorkingYears,
|
|
}
|
|
if param.AdvicerID == 0 {
|
|
_, err = a.advicerImpl.Add(param)
|
|
} else {
|
|
cond := builder.NewCond()
|
|
cond = cond.And(builder.Eq{"advicer_id": param.AdvicerID})
|
|
err = a.advicerImpl.UpdateByCond(&cond, param)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) List(ctx context.Context, data *entitys.AdvicerListReq) ([]map[string]interface{}, error) {
|
|
|
|
cond := builder.NewCond()
|
|
cond = cond.And(builder.Eq{"project_id": data.ProjectId})
|
|
list, err := a.advicerImpl.GetRange(&cond)
|
|
return list, err
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) VersionAdd(ctx context.Context, param *entitys.AdvicerVersionAddReq) (err error) {
|
|
cond := builder.NewCond()
|
|
cond = cond.And(builder.Eq{"advicer_id": param.AdvicerID})
|
|
_, err = a.advicerImpl.GetOneBySearch(&cond)
|
|
if err != nil {
|
|
return errors.New("顾问不存在")
|
|
}
|
|
_, err = a.mongo.Co(a.advicerVersionMongo).InsertOne(ctx, &mongo_model.AdvicerVersionMongo{
|
|
AdvicerId: param.AdvicerID,
|
|
VersionDesc: param.VersionDesc,
|
|
DialectFeatures: param.DialectFeatures,
|
|
SentencePatterns: param.SentencePatterns,
|
|
ToneTags: param.ToneTags,
|
|
PersonalityTags: param.PersonalityTags,
|
|
SignatureDialogues: param.SignatureDialogues,
|
|
LastUpdateTime: time.Now(),
|
|
})
|
|
|
|
return err
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) VersionUpdate(ctx context.Context, param *entitys.AdvicerVersionUpdateReq) (err error) {
|
|
filter := bson.M{}
|
|
if len(param.Id) == 0 {
|
|
return errors.New("ID不能为空")
|
|
}
|
|
objectID, err := primitive.ObjectIDFromHex(param.Id)
|
|
if err != nil {
|
|
return fmt.Errorf("ID转换失败: %w", err)
|
|
}
|
|
filter["_id"] = objectID
|
|
update := bson.M{
|
|
"$set": &mongo_model.AdvicerVersionMongo{
|
|
AdvicerId: param.AdvicerID,
|
|
VersionDesc: param.VersionDesc,
|
|
DialectFeatures: param.DialectFeatures,
|
|
SentencePatterns: param.SentencePatterns,
|
|
ToneTags: param.ToneTags,
|
|
PersonalityTags: param.PersonalityTags,
|
|
SignatureDialogues: param.SignatureDialogues,
|
|
LastUpdateTime: time.Now(),
|
|
},
|
|
}
|
|
res := a.mongo.Co(a.advicerVersionMongo).FindOneAndUpdate(ctx, filter, update)
|
|
|
|
return res.Err()
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) VersionList(ctx context.Context, param *entitys.AdvicerVersionListReq) (list []mongo_model.AdvicerVersionMongo, err error) {
|
|
filter := bson.M{}
|
|
// 1. advicer_id 条件
|
|
if param.AdvicerId != 0 {
|
|
filter["AdvicerId"] = param.AdvicerId
|
|
}
|
|
|
|
// 2. _id 条件
|
|
if len(param.Id) != 0 {
|
|
objectID, err := primitive.ObjectIDFromHex(param.Id)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("ID转换失败: %w", err)
|
|
}
|
|
filter["_id"] = objectID
|
|
}
|
|
|
|
// 3. version_desc 模糊查询
|
|
if len(param.VersionDesc) != 0 {
|
|
// 正确的方式:指定字段名
|
|
filter["VersionDesc"] = bson.M{
|
|
"$regex": primitive.Regex{
|
|
Pattern: param.VersionDesc,
|
|
Options: "i",
|
|
},
|
|
}
|
|
}
|
|
|
|
cursor, err := a.mongo.Co(a.advicerVersionMongo).Find(ctx, filter)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 遍历结果
|
|
for cursor.Next(ctx) {
|
|
var advicerVersion mongo_model.AdvicerVersionMongo
|
|
if err := cursor.Decode(&advicerVersion); err != nil {
|
|
return nil, err
|
|
}
|
|
list = append(list, advicerVersion)
|
|
}
|
|
|
|
if err := cursor.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return list, err
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) VersionDel(ctx context.Context, param *entitys.AdvicerVersionDelReq) (err error) {
|
|
filter := bson.M{}
|
|
// 1. advicer_id 条件
|
|
|
|
if len(param.Id) != 0 {
|
|
objectID, err := primitive.ObjectIDFromHex(param.Id)
|
|
if err != nil {
|
|
return fmt.Errorf("ID转换失败: %w", err)
|
|
}
|
|
filter["_id"] = objectID
|
|
}
|
|
|
|
_, err = a.mongo.Co(a.advicerVersionMongo).DeleteOne(ctx, filter)
|
|
|
|
return err
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) VersionInfo(ctx context.Context, param *entitys.AdvicerVersionInfoReq) (info mongo_model.AdvicerVersionMongo, err error) {
|
|
filter := bson.M{}
|
|
if len(param.Id) != 0 {
|
|
objectID, err := primitive.ObjectIDFromHex(param.Id)
|
|
if err != nil {
|
|
return info, fmt.Errorf("ID转换失败: %w", err)
|
|
|
|
}
|
|
filter["_id"] = objectID
|
|
}
|
|
|
|
res := a.mongo.Co(a.advicerVersionMongo).FindOne(ctx, filter)
|
|
if res.Err() != nil {
|
|
return info, res.Err()
|
|
}
|
|
|
|
if err := res.Decode(&info); err != nil {
|
|
return info, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
func (a *AdviceAdvicerBiz) AdvicerInfo(ctx context.Context, param *entitys.AdvicerInfoReq) (info model.AiAdviceAdvicer, err error) {
|
|
cond := builder.NewCond()
|
|
cond = cond.And(builder.Eq{"advicer_id": param.AdvicerID})
|
|
|
|
err = a.advicerImpl.GetOneBySearchToStrut(&cond, &info)
|
|
return
|
|
}
|