package com.ruoyi.web.controller.system;
|
|
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.system.domain.HospData;
|
import com.ruoyi.system.mapper.HospDataMapper;
|
import com.ruoyi.system.service.ISQLHospDataService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.List;
|
|
/**
|
* 医院数据Controller
|
* 从MySQL的tb_hosp_data表查询医院数据
|
* hospId对应legacy_hosp_id字段(旧系统的医院ID)
|
*
|
* @author ruoyi
|
* @date 2024-01-16
|
*/
|
@RestController
|
@RequestMapping("/system/hospital")
|
public class HospDataController extends BaseController {
|
|
@Autowired
|
private HospDataMapper hospDataMapper;
|
|
@Autowired
|
private ISQLHospDataService sqlHospDataService;
|
|
/**
|
* 搜索医院(从MySQL tb_hosp_data表查询)
|
* 支持根据医院名称、地址、地域进行模糊搜索
|
* @param keyword 搜索关键词(医院名称、地址、简称、省市区)
|
* @param deptId 部门ID(用于根据部门区域配置过滤医院)
|
*/
|
@GetMapping("/search")
|
public AjaxResult searchHospitals(
|
@RequestParam(value = "keyword", required = false) String keyword,
|
@RequestParam(value = "deptId", required = false) Long deptId,
|
@RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) {
|
List<HospData> list;
|
|
// 如果keyword为空,使用部门区域过滤查询
|
if (keyword == null || keyword=="") {
|
if (deptId != null) {
|
list = hospDataMapper.searchHospitalsByDeptRegion("", deptId);
|
} else {
|
list = hospDataMapper.searchHospitals("", "");
|
}
|
} else {
|
|
list = hospDataMapper.searchHospitals(keyword, "");
|
|
}
|
|
// 限制返回数量
|
if (pageSize != null && pageSize > 0 && list.size() > pageSize) {
|
list = list.subList(0, pageSize);
|
}
|
|
// 确保"家中"在结果中
|
Integer homeHospId = hospDataMapper.getHomeHospId();
|
if(homeHospId > 0 && !list.isEmpty() && list.stream().noneMatch(hospData -> hospData.getHospId().equals(homeHospId))) {
|
HospData hospData = hospDataMapper.selectHospDataById(homeHospId);
|
if (hospData != null) {
|
list.add(0, hospData);
|
}
|
}
|
return success(list);
|
}
|
|
/**
|
* 根据ID获取医院详情(从MySQL tb_hosp_data表查询)
|
* @param hospId 医院ID(对应legacy_hosp_id)
|
*/
|
@GetMapping("/detail")
|
public AjaxResult getHospitalDetail(@RequestParam("hospId") Integer hospId) {
|
HospData hospital = hospDataMapper.selectHospDataById(hospId);
|
return success(hospital);
|
}
|
|
/**
|
* 获取常用转出医院列表(从MySQL tb_hosp_data表查询)
|
* @param serviceOrdClass 分公司编码(service_order_class)
|
* @param region 地域关键词(可选)
|
* @param pageSize 返回结果数量限制(默认50)
|
*/
|
@GetMapping("/frequent/out")
|
public AjaxResult getFrequentOutHospitals(
|
@RequestParam("serviceOrdClass") String serviceOrdClass,
|
@RequestParam(value = "region", required = false) String region,
|
@RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) {
|
// 查询常用转出医院ID列表
|
logger.info("getFrequentOutHospitals 传入的 serviceOrdClass :{}",serviceOrdClass);
|
List<Integer> hospIds = sqlHospDataService.selectFrequentOutHospitalIds(serviceOrdClass);
|
logger.info(" getFrequentOutHospitals 查询出来的 hospIds :{}",hospIds.toArray().length);
|
if (hospIds.isEmpty()) {
|
return success();
|
}
|
|
// 根据ID列表查询医院详情
|
List<HospData> hospitals = hospDataMapper.selectHospDataByIds(hospIds, region);
|
|
// 限制返回数量
|
if (pageSize != null && pageSize > 0 && hospitals.size() > pageSize) {
|
hospitals = hospitals.subList(0, pageSize);
|
}
|
|
return success(hospitals);
|
}
|
|
/**
|
* 获取常用转入医院列表(从MySQL tb_hosp_data表查询)
|
* @param serviceOrdClass 分公司编码(service_order_class)
|
* @param region 地域关键词(可选)
|
* @param pageSize 返回结果数量限制(默认50)
|
*/
|
@GetMapping("/frequent/in")
|
public AjaxResult getFrequentInHospitals(
|
@RequestParam("serviceOrdClass") String serviceOrdClass,
|
@RequestParam(value = "region", required = false) String region,
|
@RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) {
|
// 查询常用转入医院ID列表
|
logger.info("getFrequentInHospitals 传入的 serviceOrdClass {}",serviceOrdClass);
|
List<Integer> hospIds = sqlHospDataService.selectFrequentInHospitalIds(serviceOrdClass);
|
logger.info("getFrequentInHospitals 查询出来的 hospIds {}",hospIds.toArray().length);
|
if (hospIds.isEmpty()) {
|
return success();
|
}
|
Integer homeHospId=hospDataMapper.getHomeHospId();
|
|
// 根据ID列表查询医院详情
|
List<HospData> hospitals = hospDataMapper.selectHospDataByIds(hospIds, region);
|
|
// 限制返回数量
|
if (pageSize != null && pageSize > 0 && hospitals.size() > pageSize) {
|
hospitals = hospitals.subList(0, pageSize);
|
}
|
|
if(homeHospId>0) {
|
HospData hospData = hospDataMapper.selectHospDataById(homeHospId);
|
hospitals.add(0,hospData);
|
}
|
return success(hospitals);
|
}
|
|
/**
|
* 根据部门区域配置搜索医院(从MySQLtb_hosp_data表查询,支持省、市、县/区等多级区域)
|
* @param keyword 搜索关键词
|
* @param deptId 部门ID
|
* @param pageSize 返回结果数量限制(默认50)
|
*/
|
@GetMapping("/search/by-dept-region")
|
public AjaxResult searchHospitalsByDeptRegion(
|
@RequestParam(value = "keyword", required = false) String keyword,
|
@RequestParam("deptId") Long deptId,
|
@RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) {
|
logger.info("根据部门区域配置搜索医院:deptId={}, keyword={}, pageSize={}", deptId, keyword, pageSize);
|
|
// 调用Mapper查询,自动根据部门的区域配置过滤医院
|
List<HospData> hospitals = hospDataMapper.searchHospitalsByDeptRegion(keyword, deptId);
|
logger.info("查询到医院数量:{}", hospitals.size());
|
|
// 限制返回数量
|
if (pageSize != null && pageSize > 0 && hospitals.size() > pageSize) {
|
hospitals = hospitals.subList(0, pageSize);
|
}
|
|
// 确保"家中"在结果中
|
Integer homeHospId = hospDataMapper.getHomeHospId();
|
if (homeHospId > 0 && hospitals.stream().noneMatch(h -> h.getHospId().equals(homeHospId))) {
|
HospData homeHosp = hospDataMapper.selectHospDataById(homeHospId);
|
if (homeHosp != null) {
|
hospitals.add(0, homeHosp);
|
}
|
}
|
|
return success(hospitals);
|
}
|
}
|