From 25d03491bef49b16c32f3e89313e2f612ca78825 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Wed, 4 Jun 2025 15:10:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=88=91=E7=9A=84=E6=94=B6?= =?UTF-8?q?=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../caseData/controller/PublicController.java | 7 - .../caseData/controller/UserController.java | 197 ++++++++++++++++-- .../com/example/caseData/dao/CaseReadDao.java | 8 + .../dao/UserCollectClinicalArticleDao.java | 20 ++ .../dao/UserCollectClinicalVideoDao.java | 17 ++ .../caseData/dao/UserCollectExchangeDao.java | 17 ++ .../UserCollectClinicalArticleDto.java | 78 ++++++- .../UserCollectClinicalVideoDto.java | 72 ++++++- .../UserCollectExchangeDto.java | 100 +++++++++ .../example/caseData/model/CaseReadModel.java | 56 +++++ .../getClinicalArticleCommentPage.java | 2 + .../{ => UserRequest}/UserRequest.java | 2 +- .../UserRequest/getUserCollectSearchPage.java | 51 +++++ .../mapper/CaseClinicalArticleMapper.xml | 38 +++- .../UserCollectClinicalArticleMapper.xml | 52 +++++ .../UserCollectClinicalExchangeMapper.xml | 50 +++++ .../mapper/UserCollectClinicalVideoMapper.xml | 52 +++++ 17 files changed, 781 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/example/caseData/dao/CaseReadDao.java create mode 100644 src/main/java/com/example/caseData/dto/userCollectExchange/UserCollectExchangeDto.java create mode 100644 src/main/java/com/example/caseData/model/CaseReadModel.java rename src/main/java/com/example/caseData/request/{ => UserRequest}/UserRequest.java (96%) create mode 100644 src/main/java/com/example/caseData/request/UserRequest/getUserCollectSearchPage.java create mode 100644 src/main/resources/mapper/UserCollectClinicalExchangeMapper.xml diff --git a/src/main/java/com/example/caseData/controller/PublicController.java b/src/main/java/com/example/caseData/controller/PublicController.java index 655a472..5aaa9fb 100644 --- a/src/main/java/com/example/caseData/controller/PublicController.java +++ b/src/main/java/com/example/caseData/controller/PublicController.java @@ -1,17 +1,10 @@ package com.example.caseData.controller; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.caseData.common.Response; -import com.example.caseData.dao.UserDao; import com.example.caseData.dto.PublicDto; -import com.example.caseData.model.BasicHospitalModel; -import com.example.caseData.model.UserModel; import com.example.caseData.request.PublicRequest; -import com.example.caseData.request.UserRequest; import com.example.caseData.service.UserService; import jakarta.annotation.Resource; -import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/example/caseData/controller/UserController.java b/src/main/java/com/example/caseData/controller/UserController.java index 210375f..9a57ac4 100644 --- a/src/main/java/com/example/caseData/controller/UserController.java +++ b/src/main/java/com/example/caseData/controller/UserController.java @@ -1,27 +1,25 @@ package com.example.caseData.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.caseData.common.Response; -import com.example.caseData.dao.BasicHospitalDao; -import com.example.caseData.dao.CaseClinicalDoctorDao; -import com.example.caseData.dao.UserDao; +import com.example.caseData.dao.*; +import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; import com.example.caseData.dto.user.UserDto; import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; -import com.example.caseData.dto.user.UserDto; -import com.example.caseData.model.BasicHospitalModel; -import com.example.caseData.model.CaseClinicalDoctorModel; -import com.example.caseData.model.UserModel; -import com.example.caseData.request.UserRequest; +import com.example.caseData.dto.userCollectClinicalArticle.UserCollectClinicalArticleDto; +import com.example.caseData.dto.userCollectClinicalVideo.UserCollectClinicalVideoDto; +import com.example.caseData.dto.userCollectExchange.UserCollectExchangeDto; +import com.example.caseData.model.*; +import com.example.caseData.request.UserRequest.UserRequest; +import com.example.caseData.request.UserRequest.getUserCollectSearchPage; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -41,6 +39,21 @@ public class UserController extends BaseController { @Resource private CaseClinicalDoctorDao caseClinicalDoctorDao; + @Resource + private UserCollectClinicalArticleDao userCollectClinicalArticleDao; + + @Resource + private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; + + @Resource + private UserCollectClinicalVideoDao userCollectClinicalVideoDao; + + @Resource + private CaseClinicalVideoAuthorDao caseClinicalVideoAuthorDao; + + @Resource + private UserCollectExchangeDao userCollectExchangeDao; + // // 查询所有用户 // @GetMapping("/users") // public Response> getUserPage(@Validated({UserRequest.Page.class}) @ModelAttribute UserRequest request) { @@ -106,10 +119,158 @@ public class UserController extends BaseController { return Response.success(g); } - // 用户参与-病例交流 + /** + * 收藏记录-搜索-分页 + */ + @PostMapping("/user/collect/search") + public Response> getUserCollectSearchPage( + @Validated() + @RequestBody getUserCollectSearchPage request + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); - // 用户参与-文章病例库 - // 用户参与-视频病例库 - // 收藏搜索-分页 - // 浏览列表-分页 + request.validateForPage(); + + Map resultMap = new HashMap<>(); + + if (request.getType() == 1){ + // 文章 + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取文章数据 + IPage resultPage = userCollectClinicalArticleDao.getUserCollectClinicalArticleSearchPage( + page, + request.getKeyword(), + request.getHospitalId(), + request.getDoctorId(), + userId + ); + + for (UserCollectClinicalArticleDto dto : resultPage.getRecords()) { + UserCollectClinicalArticleDto.DataDto data = dto.getData(); + List dataAuthors = new ArrayList<>(); + + // 查找作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getId()); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + UserCollectClinicalArticleDto.DataAuthorDto dataAuthor = new UserCollectClinicalArticleDto.DataAuthorDto(); + + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + +// // 获取当前用户所属医院 +// BasicHospitalModel basicHospital = basicHospitalDao.selectById(caseClinicalDoctor.getHospitalId()); +// if (basicHospital == null) { +// return Response.error(); +// } + + dataAuthor.setDoctorName(caseClinicalDoctor.getDoctorName()); +// dataAuthor.setHospitalName(basicHospital.getHospitalName()); + + dataAuthors.add(dataAuthor); + } + + data.setAuthor(dataAuthors); + } + + 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()); + + // 获取文章数据 + IPage resultPage = userCollectClinicalVideoDao.getUserCollectClinicalVideoSearchPage( + page, + request.getKeyword(), + request.getHospitalId(), + request.getDoctorId(), + userId + ); + + for (UserCollectClinicalVideoDto dto : resultPage.getRecords()) { + UserCollectClinicalVideoDto.DataDto data = dto.getData(); + List dataAuthors = new ArrayList<>(); + + // 查找作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, dto.getId()); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + UserCollectClinicalVideoDto.DataAuthorDto dataAuthor = new UserCollectClinicalVideoDto.DataAuthorDto(); + + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + +// // 获取当前用户所属医院 +// BasicHospitalModel basicHospital = basicHospitalDao.selectById(caseClinicalDoctor.getHospitalId()); +// if (basicHospital == null) { +// return Response.error(); +// } + + dataAuthor.setDoctorName(caseClinicalDoctor.getDoctorName()); +// dataAuthor.setHospitalName(basicHospital.getHospitalName()); + + dataAuthors.add(dataAuthor); + } + + data.setAuthor(dataAuthors); + } + + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); + } else if (request.getType() == 3) { + // 病例交流 + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取文章数据 + IPage resultPage = userCollectExchangeDao.getUserCollectExchangeSearchPage( + page, + request.getKeyword(), + request.getHospitalId(), + request.getDoctorId(), + userId + ); + + for (UserCollectExchangeDto dto : resultPage.getRecords()) { + UserCollectExchangeDto.DataDto data = dto.getData(); + List dataAuthors = new ArrayList<>(); + + UserModel user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return Response.error(); + } + + // 获取当前用户所属医院 + BasicHospitalModel basicHospital = basicHospitalDao.selectById(user.getHospitalId()); + if (basicHospital == null) { + return Response.error(); + } + + UserCollectExchangeDto.DataAuthorDto dataAuthor = new UserCollectExchangeDto.DataAuthorDto(); + dataAuthor.setDoctorName(user.getUserName()); + dataAuthor.setHospitalName(basicHospital.getHospitalName()); + dataAuthors.add(dataAuthor); + + data.setAuthor(dataAuthors); + } + + resultMap.put("page", resultPage.getCurrent()); + resultMap.put("pageSize", resultPage.getSize()); + resultMap.put("total", resultPage.getTotal()); + resultMap.put("data", resultPage.getRecords()); + }else{ + return Response.error(); + } + + return Response.success(resultMap); + } + + // 浏览记录-搜索-分页 } diff --git a/src/main/java/com/example/caseData/dao/CaseReadDao.java b/src/main/java/com/example/caseData/dao/CaseReadDao.java new file mode 100644 index 0000000..7fe7a41 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/CaseReadDao.java @@ -0,0 +1,8 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.CaseReadModel; +import com.example.caseData.model.UserModel; + +public interface CaseReadDao extends BaseMapper { +} diff --git a/src/main/java/com/example/caseData/dao/UserCollectClinicalArticleDao.java b/src/main/java/com/example/caseData/dao/UserCollectClinicalArticleDao.java index ffa34ad..5be0605 100644 --- a/src/main/java/com/example/caseData/dao/UserCollectClinicalArticleDao.java +++ b/src/main/java/com/example/caseData/dao/UserCollectClinicalArticleDao.java @@ -1,7 +1,27 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; +import com.example.caseData.dto.userCollectClinicalArticle.UserCollectClinicalArticleDto; import com.example.caseData.model.UserCollectClinicalArticleModel; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; public interface UserCollectClinicalArticleDao extends BaseMapper { + /** + * 临床病例库-搜索 + * @param page 分页数据 + * @param keyword 搜索关键词-标题/医生名称/标签名称 + */ + IPage getUserCollectClinicalArticleSearchPage( + Page page, + @Param("keyword") String keyword, + @Param("hospitalId") String hospitalId, + @Param("doctorId") String doctorId, + @Param("userId") String userId + ); + } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/UserCollectClinicalVideoDao.java b/src/main/java/com/example/caseData/dao/UserCollectClinicalVideoDao.java index c062fdc..f6673ff 100644 --- a/src/main/java/com/example/caseData/dao/UserCollectClinicalVideoDao.java +++ b/src/main/java/com/example/caseData/dao/UserCollectClinicalVideoDao.java @@ -1,7 +1,24 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.example.caseData.dto.userCollectClinicalArticle.UserCollectClinicalArticleDto; +import com.example.caseData.dto.userCollectClinicalVideo.UserCollectClinicalVideoDto; import com.example.caseData.model.UserCollectClinicalVideoModel; +import org.apache.ibatis.annotations.Param; public interface UserCollectClinicalVideoDao extends BaseMapper { + /** + * 临床病例库-搜索 + * @param page 分页数据 + * @param keyword 搜索关键词-标题/医生名称/标签名称 + */ + IPage getUserCollectClinicalVideoSearchPage( + Page page, + @Param("keyword") String keyword, + @Param("hospitalId") String hospitalId, + @Param("doctorId") String doctorId, + @Param("userId") String userId + ); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java b/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java index 2e9f605..6ae6afd 100644 --- a/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java +++ b/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java @@ -1,10 +1,27 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.example.caseData.dto.userCollectClinicalArticle.UserCollectClinicalArticleDto; +import com.example.caseData.dto.userCollectExchange.UserCollectExchangeDto; import com.example.caseData.model.CaseExchangeModel; import com.example.caseData.model.UserCollectExchangeModel; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface UserCollectExchangeDao extends BaseMapper { + /** + * 临床病例库-搜索 + * @param page 分页数据 + * @param keyword 搜索关键词-标题/医生名称/标签名称 + */ + IPage getUserCollectExchangeSearchPage( + Page page, + @Param("keyword") String keyword, + @Param("hospitalId") String hospitalId, + @Param("doctorId") String doctorId, + @Param("userId") String userId + ); } diff --git a/src/main/java/com/example/caseData/dto/userCollectClinicalArticle/UserCollectClinicalArticleDto.java b/src/main/java/com/example/caseData/dto/userCollectClinicalArticle/UserCollectClinicalArticleDto.java index 3454442..7b38215 100644 --- a/src/main/java/com/example/caseData/dto/userCollectClinicalArticle/UserCollectClinicalArticleDto.java +++ b/src/main/java/com/example/caseData/dto/userCollectClinicalArticle/UserCollectClinicalArticleDto.java @@ -1,8 +1,14 @@ package com.example.caseData.dto.userCollectClinicalArticle; +import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; +import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; +import com.example.caseData.request.caseExchangeRequest.addCaseExchange; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class UserCollectClinicalArticleDto { @@ -10,19 +16,19 @@ public class UserCollectClinicalArticleDto { * 主键id */ @JsonProperty("collect_id") - private Long collectId; + private String collectId; /** * 用户id */ @JsonProperty("user_id") - private Long userId; + private String userId; /** - * 临床文章id + * 对应的id */ - @JsonProperty("article_id") - private Long articleId; + @JsonProperty("id") + private String id; /** * 创建时间 @@ -35,4 +41,64 @@ public class UserCollectClinicalArticleDto { */ @JsonProperty("updated_at") private LocalDateTime updatedAt; -} \ No newline at end of file + + /** + * 数据 + */ + @JsonProperty("data") + private DataDto data; + + @Data + public static class DataDto { + @JsonProperty("id") + private String id; + + /** + * 标题 + */ + @JsonProperty("title") + private String title; + + /** + * 发布时间 + */ + @JsonProperty("push_date") + private LocalDateTime pushDate; + + /** + * 阅读量 + */ + @JsonProperty("read_num") + private Integer readNum; + + /** + * 收藏量 + */ + @JsonProperty("collect_num") + private Integer collectNum; + + /** + * 作者 + */ + @JsonProperty("author") + private List author; + } + + /** + * 作者 + */ + @Data + public static class DataAuthorDto { + /** + * 医生名称 + */ + @JsonProperty("doctor_name") + private String doctorName; + + /** + * 医院名称 + */ + @JsonProperty("hospital_name") + private String hospitalName; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/userCollectClinicalVideo/UserCollectClinicalVideoDto.java b/src/main/java/com/example/caseData/dto/userCollectClinicalVideo/UserCollectClinicalVideoDto.java index aec0e73..03330b9 100644 --- a/src/main/java/com/example/caseData/dto/userCollectClinicalVideo/UserCollectClinicalVideoDto.java +++ b/src/main/java/com/example/caseData/dto/userCollectClinicalVideo/UserCollectClinicalVideoDto.java @@ -1,8 +1,10 @@ package com.example.caseData.dto.userCollectClinicalVideo; +import com.example.caseData.dto.userCollectClinicalArticle.UserCollectClinicalArticleDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class UserCollectClinicalVideoDto { @@ -10,19 +12,19 @@ public class UserCollectClinicalVideoDto { * 主键id */ @JsonProperty("collect_id") - private Long collectId; + private String collectId; /** * 用户id */ @JsonProperty("user_id") - private Long userId; + private String userId; /** - * 临床视频id + * 对应的id */ - @JsonProperty("video_id") - private Long videoId; + @JsonProperty("id") + private String id; /** * 创建时间 @@ -35,4 +37,64 @@ public class UserCollectClinicalVideoDto { */ @JsonProperty("updated_at") private LocalDateTime updatedAt; + + /** + * 数据 + */ + @JsonProperty("data") + private UserCollectClinicalVideoDto.DataDto data; + + @Data + public static class DataDto { + @JsonProperty("id") + private String id; + + /** + * 标题 + */ + @JsonProperty("title") + private String title; + + /** + * 发布时间 + */ + @JsonProperty("push_date") + private LocalDateTime pushDate; + + /** + * 阅读量 + */ + @JsonProperty("read_num") + private Integer readNum; + + /** + * 收藏量 + */ + @JsonProperty("collect_num") + private Integer collectNum; + + /** + * 作者 + */ + @JsonProperty("author") + private List author; + } + + /** + * 作者 + */ + @Data + public static class DataAuthorDto { + /** + * 医生名称 + */ + @JsonProperty("doctor_name") + private String doctorName; + + /** + * 医院名称 + */ + @JsonProperty("hospital_name") + private String hospitalName; + } } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/userCollectExchange/UserCollectExchangeDto.java b/src/main/java/com/example/caseData/dto/userCollectExchange/UserCollectExchangeDto.java new file mode 100644 index 0000000..9f70a18 --- /dev/null +++ b/src/main/java/com/example/caseData/dto/userCollectExchange/UserCollectExchangeDto.java @@ -0,0 +1,100 @@ +package com.example.caseData.dto.userCollectExchange; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class UserCollectExchangeDto { + /** + * 主键id + */ + @JsonProperty("collect_id") + private String collectId; + + /** + * 用户id + */ + @JsonProperty("user_id") + private String userId; + + /** + * 对应的id + */ + @JsonProperty("id") + private String id; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 数据 + */ + @JsonProperty("data") + private DataDto data; + + @Data + public static class DataDto { + @JsonProperty("id") + private String id; + + /** + * 标题 + */ + @JsonProperty("title") + private String title; + + /** + * 发布时间 + */ + @JsonProperty("push_date") + private LocalDateTime pushDate; + + /** + * 阅读量 + */ + @JsonProperty("read_num") + private Integer readNum; + + /** + * 收藏量 + */ + @JsonProperty("collect_num") + private Integer collectNum; + + /** + * 作者 + */ + @JsonProperty("author") + private List author; + } + + /** + * 作者 + */ + @Data + public static class DataAuthorDto { + /** + * 医生名称 + */ + @JsonProperty("doctor_name") + private String doctorName; + + /** + * 医院名称 + */ + @JsonProperty("hospital_name") + private String hospitalName; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/CaseReadModel.java b/src/main/java/com/example/caseData/model/CaseReadModel.java new file mode 100644 index 0000000..dac8fff --- /dev/null +++ b/src/main/java/com/example/caseData/model/CaseReadModel.java @@ -0,0 +1,56 @@ +package com.example.caseData.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 病例-阅读记录实体类 + */ +@Data // Lombok注解,用于自动生成getter/setter方法等 +@TableName("`case_read`") // 指定数据库表名 +public class CaseReadModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long readId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 关联id(可能为文章/视频/病例交流) + */ + private Long id; + + /** + * 类型(1:文章 2:视频 3:病例交流) + */ + private Integer type; + + /** + * 阅读次数 + */ + @TableField("read_num") + private Integer readNum; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonProperty("updated_at") + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java index 116a0e0..5d64b5b 100644 --- a/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java +++ b/src/main/java/com/example/caseData/request/CaseClinicalArticleRequest/getClinicalArticleCommentPage.java @@ -4,6 +4,7 @@ package com.example.caseData.request.CaseClinicalArticleRequest; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; import org.springframework.util.StringUtils; @@ -30,6 +31,7 @@ public class getClinicalArticleCommentPage { private String rootId; // 是否需要子评论(0:否 1:是) + @NotNull(message = "错误") @JsonProperty("is_have_sub_comment") private Integer isHaveSubComment; diff --git a/src/main/java/com/example/caseData/request/UserRequest.java b/src/main/java/com/example/caseData/request/UserRequest/UserRequest.java similarity index 96% rename from src/main/java/com/example/caseData/request/UserRequest.java rename to src/main/java/com/example/caseData/request/UserRequest/UserRequest.java index f8812e1..907ec81 100644 --- a/src/main/java/com/example/caseData/request/UserRequest.java +++ b/src/main/java/com/example/caseData/request/UserRequest/UserRequest.java @@ -1,4 +1,4 @@ -package com.example.caseData.request; +package com.example.caseData.request.UserRequest; import jakarta.validation.constraints.*; import lombok.Data; diff --git a/src/main/java/com/example/caseData/request/UserRequest/getUserCollectSearchPage.java b/src/main/java/com/example/caseData/request/UserRequest/getUserCollectSearchPage.java new file mode 100644 index 0000000..79a0da1 --- /dev/null +++ b/src/main/java/com/example/caseData/request/UserRequest/getUserCollectSearchPage.java @@ -0,0 +1,51 @@ +package com.example.caseData.request.UserRequest; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class getUserCollectSearchPage { + // ✅ 分页参数 + @Min(value = 1,message = "页码最小为 1") + private Integer page = 1; + + @JsonProperty("page_size") + @Min(value = 1, message = "每页个数最小为 1") + private Integer pageSize = 20; + + // 类型(1:文章 2:视频 3:病例交流) + @NotNull(message = "错误") + @JsonProperty("type") + private Integer type; + + // 标题/作者名称/疾病名称 + @JsonProperty("keyword") + private String keyword; + + // 医院id + @JsonProperty("hospital_id") + private String hospitalId; + + // 医生id + @JsonProperty("doctor_id") + private String doctorId; + + // ✅ 校验分页参数 + public void validateForPage() { + // 如果 page 为空,设为默认值 1 + if (page == null) { + page = 1; + } + + if (pageSize == null) { + pageSize = 20; + } + } +} diff --git a/src/main/resources/mapper/CaseClinicalArticleMapper.xml b/src/main/resources/mapper/CaseClinicalArticleMapper.xml index 6dba696..437c3e0 100644 --- a/src/main/resources/mapper/CaseClinicalArticleMapper.xml +++ b/src/main/resources/mapper/CaseClinicalArticleMapper.xml @@ -10,12 +10,46 @@ + SELECT + uc.collect_id, + uc.user_id, + a.article_id, + a.article_title, + a.read_num, + a.collect_num, + a.push_date, + uc.created_at + FROM user_collect_clinical_article uc + JOIN ( + SELECT DISTINCT a.article_id + FROM case_clinical_article a + LEFT JOIN case_clinical_article_author caa ON a.article_id = caa.article_id + LEFT JOIN case_clinical_doctor d ON caa.doctor_id = d.doctor_id + LEFT JOIN case_clinical_article_label l ON a.article_id = l.article_id + WHERE a.article_status = 1 + + AND ( + a.article_title LIKE CONCAT('%', #{keyword}, '%') + OR d.doctor_name LIKE CONCAT('%', #{keyword}, '%') + OR l.label_name LIKE CONCAT('%', #{keyword}, '%') + ) + + + AND d.hospital_id = ${hospitalId} + + + AND d.doctor_id = ${doctorId} + + ) AS filtered ON uc.article_id = filtered.article_id + JOIN case_clinical_article a ON uc.article_id = a.article_id + WHERE uc.user_id = #{userId} + ORDER BY uc.created_at desc + \ No newline at end of file diff --git a/src/main/resources/mapper/UserCollectClinicalExchangeMapper.xml b/src/main/resources/mapper/UserCollectClinicalExchangeMapper.xml new file mode 100644 index 0000000..11494cf --- /dev/null +++ b/src/main/resources/mapper/UserCollectClinicalExchangeMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserCollectClinicalVideoMapper.xml b/src/main/resources/mapper/UserCollectClinicalVideoMapper.xml index 5d6f310..169bc17 100644 --- a/src/main/resources/mapper/UserCollectClinicalVideoMapper.xml +++ b/src/main/resources/mapper/UserCollectClinicalVideoMapper.xml @@ -1,5 +1,57 @@ + + + + + + + + + + + + + + + + \ No newline at end of file