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 }