ソースを参照

调整优化请求方法

chenendian 3 週間 前
コミット
f76c565d8a

+ 0 - 5
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/cadastre/ConvergeController.java

@@ -101,10 +101,7 @@ public class ConvergeController extends BaseController {
         try {
             String batch =  addDataVo.getBatchName();
             String type  = addDataVo.getType();
-            //convergeService.batchDelete333(batch,type);
-
             convergeService.operationConverge(batch,type);
-
             return R.ok("提交成功");
         } catch (Exception e) {
             return R.fail(e.getMessage());
@@ -115,6 +112,4 @@ public class ConvergeController extends BaseController {
 
 
 
-
-
 }

+ 1 - 8
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/cadastre/impl/CadastreManageServiceImpl.java

@@ -1419,9 +1419,6 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 
 
 
-//    1.文件名
-//    2.表名
-//    3.文件名称
     /**
      *
      * 生成一个mdb文件
@@ -1460,7 +1457,7 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 
             // 4. 调用工具类生成 MDB 文件并写入数据
             MdbUtil.writeMdbByTable(mdbPath, tableName, columns, dataList);
-            
+
             log.info("MDB 文件生成成功: {}", mdbPath);
         } catch (Exception e) {
             log.error("生成 MDB 文件失败: {}", tableName, e);
@@ -1472,8 +1469,4 @@ public class CadastreManageServiceImpl implements CadastreManageService {
 
 
 
-
-
-
-
 }

+ 45 - 21
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ConvergeServiceImpl.java

@@ -9,6 +9,7 @@ import com.siwei.apply.mapper.CadastreFileMapper;
 import com.siwei.apply.mapper.ConvergeMapper;
 import com.siwei.apply.service.ConvergeService;
 import com.siwei.apply.service.cadastre.impl.FzssFxrwrzHandleService;
+import com.siwei.apply.utils.MdbUtil;
 import com.siwei.apply.utils.ServiceFileUtil;
 import com.siwei.common.core.exception.ServiceException;
 import com.siwei.common.core.utils.uuid.IdUtils;
@@ -174,7 +175,7 @@ public class ConvergeServiceImpl implements ConvergeService {
         converge.setReadMessage("正在生成。。");
         converge.setFileCostTime("0");
         convergeMapper.add(converge);
-        log.info("==========="+convergeId);
+        log.info("====convergeId=======:"+convergeId);
         fzssFxrwrzHandleService.insertFxrwrz(convergeId, "地籍库管理", "汇交任务创建", "info");
         fzssFxrwrzHandleService.insertFxrwrz(convergeId, "地籍库管理", "汇交数据执行开始。。。", "info");
 
@@ -199,7 +200,7 @@ public class ConvergeServiceImpl implements ConvergeService {
             }
         });
 
-        String basePath =  convergedir + "/" + converge.getName()+"/"+"012345赣江新区"+"/";
+        String basePath =  convergedir + converge.getName()+"/"+"012345赣江新区"+"/";
         List<ConvergeRes> subConvergeTableList = new ArrayList<>();//衍生出的数据
 
         //如果有汇交数据,针对每张表,计算生成路径
@@ -218,26 +219,25 @@ public class ConvergeServiceImpl implements ConvergeService {
                     convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
                     convergeRes.setFileName("03"+ConvergeTableEnum.TABLE_2.getTableName());
                 }
-//                else if(ConvergeTableEnum.TABLE_3.getTableName().equals(convergeRes.getTableName())){
-//                    //宗地
-//                    convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
-//                    convergeRes.setFileName("03"+ConvergeTableEnum.TABLE_3.getTableName());
-//                    //todo 这里需要对宗地,根据情况进行拆分,出来一个新的List
-//                    convergeRes.setValid(-1);
-//                    subConvergeTableList.add(convergeRes);
-//                } else if(ConvergeTableEnum.TABLE_4.getTableName().equals(convergeRes.getTableName())){
-//                    //房屋
-//                    convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
-//                    convergeRes.setFileName("04"+ConvergeTableEnum.TABLE_4.getTableName());
-//                }else {
-//                    convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
-//                    convergeRes.setFileName("00"+convergeRes.getTableName());
-//                }
+                else if(ConvergeTableEnum.TABLE_3.getTableName().equals(convergeRes.getTableName())){
+                    //宗地
+                    convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
+                    convergeRes.setFileName("03"+ConvergeTableEnum.TABLE_3.getTableName());
+                    //todo 这里需要对宗地,根据情况进行拆分,出来一个新的List
+                    convergeRes.setValid(-1);
+                    subConvergeTableList.add(convergeRes);
+                } else if(ConvergeTableEnum.TABLE_4.getTableName().equals(convergeRes.getTableName())){
+                    //房屋
+                    convergeRes.setFilePath(basePath+"矢量空间数据/统一坐标");
+                    convergeRes.setFileName("04"+ConvergeTableEnum.TABLE_4.getTableName());
+                }else {
+                    convergeRes.setFilePath(basePath+"属性数据");
+                    convergeRes.setFileName("00"+convergeRes.getTableName());
+                }
             }
             if(!subConvergeTableList.isEmpty()){
                 convergeTableList.addAll(subConvergeTableList);
             }
-
             //这里进行数据汇交
             try {
                 operationFileStrategy(convergeTableList);
@@ -258,17 +258,18 @@ public class ConvergeServiceImpl implements ConvergeService {
             for(ConvergeRes convergeRes : convergeTableList){
                 if(convergeRes.getType()==1){
                     writeShapefileByTable(convergeRes.getTableName(),convergeRes.getFilePath(),convergeRes.getFileName(),convergeRes.getColumnsList(),convergeRes.getDataList());
+                    log.info("----------------矢量数据处理end。。。。。");
                 } else if (convergeRes.getType()==2) {
-                    //todo  222
-                    log.info("----------------属性数据暂无处理。。。。。");
+                    buildMdbFile(convergeRes.getTableName(),convergeRes.getFilePath(),convergeRes.getFileName(),convergeRes.getColumnsList(),convergeRes.getDataList());
+                    log.info("----------------属性数据处理end。。。。。");
                 }
             }
         }
     }
 
 
-
     /**
+     *
      *  动态传入表名称,根据表结构生成 SHP 文件
      * @param tableName 表名
      * @param filePath 生成路径
@@ -441,6 +442,29 @@ public class ConvergeServiceImpl implements ConvergeService {
         return String.class;
     }
 
+    public void buildMdbFile(String tableName, String filePath, String fileName,List<Map<String, String>> columns,List<Map<String, Object>> dataList)  {
+        try {
+            // 1. 构造完整的文件路径
+            String mdbPath = filePath;
+            if (!mdbPath.endsWith(File.separator)) {
+                mdbPath += File.separator;
+            }
+            mdbPath += fileName;
+            if (!mdbPath.toLowerCase().endsWith(".mdb")) {
+                mdbPath += ".mdb";
+            }
+
+            // 2. 调用工具类生成 MDB 文件并写入数据
+            MdbUtil.writeMdbByTable(mdbPath, tableName, columns, dataList);
+
+            log.info("MDB 文件生成成功: {}", mdbPath);
+        } catch (Exception e) {
+            log.error("生成 MDB 文件失败: {}", tableName, e);
+            throw new ServiceException("生成 MDB 文件失败: " + e.getMessage());
+        }
+    }
+
+
 
 
 

+ 56 - 6
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/utils/MdbUtil.java

@@ -85,16 +85,49 @@ public class MdbUtil {
 
                 try (PreparedStatement pstmt = conn.prepareStatement(insertSql.toString())) {
                     for (Map<String, Object> row : dataList) {
-                        for (int i = 0; i < colNames.size(); i++) {
-                            Object value = row.get(colNames.get(i));
+                        for (int i = 0; i < columns.size(); i++) {
+                            String colName = columns.get(i).get("column_name");
+                            String pgType = columns.get(i).get("data_type");
+                            Object value = row.get(colName);
+                            
+                            int jdbcType = mapPostgresToJdbcType(pgType);
+
+                            if (value == null) {
+                                pstmt.setNull(i + 1, jdbcType);
+                                continue;
+                            }
+
                             // 处理特殊类型,如 geometry 存为文本
-                            if (value != null && value.toString().contains("SRID")) {
+                            if (value.toString().contains("SRID")) {
                                 pstmt.setObject(i + 1, value.toString());
                             } else {
-                                if(Objects.isNull(value)){
-                                    value="";
+                                // 如果是数值类型,且值是字符串(可能是空字符串),尝试转换
+                                String mdbType = mapPostgresToMdbType(pgType);
+                                if (("INTEGER".equals(mdbType) || "DOUBLE".equals(mdbType)) && value instanceof String) {
+                                    String strVal = (String) value;
+                                    if (StringUtils.isEmpty(strVal)) {
+                                        pstmt.setNull(i + 1, jdbcType);
+                                    } else {
+                                        try {
+                                            if ("INTEGER".equals(mdbType)) {
+                                                pstmt.setInt(i + 1, Integer.parseInt(strVal));
+                                            } else {
+                                                pstmt.setDouble(i + 1, Double.parseDouble(strVal));
+                                            }
+                                        } catch (NumberFormatException e) {
+                                            pstmt.setNull(i + 1, jdbcType);
+                                        }
+                                    }
+                                } else if ("DATETIME".equals(mdbType)) {
+                                    // 确保日期类型正确
+                                    if (value instanceof java.util.Date) {
+                                        pstmt.setTimestamp(i + 1, new java.sql.Timestamp(((java.util.Date) value).getTime()));
+                                    } else {
+                                        pstmt.setObject(i + 1, value, jdbcType);
+                                    }
+                                } else {
+                                    pstmt.setObject(i + 1, value, jdbcType);
                                 }
-                                pstmt.setObject(i + 1, value);
                             }
                         }
                         pstmt.addBatch();
@@ -122,6 +155,23 @@ public class MdbUtil {
         return "TEXT(255)";
     }
 
+    private static int mapPostgresToJdbcType(String pgType) {
+        if (pgType == null) return java.sql.Types.VARCHAR;
+        pgType = pgType.toLowerCase();
+        if (pgType.contains("char") || pgType.contains("text")) {
+            return java.sql.Types.VARCHAR;
+        } else if (pgType.contains("int")) {
+            return java.sql.Types.INTEGER;
+        } else if (pgType.contains("numeric") || pgType.contains("decimal") || pgType.contains("double") || pgType.contains("float")) {
+            return java.sql.Types.DOUBLE;
+        } else if (pgType.contains("date") || pgType.contains("time")) {
+            return java.sql.Types.TIMESTAMP;
+        } else if (pgType.contains("geometry")) {
+            return java.sql.Types.CLOB;
+        }
+        return java.sql.Types.VARCHAR;
+    }
+
 
     /**
      * 读取.mdb文件下面的所有表名