239 lines
4.7 KiB
Go
239 lines
4.7 KiB
Go
package controller
|
|
|
|
import (
|
|
"case-api/api/dao"
|
|
"case-api/api/dto"
|
|
"case-api/api/model"
|
|
"case-api/api/requests"
|
|
"case-api/api/responses"
|
|
"case-api/global"
|
|
"case-api/utils"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type User struct {
|
|
}
|
|
|
|
// GetUserScore 获取用户积分获取情况
|
|
func (b *User) GetUserScore(c *gin.Context) {
|
|
userRequest := requests.UserRequest{}
|
|
req := userRequest.GetUserScore
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 参数验证
|
|
if err := global.Validate.Struct(req); err != nil {
|
|
responses.FailWithMessage(utils.Translate(err), c)
|
|
return
|
|
}
|
|
|
|
platformId := c.GetInt64("PlatformId") // 平台id
|
|
if platformId == 0 {
|
|
responses.FailWithMessage("内部错误", c)
|
|
return
|
|
}
|
|
|
|
req.PlatformId = platformId
|
|
|
|
userId := c.GetInt64("UserId") // 用户id
|
|
if userId == 0 {
|
|
responses.FailWithMessage("内部错误", c)
|
|
return
|
|
}
|
|
|
|
req.UserId = userId
|
|
|
|
// 将 id 转换为 int64 类型
|
|
caseId, err := strconv.ParseInt(req.CaseId, 10, 64)
|
|
if err != nil {
|
|
responses.Fail(c)
|
|
return
|
|
}
|
|
|
|
// 检测病例是否属于平台
|
|
casePlatformDao := dao.CasePlatformDao{}
|
|
maps := make(map[string]interface{})
|
|
maps["case_id"] = caseId
|
|
maps["platform_id"] = platformId
|
|
_, err = casePlatformDao.GetCasePlatform(maps)
|
|
if err != nil {
|
|
responses.FailWithMessage("非法数据", c)
|
|
return
|
|
}
|
|
|
|
// 获取病例详情
|
|
caseDao := dao.CaseDao{}
|
|
result, err := caseDao.GetCaseById(caseId)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
if result.CaseStatus == 2 {
|
|
responses.FailWithMessage("数据异常", c)
|
|
return
|
|
}
|
|
|
|
// 获取用户总积分
|
|
caseUserDao := dao.CaseUserDao{}
|
|
maps = make(map[string]interface{})
|
|
maps["case_id"] = caseId
|
|
maps["platform_id"] = platformId
|
|
maps["user_id"] = userId
|
|
caseUser, _ := caseUserDao.GetCaseUser(maps)
|
|
if caseUser == nil {
|
|
responses.OkWithData(nil, c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.GetCaseUserDto(caseUser)
|
|
|
|
// 获取用户获取积分记录
|
|
recordScoreDao := dao.RecordScoreDao{}
|
|
maps = make(map[string]interface{})
|
|
maps["case_id"] = caseId
|
|
maps["platform_id"] = platformId
|
|
maps["user_id"] = userId
|
|
recordScores, err := recordScoreDao.GetRecordScoreList(maps)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
mergedScore := 0
|
|
for _, score := range recordScores {
|
|
if score.Type == 3 || score.Type == 4 {
|
|
mergedScore += score.Score
|
|
}
|
|
}
|
|
|
|
// 优质留言
|
|
var describe []string
|
|
for _, score := range recordScores {
|
|
d := score.NodeName + ":"
|
|
|
|
if mergedScore != 0 {
|
|
score.Score = mergedScore
|
|
}
|
|
|
|
if score.Type == 4 {
|
|
continue
|
|
}
|
|
|
|
if platformId == 2 {
|
|
d = d + fmt.Sprintf("%d", score.Score*10)
|
|
} else {
|
|
d = d + fmt.Sprintf("%d", score.Score)
|
|
}
|
|
|
|
describe = append(describe, d)
|
|
}
|
|
|
|
g.Describe = strings.Join(describe, ",")
|
|
|
|
if platformId == 2 {
|
|
g.TotalScore = g.TotalScore * 10
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// AddUserBehavior 上报用户行为
|
|
func (b *User) AddUserBehavior(c *gin.Context) {
|
|
userRequest := requests.UserRequest{}
|
|
req := userRequest.AddUserBehavior
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
// 参数验证
|
|
if err := global.Validate.Struct(req); err != nil {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
platformId := c.GetInt64("PlatformId") // 平台id
|
|
if platformId == 0 {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
userId := c.GetInt64("UserId") // 用户id
|
|
if userId == 0 {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
req.PlatformId = platformId
|
|
req.UserId = userId
|
|
|
|
// 将 id 转换为 int64 类型
|
|
caseId, err := strconv.ParseInt(req.CaseId, 10, 64)
|
|
if err != nil {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
// 检测病例是否属于平台
|
|
casePlatformDao := dao.CasePlatformDao{}
|
|
maps := make(map[string]interface{})
|
|
maps["case_id"] = caseId
|
|
maps["platform_id"] = platformId
|
|
_, err = casePlatformDao.GetCasePlatform(maps)
|
|
if err != nil {
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
// 增加用户行为记录
|
|
startTime, err := time.Parse("2006-01-02 15:04:05", req.StartTime)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
endTime, err := time.Parse("2006-01-02 15:04:05", req.EndTime)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
userBehaviorRecord := &model.UserBehaviorRecord{
|
|
CaseId: caseId,
|
|
PlatformId: platformId,
|
|
UserId: userId,
|
|
Step: req.Step,
|
|
StartTime: model.LocalTime(startTime),
|
|
EndTime: model.LocalTime(endTime),
|
|
}
|
|
|
|
userBehaviorRecordDao := dao.UserBehaviorRecordDao{}
|
|
_, err = userBehaviorRecordDao.AddUserBehaviorRecord(tx, userBehaviorRecord)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
responses.Ok(c)
|
|
return
|
|
}
|
|
|
|
tx.Commit()
|
|
responses.Ok(c)
|
|
}
|