1
0
chenendian 2 месяцев назад
Родитель
Сommit
61291313f5

+ 27 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/MdbAndDbData.java

@@ -0,0 +1,27 @@
+package com.siwei.apply.domain;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/*
+ *
+ * @author siwei
+ * @date 2026-02-13
+ */
+@Data
+public class MdbAndDbData {
+
+
+
+    /** 当前标识名称 */
+    private String currentTableName;
+
+    /** 新增的数据 */
+    private List<Map<String,String>>  mdbFileDataList;
+
+    /** 数据库中的数据 */
+    private List<Map<String,Object>>  dbDataList;
+
+}

+ 2 - 1
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/CadastreManageService.java

@@ -3,6 +3,7 @@ package com.siwei.apply.service.cadastre;
 import com.siwei.apply.domain.CadastreFile;
 import com.siwei.apply.domain.FzssFxrwrz;
 import com.siwei.apply.domain.LayerAndDbData;
+import com.siwei.apply.domain.MdbAndDbData;
 import com.siwei.apply.domain.vo.CadastreFileFilterVo;
 import com.siwei.apply.domain.vo.CheckInfoResultVo;
 import com.siwei.apply.domain.vo.CompareResultVo;
@@ -39,6 +40,6 @@ public interface CadastreManageService {
 
     List<LayerAndDbData> getLayerData(String uploadId);
 
-
+    List<MdbAndDbData> getMdbCompareData(String uploadId) ;
 
 }

+ 161 - 132
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/impl/CadastreManageServiceImpl.java

@@ -3,6 +3,7 @@ package com.siwei.apply.service.cadastre.impl;
 import com.siwei.apply.domain.CadastreFile;
 import com.siwei.apply.domain.FzssFxrwrz;
 import com.siwei.apply.domain.LayerAndDbData;
+import com.siwei.apply.domain.MdbAndDbData;
 import com.siwei.apply.domain.vo.*;
 import com.siwei.apply.mapper.CadastreFileMapper;
 import com.siwei.apply.mapper.FzssFxrwrzMapper;
