case-admin-api/extend/superKangaroo/ReportCaseRecord.go
2025-10-11 14:27:01 +08:00

173 lines
4.4 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/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
}