新增了病例交流
This commit is contained in:
parent
d3c30c0eee
commit
257b08d28e
@ -59,7 +59,7 @@ public class CaseClinicalArticleController {
|
|||||||
* 临床病例库-文章-详情
|
* 临床病例库-文章-详情
|
||||||
*/
|
*/
|
||||||
@GetMapping("/clinical/article/{article_id}")
|
@GetMapping("/clinical/article/{article_id}")
|
||||||
public Response<CaseClinicalArticleDto> getClinicalHospitalSearchPage(
|
public Response<CaseClinicalArticleDto> getClinicalArticle(
|
||||||
@PathVariable("article_id") String articleId
|
@PathVariable("article_id") String articleId
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|||||||
@ -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<Map<String, Object>> 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<String, Object> resultMap = new HashMap<>();
|
||||||
|
|
||||||
|
Page<CaseExchangeDto> page = new Page<>(request.getPage(), request.getPageSize());
|
||||||
|
|
||||||
|
// 获取文章数据
|
||||||
|
IPage<CaseExchangeDto> 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<CaseExchangeDto> 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<CaseExchangeVoteModel> 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<CaseExchangeVoteOptionModel> caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId());
|
||||||
|
List<CaseExchangeVoteOptionModel> 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<UserVoteExchangeModel> 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<CaseExchangeVoteDto> getExchangeVote(
|
||||||
|
@PathVariable("exchange_id") String exchangeId
|
||||||
|
) {
|
||||||
|
String userId = (String) httpServletRequest.getAttribute("userId");
|
||||||
|
|
||||||
|
// 获取投票数据
|
||||||
|
LambdaQueryWrapper<CaseExchangeVoteModel> 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<CaseExchangeVoteOptionModel> caseExchangeVoteOptionQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
caseExchangeVoteOptionQueryWrapper.eq(CaseExchangeVoteOptionModel::getVoteId, caseExchangeVote.getVoteId());
|
||||||
|
List<CaseExchangeVoteOptionModel> 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<UserVoteExchangeModel> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<StatsCaseExchangeDto> getClinicalStats(){
|
||||||
|
LambdaQueryWrapper<StatsCaseExchangeModel> statsCaseExchangeQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
StatsCaseExchangeModel statsCaseExchange = statsCaseExchangeDao.selectOne(statsCaseExchangeQueryWrapper);
|
||||||
|
|
||||||
|
StatsCaseExchangeDto g = StatsCaseExchangeDto.GetDto(statsCaseExchange);
|
||||||
|
|
||||||
|
return Response.success(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 病例交流-用户
|
||||||
|
*/
|
||||||
|
@GetMapping("/exchange/stats/user")
|
||||||
|
public Response<StatsCaseExchangeUserDto> getClinicalStatsUser(){
|
||||||
|
String userId = (String) httpServletRequest.getAttribute("userId");
|
||||||
|
if (userId != null) {
|
||||||
|
return Response.error();
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<StatsCaseExchangeUserModel> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(StatsCaseExchangeUserModel::getUserId, userId);
|
||||||
|
StatsCaseExchangeUserModel statsCaseExchangeUser = statsCaseExchangeUserDao.selectOne(queryWrapper);
|
||||||
|
|
||||||
|
StatsCaseExchangeUserDto g = StatsCaseExchangeUserDto.GetDto(statsCaseExchangeUser);
|
||||||
|
|
||||||
|
return Response.success(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -89,4 +89,6 @@ public class UserController extends BaseController {
|
|||||||
|
|
||||||
return Response.success(g);
|
return Response.success(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
30
src/main/java/com/example/caseData/dao/CaseExchangeDao.java
Normal file
30
src/main/java/com/example/caseData/dao/CaseExchangeDao.java
Normal file
@ -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<CaseExchangeModel> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 临床病例库-搜索
|
||||||
|
* @param page 分页数据
|
||||||
|
* @param keyword 搜索关键词-标题/医生名称/标签名称
|
||||||
|
* @param order 排序
|
||||||
|
*/
|
||||||
|
IPage<CaseExchangeDto> getCaseExchangeSearchPage(
|
||||||
|
Page<?> page,
|
||||||
|
@Param("keyword") String keyword,
|
||||||
|
@Param("userId") String userId,
|
||||||
|
@Param("order") Map<String, String> order
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -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<CaseExchangeModel> {
|
||||||
|
}
|
||||||
@ -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<CaseExchangeVoteModel> {
|
||||||
|
}
|
||||||
@ -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<CaseExchangeVoteOptionModel> {
|
||||||
|
}
|
||||||
@ -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<StatsCaseExchangeModel> {
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
@ -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<StatsCaseExchangeUserModel> {
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<UserCollectExchangeModel> {
|
||||||
|
}
|
||||||
@ -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<UserCommentExchangeModel> {
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<UserVoteExchangeModel> {
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<CaseExchangeDto> GetListDto(List<CaseExchangeModel> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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<CaseExchangeVoteOptionDto> caseExchangeVoteOption;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表
|
||||||
|
*/
|
||||||
|
public static List<CaseExchangeVoteDto> GetListDto(List<CaseExchangeVoteModel> 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<CaseExchangeVoteOptionDto> 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<CaseExchangeVoteOptionDto> caseExchangeVoteOptionListDto = CaseExchangeVoteOptionDto.GetListDto(model.getCaseExchangeVoteOption());
|
||||||
|
dto.setCaseExchangeVoteOption(caseExchangeVoteOptionListDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<CaseExchangeVoteOptionDto> GetListDto(List<CaseExchangeVoteOptionModel> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.dto.statsCaseClinical;
|
package com.example.caseData.dto.statsCaseClinical;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.example.caseData.model.StatsCaseClinicalModel;
|
import com.example.caseData.model.StatsCaseClinicalModel;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -17,6 +18,12 @@ public class StatsCaseClinicalDto {
|
|||||||
@JsonProperty("stats_id")
|
@JsonProperty("stats_id")
|
||||||
private String statsId;
|
private String statsId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数量-文章
|
||||||
|
*/
|
||||||
|
@JsonProperty("article_num")
|
||||||
|
private Integer articleNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总阅读量-文章
|
* 总阅读量-文章
|
||||||
*/
|
*/
|
||||||
@ -29,6 +36,12 @@ public class StatsCaseClinicalDto {
|
|||||||
@JsonProperty("article_collect_num")
|
@JsonProperty("article_collect_num")
|
||||||
private Integer articleCollectNum;
|
private Integer articleCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数量-视频
|
||||||
|
*/
|
||||||
|
@JsonProperty("video_num")
|
||||||
|
private Integer videoNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总阅读量-视频
|
* 总阅读量-视频
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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<StatsCaseExchangeDto> GetListDto(List<StatsCaseExchangeModel> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<StatsCaseExchangeUserDto> GetListDto(List<StatsCaseExchangeUserModel> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,24 +26,6 @@ import java.util.Map;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@ControllerAdvice
|
@ControllerAdvice
|
||||||
public class GlobalExceptionHandler {
|
public class GlobalExceptionHandler {
|
||||||
// 处理所有未捕获的异常
|
|
||||||
@ExceptionHandler(Exception.class)
|
|
||||||
public ResponseEntity<Map<String, Object>> handleGlobalException(Exception ex) {
|
|
||||||
System.out.print(ExceptionUtils.getStackTrace(ex));
|
|
||||||
Map<String, Object> 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 请求(接口不存在)
|
// 处理 404 请求(接口不存在)
|
||||||
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
|
||||||
@ResponseStatus(HttpStatus.NOT_FOUND)
|
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||||
@ -92,4 +74,22 @@ public class GlobalExceptionHandler {
|
|||||||
errorResponse.put("code", ex.getCode());
|
errorResponse.put("code", ex.getCode());
|
||||||
return ResponseEntity.ok(errorResponse);
|
return ResponseEntity.ok(errorResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理所有未捕获的异常
|
||||||
|
@ExceptionHandler(Exception.class)
|
||||||
|
public ResponseEntity<Map<String, Object>> handleGlobalException(Exception ex) {
|
||||||
|
System.out.print(ExceptionUtils.getStackTrace(ex));
|
||||||
|
Map<String, Object> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -67,6 +68,7 @@ public class BasicHospitalModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -24,6 +25,7 @@ public class BasicSensitiveWordModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -31,7 +31,7 @@ public class CaseClinicalArticleAuthorModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -35,6 +36,7 @@ public class CaseClinicalArticleLabelModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -53,7 +53,7 @@ public class CaseClinicalArticleModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -52,7 +52,7 @@ public class CaseClinicalDoctorModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public class CaseClinicalVideoLabelModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -56,7 +56,7 @@ public class CaseClinicalVideoModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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<CaseExchangeVoteOptionModel> caseExchangeVoteOption;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -63,6 +64,7 @@ public class StatsCaseClinicalDoctorModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -67,7 +67,7 @@ public class StatsCaseClinicalHospitalModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
@JsonProperty("updated_at")
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -14,6 +15,12 @@ public class StatsCaseClinicalModel {
|
|||||||
@TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略
|
@TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略
|
||||||
private Long statsId;
|
private Long statsId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数量-文章
|
||||||
|
*/
|
||||||
|
@TableField("article_num")
|
||||||
|
private Integer articleNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总阅读量-文章
|
* 总阅读量-文章
|
||||||
*/
|
*/
|
||||||
@ -26,6 +33,12 @@ public class StatsCaseClinicalModel {
|
|||||||
@TableField("article_collect_num")
|
@TableField("article_collect_num")
|
||||||
private Integer articleCollectNum;
|
private Integer articleCollectNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数量-视频
|
||||||
|
*/
|
||||||
|
@TableField("video_num")
|
||||||
|
private Integer videoNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总阅读量-视频
|
* 总阅读量-视频
|
||||||
*/
|
*/
|
||||||
@ -42,6 +55,7 @@ public class StatsCaseClinicalModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -30,6 +31,7 @@ public class UserCollectClinicalArticleModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -30,6 +31,7 @@ public class UserCollectClinicalVideoModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -90,6 +91,7 @@ public class UserCommentClinicalArticleModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.example.caseData.model;
|
package com.example.caseData.model;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -84,6 +85,7 @@ public class UserCommentClinicalVideoModel {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
@JsonProperty("created_at")
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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<String, String> toMap() {
|
||||||
|
Map<String, String> 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<String, String> handleOrder() {
|
||||||
|
return order != null ? order.toMap() : new OrderRequest().toMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ 校验分页参数
|
||||||
|
public void validateForPage() {
|
||||||
|
// 如果 page 为空,设为默认值 1
|
||||||
|
if (page == null) {
|
||||||
|
page = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pageSize == null) {
|
||||||
|
pageSize = 20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<UserCollectExchangeModel> mapQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
mapQueryWrapper.eq(UserCollectExchangeModel::getUserId, userId);
|
||||||
|
mapQueryWrapper.eq(UserCollectExchangeModel::getExchangeId, exchangeId);
|
||||||
|
|
||||||
|
return userCollectExchangeDao.selectOne(mapQueryWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/main/resources/mapper/CaseExchangeMapper.xml
Normal file
31
src/main/resources/mapper/CaseExchangeMapper.xml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.example.caseData.dao.CaseExchangeDao">
|
||||||
|
<select id="getCaseExchangeSearchPage" resultType="com.example.caseData.dto.caseExchange.CaseExchangeDto">
|
||||||
|
SELECT DISTINCT
|
||||||
|
a.*,
|
||||||
|
c.user_name,
|
||||||
|
c.avatar,
|
||||||
|
c.hospital_id
|
||||||
|
FROM case_exchange a
|
||||||
|
LEFT JOIN case_exchange_label b ON a.exchange_id = b.exchange_id
|
||||||
|
LEFT JOIN user c ON c.user_id = a.user_id
|
||||||
|
WHERE a.exchange_status = 1
|
||||||
|
<if test="keyword != null and keyword != ''">
|
||||||
|
AND (
|
||||||
|
a.exchange_title LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
OR c.user_name LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
OR b.label_name LIKE CONCAT('%', #{keyword}, '%')
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="userId != null and userId != ''">
|
||||||
|
AND c.user_id = ${userId}
|
||||||
|
</if>
|
||||||
|
<if test="order != null and !order.isEmpty()">
|
||||||
|
ORDER BY
|
||||||
|
<foreach item="entry" index="key" collection="order" separator=",">
|
||||||
|
${key} ${entry}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
Loading…
x
Reference in New Issue
Block a user