From dd2530e819bdd7325040bf5edb8e06d4fc7c6395 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 3 Jul 2025 09:13:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=97=85=E4=BE=8B=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E5=8C=BB=E7=94=9F=E5=8A=A0=E5=AF=86=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E6=9F=A5=E8=AF=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E5=89=A9=E4=BD=99=E7=A7=AF=E5=88=86=E5=92=8C=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E8=BF=98=E6=9C=89=E7=A6=8F=E5=88=A9=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/Res.go | 55 +++++++++++++++++++++++++++++++++++++++++++ api/dao/Case.go | 3 +++ api/dto/Res.go | 26 +++++++++++++++----- api/model/Case.go | 1 + api/requests/Res.go | 5 ++-- 5 files changed, 82 insertions(+), 8 deletions(-) diff --git a/api/controller/Res.go b/api/controller/Res.go index 175f026..5f7a833 100644 --- a/api/controller/Res.go +++ b/api/controller/Res.go @@ -3,6 +3,7 @@ package controller import ( "case-open-api/api/dao" "case-open-api/api/dto" + "case-open-api/api/model" "case-open-api/api/requests" "case-open-api/api/responses" "case-open-api/api/service" @@ -117,6 +118,37 @@ func (b *Res) GetResCaseList(c *gin.Context) { // 处理返回值 g := dto.GetCaseResListDto(cases) + var users []*model.User + + // 检测用户是否参与过 + if req.MobileEncryption != "" { + // 获取全部相同手机号 + userDao := dao.UserDao{} + maps := make(map[string]interface{}) + maps["mobile_encryption"] = req.MobileEncryption + users, err = userDao.GetUserList(maps) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + caseUserDao := dao.CaseUserDao{} + + // 存在相同手机号用户 + for _, user := range users { + for _, caseDto := range g { + // 检测积分是否已在其他平台发放过 + maps = make(map[string]interface{}) + maps["case_id"] = caseDto.SId + maps["user_id"] = user.UserId + caseUser, _ := caseUserDao.GetCaseUser(maps) + if caseUser != nil { + caseDto.IsJoin = true + } + } + } + } + // 获取平台数据 platformDao := dao.PlatformDao{} platform, err := platformDao.GetPlatformById(platformId) @@ -125,10 +157,33 @@ func (b *Res) GetResCaseList(c *gin.Context) { return } + // 获取该平台全部关联项目 + projectPlatformDao := dao.ProjectPlatformDao{} + maps := make(map[string]interface{}) + maps["platform_id"] = platformId + projectPlatforms, _ := projectPlatformDao.GetProjectPlatformList(maps) + if len(projectPlatforms) <= 0 { + responses.FailWithMessage("数据异常", c) + return + } + for _, caseDto := range g { // 加载访问链接 link := config.C.DomainName + "/caseIntro" + "?project_id=" + caseDto.ProjectId + "&source=3" + "&platform_key=" + platform.PlatformKey + "&case_id=" + caseDto.SId caseDto.LoadLink(link) + + for _, m := range projectPlatforms { + projectId := fmt.Sprintf("%d", m.ProjectId) + if projectId == caseDto.ProjectId { + if m.IsWelfare == 1 { + // 单个病例总积分-单个病例已发放积分 + diffScore := m.SingleCaseScore - caseDto.IssuedScore + if diffScore > 0 { + caseDto.IsWelfare = true + } + } + } + } } responses.OkWithData(g, c) diff --git a/api/dao/Case.go b/api/dao/Case.go index ddd6a8d..826e4c0 100644 --- a/api/dao/Case.go +++ b/api/dao/Case.go @@ -189,6 +189,9 @@ func (r *CaseDao) GetResCaseList(req requests.GetResCaseList) (m []*model.Case, // 构建查询条件 query := global.Db.Model(&model.Case{}) + // 获取病例平台表 + query = query.Preload("CasePlatform", "platform_id = ?", req.PlatformId) + projectPlatformSubQuery := global.Db.Model(&model.ProjectPlatform{}). Where("project_platform.project_id = case.project_id"). Where("project_platform.platform_id = ?", req.PlatformId). diff --git a/api/dto/Res.go b/api/dto/Res.go index 609aec4..46ccc56 100644 --- a/api/dto/Res.go +++ b/api/dto/Res.go @@ -23,12 +23,15 @@ type ResProjectDto struct { // ResCaseDto 病历 type ResCaseDto struct { - SId string `json:"sid"` // 主键id - ProjectId string `json:"project_id"` // 项目标识 - Titel string `json:"titel"` // 病例名称 - Thumb string `json:"thumb"` // 封面图片 - StarTime model.LocalTime `json:"startime"` // 创建时间 - Url string `json:"url"` // 链接 + SId string `json:"sid"` // 主键id + ProjectId string `json:"project_id"` // 项目标识 + Titel string `json:"titel"` // 病例名称 + Thumb string `json:"thumb"` // 封面图片 + StarTime model.LocalTime `json:"startime"` // 创建时间 + Url string `json:"url"` // 链接 + IsWelfare bool `json:"Is_welfare"` // 是否存在福利 + IsJoin bool `json:"is_join"` // 是否参与过 + IssuedScore int `json:"issued_score"` // 已发放积分 } // ResCaseRecordDto 病例领取记录 @@ -137,6 +140,9 @@ func GetCaseResListDto(m []*model.Case) []*ResCaseDto { StarTime: v.CreatedAt, } + // 加载已发放积分 + response.LoadIssuedScore(v.CasePlatform) + // 将转换后的结构体添加到新切片中 responses[i] = response } @@ -175,3 +181,11 @@ func (r *ResCaseDto) LoadLink(link string) *ResCaseDto { return r } + +// LoadIssuedScore 加载已发放积分 +func (r *ResCaseDto) LoadIssuedScore(m *model.CasePlatform) *ResCaseDto { + if m != nil { + r.IssuedScore = m.IssuedScore + } + return r +} diff --git a/api/model/Case.go b/api/model/Case.go index 1808365..1563993 100644 --- a/api/model/Case.go +++ b/api/model/Case.go @@ -18,6 +18,7 @@ type Case struct { JoinWhiteNum int `gorm:"column:join_white_num;type:int(5);default:0;comment:多平台白名单参加总人数" json:"join_white_num"` MessageNum int `gorm:"column:message_num;type:int(5);default:0;comment:多平台留言人数" json:"message_num"` Model + CasePlatform *CasePlatform `gorm:"foreignKey:CaseId;references:CaseId" json:"case_platform"` } func (m *Case) TableName() string { diff --git a/api/requests/Res.go b/api/requests/Res.go index 1228ade..89d4b26 100644 --- a/api/requests/Res.go +++ b/api/requests/Res.go @@ -14,8 +14,9 @@ type GetResProjectList struct { // GetResCaseList 获取列表 type GetResCaseList struct { - PlatformId int64 `json:"platform_id" form:"platform_id" label:"平台id"` - Keyword string `json:"keyword" form:"keyword" label:"关键词"` + PlatformId int64 `json:"platform_id" form:"platform_id" label:"平台id"` + Keyword string `json:"keyword" form:"keyword" label:"关键词"` + MobileEncryption string `json:"mobile_encryption" form:"mobile_encryption" label:"用户手机号-加密"` } // GetResCaseRecordList 病例领取记录