Files
51dj_server/app/service/daichongser/new-daichongser.go
T
2026-10-08 16:50:13 +08:00

86 lines
2.6 KiB
Go

package daichongser
import (
"context"
"math/rand"
"strconv"
"91jd-server/app/appg"
"91jd-server/common/constant/redisconst"
"91jd-server/common/crypt"
"91jd-server/common/daichong"
"91jd-server/common/log"
"91jd-server/common/stderr"
"91jd-server/models/e/daichongmod"
"91jd-server/models/v/usermod"
)
// TakeChat 发起聊天
func NewTakeChat(ctx context.Context, uid uint64, proT int) (daichong.ChatResp, stderr.Code) {
u, err := usermod.FindUserByUID(uid)
if err != nil || u == nil {
return daichong.ChatResp{}, stderr.AuthIsNotExist
}
data := daichong.ChatResp{}
str, err := appg.Redis.Get(redisconst.TraderChatCacheKey(uid, proT))
if str != nil && err == nil {
_ = crypt.JSON2Struct(*str, &data)
return data, stderr.Success
}
chatReq := daichong.NewChatReq{
UID: strconv.Itoa(int(uid)) + "-" + appg.Conf.DaiChong.PlatName,
Name: u.Name,
Portrait: u.Portrait,
ProductType: proT,
}
chatResp, err := daichong.NewTakeChat(ctx, chatReq, appg.Conf.DaiChong.Domain)
if err != nil {
log.ErrorX(ctx, "TakeChat send http wrong", log.Any("req", chatReq), log.Any("domain", appg.Conf.DaiChong.Domain),
log.E(err))
return chatResp, stderr.ErrTakeChatCode
}
//随机拼接ordUrl接口的api域名
apiUrls := appg.Conf.URL.ApiUrls
if len(apiUrls) > 0 {
chatResp.Data.OrdUrl = apiUrls[rand.Intn(len(apiUrls))] + "/api/app/daichong/orderInfo"
}
if chatResp.Code == stderr.Success {
normalstr, err := crypt.StructToStrNormal(chatResp)
if normalstr != "" && err == nil && len(chatResp.Data.Traders) > 0 {
_ = appg.Redis.Set(redisconst.TraderChatCacheKey(uid, proT), normalstr, redisconst.TraderChatCacheExpire)
}
}
if len(chatResp.Data.Traders) > 0 {
random(&(chatResp.Data.Traders))
}
return chatResp, chatResp.Code
}
// 获取订单信息
func NewGetOrderInfo(req daichong.OrderSign) (daichong.OrderResp, stderr.Code) {
orderResp, err := daichong.NewGetOrder(req, appg.Conf.DaiChong.Domain)
if err != nil {
log.Warn("GetOrderInfo send http wrong", log.Any("warn", err))
return orderResp, stderr.ErrGetOrderInfoCode
}
return orderResp, orderResp.Code
}
// 获取商人支付信息
func NewGetTraderPayInfo(req daichongmod.PayInfoReq) (daichong.PayInfoResp, stderr.Code) {
payInfoResp, err := daichong.NewGetTraderPayInfo(req, appg.Conf.DaiChong.Domain)
if err != nil {
log.Warn("GetTraderPayInfo send http wrong", log.Any("warn", err))
return payInfoResp, stderr.Failure
}
return payInfoResp, payInfoResp.Code
}
func random(data *[]daichong.Trader) {
strings := *data
for i := len(strings) - 1; i > 0; i-- {
num := rand.Intn(i + 1)
strings[i], strings[num] = strings[num], strings[i]
}
*data = strings
}