Explorar o código

Merge remote-tracking branch 'upstream/dev-1.1.4' into dev-1.1.4

hsh hai 6 meses
pai
achega
d165e86895

+ 70 - 7
src/main/java/cn/hnthyy/thmz/Utils/AddressResolutionUtil.java

@@ -1,5 +1,9 @@
 package cn.hnthyy.thmz.Utils;
 
+
+import cn.hutool.core.util.StrUtil;
+
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -40,13 +44,72 @@ public class AddressResolutionUtil {
         return row;
     }
 
+    public static Map<String, String> addressResolutionNew(String address) {
+        Map<String, String> res = new HashMap<>();
+        if(StrUtil.isBlank(address)) return res;
+        if (address.indexOf("北京市") != -1) {
+            putProvinceAll(address, "北京市", res);
+        } else if (address.indexOf("天津市") != -1) {
+            putProvinceAll(address, "天津市", res);
+        } else if (address.indexOf("上海市") != -1) {
+            putProvinceAll(address, "上海市", res);
+        } else if (address.indexOf("重庆市") != -1) {
+            putProvinceAll(address, "重庆市", res);
+        } else if (address.indexOf("自治区") != -1) {
+            int proIndex = address.indexOf("自治区");
+            String province = address.substring(0, proIndex + 3);
+            res.put("province", province);
+            String cityAddress = address.substring(proIndex + 3);
+            putCityAll(res, cityAddress);
+        } else if (address.indexOf("省") != -1) {
+            int proIndex = address.indexOf("省");
+            String province = address.substring(0, proIndex + 1);
+            res.put("province", province);
+            String cityAddress = address.substring(proIndex + 1);
+            putCityAll(res, cityAddress);
+        } else {
+            putCityAll(res, address);
+        }
+        return res;
+    }
+
+    public static void putProvinceAll(String address, String cityAddress, Map<String, String> res) {
+        res.put("province", cityAddress);
+        String city = cityAddress + "城区";
+        res.put("province", city);
+        String dicStr = address.substring(address.indexOf(city) + 5);
+        putDistrictAndDetail(dicStr, res);
+    }
+
+    public static void putCityAll(Map<String, String> res, String cityAddress) {
+        int cityIndex = cityAddress.indexOf("市");
+        if (cityIndex > -1) {
+            String city = cityAddress.substring(0, cityIndex + 1);
+            res.put("city", city);
+            String districtStr = cityAddress.substring(cityIndex + 1);
+            putDistrictAndDetail(districtStr, res);
+        } else {
+            putDistrictAndDetail(cityAddress, res);
+        }
+    }
+
+    public static void putDistrictAndDetail(String cityAddress, Map<String, String> map) {
+        String district = "";
+        String detail = "";
+        int districtIndex = cityAddress.indexOf("县") > -1 ? cityAddress.indexOf("县") : cityAddress.indexOf("区");
+        if (districtIndex > -1) {
+            district = cityAddress.substring(0, districtIndex + 1);
+            detail = cityAddress.substring(districtIndex + 1);
+        } else {
+            detail = cityAddress;
+        }
+        map.put("district", district);
+        map.put("detail", detail);
+    }
+
     public static void main(String[] args) {
-        System.out.println(addressResolution("广东省深圳市福田区梅林街道办事处国际金融科技大厦"));
-        System.out.println(addressResolution("山东省德州市禹城市伦镇堂子街村235号"));
-        System.out.println(addressResolution("湖南省慈利县赵家岗乡天台村8组011号"));
-        System.out.println(addressResolution("泰和医院"));
-        String provinceCode="340827198806135413".substring(0,2)+"0000";
-        System.out.println(provinceCode);
-        System.out.println(addressResolution("湖南省慈利县赵家岗乡天台村8组011号,山东省德州市禹城市伦镇堂子街村235号"));
+        String address = "湖南省浏阳市金刚镇沙罗1515";
+        System.out.println(addressResolutionNew(address));
+        //System.out.println(addressResolution("湖南省长沙市开福区秀峰街道兴联社区万家冲组208号"));
     }
 }

+ 3 - 23
src/main/java/cn/hnthyy/thmz/controller/CommonController.java

@@ -1124,29 +1124,9 @@ public class CommonController {
                 resultMap.put("message", "身份证地址为空");
                 return resultMap;
             }
