优质留言上报用户参与情况-只上报优质留言-佳动力

This commit is contained in:
2025-04-14 17:22:14 +08:00
parent 3cb3495eb6
commit e2eea97c12
5 changed files with 282 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
package superKangaroo
import (
"bytes"
"case-admin-api/config"
"case-admin-api/utils"
"encoding/json"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
"net/url"
"strconv"
"time"
)
type ReportCaseRecordRequest struct {
CaseUserId string `json:"id"` // 主键id
Sid string `json:"sid"` // 病例id
TslUid string `json:"tsl_uid"` // 天士力系统uid
Credit1 int `json:"credit1"` // 阅读完成积分
Credit2 int `json:"credit2"` // 调研奖励(阅读质量) 阅读时长
Credit3 int `json:"credit3"` // 调研奖励(留言)—评论奖励
Credit4 int `json:"credit4"` // 调研奖励(社区贡献) 优质提问或者优质解答
HasRemark int `json:"has_remark"` // 是否有评论 1是,0否
Remark []*RemarkRequest `json:"remark"` // 评论
}
// RemarkRequest 病例领取记录-评论
type RemarkRequest struct {
Remark string `json:"remark"` // 评论
CreateTime string `json:"createtime"` // 时间
}
// ReportCaseRecordResponse 返回数据
type ReportCaseRecordResponse struct {
Code interface{} `json:"code"` // 接口调用状态。200:正常;其它值:调用出错
Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok
Data string `json:"data"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明
}
// ReportCaseRecord 上报用户病例领取记录-只上报优质留言
func ReportCaseRecord(requestData ReportCaseRecordRequest) (g *ReportCaseRecordResponse, err error) {
remarkJsonStr, err := StructToJSONString(requestData.Remark)
if err != nil {
return g, err
}
// 创建 form-data 的请求体
var bodyBuffer bytes.Buffer
writer := multipart.NewWriter(&bodyBuffer)
// 写入字段数据
err = writer.WriteField("id", requestData.CaseUserId)
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("credit1", fmt.Sprintf("%d", requestData.Credit1))
if err != nil {
return g, err
}
err = writer.WriteField("credit2", fmt.Sprintf("%d", requestData.Credit2))
if err != nil {
return g, err
}
err = writer.WriteField("credit3", fmt.Sprintf("%d", requestData.Credit3))
if err != nil {
return g, err
}
err = writer.WriteField("credit4", fmt.Sprintf("%d", requestData.Credit4))
if err != nil {
return g, err
}
err = writer.WriteField("has_remark", fmt.Sprintf("%d", requestData.HasRemark))
if err != nil {
return g, err
}
err = writer.WriteField("remark", remarkJsonStr)
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/sorceUpdate")
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
}