liutao 2 週間 前
コミット
49dd79b958

+ 30 - 14
YHYZT/server/src/main/java/com/zjugis/yzt/controller/StGddkController.java

@@ -6,10 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.yzt.service.StGddkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
 import java.util.List;
+
 import com.zjugis.yzt.beans.vo.StGddkVO;
 import com.zjugis.yzt.beans.entity.StGddk;
 import org.springframework.beans.BeanUtils;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.stream.Collectors;
 
 @RestController
@@ -20,17 +24,18 @@ public class StGddkController {
 
     /**
      * 获取供地地块信息(分页)
-     * @param current 当前页码
-     * @param size 每页大小
-     * @param gdsy 做地主体
-     * @param dkMc 地块名称
-     * @param xxz 用地性质
-     * @param gpcrdk 挂牌出让地块
-     * @param dwMc 竞得单位
-     * @param tdmj 土地面积(亩)
-     * @param tdZl 土地坐落
+     *
+     * @param current  当前页码
+     * @param size     每页大小
+     * @param gdsy     做地主体
+     * @param dkMc     地块名称
+     * @param xxz      用地性质
+     * @param gpcrdk   挂牌出让地块
+     * @param dwMc     竞得单位
+     * @param tdmj     土地面积(亩)
+     * @param tdZl     土地坐落
      * @param crjsfyjq 出让金是否已缴清
-     * @param htsfyba 合同是否已备案
+     * @param htsfyba  合同是否已备案
      * @return 分页结果
      */
     @GetMapping("/page")
@@ -46,9 +51,9 @@ public class StGddkController {
             @RequestParam(required = false) String tdZl,
             @RequestParam(required = false) String crjsfyjq,
             @RequestParam(required = false) String htsfyba) {
-        
+
         QueryWrapper<StGddk> queryWrapper = new QueryWrapper<>();
-        
+
         if (gdsy != null && !gdsy.isEmpty()) {
             queryWrapper.like("gdsy", gdsy);
         }
@@ -79,7 +84,7 @@ public class StGddkController {
 
         Page<StGddk> page = new Page<>(current, size);
         IPage<StGddk> stGddkPage = stGddkService.page(page, queryWrapper);
-        
+
         return stGddkPage.convert(this::convertToVO);
     }
 
@@ -131,6 +136,18 @@ public class StGddkController {
         return stGddkService.removeByIds(ids);
     }
 
+
+    /**
+     * 上传供地数据文件 (ZIP包)
+     *
+     * @param file
+     * @return
+     */
+    @PostMapping("/upload")
+    public boolean uploadStNzydkData(@RequestParam("file") MultipartFile file) {
+        return stGddkService.uploadGdData(file);
+    }
+
     /**
      * 将实体对象转换为VO对象
      */
@@ -147,5 +164,4 @@ public class StGddkController {
     }
 
 
-
 }

+ 140 - 20
YHYZT/server/src/main/java/com/zjugis/yzt/service/impl/StGddkServiceImpl.java

@@ -8,6 +8,7 @@ import com.zjugis.yzt.service.StGddkService;
 import com.zjugis.yzt.utils.ExcelUtils;
 import com.zjugis.yzt.utils.geocomm.ParseResult;
 import com.zjugis.yzt.utils.geocomm.TxtReader;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -26,7 +27,10 @@ import java.util.zip.ZipInputStream;
  * @create: 2024-03-21
  **/
 @Service
+@Slf4j
 public class StGddkServiceImpl extends ServiceImpl<StGddkMapper, StGddk> implements StGddkService {
+
+
     @Override
     public boolean uploadGdData(MultipartFile zipFile) {
         if (zipFile.isEmpty()) {
@@ -79,39 +83,155 @@ public class StGddkServiceImpl extends ServiceImpl<StGddkMapper, StGddk> impleme
             }
 
             // --- Start: 使用 ExcelUtils.importExcel 解析 XLSX 文件 ---
-            Map<String, Map<String, Object>> batchInfoMap = new HashMap<>();
-            List<Map<String, Object>> projectInfoList = new ArrayList<>();
-
-
-            int batchSheetIndex = 0;
-
             List<Map<String, Object>> batchDataList = ExcelUtils.importExcel(
-                    new FileInputStream(xlsxFile), xlsxFile.getName(), 0, 1, batchSheetIndex
+                    new FileInputStream(xlsxFile), xlsxFile.getName(), 0, 1, 0
             );
-            if (!batchDataList.isEmpty()) {
-                Map<String, Object> batchData = batchDataList.get(0);
-                String pcbh = batchData.containsKey("批次索引") ? String.valueOf(batchData.get("批次索引")) : null;
-                if (pcbh != null && !pcbh.isEmpty()) {
-                    batchInfoMap.put(pcbh, batchData);
-                }
-            } else {
-                log.warn("未能从 '农转用批次信息' sheet 读取到数据。");
+            if (batchDataList.isEmpty()) {
+                log.warn("未能从 '供地信息' sheet 读取到数据。");
+                return false;
             }
 
-            // --- End: 使用 ExcelUtils.importExcel 解析 XLSX 文件 ---
-
-
+            List<StGddk> gddkList = new ArrayList<>();
+            for (Map<String, Object> row : batchDataList) {
+                StGddk gddk = new StGddk();
+                // 字段映射,参照StGddk.java
+                gddk.setSdzj(getString(row, "属地镇街"));
+                gddk.setDkBh(getString(row, "供地索引"));
+                gddk.setDkMc(getString(row, "地块名称"));
+                gddk.setDkYt(getString(row, "用地性质"));
+                gddk.setDkMj(getDouble(row, "土地面积(亩)"));
+                gddk.setBz(getString(row, "备注"));
+                gddk.setTdZl(getString(row, "土地坐落"));
+                gddk.setDwMc(getString(row, "竞得单位"));
+                gddk.setGdsy(getString(row, "做地主体"));
+                gddk.setZdzt(getString(row, "属地镇街"));
+                gddk.setXxz(getString(row, "用地性质"));
+                gddk.setJhqk(getString(row, "计划情况"));
+                gddk.setXmgs(getString(row, "项目公司"));
+                gddk.setTdmj(getString(row, "土地面积(平方米)"));
+                gddk.setRjl(getString(row, "容积率"));
+                gddk.setJztl(getString(row, "建筑体量"));
+                gddk.setCrfs(getString(row, "出让方式"));
+                gddk.setGgsj(getString(row, "公告时间"));
+                gddk.setGpbjsj(getString(row, "挂牌报价时间"));
+                gddk.setPgj(getString(row, "评估价(万元)"));
+                gddk.setQgj(getString(row, "起挂价(万元)"));
+                gddk.setQgmj(getString(row, "起挂亩价(万元/亩)"));
+                gddk.setQglmj(getString(row, "起挂楼面价(元/平方米)"));
+                gddk.setBzj(getString(row, "保证金(万元)"));
+                gddk.setSjjndj(getString(row, "实际缴纳定金(万元)"));
+                gddk.setJdj(getString(row, "竞得价(万元)"));
+                gddk.setJdmj(getString(row, "竞得亩价(万元/亩)"));
+                gddk.setJdlmj(getString(row, "竞得楼面价(元/平方米)"));
+                gddk.setZcbl(getString(row, "自持比例"));
+                gddk.setZcmj(getString(row, "自持面积"));
+                gddk.setYlyf(getString(row, "养老用房(平方米)"));
+                gddk.setWcfh(getString(row, "无偿返还村集体建筑面积(平方米)"));
+                gddk.setYjl(getString(row, "溢价率"));
+                gddk.setYjcrj(getString(row, "已交出让金(万元)"));
+                gddk.setYjeqj(getString(row, "应交而欠交"));
+                gddk.setDyqcrj(getString(row, "第一期出让金额(含保证金)"));
+                gddk.setDyqydzfrq(getString(row, "第一期出让金约定支付日期"));
+                gddk.setDyqsjzfrq(getString(row, "第一期出让金实际支付日期"));
+                gddk.setDyqdqtx(getString(row, "第一期到期提醒"));
+                gddk.setDeqcrj(getString(row, "第二期出让金额"));
+                gddk.setDeqydzfrq(getString(row, "第二期出让金约定支付日期"));
+                gddk.setDeqsjzfrq(getString(row, "第二期出让金实际支付日期"));
+                gddk.setDeqdqtx(getString(row, "第二期到期提醒"));
+                gddk.setYdjdsj(getString(row, "交地协议书约定交地时间"));
+                gddk.setYddgsj(getString(row, "合同约定动工时间"));
+                gddk.setYdjgsj(getString(row, "合同约定竣工时间"));
+                gddk.setHth(getString(row, "合同号"));
+                gddk.setHtqysj(getString(row, "合同签约时间"));
+                gddk.setPch(getString(row, "批次号"));
+                gddk.setGycl(getString(row, "国有存量用地面积(平方米)"));
+                gddk.setStsjlr(getString(row, "省厅系统实际录入情况"));
+                gddk.setXzxtjqk(getString(row, "限制性条件情况"));
+                gddk.setGdpfh(getString(row, "供地批复号"));
+                gddk.setGzglkh(getString(row, "跟踪管理卡号"));
+                gddk.setGzfpj(getString(row, "公租房配建"));
+                gddk.setZfzdmj(getString(row, "90平方米住房占地面积"));
+                gddk.setZdjztl(getString(row, "最大建筑体量(平方米)"));
+                gddk.setZzydmj(getString(row, "住宅用地面积(平方米)"));
+                gddk.setZzjztl(getString(row, "住宅建筑体量(平方米)"));
+                gddk.setSjyjznj(getString(row, "实际已缴滞纳金(万元)"));
+                gddk.setZnjjnsj(getString(row, "滞纳金缴纳时间"));
+                gddk.setYffs(getString(row, "印刷份数"));
+                gddk.setLxr(getString(row, "联系人"));
+                gddk.setGddwnd(getString(row, "是否勾地单位拿地"));
+                gddk.setFwxsxj(getString(row, "房屋销售限价"));
+                gddk.setZdcb(getString(row, "做地成本"));
+                gddk.setCrjsfyjq(getString(row, "出让金是否已缴清"));
+                gddk.setHtsfyba(getString(row, "合同是否已备案"));
+                // 先保存StGddk
+                if (!this.save(gddk)) {
+                    log.error("保存农转用数据失败:{}", gddk.getDkBh());
+                    return false;
+                }
+                Integer objectId = gddk.getObjectid();
+                if (objectId == null) {
+                    log.error("获取保存后的objectid失败:{}", gddk.getDkBh());
+                    return false;
+                }
+                // 解析txt为Geometry并持久化
+                String gdsx = gddk.getDkBh();
+                File txtFile = txtFiles.get(gdsx);
+                if (txtFile != null) {
+                    try (FileInputStream txtInputStream = new FileInputStream(txtFile)) {
+                        TxtReader txtReader = new TxtReader(txtInputStream);
+                        ParseResult parseResult = txtReader.read();
+                        if (parseResult != null && parseResult.getGeometry() != null) {
+                            String wkt = parseResult.getGeometry().toText();
+                            // 这里假设updateShapeById参数为(id, wkt)
+                            int updateCount = ((StGddkMapper) this.baseMapper).updateShapeById(objectId, wkt, 4528);
+                            if (updateCount <= 0) {
+                                log.warn("供地索引 {} 的shape字段持久化失败。", gdsx);
+                            }
+                        } else {
+                            log.warn("供地索引 {} 的TXT文件解析失败或未获取到Geometry数据。", gdsx);
+                        }
+                    } catch (Exception e) {
+                        log.error("解析供地索引 {} 的TXT文件失败: {}", gdsx, e.getMessage());
+                    }
+                } else {
+                    log.warn("未找到供地索引 {} 对应的TXT界址点文件。", gdsx);
+                }
+            }
             return true;
-
         } catch (IOException e) {
             log.error("文件上传或处理失败", e);
             return false;
         } finally {
             // 清理临时文件
             if (tempDir != null && tempDir.exists()) {
-//                deleteDirectory(tempDir);
+                deleteDirectory(tempDir);
             }
         }
     }
 
+    // 工具方法
+    private String getString(Map<String, Object> map, String key) {
+        Object value = map.get(key);
+        return value == null ? null : value.toString().trim();
+    }
+
+    private Double getDouble(Map<String, Object> map, String key) {
+        Object value = map.get(key);
+        if (value == null || value.toString().trim().isEmpty()) return null;
+        try {
+            return Double.parseDouble(value.toString().trim());
+        } catch (NumberFormatException e) {
+            return null;
+        }
+    }
+
+    private void deleteDirectory(File directory) {
+        File[] allContents = directory.listFiles();
+        if (allContents != null) {
+            for (File file : allContents) {
+                deleteDirectory(file);
+            }
+        }
+        directory.delete();
+    }
 }