154 lines
8.9 KiB
Go
154 lines
8.9 KiB
Go
package advice
|
||
|
||
import (
|
||
"ai_scheduler/internal/biz"
|
||
"ai_scheduler/internal/biz/llm_service/third_party"
|
||
"ai_scheduler/internal/config"
|
||
"ai_scheduler/internal/data/impl"
|
||
"ai_scheduler/internal/data/mongo_model"
|
||
"ai_scheduler/internal/pkg"
|
||
"ai_scheduler/utils"
|
||
"context"
|
||
|
||
"encoding/json"
|
||
|
||
"os"
|
||
"testing"
|
||
|
||
"github.com/gofiber/fiber/v2"
|
||
"github.com/valyala/fasthttp"
|
||
)
|
||
|
||
func Test_WordAna(t *testing.T) {
|
||
Run(context.Background(), nil)
|
||
ana, err := file.WordAnat("https://attachment-public.oss-cn-hangzhou.aliyuncs.com/ai-scheduler/data-analytics/word/content2.docx")
|
||
t.Log(ana, err)
|
||
}
|
||
|
||
func Test_AdvicerInit(t *testing.T) {
|
||
reqBody := `{"advicer_id": 124, "name": "张三111", "birth": "1990-01-01", "gender": 1, "working_years": 10}`
|
||
Run(context.Background(), []byte(reqBody))
|
||
|
||
err := advicer.AdvicerUpdate(fiberCtx)
|
||
t.Log(err)
|
||
}
|
||
|
||
func Test_AdvicerVersionAdd(t *testing.T) {
|
||
reqBody := `{"advicerId":124,"versionDesc":"第三个版本","dialectFeatures":{"region":"四川成都话","intensity":0.6,"KeyWords":null},"personalityTags":["耐心细致","专业务实","经验丰富","善于引导"],"sentencePatterns":{"openingMode":["我给你介绍一下","我们先来看一下","这边请"],"explanationMode":["是这样的","我跟你讲","你发现没得","说白了"],"confirmationMode":["对吧?","是不是嘛?","你晓得不?","明白了噻?","对不对?"],"summaryMode":["所以说","简单说就是","其实"],"transitionMode":["然后的话","再其次","还有一点","另外"]},"signatureDialogues":[{"context":"客户质疑地块大小","dialogue":"哥,14亩确实不大,但你要在成都2.5环内城买房,这种是普遍现象。你看万景和绿城都是13亩,中铁建只有8.8亩,339那个帮泰只有11亩。我们虽然地小,但楼间距开阔啊,看过去都是200多米!而且小小区人少安静,圈层更纯粹!"},{"context":"客户担心物业费高","dialogue":"姐,我懂你意思,我们也觉得物业费是有点贵。但招商物业是铂金服务,有夜间送外卖、免费宠物喂养、年度保洁这些增值服务。而且前三年开发商补贴一块钱,只需要交5块,跟其他盘差不多!好物业能让房子后期保值增值更多!"},{"context":"客户犹豫价格","dialogue":"说实话,这个地段的地价都比二八板块贵5000多,但我们单价只贵3000。你看龙湖滨江云河颂套内单价都36000了,我们才33000,真的性价比高!现在不买,以后这个板块可能就买不起了。"},{"context":"客户担心小区小不保值","dialogue":"哥,你不用担心小地块不保值,东大街的九龙仓擎天半岛只有两栋楼,现在二手房还能卖3万左右,是当年的豪宅项目。还有望江名门、仁和春天29号院,都是小地块但照样是高端保值盘。核心还是地段,我们在槐树店这个成华区最贵的板块,保值根本没问题!"}],"toneTags":{"enthusiasm":0.8,"patience":0.9,"confidence":0.85,"friendliness":0.8,"persuasion":0.75}}`
|
||
Run(context.Background(), []byte(reqBody))
|
||
err := advicer.AdvicerVersionAdd(fiberCtx)
|
||
t.Log(err)
|
||
}
|
||
|
||
func Test_AdvicerVersionUpdate(t *testing.T) {
|
||
reqBody := `{"id":"69804b5a6532131383aeda3a","advicerId":124,"versionDesc":"第三个版本","dialectFeatures":{"region":"四川成都话","intensity":0.6,"KeyWords":null},"personalityTags":["耐心细致","专业务实","经验丰富","善于引导"],"sentencePatterns":{"openingMode":["我给你介绍一下","我们先来看一下","这边请"],"explanationMode":["是这样的","我跟你讲","你发现没得","说白了"],"confirmationMode":["对吧?","是不是嘛?","你晓得不?","明白了噻?","对不对?"],"summaryMode":["所以说","简单说就是","其实"],"transitionMode":["然后的话","再其次","还有一点","另外"]},"signatureDialogues":[{"context":"客户质疑地块大小","dialogue":"哥,14亩确实不大,但你要在成都2.5环内城买房,这种是普遍现象。你看万景和绿城都是13亩,中铁建只有8.8亩,339那个帮泰只有11亩。我们虽然地小,但楼间距开阔啊,看过去都是200多米!而且小小区人少安静,圈层更纯粹!"},{"context":"客户担心物业费高","dialogue":"姐,我懂你意思,我们也觉得物业费是有点贵。但招商物业是铂金服务,有夜间送外卖、免费宠物喂养、年度保洁这些增值服务。而且前三年开发商补贴一块钱,只需要交5块,跟其他盘差不多!好物业能让房子后期保值增值更多!"},{"context":"客户犹豫价格","dialogue":"说实话,这个地段的地价都比二八板块贵5000多,但我们单价只贵3000。你看龙湖滨江云河颂套内单价都36000了,我们才33000,真的性价比高!现在不买,以后这个板块可能就买不起了。"},{"context":"客户担心小区小不保值","dialogue":"哥,你不用担心小地块不保值,东大街的九龙仓擎天半岛只有两栋楼,现在二手房还能卖3万左右,是当年的豪宅项目。还有望江名门、仁和春天29号院,都是小地块但照样是高端保值盘。核心还是地段,我们在槐树店这个成华区最贵的板块,保值根本没问题!"}],"toneTags":{"enthusiasm":0.8,"patience":0.9,"confidence":0.85,"friendliness":0.8,"persuasion":0.75}}`
|
||
Run(context.Background(), []byte(reqBody))
|
||
err := advicer.AdvicerVersionUpdate(fiberCtx)
|
||
t.Log(err)
|
||
}
|
||
|
||
func Test_VersionList(t *testing.T) {
|
||
reqBody := `{"id":"69804060c17976e5e21858a8"}`
|
||
Run(context.Background(), []byte(reqBody))
|
||
err := advicer.AdvicerVersionList(fiberCtx)
|
||
t.Log(err)
|
||
}
|
||
|
||
func Test_AdvicerVersionDel(t *testing.T) {
|
||
reqBody := `{"id":"698056073059550befc4f0da"}`
|
||
Run(context.Background(), []byte(reqBody))
|
||
err := advicer.AdvicerVersionDel(fiberCtx)
|
||
t.Log(err)
|
||
}
|
||
|
||
func Test_Json(t *testing.T) {
|
||
responseByte, err := os.ReadFile("./res.json")
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
var (
|
||
result map[string]interface{}
|
||
res = make(map[string]mongo_model.AdviceData)
|
||
)
|
||
|
||
if err = json.Unmarshal(responseByte, &result); err != nil {
|
||
panic(err)
|
||
}
|
||
for k, v := range result {
|
||
if _, ok := dataMap[k]; !ok {
|
||
continue
|
||
}
|
||
var vbyte []byte
|
||
if vbyte, err = json.Marshal(v); err != nil {
|
||
panic(err)
|
||
}
|
||
newData := dataMap[k].Copy()
|
||
|
||
if err = json.Unmarshal(vbyte, newData); err != nil {
|
||
panic(err)
|
||
}
|
||
res[k] = newData
|
||
}
|
||
t.Log(result)
|
||
}
|
||
|
||
var (
|
||
file *FileService
|
||
advicer *AdvicerService
|
||
configConfig *config.Config
|
||
fiberCtx *fiber.Ctx
|
||
)
|
||
|
||
// run 函数是程序的入口函数,负责初始化和配置各个组件
|
||
func Run(ctx context.Context, reqBody []byte) {
|
||
if reqBody != nil {
|
||
app := fiber.New()
|
||
fctx := &fasthttp.RequestCtx{}
|
||
fctx.Request.Header.SetMethod("POST")
|
||
fctx.Request.SetBody(reqBody)
|
||
fctx.Request.Header.SetContentType("application/json")
|
||
fiberCtx = app.AcquireCtx(fctx)
|
||
}
|
||
configConfig, _ = config.LoadConfigWithEnv()
|
||
// 初始化数据库连接
|
||
db, _ := utils.NewGormDb(configConfig)
|
||
rdb := utils.NewRdb(configConfig)
|
||
advicerImpl := impl.NewAdviceAdvicerImpl(db)
|
||
advicerVersionMongo := mongo_model.NewAdvicerVersionMongo()
|
||
advicerTalkSkillMongo := mongo_model.NewAdvicerTalkSkillMongo()
|
||
advicerClientMongo := mongo_model.NewAdvicerClientMongo()
|
||
advicerProjectMongo := mongo_model.NewAdvicerProjectMongo()
|
||
hsyq := third_party.NewHsyq()
|
||
advicerfilebiz := biz.NewAdviceFileBiz(hsyq)
|
||
mongo, _ := pkg.NewMongoDb(ctx, configConfig)
|
||
adviceAdvicerBiz := biz.NewAdviceAdvicerBiz(advicerImpl, advicerVersionMongo, mongo)
|
||
skillBiz := biz.NewAdviceSkillBiz(advicerTalkSkillMongo, mongo)
|
||
clientBiz := biz.NewAdviceClientBiz(advicerClientMongo, mongo)
|
||
projectBiz := biz.NewAdviceProjectBiz(advicerProjectMongo, mongo)
|
||
chatBiz := biz.NewAdviceChatBiz(hsyq, rdb)
|
||
file = NewFileService(advicerfilebiz, configConfig)
|
||
advicer = NewAdvicerService(adviceAdvicerBiz, configConfig)
|
||
skill = NewTalkSkillService(skillBiz, configConfig)
|
||
client = NewClientService(clientBiz, configConfig)
|
||
project = NewProjectService(projectBiz, configConfig)
|
||
chat = NewChatService(chatBiz, clientBiz, adviceAdvicerBiz, projectBiz, skillBiz, configConfig)
|
||
}
|
||
|
||
var dataMap = map[string]mongo_model.AdviceData{
|
||
"DialectFeatures": &mongo_model.DialectFeatures{},
|
||
"SentencePatterns": &mongo_model.SentencePatterns{},
|
||
"PersonalityTags": &mongo_model.PersonalityTags{},
|
||
"ToneTags": &mongo_model.ToneTags{},
|
||
"SignatureDialogues": &mongo_model.SignatureDialogues{},
|
||
"RegionValue": &mongo_model.RegionValue{},
|
||
"CompetitionComparison": &mongo_model.CompetitionComparison{},
|
||
"CoreSellingPoints": &mongo_model.CoreSellingPoints{},
|
||
"SupportingFacilities": &mongo_model.SupportingFacilities{},
|
||
"DeveloperBacking": &mongo_model.DeveloperBacking{},
|
||
"NeedsMining": &mongo_model.NeedsMining{},
|
||
"PainPointResponse": &mongo_model.PainPointResponse{},
|
||
"ValueBuilding": &mongo_model.ValueBuilding{},
|
||
"ClosingTechniques": &mongo_model.ClosingTechniques{},
|
||
"CommunicationRhythm": &mongo_model.CommunicationRhythm{},
|
||
}
|