@@ -49,12 +50,11 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     private FzssFxrwrzMapper fzssFxrwrzMapper;
 
 
-
     /**
      *
      * 解析文件内容,insert 到表中
-     *
-     *
+     * <p>
+     * <p>
      * 1.进行解析数据成为list<map></map>
      * 2.进行调用方法动态插入到当前表中
      * 3.需要修改upload 的表更新状态
@@ -92,7 +92,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 String layerName = layer.GetName();
                 //todo 相关代码
                 if (!layerName.equalsIgnoreCase("T_CGZJ_CWTC_M")
-                    && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
+                        && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
                 ) {
                     continue;
                 }
@@ -103,27 +103,26 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     haveGeom = true;
                 }
 
-                List<Map<String,String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(layerName.toLowerCase(Locale.ROOT));
-                Map<String,String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
-                        s ->  s.get("column_name"),
+                List<Map<String, String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(layerName.toLowerCase(Locale.ROOT));
+                Map<String, String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
+                        s -> s.get("column_name"),
                         s -> s.get("data_type"),
                         (existing, replacement) -> existing // 如果有重复键,保留第一个值
                 ));
-                List<Map<String, Object>> theValueList = getValueList(layer,dbFieldNameAndTypeMap, haveGeom);
-
-                fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "正在执行-"+layerName+"-入库", "info");
+                List<Map<String, Object>> theValueList = getValueList(layer, dbFieldNameAndTypeMap, haveGeom);
+                fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "正在执行-" + layerName + "-入库", "info");
                 //这里直接数据入库,区分增量或者全量
                 Boolean addRes;
-                if("2".equalsIgnoreCase(cadastreFile.getReadStatus())){
+                if ("2".equalsIgnoreCase(cadastreFile.getReadStatus())) {
                     //增量更新
                     addRes = incrementDataStorage(layerName, theValueList);
-                    if(addRes.equals(true)){
-                        fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "增量更新-"+layerName+"-成功", "info");
+                    if (addRes.equals(true)) {
+                        fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "增量更新-" + layerName + "-成功", "info");
                     }
-                }else {
+                } else {
                     addRes = fullDataStorage(layerName, theValueList);
-                    if(addRes.equals(true)){
-                        fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "增量更新-"+layerName+"-成功", "info");
+                    if (addRes.equals(true)) {
+                        fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "增量更新-" + layerName + "-成功", "info");
                     }
                 }
                 log.error("当前图层{},入库结果 {}", layerName, addRes);
@@ -134,7 +133,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             updateCadastreFile.setStatus("1");//入库成功
             updateCadastreFile.setReadMessage("入库成功");//入库成功
             cadastreFileMapper.update(updateCadastreFile);
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前批次-"+cadastreFile.getId()+"-入库成功", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前批次-" + cadastreFile.getId() + "-入库成功", "info");
         } catch (Exception e) {
             log.error("矢量数据入库异常,uploadId: {}", uploadId, e);
             //更新状态
@@ -143,14 +142,13 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             updateCadastreFile.setStatus("2");//入库成功
             updateCadastreFile.setReadMessage("入库失败");//入库成功
             cadastreFileMapper.update(updateCadastreFile);
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前批次-"+uploadId+"-入库失败", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前批次-" + uploadId + "-入库失败", "info");
             throw new ServiceException("矢量数据入库异常," + e.getMessage());
         }
         return result;
     }
 
 
-
     /**
      * 获取比较数据
      *
@@ -177,7 +175,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 String layerName = layer.GetName();
                 //todo 相关代码
                 if (!layerName.equalsIgnoreCase("T_CGZJ_CWTC_M")
-                    && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
+                        && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
                 ) {
                     continue;
                 }
@@ -219,7 +217,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 log.warn("处理文件失败:文件不存在: {}", theFilePath);
                 return null;
             }
-            Long  fileSize = Files.size(currentFilePath);
+            Long fileSize = Files.size(currentFilePath);
 
             // 判断是否为压缩文件
             if (FileExtractUtil.isCompressedFile(theFilePath)) {
@@ -230,38 +228,41 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     throw new ServiceException("解压文件失败:文件不存在,");
                 }
 
-
-
                 //解压成功文件保存
                 if (StringUtils.isNotBlank(extractRes)) {
                     String unZipPath = extractRes;
-                    if("1".equals(fileType)){ //gdb格式
-                            String innerExtractFileName =  FileExtractUtil.getInnerFolderByDirName(unZipPath);
-                            // 如果解压后的文件夹名称不为空,则使用解压后的文件夹名称作为文件名
-                            if(StringUtils.isNotBlank(innerExtractFileName)){
-                                theFileName =   innerExtractFileName;
-                            }else {
-                                String suffix = ".gdb"; //需要后缀为.gdb才能被jar包识别为矢量数据进行读取
-                                //这里解压文件名称作为文件名
-                                String fileName = currentFilePath.getFileName().toString();
-                                theFileName = fileName.substring(0, fileName.lastIndexOf('.'));
-                                theFileName += suffix;
-
-                                //如果当前压缩文件为gdb文件,则解压后的文件夹名称需要修改为.gdb结尾
-                                FileExtractUtil.modifyDirName(unZipPath,unZipPath + suffix);
-                                unZipPath += suffix;
-                                unZipPath = unZipPath.replace(theFileName, "");
-                                if(StringUtils.isNotBlank(unZipPath) && (unZipPath.endsWith("/")||unZipPath.endsWith("\\"))){
-                                    unZipPath = unZipPath.substring(0, unZipPath.length() - 1);
-                                }
+                    if ("1".equals(fileType)) { //gdb格式
+                        String innerExtractFileName = FileExtractUtil.getInnerFolderByDirName(unZipPath);
+                        // 如果解压后的文件夹名称不为空,则使用解压后的文件夹名称作为文件名
+                        if (StringUtils.isNotBlank(innerExtractFileName)) {
+                            theFileName = innerExtractFileName;
+                        } else {
+                            String suffix = ".gdb"; //需要后缀为.gdb才能被jar包识别为矢量数据进行读取
+                            //这里解压文件名称作为文件名
+                            String fileName = currentFilePath.getFileName().toString();
+                            theFileName = fileName.substring(0, fileName.lastIndexOf('.'));
+                            theFileName += suffix;
+
+                            //如果当前压缩文件为gdb文件,则解压后的文件夹名称需要修改为.gdb结尾
+                            FileExtractUtil.modifyDirName(unZipPath, unZipPath + suffix);
+                            unZipPath += suffix;
+                            unZipPath = unZipPath.replace(theFileName, "");
+                            if (StringUtils.isNotBlank(unZipPath) && (unZipPath.endsWith("/") || unZipPath.endsWith("\\"))) {
+                                unZipPath = unZipPath.substring(0, unZipPath.length() - 1);
                             }
-
+                        }
+                        if (StringUtils.isNotBlank(theFileName) && !theFileName.toLowerCase(Locale.ROOT).endsWith(".gdb")) {
+                            throw new ServiceException("文件不是gdb格式矢量数据,请检查重新上传");
+                        }
                     } else if ("2".equals(fileType)) {//如果是mdb文件
-                        String innerExtractFileName =  FileExtractUtil.getInnerFileByDirName(unZipPath);
-                        if(StringUtils.isBlank(innerExtractFileName)) {
+                        String innerExtractFileName = FileExtractUtil.getInnerFileByDirName(unZipPath);
+                        if (StringUtils.isBlank(innerExtractFileName)) {
                             throw new ServiceException("可能入库失败或没有历史版本,无法回退");
                         }
                         theFileName = innerExtractFileName;
+                        if (StringUtils.isNotBlank(theFileName) && !theFileName.toLowerCase(Locale.ROOT).endsWith(".mdb")) {
+                            throw new ServiceException("文件不是mdb格式表格数据,请检查重新上传");
+                        }
                     }
 
                     CadastreFile cadastreFile = new CadastreFile();
@@ -329,7 +330,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             List<String> allTableList = cadastreFileMapper.selectAllTable();
 
             //这里区分文件类型,矢量还是表格的读取方式不一样
-            if(uploadFile.getFileType().equals("1")) { //矢量数据读取方式
+            if (uploadFile.getFileType().equals("1")) { //矢量数据读取方式
                 DataSource ds = ogr.Open(gdbPath + "/" + theFileName, 0); // 0 = 只读
                 if (ds == null) {
                     log.warn("无法打开 gdb");
@@ -365,10 +366,9 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             } else if (uploadFile.getFileType().equals("2")) {//处理表格类型
                 try {
                     List<Map<String, Object>> allMdbTableList = MdbUtil.MdbTables(gdbPath + "/" + theFileName, "", "");
-                    if(CollectionUtils.isNotEmpty(allTableList)) {
+                    if (CollectionUtils.isNotEmpty(allTableList)) {
                         for (Map<String, Object> tableMap : allMdbTableList) {
                             String talbleName = String.valueOf(tableMap.get("name"));
-
                             if (
                                     !talbleName.equalsIgnoreCase("City") &&
                                             !talbleName.equalsIgnoreCase("XZQ")
@@ -376,10 +376,9 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                                 continue;
                             }
 
-                            Map<String, Object>  allMdbTableFieldMap =   MdbUtil.MdbTableContent(gdbPath + "/" + theFileName, talbleName, "", "",  1, 1000);
-
+                            Map<String, Object> allMdbTableFieldMap = MdbUtil.MdbTableContent(gdbPath + "/" + theFileName, talbleName, "", "", 1, 1000);
                             //这里做质量检查
-                            CheckInfoVo checkRes = checkMdbInfo(talbleName, allTableList,allMdbTableFieldMap,uploadFile.getId());
+                            CheckInfoVo checkRes = checkMdbInfo(talbleName, allTableList, allMdbTableFieldMap, uploadFile.getId());
                             if (checkRes.getCheckStatus().equals(false)) { //检查出错
                                 checkInfoFailList.add(checkRes);
                                 checkInfoResult.setResultStatus(false);
@@ -395,7 +394,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     }
                 } catch (Exception e) {
                     log.error("表格数据校验异常,uploadId: {}", uploadFile.getId(), e);
-                    throw new ServiceException("表格数据校验异常,uploadId:"+uploadFile.getId());
+                    throw new ServiceException("表格数据校验异常,uploadId:" + uploadFile.getId());
                 }
             }
             checkInfoResult.setCheckFailList(checkInfoFailList);
@@ -405,10 +404,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
-
-
-
-
     /**
      * 对每个图层进行数据格式校验
      *
@@ -416,7 +411,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
      * @param allTableList
      * @return
      */
