wlzboy
6 天以前 09e6dc3fb7266620fafb5e341808a8eb36e080a1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java
@@ -4,6 +4,7 @@
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;
@@ -14,6 +15,8 @@
/**
 * 医院数据Controller
 * 从MySQL的tb_hosp_data表查询医院数据
 * hospId对应legacy_hosp_id字段(旧系统的医院ID)
 * 
 * @author ruoyi
 * @date 2024-01-16
@@ -24,23 +27,55 @@
    
    @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);
            @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) {
@@ -49,48 +84,101 @@
    }
    
    /**
     * 获取常用转出医院列表
     * 获取常用转出医院列表(从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();
        }
        Integer homeHospId=hospDataMapper.getHomeHospId();
        if (!hospIds.contains(homeHospId)) {
            hospIds.add(0,homeHospId);
        }
        // 根据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();
        if (!hospIds.contains(homeHospId)) {
            hospIds.add(0,homeHospId);
        }
        // 根据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);
    }
}