chenendian пре 2 месеци
родитељ
комит
65985e1ba4

+ 102 - 15
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/impl/CadastreManageServiceImpl.java

@@ -318,6 +318,8 @@ public class CadastreManageServiceImpl implements CadastreManageService {
             checkInfoResult.setUploadId(uploadFile.getId());
             String gdbPath = uploadFile.getUnzipPath();
             theFileName = uploadFile.getName();//这里需要使用解压处理后的文件名称进行读取
+            //获取库中表名
+            List<String> allTableList = cadastreFileMapper.selectAllTable();
 
             //这里区分文件类型,矢量还是表格的读取方式不一样
             if(uploadFile.getFileType().equals("1")) { //矢量数据读取方式
@@ -327,8 +329,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                     return checkInfoResult;
                 }
                 log.info("图层数量: {}", ds.GetLayerCount());
-                //获取库中表名
-                List<String> allTableList = cadastreFileMapper.selectAllTable();
                 //这里进行遍历每个图层
                 for (int i = 0; i < ds.GetLayerCount(); i++) {
                     Layer layer = ds.GetLayer(i);
@@ -356,23 +356,36 @@ public class CadastreManageServiceImpl implements CadastreManageService {
                 }
                 ds.delete();
             } else if (uploadFile.getFileType().equals("2")) {//处理表格类型
-
                 try {
-
-
-
-                    MdbUtil.MdbTables(gdbPath + "/" + theFileName, "", "");
-
-
-
-
+                    List<Map<String, Object>> allMdbTableList = MdbUtil.MdbTables(gdbPath + "/" + theFileName, "", "");
+                    if(CollectionUtils.isNotEmpty(allTableList)) {
+                        for (Map<String, Object> tableMap : allMdbTableList) {
+                            String talbleName = String.valueOf(tableMap.get("name"));
+
+
+                            Map<String, Object>  allMdbTableFieldMap =   MdbUtil.MdbTableContent(gdbPath + "/" + theFileName, talbleName, "", "",  1, 1000);
+
+
+                            //这里做质量检查
+                            CheckInfoVo checkRes = checkMdbInfo(talbleName, allTableList,allMdbTableFieldMap,uploadFile.getId());
+                            if (checkRes.getCheckStatus().equals(false)) { //检查出错
+                                checkInfoFailList.add(checkRes);
+                                checkInfoResult.setResultStatus(false);
+                            } else if (checkRes.getCheckStatus().equals(true)) {
+                                //成功则更新文件上传状态
+                                CadastreFile cadastreFile = new CadastreFile();
+                                cadastreFile.setId(uploadFile.getId());
+                                cadastreFile.setStatus("3");//校验通过
+                                cadastreFileMapper.update(cadastreFile);
+                                checkInfoSuccessList.add(checkRes);
+                            }
+                        }
+                    }
                 } catch (Exception e) {
-                    throw new ServiceException("可能入库失败或没有历史版本,无法回退");
+                    log.error("表格数据校验异常,uploadId: {}", uploadFile.getId(), e);
+                    throw new ServiceException("表格数据校验异常,uploadId:"+uploadFile.getId());
                 }
             }
-
-
-
             checkInfoResult.setCheckFailList(checkInfoFailList);
             checkInfoResult.setCheckSuccessList(checkInfoSuccessList);
         }