-    private CheckInfoVo checkLayerInfo(Layer layer, List<String> allTableList,String uploadId) {
+    private CheckInfoVo checkLayerInfo(Layer layer, List<String> allTableList, String uploadId) {
         //总返回对象
         CheckInfoVo checkInfoVo = new CheckInfoVo();
         checkInfoVo.setCheckStatus(true);//初始化检查通过
@@ -463,7 +458,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         //checkFieldList.add("111");
         //checkFieldList.add("bz");
         //仅获取图层属性
-        List<Map<String, Object>> theValueList = getValueList(layer,new LinkedHashMap<>(), false);
+        List<Map<String, Object>> theValueList = getValueList(layer, new LinkedHashMap<>(), false);
         for (Map<String, Object> theMap : theValueList) {
             for (String fieldName : checkFieldList) {
                 if (Objects.isNull(theMap.get(fieldName))) {
@@ -474,13 +469,13 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         }
         checkInfoVo.setCheckInfoList(checkInfoList);
         //todo 这里需要放入到缓存中,并且可以下载为txt内容
-        if(checkInfoVo.getCheckStatus().equals(true)){
-            checkInfoList.add("当前矢量数据:"+name + "---" + "数据格式为gdb");
-            checkInfoList.add("当前矢量数据:"+name + "---" + "坐标系是CGCS2000");
-            checkInfoList.add("当前矢量数据:"+name + "---" + "检查校验通过!");
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+name + "---" + "数据格式为gdb", "info");
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+name + "---" + "坐标系是CGCS2000", "info");
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+name + "---" + "检查校验通过!", "info");
+        if (checkInfoVo.getCheckStatus().equals(true)) {
+            checkInfoList.add("当前矢量数据:" + name + "---" + "数据格式为gdb");
+            checkInfoList.add("当前矢量数据:" + name + "---" + "坐标系是CGCS2000");
+            checkInfoList.add("当前矢量数据:" + name + "---" + "检查校验通过!");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:" + name + "---" + "数据格式为gdb", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:" + name + "---" + "坐标系是CGCS2000", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:" + name + "---" + "检查校验通过!", "info");
         }
         return checkInfoVo;
     }
@@ -494,7 +489,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
      * @param allTableList
      * @return
      */
-    private CheckInfoVo checkMdbInfo(String mdbTableName, List<String> allTableList,Map<String, Object> mdbTableFieldMap ,String uploadId) {
+    private CheckInfoVo checkMdbInfo(String mdbTableName, List<String> allTableList, Map<String, Object> mdbTableFieldMap, String uploadId) {
         //总返回对象
         CheckInfoVo checkInfoVo = new CheckInfoVo();
         checkInfoVo.setCheckStatus(true);//初始化检查通过
@@ -502,7 +497,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         checkInfoVo.setUploadFileTableName(mdbTableName);
 
         //字段名称
-        List<String>  mdbTableFieldNameList = (List<String>) mdbTableFieldMap.get("column");
+        List<String> mdbTableFieldNameList = (List<String>) mdbTableFieldMap.get("column");
         List<String> lowerCaseMdbTableFieldNameList = mdbTableFieldNameList.stream().map(String::toLowerCase).collect(Collectors.toList());
 
         //所有条数
@@ -533,7 +528,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         //checkFieldList.add("111");
         //checkFieldList.add("bz");
 
-        for (Map<String,String> theMap : dataList) {
+        for (Map<String, String> theMap : dataList) {
             for (String fieldName : checkFieldList) {
                 if (Objects.isNull(theMap.get(fieldName))) {
                     checkInfoList.add(mdbTableName + "--" + fieldName + "字段不能为空!");
@@ -542,20 +537,16 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             }
         }
         checkInfoVo.setCheckInfoList(checkInfoList);
-        if(checkInfoVo.getCheckStatus().equals(true)){
-            checkInfoList.add("当前表格数据:"+mdbTableName + "---" + "数据格式为mdb");
-            checkInfoList.add("当前表格数据:"+mdbTableName + "---" + "检查校验通过!");
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前表格数据:"+mdbTableName + "---" + "数据格式为mdb", "info");
-            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前表格数据:"+mdbTableName + "---" + "检查校验通过!", "info");
+        if (checkInfoVo.getCheckStatus().equals(true)) {
+            checkInfoList.add("当前表格数据:" + mdbTableName + "---" + "数据格式为mdb");
+            checkInfoList.add("当前表格数据:" + mdbTableName + "---" + "检查校验通过!");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前表格数据:" + mdbTableName + "---" + "数据格式为mdb", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前表格数据:" + mdbTableName + "---" + "检查校验通过!", "info");
         }
         return checkInfoVo;
     }
 
 
-
-
-
-
     /**
      * 获取当前图层的所有属性字段名
      *
@@ -583,7 +574,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
      * @param layer
      * @return
      */
-    private List<Map<String, Object>> getValueList(Layer layer,Map<String,String> fieldNameAndTypeMap , Boolean haveGeom) {
+    private List<Map<String, Object>> getValueList(Layer layer, Map<String, String> fieldNameAndTypeMap, Boolean haveGeom) {
         List<Map<String, Object>> list = new ArrayList<>();
         layer.ResetReading();
         Feature feature;
@@ -591,7 +582,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             Map<String, Object> map = new LinkedHashMap<>();
             for (int i = 0; i < feature.GetFieldCount(); i++) {
                 String fieldName = feature.GetFieldDefnRef(i).GetName();
-                if(fieldNameAndTypeMap.containsKey(fieldName.toLowerCase())) {
+                if (fieldNameAndTypeMap.containsKey(fieldName.toLowerCase())) {
                     String fieldType = fieldNameAndTypeMap.get(fieldName.toLowerCase());
                     if (StringUtils.containsIgnoreCase(fieldType, "character")) {
                         map.put(fieldName, feature.GetFieldAsString(i));
@@ -605,7 +596,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     } else {
                         map.put(fieldName, feature.GetFieldAsString(i));
                     }
-                }else {
+                } else {
                     map.put(fieldName, feature.GetFieldAsString(i));
                 }
             }
@@ -625,7 +616,8 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     if (type != ogr.wkbPolygon && type != ogr.wkbMultiPolygon) {
                         continue; // 直接跳过
                     }
-                    ewkt = "SRID=" + 4326 + ";" + geom.ExportToWkt();;
+                    ewkt = "SRID=" + 4326 + ";" + geom.ExportToWkt();
+                    ;
                 }
                 map.put("geom", ewkt);
             }
@@ -683,7 +675,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
-
     /**
      * 获取对比的矢量图层
      *
@@ -704,7 +695,8 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     continue; // 直接跳过
                 }
                 // 将几何对象转换为 WKT 格式
-                ewkt = "SRID=" + 4326 + ";" + geom.ExportToWkt();;
+                ewkt = "SRID=" + 4326 + ";" + geom.ExportToWkt();
+                ;
             }
             list.add(ewkt);
         }
@@ -712,7 +704,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
-
     /**
      * 获取对比的矢量图层
      *
@@ -761,28 +752,26 @@ public class CadastreManageServiceImpl implements CadastreManageService {
      * @param theValueList
      * @return
      */
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public Boolean fullDataStorage(String tableName, List<Map<String, Object>> theValueList) {
         boolean addRes = false;
         Integer shpDbSRID = 4326;
         if (!CollectionUtils.isEmpty(theValueList)) {
             //先删除数据
-            cadastreFileMapper.deleteByValidFlag("1",tableName);
+            cadastreFileMapper.deleteByValidFlag("1", tableName);
             //先把当前版本都修改为历史版本
-            cadastreFileMapper.updateValidFlag("1","0",tableName);
+            cadastreFileMapper.updateValidFlag("1", "0", tableName);
             for (Map<String, Object> map : theValueList) {
 //                Collection<Object> values = map.values();
 //                Collection<String> keys = map.keySet();
                 map.put("valid_flag", 0);//有效数据标识
-                cadastreFileMapper.insertTableData(tableName,map,shpDbSRID);
+                cadastreFileMapper.insertTableData(tableName, map, shpDbSRID);
             }
         }
         return addRes;
     }
 
 
-
-
     /**
      * 判断两个Map中的数据是否完全一致(排除geom字段的比较方式,或根据业务需求处理)
      */
@@ -793,10 +782,10 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         for (String field : compareFields) {
             Object val1 = map1.get(field);
             Object val2 = map2.get(field);
-            
+
             if (val1 == null && val2 == null) continue;
             if (val1 == null || val2 == null) return false;
-            
+
             // 处理数值类型的比较(numeric/decimal在Java中可能是BigDecimal)
             if (val1 instanceof Number && val2 instanceof Number) {
                 if (Double.compare(((Number) val1).doubleValue(), ((Number) val2).doubleValue()) != 0) {
@@ -822,7 +811,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
      * @param theValueList
      * @return
      */
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public Boolean incrementDataStorage(String tableName, List<Map<String, Object>> theValueList) {
         /**
          * 1。查询出当前表所有数据。
@@ -835,42 +824,41 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         Integer shpDbSRID = 4326;
         if (!CollectionUtils.isEmpty(theValueList)) {
             //先删除数据
-            cadastreFileMapper.deleteByValidFlag("1",tableName);
+            cadastreFileMapper.deleteByValidFlag("1", tableName);
             //查询出当前表所有数据。
-            List<Map<String, Object>> dbDataList = cadastreFileMapper.selectTableData("0",tableName);
+            List<Map<String, Object>> dbDataList = cadastreFileMapper.selectTableData("0", tableName);
             //筛选出需要更新的数据
             List<Map<String, Object>> dbExistsList = new ArrayList<>();
             for (Map<String, Object> map : theValueList) {
-                Map<String, Object> dbExistsMap = cadastreFileMapper.selectExistsSameData("0",map,tableName);
-                if(MapUtils.isNotEmpty(dbExistsMap)){
+                Map<String, Object> dbExistsMap = cadastreFileMapper.selectExistsSameData("0", map, tableName);
+                if (MapUtils.isNotEmpty(dbExistsMap)) {
                     dbExistsList.add(dbExistsMap);
                 }
             }
 
             // 在dbDataList 中找出 dbExistsMap中各个字段完全一致的数据 并从dbDataList移除
-            if(CollectionUtils.isNotEmpty(dbExistsList)){
+            if (CollectionUtils.isNotEmpty(dbExistsList)) {
                 for (Map<String, Object> dbExistsMap : dbExistsList) {
                     dbDataList.removeIf(dbData -> isSameData(dbData, dbExistsMap));
                 }
             }
 
             //这里合并两个list 最终写入数据表
-            if(CollectionUtils.isNotEmpty(dbDataList)){
+            if (CollectionUtils.isNotEmpty(dbDataList)) {
                 theValueList.addAll(dbDataList);
             }
 
             //先把当前版本都修改为历史版本
-            cadastreFileMapper.updateValidFlag("1","0",tableName);
+            cadastreFileMapper.updateValidFlag("1", "0", tableName);
             for (Map<String, Object> map : theValueList) {
                 map.put("valid_flag", 0);//有效数据标识
-                cadastreFileMapper.insertTableData(tableName,map,shpDbSRID);
+                cadastreFileMapper.insertTableData(tableName, map, shpDbSRID);
             }
         }
         return addRes;
     }
 
 
-
     /**
      * 获取列表
      */
@@ -898,17 +886,17 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void testRun(){
+    public void testRun() {
         //这里批量增修改表结构增加校验字段:
         String[] arr = new String[]{
-            "tdgy_jh",
-            "tdjyq",
-            "TB_TDGY_SJ",
-            "t_cgzj_cwtc_m",
-            "t_cgzj_cwtc_m_bak1",
-            "t_cgzj_cwtc_m_copy1",
-            "public_dict",
-            "spatial_ref_sys"
+                "tdgy_jh",
+                "tdjyq",
+                "TB_TDGY_SJ",
+                "t_cgzj_cwtc_m",
+                "t_cgzj_cwtc_m_bak1",
+                "t_cgzj_cwtc_m_copy1",
+                "public_dict",
+                "spatial_ref_sys"
         };
 
         //获取库中表名
@@ -937,31 +925,29 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 //        }
 
 
-        List<String>  layerNameList = getLayerNameList(uploadId);
-        for(String layerName : layerNameList){
+        List<String> layerNameList = getLayerNameList(uploadId);
+        for (String layerName : layerNameList) {
             if (!layerName.equalsIgnoreCase("T_CGZJ_CWTC_M")
-                && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
+                    && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
             ) {
                 continue;
             }
 
             //校验是否都有历史版本
             Integer count = cadastreFileMapper.countByValidFlag("1", layerName.toLowerCase(Locale.ROOT));
-            if(count == 0){
-                throw new ServiceException("表"+layerName+"没有历史版本,无法回退");
+            if (count == 0) {
+                throw new ServiceException("表" + layerName + "没有历史版本,无法回退");
             }
         }
 
-        for(String layerName : layerNameList){
+        for (String layerName : layerNameList) {
             if (
                     !layerName.equalsIgnoreCase("T_CGZJ_CWTC_M") &&
-                    !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS"))
-
-            {
+                            !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")) {
                 continue;
             }
             cadastreFileMapper.deleteByValidFlag("0", layerName.toLowerCase(Locale.ROOT));
-            cadastreFileMapper.updateValidFlag("0","1", layerName.toLowerCase(Locale.ROOT));
+            cadastreFileMapper.updateValidFlag("0", "1", layerName.toLowerCase(Locale.ROOT));
             log.info("正在回退表:{}。。。", layerName);
         }
 
@@ -971,14 +957,13 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 //        updateCadastreFile.setStatus("4");//已经回退
 //        updateCadastreFile.setReadMessage("已经回退");//校验通过
 //        cadastreFileMapper.update(updateCadastreFile);
-        return "当前批次数据已回退到上一个版本!:"+uploadId;
+        return "当前批次数据已回退到上一个版本!:" + uploadId;
     }
 
 
-
-
     /**
      * 获取图层名称列表
+     *
      * @param uploadId
      * @return
      */
@@ -988,7 +973,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
         String gdbPath = cadastreFile.getUnzipPath();
         DataSource ds = ogr.Open(gdbPath + "/" + cadastreFile.getName(), 0); // 0 = 只读
         if (ds == null) {
-            throw new ServiceException("无法打开 gdb" );
+            throw new ServiceException("无法打开 gdb");
         }
         //这里进行遍历每个图层
         for (int i = 0; i < ds.GetLayerCount(); i++) {
@@ -1000,7 +985,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
-
     //1.获取图层中所有数据
     //2.获取库中所有数据
     //3.进行对比返回
@@ -1026,7 +1010,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 String layerName = layer.GetName();
                 //todo 相关代码
                 if (!layerName.equalsIgnoreCase("T_CGZJ_CWTC_M")
-                    && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
+                        && !layerName.equalsIgnoreCase("T_FZSS_FXRW_GIS")
                 ) {
                     continue;
                 }
@@ -1034,14 +1018,14 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 layerAndDbData.setCurrentTableName(layerName);
 
                 boolean haveGeom = false;//这里不需要geom信息
-                List<Map<String,String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(layerName.toLowerCase(Locale.ROOT));
-                Map<String,String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
-                        s ->  s.get("column_name"),
+                List<Map<String, String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(layerName.toLowerCase(Locale.ROOT));
+                Map<String, String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
+                        s -> s.get("column_name"),
                         s -> s.get("data_type"),
                         (existing, replacement) -> existing // 如果有重复键,保留第一个值
                 ));
-                List<Map<String, Object>> theValueList = getValueList(layer,dbFieldNameAndTypeMap, haveGeom);
-                List<Map<String, Object>> dbDataList = cadastreFileMapper.selectTableData("0",layerName);
+                List<Map<String, Object>> theValueList = getValueList(layer, dbFieldNameAndTypeMap, haveGeom);
+                List<Map<String, Object>> dbDataList = cadastreFileMapper.selectTableData("0", layerName);
 
                 layerAndDbData.setAddTotalNum(theValueList.size());
                 layerAndDbData.setInsertNum(theValueList.size());
@@ -1059,15 +1043,60 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
+    @Override
+    public List<MdbAndDbData> getMdbCompareData(String uploadId) {
+        List<MdbAndDbData> resList = new ArrayList<>();
+        try {
+            CadastreFile cadastreFile = cadastreFileMapper.get(uploadId);
+            //这里判断是否校验通过
+            if (!cadastreFile.getStatus().equalsIgnoreCase("3")) {
+                log.info("校验未通过,不能入库");
+                throw new ServiceException("校验未通过,不能入库");
+            }
+            String gdbPath = cadastreFile.getUnzipPath();
+            List<Map<String, Object>> allMdbTableList = MdbUtil.MdbTables(gdbPath + "/" + cadastreFile.getName(), "", "");
+
+            for (Map<String, Object> tableMap : allMdbTableList) {
+                String talbleName = String.valueOf(tableMap.get("name"));
+                if (
+                        !talbleName.equalsIgnoreCase("City") &&
+                                !talbleName.equalsIgnoreCase("XZQ")
+                ) {
+                    continue;
+                }
+
+                MdbAndDbData mdbAndDbData = new MdbAndDbData();
+                mdbAndDbData.setCurrentTableName(talbleName);
+
+                boolean haveGeom = false;//这里不需要geom信息
+                List<Map<String, String>> dbFieldNameAndTypeList = cadastreFileMapper.selectTableCollumAndType(talbleName.toLowerCase(Locale.ROOT));
+                Map<String, String> dbFieldNameAndTypeMap = dbFieldNameAndTypeList.stream().collect(Collectors.toMap(
+                        s -> s.get("column_name"),
+                        s -> s.get("data_type"),
+                        (existing, replacement) -> existing // 如果有重复键,保留第一个值
+                ));
 
+                Map<String, Object> allMdbTableFieldMap = MdbUtil.MdbTableContent(gdbPath + "/" + cadastreFile.getName(), talbleName, "", "", 1, 1000);
+                List<Map<String, String>> theValueList = (List<Map<String, String>>) allMdbTableFieldMap.get("rows");
+                List<Map<String, Object>> dbDataList = cadastreFileMapper.selectTableData("0", talbleName);
 
 
+                mdbAndDbData.setMdbFileDataList(theValueList);
+                mdbAndDbData.setDbDataList(dbDataList);
+                resList.add(mdbAndDbData);
 
 
+            }
 
 
+        } catch (Exception e) {
+            log.error("矢量数据入库异常,uploadId: {}", uploadId, e);
+            throw new ServiceException("矢量数据入库异常," + e.getMessage());
+        }
 
 
+        return resList;
+    }
 
 
 }