-            Map<String, String> result = AddressResolutionUtil.addressResolution(address);
-            String province = result.get("province");
-            String city = result.get("city");
-            String district = result.get("district");
-            CodeNameEntity codeNameEntity = regionService.queryByName(province, null);
-            if (codeNameEntity == null || StringUtils.isBlank(codeNameEntity.getName())) {
-                resultMap.put("code", -1);
-                resultMap.put("message", "根据身份证省份名称未查询到对应的省份信息");
-                return resultMap;
-            }
-            resultMap.put("provinceCode", codeNameEntity.getCode());
-            if (StringUtils.isBlank(district) &&  StringUtils.isNotBlank(city)) {
-                district = city;
-                //只有市,没有区,将市设置到区
-            }
-            CodeNameEntity cityCodeNameEntity = regionService.queryByName(district, codeNameEntity.getCode());
-            if(cityCodeNameEntity == null){
-                cityCodeNameEntity = regionService.queryByName(district, null);
-            }
-            if (cityCodeNameEntity != null && StringUtils.isNotBlank(cityCodeNameEntity.getName())) {
-                resultMap.put("cityCode", cityCodeNameEntity.getParentCode());
-                resultMap.put("districtCode", cityCodeNameEntity.getCode());
-            }
+            Map<String, String> result = AddressResolutionUtil.addressResolutionNew(address);
+            Map<String,Object> addressCodes = regionService.getAddressCodes(result);
+            resultMap.putAll(addressCodes);
             resultMap.put("detail", result.get("detail"));
             resultMap.put("code", 0);
             resultMap.put("message", "根据身份证号码与身份证地址获取级联地址成功");

+ 8 - 18
src/main/java/cn/hnthyy/thmz/controller/api/MedicalViewApiController.java