@@ -380,6 +393,10 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
+
+
+
+
     /**
      * 对每个图层进行数据格式校验
      *
@@ -457,6 +474,76 @@ public class CadastreManageServiceImpl implements CadastreManageService {
     }
 
 
+    /**
+     *
+     * 对表格属性数据进行数据格式校验
+     *
+     * @param mdbTableName
+     * @param allTableList
+     * @return
+     */
+    private CheckInfoVo checkMdbInfo(String mdbTableName, List<String> allTableList,Map<String, Object> mdbTableFieldMap ,String uploadId) {
+        //总返回对象
+        CheckInfoVo checkInfoVo = new CheckInfoVo();
+        checkInfoVo.setCheckStatus(true);//初始化检查通过
+        List<String> checkInfoList = new ArrayList<>();
+        checkInfoVo.setUploadFileTableName(mdbTableName);
+
+        //字段名称
+        List<String>  mdbTableFieldNameList = (List<String>) mdbTableFieldMap.get("column");
+        //所有条数
+        List<Map<String, String>> dataList = (List<Map<String, String>>) mdbTableFieldMap.get("rows");
+
+        //检查表名对应
+        if (!allTableList.contains(mdbTableName.toLowerCase(Locale.ROOT))) {
+            checkInfoList.add(mdbTableName + ":图层名称不在地籍库范围内!");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", mdbTableName + ":图层名称不在地籍库范围内!", "info");
+            checkInfoVo.setCheckStatus(false);
+        }
+
+        //获取当前表数据库字段信息
+        List<String> dbFieldNameList = cadastreFileMapper.selectTableCollum(mdbTableName.toLowerCase(Locale.ROOT));
+        //这里移除校验字段(非属mdb中的字段)
+        dbFieldNameList.remove("valid_flag");
+        // 判断是否包含相同的元素(不考虑顺序)
+        boolean areCollectionsEqual = CollectionUtils.isEqualCollection(dbFieldNameList, mdbTableFieldNameList);
+        if (!areCollectionsEqual) {
+            checkInfoList.add(mdbTableName + ":字段数据不一致!-" + dbFieldNameList);
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", mdbTableName + ":字段数据不一致!-" + dbFieldNameList, "info");
+            checkInfoVo.setCheckStatus(false);
+        }
+
+        //检查字段数据是否为空
+        //todo 这里根据表名获取相关校验字段信息
+        List<String> checkFieldList = new ArrayList<>();
+        //checkFieldList.add("111");
+        //checkFieldList.add("bz");
+
+        for (Map<String,String> theMap : dataList) {
+            for (String fieldName : checkFieldList) {
+                if (Objects.isNull(theMap.get(fieldName))) {
+                    checkInfoList.add(mdbTableName + "--" + fieldName + "字段不能为空!");
+                    checkInfoVo.setCheckStatus(false);
+                }
+            }
+        }
+        checkInfoVo.setCheckInfoList(checkInfoList);
+        if(checkInfoVo.getCheckStatus().equals(true)){
+            checkInfoList.add("当前矢量数据:"+mdbTableName + "---" + "数据格式为gdb");
+            checkInfoList.add("当前矢量数据:"+mdbTableName + "---" + "坐标系是CGCS2000");
+            checkInfoList.add("当前矢量数据:"+mdbTableName + "---" + "检查校验通过!");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+mdbTableName + "---" + "数据格式为gdb", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+mdbTableName + "---" + "坐标系是CGCS2000", "info");
+            fzssFxrwrzHandleService.insertFxrwrz(uploadId, "地籍库管理", "当前矢量数据:"+mdbTableName + "---" + "检查校验通过!", "info");
+        }
+        return checkInfoVo;
+    }
+
+
+
+
+
+
     /**
      * 获取当前图层的所有属性字段名
      *

+ 2 - 2
siwei-modules/siwei-apply/src/main/resources/mapper/cadastre/CadastreFileMapper.xml

@@ -206,7 +206,7 @@
                 AND file_type = #{fileType}
             </if>
             <if test="storageBeginTime != null and storageBeginTime != ''"><!-- 结束时间检索 -->
-                AND "upload_time" &lt;= TO_TIMESTAMP(#{storageBeginTime}, 'YYYY-MM-DD HH24:MI:SS')
+                AND "upload_time" &gt;= TO_TIMESTAMP(#{storageBeginTime}, 'YYYY-MM-DD HH24:MI:SS')
             </if>
             <if test="storageEndTime != null and storageEndTime != ''"><!-- 结束时间检索 -->
                 AND "upload_time" &lt;= TO_TIMESTAMP(#{storageEndTime}, 'YYYY-MM-DD HH24:MI:SS')+ INTERVAL '1 day'
@@ -230,7 +230,7 @@
                 AND file_type = #{fileType}
             </if>
             <if test="storageBeginTime != null and storageBeginTime != ''"><!-- 结束时间检索 -->
-                AND "upload_time" &lt;= TO_TIMESTAMP(#{storageBeginTime}, 'YYYY-MM-DD HH24:MI:SS')
+                AND "upload_time" &gt;= TO_TIMESTAMP(#{storageBeginTime}, 'YYYY-MM-DD HH24:MI:SS')
             </if>
             <if test="storageEndTime != null and storageEndTime != ''"><!-- 结束时间检索 -->
                 AND "upload_time" &lt;= TO_TIMESTAMP(#{storageEndTime}, 'YYYY-MM-DD HH24:MI:SS')+ INTERVAL '1 day'