wlzboy
2025-11-13 51b9df7d9e907506ce565fd47a7aa4661a4139ea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
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);
    }
}