|
@@ -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;
|
|
|
}
|
|
}
|
|
|
|
|
|