DESKTOP-6LTVLN7\Liumouren il y a 5 jours
Parent
commit
c0097b215c

+ 51 - 26
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -91,7 +91,7 @@ public class AddressQueryEngine {
             AddressResult.ContentBean content = new AddressResult.ContentBean();
             content.setSearchAddress(addr);
             content.setPname(lmrAddrBean.getProvinces());
-            content.setCityname(lmrAddrBean.getMarket());
+            content.setCityname(lmrAddrBean.getDistinguish());
             content.setAdname(lmrAddrBean.getStreetTown());
             content.setCommunity(lmrAddrBean.getResidentialCommittee());
             content.setScore("rule_0");
@@ -107,12 +107,11 @@ public class AddressQueryEngine {
             AddressResult.ContentBean addrBean = new AddressResult.ContentBean();
             addrBean.setSearchAddress(addr);
             addrBean.setPname(splitAddress.getProvince());
-            addrBean.setCityname(splitAddress.getCity());
+            addrBean.setCityname(splitAddress.getDistrict());
             addrBean.setDistance(splitAddress.getDistrict());
             addrBean.setAdname(splitAddress.getStreet());
             addrBean.setCommunity(splitAddress.getCommunity());
-            addrBean.setStandAddr(splitAddress.getCity() + splitAddress.getDistrict() + splitAddress.getStreet()
-                    + splitAddress.getCommunity() + splitAddress.getAddr());
+            addrBean.setStandAddr(splitAddress.getCity() + splitAddress.getDistrict() + splitAddress.getStreet() + splitAddress.getAddr());
             addressResult.setAddrBean(addrBean);
 
             // 优先进行数据库查询
@@ -224,7 +223,6 @@ public class AddressQueryEngine {
     }
 
 
-
     /***
      * 返回两个居委的方法
      * @param addr
@@ -552,6 +550,15 @@ public class AddressQueryEngine {
                         content.setAdname(cjBean.getProperties().getString("所属街"));
                         content.setCommunity(cjBean.getProperties().getString("居委_1"));
                     }
+
+//                  判断是否存在街镇数据
+                    if (content.getAdname() == null || content.getAdname().isEmpty()) {
+                        GeoJsonBean townBean = areaService.isInTownPolygon(content.getLon(), content.getLat());
+                        if (townBean != null && townBean.getProperties() != null) {
+                            content.setPname("上海市");
+                            content.setAdname(townBean.getProperties().getString("name"));
+                        }
+                    }
                     content.setStandAddr(content.getPname() + content.getCityname() + content.getAdname() + splitAddress.getAddr());
                 } else {
                     System.err.println("没有经纬度参数,不能根据经纬度落点补充街镇等信息!");
@@ -579,32 +586,50 @@ public class AddressQueryEngine {
     }
 
 
-    public AddressResult.ContentBean addContentWGWGrid(AddressResult.ContentBean content) {
-        AreaService areaService = AreaService.getInstance();
-        if (content != null && content.getLat() != null && content.getLon() != null) {
-            if (!StringUtils.hasText(content.getWgName())) {
-                GeoJsonBean geoJsonBean = areaService.isInWGPolygon(content.getLon(), content.getLat());
-                if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                    content.setWgName(geoJsonBean.getProperties().getString("网格名称"));
-                    content.setWgCode(geoJsonBean.getProperties().getString("网格编码"));
+    /***
+     * 根据搜索地址,赋值村居
+     * @param result
+     * @return
+     */
+    public AddressResult getCjWgWgwByLocV4(AddressResult result, SplitAddress splitAddress) {
+        if (result == null || result.getData() == null || result.getData().size() < 1) {
+            return result;
+        } else {
+            AreaService areaService = AreaService.getInstance();
+            for (AddressResult.ContentBean content : result.getData()) {
+                if (content.getLat() != null && content.getLon() != null) {
+//                  判断是否存在村居数据
+                    GeoJsonBean cjBean = areaService.isInResidentialCommitteePolygonSl(content.getLon(), content.getLat());
+                    if (cjBean != null && cjBean.getProperties() != null) {
+                        content.setPname("上海市");
+                        content.setCityname(cjBean.getProperties().getString("所属区"));
+                        content.setAdname(cjBean.getProperties().getString("所属街"));
+                        content.setCommunity(cjBean.getProperties().getString("居委_1"));
+                    }
+                    content.setStandAddr(content.getPname() + content.getCityname() + content.getAdname() + splitAddress.getAddr());
+                } else {
+                    System.err.println("没有经纬度参数,不能根据经纬度落点补充街镇等信息!");
                 }
-            }
-            if (!StringUtils.hasText(content.getWgwCode())) {
-                GeoJsonBean geoJsonBean = areaService.isInWGWPolygon(content.getLon(), content.getLat());
-                if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                    content.setWgwName(geoJsonBean.getProperties().getString("å¾®ç½\u0091_1"));
-                    content.setWgwCode(geoJsonBean.getProperties().getString("å¾®ç½\u0091æ ¼"));
+//              TODO 添加逻辑(路名等信息返回)
+                try {
+                    Map<String, String> roomInfo = AddrSplitLmrMap.parseAddress(splitAddress.getAddr());
+                    if (roomInfo != null) {
+                        content.setRoadName(roomInfo.get("路名"));
+                        content.setBuildingNumber(roomInfo.get("弄号"));
+                        content.setLaneNumber(roomInfo.get("楼栋号"));
+                        content.setRoomNumber(roomInfo.get("室号"));
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    System.err.println("getCjWgWgwByLoc方法获取路名室号等信息处理逻辑异常" + e);
                 }
-            }
-            if (!StringUtils.hasText(content.getZhwgName())) {
-                GeoJsonBean geoJsonBean = areaService.isInZHGWPolygon(content.getLon(), content.getLat());
-                if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                    content.setZhwgName(geoJsonBean.getProperties().getString("网格名称"));
-                    content.setZhwgCode(geoJsonBean.getProperties().getString("网格编码"));
+//              TODO 添加逻辑,(什么都有就是没有居委编码的话,要补全居委编码)
+                if (StringUtils.hasText(content.getCityname()) && StringUtils.hasText(content.getCommunity()) && StringUtils.hasText(content.getAdname()) && !StringUtils.hasText(content.getCommunityCode())) {
+                    content.setCommunityCode(AddrSplitLmrMap.outCommunityCodeByInfo(content.getCityname(), content.getAdname(), content.getCommunity()));
                 }
             }
+            return result;
         }
-        return content;
     }
 
     //

+ 1 - 1
src/main/java/com/skyversation/poiaddr/addquery/Constant.java

@@ -91,7 +91,7 @@ public class Constant {
     public void initDbConnection() {
 //      加载驱动
         System.out.println("加载搜索服务id!");
-        SJ_SZX_SEARCH_BY_NAME = "http://172.30.77.20:8084/openapi/" + searchServerId;
+        SJ_SZX_SEARCH_BY_NAME = "http://172.30.77.65:8081/openapi/" + searchServerId;
         System.out.println("服务接口:" + SJ_SZX_SEARCH_BY_NAME);
     }
 }

+ 1 - 1
src/main/java/com/skyversation/poiaddr/addquery/TransfromDataTool.java

@@ -77,7 +77,7 @@ public class TransfromDataTool {
                         content.setCommunity(extData.getString("region_jw"));
                     }
 //                  如果评分大于1.6,那么就使用接口返回的街镇,否则使用源搜索地址的街镇
-                    if (jsonObject.getString("总分").contains("rule_") || Float.parseFloat(jsonObject.getString("总分")) > 1.6) {
+                    if (Float.parseFloat(jsonObject.getString("总分")) > 2) {
                         if (extData.containsKey("region_jd") && !extData.getString("region_jd").isEmpty()) {
                             content.setAdname(extData.getString("region_jd"));
                         }

+ 1 - 1
src/main/java/com/skyversation/poiaddr/config/AuthInterceptor.java

@@ -16,7 +16,7 @@ public class AuthInterceptor implements HandlerInterceptor {
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         log.info(">>>AuthInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
         log.info(">>>>>>>>>>>>>>>" + request.getRequestURL() + "<<<<<<<<<<<<<<<<<<<<<<");
-        LocalDate targetDate = LocalDate.of(2025, 10, 10);
+        LocalDate targetDate = LocalDate.of(2035, 10, 10);
         LocalDate currentDate = LocalDate.now();
         return currentDate.isBefore(targetDate);
     }

+ 6 - 3
src/main/java/com/skyversation/poiaddr/controller/CorporateLibraryController.java

@@ -114,9 +114,9 @@ public class CorporateLibraryController {
                             Float lat = item.getLat();
                             Double lonDb = Double.parseDouble(lon.toString());
                             Double latDb = Double.parseDouble(lat.toString());
-                            GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygon(lonDb, latDb);
+                            GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygonSl(lonDb, latDb);
                             if (cjBean != null && cjBean.getProperties() != null && cjBean.getProperties().getString("所属区").contains("松江区")) {
-                                if (!StringUtils.hasText(item.getCommunity()) || (cjBean != null && cjBean.getProperties() != null && !cjBean.getProperties().getString("居委_1").contains(item.getCommunity()))) {
+                                if (!StringUtils.hasText(item.getCommunity()) || (cjBean.getProperties() != null && !cjBean.getProperties().getString("居委_1").contains(item.getCommunity()))) {
                                     sum++;
                                     item.setTown(cjBean.getProperties().getString("所属街"));
                                     item.setCommunity(cjBean.getProperties().getString("居委_1"));
@@ -196,6 +196,9 @@ public class CorporateLibraryController {
     /**
      * 只返回bean的接口
      *
+     * 第一步,校验地址,对查询地址进行初步切分,判断地址是否非空、是否是上海地址。空地址返回参数异常;非上海返回rule_0,不进入下一步;是上海的地址进入下一步;
+     * 第二步,与标准地名地址库中的地址进行匹配,匹配到的结果保存到列表中(待打分),匹配不到的地址进入回流机制,通过市四中心“关键字模糊搜索服务”接口,(补充出参)拿返回的坐标去市四中心全上海市的村居数据(8月13日替换为思亮提供的松江村居数据)中去定位,将定位到的居委写入地址库中;
+     * 第三步,匹配列表打分排序,返回最高的打分结果。
      * @param request
      * @return
      */
@@ -310,7 +313,7 @@ public class CorporateLibraryController {
                 String lon = request.getParameter("lon");
                 String lat = request.getParameter("lat");
                 if (StringUtils.hasText(lon) && StringUtils.hasText(lat)) {
-                    GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygon(Double.parseDouble(lon), Double.parseDouble(lat));
+                    GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygonSl(Double.parseDouble(lon), Double.parseDouble(lat));
                     if (cjBean != null && cjBean.getProperties() != null) {
                         YyskDmdzAddressStandardization yyskDmdzAddressStandardization = new YyskDmdzAddressStandardization();
                         yyskDmdzAddressStandardization.setSourceaddress(address);

+ 2 - 0
src/main/java/com/skyversation/poiaddr/entity/AddrBean.java

@@ -11,6 +11,8 @@ import lombok.NoArgsConstructor;
 public class AddrBean {
     //      处理前的地址
     private String oldAddress;
+    // 别名替换后的地址
+    private String newAddress;
     //      省
     private String provinces;
     //      市

+ 24 - 5
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -355,6 +355,12 @@ public class AreaService {
         yyszAddressRepository.saveAll(datas);
     }
 
+
+    @Transactional(readOnly = true)
+    public void updateYyszAddressRepositoryOne(YyskDmdzAddressStandardization data) {
+        yyszAddressRepository.save(data);
+    }
+
     /**
      * -- 第二部分:将匹配数据写入治理回匹表
      * INSERT INTO TABLE 治理回匹表
@@ -528,6 +534,14 @@ public class AreaService {
                     returnDatas.addAll(ScheduledTasks.allDmdzData.get(roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "")));
                     return returnDatas;
                 }
+                for (String key : ScheduledTasks.allDmdzData.keySet()) {
+//                  TODO 地址库有离谱的骚东西(常见的就是不同的区或镇有相同的路名),这样会导致速度变慢,但是兼容性更强
+                    if (key != null && key.contains(roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "")) && returnDatas.size() < maxDataNum) {
+                        returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
+                    } else if (returnDatas.size() >= maxDataNum) {
+                        return returnDatas;
+                    }
+                }
             }
         } else {
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
@@ -555,15 +569,20 @@ public class AreaService {
                 addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "");
             }
 //          删除数据库的数据
-            YyskDmdzAddressStandardization delItem = new YyskDmdzAddressStandardization();
-            delItem.setOid(delId);
-            yyszAddressRepository.delete(delItem);
+            try {
+                YyskDmdzAddressStandardization delItem = new YyskDmdzAddressStandardization();
+                delItem.setOid(delId);
+                yyszAddressRepository.delete(delItem);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
 //          找到key可以最快删除,地址直接输入路名和弄号等信息
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
 //              TODO 地址库有离谱的骚东西(常见的就是不同的区或镇有相同的路名),这样会导致速度变慢,但是兼容性更强
                 if (key != null && addr2 != null && key.contains(addr2)) {
-                    for(YyskDmdzAddressStandardization item:ScheduledTasks.allDmdzData.get(key)){
-                        if(Objects.equals(item.getOid(), delId)){
+                    for (YyskDmdzAddressStandardization item : ScheduledTasks.allDmdzData.get(key)) {
+                        if (Objects.equals(item.getOid(), delId)) {
+                            ScheduledTasks.allDmdzData.get(key).remove(item);
                             return true;
                         }
                     }

+ 81 - 100
src/main/java/com/skyversation/poiaddr/service/impl/YyskAddressStandardizationServiceImpl.java

@@ -3,22 +3,24 @@ package com.skyversation.poiaddr.service.impl;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.AddressResult;
+import com.skyversation.poiaddr.bean.TAddressCallback;
 import com.skyversation.poiaddr.config.DbConnection;
 import com.skyversation.poiaddr.entity.TmpSongjiangEntity;
 import com.skyversation.poiaddr.entity.YyskAddressStandardization;
 import com.skyversation.poiaddr.util.AddressTools;
+import com.skyversation.poiaddr.util.Coordinate;
 import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import com.skyversation.poiaddr.util.tasks.ScheduledTasks;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Types;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
+import java.util.concurrent.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -69,33 +71,33 @@ public class YyskAddressStandardizationServiceImpl {
         }
     }
 
-    public List<TmpSongjiangEntity> selectBydzName(List<TmpSongjiangEntity> dataList){
-        for(TmpSongjiangEntity tmpSongjiangEntity : dataList){
-            try{
+    public List<TmpSongjiangEntity> selectBydzName(List<TmpSongjiangEntity> dataList) {
+        for (TmpSongjiangEntity tmpSongjiangEntity : dataList) {
+            try {
                 String hjdz = tmpSongjiangEntity.getHjdz();
-                hjdz.replace("工业区","");
+                hjdz.replace("工业区", "");
                 Pattern pattern = Pattern.compile("\\d");
                 Matcher matcher = pattern.matcher(hjdz);
                 String likeStr = "";
-                if(matcher.find()){
-                    likeStr = hjdz.substring(0,matcher.start());
+                if (matcher.find()) {
+                    likeStr = hjdz.substring(0, matcher.start());
                 }
                 String sql = "select sourceaddress,city,county,town,community from \n" + Constant.getSearchTableName() +
-                        "   where  county = '松江区' and town is not null and sourceaddress like '%"+likeStr+"%' limit 1";
+                        "   where  county = '松江区' and town is not null and sourceaddress like '%" + likeStr + "%' limit 1";
 
                 List<Map<String, Object>> dbData = DbConnection.getInstance().runSqlStr(sql);
-                if(dbData != null && dbData.size() == 1){
+                if (dbData != null && dbData.size() == 1) {
                     Map<String, Object> sqlData = dbData.get(0);
                     tmpSongjiangEntity.setHjdbzjw(sqlData.get("community") != null ? sqlData.get("community").toString() : null);
                     tmpSongjiangEntity.setHjdbzjd(sqlData.get("town") != null ? sqlData.get("town").toString() : null);
                     tmpSongjiangEntity.setHjdbzqh(sqlData.get("county") != null ? sqlData.get("county").toString() : null);
-                    tmpSongjiangEntity.setHjdzdz("上海市"+tmpSongjiangEntity.getHjdbzqh()+tmpSongjiangEntity.getHjdbzjd()+tmpSongjiangEntity.getHjdbzjw()+hjdz.replace(tmpSongjiangEntity.getHjdbzjd(),""));
+                    tmpSongjiangEntity.setHjdzdz("上海市" + tmpSongjiangEntity.getHjdbzqh() + tmpSongjiangEntity.getHjdbzjd() + tmpSongjiangEntity.getHjdbzjw() + hjdz.replace(tmpSongjiangEntity.getHjdbzjd(), ""));
                 }
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
-        return  dataList;
+        return dataList;
     }
 
     //  分页查询地址表
@@ -121,93 +123,71 @@ public class YyskAddressStandardizationServiceImpl {
         }
     }
 
-    //   批量修改地址表
-    /*public void updateDatas(List<YyskAddressStandardization> sjArrDzbzhSjWcbryDzxxList, String tableName) {
-        String sqls = "update " + tableName + " set lat = ?,lon = ?,market = ?, distinguish = ?, street_town = ?, residential_committee = ?" +
-                ", return_address = ? , standard_address = ? ,match_level = ? , update_time = ? where address = ?";
-        try (PreparedStatement preparedStatement = DbConnection.getInstance().connection.prepareStatement(sqls)) {
-            for (YyskAddressStandardization entity : sjArrDzbzhSjWcbryDzxxList) {
-                if (entity.getAddress() != null) {
-                    if (entity.getLat() == null) {
-                        preparedStatement.setNull(1, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(1, entity.getLat());
-                    }
-                    if (entity.getLon() == null) {
-                        preparedStatement.setNull(2, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(2, entity.getLon());
-                    }
-                    if (entity.getMarket() == null) {
-                        preparedStatement.setNull(3, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(3, entity.getMarket());
-                    }
-                    if (entity.getDistinguish() == null) {
-                        preparedStatement.setNull(4, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(4, entity.getDistinguish());
-                    }
-                    if (entity.getStreetTown() == null) {
-                        preparedStatement.setNull(5, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(5, entity.getStreetTown());
-                    }
-                    if (entity.getResidentialCommittee() == null) {
-                        preparedStatement.setNull(6, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(6, entity.getResidentialCommittee());
-                    }
-                    if (entity.getReturnAddress() == null) {
-                        preparedStatement.setNull(7, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(7, entity.getReturnAddress());
-                    }
-                    if (entity.getStandardAddress() == null) {
-                        preparedStatement.setNull(8, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(8, entity.getStandardAddress());
-                    }
-                    if (entity.getMatchLevel() == null) {
-                        preparedStatement.setNull(9, Types.VARCHAR);
-                    } else {
-                        preparedStatement.setString(9, entity.getMatchLevel());
-                    }
-                    if (entity.getUpdateTime() == null) {
-                        preparedStatement.setNull(10, Types.DATE);
-                    } else {
-                        preparedStatement.setLong(10, entity.getUpdateTime().getTime());
-                    }
-                    preparedStatement.setString(11, entity.getAddress());
-                    // 将当前的 SQL 语句添加到批量操作中
-                    preparedStatement.addBatch();
+    /**
+     * 生成当前时间的字符串,格式为:年-月-日 时:分:秒
+     *
+     * @return 格式化后的时间字符串
+     */
+    public static String getCurrentTimeString() {
+        // 获取当前日期时间
+        LocalDateTime now = LocalDateTime.now();
+        // 定义时间格式器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 格式化并返回
+        return now.format(formatter);
+    }
+
+    /**
+     * 获取当前时间戳(精确到毫秒)加4位随机自然数的字符串
+     * 格式示例:1730289600123 + 4567 → "17302896001234567"
+     *
+     * @return 组合后的字符串
+     */
+    public static String getTimestampWithRandom() {
+        long timestamp = System.currentTimeMillis();
+        // 高并发场景推荐使用ThreadLocalRandom
+        int randomNum = 1000 + ThreadLocalRandom.current().nextInt(9000);
+        return timestamp + String.valueOf(randomNum);
+    }
+
+    public void insertIntoSjAddressGovernanceResultsTableFinal(List<TAddressCallback> datas) {
+        StringBuilder sqls = new StringBuilder("INSERT INTO kjyy_dev.sj_address_governance_results_table_final (abbreviated_address,batch_number," +
+                "city,community,county,data_table,field,in_data,lat,lon,match_level,original_address,row_id,standard_address,town,x,y) values ");
+        Set<String> rowIds = new HashSet<>();
+        String rowId = getTimestampWithRandom();
+        for (TAddressCallback item : datas) {
+            if (item.getStatusTag() == 2 && StringUtils.isNotEmpty(item.getLon()) && StringUtils.isNotEmpty(item.getLat())) {
+                sqls.append("('").append(item.getCankaoAddress()).append("',");
+                sqls.append("'").append("diyBatchNumber").append("',");
+                sqls.append("'").append(item.getPname()).append("',");
+                sqls.append("'").append(item.getCommunity()).append("',");
+                sqls.append("'").append(item.getCounty()).append("',");
+                sqls.append("'").append("callBack").append("',");
+                sqls.append("'").append("callBack").append("',");
+//              当前时间字符串
+                sqls.append("'").append(getCurrentTimeString()).append("',");
+                sqls.append("'").append(item.getLat()).append("',");
+                sqls.append("'").append(item.getLon()).append("',");
+                sqls.append("'").append("回流").append("',");
+                sqls.append("'").append(item.getSearchAddress()).append("',");
+//              rowId:时间戳加随机4位自然数
+                while (rowIds.contains(rowId)) {
+                    rowId = getTimestampWithRandom();
                 }
+                rowIds.add(rowId);
+                sqls.append("'").append(rowId).append("',");
+                sqls.append("'").append(item.getStandardAddress()).append("',");
+                sqls.append("'").append(item.getStreetTownName()).append("',");
+//              x,y:使用经纬度转换
+                double[] xy = Coordinate.wgs84_to_shcj(Double.parseDouble(item.getLon()), Double.parseDouble(item.getLat()));
+                sqls.append("'").append(xy[0]).append("',");
+                sqls.append("'").append(xy[1]).append("') ,");
             }
-            // 执行批量操作
-            int[] updateCounts = preparedStatement.executeBatch();
-            System.out.println("总条数:" + sjArrDzbzhSjWcbryDzxxList.size() + ";更新的记录数: " + updateCounts.length);
-        } catch (SQLException throwables) {
-            System.err.println("------updateError--------------------------------------" + sqls + "更新异常!");
-            throwables.printStackTrace();
-            System.err.println("更新异常" + throwables);
-        }
-    }*/
-
-    public void updateSDDatas(List<Map<String,Object>> datas){
-        StringBuffer sqls = new StringBuffer("INSERT INTO songjiang_uni_sc_id_v1 (uni_sc_id,real_address,street_town_name,standard_address,county,town) values ");
-        for(Map<String,Object> item:datas){
-            sqls.append("('").append(item.get("uni_sc_id")).append("',");
-            sqls.append("'").append(item.get("real_address")).append("',");
-            sqls.append("'").append(item.get("street_town_name")).append("',");
-            sqls.append("'").append(item.get("standard_address")).append("',");
-            sqls.append("'").append(item.get("county")).append("',");
-            sqls.append("'").append(item.get("street_town_name")).append("') ,");
         }
-        String runSqlStr = sqls.toString().substring(0,sqls.toString().length() - 2);
-        try{
-            System.out.println(runSqlStr);
+        String runSqlStr = sqls.substring(0, sqls.toString().length() - 2);
+        try {
             DbConnection.getInstance().updateSql(runSqlStr);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
@@ -327,8 +307,9 @@ public class YyskAddressStandardizationServiceImpl {
             System.out.println("跳出迭代!");
         }
     }
-    public List<TmpSongjiangEntity> selectBydz(List<TmpSongjiangEntity> listData){
-        for(TmpSongjiangEntity tmpSongjiangEntity:listData){
+
+    public List<TmpSongjiangEntity> selectBydz(List<TmpSongjiangEntity> listData) {
+        for (TmpSongjiangEntity tmpSongjiangEntity : listData) {
 
         }
         return listData;

+ 21 - 14
src/main/java/com/skyversation/poiaddr/util/AddrSplitLmrMap.java

@@ -121,32 +121,41 @@ public class AddrSplitLmrMap {
 
     public static AddrBean outAddrMapInAddr(String addr) {
         AddrBean addrMap = new AddrBean();
+        String splitAddress = addr + "";
+//      添加别名替换逻辑
+        for (String errAddr : ShanghaiAddressSplitUtil.errAddrReStr.keySet()) {
+            if (splitAddress.contains(errAddr)) {
+                splitAddress = splitAddress.replaceAll(errAddr, ShanghaiAddressSplitUtil.errAddrReStr.get(errAddr));
+            }
+        }
+        splitAddress = splitAddress.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("(", "").replaceAll(")", "").replaceAll(":", "").replaceAll(":", "")
+                .replaceAll("\\[", "").replaceAll("]", "").replaceAll("\\{", "").replaceAll("}", "").replaceAll("\\|", "").replaceAll(" ", "");
         addrMap.setOldAddress(addr + "");
-        addrMap.setAddress(addr.replaceAll(" ", ""));
-        if (addr.contains("http")) {
+        addrMap.setAddress(splitAddress);
+        if (splitAddress.contains("http")) {
             //      先判断是否是链接
             addrMap.setRule("-1");
         } else {
 //          判断外地省名
             boolean errorAddr = false;
             for (String s : All_NO_SH_tree.keySet()) {
-                if (addr.startsWith(s) || (addr.startsWith(s.substring(0, 2)) && !ifTrueAddr(addr, s.substring(0, 2)))) {
+                if (splitAddress.startsWith(s) || (splitAddress.startsWith(s.substring(0, 2)) && !ifTrueAddr(splitAddress, s.substring(0, 2)))) {
                     addrMap.setProvinces(s);
                     addrMap.setRule("0");
-                    if (!s.contains("上海")) {
+                    if (!s.contains("上海") && !splitAddress.contains("上海")) {
                         errorAddr = true;
                     }
                 }
 //              判断外地市名
                 for (String m : All_NO_SH_tree.get(s).keySet()) {
-                    if (addr.contains(m) && !addr.contains(m + "场")) {
+                    if (splitAddress.contains(m) && !splitAddress.contains(m + "场")) {
                         addrMap.setProvinces(s);
                         addrMap.setMarket(m);
                         addrMap.setRule("-2");
                     }
                     //              判断外地县名
                     for (String x : All_NO_SH_tree.get(s).get(m)) {
-                        if (x.length() > 2 && addr.contains(x) && !addr.contains(x + "场")) {
+                        if (x.length() > 2 && splitAddress.contains(x) && !splitAddress.contains(x + "场")) {
                             addrMap.setDistinguish(x);
                             addrMap.setProvinces(s);
                             addrMap.setMarket(m);
@@ -156,12 +165,10 @@ public class AddrSplitLmrMap {
                     }
                 }
             }
-
-
 //          如果不是外地数据和连接数据的话
             if (!errorAddr) {
 //              上海地址匹配
-                if (addr.startsWith("上海")) {
+                if (splitAddress.startsWith("上海")) {
                     addrMap.setProvinces("上海市");
                     addrMap.setMarket("上海市");
                     addrMap.setRule("2");
@@ -171,7 +178,7 @@ public class AddrSplitLmrMap {
 //                  区匹配标识
                 String sh_distinguish = "";
                 for (String d : D_S_C_tree.keySet()) {
-                    if (addr.contains(d) || addr.contains(d.substring(0, 2) + "县")) {
+                    if (splitAddress.contains(d) || splitAddress.contains(d.substring(0, 2) + "县")) {
                         ifContains = true;
                         addrMap.setProvinces("上海市");
                         addrMap.setMarket("上海市");
@@ -180,7 +187,7 @@ public class AddrSplitLmrMap {
                         addrMap.setRule("4");
                         break;
                     }
-                    if (addr.contains(d.substring(0, 2)) && !ifTrueAddr(addr, d.substring(0, 2))) {
+                    if (splitAddress.contains(d.substring(0, 2)) && !ifTrueAddr(splitAddress, d.substring(0, 2))) {
                         addrMap.setProvinces("上海市");
                         addrMap.setMarket("上海市");
                         addrMap.setDistinguish(d);
@@ -191,7 +198,7 @@ public class AddrSplitLmrMap {
 //                  镇匹配
                 for (String d : D_S_C_tree.keySet()) {
                     for (String s : D_S_C_tree.get(d).keySet()) {
-                        if (addr.contains(s)) {
+                        if (splitAddress.contains(s)) {
                             addrMap.setProvinces("上海市");
                             addrMap.setMarket("上海市");
                             addrMap.setDistinguish(d);
@@ -199,7 +206,7 @@ public class AddrSplitLmrMap {
                             addrMap.setRule("8");
                             break;
                         }
-                        if (addr.contains(s.substring(0, 2)) && ifContains && !sh_distinguish.isEmpty() && sh_distinguish.contains(d)) {
+                        if (splitAddress.contains(s.substring(0, 2)) && ifContains && !sh_distinguish.isEmpty() && sh_distinguish.contains(d)) {
                             addrMap.setProvinces("上海市");
                             addrMap.setMarket("上海市");
                             addrMap.setDistinguish(d);
@@ -384,7 +391,7 @@ public class AddrSplitLmrMap {
     public static void main(String[] args) {
         AddrSplitLmrMap AddrSplitLmrMap = new AddrSplitLmrMap();
         AddrSplitLmrMap.initFile();
-        System.out.println(outAddrMapInAddr("上海市嘉定区兴庆路1551号"));
+        System.out.println(outAddrMapInAddr("中国(上海)自由贸易试验区上海市张江高科技园区爱迪生路326号302-5室"));
         // 测试示例(包含所有典型场景)
 //        行政区划、街镇、居委、路名、弄号、室号
 ////      路名

+ 7 - 10
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -821,7 +821,6 @@ public class AddressTools {
      */
     public JSONArray findBestMatch2(String address, JSONArray array, String param) {
         JSONArray resultArray = new JSONArray();
-        double maxTotalScore = 0;
         // 处理输入地址的分词和数字前文本
         SplitAddress addrBean = ShanghaiAddressSplitUtil.splitBestAddress(address);
         AddressInfo addressInfo = processAddress(addrBean.getAddr());
@@ -883,19 +882,17 @@ public class AddressTools {
                 // 第一步:全词匹配比例
                 double score1 = calculateFullWordMatchScore(addrBean.getAddr(), addrBean2.getAddr());
 
-                // 第二步:数字匹配得分
-                double score2 = calculateNumberMatchScore(addressInfo.firstNumber, addrInfo.firstNumber);
-
+                // 第二步:数字匹配得分(应该匹配弄号、楼号、室号)
+                Map<String, String> roomInfo = AddrSplitLmrMap.parseAddress(addrBean.getAddr());
+                Map<String, String> roomInfo2 = AddrSplitLmrMap.parseAddress(addrBean2.getAddr());
+                double score2 = calculateNumberMatchScore(addressInfo.firstNumber, addrInfo.firstNumber)+calculateNumberMatchScore(roomInfo.get("弄号"), roomInfo2.get("弄号"));
                 // 第三步:数字前文本匹配得分
-                double score3 = calculatePrefixTextMatchScore(addressInfo.prefixText, addrInfo.prefixText);
+                double score3 = calculatePrefixTextMatchScore(addressInfo.prefixText, addrInfo.prefixText) + calculatePrefixTextMatchScore(addrBean.getDistrict() + addrBean.getStreet(), addrBean2.getDistrict() + addrBean2.getStreet());
 
                 double totalScore = score1 + score2 + score3;
 
-                if (totalScore > maxTotalScore) {
-                    maxTotalScore = totalScore;
-                    obj.put("总分", totalScore);
-                    resultArray.add(obj);
-                }
+                obj.put("总分", totalScore);
+                resultArray.add(obj);
             }
         }
 //      添加排序应该根据总分是从大到小排序

+ 1 - 0
src/main/java/com/skyversation/poiaddr/util/ExcelReaderUtils.java

@@ -63,6 +63,7 @@ public class ExcelReaderUtils {
         try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
             workbook.write(outputStream);
         } finally {
+            dataList.clear();
             workbook.close();
         }
     }

+ 10 - 30
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java

@@ -33,7 +33,6 @@ public class ShanghaiAddressSplitUtil {
         String districtCode;
         String streetCode;
         String communityCode;
-
     }
 
     private static Map<String, List<threeLevelAddress>> All_STREET_IN_SHANGHAI;
@@ -97,6 +96,10 @@ public class ShanghaiAddressSplitUtil {
 //      特殊路名
         errAddrReStr.put("蓝天新村", "上海市松江区中山街道蓝天新村");
         errAddrReStr.put("环城新村", "上海市松江区车墩镇环城新村");
+        errAddrReStr.put("中国(上海)自由贸易试验区", "");
+        errAddrReStr.put("张江高科技园区", "浦东新区张江镇");
+        errAddrReStr.put("流动", "");
+        errAddrReStr.put("联系地址", "");
         Map<String, threeLevelAddress> districtMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> streetMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> communityMap = new HashMap<>();
@@ -511,8 +514,8 @@ public class ShanghaiAddressSplitUtil {
             }
         }
         List<SplitAddress> addressList = new ArrayList<>();
-        String beautyString = sourceAddress.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("(", "").replaceAll(")", "")
-                .replaceAll("\\[", "").replaceAll("]", "").replaceAll("\\{", "").replaceAll("}", "");
+        String beautyString = sourceAddress.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("(", "").replaceAll(")", "").replaceAll(":", "").replaceAll(":", "")
+                .replaceAll("\\[", "").replaceAll("]", "").replaceAll("\\{", "").replaceAll("}", "").replaceAll("\\|", "").replaceAll(" ", "");
         StringBuilder sb = new StringBuilder();
         for (char c : beautyString.toCharArray()) {
             // 检查是否为全角数字
@@ -592,33 +595,10 @@ public class ShanghaiAddressSplitUtil {
     */
     public static void main(String[] args) throws Exception {
         new ShanghaiAddressSplitUtil().init();
-//      搜索地址
-        String searchAddress = "王家浜路130号101室";
-        System.out.println("》》搜索地址:" + searchAddress);
-        System.out.println();
-//      返回的参考地址列表
-        Set<String> arrayAddress = new HashSet<>();
-        arrayAddress.add("茸梅路与王家浜路交叉口西北140米");
-        arrayAddress.add("茸梅路与王家浜路交叉口东南100米");
-        arrayAddress.add("上海市松江区中山街道五龙居民委员会王家浜路130号101室");
-        arrayAddress.add("王家浜路80号101室");
-        System.out.println("》》返回参考地址列表:" + arrayAddress);
-        System.out.println();
-//      新建JSONArray对象
-        JSONArray array = new JSONArray();
-//      把Set对象转换为接口接收的JSONArray对象
-        for (String key : arrayAddress) {
-            JSONObject item_ = new JSONObject();
-            item_.put("sourceaddress", key);
-            array.add(item_);
-        }
-        JSONArray reData = AddressTools.getInstance().findBestMatch2(searchAddress, array, "sourceaddress");
-        System.out.println("------------------打分后从高到低显示》》》》》》》》》》》》");
-        System.out.println();
-        for (int i = 0; i < reData.size(); i++) {
-            JSONObject jo = reData.getJSONObject(i);
-            System.out.println("返回参考地址:" + jo.getString("sourceaddress") + "\t打分:" + jo.getString("总分"));
-        }
+        AddrSplitLmrMap AddrSplitLmrMap = new AddrSplitLmrMap();
+        AddrSplitLmrMap.initFile();
+//        System.out.println(splitBestAddress("(光明云庐)陆家圈路|63弄|66号|602"));
+        System.out.println(com.skyversation.poiaddr.util.AddrSplitLmrMap.outAddrMapInAddr("贵州省贵州省上海市松江区龙腾路333号"));
         /*AddrSplitLmrMap addrSplitLmrMap = new AddrSplitLmrMap();
         addrSplitLmrMap.initFile();
         String testAddress = "上海市嘉定区兴庆路1551号";

+ 10 - 1
src/main/java/com/skyversation/poiaddr/util/net/AddressNetTools.java

@@ -47,7 +47,16 @@ public class AddressNetTools {
         return EntityUtils.toString(entity);
     }
 
-    @Async
+    /**
+     * 为了避免服务方压力过载,去掉@Async异步注解
+     * @param httpMethod
+     * @param url
+     * @param params
+     * @param headerMap
+     * @param ifReloadSize
+     * @return
+     */
+//    @Async
     public ResponseEntity requestGetOrPost(HttpMethod httpMethod, String url, JSONObject params, Map<String, String> headerMap, Integer ifReloadSize) {
         SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
         requestFactory.setConnectTimeout(5000);

+ 77 - 17
src/main/java/com/skyversation/poiaddr/util/tasks/ScheduledTasks.java

@@ -2,6 +2,7 @@ package com.skyversation.poiaddr.util.tasks;
 
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.bean.AddressResult;
+import com.skyversation.poiaddr.bean.GeoJsonBean;
 import com.skyversation.poiaddr.bean.TAddressCallback;
 import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
 import com.skyversation.poiaddr.config.DbConnection;
@@ -87,21 +88,19 @@ public class ScheduledTasks {
     public static List<String> callBackAllErrorAddrs = new CopyOnWriteArrayList<>();
     //      暂存的所有地址库中的数据
     public static Map<String, List<YyskDmdzAddressStandardization>> allDmdzData = new ConcurrentHashMap<>();
-
     @Resource
     private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;
 
-
     @Resource
     private YyszAddressRepository yyszAddressRepository;
 
     /**
      * 每5分钟请求一次数据库,防止jdbc断开链接
      */
-//    @Scheduled(cron = "15 */5 * * * *")
+    @Scheduled(cron = "15 */5 * * * *")
     public void setCallBackAddrs1() {
         try {
-            System.out.println(DbConnection.getInstance().runSqlStr("select count(*) from t_address_callback"));
+            System.out.println(DbConnection.getInstance().runSqlStr("select * from t_address_callback limit 1"));
         } catch (Exception e) {
             System.err.println("定时查询回流表数据异常:" + e);
         }
@@ -159,7 +158,14 @@ public class ScheduledTasks {
                     try {
                         Map<String, Object> infoItem2 = new HashMap<>();
                         infoItem2.put("操作", "判断地址并调用市中心接口");
-                        infoItem2.put("开始时间", System.currentTimeMillis());
+                        long startTime2 = System.currentTimeMillis();
+                        infoItem2.put("开始时间", startTime2);
+                        try {
+                            // 让当前线程睡眠500毫秒
+                            Thread.sleep(500);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
 //                      首先判断查询地址是否为非上海数据,以及异常数据
                         if (item.getSearchAddress() != null && item.getSearchAddress().length() > 2) {
                             String addr = item.getSearchAddress();
@@ -181,7 +187,7 @@ public class ScheduledTasks {
                                             content.setCommunityCode(null);
                                         }
                                     }
-                                    AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult, splitAddress);
+                                    AddressQueryEngine.getInstance().getCjWgWgwByLocV4(addressResult, splitAddress);
                                     item.setLat(contentBean.getLat().toString());
                                     item.setLon(contentBean.getLon().toString());
                                     item.setPname(contentBean.getPname());
@@ -211,7 +217,7 @@ public class ScheduledTasks {
                         } else {
                             item.setStatusTag(-1);
                         }
-                        infoItem2.put("结束时间", System.currentTimeMillis());
+                        infoItem2.put("用时(毫秒)", System.currentTimeMillis() - startTime2);
                         infoItem2.put("备注", "搜索地址:" + item.getSearchAddress());
                         ScheduledTasks.logInfos.add(infoItem2);
                         updateCallBackDatas.add(item);
@@ -221,12 +227,19 @@ public class ScheduledTasks {
                             long inBaseTime = System.currentTimeMillis();
                             infoItem3.put("开始时间", inBaseTime);
                             AreaService.getInstance().updateCallbackData(updateCallBackDatas);
-                            updateCallBackDatas.clear();
                             long outBaseTime = System.currentTimeMillis();
-                            infoItem3.put("结束时间", outBaseTime);
+                            infoItem3.put("用时(毫秒)", outBaseTime - inBaseTime);
                             infoItem3.put("备注", "1000条数据入库用时" + (outBaseTime - inBaseTime) + "毫秒!");
                             ScheduledTasks.logInfos.add(infoItem3);
                             ExcelReaderUtils.writeToExcel(ScheduledTasks.logInfos, "./logInfos_" + System.currentTimeMillis() + ".xlsx");
+                            // 添加操作入库到结果表
+                            try {
+                                yyskAddressStandardizationService.insertIntoSjAddressGovernanceResultsTableFinal(updateCallBackDatas);
+                            } catch (Exception e) {
+                                System.err.println("回流更新到kjyy_dev结果表出现异常:" + e);
+                            } finally {
+                                updateCallBackDatas.clear();
+                            }
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
@@ -240,13 +253,20 @@ public class ScheduledTasks {
                     long inBaseTime = System.currentTimeMillis();
                     infoItem.put("开始时间", inBaseTime);
                     AreaService.getInstance().updateCallbackData(updateCallBackDatas);
-                    updateCallBackDatas.clear();
                     long outBaseTime = System.currentTimeMillis();
                     infoItem.put("用时(毫秒)", (outBaseTime - inBaseTime));
                     infoItem.put("备注", "1000条数据入库用时" + (outBaseTime - inBaseTime) + "毫秒!");
                     ScheduledTasks.logInfos.add(infoItem);
                     ExcelReaderUtils.writeToExcel(ScheduledTasks.logInfos, "./logInfos_" + System.currentTimeMillis() + ".xlsx");
                 }
+                // 添加操作入库到结果表
+                try {
+                    yyskAddressStandardizationService.insertIntoSjAddressGovernanceResultsTableFinal(updateCallBackDatas);
+                } catch (Exception e) {
+                    System.err.println("回流更新到kjyy_dev结果表出现异常:" + e);
+                } finally {
+                    updateCallBackDatas.clear();
+                }
                 System.out.println("》》》》》》》》》》》》回流表数据查询并更新结束");
                 callBackRunStatus = 0;
             } else {
@@ -258,7 +278,7 @@ public class ScheduledTasks {
             System.out.println("loginfos:" + ScheduledTasks.logInfos);
             callBackRunStatus = 0;
             try {
-                ExcelReaderUtils.writeToExcel(ScheduledTasks.logInfos, "./logInfos_" + System.currentTimeMillis() + ".xlsx");
+                ExcelReaderUtils.writeToExcel(ScheduledTasks.logInfos, "./logInfos_" + YyskAddressStandardizationServiceImpl.getCurrentTimeString() + ".xlsx");
             } catch (Exception e2) {
                 e2.printStackTrace();
             }
@@ -308,18 +328,58 @@ public class ScheduledTasks {
         }
     }
 
+    /**
+     * 系统初始化的时候要清洗一波松江区的居委
+     *
+     * @param item
+     */
+    public static void dmdzDataClear(YyskDmdzAddressStandardization item) {
+        String address = item.getSourceaddress();
+        SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(address);
+        try {
+            String xzqh = StringUtils.hasText(splitAddress.getDistrict()) ? splitAddress.getDistrict() : item.getCounty();
+            if (!xzqh.equals("松江区")) {
+//              得到经纬度,落点判断是否是这个区划和街道,不属于的话
+                Float lon = item.getLon();
+                Float lat = item.getLat();
+                Double lonDb = Double.parseDouble(lon.toString());
+                Double latDb = Double.parseDouble(lat.toString());
+                GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygonSl(lonDb, latDb);
+                if (cjBean != null && cjBean.getProperties() != null && cjBean.getProperties().getString("所属区") != null && cjBean.getProperties().getString("所属街") != null && cjBean.getProperties().getString("所属区").contains(xzqh)) {
+                    if (!StringUtils.hasText(item.getCommunity()) || (cjBean.getProperties() != null && !cjBean.getProperties().getString("居委_1").contains(item.getCommunity()))) {
+                        item.setTown(cjBean.getProperties().getString("所属街"));
+                        item.setData_type(item.getData_type() + "data_clear");
+                        item.setCommunity(cjBean.getProperties().getString("居委_1"));
+//                      更新数据
+                        AreaService.getInstance().updateYyszAddressRepositoryOne(item);
+                    }
+                } else {
+                    item.setType("clear_err");
+//                  更新数据
+                    AreaService.getInstance().updateYyszAddressRepositoryOne(item);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     public static void putAllDmdzData(String addr, YyskDmdzAddressStandardization item) {
         Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr);
         if (roadInfos != null && StringUtils.hasText(roadInfos.get("路名"))) {
             addr = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "");
         }
         if (StringUtils.hasText(addr)) {
-            if (!ScheduledTasks.allDmdzData.containsKey(addr)) {
-                List<YyskDmdzAddressStandardization> datas = new ArrayList<>();
-                datas.add(item);
-                ScheduledTasks.allDmdzData.put(addr, datas);
-            } else {
-                ScheduledTasks.allDmdzData.get(addr).add(item);
+//          TODO 数据初始化的时候清洗松江区的居委
+//            dmdzDataClear(item);
+            if (!item.getType().contains("clear_err")) {
+                if (!ScheduledTasks.allDmdzData.containsKey(addr)) {
+                    List<YyskDmdzAddressStandardization> datas = new ArrayList<>();
+                    datas.add(item);
+                    ScheduledTasks.allDmdzData.put(addr, datas);
+                } else {
+                    ScheduledTasks.allDmdzData.get(addr).add(item);
+                }
             }
         }
     }