1
0
فهرست منبع

数据治理入库-房屋匹配

chenendian 5 روز پیش
والد
کامیت
2c0f9fb619

+ 28 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/third/DealExcelController.java

@@ -58,8 +58,8 @@ public class DealExcelController extends BaseController {
      * 这里遍历循环关于list   (4.projectId , 不动产单元号,业务号。)
      * 这里遍历循环关于list   (4.projectId , 不动产单元号,业务号。)
      * @return
      * @return
      */
      */
-    @GetMapping("tdgyShpDeal/{fileName}")
-    public R<List<Map<String,String>>> getTdgyShpOfZdShpContains(@PathVariable String fileName) {
+    @GetMapping("tdgyShpDealOfLand/{fileName}")
+    public R<List<Map<String,String>>> getTdgyShpOfZdShpContainsOfLand(@PathVariable String fileName) {
         try {
         try {
             List<Map<String, String>> tdgyShpOfZdList = dealExcelService.getTdgyShpOfZdShpContains();
             List<Map<String, String>> tdgyShpOfZdList = dealExcelService.getTdgyShpOfZdShpContains();
             if (CollectionUtils.isNotEmpty(tdgyShpOfZdList)) {
             if (CollectionUtils.isNotEmpty(tdgyShpOfZdList)) {
@@ -71,7 +71,31 @@ public class DealExcelController extends BaseController {
 
 
                 //这里进行数据入库处理,直接根据业务号,和项目id去抓取不动产的附件信息并且增加节点:
                 //这里进行数据入库处理,直接根据业务号,和项目id去抓取不动产的附件信息并且增加节点:
                 dealExcelService.addBDCDataAndAttachment(tdgyShpOfZdList);
                 dealExcelService.addBDCDataAndAttachment(tdgyShpOfZdList);
+            }
+            return R.ok(tdgyShpOfZdList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(e.getMessage());
+        }
+    }
+
+
 
 
+    /**
+     * 获取土地供应对应的矢量数据,在地表宗地中对应的ywh,和不动产单元号
+     * 这里遍历循环关于list   (4.projectId , 不动产单元号,业务号。)
+     * @return
+     */
+    @GetMapping("tdgyShpDealOfHouse/{fileName}")
+    public R<List<Map<String,String>>> getTdgyShpOfZdShpContainsOfHouse(@PathVariable String fileName) {
+        try {
+            List<Map<String, String>> tdgyShpOfZdList = dealExcelService.getTdgyShpOfZdShpContains();
+            if (CollectionUtils.isNotEmpty(tdgyShpOfZdList)) {
+                String uploadFile = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\" + fileName;
+                Path filePath = Paths.get(uploadFile);
+                File file = filePath.toFile();
+                Map<String, List<Map<String, String>>> excelDataMap = readExcelWithMergedHeaders(file);
+                tdgyShpOfZdList = dealExcelService.getBusinessCodeFromExcelOfHouse(tdgyShpOfZdList, excelDataMap);
             }
             }
             return R.ok(tdgyShpOfZdList);
             return R.ok(tdgyShpOfZdList);
         } catch (Exception e) {
         } catch (Exception e) {
@@ -81,6 +105,8 @@ public class DealExcelController extends BaseController {
     }
     }
 
 
 
 
+
+
     /**
     /**
      * 处理excel数据(按合并列头分组读取)  v3
      * 处理excel数据(按合并列头分组读取)  v3
      */
      */

+ 86 - 9
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/DealExcelServiceImpl.java

@@ -69,6 +69,9 @@ public class DealExcelServiceImpl {
 
 
     public final static List<LandType> allLandTypeList = new ArrayList<>();
     public final static List<LandType> allLandTypeList = new ArrayList<>();
 
 
+    /** 不动产单元号参与匹配的前缀长度(前19位) */
+    private static final int SUB_BDCDYH_LENGTH = 19;
+
     @Autowired
     @Autowired
     private ProjectService projectService;
     private ProjectService projectService;
 
 
@@ -198,6 +201,71 @@ public class DealExcelServiceImpl {
         return retList;
         return retList;
     }
     }
 
 
+
+    /**
+     * 这里使用截取19位数据进行包含判断
+     *
+     * @param list
+     * @param excelDataMap
+     * @return
+     */
+    public List<Map<String,String>> getBusinessCodeFromExcelOfHouse(List<Map<String,String>> list,Map<String, List<Map<String, String>>> excelDataMap) {
+        // 需求:list 中每个 map 含 projectId/nodeId/detailsId/bdcdyh,
+        //      excelDataMap["不动产权信息列表"] 中每个元素含 业务号/不动产单元号,
+        //      规则:list 的 bdcdyh 前19位 == excel 元素的 不动产单元号 前19位,则把对应 业务号 作为 ywh 回填到 list 元素中。
+        List<Map<String, String>> bdcExcelDataList = excelDataMap == null ? null : excelDataMap.get("不动产权信息列表");
+        if (CollectionUtils.isEmpty(list) || CollectionUtils.isEmpty(bdcExcelDataList)) {
+            log.warn("业务号匹配跳过:list 或 不动产权信息列表 为空");
+            return list;
+        }
+
+        // 构建索引:不动产单元号前19位 -> 业务号(以“不动产权信息列表”为基准)
+        Map<String, String> subUnitToBizNoMap = new HashMap<>();
+        for (Map<String, String> item : bdcExcelDataList) {
+            String bdcdyh = item.get("不动产单元号");
+            String ywh = item.get("业务号");
+            if (StringUtils.isBlank(bdcdyh) || StringUtils.isBlank(ywh)) {
+                continue;
+            }
+            bdcdyh = bdcdyh.trim();
+            if (bdcdyh.length() < SUB_BDCDYH_LENGTH) {
+                log.warn("不动产单元号长度不足{}位,忽略:{}", SUB_BDCDYH_LENGTH, bdcdyh);
+                continue;
+            }
+            subUnitToBizNoMap.put(bdcdyh.substring(0, SUB_BDCDYH_LENGTH), ywh.trim());
+        }
+
+        // 遍历 list,按 bdcdyh 前19位匹配,回填 ywh
+        int matched = 0;
+        for (Map<String, String> map : list) {
+            String bdcdyh = map.get("bdcdyh");
+            if (StringUtils.isBlank(bdcdyh)) {
+                continue;
+            }
+            bdcdyh = bdcdyh.trim();
+            if (bdcdyh.length() < SUB_BDCDYH_LENGTH) {
+                log.warn("不动产单元号长度不足{}位,无法匹配:{}", SUB_BDCDYH_LENGTH, bdcdyh);
+                continue;
+            }
+            String ywh = subUnitToBizNoMap.get(bdcdyh.substring(0, SUB_BDCDYH_LENGTH));
+            if (StringUtils.isNotBlank(ywh)) {
+                map.put("ywh", ywh);
+                matched++;
+            } else {
+                log.warn("项目id:{},不动产单元号:{},未匹配到业务号", map.get("projectId"), bdcdyh);
+            }
+        }
+        log.info("业务号匹配完成:待匹配{}条,成功匹配{}条", list.size(), matched);
+        return list;
+    }
+
+
+
+
+
+
+
+
     public List<Map<String,String>> getBusinessCodeFromExcel(List<Map<String,String>> list,Map<String, List<Map<String, String>>> excelDataMap) {
     public List<Map<String,String>> getBusinessCodeFromExcel(List<Map<String,String>> list,Map<String, List<Map<String, String>>> excelDataMap) {
         List<Map<String, String>> bdcExcelDataList = excelDataMap.get("不动产权信息列表");
         List<Map<String, String>> bdcExcelDataList = excelDataMap.get("不动产权信息列表");
         Map<String, String> bdcUnitToBizNoMap = bdcExcelDataList.stream()
         Map<String, String> bdcUnitToBizNoMap = bdcExcelDataList.stream()
@@ -210,8 +278,14 @@ public class DealExcelServiceImpl {
                         (oldVal, newVal) -> newVal
                         (oldVal, newVal) -> newVal
                 ));
                 ));
         for(Map<String, String> bdcExcelData : list){
         for(Map<String, String> bdcExcelData : list){
-            if(bdcUnitToBizNoMap.containsKey(bdcExcelData.get("bdcdyh"))){
-                bdcExcelData.put("ywh",bdcExcelData.get("bdcdyh"));
+            String bdcdyh = bdcExcelData.get("bdcdyh");
+            if (StringUtils.isBlank(bdcdyh)) {
+                continue;
+            }
+            String bizNo = bdcUnitToBizNoMap.get(bdcdyh.trim());
+            if (StringUtils.isNotBlank(bizNo)) {
+                // 注意:ywh 应为 Excel 中的“业务号”,而不是不动产单元号本身
+                bdcExcelData.put("ywh", bizNo);
             }
             }
         }
         }
         return list;
         return list;
@@ -1465,15 +1539,18 @@ public class DealExcelServiceImpl {
 
 
 
 
     /**
     /**
-     * 检查List的Map中所有字段是否为空
-     */
-    /**
-     * 检查List的Map中所有字段是否为空
+     * 检查 List 的 Map 中所有字段是否为空
+     * 说明:列表为空视为“全空”;只要有一条 Map 存在任一非空字段,即返回 false
      */
      */
     private boolean isAllFieldsIsEmpty(List<Map<String, String>> dataList) {
     private boolean isAllFieldsIsEmpty(List<Map<String, String>> dataList) {
-        //todo 这里实现检查List的Map中所有<...
-        // I'll just use the exact text I know was there.
-        // Wait, I need to be careful. I'll read the file again to find the start of the method.
+        if (CollectionUtils.isEmpty(dataList)) {
+            return true;
+        }
+        for (Map<String, String> data : dataList) {
+            if (!isAllFieldsEmpty(data)) {
+                return false;
+            }
+        }
         return true;
         return true;
     }
     }