package controller import ( "case-admin-api/api/dao" "case-admin-api/api/dto" "case-admin-api/api/model" "case-admin-api/api/requests" "case-admin-api/api/responses" "case-admin-api/global" "case-admin-api/utils" "github.com/gin-gonic/gin" "strconv" ) type Case struct{} // GetCasePage 获取列表-分页 func (b *Case) GetCasePage(c *gin.Context) { caseRequest := requests.CaseRequest{} req := caseRequest.GetCasePage if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } if req.Page == 0 { req.Page = 1 } if req.PageSize == 0 { req.PageSize = 20 } if req.Order != nil { if req.Order.UpdatedAt != "" { if req.Order.UpdatedAt != "desc" && req.Order.UpdatedAt != "asc" { responses.FailWithMessage("排序字段错误", c) return } } if req.Order.JoinWhiteNum != "" { if req.Order.JoinWhiteNum != "desc" && req.Order.JoinWhiteNum != "asc" { responses.FailWithMessage("排序字段错误", c) return } } if req.Order.JoinNum != "" { if req.Order.JoinNum != "desc" && req.Order.JoinNum != "asc" { responses.FailWithMessage("排序字段错误", c) return } } if req.Order.MessageNum != "" { if req.Order.MessageNum != "desc" && req.Order.MessageNum != "asc" { responses.FailWithMessage("排序字段错误", c) return } } } // 获取数据 caseDao := dao.CaseDao{} cases, total, err := caseDao.GetCasePageSearch(req, req.Page, req.PageSize) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 处理返回值 g := dto.GetCaseListDto(cases) // 项目平台数据 projectPlatformDao := dao.ProjectPlatformDao{} maps := make(map[string]interface{}) maps["project_id"] = req.ProjectId maps["platform_id"] = 1 // 固定为1 projectPlatform, _ := projectPlatformDao.GetProjectPlatform(maps) casePlatformDao := dao.CasePlatformDao{} for _, caseDto := range g { // 获取病例绑定平台数据 maps = make(map[string]interface{}) maps["case_id"] = caseDto.CaseId maps["platform_id"] = 1 // 固定为1 casePlatform, _ := casePlatformDao.GetCasePlatform(maps) if casePlatform != nil { // 加载数据-已发放积分 caseDto.LoadIssuedScore(casePlatform) // 加载数据-参与人数-肝胆相照平台 caseDto.LoadPlatformJoinNum(casePlatform) // 加载数据-白名单参与人数-肝胆相照平台 caseDto.LoadPlatformJoinWhiteNum(casePlatform) } if projectPlatform != nil { // 加载数据-单个病例总积分 caseDto.LoadSingleCaseScore(projectPlatform) // 加载数据-剩余积分 remainingScore := projectPlatform.SingleCaseScore - caseDto.IssuedScore caseDto.LoadRemainingScore(remainingScore) } } result := make(map[string]interface{}) result["page"] = req.Page result["page_size"] = req.PageSize result["total"] = total result["data"] = g responses.OkWithData(result, c) } // GetCase 获取详情 func (b *Case) GetCase(c *gin.Context) { id := c.Param("case_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 caseId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 获取病例详情 caseDao := dao.CaseDao{} result, err := caseDao.GetCaseById(caseId) if err != nil { responses.FailWithMessage(err.Error(), c) return } g := dto.GetCaseDto(result) caseItemDao := dao.CaseItemDao{} maps := make(map[string]interface{}) maps["case_id"] = caseId caseItems, err := caseItemDao.GetCaseItemList(maps) if err != nil { responses.FailWithMessage("数据异常", c) return } // 加载数据-病例明细 g.LoadCaseItem(caseItems) caseItemQuestionDao := dao.CaseItemQuestionDao{} caseItemModelDao := dao.CaseItemModelDao{} caseItemQuestionOptionDao := dao.CaseItemQuestionOptionDao{} for _, item := range g.CaseItem { // 模块 maps = make(map[string]interface{}) maps["case_item_id"] = item.CaseItemId caseItemModel, err := caseItemModelDao.GetCaseItemModelList(maps) if err != nil { responses.FailWithMessage("数据异常", c) return } item.LoadCaseItemModel(caseItemModel) // 问题 maps = make(map[string]interface{}) maps["case_item_id"] = item.CaseItemId caseItemQuestions, err := caseItemQuestionDao.GetCaseItemQuestionList(maps) if err == nil && len(caseItemQuestions) > 0 { // 加载数据-病例明细-题目 item.LoadCaseItemQuestion(caseItemQuestions) for _, questionDto := range item.CaseItemQuestion { if questionDto.QuestionType == 1 || questionDto.QuestionType == 2 || questionDto.QuestionType == 4 { maps = make(map[string]interface{}) maps["question_id"] = questionDto.QuestionId caseItemQuestionOptions, err := caseItemQuestionOptionDao.GetCaseItemQuestionOptionList(maps) if err != nil { responses.FailWithMessage(err.Error(), c) return } questionDto.LoadCaseItemQuestionOption(caseItemQuestionOptions) } } } } responses.OkWithData(g, c) } // PutCaseStatus 操作状态 func (b *Case) PutCaseStatus(c *gin.Context) { caseRequest := requests.CaseRequest{} req := caseRequest.PutCaseStatus 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 } id := c.Param("case_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 caseId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } caseDao := dao.CaseDao{} result, err := caseDao.GetCaseById(caseId) if err != nil { responses.FailWithMessage("数据异常", c) return } // 检测状态 if result.CaseStatus == req.CaseStatus { responses.Ok(c) return } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() caseData := make(map[string]interface{}) caseData["case_status"] = req.CaseStatus err = caseDao.EditCaseById(tx, caseId, caseData) if err != nil { tx.Rollback() responses.FailWithMessage("操作失败", c) return } tx.Commit() responses.Ok(c) } // AddCase 新增 func (b *Case) AddCase(c *gin.Context) { caseRequest := requests.CaseRequest{} req := caseRequest.AddCase 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 } // 检测项目 // 将 id 转换为 int64 类型 projectId, err := strconv.ParseInt(req.ProjectId, 10, 64) if err != nil { responses.Fail(c) return } projectDao := dao.ProjectDao{} project, err := projectDao.GetProjectById(projectId) if err != nil { responses.FailWithMessage("项目数据异常", c) return } // 检测状态 if project.ProjectStatus == 0 { responses.FailWithMessage("项目无效,无法添加", c) return } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 新增病例 result := &model.Case{ ProjectId: projectId, CaseStatus: req.CaseStatus, CaseName: req.CaseName, CaseAuthor: req.CaseAuthor, IssuedScore: 0, JoinNum: 0, JoinWhiteNum: 0, MessageNum: 0, } caseDao := dao.CaseDao{} result, err = caseDao.AddCase(tx, result) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 获取项目绑定平台 projectPlatformDao := dao.ProjectPlatformDao{} maps := make(map[string]interface{}) maps["project_id"] = project.ProjectId projectPlatforms, _ := projectPlatformDao.GetProjectPlatformList(maps) if len(projectPlatforms) > 0 { for _, v := range projectPlatforms { // 新增病例-平台 casePlatformDao := dao.CasePlatformDao{} casePlatform := &model.CasePlatform{ CaseId: result.CaseId, PlatformId: v.PlatformId, IssuedScore: 0, JoinNum: 0, JoinWhiteNum: 0, MessageNum: 0, } _, err = casePlatformDao.AddCasePlatform(tx, casePlatform) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } } } tx.Commit() responses.Ok(c) } // PutCase 修改 func (b *Case) PutCase(c *gin.Context) { caseRequest := requests.CaseRequest{} req := caseRequest.PutCase 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 } id := c.Param("case_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 caseId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } caseDao := dao.CaseDao{} result, err := caseDao.GetCaseById(caseId) if err != nil { responses.FailWithMessage("数据异常", c) return } // 检测项目 // 将 id 转换为 int64 类型 projectId, err := strconv.ParseInt(req.ProjectId, 10, 64) if err != nil { responses.Fail(c) return } projectDao := dao.ProjectDao{} project, err := projectDao.GetProjectById(projectId) if err != nil { responses.FailWithMessage("项目数据异常", c) return } // 检测状态 if project.ProjectStatus == 0 { responses.FailWithMessage("项目无效,无法添加", c) return } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 修改值 caseData := make(map[string]interface{}) // 病例名称 if req.CaseName != result.CaseName { caseData["case_name"] = req.CaseName } // 病例作者 if req.CaseAuthor != result.CaseAuthor { caseData["case_author"] = req.CaseAuthor } if len(caseData) > 0 { err = caseDao.EditCaseById(tx, caseId, caseData) if err != nil { tx.Rollback() responses.FailWithMessage("操作失败", c) return } } tx.Commit() responses.Ok(c) }