165 lines
4.2 KiB
Go
165 lines
4.2 KiB
Go
package biz
|
|
|
|
import (
|
|
"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"
|
|
)
|
|
|
|
type AdviceSkillBiz struct {
|
|
AdvicerTalkSkillMongo *mongo_model.AdvicerTalkSkillMongo
|
|
mongo *pkg.Mongo
|
|
}
|
|
|
|
func NewAdviceSkillBiz(
|
|
advicerTalkSkillMongo *mongo_model.AdvicerTalkSkillMongo,
|
|
mongo *pkg.Mongo,
|
|
) *AdviceSkillBiz {
|
|
return &AdviceSkillBiz{
|
|
AdvicerTalkSkillMongo: advicerTalkSkillMongo,
|
|
mongo: mongo,
|
|
}
|
|
}
|
|
|
|
func (a *AdviceSkillBiz) VersionAdd(ctx context.Context, param *entitys.AdvicerTalkSkillAddReq) (err error) {
|
|
|
|
_, err = a.mongo.Co(a.AdvicerTalkSkillMongo).InsertOne(ctx, &mongo_model.AdvicerTalkSkillMongo{
|
|
ProjectId: param.ProjectId,
|
|
AdvicerId: param.AdvicerId,
|
|
Desc: param.Desc,
|
|
NeedsMining: param.NeedsMining,
|
|
PainPointResponse: param.PainPointResponse,
|
|
ValueBuilding: param.ValueBuilding,
|
|
ClosingTechniques: param.ClosingTechniques,
|
|
CommunicationRhythm: param.CommunicationRhythm,
|
|
LastUpdateTime: time.Now(),
|
|
})
|
|
|
|
return err
|
|
}
|
|
|
|
func (a *AdviceSkillBiz) VersionUpdate(ctx context.Context, param *entitys.AdvicerTalkSkillUpdateReq) (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.AdvicerTalkSkillMongo{
|
|
AdvicerId: param.AdvicerId,
|
|
ProjectId: param.ProjectId,
|
|
Desc: param.Desc,
|
|
NeedsMining: param.NeedsMining,
|
|
PainPointResponse: param.PainPointResponse,
|
|
ValueBuilding: param.ValueBuilding,
|
|
ClosingTechniques: param.ClosingTechniques,
|
|
CommunicationRhythm: param.CommunicationRhythm,
|
|
LastUpdateTime: time.Now(),
|
|
},
|
|
}
|
|
res := a.mongo.Co(a.AdvicerTalkSkillMongo).FindOneAndUpdate(ctx, filter, update)
|
|
return res.Err()
|
|
}
|
|
|
|
func (a *AdviceSkillBiz) VersionList(ctx context.Context, param *entitys.AdvicerTalkSkillListReq) (list []mongo_model.AdvicerTalkSkillMongo, err error) {
|
|
filter := bson.M{}
|
|
// 1. advicer_id 条件
|
|
if param.AdvicerId != 0 {
|
|
filter["AdvicerId"] = param.AdvicerId
|
|
}
|
|
|
|
if param.ProjectId != 0 {
|
|
filter["projectId"] = param.ProjectId
|
|
}
|
|
|
|
// 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.Desc) != 0 {
|
|
// 正确的方式:指定字段名
|
|
filter["desc"] = bson.M{
|
|
"$regex": primitive.Regex{
|
|
Pattern: param.Desc,
|
|
Options: "i",
|
|
},
|
|
}
|
|
}
|
|
|
|
cursor, err := a.mongo.Co(a.AdvicerTalkSkillMongo).Find(ctx, filter)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 遍历结果
|
|
for cursor.Next(ctx) {
|
|
var advicerVersion mongo_model.AdvicerTalkSkillMongo
|
|
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 *AdviceSkillBiz) VersionDel(ctx context.Context, param *entitys.AdvicerTalkSkillDelReq) (err error) {
|
|
filter := bson.M{}
|
|
|
|
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.AdvicerTalkSkillMongo).DeleteOne(ctx, filter)
|
|
|
|
return err
|
|
}
|
|
|
|
func (a *AdviceSkillBiz) Info(ctx context.Context, param *entitys.AdvicerTalkSkillInfoReq) (info mongo_model.AdvicerTalkSkillMongo, 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.AdvicerTalkSkillMongo).FindOne(ctx, filter)
|
|
if res.Err() != nil {
|
|
return info, err
|
|
}
|
|
// 遍历结果
|
|
|
|
if err = res.Decode(&info); err != nil {
|
|
return info, err
|
|
}
|
|
|
|
return info, nil
|
|
|
|
}
|