优质留言上报用户参与情况-只上报优质留言-佳动力
This commit is contained in:
parent
3cb3495eb6
commit
e2eea97c12
@ -278,6 +278,16 @@ func (b *CaseComment) AddCaseCommentHighQuality(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 上报用户参与情况-只上报优质留言-佳动力
|
||||||
|
if caseComment.PlatformId == 2 {
|
||||||
|
err = userService.ReportCaseRecord(tx, result.ProjectId, caseComment.CaseId, user)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
caseCommentData := make(map[string]interface{})
|
caseCommentData := make(map[string]interface{})
|
||||||
caseCommentData["is_high_quality"] = req.IsHighQuality
|
caseCommentData["is_high_quality"] = req.IsHighQuality
|
||||||
caseCommentData["is_grant_high_quality"] = 1
|
caseCommentData["is_grant_high_quality"] = 1
|
||||||
|
|||||||
@ -110,6 +110,15 @@ func (r *CaseUserDao) GetCaseUser(maps interface{}) (m *model.CaseUser, err erro
|
|||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetCaseUserPreload 获取
|
||||||
|
func (r *CaseUserDao) GetCaseUserPreload(maps interface{}) (m *model.CaseUser, err error) {
|
||||||
|
err = global.Db.Preload(clause.Associations).Where(maps).First(&m).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetCaseUserUseTx 获取
|
// GetCaseUserUseTx 获取
|
||||||
func (r *CaseUserDao) GetCaseUserUseTx(tx *gorm.DB, maps interface{}) (m *model.CaseUser, err error) {
|
func (r *CaseUserDao) GetCaseUserUseTx(tx *gorm.DB, maps interface{}) (m *model.CaseUser, err error) {
|
||||||
err = tx.Where(maps).First(&m).Error
|
err = tx.Where(maps).First(&m).Error
|
||||||
|
|||||||
@ -115,3 +115,12 @@ func (r *RecordScoreDao) GetRecordScoreUseTx(tx *gorm.DB, maps interface{}) (m *
|
|||||||
}
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetRecordScoreListUseTx 获取
|
||||||
|
func (r *RecordScoreDao) GetRecordScoreListUseTx(tx *gorm.DB, maps interface{}) (m []*model.RecordScore, err error) {
|
||||||
|
err = tx.Where(maps).Find(&m).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -261,3 +261,85 @@ func (r *UserService) ReportUserScore(tx *gorm.DB, projectId, caseId, platformId
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReportCaseRecord 上报用户参与情况-只上报优质留言
|
||||||
|
func (r *UserService) ReportCaseRecord(tx *gorm.DB, projectId, caseId int64, user *model.User) (err error) {
|
||||||
|
caseUserDao := dao.CaseUserDao{}
|
||||||
|
maps := make(map[string]interface{})
|
||||||
|
maps["project_id"] = projectId
|
||||||
|
maps["case_id"] = caseId
|
||||||
|
maps["user_id"] = user.UserId
|
||||||
|
caseUser, err := caseUserDao.GetCaseUser(maps)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
recordScoreDao := dao.RecordScoreDao{}
|
||||||
|
caseCommentDao := dao.CaseCommentDao{}
|
||||||
|
|
||||||
|
// 获取积分发放记录
|
||||||
|
maps = make(map[string]interface{})
|
||||||
|
maps["project_id"] = projectId
|
||||||
|
maps["case_id"] = caseId
|
||||||
|
maps["platform_id"] = caseUser.PlatformId
|
||||||
|
maps["user_id"] = user.UserId
|
||||||
|
recordScores, _ := recordScoreDao.GetRecordScoreListUseTx(tx, maps)
|
||||||
|
|
||||||
|
// 获取用户评论
|
||||||
|
maps = make(map[string]interface{})
|
||||||
|
maps["case_id"] = caseId
|
||||||
|
maps["platform_id"] = caseUser.PlatformId
|
||||||
|
maps["user_id"] = user.UserId
|
||||||
|
maps["status"] = 1
|
||||||
|
caseComments, _ := caseCommentDao.GetCaseCommentList(maps)
|
||||||
|
|
||||||
|
// 组装请求数据
|
||||||
|
requestData := superKangaroo.ReportCaseRecordRequest{
|
||||||
|
CaseUserId: fmt.Sprintf("%d", caseUser.CaseUserId),
|
||||||
|
Sid: fmt.Sprintf("%d", caseUser.CaseId),
|
||||||
|
TslUid: user.UserIden,
|
||||||
|
Credit1: 0,
|
||||||
|
Credit2: 0,
|
||||||
|
Credit3: 0,
|
||||||
|
Credit4: 0,
|
||||||
|
HasRemark: 0,
|
||||||
|
Remark: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 积分
|
||||||
|
for _, v3 := range recordScores {
|
||||||
|
if v3.Type == 1 {
|
||||||
|
requestData.Credit1 = v3.Score
|
||||||
|
}
|
||||||
|
|
||||||
|
if v3.Type == 2 {
|
||||||
|
requestData.Credit2 = v3.Score
|
||||||
|
}
|
||||||
|
|
||||||
|
if v3.Type == 3 {
|
||||||
|
requestData.Credit4 = v3.Score
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 评论
|
||||||
|
if len(caseComments) > 0 {
|
||||||
|
requestData.Remark = make([]*superKangaroo.RemarkRequest, len(caseComments))
|
||||||
|
|
||||||
|
requestData.HasRemark = 1
|
||||||
|
for i2, comment := range caseComments {
|
||||||
|
remarkDto := &superKangaroo.RemarkRequest{
|
||||||
|
Remark: comment.Content,
|
||||||
|
CreateTime: time.Time(comment.CreatedAt).Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
requestData.Remark[i2] = remarkDto
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = superKangaroo.ReportCaseRecord(requestData)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
172
extend/superKangaroo/ReportCaseRecord.go
Normal file
172
extend/superKangaroo/ReportCaseRecord.go
Normal 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
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user