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.basicHospital.BasicHospitalDto; import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto; import com.example.caseData.dto.caseClinicalArticleAuthor.CaseClinicalArticleAuthorDto; import com.example.caseData.dto.caseClinicalDoctor.CaseClinicalDoctorDto; import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto; import com.example.caseData.dto.caseClinicalVideoAuthor.CaseClinicalVideoAuthorDto; import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorDto; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.model.*; import com.example.caseData.request.clinicalRequest.getClinicalArticleSearchPage; import com.example.caseData.request.clinicalRequest.getClinicalDoctorSearchPage; import com.example.caseData.request.clinicalRequest.getClinicalHospitalSearchPage; import com.example.caseData.request.clinicalRequest.getClinicalVideoSearchPage; import com.example.caseData.service.CaseClinicalArticleService; import com.example.caseData.service.CaseClinicalVideoService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api") public class ClinicalController extends BaseController { @Resource private CaseClinicalArticleDao caseClinicalArticleDao; @Resource private CaseClinicalArticleAuthorDao caseClinicalArticleAuthorDao; @Resource private CaseClinicalVideoDao caseClinicalVideoDao; @Resource private CaseClinicalVideoAuthorDao caseClinicalVideoAuthorDao; @Resource private StatsCaseClinicalDao statsCaseClinicalDao; @Resource private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; @Resource private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; @Resource private CaseClinicalDoctorDao caseClinicalDoctorDao; @Resource private BasicHospitalDao basicHospitalDao; @Resource private HttpServletRequest httpServletRequest; @Resource private CaseClinicalArticleService caseClinicalArticleService; @Resource private CaseClinicalVideoService caseClinicalVideoService; /** * 临床病例库-搜索-文章 */ @PostMapping("/clinical/article/search") public Response> getClinicalArticleSearchPage( @Validated() @RequestBody getClinicalArticleSearchPage request ) { String userId = (String) httpServletRequest.getAttribute("userId"); request.validateForPage(); Map resultMap = new HashMap<>(); Page page = new Page<>(request.getPage(), request.getPageSize()); // 获取文章数据 IPage resultPage = caseClinicalArticleDao.getCaseClinicalArticleSearchPage( page, request.getKeyword(), request.getHospitalId(), request.getDoctorId(), request.handleOrder() ); for (CaseClinicalArticleDto dto : resultPage.getRecords()) { // 查找作者 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, dto.getArticleId()); List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { // 查询医生 CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); author.setCaseClinicalDoctor(caseClinicalDoctor); } List caseClinicalArticleAuthorListDto = CaseClinicalArticleAuthorDto.GetListDto(caseClinicalArticleAuthors); dto.setAuthor(caseClinicalArticleAuthorListDto); // 获取用户收藏状态 if (userId != null) { // 检测用户是否已收藏过 UserCollectClinicalArticleModel userCollectClinicalArticle = caseClinicalArticleService.getUserCollectClinicalArticleStatus(dto.getArticleId(),userId); if (userCollectClinicalArticle != null) { dto.setCollect(true); } } } resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", resultPage.getTotal()); resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } /** * 临床病例库-搜索-视频 */ @PostMapping("/clinical/video/search") public Response> getClinicalVideoSearchPage( @Validated() @RequestBody getClinicalVideoSearchPage request ) { String userId = (String) httpServletRequest.getAttribute("userId"); request.validateForPage(); Map resultMap = new HashMap<>(); Page page = new Page<>(request.getPage(), request.getPageSize()); // 获取视频数据 IPage resultPage = caseClinicalVideoDao.getCaseClinicalVideoSearchPage( page, request.getKeyword(), request.getHospitalId(), request.getDoctorId(), request.handleOrder() ); for (CaseClinicalVideoDto dto : resultPage.getRecords()) { // 查找作者 LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, dto.getVideoId()); List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { // 查询医生 CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); author.setCaseClinicalDoctor(caseClinicalDoctor); } List caseClinicalVideoAuthorListDto = CaseClinicalVideoAuthorDto.GetListDto(caseClinicalVideoAuthors); dto.setAuthor(caseClinicalVideoAuthorListDto); // 获取用户收藏状态 if (userId != null) { // 检测用户是否已收藏过 UserCollectClinicalVideoModel userCollectClinicalVideo = caseClinicalVideoService.getUserCollectClinicalVideoStatus(dto.getVideoId(),userId); if (userCollectClinicalVideo != null) { dto.setCollect(true); } } } resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", resultPage.getTotal()); resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } /** * 临床病例库-医院-搜索 */ @PostMapping("/clinical/hospital/search") public Response> getClinicalHospitalSearchPage( @Validated() @RequestBody getClinicalHospitalSearchPage request ) { request.validateForPage(); Page page = new Page<>(request.getPage(), request.getPageSize()); // 获取医院数据 IPage resultPage = statsCaseClinicalHospitalDao.getStatsCaseClinicalHospitalSearchPage( page, request.getHospitalName(), request.handleOrder() ); for (StatsCaseClinicalHospitalDto dto : resultPage.getRecords()) { // 查询医院基础数据 BasicHospitalModel basicHospital = basicHospitalDao.selectById(dto.getHospitalId()); BasicHospitalDto basicHospitalDto = BasicHospitalDto.GetDto(basicHospital); dto.setBasicHospital(basicHospitalDto); } Map resultMap = new HashMap<>(); resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", resultPage.getTotal()); resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } /** * 临床病例库-医生-搜索 */ @PostMapping("/clinical/doctor/search") public Response> getClinicalDoctorSearchPage( @Validated() @RequestBody getClinicalDoctorSearchPage request ) { request.validateForPage(); Page page = new Page<>(request.getPage(), request.getPageSize()); // 获取医生数据 IPage resultPage = statsCaseClinicalDoctorDao.getStatsCaseClinicalDoctorSearchPage( page, request.getDoctorName(), request.handleOrder() ); for (StatsCaseClinicalDoctorDto dto : resultPage.getRecords()) { // 查询医生数据 CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(dto.getDoctorId()); // 查询医生所属医院 BasicHospitalModel basicHospital = basicHospitalDao.selectById(caseClinicalDoctor.getHospitalId()); caseClinicalDoctor.setBasicHospital(basicHospital); CaseClinicalDoctorDto caseClinicalDoctorDto = CaseClinicalDoctorDto.GetDto(caseClinicalDoctor); dto.setCaseClinicalDoctor(caseClinicalDoctorDto); } Map resultMap = new HashMap<>(); resultMap.put("page", resultPage.getCurrent()); resultMap.put("pageSize", resultPage.getSize()); resultMap.put("total", resultPage.getTotal()); resultMap.put("data", resultPage.getRecords()); return Response.success(resultMap); } }