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.GetCaseUserRecordList(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{} userAnswerRecordsDao := dao.UserAnswerRecordsDao{} 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 userAnswerRecordss, _ := userAnswerRecordsDao.GetUserAnswerRecordsPreloadList(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(userAnswerRecordss) > 0 { response.QuestionAnswer = make([]*dto.QuestionAnswerDto, len(userAnswerRecordss)) for i2, recordss := range userAnswerRecordss { questionAnswerDto := &dto.QuestionAnswerDto{ Question: recordss.CaseItemQuestion.QuestionName, Answer: recordss.Answer, Correct: false, Order: i2 + 1, } if recordss.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) }