2025-03-07 17:23:50 +08:00

165 lines
4.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package superKangaroo
import (
"bytes"
"case-admin-api/api/model"
"case-admin-api/config"
"case-admin-api/utils"
"encoding/json"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
"net/url"
"strconv"
"time"
)
// ReportUserScoreRequest 上报积分
type ReportUserScoreRequest struct {
Id string `json:"id"` //积分记录id用于判断是否重复推送
Sid string `json:"sid"` // 互动病例ID
TslUid string `json:"tsl_uid"` // 进入h5携带用户标识唯一性
Title string `json:"title"` // 积分类型
Credit string `json:"credit"` // 积分
AddTime string `json:"addtime"` // 获得时间
Remark string `json:"remark"` // 病例名称
}
// ReportUserScoreResponse 上报用户积分-返回数据
type ReportUserScoreResponse struct {
Code interface{} `json:"code"` // 接口调用状态。200正常其它值调用出错
Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok
Data string `json:"data"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明
}
// ReportUserScore 上报用户积分
func ReportUserScore(caseId int64, appIden, title string, recordScore *model.RecordScore, c *model.Case) (g *ReportUserScoreResponse, err error) {
// 准备要发送的 JSON 数据
requestData := ReportUserScoreRequest{
Id: fmt.Sprintf("%d", recordScore.ScoreId), // 获取积分记录的唯一id
Sid: fmt.Sprintf("%d", caseId),
TslUid: appIden,
Title: title,
Credit: fmt.Sprintf("%d", recordScore.Score),
AddTime: time.Time(recordScore.CreatedAt).Format("2006-01-02 15:04:05"),
Remark: c.CaseName,
}
// 创建 form-data 的请求体
var bodyBuffer bytes.Buffer
writer := multipart.NewWriter(&bodyBuffer)
// 写入字段数据
err = writer.WriteField("id", requestData.Id)
if err != nil {
return g, err
}
err = writer.WriteField("sid", requestData.Sid)
if err != nil {
return g, err
}
err = writer.WriteField("tsl_uid", requestData.TslUid)
if err != nil {
return g, err
}
err = writer.WriteField("title", requestData.Title)
if err != nil {
return g, err
}
err = writer.WriteField("credit", requestData.Credit)
if err != nil {
return g, err
}
err = writer.WriteField("addtime", requestData.AddTime)
if err != nil {
return g, err
}
err = writer.WriteField("remark", c.CaseName)
if err != nil {
return g, err
}
// 关闭 writer写入结束标记
err = writer.Close()
if err != nil {
return g, err
}
// 随机6位数
nonce := generateRandom6Digit()
// 当前毫秒时间戳
curTime := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
// 获取请求签名
sign, err := GenSignature("", strconv.Itoa(nonce), curTime)
if err != nil {
return g, err
}
// 设置请求 URL
u, err := url.Parse(config.C.SuperKangaroo.ApiUrl + "newindex/receivingSorce")
if err != nil {
return g, err
}
query := u.Query()
query.Set("secret", config.C.SuperKangaroo.SecretKey)
query.Set("nonce", strconv.Itoa(nonce))
query.Set("curTime", curTime)
query.Set("checkSum", sign)
u.RawQuery = query.Encode()
utils.LogJsonInfo("请求超级袋鼠数据参数", requestData)
// 创建 POST 请求
req, err := http.NewRequest("POST", u.String(), &bodyBuffer)
if err != nil {
return g, err
}
// 设置请求头
req.Header.Set("Content-Type", writer.FormDataContentType())
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return g, err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
body, err := io.ReadAll(resp.Body)
if err != nil {
return g, err
}
// 检查响应状态码
if resp.StatusCode != 200 {
return g, errors.New("失败")
}
err = json.Unmarshal(body, &g)
if err != nil {
// json解析失败
return g, err
}
utils.LogJsonInfo("获取超级袋鼠数据返回", g)
if g.Code != 1 && g.Code != "1" && g.Code != float64(1) {
if g.Msg != "" {
return g, errors.New(g.Msg)
} else {
return g, errors.New("失败")
}
}
return g, nil
}