|
@@ -8,6 +8,7 @@ import com.zjugis.yzt.service.StGddkService;
|
|
import com.zjugis.yzt.utils.ExcelUtils;
|
|
import com.zjugis.yzt.utils.ExcelUtils;
|
|
import com.zjugis.yzt.utils.geocomm.ParseResult;
|
|
import com.zjugis.yzt.utils.geocomm.ParseResult;
|
|
import com.zjugis.yzt.utils.geocomm.TxtReader;
|
|
import com.zjugis.yzt.utils.geocomm.TxtReader;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
@@ -26,7 +27,10 @@ import java.util.zip.ZipInputStream;
|
|
* @create: 2024-03-21
|
|
* @create: 2024-03-21
|
|
**/
|
|
**/
|
|
@Service
|
|
@Service
|
|
|
|
+@Slf4j
|
|
public class StGddkServiceImpl extends ServiceImpl<StGddkMapper, StGddk> implements StGddkService {
|
|
public class StGddkServiceImpl extends ServiceImpl<StGddkMapper, StGddk> implements StGddkService {
|
|
|
|
+
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public boolean uploadGdData(MultipartFile zipFile) {
|
|
public boolean uploadGdData(MultipartFile zipFile) {
|
|
if (zipFile.isEmpty()) {
|
|
if (zipFile.isEmpty()) {
|
|
@@ -79,39 +83,155 @@ public class StGddkServiceImpl extends ServiceImpl<StGddkMapper, StGddk> impleme
|
|
}
|
|
}
|
|
|
|
|
|
// --- Start: 使用 ExcelUtils.importExcel 解析 XLSX 文件 ---
|
|
// --- 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(
|
|
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;
|
|
return true;
|
|
-
|
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
log.error("文件上传或处理失败", e);
|
|
log.error("文件上传或处理失败", e);
|
|
return false;
|
|
return false;
|
|
} finally {
|
|
} finally {
|
|
// 清理临时文件
|
|
// 清理临时文件
|
|
if (tempDir != null && tempDir.exists()) {
|
|
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();
|
|
|
|
+ }
|
|
}
|
|
}
|