From fa8278939e9bbb5d0e52cc669930620fea675fa3 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 13 May 2025 14:32:26 +0800 Subject: [PATCH] 1 --- .../CaseClinicalArticleController.java | 67 +++++++- .../CaseClinicalVideoController.java | 75 ++++++++- .../controller/ClinicalController.java | 39 ++++- .../caseData/dao/CaseClinicalArticleDao.java | 23 +++ .../caseData/dao/CaseClinicalVideoDao.java | 22 +++ .../caseData/dao/StatsCaseClinicalDao.java | 22 +++ .../dao/StatsCaseClinicalDoctorDao.java | 22 +++ .../dao/StatsCaseClinicalHospitalDao.java | 22 +++ .../CaseClinicalArticleDto.java | 7 +- .../CaseClinicalVideoDto.java | 6 + .../addClinicalArticleComment.java | 11 ++ .../service/CaseClinicalArticleService.java | 138 +++++++++++++++- .../service/CaseClinicalVideoService.java | 150 ++++++++++++++++++ 13 files changed, 579 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/example/caseData/request/clinicalRequest/addClinicalArticleComment.java create mode 100644 src/main/java/com/example/caseData/service/CaseClinicalVideoService.java diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java index b30c797..540663d 100644 --- a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java +++ b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java @@ -5,11 +5,14 @@ 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.*; +import com.example.caseData.dto.T; import com.example.caseData.dto.basicHospital.BasicHospitalDto; import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; +import com.example.caseData.request.UserRequest; +import com.example.caseData.request.clinicalRequest.addClinicalArticleComment; import com.example.caseData.request.clinicalRequest.getClinicalHospitalSearchPage; import com.example.caseData.service.CaseClinicalArticleService; import com.example.caseData.service.UserService; @@ -44,7 +47,7 @@ public class CaseClinicalArticleController { private UserCollectClinicalArticleDao userCollectClinicalArticleDao; @Resource - private HttpServletRequest request; + private HttpServletRequest httpServletRequest; @Resource private CaseClinicalArticleService caseClinicalArticleService; @@ -77,10 +80,21 @@ public class CaseClinicalArticleController { author.setCaseClinicalDoctor(caseClinicalDoctor); } - article.setAuthor(caseClinicalArticleAuthors); + // 处理返回值 CaseClinicalArticleDto g = CaseClinicalArticleDto.GetDto(article); + + // 是否已收藏 + String userId = (String) httpServletRequest.getAttribute("userId"); + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(articleId,userId); + if (userCollectClinicalArticle != null) { + g.setCollect(true); + } + } + return Response.success(g); } @@ -88,11 +102,11 @@ public class CaseClinicalArticleController { * 临床病例库-文章-收藏 */ @PostMapping("/clinical/article/collect/{article_id}") - public Response AddClinicalArticleCollect( + public Response AddClinicalArticleCollect( @PathVariable("article_id") String articleId ) { - String userId = (String) request.getAttribute("userId"); + String userId = (String) httpServletRequest.getAttribute("userId"); if (userId == null) { return Response.error("操作失败"); @@ -105,4 +119,49 @@ public class CaseClinicalArticleController { return Response.success(); } + + /** + * 临床病例库-文章-取消收藏 + */ + @DeleteMapping("/clinical/article/collect/{article_id}") + public Response DeleteClinicalArticleCollect( + @PathVariable("article_id") String articleId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + boolean res = caseClinicalArticleService.DeleteClinicalArticleCollect(articleId,userId); + if (!res){ + return Response.error("操作失败"); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-评论 + */ + @PostMapping("/clinical/article/comment/{article_id}") + public Response AddClinicalArticleComment( + @PathVariable("article_id") String articleId, + @Validated() addClinicalArticleComment request + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + boolean res = caseClinicalArticleService.AddClinicalArticleComment(articleId,userId,request.getComment()); + if (!res){ + return Response.error("操作失败"); + } + + return Response.success(); + } } diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java b/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java index a6b1223..5d4cf1c 100644 --- a/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java +++ b/src/main/java/com/example/caseData/controller/CaseClinicalVideoController.java @@ -3,16 +3,14 @@ package com.example.caseData.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.caseData.common.Response; import com.example.caseData.dao.*; +import com.example.caseData.dto.T; import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto; -import com.example.caseData.model.BasicHospitalModel; -import com.example.caseData.model.CaseClinicalVideoAuthorModel; -import com.example.caseData.model.CaseClinicalVideoModel; -import com.example.caseData.model.CaseClinicalDoctorModel; +import com.example.caseData.model.*; +import com.example.caseData.service.CaseClinicalArticleService; +import com.example.caseData.service.CaseClinicalVideoService; import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -34,6 +32,12 @@ public class CaseClinicalVideoController { @Resource private BasicHospitalDao basicHospitalDao; + @Resource + private HttpServletRequest httpServletRequest; + + @Resource + private CaseClinicalVideoService caseClinicalVideoService; + /** * 临床病例库-视频-详情 */ @@ -65,6 +69,61 @@ public class CaseClinicalVideoController { article.setAuthor(caseClinicalVideoAuthors); CaseClinicalVideoDto g = CaseClinicalVideoDto.GetDto(article); + + // 是否已收藏 + String userId = (String) httpServletRequest.getAttribute("userId"); + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectClinicalVideoModel userCollectClinicalVideo = caseClinicalVideoService.getUserCollectClinicalVideoStatus(videoId,userId); + if (userCollectClinicalVideo != null) { + g.setCollect(true); + } + } + return Response.success(g); } + + /** + * 临床病例库-文章-收藏 + */ + @PostMapping("/clinical/video/collect/{video_id}") + public Response AddClinicalVideoCollect( + @PathVariable("video_id") String articleId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + boolean res = caseClinicalVideoService.AddClinicalVideoCollect(articleId,userId); + if (!res){ + return Response.error("操作失败"); + } + + return Response.success(); + } + + /** + * 临床病例库-文章-取消收藏 + */ + @DeleteMapping("/clinical/video/collect/{video_id}") + public Response DeleteClinicalVideoCollect( + @PathVariable("video_id") String videoId + ) { + + String userId = (String) httpServletRequest.getAttribute("userId"); + + if (userId == null) { + return Response.error("操作失败"); + } + + boolean res = caseClinicalVideoService.DeleteClinicalVideoCollect(videoId,userId); + if (!res){ + return Response.error("操作失败"); + } + + return Response.success(); + } } diff --git a/src/main/java/com/example/caseData/controller/ClinicalController.java b/src/main/java/com/example/caseData/controller/ClinicalController.java index 9d84e16..1ab2192 100644 --- a/src/main/java/com/example/caseData/controller/ClinicalController.java +++ b/src/main/java/com/example/caseData/controller/ClinicalController.java @@ -13,14 +13,14 @@ import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto; import com.example.caseData.dto.caseClinicalVideoAuthor.CaseClinicalVideoAuthorDto; import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorDto; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; -import com.example.caseData.model.BasicHospitalModel; -import com.example.caseData.model.CaseClinicalArticleAuthorModel; -import com.example.caseData.model.CaseClinicalDoctorModel; -import com.example.caseData.model.CaseClinicalVideoAuthorModel; +import com.example.caseData.model.*; 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.service.CaseClinicalArticleService; +import com.example.caseData.service.CaseClinicalVideoService; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -61,14 +61,25 @@ public class ClinicalController extends BaseController { @Resource private BasicHospitalDao basicHospitalDao; + @Resource + private HttpServletRequest httpServletRequest; + + @Resource + private CaseClinicalArticleService caseClinicalArticleService; + + @Resource + private CaseClinicalVideoService caseClinicalVideoService; + /** * 临床病例库-搜索 */ @PostMapping("/clinical/search") public Response> getClinicalSearchPage( - @Validated({getClinicalSearchPage.class}) + @Validated() @RequestBody getClinicalSearchPage request ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + request.validateForPage(); Map resultMap = new HashMap<>(); @@ -100,6 +111,15 @@ public class ClinicalController extends BaseController { List caseClinicalArticleAuthorListDto = CaseClinicalArticleAuthorDto.GetListDto(caseClinicalArticleAuthors); dto.setAuthor(caseClinicalArticleAuthorListDto); + + // 获取用户收藏状态 + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(dto.getArticleId(),userId); + if (userCollectClinicalArticle != null) { + dto.setCollect(true); + } + } } resultMap.put("page", resultPage.getCurrent()); @@ -131,6 +151,15 @@ public class ClinicalController extends BaseController { 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()); diff --git a/src/main/java/com/example/caseData/dao/CaseClinicalArticleDao.java b/src/main/java/com/example/caseData/dao/CaseClinicalArticleDao.java index 350fa75..385cd64 100644 --- a/src/main/java/com/example/caseData/dao/CaseClinicalArticleDao.java +++ b/src/main/java/com/example/caseData/dao/CaseClinicalArticleDao.java @@ -1,11 +1,13 @@ package com.example.caseData.dao; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.model.CaseClinicalArticleModel; import org.apache.ibatis.annotations.*; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; @@ -28,4 +30,25 @@ public interface CaseClinicalArticleDao extends BaseMapper order ); + + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE case_clinical_article SET ${field} = ${field} + #{numeral} WHERE article_id = #{articleId}") + int inc(@Param("articleId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); + + /** + * Dec 自减 + * + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 减少的数值 + * @return 更新的行数 + */ + @Update("UPDATE case_clinical_article SET ${field} = ${field} - #{numeral} WHERE article_id = #{articleId}") + int dec(@Param("articleId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/CaseClinicalVideoDao.java b/src/main/java/com/example/caseData/dao/CaseClinicalVideoDao.java index db02e66..0085a73 100644 --- a/src/main/java/com/example/caseData/dao/CaseClinicalVideoDao.java +++ b/src/main/java/com/example/caseData/dao/CaseClinicalVideoDao.java @@ -8,6 +8,7 @@ import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto; import com.example.caseData.model.CaseClinicalVideoModel; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.Map; @@ -28,4 +29,25 @@ public interface CaseClinicalVideoDao extends BaseMapper @Param("labelName") String labelName, @Param("order") Map order ); + + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE case_clinical_video SET ${field} = ${field} + #{numeral} WHERE video_id = #{videoId}") + int inc(@Param("videoId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); + + /** + * Dec 自减 + * + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 减少的数值 + * @return 更新的行数 + */ + @Update("UPDATE case_clinical_video SET ${field} = ${field} - #{numeral} WHERE video_id = #{videoId}") + int dec(@Param("videoId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/StatsCaseClinicalDao.java b/src/main/java/com/example/caseData/dao/StatsCaseClinicalDao.java index 8dcc8f2..c3d18df 100644 --- a/src/main/java/com/example/caseData/dao/StatsCaseClinicalDao.java +++ b/src/main/java/com/example/caseData/dao/StatsCaseClinicalDao.java @@ -2,6 +2,28 @@ package com.example.caseData.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.caseData.model.StatsCaseClinicalModel; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; public interface StatsCaseClinicalDao extends BaseMapper { + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical SET ${field} = ${field} + #{numeral} WHERE stats_id = #{statsId}") + int inc(@Param("statsId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); + + /** + * Dec 自减 + * + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 减少的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical SET ${field} = ${field} - #{numeral} WHERE stats_id = #{statsId}") + int dec(@Param("statsId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/StatsCaseClinicalDoctorDao.java b/src/main/java/com/example/caseData/dao/StatsCaseClinicalDoctorDao.java index ace59c5..02b0b0a 100644 --- a/src/main/java/com/example/caseData/dao/StatsCaseClinicalDoctorDao.java +++ b/src/main/java/com/example/caseData/dao/StatsCaseClinicalDoctorDao.java @@ -7,6 +7,7 @@ import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorD import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.model.StatsCaseClinicalDoctorModel; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.Map; @@ -22,4 +23,25 @@ public interface StatsCaseClinicalDoctorDao extends BaseMapper order ); + + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical_doctor SET ${field} = ${field} + #{numeral} WHERE doctor_id = #{doctorId}") + int inc(@Param("doctorId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); + + /** + * Dec 自减 + * + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 减少的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical_doctor SET ${field} = ${field} - #{numeral} WHERE doctor_id = #{doctorId}") + int dec(@Param("doctorId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dao/StatsCaseClinicalHospitalDao.java b/src/main/java/com/example/caseData/dao/StatsCaseClinicalHospitalDao.java index 6b7218e..a8b95bb 100644 --- a/src/main/java/com/example/caseData/dao/StatsCaseClinicalHospitalDao.java +++ b/src/main/java/com/example/caseData/dao/StatsCaseClinicalHospitalDao.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.model.StatsCaseClinicalHospitalModel; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import org.checkerframework.checker.units.qual.N; import java.util.Map; @@ -22,4 +23,25 @@ public interface StatsCaseClinicalHospitalDao extends BaseMapper order ); + + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical_hospital SET ${field} = ${field} + #{numeral} WHERE hospital_id = #{hospitalId}") + int inc(@Param("hospitalId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); + + /** + * Dec 自减 + * + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 减少的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_clinical_hospital SET ${field} = ${field} - #{numeral} WHERE hospital_id = #{hospitalId}") + int dec(@Param("hospitalId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); } \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/caseClinicalArticle/CaseClinicalArticleDto.java b/src/main/java/com/example/caseData/dto/caseClinicalArticle/CaseClinicalArticleDto.java index fe30b1f..53a858d 100644 --- a/src/main/java/com/example/caseData/dto/caseClinicalArticle/CaseClinicalArticleDto.java +++ b/src/main/java/com/example/caseData/dto/caseClinicalArticle/CaseClinicalArticleDto.java @@ -47,7 +47,6 @@ public class CaseClinicalArticleDto { * 发表时间 */ @JsonProperty("push_date") -// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime pushDate; /** @@ -74,6 +73,12 @@ public class CaseClinicalArticleDto { @JsonProperty("author") private List author; + /** + * 收藏状态 + */ + @JsonProperty("is_collect") + private boolean isCollect; + /** * 列表 */ diff --git a/src/main/java/com/example/caseData/dto/caseClinicalVideo/CaseClinicalVideoDto.java b/src/main/java/com/example/caseData/dto/caseClinicalVideo/CaseClinicalVideoDto.java index 2495f16..11c9026 100644 --- a/src/main/java/com/example/caseData/dto/caseClinicalVideo/CaseClinicalVideoDto.java +++ b/src/main/java/com/example/caseData/dto/caseClinicalVideo/CaseClinicalVideoDto.java @@ -78,6 +78,12 @@ public class CaseClinicalVideoDto { @JsonProperty("author") private List author; + /** + * 收藏状态 + */ + @JsonProperty("is_collect") + private boolean isCollect; + /** * 列表 */ diff --git a/src/main/java/com/example/caseData/request/clinicalRequest/addClinicalArticleComment.java b/src/main/java/com/example/caseData/request/clinicalRequest/addClinicalArticleComment.java new file mode 100644 index 0000000..d170f52 --- /dev/null +++ b/src/main/java/com/example/caseData/request/clinicalRequest/addClinicalArticleComment.java @@ -0,0 +1,11 @@ +package com.example.caseData.request.clinicalRequest; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class addClinicalArticleComment { + // 评论内容 + @JsonProperty("comment") + private String comment; +} diff --git a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java index d010f62..5d1bff2 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java @@ -1,19 +1,49 @@ package com.example.caseData.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.example.caseData.dao.UserCollectClinicalArticleDao; +import com.example.caseData.dao.*; +import com.example.caseData.model.CaseClinicalArticleAuthorModel; +import com.example.caseData.model.CaseClinicalDoctorModel; import com.example.caseData.model.UserCollectClinicalArticleModel; +import com.example.caseData.model.UserModel; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; -import static com.baomidou.mybatisplus.extension.toolkit.Db.save; + +import java.util.List; + +//import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById; +//import static com.baomidou.mybatisplus.extension.toolkit.Db.save; @Service public class CaseClinicalArticleService { @Resource private UserCollectClinicalArticleDao userCollectClinicalArticleDao; + @Resource + private CaseClinicalArticleDao caseClinicalArticleDao; + + @Resource + private StatsCaseClinicalDao statsCaseClinicalDao; + + @Resource + private UserDao userDao; + + @Resource + private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; + + @Resource + private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; + + @Resource + private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; + + @Resource + private CaseClinicalDoctorDao caseClinicalDoctorDao; + + /** * 新增收藏-临床病例库-文章 * @param articleId 文章id @@ -23,10 +53,7 @@ public class CaseClinicalArticleService { @Transactional public boolean AddClinicalArticleCollect(String articleId,String userId){ // 检测用户是否已收藏过 - LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); - mapQueryWrapper.eq(UserCollectClinicalArticleModel::getUserId, userId); - mapQueryWrapper.eq(UserCollectClinicalArticleModel::getArticleId, articleId); - UserCollectClinicalArticleModel userCollectClinicalArticle = userCollectClinicalArticleDao.selectOne(mapQueryWrapper); + UserCollectClinicalArticleModel userCollectClinicalArticle = getUserCollectClinicalArticleStatus(articleId,userId); if (userCollectClinicalArticle != null) { return true; } @@ -35,6 +62,103 @@ public class CaseClinicalArticleService { UserCollectClinicalArticleModel userCollectClinicalArticleData = new UserCollectClinicalArticleModel(); userCollectClinicalArticleData.setUserId(Long.valueOf(userId)); userCollectClinicalArticleData.setArticleId(Long.valueOf(articleId)); - return save(userCollectClinicalArticleData); + int res = userCollectClinicalArticleDao.insert(userCollectClinicalArticleData); + if (res <= 0){ + return false; + } + + // 增加文章收藏数 + caseClinicalArticleDao.inc(Long.valueOf(articleId),"collect_num",1); + + // 增加文章总收藏数 + statsCaseClinicalDao.inc(1L,"article_collect_num",1); + + // 获取文章作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 增加医院文章收藏数 + statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + + // 增加医生文章收藏数 + statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + } + + return true; + } + + /** + * 取消收藏-临床病例库-文章 + * @param articleId 文章id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean DeleteClinicalArticleCollect(String articleId,String userId){ + // 检测用户是否已收藏过 + UserCollectClinicalArticleModel userCollectClinicalArticle = getUserCollectClinicalArticleStatus(articleId,userId); + if (userCollectClinicalArticle == null) { + return true; + } + + // 删除收藏 + int res = userCollectClinicalArticleDao.deleteById(userCollectClinicalArticle.getCollectId()); + if (res <= 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + + // 减少文章收藏数 + caseClinicalArticleDao.dec(Long.valueOf(articleId),"collect_num",1); + + // 减少文章总收藏数 + statsCaseClinicalDao.dec(1L,"article_collect_num",1); + + // 获取文章作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 减少医院文章收藏数 + statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + + // 减少医生文章收藏数 + statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + } + + return true; + } + + /** + * 新增评论-临床病例库-文章 + * @param articleId 文章id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddClinicalArticleComment(String articleId,String userId,String comment){ + return true; + } + + /** + * 获取用户收藏数据 + * @param articleId 文章id + * @param userId 用户id + * @return bool false:未收藏 true:已收藏 + */ + public UserCollectClinicalArticleModel getUserCollectClinicalArticleStatus(String articleId,String userId){ + // 检测用户是否已收藏过 + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(UserCollectClinicalArticleModel::getUserId, userId); + mapQueryWrapper.eq(UserCollectClinicalArticleModel::getArticleId, articleId); + + return userCollectClinicalArticleDao.selectOne(mapQueryWrapper); } } diff --git a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java new file mode 100644 index 0000000..ad51042 --- /dev/null +++ b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java @@ -0,0 +1,150 @@ +package com.example.caseData.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.dao.*; +import com.example.caseData.model.*; +import com.example.caseData.model.UserCollectClinicalVideoModel; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import java.util.List; + +//import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById; +//import static com.baomidou.mybatisplus.extension.toolkit.Db.save; + +@Service +public class CaseClinicalVideoService { + @Resource + private UserCollectClinicalVideoDao userCollectClinicalVideoDao; + + @Resource + private CaseClinicalVideoDao caseClinicalVideoDao; + + @Resource + private StatsCaseClinicalDao statsCaseClinicalDao; + + @Resource + private UserDao userDao; + + @Resource + private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; + + @Resource + private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; + + @Resource + private CaseClinicalVideoAuthorDao caseClinicalVideoAuthorDao; + + @Resource + private CaseClinicalDoctorDao caseClinicalDoctorDao; + + + /** + * 新增收藏-临床病例库-视频 + * @param videoId 视频id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean AddClinicalVideoCollect(String videoId,String userId){ + // 检测用户是否已收藏过 + UserCollectClinicalVideoModel userCollectClinicalVideo = getUserCollectClinicalVideoStatus(videoId,userId); + if (userCollectClinicalVideo != null) { + return true; + } + + // 新增收藏 + UserCollectClinicalVideoModel userCollectClinicalVideoData = new UserCollectClinicalVideoModel(); + userCollectClinicalVideoData.setUserId(Long.valueOf(userId)); + userCollectClinicalVideoData.setVideoId(Long.valueOf(videoId)); + int res = userCollectClinicalVideoDao.insert(userCollectClinicalVideoData); + if (res <= 0){ + return false; + } + + // 增加视频收藏数 + caseClinicalVideoDao.inc(Long.valueOf(videoId),"collect_num",1); + + // 增加视频总收藏数 + statsCaseClinicalDao.inc(1L,"article_collect_num",1); + + // 获取视频作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, videoId); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 增加医院视频收藏数 + statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + + // 增加医生视频收藏数 + statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + } + + return true; + } + + /** + * 取消收藏-临床病例库-视频 + * @param videoId 视频id + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean DeleteClinicalVideoCollect(String videoId,String userId){ + // 检测用户是否已收藏过 + UserCollectClinicalVideoModel userCollectClinicalVideo = getUserCollectClinicalVideoStatus(videoId,userId); + if (userCollectClinicalVideo == null) { + return true; + } + + // 删除收藏 + int res = userCollectClinicalVideoDao.deleteById(userCollectClinicalVideo.getCollectId()); + if (res <= 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + + // 减少视频收藏数 + caseClinicalVideoDao.dec(Long.valueOf(videoId),"collect_num",1); + + // 减少视频总收藏数 + statsCaseClinicalDao.dec(1L,"article_collect_num",1); + + // 获取视频作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, videoId); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 减少医院视频收藏数 + statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); + + // 减少医生视频收藏数 + statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); + } + + return true; + } + + /** + * 获取用户收藏数据 + * @param videoId 视频id + * @param userId 用户id + * @return bool false:未收藏 true:已收藏 + */ + public UserCollectClinicalVideoModel getUserCollectClinicalVideoStatus(String videoId, String userId){ + // 检测用户是否已收藏过 + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(UserCollectClinicalVideoModel::getUserId, userId); + mapQueryWrapper.eq(UserCollectClinicalVideoModel::getVideoId, videoId); + + return userCollectClinicalVideoDao.selectOne(mapQueryWrapper); + } +}