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