396 lines
9.9 KiB
Go
396 lines
9.9 KiB
Go
package controller
|
|
|
|
import (
|
|
"case-open-api/api/dao"
|
|
"case-open-api/api/dto"
|
|
"case-open-api/api/requests"
|
|
"case-open-api/api/responses"
|
|
"case-open-api/api/service"
|
|
"case-open-api/global"
|
|
"case-open-api/utils"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
type Res struct {
|
|
}
|
|
|
|
// GetResProjectList 获取项目列表
|
|
func (b *Res) GetResProjectList(c *gin.Context) {
|
|
resRequest := requests.ResRequest{}
|
|
req := resRequest.GetResProjectList
|
|
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
|
|
|
|
// 获取数据
|
|
ProjectDao := dao.ProjectDao{}
|
|
projects, err := ProjectDao.GetResProjectListSearch(req)
|
|
if err != nil {
|
|
responses.FailWithMessage("获取数据失败", c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.GetResProjectListDto(projects)
|
|
|
|
projectPlatformDao := dao.ProjectPlatformDao{}
|
|
caseDao := dao.CaseDao{}
|
|
for _, projectDto := range g {
|
|
// 获取项目关联平台
|
|
maps := make(map[string]interface{})
|
|
maps["project_id"] = projectDto.ProjectId
|
|
maps["platform_id"] = platformId
|
|
projectPlatform, _ := projectPlatformDao.GetProjectPlatform(maps)
|
|
if projectPlatform != nil {
|
|
// 加载是否存在福利
|
|
projectDto.LoadIsWelfare(projectPlatform)
|
|
}
|
|
|
|
// 获取最近7天的病例
|
|
now := time.Now()
|
|
t := now.AddDate(0, 0, -7)
|
|
|
|
maps = make(map[string]interface{})
|
|
maps["project_id"] = projectDto.ProjectId
|
|
result, _ := caseDao.GetCaseFormPastDay(maps, t)
|
|
if result != nil {
|
|
// 加载最近更新情况
|
|
projectDto.LoadIsRecentlyUpdate(result)
|
|
}
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// GetResCaseList 获取病例列表
|
|
func (b *Res) GetResCaseList(c *gin.Context) {
|
|
resRequest := requests.ResRequest{}
|
|
req := resRequest.GetResCaseList
|
|
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
|
|
|
|
// 获取数据
|
|
caseDao := dao.CaseDao{}
|
|
cases, err := caseDao.GetResCaseList(req)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.GetCaseResListDto(cases)
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// GetResCaseRecordList 病例领取记录
|
|
func (b *Res) GetResCaseRecordList(c *gin.Context) {
|
|
resRequest := requests.ResRequest{}
|
|
req := resRequest.GetResCaseRecordList
|
|
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
|
|
|
|
if req.StartTime != "" {
|
|
if req.EndTime == "" {
|
|
responses.FailWithMessage("参数错误", c)
|
|
return
|
|
}
|
|
}
|
|
|
|
page := 1
|
|
if req.Pindex != 0 {
|
|
page = req.Pindex
|
|
}
|
|
|
|
pageSize := 100
|
|
|
|
// 获取数据
|
|
caseUserDao := dao.CaseUserDao{}
|
|
caseUsers, total, err := caseUserDao.GetResCaseUserRecordList(req, page, pageSize)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := make([]*dto.ResCaseRecordDto, len(caseUsers))
|
|
|
|
if len(caseUsers) > 0 {
|
|
recordScoreDao := dao.RecordScoreDao{}
|
|
caseCommentDao := dao.CaseCommentDao{}
|
|
userAnswerRecordDao := dao.UserAnswerRecordDao{}
|
|
userDao := dao.UserDao{}
|
|
projectPlatformWhiteService := service.ProjectPlatformWhiteService{}
|
|
|
|
for i, v := range caseUsers {
|
|
// 获取积分发放记录
|
|
maps := make(map[string]interface{})
|
|
maps["project_id"] = req.ProjectId
|
|
maps["case_id"] = v.CaseId
|
|
maps["platform_id"] = v.PlatformId
|
|
maps["user_id"] = v.UserId
|
|
recordScores, _ := recordScoreDao.GetRecordScoreList(maps)
|
|
|
|
// 获取用户评论
|
|
maps = make(map[string]interface{})
|
|
maps["case_id"] = v.CaseId
|
|
maps["platform_id"] = v.PlatformId
|
|
maps["user_id"] = v.UserId
|
|
maps["status"] = 1
|
|
caseComments, _ := caseCommentDao.GetCaseCommentList(maps)
|
|
|
|
// 获取用户答题记录
|
|
maps = make(map[string]interface{})
|
|
maps["case_id"] = v.CaseId
|
|
maps["platform_id"] = v.PlatformId
|
|
maps["user_id"] = v.UserId
|
|
userAnswerRecords, _ := userAnswerRecordDao.GetUserAnswerRecordPreloadList(maps)
|
|
|
|
// 用时
|
|
minutes := v.ReadDuration / 60
|
|
remainingSeconds := v.ReadDuration % 60
|
|
residenceTime := fmt.Sprintf("%02d:%02d", minutes, remainingSeconds)
|
|
response := &dto.ResCaseRecordDto{
|
|
CaseUserId: fmt.Sprintf("%d", v.CaseUserId),
|
|
Sid: fmt.Sprintf("%d", v.CaseId),
|
|
Beizhu: "",
|
|
OpenId: "",
|
|
Title: v.Case.CaseName,
|
|
NickName: v.User.UserName,
|
|
RealName: v.User.UserName,
|
|
Mobile: v.User.MobileEncryption,
|
|
Hos2: v.User.DepartmentName, // 科室
|
|
Job: utils.DoctorTitleToString(v.User.Title),
|
|
HospitalName: v.User.Hospital.HospitalName,
|
|
ResideProvince: v.User.Hospital.Province,
|
|
ResideCity: v.User.Hospital.City,
|
|
CreateDate: time.Time(v.CreatedAt).Format("2006-01-02"),
|
|
CreateTimes: time.Time(v.CreatedAt).Format("15:04:05"),
|
|
ResidenceTime: residenceTime,
|
|
QuestionAnswer: nil,
|
|
TslUid: v.User.UserIden,
|
|
TslShareUserId: v.ShareUserIden,
|
|
IsVip: 0,
|
|
Credit1: 0,
|
|
Credit2: 0,
|
|
Credit3: 0,
|
|
Credit4: 0,
|
|
CreditTotal: v.TotalScore,
|
|
HasRemark: 0,
|
|
Remark: nil,
|
|
}
|
|
|
|
// 积分
|
|
for _, v3 := range recordScores {
|
|
if v3.Type == 1 {
|
|
response.Credit1 = v3.Score
|
|
}
|
|
|
|
if v3.Type == 2 {
|
|
response.Credit2 = v3.Score
|
|
}
|
|
|
|
if v3.Type == 3 {
|
|
response.Credit3 = v3.Score
|
|
}
|
|
|
|
if v3.Type == 4 {
|
|
response.Credit4 = v3.Score
|
|
}
|
|
}
|
|
|
|
// 评论
|
|
if len(caseComments) > 0 {
|
|
response.Remark = make([]*dto.RemarkDto, len(caseComments))
|
|
|
|
response.HasRemark = 1
|
|
for i2, comment := range caseComments {
|
|
remarkDto := &dto.RemarkDto{
|
|
Remark: comment.Content,
|
|
CreateTime: time.Time(comment.CreatedAt).Format("2006-01-02 15:04:05"),
|
|
}
|
|
|
|
response.Remark[i2] = remarkDto
|
|
}
|
|
}
|
|
|
|
// 题目
|
|
if len(userAnswerRecords) > 0 {
|
|
response.QuestionAnswer = make([]*dto.QuestionAnswerDto, len(userAnswerRecords))
|
|
for i2, records := range userAnswerRecords {
|
|
questionAnswerDto := &dto.QuestionAnswerDto{
|
|
Question: records.CaseItemQuestion.QuestionName,
|
|
Answer: records.Answer,
|
|
Correct: false,
|
|
Order: i2 + 1,
|
|
}
|
|
|
|
if records.IsTrue == 1 {
|
|
questionAnswerDto.Correct = true
|
|
}
|
|
|
|
response.QuestionAnswer[i2] = questionAnswerDto
|
|
}
|
|
}
|
|
|
|
// 获取用户数据
|
|
user, _ := userDao.GetUserById(v.UserId)
|
|
if user != nil {
|
|
// 检测用户是否白名单
|
|
isWhite, _ := projectPlatformWhiteService.CheckProjectPlatformWhiteByUser(user, v.PlatformId)
|
|
if isWhite {
|
|
response.IsVip = 1
|
|
}
|
|
}
|
|
|
|
// 将转换后的结构体添加到新切片中
|
|
g[i] = response
|
|
}
|
|
}
|
|
|
|
result := make(map[string]interface{})
|
|
result["pindex"] = page
|
|
result["psize"] = pageSize
|
|
result["ptotal"] = int(math.Ceil(float64(total) / float64(pageSize)))
|
|
result["ctotal"] = total
|
|
result["data"] = g
|
|
responses.OkWithData(result, c)
|
|
}
|
|
|
|
// GetResCaseBehaviorList 获取病例用户操作行为列表
|
|
func (b *Res) GetResCaseBehaviorList(c *gin.Context) {
|
|
resRequest := requests.ResRequest{}
|
|
req := resRequest.GetResCaseBehaviorList
|
|
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
|
|
}
|
|
|
|
if req.StartTime != "" {
|
|
if req.EndTime == "" {
|
|
responses.FailWithMessage("参数错误", c)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 获取数据
|
|
caseUserDao := dao.CaseUserDao{}
|
|
caseUsers, err := caseUserDao.GetResCaseBehaviorList(req)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := make([]*dto.ResCaseBehaviorDto, len(caseUsers))
|
|
|
|
if len(caseUsers) > 0 {
|
|
userBehaviorRecordDao := dao.UserBehaviorRecordDao{}
|
|
|
|
for i, v := range caseUsers {
|
|
response := &dto.ResCaseBehaviorDto{
|
|
TslUid: v.User.UserIden,
|
|
Sid: fmt.Sprintf("%d", v.CaseId),
|
|
StartTime: time.Time(v.StartTime).Format("2006-01-02 15:04:05"),
|
|
EndTime: time.Time(v.StartTime).Format("2006-01-02 15:04:05"),
|
|
UseTime: v.ReadDuration,
|
|
IsComplete: 1,
|
|
Action: nil,
|
|
}
|
|
|
|
// 获取用户操作行为记录
|
|
maps := make(map[string]interface{})
|
|
maps["case_id"] = v.CaseId
|
|
maps["platform_id"] = v.PlatformId
|
|
maps["user_id"] = v.UserId
|
|
userBehaviorRecords, _ := userBehaviorRecordDao.GetUserBehaviorRecordList(maps)
|
|
|
|
// 评论
|
|
if len(userBehaviorRecords) > 0 {
|
|
response.Action = make([]*dto.ActionDto, len(userBehaviorRecords))
|
|
|
|
for i2, record := range userBehaviorRecords {
|
|
// 用时
|
|
useTime := time.Time(record.EndTime).Sub(time.Time(record.StartTime))
|
|
|
|
actionDto := &dto.ActionDto{
|
|
Step: record.Step,
|
|
In: time.Time(record.StartTime).Format("2006-01-02 15:04:05"),
|
|
Out: time.Time(record.EndTime).Format("2006-01-02 15:04:05"),
|
|
UseTime: int(useTime.Seconds()),
|
|
}
|
|
|
|
response.Action[i2] = actionDto
|
|
}
|
|
}
|
|
|
|
// 将转换后的结构体添加到新切片中
|
|
g[i] = response
|
|
}
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|