From 1a8c64757d98d20e5835237401e06f934a5a8251 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 20 May 2025 10:15:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E4=BA=86dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 16 ++ .../controller/ClinicalController.java | 170 ++++++++++-------- ...java => getClinicalArticleSearchPage.java} | 8 +- .../getClinicalDoctorSearchPage.java | 5 + .../getClinicalHospitalSearchPage.java | 5 + .../getClinicalVideoSearchPage.java | 89 +++++++++ .../mapper/CaseClinicalVideoMapper.xml | 2 +- 7 files changed, 209 insertions(+), 86 deletions(-) rename src/main/java/com/example/caseData/request/clinicalRequest/{getClinicalSearchPage.java => getClinicalArticleSearchPage.java} (90%) create mode 100644 src/main/java/com/example/caseData/request/clinicalRequest/getClinicalVideoSearchPage.java diff --git a/Dockerfile b/Dockerfile index de03883..997ec8a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,22 @@ FROM maven:3.9.2-eclipse-temurin-17-alpine AS builder WORKDIR /app +# 添加国内 Maven 镜像源 +RUN mkdir -p /root/.m2 && \ + echo ' \ + \ + \ + aliyun \ + * \ + aliyun maven \ + https://maven.aliyun.com/repository/public \ + \ + \ + ' > /root/.m2/settings.xml + # 将 pom.xml 和 src 目录复制到容器 COPY pom.xml . COPY src ./src diff --git a/src/main/java/com/example/caseData/controller/ClinicalController.java b/src/main/java/com/example/caseData/controller/ClinicalController.java index 64e8900..18ff6cf 100644 --- a/src/main/java/com/example/caseData/controller/ClinicalController.java +++ b/src/main/java/com/example/caseData/controller/ClinicalController.java @@ -14,9 +14,10 @@ import com.example.caseData.dto.caseClinicalVideoAuthor.CaseClinicalVideoAuthorD import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorDto; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.model.*; +import com.example.caseData.request.clinicalRequest.getClinicalArticleSearchPage; import com.example.caseData.request.clinicalRequest.getClinicalDoctorSearchPage; import com.example.caseData.request.clinicalRequest.getClinicalHospitalSearchPage; -import com.example.caseData.request.clinicalRequest.getClinicalSearchPage; +import com.example.caseData.request.clinicalRequest.getClinicalVideoSearchPage; import com.example.caseData.service.CaseClinicalArticleService; import com.example.caseData.service.CaseClinicalVideoService; import jakarta.annotation.Resource; @@ -71,12 +72,12 @@ public class ClinicalController extends BaseController { private CaseClinicalVideoService caseClinicalVideoService; /** - * 临床病例库-搜索 + * 临床病例库-搜索-文章 */ - @PostMapping("/clinical/search") - public Response> getClinicalSearchPage( + @PostMapping("/clinical/article/search") + public Response> getClinicalArticleSearchPage( @Validated() - @RequestBody getClinicalSearchPage request + @RequestBody getClinicalArticleSearchPage request ) { String userId = (String) httpServletRequest.getAttribute("userId"); @@ -84,88 +85,101 @@ public class ClinicalController extends BaseController { Map resultMap = new HashMap<>(); - if (request.getType() == 1){ - Page page = new Page<>(request.getPage(), request.getPageSize()); + Page page = new Page<>(request.getPage(), request.getPageSize()); - // 获取文章数据 - IPage resultPage = caseClinicalArticleDao.getCaseClinicalArticleSearchPage( - page, - request.getKeyword(), - request.getHospitalId(), - request.getDoctorId(), - request.handleOrder() - ); + // 获取文章数据 + IPage resultPage = caseClinicalArticleDao.getCaseClinicalArticleSearchPage( + page, + request.getKeyword(), + request.getHospitalId(), + request.getDoctorId(), + request.handleOrder() + ); - for (CaseClinicalArticleDto dto : resultPage.getRecords()) { - // 查找作者 - LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getArticleId()); - List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); - for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - author.setCaseClinicalDoctor(caseClinicalDoctor); - } - - List caseClinicalArticleAuthorListDto = CaseClinicalArticleAuthorDto.GetListDto(caseClinicalArticleAuthors); - dto.setAuthor(caseClinicalArticleAuthorListDto); - - // 获取用户收藏状态 - if (userId != null) { - // 检测用户是否已收藏过 - UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(dto.getArticleId(),userId); - if (userCollectClinicalArticle != null) { - dto.setCollect(true); - } - } + for (CaseClinicalArticleDto dto : resultPage.getRecords()) { + // 查找作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getArticleId()); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + author.setCaseClinicalDoctor(caseClinicalDoctor); } - resultMap.put("page", resultPage.getCurrent()); - resultMap.put("pageSize", resultPage.getSize()); - resultMap.put("total", resultPage.getTotal()); - resultMap.put("data", resultPage.getRecords()); - } else if (request.getType() == 2) { - Page page = new Page<>(request.getPage(), request.getPageSize()); + List caseClinicalArticleAuthorListDto = CaseClinicalArticleAuthorDto.GetListDto(caseClinicalArticleAuthors); + dto.setAuthor(caseClinicalArticleAuthorListDto); - // 获取视频数据 - IPage resultPage = caseClinicalVideoDao.getCaseClinicalVideoSearchPage( - page, - request.getKeyword(), - request.getHospitalId(), - request.getDoctorId(), - request.handleOrder() - ); - - for (CaseClinicalVideoDto dto : resultPage.getRecords()) { - // 查找作者 - LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, dto.getVideoId()); - List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); - for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - author.setCaseClinicalDoctor(caseClinicalDoctor); - } - - List caseClinicalVideoAuthorListDto = CaseClinicalVideoAuthorDto.GetListDto(caseClinicalVideoAuthors); - dto.setAuthor(caseClinicalVideoAuthorListDto); - - // 获取用户收藏状态 - if (userId != null) { - // 检测用户是否已收藏过 - UserCollectClinicalVideoModel userCollectClinicalVideo = caseClinicalVideoService.getUserCollectClinicalVideoStatus(dto.getVideoId(),userId); - if (userCollectClinicalVideo != null) { - dto.setCollect(true); - } + // 获取用户收藏状态 + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(dto.getArticleId(),userId); + if (userCollectClinicalArticle != null) { + dto.setCollect(true); } } - - resultMap.put("page", resultPage.getCurrent()); - resultMap.put("pageSize", resultPage.getSize()); - resultMap.put("total", resultPage.getTotal()); - resultMap.put("data", resultPage.getRecords()); } + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); + return Response.success(resultMap); + } + + /** + * 临床病例库-搜索-视频 + */ + @PostMapping("/clinical/video/search") + public Response> getClinicalVideoSearchPage( + @Validated() + @RequestBody getClinicalVideoSearchPage request + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + + request.validateForPage(); + + Map resultMap = new HashMap<>(); + + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取视频数据 + IPage resultPage = caseClinicalVideoDao.getCaseClinicalVideoSearchPage( + page, + request.getKeyword(), + request.getHospitalId(), + request.getDoctorId(), + request.handleOrder() + ); + + for (CaseClinicalVideoDto dto : resultPage.getRecords()) { + // 查找作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, dto.getVideoId()); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + author.setCaseClinicalDoctor(caseClinicalDoctor); + } + + List caseClinicalVideoAuthorListDto = CaseClinicalVideoAuthorDto.GetListDto(caseClinicalVideoAuthors); + dto.setAuthor(caseClinicalVideoAuthorListDto); + + // 获取用户收藏状态 + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectClinicalVideoModel userCollectClinicalVideo = caseClinicalVideoService.getUserCollectClinicalVideoStatus(dto.getVideoId(),userId); + if (userCollectClinicalVideo != null) { + dto.setCollect(true); + } + } + } + + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } diff --git a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalSearchPage.java b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalArticleSearchPage.java similarity index 90% rename from src/main/java/com/example/caseData/request/clinicalRequest/getClinicalSearchPage.java rename to src/main/java/com/example/caseData/request/clinicalRequest/getClinicalArticleSearchPage.java index 69b915e..a4f67ee 100644 --- a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalSearchPage.java +++ b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalArticleSearchPage.java @@ -12,7 +12,7 @@ import java.util.HashMap; import java.util.Map; @Data -public class getClinicalSearchPage { +public class getClinicalArticleSearchPage { // ✅ 分页参数 @Min(value = 1,message = "页码最小为 1") private Integer page = 1; @@ -33,12 +33,6 @@ public class getClinicalSearchPage { @JsonProperty("doctor_id") private String doctorId; - // 类型(1:文章 2:视频) - @NotNull(message = "类型不能为空") - @Min(value = 1, message = "入参错误") - @Max(value = 2, message = "入参错误") - private Integer type; - // 排序字段 private OrderRequest order; diff --git a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalDoctorSearchPage.java b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalDoctorSearchPage.java index 5c14f7f..4dfe159 100644 --- a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalDoctorSearchPage.java +++ b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalDoctorSearchPage.java @@ -30,8 +30,13 @@ public class getClinicalDoctorSearchPage { */ @Data public static class OrderRequest { + @JsonProperty("updated_at") private String updatedAt; // 更新时间排序 + + @JsonProperty("doctor_name") private String doctorName; // 医生名称 + + @JsonProperty("article_num") private String articleNum; // 数量-文章 diff --git a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalHospitalSearchPage.java b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalHospitalSearchPage.java index fcbc8e2..d603981 100644 --- a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalHospitalSearchPage.java +++ b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalHospitalSearchPage.java @@ -31,8 +31,13 @@ public class getClinicalHospitalSearchPage { */ @Data public static class OrderRequest { + @JsonProperty("updated_at") private String updatedAt; // 更新时间排序 + + @JsonProperty("hospital_name") private String hospitalName; // 医院名称 + + @JsonProperty("article_num") private String articleNum; // 数量-文章 diff --git a/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalVideoSearchPage.java b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalVideoSearchPage.java new file mode 100644 index 0000000..e2a3a75 --- /dev/null +++ b/src/main/java/com/example/caseData/request/clinicalRequest/getClinicalVideoSearchPage.java @@ -0,0 +1,89 @@ +package com.example.caseData.request.clinicalRequest; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class getClinicalVideoSearchPage { + // ✅ 分页参数 + @Min(value = 1,message = "页码最小为 1") + private Integer page = 1; + + @JsonProperty("page_size") + @Min(value = 1, message = "每页个数最小为 1") + private Integer pageSize = 20; + + // 标题/作者名称/疾病名称 + @JsonProperty("keyword") + private String keyword; + + // 医院id + @JsonProperty("hospital_id") + private String hospitalId; + + // 医生id + @JsonProperty("doctor_id") + private String doctorId; + + // 排序字段 + private OrderRequest order; + + /** + * 排序字段嵌套结构体 + */ + @Data + public static class OrderRequest { + private String createdAt; // 创建时间 + private String readNum; // 阅读量 + private String pushDate; // 发表时间 + + public Map toMap() { + Map map = new HashMap<>(); + if (StringUtils.hasText(createdAt)) { + map.put("a.created_at", createdAt); + } + + if (StringUtils.hasText(readNum)) { + map.put("a.read_num", readNum); + } + + if (StringUtils.hasText(pushDate)) { + map.put("a.push_date", pushDate); + } + + // 默认排序(如果用户未传递任何排序字段) + if (map.isEmpty()) { + map.put("a.updated_at", "desc"); + } + + return map; + } + } + + /** + * 获取排序字段,若无用户输入则使用默认排序 + */ + public Map handleOrder() { + return order != null ? order.toMap() : new OrderRequest().toMap(); + } + + // ✅ 校验分页参数 + public void validateForPage() { + // 如果 page 为空,设为默认值 1 + if (page == null) { + page = 1; + } + + if (pageSize == null) { + pageSize = 20; + } + } +} diff --git a/src/main/resources/mapper/CaseClinicalVideoMapper.xml b/src/main/resources/mapper/CaseClinicalVideoMapper.xml index e0cb6f5..f547155 100644 --- a/src/main/resources/mapper/CaseClinicalVideoMapper.xml +++ b/src/main/resources/mapper/CaseClinicalVideoMapper.xml @@ -25,7 +25,7 @@ WHERE a.video_status = 1 AND ( - a.article_title LIKE CONCAT('%', #{keyword}, '%') + a.video_title LIKE CONCAT('%', #{keyword}, '%') OR d.doctor_name LIKE CONCAT('%', #{keyword}, '%') OR l.label_name LIKE CONCAT('%', #{keyword}, '%') )