| | |
| | | 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; |
| | |
| | | |
| | | /** |
| | | * 医院数据Controller |
| | | * 从MySQL的tb_hosp_data表查询医院数据 |
| | | * hospId对应legacy_hosp_id字段(旧系统的医院ID) |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | |
| | | |
| | | @Autowired |
| | | private HospDataMapper hospDataMapper; |
| | | |
| | | @Autowired |
| | | private ISQLHospDataService sqlHospDataService; |
| | | |
| | | /** |
| | | * 搜索医院 |
| | | * 搜索医院(从MySQL tb_hosp_data表查询) |
| | | * 支持根据医院名称、地址、地域进行模糊搜索 |
| | | * @param keyword 搜索关键词(医院名称、地址、简称、省市区) |
| | | * @param region 地域关键词(用于过滤省市区) |
| | | * @param deptId 部门ID(用于根据部门区域配置过滤医院) |
| | | */ |
| | | @GetMapping("/search") |
| | | public AjaxResult searchHospitals( |
| | | @RequestParam(value = "keyword", required = false) String keyword, |
| | | @RequestParam(value = "region", required = false) String region) { |
| | | List<HospData> list = hospDataMapper.searchHospitals(keyword, region); |
| | | Integer homeHospId=hospDataMapper.getHomeHospId(); |
| | | if(homeHospId>0 && list.stream().count()>0 && list.stream().filter(hospData -> hospData.getHospId().equals(homeHospId)).count()<=0) { |
| | | HospData hospData= hospDataMapper.selectHospDataById(homeHospId); |
| | | list.add(0,hospData); |
| | | @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获取医院详情 |
| | | * 根据ID获取医院详情(从MySQL tb_hosp_data表查询) |
| | | * @param hospId 医院ID(对应legacy_hosp_id) |
| | | */ |
| | | @GetMapping("/detail") |
| | | public AjaxResult getHospitalDetail(@RequestParam("hospId") Integer hospId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取常用转出医院列表 |
| | | * 获取常用转出医院列表(从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 = "region", required = false) String region, |
| | | @RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) { |
| | | // 查询常用转出医院ID列表 |
| | | List<Integer> hospIds = hospDataMapper.selectFrequentOutHospitalIds(serviceOrdClass); |
| | | if (hospIds == null || hospIds.isEmpty()) { |
| | | 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 = "region", required = false) String region, |
| | | @RequestParam(value = "pageSize", required = false, defaultValue = "50") Integer pageSize) { |
| | | // 查询常用转入医院ID列表 |
| | | List<Integer> hospIds = hospDataMapper.selectFrequentInHospitalIds(serviceOrdClass); |
| | | if (hospIds == null || hospIds.isEmpty()) { |
| | | 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); |
| | | 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); |
| | | } |
| | | } |