From 257b08d28ee1b45ec82c423dc7f2b18752b336bb Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 29 May 2025 14:43:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E7=97=85=E4=BE=8B?= =?UTF-8?q?=E4=BA=A4=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CaseClinicalArticleController.java | 2 +- .../controller/CaseExchangeController.java | 309 ++++++++++++++++++ .../StatsCaseExchangeController.java | 63 ++++ .../caseData/controller/UserController.java | 2 + .../example/caseData/dao/CaseExchangeDao.java | 30 ++ .../caseData/dao/CaseExchangeLabelDao.java | 9 + .../caseData/dao/CaseExchangeVoteDao.java | 16 + .../dao/CaseExchangeVoteOptionDao.java | 10 + .../caseData/dao/StatsCaseExchangeDao.java | 30 ++ .../dao/StatsCaseExchangeUserDao.java | 17 + .../caseData/dao/UserCollectExchangeDao.java | 10 + .../caseData/dao/UserCommentExchangeDao.java | 17 + .../caseData/dao/UserVoteExchangeDao.java | 11 + .../dto/caseExchange/CaseExchangeDto.java | 169 ++++++++++ .../caseExchangeVote/CaseExchangeVoteDto.java | 118 +++++++ .../CaseExchangeVoteOptionDto.java | 98 ++++++ .../StatsCaseClinicalDto.java | 13 + .../StatsCaseExchangeDto.java | 90 +++++ .../StatsCaseExchangeUserDto.java | 96 ++++++ .../exception/GlobalExceptionHandler.java | 36 +- .../caseData/model/BasicHospitalModel.java | 2 + .../model/BasicSensitiveWordModel.java | 2 + .../model/CaseClinicalArticleAuthorModel.java | 2 +- .../model/CaseClinicalArticleLabelModel.java | 2 + .../model/CaseClinicalArticleModel.java | 2 +- .../model/CaseClinicalDoctorModel.java | 2 +- .../model/CaseClinicalVideoLabelModel.java | 2 +- .../model/CaseClinicalVideoModel.java | 2 +- .../model/CaseExchangeLabelModel.java | 52 +++ .../caseData/model/CaseExchangeModel.java | 90 +++++ .../caseData/model/CaseExchangeVoteModel.java | 58 ++++ .../model/CaseExchangeVoteOptionModel.java | 52 +++ .../model/StatsCaseClinicalDoctorModel.java | 2 + .../model/StatsCaseClinicalHospitalModel.java | 2 +- .../model/StatsCaseClinicalModel.java | 14 + .../model/StatsCaseExchangeModel.java | 51 +++ .../model/StatsCaseExchangeUserModel.java | 57 ++++ .../UserCollectClinicalArticleModel.java | 2 + .../model/UserCollectClinicalVideoModel.java | 2 + .../model/UserCollectExchangeModel.java | 45 +++ .../UserCommentClinicalArticleModel.java | 2 + .../model/UserCommentClinicalVideoModel.java | 2 + .../model/UserCommentExchangeModel.java | 103 ++++++ .../caseData/model/UserVoteExchangeModel.java | 57 ++++ .../getCaseExchangeSearchPage.java | 88 +++++ .../caseData/service/CaseExchangeService.java | 30 ++ .../resources/mapper/CaseExchangeMapper.xml | 31 ++ 47 files changed, 1877 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/example/caseData/controller/CaseExchangeController.java create mode 100644 src/main/java/com/example/caseData/controller/StatsCaseExchangeController.java create mode 100644 src/main/java/com/example/caseData/dao/CaseExchangeDao.java create mode 100644 src/main/java/com/example/caseData/dao/CaseExchangeLabelDao.java create mode 100644 src/main/java/com/example/caseData/dao/CaseExchangeVoteDao.java create mode 100644 src/main/java/com/example/caseData/dao/CaseExchangeVoteOptionDao.java create mode 100644 src/main/java/com/example/caseData/dao/StatsCaseExchangeDao.java create mode 100644 src/main/java/com/example/caseData/dao/StatsCaseExchangeUserDao.java create mode 100644 src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java create mode 100644 src/main/java/com/example/caseData/dao/UserCommentExchangeDao.java create mode 100644 src/main/java/com/example/caseData/dao/UserVoteExchangeDao.java create mode 100644 src/main/java/com/example/caseData/dto/caseExchange/CaseExchangeDto.java create mode 100644 src/main/java/com/example/caseData/dto/caseExchangeVote/CaseExchangeVoteDto.java create mode 100644 src/main/java/com/example/caseData/dto/caseExchangeVoteOption/CaseExchangeVoteOptionDto.java create mode 100644 src/main/java/com/example/caseData/dto/statsCaseExchange/StatsCaseExchangeDto.java create mode 100644 src/main/java/com/example/caseData/dto/statsCaseExchangeUser/StatsCaseExchangeUserDto.java create mode 100644 src/main/java/com/example/caseData/model/CaseExchangeLabelModel.java create mode 100644 src/main/java/com/example/caseData/model/CaseExchangeModel.java create mode 100644 src/main/java/com/example/caseData/model/CaseExchangeVoteModel.java create mode 100644 src/main/java/com/example/caseData/model/CaseExchangeVoteOptionModel.java create mode 100644 src/main/java/com/example/caseData/model/StatsCaseExchangeModel.java create mode 100644 src/main/java/com/example/caseData/model/StatsCaseExchangeUserModel.java create mode 100644 src/main/java/com/example/caseData/model/UserCollectExchangeModel.java create mode 100644 src/main/java/com/example/caseData/model/UserCommentExchangeModel.java create mode 100644 src/main/java/com/example/caseData/model/UserVoteExchangeModel.java create mode 100644 src/main/java/com/example/caseData/request/caseExchangeRequest/getCaseExchangeSearchPage.java create mode 100644 src/main/java/com/example/caseData/service/CaseExchangeService.java create mode 100644 src/main/resources/mapper/CaseExchangeMapper.xml diff --git a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java index c321d67..2e76268 100644 --- a/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java +++ b/src/main/java/com/example/caseData/controller/CaseClinicalArticleController.java @@ -59,7 +59,7 @@ public class CaseClinicalArticleController { * 临床病例库-文章-详情 */ @GetMapping("/clinical/article/{article_id}") - public Response getClinicalHospitalSearchPage( + public Response getClinicalArticle( @PathVariable("article_id") String articleId ) { diff --git a/src/main/java/com/example/caseData/controller/CaseExchangeController.java b/src/main/java/com/example/caseData/controller/CaseExchangeController.java new file mode 100644 index 0000000..02c07b1 --- /dev/null +++ b/src/main/java/com/example/caseData/controller/CaseExchangeController.java @@ -0,0 +1,309 @@ +package com.example.caseData.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.caseClinicalArticle.CaseClinicalArticleDto; +import com.example.caseData.dto.caseExchange.CaseExchangeDto; +import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto; +import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto; +import com.example.caseData.model.*; +import com.example.caseData.request.caseExchangeRequest.getCaseExchangeSearchPage; +import com.example.caseData.service.CaseExchangeService; +import com.example.caseData.utils.Replace; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class CaseExchangeController { + @Resource + private HttpServletRequest httpServletRequest; + + @Resource + private CaseExchangeDao caseExchangeDao; + + @Resource + private UserDao userDao; + + @Resource + private BasicHospitalDao basicHospitalDao; + + @Resource + private CaseExchangeService caseExchangeService; + + @Resource + private CaseExchangeVoteDao caseExchangeVoteDao; + + @Resource + private CaseExchangeVoteOptionDao caseExchangeVoteOptionDao; + + @Resource + private UserVoteExchangeDao userVoteExchangeDao; + + /** + * 临床病例库-病例交流-搜索 + */ + @PostMapping("/exchange/search") + public Response> getCaseExchangeSearchPage( + @Validated() + @RequestBody getCaseExchangeSearchPage request + ) { + UserModel user = new UserModel(); + BasicHospitalModel basicHospital = new BasicHospitalModel(); + + String userId = (String) httpServletRequest.getAttribute("userId"); + if (userId != null) { + user = userDao.selectById(Long.valueOf(userId)); + if (user == null) { + return Response.error(); + } + + // 获取当前用户所属医院 + basicHospital = basicHospitalDao.selectById(user.getHospitalId()); + if (basicHospital == null) { + return Response.error(); + } + } + + request.validateForPage(); + + Map resultMap = new HashMap<>(); + + Page page = new Page<>(request.getPage(), request.getPageSize()); + + // 获取文章数据 + IPage resultPage = caseExchangeDao.getCaseExchangeSearchPage( + page, + request.getKeyword(), + request.getUserId(), + request.handleOrder() + ); + + for (CaseExchangeDto dto : resultPage.getRecords()) { + // 查找用户所属医院 + if (userId != null){ + if (!userId.equals(dto.getUserId())){ + user = userDao.selectById(dto.getUserId()); + if (user == null) { + return Response.error(); + } + + // 获取当前用户所属医院 + basicHospital = basicHospitalDao.selectById(user.getHospitalId()); + if (basicHospital == null) { + return Response.error(); + } + } + }else{ + user = userDao.selectById(dto.getUserId()); + if (user == null) { + return Response.error(); + } + + // 获取当前用户所属医院 + basicHospital = basicHospitalDao.selectById(user.getHospitalId()); + if (basicHospital == null) { + return Response.error(); + } + } + + dto.setAvatar(Replace.addOssDomain(user.getAvatar())); + dto.setUserName(user.getUserName()); + dto.setHospitalName(basicHospital.getHospitalName()); + + // 获取用户收藏状态 + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectExchangeModel userCollectExchangeModel = caseExchangeService.getUserCollectExchangeStatus(dto.getExchangeId(),userId); + if (userCollectExchangeModel != 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); + } + + /** + * 病例交流-详情 + */ + @GetMapping("/exchange/{exchange_id}") + public Response getExchange( + @PathVariable("exchange_id") String exchangeId + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + + // 获取文章数据 + CaseExchangeModel caseExchange = caseExchangeDao.selectById(exchangeId); + if (caseExchange == null) { + return Response.error(); + } + + // 查找用户 + UserModel user = userDao.selectById(caseExchange.getUserId()); + if (user == null) { + return Response.error(); + } + + // 获取当前用户所属医院 + BasicHospitalModel basicHospital = basicHospitalDao.selectById(user.getHospitalId()); + if (basicHospital == null) { + return Response.error(); + } + + // 获取投票数据 + LambdaQueryWrapper caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>(); + caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, caseExchange.getExchangeId()); + CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper); + if (caseExchangeVote != null) { + // 检测是否过期 + if (caseExchangeVote.getEndTime() == null) { + return Response.error(); + } + + // 获取选项 + LambdaQueryWrapper caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>(); + caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId()); + List caseExchangeVoteOptions = caseExchangeVoteOptionDao.selectList(caseExchangeVoteOptionQueryWrapper); + if (caseExchangeVoteOptions.isEmpty()) { + return Response.error(); + } + caseExchangeVote.setCaseExchangeVoteOption(caseExchangeVoteOptions); + + caseExchange.setCaseExchangeVote(caseExchangeVote); + } + + // 处理返回值 + CaseExchangeDto g = CaseExchangeDto.GetDto(caseExchange); + + g.setAvatar(Replace.addOssDomain(user.getAvatar())); + g.setUserName(user.getUserName()); + g.setHospitalName(basicHospital.getHospitalName()); + + // 获取用户收藏状态 + if (userId != null) { + // 检测用户是否已收藏过 + UserCollectExchangeModel userCollectExchangeModel = caseExchangeService.getUserCollectExchangeStatus(String.valueOf(caseExchange.getExchangeId()),userId); + if (userCollectExchangeModel != null) { + g.setCollect(true); + } + } + + // 过期状态 + if (g.getCaseExchangeVote().getEndTime().isAfter(LocalDateTime.now())) { + g.getCaseExchangeVote().setIsEnabled(1); + }else{ + g.getCaseExchangeVote().setIsEnabled(0); + } + + // 用户投票状态 + if (userId != null) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(UserVoteExchangeModel::getUserId, userId); + queryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId); + queryWrapper.eq(UserVoteExchangeModel::getVoteId, g.getCaseExchangeVote().getVoteId()); + UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(queryWrapper); + if (userVoteExchange != null) { + // 已投过票 + g.getCaseExchangeVote().setIsEnabled(0); + } + } + + // 处理投票数据 + Integer voteNum = 0; + for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVote().getCaseExchangeVoteOption()){ + voteNum += dto.getVoteNum(); + } + + for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVote().getCaseExchangeVoteOption()){ + Integer proportion = (int) (Math.round((double) dto.getVoteNum() / voteNum * 10000) / 100.0); + dto.setProportion(proportion); + } + + return Response.success(g); + } + + /** + * 病例交流-详情-投票数据 + */ + @GetMapping("/exchange/vote/{exchange_id}") + public Response getExchangeVote( + @PathVariable("exchange_id") String exchangeId + ) { + String userId = (String) httpServletRequest.getAttribute("userId"); + + // 获取投票数据 + LambdaQueryWrapper caseExchangeVoteQueryWrapper = new LambdaQueryWrapper<>(); + caseExchangeVoteQueryWrapper.eq(CaseExchangeVoteModel::getExchangeId, exchangeId); + CaseExchangeVoteModel caseExchangeVote = caseExchangeVoteDao.selectOne(caseExchangeVoteQueryWrapper); + if (caseExchangeVote == null) { + return Response.success(); + } + + // 检测是否过期 + if (caseExchangeVote.getEndTime() == null) { + return Response.error(); + } + + // 获取选项 + LambdaQueryWrapper caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>(); + caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId()); + List caseExchangeVoteOptions = caseExchangeVoteOptionDao.selectList(caseExchangeVoteOptionQueryWrapper); + if (caseExchangeVoteOptions.isEmpty()) { + return Response.error(); + } + caseExchangeVote.setCaseExchangeVoteOption(caseExchangeVoteOptions); + + // 处理返回值 + CaseExchangeVoteDto g = CaseExchangeVoteDto.GetDto(caseExchangeVote); + + // 过期状态 + if (g.getEndTime().isAfter(LocalDateTime.now())) { + g.setIsEnabled(1); + }else{ + g.setIsEnabled(0); + } + + // 用户投票状态 + if (userId != null) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(UserVoteExchangeModel::getUserId, userId); + queryWrapper.eq(UserVoteExchangeModel::getExchangeId, exchangeId); + queryWrapper.eq(UserVoteExchangeModel::getVoteId, g.getVoteId()); + UserVoteExchangeModel userVoteExchange = userVoteExchangeDao.selectOne(queryWrapper); + if (userVoteExchange != null) { + // 已投过票 + g.setIsEnabled(0); + } + } + + // 处理投票数据 + Integer voteNum = 0; + for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVoteOption()){ + voteNum += dto.getVoteNum(); + } + + for (CaseExchangeVoteOptionDto dto : g.getCaseExchangeVoteOption()){ + Integer proportion = (int) (Math.round((double) dto.getVoteNum() / voteNum * 10000) / 100.0); + dto.setProportion(proportion); + } + + return Response.success(g); + } + + +} diff --git a/src/main/java/com/example/caseData/controller/StatsCaseExchangeController.java b/src/main/java/com/example/caseData/controller/StatsCaseExchangeController.java new file mode 100644 index 0000000..a388f68 --- /dev/null +++ b/src/main/java/com/example/caseData/controller/StatsCaseExchangeController.java @@ -0,0 +1,63 @@ +package com.example.caseData.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.common.Response; +import com.example.caseData.dao.StatsCaseExchangeDao; +import com.example.caseData.dao.StatsCaseExchangeUserDao; +import com.example.caseData.dao.StatsCaseExchangeUserDao; +import com.example.caseData.dto.statsCaseExchange.StatsCaseExchangeDto; +import com.example.caseData.dto.statsCaseExchange.StatsCaseExchangeDto; +import com.example.caseData.dto.statsCaseExchangeUser.StatsCaseExchangeUserDto; +import com.example.caseData.model.StatsCaseExchangeUserModel; +import com.example.caseData.model.StatsCaseExchangeModel; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +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; + +@RestController +@RequestMapping("/api") +public class StatsCaseExchangeController extends BaseController { + @Resource + private StatsCaseExchangeDao statsCaseExchangeDao; + + @Resource + private StatsCaseExchangeUserDao statsCaseExchangeUserDao; + + @Resource + private HttpServletRequest httpServletRequest; + + /** + * 病例交流-统计 + */ + @GetMapping("/exchange/stats") + public Response getClinicalStats(){ + LambdaQueryWrapper statsCaseExchangeQueryWrapper = new LambdaQueryWrapper<>(); + StatsCaseExchangeModel statsCaseExchange = statsCaseExchangeDao.selectOne(statsCaseExchangeQueryWrapper); + + StatsCaseExchangeDto g = StatsCaseExchangeDto.GetDto(statsCaseExchange); + + return Response.success(g); + } + + /** + * 病例交流-用户 + */ + @GetMapping("/exchange/stats/user") + public Response getClinicalStatsUser(){ + String userId = (String) httpServletRequest.getAttribute("userId"); + if (userId != null) { + return Response.error(); + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StatsCaseExchangeUserModel::getUserId, userId); + StatsCaseExchangeUserModel statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(queryWrapper); + + StatsCaseExchangeUserDto g = StatsCaseExchangeUserDto.GetDto(statsCaseExchangeUser); + + return Response.success(g); + } +} diff --git a/src/main/java/com/example/caseData/controller/UserController.java b/src/main/java/com/example/caseData/controller/UserController.java index 80fcd30..5947a7c 100644 --- a/src/main/java/com/example/caseData/controller/UserController.java +++ b/src/main/java/com/example/caseData/controller/UserController.java @@ -89,4 +89,6 @@ public class UserController extends BaseController { return Response.success(g); } + + } diff --git a/src/main/java/com/example/caseData/dao/CaseExchangeDao.java b/src/main/java/com/example/caseData/dao/CaseExchangeDao.java new file mode 100644 index 0000000..08097b8 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/CaseExchangeDao.java @@ -0,0 +1,30 @@ +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.caseExchange.CaseExchangeDto; +import com.example.caseData.model.CaseClinicalArticleModel; +import com.example.caseData.model.CaseExchangeModel; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +@Mapper +public interface CaseExchangeDao extends BaseMapper { + + /** + * 临床病例库-搜索 + * @param page 分页数据 + * @param keyword 搜索关键词-标题/医生名称/标签名称 + * @param order 排序 + */ + IPage getCaseExchangeSearchPage( + Page page, + @Param("keyword") String keyword, + @Param("userId") String userId, + @Param("order") Map order + ); +} diff --git a/src/main/java/com/example/caseData/dao/CaseExchangeLabelDao.java b/src/main/java/com/example/caseData/dao/CaseExchangeLabelDao.java new file mode 100644 index 0000000..0b2fa47 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/CaseExchangeLabelDao.java @@ -0,0 +1,9 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.CaseExchangeModel; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CaseExchangeLabelDao extends BaseMapper { +} diff --git a/src/main/java/com/example/caseData/dao/CaseExchangeVoteDao.java b/src/main/java/com/example/caseData/dao/CaseExchangeVoteDao.java new file mode 100644 index 0000000..f9c9650 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/CaseExchangeVoteDao.java @@ -0,0 +1,16 @@ +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.caseExchange.CaseExchangeDto; +import com.example.caseData.model.CaseExchangeModel; +import com.example.caseData.model.CaseExchangeVoteModel; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +@Mapper +public interface CaseExchangeVoteDao extends BaseMapper { +} diff --git a/src/main/java/com/example/caseData/dao/CaseExchangeVoteOptionDao.java b/src/main/java/com/example/caseData/dao/CaseExchangeVoteOptionDao.java new file mode 100644 index 0000000..ac5f91e --- /dev/null +++ b/src/main/java/com/example/caseData/dao/CaseExchangeVoteOptionDao.java @@ -0,0 +1,10 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.CaseExchangeVoteModel; +import com.example.caseData.model.CaseExchangeVoteOptionModel; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CaseExchangeVoteOptionDao extends BaseMapper { +} diff --git a/src/main/java/com/example/caseData/dao/StatsCaseExchangeDao.java b/src/main/java/com/example/caseData/dao/StatsCaseExchangeDao.java new file mode 100644 index 0000000..b984f18 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/StatsCaseExchangeDao.java @@ -0,0 +1,30 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.StatsCaseClinicalModel; +import com.example.caseData.model.StatsCaseExchangeModel; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +public interface StatsCaseExchangeDao extends BaseMapper { + /** + * Inc 自增 + * @param articleId 文章 ID + * @param field 字段名称 + * @param numeral 增加的数值 + * @return 更新的行数 + */ + @Update("UPDATE stats_case_exchange 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_exchange 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/StatsCaseExchangeUserDao.java b/src/main/java/com/example/caseData/dao/StatsCaseExchangeUserDao.java new file mode 100644 index 0000000..0246966 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/StatsCaseExchangeUserDao.java @@ -0,0 +1,17 @@ +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.caseExchange.CaseExchangeDto; +import com.example.caseData.model.CaseExchangeModel; +import com.example.caseData.model.StatsCaseExchangeUserModel; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +@Mapper +public interface StatsCaseExchangeUserDao extends BaseMapper { + +} diff --git a/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java b/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java new file mode 100644 index 0000000..2e9f605 --- /dev/null +++ b/src/main/java/com/example/caseData/dao/UserCollectExchangeDao.java @@ -0,0 +1,10 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.CaseExchangeModel; +import com.example.caseData.model.UserCollectExchangeModel; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserCollectExchangeDao extends BaseMapper { +} diff --git a/src/main/java/com/example/caseData/dao/UserCommentExchangeDao.java b/src/main/java/com/example/caseData/dao/UserCommentExchangeDao.java new file mode 100644 index 0000000..120faea --- /dev/null +++ b/src/main/java/com/example/caseData/dao/UserCommentExchangeDao.java @@ -0,0 +1,17 @@ +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.caseExchange.CaseExchangeDto; +import com.example.caseData.model.CaseExchangeModel; +import com.example.caseData.model.UserCommentExchangeModel; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +@Mapper +public interface UserCommentExchangeDao extends BaseMapper { + +} diff --git a/src/main/java/com/example/caseData/dao/UserVoteExchangeDao.java b/src/main/java/com/example/caseData/dao/UserVoteExchangeDao.java new file mode 100644 index 0000000..0834a2b --- /dev/null +++ b/src/main/java/com/example/caseData/dao/UserVoteExchangeDao.java @@ -0,0 +1,11 @@ +package com.example.caseData.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.caseData.model.UserCommentExchangeModel; +import com.example.caseData.model.UserVoteExchangeModel; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserVoteExchangeDao extends BaseMapper { + +} diff --git a/src/main/java/com/example/caseData/dto/caseExchange/CaseExchangeDto.java b/src/main/java/com/example/caseData/dto/caseExchange/CaseExchangeDto.java new file mode 100644 index 0000000..c8cccdb --- /dev/null +++ b/src/main/java/com/example/caseData/dto/caseExchange/CaseExchangeDto.java @@ -0,0 +1,169 @@ +package com.example.caseData.dto.caseExchange; + +import cn.hutool.core.bean.BeanUtil; +import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; +import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto; +import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto; +import com.example.caseData.model.CaseExchangeModel; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class CaseExchangeDto { + /** + * 主键id + */ + @JsonProperty("exchange_id") + private String exchangeId; + + /** + * 用户id + */ + @JsonProperty("user_id") + private String userId; + + /** + * 标题 + */ + @JsonProperty("exchange_title") + private String exchangeTitle; + + /** + * 状态(1:正常 2:禁用) + */ + @JsonProperty("exchange_status") + private Integer exchangeStatus; + + /** + * 阅读量 + */ + @JsonProperty("read_num") + private Integer readNum; + + /** + * 收藏量 + */ + @JsonProperty("collect_num") + private Integer collectNum; + + /** + * 发表时间 + */ + @JsonProperty("push_date") + private LocalDateTime pushDate; + + /** + * 内容 + */ + @JsonProperty("exchange_content") + private String exchangeContent; + + /** + * 总结 + */ + @JsonProperty("exchange_summary") + private String exchangeSummary; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 用户名称 + */ + @JsonProperty("user_name") + private String userName; // 用户名称 + + /** + * 头像 + */ + @JsonProperty("avatar") + private String avatar; // 头像 + + /** + * 所属医院名称 + */ + @JsonProperty("hospital_name") + private String hospitalName; // 所属医院名称 + + /** + * 收藏状态 + */ + @JsonProperty("is_collect") + private boolean isCollect; + + /** + * 投票数据 + */ + @JsonProperty("case_exchange_vote") + private CaseExchangeVoteDto caseExchangeVote; + + /** + * 列表 + */ + public static List GetListDto(List models) { + if (models == null || models.isEmpty()) { + return Collections.emptyList(); + } + + return models.stream() + .map(model -> { + CaseExchangeDto dto = BeanUtil.copyProperties(model, CaseExchangeDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getExchangeId() != null) { + dto.setExchangeId(String.valueOf(model.getExchangeId())); // Long -> String + } + + dto.setExchangeContent(""); + dto.setExchangeSummary(""); + + // 投票 + if (model.getCaseExchangeVote() != null) { + CaseExchangeVoteDto listDto = CaseExchangeVoteDto.GetDto(model.getCaseExchangeVote()); + dto.setCaseExchangeVote(listDto); + } + + return dto; + }) + .collect(Collectors.toList()); + } + + /** + * 详情 + */ + public static CaseExchangeDto GetDto(CaseExchangeModel model) { + if (model == null) { + return null; + } + + CaseExchangeDto dto = BeanUtil.copyProperties(model, CaseExchangeDto.class); + + // 类型转换示例 + if (model.getExchangeId() != null) { + dto.setExchangeId(String.valueOf(model.getExchangeId())); // Long -> String + } + + // 投票 + if (model.getCaseExchangeVote() != null) { + CaseExchangeVoteDto listDto = CaseExchangeVoteDto.GetDto(model.getCaseExchangeVote()); + dto.setCaseExchangeVote(listDto); + } + + return dto; + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/caseExchangeVote/CaseExchangeVoteDto.java b/src/main/java/com/example/caseData/dto/caseExchangeVote/CaseExchangeVoteDto.java new file mode 100644 index 0000000..1ec360f --- /dev/null +++ b/src/main/java/com/example/caseData/dto/caseExchangeVote/CaseExchangeVoteDto.java @@ -0,0 +1,118 @@ +package com.example.caseData.dto.caseExchangeVote; + +import cn.hutool.core.bean.BeanUtil; +import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; +import com.example.caseData.dto.caseExchange.CaseExchangeDto; +import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto; +import com.example.caseData.model.CaseExchangeModel; +import com.example.caseData.model.CaseExchangeVoteModel; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class CaseExchangeVoteDto { + /** + * 主键id + */ + @JsonProperty("vote_id") + private String voteId; + + /** + * 病例交流id + */ + @JsonProperty("exchange_id") + private String exchangeId; + + /** + * 选项标题 + */ + @JsonProperty("vote_title") + private String voteTitle; + + /** + * 结束投票时间 + */ + @JsonProperty("end_time") + private LocalDateTime endTime; + + /** + * 是否开启中(0:否 1:是) + */ + @JsonProperty("is_enabled") + private Integer isEnabled; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 选项 + */ + @JsonProperty("case_exchange_vote_option") + private List caseExchangeVoteOption; + + /** + * 列表 + */ + public static List GetListDto(List models) { + if (models == null || models.isEmpty()) { + return Collections.emptyList(); + } + + return models.stream() + .map(model -> { + CaseExchangeVoteDto dto = BeanUtil.copyProperties(model, CaseExchangeVoteDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getVoteId() != null) { + dto.setVoteId(String.valueOf(model.getVoteId())); // Long -> String + } + + // 选项 + if (model.getCaseExchangeVoteOption() != null && !model.getCaseExchangeVoteOption().isEmpty()) { + List caseExchangeVoteOptionListDto = CaseExchangeVoteOptionDto.GetListDto(model.getCaseExchangeVoteOption()); + dto.setCaseExchangeVoteOption(caseExchangeVoteOptionListDto); + } + + return dto; + }) + .collect(Collectors.toList()); + } + + /** + * 详情 + */ + public static CaseExchangeVoteDto GetDto(CaseExchangeVoteModel model) { + if (model == null) { + return null; + } + + CaseExchangeVoteDto dto = BeanUtil.copyProperties(model, CaseExchangeVoteDto.class); + + // 类型转换示例 + if (model.getVoteId() != null) { + dto.setVoteId(String.valueOf(model.getVoteId())); // Long -> String + } + + // 选项 + if (model.getCaseExchangeVoteOption() != null && !model.getCaseExchangeVoteOption().isEmpty()) { + List caseExchangeVoteOptionListDto = CaseExchangeVoteOptionDto.GetListDto(model.getCaseExchangeVoteOption()); + dto.setCaseExchangeVoteOption(caseExchangeVoteOptionListDto); + } + + return dto; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/caseExchangeVoteOption/CaseExchangeVoteOptionDto.java b/src/main/java/com/example/caseData/dto/caseExchangeVoteOption/CaseExchangeVoteOptionDto.java new file mode 100644 index 0000000..6ee32de --- /dev/null +++ b/src/main/java/com/example/caseData/dto/caseExchangeVoteOption/CaseExchangeVoteOptionDto.java @@ -0,0 +1,98 @@ +package com.example.caseData.dto.caseExchangeVoteOption; + +import cn.hutool.core.bean.BeanUtil; +import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto; +import com.example.caseData.model.CaseExchangeVoteModel; +import com.example.caseData.model.CaseExchangeVoteOptionModel; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class CaseExchangeVoteOptionDto { + /** + * 主键id + */ + @JsonProperty("option_id") + private String optionId; + + /** + * 投票id + */ + @JsonProperty("vote_id") + private String voteId; + + /** + * 选项 + */ + @JsonProperty("option_value") + private String optionValue; + + /** + * 票数 + */ + @JsonProperty("vote_num") + private Integer voteNum; + + /** + * 被选择占比 + */ + @JsonProperty("proportion") + private Integer proportion; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 列表 + */ + public static List GetListDto(List models) { + if (models == null || models.isEmpty()) { + return Collections.emptyList(); + } + + return models.stream() + .map(model -> { + CaseExchangeVoteOptionDto dto = BeanUtil.copyProperties(model, CaseExchangeVoteOptionDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getOptionId() != null) { + dto.setOptionId(String.valueOf(model.getOptionId())); // Long -> String + } + + return dto; + }) + .collect(Collectors.toList()); + } + + /** + * 详情 + */ + public static CaseExchangeVoteOptionDto GetDto(CaseExchangeVoteOptionModel model) { + if (model == null) { + return null; + } + + CaseExchangeVoteOptionDto dto = BeanUtil.copyProperties(model, CaseExchangeVoteOptionDto.class); + + // 类型转换示例 + if (model.getOptionId() != null) { + dto.setOptionId(String.valueOf(model.getOptionId())); // Long -> String + } + + return dto; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/statsCaseClinical/StatsCaseClinicalDto.java b/src/main/java/com/example/caseData/dto/statsCaseClinical/StatsCaseClinicalDto.java index bfd475a..4df61db 100644 --- a/src/main/java/com/example/caseData/dto/statsCaseClinical/StatsCaseClinicalDto.java +++ b/src/main/java/com/example/caseData/dto/statsCaseClinical/StatsCaseClinicalDto.java @@ -1,6 +1,7 @@ package com.example.caseData.dto.statsCaseClinical; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.annotation.TableField; import com.example.caseData.model.StatsCaseClinicalModel; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @@ -17,6 +18,12 @@ public class StatsCaseClinicalDto { @JsonProperty("stats_id") private String statsId; + /** + * 数量-文章 + */ + @JsonProperty("article_num") + private Integer articleNum; + /** * 总阅读量-文章 */ @@ -29,6 +36,12 @@ public class StatsCaseClinicalDto { @JsonProperty("article_collect_num") private Integer articleCollectNum; + /** + * 数量-视频 + */ + @JsonProperty("video_num") + private Integer videoNum; + /** * 总阅读量-视频 */ diff --git a/src/main/java/com/example/caseData/dto/statsCaseExchange/StatsCaseExchangeDto.java b/src/main/java/com/example/caseData/dto/statsCaseExchange/StatsCaseExchangeDto.java new file mode 100644 index 0000000..c6c7c2d --- /dev/null +++ b/src/main/java/com/example/caseData/dto/statsCaseExchange/StatsCaseExchangeDto.java @@ -0,0 +1,90 @@ +package com.example.caseData.dto.statsCaseExchange; + +import cn.hutool.core.bean.BeanUtil; +import com.example.caseData.model.StatsCaseExchangeModel; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class StatsCaseExchangeDto { + /** + * 主键id + */ + @JsonProperty("stats_id") + private String statsId; + + /** + * 数量-病例交流 + */ + @JsonProperty("exchange_num") + private Integer exchangeNum; + + /** + * 总阅读量-病例交流 + */ + @JsonProperty("exchange_read_num") + private Integer exchangeReadNum; + + /** + * 总收藏量-病例交流 + */ + @JsonProperty("exchange_collect_num") + private Integer exchangeCollectNum; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 列表 + */ + public static List GetListDto(List models) { + if (models == null || models.isEmpty()) { + return Collections.emptyList(); + } + + return models.stream() + .map(model -> { + StatsCaseExchangeDto dto = BeanUtil.copyProperties(model, StatsCaseExchangeDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getStatsId() != null) { + dto.setStatsId(String.valueOf(model.getStatsId())); // Long -> String + } + + return dto; + }) + .collect(Collectors.toList()); + } + + /** + * 详情 + */ + public static StatsCaseExchangeDto GetDto(StatsCaseExchangeModel model) { + if (model == null) { + return null; + } + + StatsCaseExchangeDto dto = BeanUtil.copyProperties(model, StatsCaseExchangeDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getStatsId() != null) { + dto.setStatsId(String.valueOf(model.getStatsId())); // Long -> String + } + + return dto; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/dto/statsCaseExchangeUser/StatsCaseExchangeUserDto.java b/src/main/java/com/example/caseData/dto/statsCaseExchangeUser/StatsCaseExchangeUserDto.java new file mode 100644 index 0000000..5640cd7 --- /dev/null +++ b/src/main/java/com/example/caseData/dto/statsCaseExchangeUser/StatsCaseExchangeUserDto.java @@ -0,0 +1,96 @@ +package com.example.caseData.dto.statsCaseExchangeUser; + +import cn.hutool.core.bean.BeanUtil; +import com.example.caseData.model.StatsCaseExchangeUserModel; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class StatsCaseExchangeUserDto { + /** + * 主键id + */ + @JsonProperty("stats_id") + private String statsId; + + /** + * 用户id + */ + @JsonProperty("user_id") + private String userId; + + /** + * 数量-病例交流 + */ + @JsonProperty("exchange_num") + private Integer exchangeNum; + + /** + * 总阅读量-病例交流 + */ + @JsonProperty("exchange_read_num") + private Integer exchangeReadNum; + + /** + * 总收藏量-病例交流 + */ + @JsonProperty("exchange_collect_num") + private Integer exchangeCollectNum; + + /** + * 创建时间 + */ + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 列表 + */ + public static List GetListDto(List models) { + if (models == null || models.isEmpty()) { + return Collections.emptyList(); + } + + return models.stream() + .map(model -> { + StatsCaseExchangeUserDto dto = BeanUtil.copyProperties(model, StatsCaseExchangeUserDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getStatsId() != null) { + dto.setStatsId(String.valueOf(model.getStatsId())); // Long -> String + } + + return dto; + }) + .collect(Collectors.toList()); + } + + /** + * 详情 + */ + public static StatsCaseExchangeUserDto GetDto(StatsCaseExchangeUserModel model) { + if (model == null) { + return null; + } + + StatsCaseExchangeUserDto dto = BeanUtil.copyProperties(model, StatsCaseExchangeUserDto.class); + + // 示例:手动处理字段类型不一致 + if (model.getStatsId() != null) { + dto.setStatsId(String.valueOf(model.getStatsId())); // Long -> String + } + + return dto; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/exception/GlobalExceptionHandler.java b/src/main/java/com/example/caseData/exception/GlobalExceptionHandler.java index 8db4101..02fe25b 100644 --- a/src/main/java/com/example/caseData/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/example/caseData/exception/GlobalExceptionHandler.java @@ -26,24 +26,6 @@ import java.util.Map; @Slf4j @ControllerAdvice public class GlobalExceptionHandler { - // 处理所有未捕获的异常 - @ExceptionHandler(Exception.class) - public ResponseEntity> handleGlobalException(Exception ex) { - System.out.print(ExceptionUtils.getStackTrace(ex)); - Map errorResponse = new HashMap<>(); - - String message = ExceptionUtils.getStackTrace(ex); - if (EnvUtil.isProd()) { - log.error("error:{}", message); - message = "内部错误"; - } - - errorResponse.put("message", "异常"); - errorResponse.put("data", null); - errorResponse.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse); - } - // 处理 404 请求(接口不存在) @ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ResponseStatus(HttpStatus.NOT_FOUND) @@ -92,4 +74,22 @@ public class GlobalExceptionHandler { errorResponse.put("code", ex.getCode()); return ResponseEntity.ok(errorResponse); } + + // 处理所有未捕获的异常 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleGlobalException(Exception ex) { + System.out.print(ExceptionUtils.getStackTrace(ex)); + Map errorResponse = new HashMap<>(); + + String message = ExceptionUtils.getStackTrace(ex); + if (EnvUtil.isProd()) { + log.error("error:{}", message); + message = "内部错误"; + } + + errorResponse.put("message", "异常"); + errorResponse.put("data", null); + errorResponse.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse); + } } diff --git a/src/main/java/com/example/caseData/model/BasicHospitalModel.java b/src/main/java/com/example/caseData/model/BasicHospitalModel.java index cb4b095..ce37db7 100644 --- a/src/main/java/com/example/caseData/model/BasicHospitalModel.java +++ b/src/main/java/com/example/caseData/model/BasicHospitalModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -67,6 +68,7 @@ public class BasicHospitalModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/BasicSensitiveWordModel.java b/src/main/java/com/example/caseData/model/BasicSensitiveWordModel.java index d9c1618..db93c5e 100644 --- a/src/main/java/com/example/caseData/model/BasicSensitiveWordModel.java +++ b/src/main/java/com/example/caseData/model/BasicSensitiveWordModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -24,6 +25,7 @@ public class BasicSensitiveWordModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalArticleAuthorModel.java b/src/main/java/com/example/caseData/model/CaseClinicalArticleAuthorModel.java index 60ccec8..a659c5e 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalArticleAuthorModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalArticleAuthorModel.java @@ -31,7 +31,7 @@ public class CaseClinicalArticleAuthorModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalArticleLabelModel.java b/src/main/java/com/example/caseData/model/CaseClinicalArticleLabelModel.java index b341b13..d1eb57c 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalArticleLabelModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalArticleLabelModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -35,6 +36,7 @@ public class CaseClinicalArticleLabelModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalArticleModel.java b/src/main/java/com/example/caseData/model/CaseClinicalArticleModel.java index a254032..4130cfd 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalArticleModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalArticleModel.java @@ -53,7 +53,7 @@ public class CaseClinicalArticleModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalDoctorModel.java b/src/main/java/com/example/caseData/model/CaseClinicalDoctorModel.java index d0f076b..b85e9ab 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalDoctorModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalDoctorModel.java @@ -52,7 +52,7 @@ public class CaseClinicalDoctorModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalVideoLabelModel.java b/src/main/java/com/example/caseData/model/CaseClinicalVideoLabelModel.java index c6da9c1..97b970b 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalVideoLabelModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalVideoLabelModel.java @@ -37,7 +37,7 @@ public class CaseClinicalVideoLabelModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseClinicalVideoModel.java b/src/main/java/com/example/caseData/model/CaseClinicalVideoModel.java index fc289a3..e6084b9 100644 --- a/src/main/java/com/example/caseData/model/CaseClinicalVideoModel.java +++ b/src/main/java/com/example/caseData/model/CaseClinicalVideoModel.java @@ -56,7 +56,7 @@ public class CaseClinicalVideoModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/CaseExchangeLabelModel.java b/src/main/java/com/example/caseData/model/CaseExchangeLabelModel.java new file mode 100644 index 0000000..6dff85b --- /dev/null +++ b/src/main/java/com/example/caseData/model/CaseExchangeLabelModel.java @@ -0,0 +1,52 @@ +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_exchange_label`") // 指定数据库表名 +public class CaseExchangeLabelModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long exchangeLabelId; + + /** + * 临床文章id + */ + @TableField("exchange_id") + private Long exchangeId; + + /** + * app唯一标识 + */ + @TableField("app_iden") + private String appIden; + + /** + * 标签名称 + */ + @TableField("label_name") + private String labelName; + + /** + * 创建时间 + */ + @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/model/CaseExchangeModel.java b/src/main/java/com/example/caseData/model/CaseExchangeModel.java new file mode 100644 index 0000000..0ad6462 --- /dev/null +++ b/src/main/java/com/example/caseData/model/CaseExchangeModel.java @@ -0,0 +1,90 @@ +package com.example.caseData.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 病例库-病例交流实体类 + */ +@Data // Lombok注解,用于自动生成getter/setter方法等 +@TableName("`case_exchange`") // 指定数据库表名 +public class CaseExchangeModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long exchangeId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 标题 + */ + @TableField("exchange_title") + private String exchangeTitle; + + /** + * 状态(1:正常 2:禁用) + */ + @TableField("exchange_status") + private Integer exchangeStatus; + + /** + * 阅读量 + */ + @TableField("read_num") + private Integer readNum; + + /** + * 收藏量 + */ + @TableField("collect_num") + private Integer collectNum; + + /** + * 发表时间 + */ + @TableField("push_date") + private LocalDateTime pushDate; + + /** + * 内容 + */ + @TableField("exchange_content") + private String exchangeContent; + + /** + * 总结 + */ + @TableField("exchange_summary") + private String exchangeSummary; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + /** + * 投票 + */ + @TableField(exist = false) + @JsonProperty("case_exchange_vote") + private CaseExchangeVoteModel caseExchangeVote; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/CaseExchangeVoteModel.java b/src/main/java/com/example/caseData/model/CaseExchangeVoteModel.java new file mode 100644 index 0000000..55e9f8c --- /dev/null +++ b/src/main/java/com/example/caseData/model/CaseExchangeVoteModel.java @@ -0,0 +1,58 @@ +package com.example.caseData.model; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 病例库-病例交流-投票实体类 + */ +@Data // Lombok注解,用于自动生成getter/setter方法等 +@TableName("`case_exchange_vote`") // 指定数据库表名 +public class CaseExchangeVoteModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long voteId; + + /** + * 病例交流id + */ + @TableField("exchange_id") + private Long exchangeId; + + /** + * 选项标题 + */ + @TableField("vote_title") + private String voteTitle; + + /** + * 结束投票时间 + */ + @TableField("end_time") + private LocalDateTime endTime; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonProperty("updated_at") + private LocalDateTime updatedAt; + + // 选项 + @TableField(exist = false) + @JsonProperty("case_exchange_vote_option") + private List caseExchangeVoteOption; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/CaseExchangeVoteOptionModel.java b/src/main/java/com/example/caseData/model/CaseExchangeVoteOptionModel.java new file mode 100644 index 0000000..7e54813 --- /dev/null +++ b/src/main/java/com/example/caseData/model/CaseExchangeVoteOptionModel.java @@ -0,0 +1,52 @@ +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_exchange_vote_option`") // 指定数据库表名 +public class CaseExchangeVoteOptionModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long optionId; + + /** + * 投票id + */ + @TableField("vote_id") + private Long voteId; + + /** + * 选项 + */ + @TableField("option_value") + private String optionValue; + + /** + * 票数 + */ + @TableField("vote_num") + private Integer voteNum; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonProperty("updated_at") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/example/caseData/model/StatsCaseClinicalDoctorModel.java b/src/main/java/com/example/caseData/model/StatsCaseClinicalDoctorModel.java index b976e27..71918f1 100644 --- a/src/main/java/com/example/caseData/model/StatsCaseClinicalDoctorModel.java +++ b/src/main/java/com/example/caseData/model/StatsCaseClinicalDoctorModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -63,6 +64,7 @@ public class StatsCaseClinicalDoctorModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/StatsCaseClinicalHospitalModel.java b/src/main/java/com/example/caseData/model/StatsCaseClinicalHospitalModel.java index 875c619..a5f4d5f 100644 --- a/src/main/java/com/example/caseData/model/StatsCaseClinicalHospitalModel.java +++ b/src/main/java/com/example/caseData/model/StatsCaseClinicalHospitalModel.java @@ -67,7 +67,7 @@ public class StatsCaseClinicalHospitalModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) - @JsonProperty("updated_at") + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/StatsCaseClinicalModel.java b/src/main/java/com/example/caseData/model/StatsCaseClinicalModel.java index 6dd9e62..c7d4865 100644 --- a/src/main/java/com/example/caseData/model/StatsCaseClinicalModel.java +++ b/src/main/java/com/example/caseData/model/StatsCaseClinicalModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -14,6 +15,12 @@ public class StatsCaseClinicalModel { @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 private Long statsId; + /** + * 数量-文章 + */ + @TableField("article_num") + private Integer articleNum; + /** * 总阅读量-文章 */ @@ -26,6 +33,12 @@ public class StatsCaseClinicalModel { @TableField("article_collect_num") private Integer articleCollectNum; + /** + * 数量-视频 + */ + @TableField("video_num") + private Integer videoNum; + /** * 总阅读量-视频 */ @@ -42,6 +55,7 @@ public class StatsCaseClinicalModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/StatsCaseExchangeModel.java b/src/main/java/com/example/caseData/model/StatsCaseExchangeModel.java new file mode 100644 index 0000000..4dca610 --- /dev/null +++ b/src/main/java/com/example/caseData/model/StatsCaseExchangeModel.java @@ -0,0 +1,51 @@ +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("`stats_case_exchange`") // 指定数据库表名 +public class StatsCaseExchangeModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long statsId; + + /** + * 数量-病例交流 + */ + @TableField("exchange_num") + private Integer exchangeNum; + + /** + * 总阅读量-病例交流 + */ + @TableField("exchange_read_num") + private Integer exchangeReadNum; + + /** + * 总收藏量-病例交流 + */ + @TableField("exchange_collect_num") + private Integer exchangeCollectNum; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/StatsCaseExchangeUserModel.java b/src/main/java/com/example/caseData/model/StatsCaseExchangeUserModel.java new file mode 100644 index 0000000..fdb48bf --- /dev/null +++ b/src/main/java/com/example/caseData/model/StatsCaseExchangeUserModel.java @@ -0,0 +1,57 @@ +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("`stats_case_exchange_user`") // 指定数据库表名 +public class StatsCaseExchangeUserModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long statsId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 数量-病例交流 + */ + @TableField("exchange_num") + private Integer exchangeNum; + + /** + * 总阅读量-病例交流 + */ + @TableField("exchange_read_num") + private Integer exchangeReadNum; + + /** + * 总收藏量-病例交流 + */ + @TableField("exchange_collect_num") + private Integer exchangeCollectNum; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/UserCollectClinicalArticleModel.java b/src/main/java/com/example/caseData/model/UserCollectClinicalArticleModel.java index 2fbe624..6644e25 100644 --- a/src/main/java/com/example/caseData/model/UserCollectClinicalArticleModel.java +++ b/src/main/java/com/example/caseData/model/UserCollectClinicalArticleModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -30,6 +31,7 @@ public class UserCollectClinicalArticleModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/UserCollectClinicalVideoModel.java b/src/main/java/com/example/caseData/model/UserCollectClinicalVideoModel.java index ef96de8..14a114f 100644 --- a/src/main/java/com/example/caseData/model/UserCollectClinicalVideoModel.java +++ b/src/main/java/com/example/caseData/model/UserCollectClinicalVideoModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -30,6 +31,7 @@ public class UserCollectClinicalVideoModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/UserCollectExchangeModel.java b/src/main/java/com/example/caseData/model/UserCollectExchangeModel.java new file mode 100644 index 0000000..b960815 --- /dev/null +++ b/src/main/java/com/example/caseData/model/UserCollectExchangeModel.java @@ -0,0 +1,45 @@ +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("`user_collect_exchange`") // 指定数据库表名 +public class UserCollectExchangeModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long collectId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 临床文章id + */ + @TableField("exchange_id") + private Long exchangeId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java b/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java index d5b8b0f..6e71c63 100644 --- a/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java +++ b/src/main/java/com/example/caseData/model/UserCommentClinicalArticleModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -90,6 +91,7 @@ public class UserCommentClinicalArticleModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/UserCommentClinicalVideoModel.java b/src/main/java/com/example/caseData/model/UserCommentClinicalVideoModel.java index 48f9585..16202f5 100644 --- a/src/main/java/com/example/caseData/model/UserCommentClinicalVideoModel.java +++ b/src/main/java/com/example/caseData/model/UserCommentClinicalVideoModel.java @@ -1,6 +1,7 @@ package com.example.caseData.model; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDateTime; @@ -84,6 +85,7 @@ public class UserCommentClinicalVideoModel { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") private LocalDateTime createdAt; /** diff --git a/src/main/java/com/example/caseData/model/UserCommentExchangeModel.java b/src/main/java/com/example/caseData/model/UserCommentExchangeModel.java new file mode 100644 index 0000000..b7056d0 --- /dev/null +++ b/src/main/java/com/example/caseData/model/UserCommentExchangeModel.java @@ -0,0 +1,103 @@ +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("`user_comment_exchange`") // 指定数据库表名 +public class UserCommentExchangeModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long commentId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 病例交流id + */ + @TableField("exchange_id") + private Long exchangeId; + + /** + * 父级id,一级评论为null + */ + @TableField("parent_id") + private Long parentId; + + /** + * 根评论id,一级评论时为null。其余为一级评论id + */ + @TableField("root_id") + private Long rootId; + + /** + * 评论状态(0:禁用 1:正常) + */ + private Integer status; + + /** + * 是否存在敏感词(0:否 1:是) + */ + @TableField("is_sensitive") + private Integer isSensitive; + + /** + * 是否置顶(0:否 1:是) + */ + @TableField("is_top") + private Integer isTop; + + /** + * 点赞数量 + */ + @TableField("like_num") + private Integer likeNum; + + /** + * 是否作者评论(0:否 1:是) + */ + @TableField("is_author") + private Integer isAuthor; + + /** + * 评论内容 + */ + private String content; + + /** + * 评论内容(原版) + */ + @TableField("content_word") + private String contentWord; + + /** + * 评论图片 + */ + @TableField("comment_image") + private String commentImage; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/model/UserVoteExchangeModel.java b/src/main/java/com/example/caseData/model/UserVoteExchangeModel.java new file mode 100644 index 0000000..0acae24 --- /dev/null +++ b/src/main/java/com/example/caseData/model/UserVoteExchangeModel.java @@ -0,0 +1,57 @@ +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("`user_vote_exchange`") // 指定数据库表名 +public class UserVoteExchangeModel { + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略 + private Long voteExchangeId; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 病例交流id + */ + @TableField("exchange_id") + private Long exchangeId; + + /** + * 投票id + */ + @TableField("vote_id") + private Long voteId; + + /** + * 投票时间 + */ + @TableField("vote_time") + private LocalDateTime voteTime; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonProperty("created_at") + private LocalDateTime createdAt; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/request/caseExchangeRequest/getCaseExchangeSearchPage.java b/src/main/java/com/example/caseData/request/caseExchangeRequest/getCaseExchangeSearchPage.java new file mode 100644 index 0000000..a6c362a --- /dev/null +++ b/src/main/java/com/example/caseData/request/caseExchangeRequest/getCaseExchangeSearchPage.java @@ -0,0 +1,88 @@ +package com.example.caseData.request.caseExchangeRequest; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Min; +import lombok.Data; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class getCaseExchangeSearchPage { + // ✅ 分页参数 + @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("user_id") + private String userId; + + // 排序字段 + private OrderRequest order; + + /** + * 排序字段嵌套结构体 + */ + @Data + public static class OrderRequest { + @JsonProperty("created_at") + private String createdAt; // 创建时间 + + @JsonProperty("read_num") + private String readNum; // 阅读量 + + @JsonProperty("push_date") + 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/java/com/example/caseData/service/CaseExchangeService.java b/src/main/java/com/example/caseData/service/CaseExchangeService.java new file mode 100644 index 0000000..154860b --- /dev/null +++ b/src/main/java/com/example/caseData/service/CaseExchangeService.java @@ -0,0 +1,30 @@ +package com.example.caseData.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.dao.UserCollectClinicalArticleDao; +import com.example.caseData.dao.UserCollectExchangeDao; +import com.example.caseData.model.UserCollectExchangeModel; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +@Service +public class CaseExchangeService { + + @Resource + private UserCollectExchangeDao userCollectExchangeDao; + + /** + * 获取用户收藏数据 + * @param exchangeId 病例交流id + * @param userId 用户id + * @return bool false:未收藏 true:已收藏 + */ + public UserCollectExchangeModel getUserCollectExchangeStatus(String exchangeId, String userId){ + // 检测用户是否已收藏过 + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(UserCollectExchangeModel::getUserId, userId); + mapQueryWrapper.eq(UserCollectExchangeModel::getExchangeId, exchangeId); + + return userCollectExchangeDao.selectOne(mapQueryWrapper); + } +} diff --git a/src/main/resources/mapper/CaseExchangeMapper.xml b/src/main/resources/mapper/CaseExchangeMapper.xml new file mode 100644 index 0000000..f3469e4 --- /dev/null +++ b/src/main/resources/mapper/CaseExchangeMapper.xml @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file