@@ -307,24 +307,14 @@ public class MedicalViewApiController {
         mzPatientMi.setSex(MAN.equals(haicipat.getPatSex()) ? YesNoEnum.YES.code : 2);
         mzPatientMi.setAge(haicipat.getPatAge());
         mzPatientMi.setBirthDay(haicipat.getPatBirth());
-        Map<String, String> result = AddressResolutionUtil.addressResolution(haicipat.getPatAddress());
-        String province = result.get("province");
-        String city = result.get("city");
-        String district = result.get("district");
-        CodeNameEntity codeNameEntity = regionService.queryByName(province, null);
-        if (codeNameEntity != null && StringUtils.isNotBlank(codeNameEntity.getName())) {
-            mzPatientMi.setProvinceCode(codeNameEntity.getCode());
-        }
-        if ((district == null || StringUtils.isBlank(district) && (city != null && StringUtils.isNotBlank(city)))) {
-            district = city;
-            //只有市,没有区,将市设置到区
-        }
-        codeNameEntity = regionService.queryByName(district, codeNameEntity == null ? null : codeNameEntity.getCode());
-        if (codeNameEntity != null && StringUtils.isNotBlank(codeNameEntity.getName())) {
-            mzPatientMi.setCityCode(codeNameEntity.getParentCode());
-            mzPatientMi.setDistrictCode(codeNameEntity.getCode());
-        }
-        mzPatientMi.setDetail(result.get("detail"));
+        if(StrUtil.isNotBlank(haicipat.getPatAddress())){
+            Map<String, String> result = AddressResolutionUtil.addressResolutionNew(haicipat.getPatAddress());
+            Map<String, Object> addressCodes = regionService.getAddressCodes(result);
+            mzPatientMi.setProvinceCode(Convert.toStr(addressCodes.get("provinceCode")));
+            mzPatientMi.setCityCode(Convert.toStr(addressCodes.get("cityCode")));
+            mzPatientMi.setDistrictCode(Convert.toStr(addressCodes.get("districtCode")));
+            mzPatientMi.setDetail(result.get("detail"));
+        }
         mzPatientMi.setAddress(haicipat.getPatAddress());
         mzPatientMi.setPhoneNo(haicipat.getPatMobile());
         mzPatientMi.setSocialNo(haicipat.getPatIdNo());

+ 9 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/mz/RegionMapper.java

@@ -53,5 +53,13 @@ public interface RegionMapper {
      */
     @Select("select code,name,parent_code from t_region where del_flag = 0")
     List<CodeNameEntity> selectAll();
-
+    /**
+     * @description:
+     * @author: lihong
+     * @date: 2025/2/12 16:07
+     * @param: district
+     * @return: java.util.List<cn.hnthyy.thmz.entity.his.mz.CodeNameEntity>
+     **/
+    @Select("select code,name,parent_code from t_region where name=#{name}")
+    List<CodeNameEntity> getByName(@Param("name")String name);
 }

+ 1 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/mz/WpMzPrescriptionMapper.java

@@ -29,7 +29,7 @@ public interface WpMzPrescriptionMapper {
     @Select(" <script>" +
             "select top ${pageSize} id, med_list_codg, nat_drug_no, genname, prodname, reg_name, list_type, list_type_name, spec_name, prdr_name, aprvno, dosform_name, min_pacunt, poolarea_no, poolarea_name, dualchnl_flag, min_prepunt, begntime, endtime, py_code from zd_rx_medicine " +
             "<if test=\"keyword !=null and  keyword !='' \">" +
-            " <bind name=\"pattenKeyword\" value=\"keyword+'%'\" />"+
+            " <bind name=\"pattenKeyword\" value=\"'%'+keyword+'%'\" />"+
             " where med_list_codg like #{pattenKeyword} or genname like #{pattenKeyword} or py_code like #{pattenKeyword}"+
             "</if>" +
             "</script>")

+ 9 - 0
src/main/java/cn/hnthyy/thmz/service/his/RegionService.java

@@ -3,6 +3,7 @@ package cn.hnthyy.thmz.service.his;
 import cn.hnthyy.thmz.entity.his.mz.CodeNameEntity;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 城市分类
@@ -41,4 +42,12 @@ public interface RegionService {
      * @return
      */
     List<CodeNameEntity> queryAll();
+    /**
+     * @description: 根据中文地址 获取 省市区县编码 参数  province  city  district
+     * @author: lihong
+     * @date: 2025/2/12 15:46
+     * @param: result
+     * @return: java.util.Map<java.lang.String,java.lang.Object>
+     **/
+    Map<String, Object> getAddressCodes(Map<String, String> result);
 }

+ 96 - 0
src/main/java/cn/hnthyy/thmz/service/impl/his/RegionServiceImpl.java

@@ -3,11 +3,18 @@ package cn.hnthyy.thmz.service.impl.his;
 import cn.hnthyy.thmz.entity.his.mz.CodeNameEntity;
 import cn.hnthyy.thmz.mapper.his.mz.RegionMapper;
 import cn.hnthyy.thmz.service.his.RegionService;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
 @Service
+@Slf4j
 public class RegionServiceImpl implements RegionService {
     @SuppressWarnings("all")
     @Autowired
@@ -36,4 +43,93 @@ public class RegionServiceImpl implements RegionService {
     public List<CodeNameEntity> queryAll() {
         return regionMapper.selectAll();
     }
+
+    /**
+     * @param result
+     * @description: 根据中文地址 获取 省市区县编码 参数  province  city  district
+     * @author: lihong
+     * @date: 2025/2/12 15:46
+     * @param: result
+     * @return: java.util.Map<java.lang.String, java.lang.Object>
+     */
+    @Override
+    public Map<String, Object> getAddressCodes(Map<String, String> result) {
+        Map<String, Object> codeMap = new HashMap<>();
+        String province = result.get("province");
+        String city = result.get("city");
+        String district = result.get("district");
+        try {
+            if(StrUtil.isBlank(province)){
+                putByCity(codeMap,city,district);
+            }else {
+                CodeNameEntity codeNameEntity = regionMapper.selectByName(province, null);
+                if(codeNameEntity != null){
+                    codeMap.put("provinceCode",codeNameEntity.getCode());
+                    if(StrUtil.isBlank(city)){
+                        putByDistrict(codeMap, district, codeNameEntity);
+                    }else {
+                        CodeNameEntity tempCity = regionMapper.selectByName(city, codeNameEntity.getCode());
+                        if(tempCity != null){
+                            codeMap.put("cityCode",tempCity.getCode());
+                            if(StrUtil.isNotBlank(district)){
+                                CodeNameEntity districtEntity = regionMapper.selectByName(district, tempCity.getCode());
+                                codeMap.put("districtCode",districtEntity.getCode());
+                            }
+                        }else {
+                                if(StrUtil.isBlank(district)){
+                                    List<CodeNameEntity> districtEntity = regionMapper.getByName(city);
+                                    if(CollUtil.isNotEmpty(districtEntity)){
+                                        codeMap.put("cityCode",districtEntity.get(0).getParentCode());
+                                        codeMap.put("districtCode",districtEntity.get(0).getCode());
+                                    }
+                                }else {
+                                    putByDistrict(codeMap, district, codeNameEntity);
+                                }
+                            }
+                    }
+                }
+                else {
+                    putByCity(codeMap, city, district);
+                }
+            }
+        }catch (Exception e){
+            log.error("根据中文地址获取省市区县编码报错{}",e);
+        }
+        return codeMap;
+    }
+
+    private void putByDistrict(Map<String, Object> codeMap, String district, CodeNameEntity codeNameEntity) {
+        if(StrUtil.isNotBlank(district)){
+            List<CodeNameEntity> nameEntities = regionMapper.getByName(district);
+            if(CollUtil.isNotEmpty(nameEntities)){
+                if(nameEntities.size() == 1){
+                    codeMap.put("cityCode", nameEntities.get(0).getParentCode());
+                    codeMap.put("districtCode", nameEntities.get(0).getCode());
+                }else {
+                    for(CodeNameEntity entity : nameEntities){
+                        CodeNameEntity parentEntity = regionMapper.selectByCode(entity.getParentCode());
+                        if(parentEntity.getParentCode().equals(codeNameEntity.getCode())){
+                            codeMap.put("cityCode", entity.getParentCode());
+                            codeMap.put("districtCode", entity.getCode());
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void putByCity(Map<String, Object> codeMap, String city, String district) {
+        if(StrUtil.isNotBlank(city)){
+            List<CodeNameEntity> cityEntityList = regionMapper.getByName(city);
+            if(CollUtil.isNotEmpty(cityEntityList)){
+                codeMap.put("provinceCode",cityEntityList.get(0).getParentCode());
+                codeMap.put("cityCode",cityEntityList.get(0).getCode());
+                if(StrUtil.isNotBlank(district)){
+                    CodeNameEntity districtEntity = regionMapper.selectByName(district, cityEntityList.get(0).getCode());
+                    codeMap.put("districtCode",districtEntity.getCode());
+                }
+            }
+        }
+    }
 }