Procházet zdrojové kódy

样例数据入库1

chenendian před 4 dny
rodič
revize
5518a5a6d9

+ 4 - 12
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/third/DealExcelController.java

@@ -56,12 +56,6 @@ public class DealExcelController extends BaseController {
 
 
 
-
-
-
-
-
-
     /**
      * 处理excel数据(按合并列头分组读取)
      */
@@ -73,14 +67,12 @@ public class DealExcelController extends BaseController {
             File file = filePath.toFile();
             Map<String, List<Map<String, String>>> dataMap = readExcelWithMergedHeaders(file);
 
-            String res = dealExcelService.checkExcelDataToDb(dataMap);
-            logger.info("检查数据结果{}",res);
-
-
+            //String res = dealExcelService.checkExcelDataToDb(dataMap);
+            //logger.info("检查数据结果{}",res);
 
 
-//            String res = dealExcelService.addExcelDataToDb(dataMap);
-//            logger.info("新增数据结果{}",res);
+            String res = dealExcelService.addExcelDataToDb(dataMap);
+            logger.info("新增数据结果{}",res);
 
 //            for (Map.Entry<String, List<Map<String, String>>> entry : dataMap.entrySet()) {
 //                logger.info("分类 [{}] 共 {} 条数据", entry.getKey(), entry.getValue().size());

+ 292 - 51
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/DealExcelServiceImpl.java

@@ -5,13 +5,20 @@ import com.siwei.apply.domain.LandType;
 import com.siwei.apply.domain.ProjectWorkflow;
 import com.siwei.apply.domain.YdbpData;
 import com.siwei.apply.domain.res.TdgyRes;
+import com.siwei.apply.domain.vo.GyjsydscdjVo;
+import com.siwei.apply.domain.vo.GyjsydjfwscdjVo;
+import com.siwei.apply.domain.vo.JsgcghxkVo;
+import com.siwei.apply.domain.vo.JsydghxkVo;
 import com.siwei.apply.domain.vo.ProjectVo;
 import com.siwei.apply.domain.vo.TdgyVo;
+import com.siwei.apply.domain.vo.TdhyhsVo;
+import com.siwei.apply.domain.vo.TjyydhxVo;
 import com.siwei.apply.domain.vo.YdbpDataVo;
+import com.siwei.apply.domain.vo.YdbpVo;
+import com.siwei.apply.domain.vo.YdysyxzVo;
 import com.siwei.apply.enums.AloneWorkFlowEnum;
 import com.siwei.apply.mapper.CadastreFileMapper;
 import com.siwei.apply.mapper.LandTypeMapper;
-import com.siwei.apply.mapper.ProjectWorkflowMapper;
 import com.siwei.apply.service.*;
 import com.siwei.common.core.constant.SecurityConstants;
 import com.siwei.common.core.domain.R;
@@ -21,11 +28,8 @@ import com.siwei.spatial.api.domain.file.TGeomDb;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FileUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.io.File;
 import java.io.IOException;
@@ -37,7 +41,6 @@ import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.siwei.apply.common.Common.UserId;
 
 /**
  * excel 导入数据处理类
@@ -56,9 +59,6 @@ public class DealExcelServiceImpl {
     @Autowired
     private ProjectService projectService;
 
-    @Autowired
-    private ProjectWorkflowMapper projectWorkflowMapper;
-
     @Autowired
     private LandTypeMapper landTypeMapper;
 
@@ -81,6 +81,30 @@ public class DealExcelServiceImpl {
     @Autowired
     private CadastreFileMapper cadastreFileMapper;
 
+    @Autowired
+    private YdysyxzService ydysyxzService;
+
+    @Autowired
+    private YdbpService ydbpService;
+
+    @Autowired
+    private GyjsydscdjService gyjsydscdjService;
+
+    @Autowired
+    private JsydghxkService jsydghxkService;
+
+    @Autowired
+    private JsgcghxkService jsgcghxkService;
+
+    @Autowired
+    private TdhyhsService tdhyhsService;
+
+    @Autowired
+    private GyjsydjfwscdjService gyjsydjfwscdjService;
+
+    @Autowired
+    private TjyydhxService tjyydhxService;
+
 
     /**
      * 报批数据导入
@@ -441,6 +465,43 @@ public class DealExcelServiceImpl {
         return dateStr.matches("^\\d{4}年\\d{1,2}月\\d{1,2}日$");
     }
 
+    /**
+     * 校验面积单位(用于addExcelDataToDb)
+     */
+    private String validateAreaUnit(String areaStr, String unitStr, String areaLabel, String unitLabel) {
+        if (StringUtils.isBlank(areaStr)) {
+            return "";
+        }
+        boolean isNum;
+        try {
+            Float.parseFloat(areaStr);
+            isNum = true;
+        } catch (NumberFormatException e) {
+            return StringUtils.isNotBlank(unitStr) ? unitStr : "";
+        }
+        if (isNum && StringUtils.isBlank(unitStr)) {
+            log.warn("{}(值:{})有值时,{}不能为空", areaLabel, areaStr, unitLabel);
+            return "";
+        }
+        if (isNum && !"亩".equals(unitStr) && !"公顷".equals(unitStr) && !"平方米".equals(unitStr)) {
+            log.warn("{}不合法: {},仅支持亩/公顷/平方米,设置为空", unitLabel, unitStr);
+            return "";
+        }
+        return unitStr;
+    }
+
+    private Float parseFloatField(String value, String fieldName) {
+        if (StringUtils.isBlank(value)) {
+            return 0f;
+        }
+        try {
+            return Float.parseFloat(value);
+        } catch (NumberFormatException e) {
+            log.warn("{}格式不正确: {},默认设置为0", fieldName, value);
+            return 0f;
+        }
+    }
+
 
     /**
      * 添加excel数据到数据库
@@ -453,6 +514,14 @@ public class DealExcelServiceImpl {
         List<Map<String, String>> xmList = dataMap.get("项目信息");
         List<Map<String, String>> tdgyList = dataMap.get("土地供应");
         List<Map<String, String>> jdList = dataMap.get("阶段");
+        List<Map<String, String>> ydysyxzList = dataMap.get("用地预审与选址");
+        List<Map<String, String>> ydbpList = dataMap.get("用地报批");
+        List<Map<String, String>> gyjsydscdjList = dataMap.get("国有建设用地使用权首次登记");
+        List<Map<String, String>> jsydghxkList = dataMap.get("建设用地规划许可");
+        List<Map<String, String>> jsgcghxkList = dataMap.get("建设工程规划许可");
+        List<Map<String, String>> tdhyhsList = dataMap.get("土地核验与规划核实");
+        List<Map<String, String>> gyjsydjfwscdjList = dataMap.get("国有建设用地使用权及房屋所有权首次登记(会有多个不动产权证)(界面新参数)");
+        List<Map<String, String>> tjyydhxList = dataMap.get("规划条件与用地红线出具");
 
         int i = 0;
 
@@ -756,62 +825,234 @@ public class DealExcelServiceImpl {
 
          */
 
+            // ----- 国有建设用地使用权首次登记 -----
+            if (CollectionUtils.isNotEmpty(gyjsydscdjList) && i < gyjsydscdjList.size()) {
+                Map<String, String> excel = gyjsydscdjList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String bdcdyh = excel.get("不动产单元号(必填)");
+                    String bdczh = excel.get("不动产证号(必填)");
+                    if (StringUtils.isNotBlank(bdcdyh) && StringUtils.isNotBlank(bdczh)) {
+                        GyjsydscdjVo vo = new GyjsydscdjVo();
+                        vo.setProjectId(projectId);
+                        vo.setBdcdyh(bdcdyh);
+                        vo.setBdczh(bdczh);
+                        vo.setQlr(excel.get("权利人"));
+                        vo.setGyqk(excel.get("共有情况"));
+                        vo.setZl(excel.get("坐落"));
+                        vo.setQllx(excel.get("权利类型"));
+                        vo.setQlxz(excel.get("权利性质"));
+                        vo.setTdyt(excel.get("土地用途"));
+                        vo.setArea(parseFloatField(excel.get("面积"), "国有建设用地使用权首次登记-面积"));
+                        vo.setAreaUnit(validateAreaUnit(excel.get("面积"), excel.get("面积单位"), "面积", "面积单位"));
+                        vo.setDjjg(excel.get("登记机构"));
+                        vo.setDjDate(excel.get("登记日期"));
+                        String nodeId = gyjsydscdjService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "04国有建设用地使用权首次登记阶段");
+                        }
+                    }
+                }
+            }
 
-            //todo 读取excel中的数据然后做校验,excel字段对应,见上面参考json,这里继续完善其他部分的校验逻辑,按照上面两部分的示例进行编写,注意日志文件的命名和日志内容的准确性,方便后续排查问题
-            // 要求一,如果当前环节,如:String tdyt = tdgyExcel.get("土地用途"); 获取的所有字段都是空,直接跳过,不写日志
-            // 要求二,如果当前环节存在类似(供地面积,用地面积) 需要有(面积单位字段) ,用地面积的值都是数字,那么面积单位不能为空,并且需要校验面积单位是否合法(亩,公顷,平方米),如果不合法,记录日志
-            // 要求三,各个环节必填字段都没有满足要求的,记录日志,日志内容包括:excel行数,字段名称,字段值,错误描述等信息,方便后续排查问题
-            // 要求四,项目类型为空则直接跳过此数据
-            // 要求五, 若某个环节所有字段为空,或者必填字段不满足要求或为空,记录日志后,继续校验下一个环节,把当前环节跳过处理。
-
-            // -----------------第二部分校验(国有建设用地使用权首次登记)环节数据开始-------------------------------
-            //excel 字段:
-            //todo  需要校验 (不动产单元号,不动产证号) 字段不能为空
-
-
-
-            // -----------------第三部分校验(建设用地规划许可)环节数据开始-------------------------------
-            //todo  需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
-
-
-
-
-            // -----------------第四部分校验(建设工程规划许可)环节数据开始-------------------------------
-            //todo  需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
-
-
-
-            // -----------------第五部分校验(土地核验与规划核实)环节数据开始-------------------------------
-            //todo  需要校验 (合格证号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
-
-
-            // -----------------第六部分校验(国有建设用地使用权及房屋所有权首次登记)环节数据开始-------------------------------
-            //todo  需要校验 (业务号) 字段不能为空
-
-
-
-            // -----------------第六部分校验(用地报批)环节数据开始-------------------------------
-            //todo  需要校验 (批复文号,批复日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
-
-
-
-            // -----------------第七部分校验(用地预审与选址)环节数据开始-------------------------------
-            //todo  需要校验 (证书文号,发证日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
+            // ----- 建设用地规划许可 -----
+            if (CollectionUtils.isNotEmpty(jsydghxkList) && i < jsydghxkList.size()) {
+                Map<String, String> excel = jsydghxkList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String zsbh = excel.get("证书编号(必填)");
+                    String fzDate = excel.get("发证日期(必填)");
+                    if (StringUtils.isNotBlank(zsbh) && StringUtils.isNotBlank(fzDate) && isValidChineseDate(fzDate)) {
+                        JsydghxkVo vo = new JsydghxkVo();
+                        vo.setProjectId(projectId);
+                        vo.setZsbh(zsbh);
+                        vo.setFzDate(fzDate);
+                        vo.setYddw(excel.get("用地单位"));
+                        vo.setYdwz(excel.get("用地位置"));
+                        vo.setYdArea(parseFloatField(excel.get("用地面积"), "建设用地规划许可-用地面积"));
+                        vo.setYdUnit(validateAreaUnit(excel.get("用地面积"), excel.get("用地面积单位"), "用地面积", "用地面积单位"));
+                        vo.setTdyt(excel.get("土地用途"));
+                        vo.setTdhqfs(excel.get("土地获取方式"));
+                        vo.setPzydjg(excel.get("批准用地机关"));
+                        vo.setPzydwh(excel.get("批准用地文号"));
+                        vo.setJsgm(excel.get("建设规模"));
+                        vo.setFzjg(excel.get("发证机关"));
+                        String nodeId = jsydghxkService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "05建设用地规划许可阶段");
+                        }
+                    }
+                }
+            }
 
-            // -----------------第七部分校验(规划条件与用地红线出具)环节数据开始-------------------------------
-            //todo  需要校验 (出具编号,出具日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
+            // ----- 建设工程规划许可 -----
+            if (CollectionUtils.isNotEmpty(jsgcghxkList) && i < jsgcghxkList.size()) {
+                Map<String, String> excel = jsgcghxkList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String zsbh = excel.get("证书编号(必填)");
+                    String fzDate = excel.get("发证日期(必填)");
+                    if (StringUtils.isNotBlank(zsbh) && StringUtils.isNotBlank(fzDate) && isValidChineseDate(fzDate)) {
+                        JsgcghxkVo vo = new JsgcghxkVo();
+                        vo.setProjectId(projectId);
+                        vo.setZsbh(zsbh);
+                        vo.setFzDate(fzDate);
+                        vo.setYddw(excel.get("用地单位"));
+                        vo.setYdwz(excel.get("用地位置"));
+                        String qsStr = excel.get("期数");
+                        if (StringUtils.isNotBlank(qsStr)) {
+                            try { vo.setQs(Integer.parseInt(qsStr)); } catch (NumberFormatException e) {
+                                log.warn("建设工程规划许可-期数格式不正确: {}", qsStr);
+                            }
+                        }
+                        vo.setJsgm(excel.get("建设规模"));
+                        vo.setFzjg(excel.get("发证机关"));
+                        String nodeId = jsgcghxkService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "06建设工程规划许可阶段");
+                        }
+                    }
+                }
+            }
 
+            // ----- 土地核验与规划核实 -----
+            if (CollectionUtils.isNotEmpty(tdhyhsList) && i < tdhyhsList.size()) {
+                Map<String, String> excel = tdhyhsList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String hgzh = excel.get("合格证号(必填)");
+                    String fzDate = excel.get("发证日期(必填)");
+                    if (StringUtils.isNotBlank(hgzh) && StringUtils.isNotBlank(fzDate) && isValidChineseDate(fzDate)) {
+                        TdhyhsVo vo = new TdhyhsVo();
+                        vo.setProjectId(projectId);
+                        vo.setHgzh(hgzh);
+                        vo.setFzDate(fzDate);
+                        vo.setYdwz(excel.get("用地位置"));
+                        vo.setFzjg(excel.get("发证机关"));
+                        vo.setJsdw(excel.get("建设单位"));
+                        vo.setGljsgcghxkh(excel.get("关联建设工程规划许可号"));
+                        String nodeId = tdhyhsService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "07土地核验与规划核实阶段");
+                        }
+                    }
+                }
+            }
 
+            // ----- 国有建设用地使用权及房屋所有权首次登记 -----
+            if (CollectionUtils.isNotEmpty(gyjsydjfwscdjList) && i < gyjsydjfwscdjList.size()) {
+                Map<String, String> excel = gyjsydjfwscdjList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String ywh = excel.get("业务号(必填)");
+                    if (StringUtils.isNotBlank(ywh)) {
+                        GyjsydjfwscdjVo vo = new GyjsydjfwscdjVo();
+                        vo.setProjectId(projectId);
+                        vo.setYwh(ywh);
+                        vo.setKfdw(excel.get("开发单位"));
+                        vo.setBdcqk(excel.get("不动产情况"));
+                        vo.setJzmj(excel.get("建筑面积"));
+                        vo.setJzmjDw(excel.get("建筑面积单位"));
+                        vo.setTnmj(excel.get("套内面积"));
+                        vo.setTnmjDw(excel.get("套内面积单位"));
+                        vo.setFtmj(excel.get("分摊面积"));
+                        vo.setFtmjDw(excel.get("分摊面积单位"));
+                        vo.setBz(excel.get("备注(数据清单)"));
+                        String nodeId = gyjsydjfwscdjService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "08国有建设用地使用权及房屋所有权首次登记阶段");
+                        }
+                    }
+                }
+            }
 
+            // ----- 用地报批 (仅单独选址) -----
+            if (projectVo.getProjectType() == 1 && CollectionUtils.isNotEmpty(ydbpList) && i < ydbpList.size()) {
+                Map<String, String> excel = ydbpList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String pfwh = excel.get("批复文号(必填)");
+                    String pfDate = excel.get("批复日期(必填)");
+                    if (StringUtils.isNotBlank(pfwh) && StringUtils.isNotBlank(pfDate) && isValidChineseDate(pfDate)) {
+                        YdbpVo vo = new YdbpVo();
+                        vo.setProjectId(projectId);
+                        vo.setPfwh(pfwh);
+                        vo.setPfDate(pfDate);
+                        vo.setTdyt(excel.get("土地用途"));
+                        vo.setYdArea(parseFloatField(excel.get("用地面积"), "用地报批-用地面积"));
+                        vo.setYdUnit(validateAreaUnit(excel.get("用地面积"), excel.get("用地面积单位"), "用地面积", "用地面积单位"));
+                        vo.setZsArea(parseFloatField(excel.get("征收面积"), "用地报批-征收面积"));
+                        vo.setZsUnit(validateAreaUnit(excel.get("征收面积"), excel.get("征收面积单位"), "征收面积", "征收面积单位"));
+                        String hasZz = excel.get("是否完成征转");
+                        if (StringUtils.isNotBlank(hasZz)) {
+                            if ("是".equals(hasZz)) hasZz = "已报已征";
+                            else if ("否".equals(hasZz)) hasZz = "未报未征";
+                            else hasZz = "";
+                        }
+                        vo.setHasZz(hasZz);
+                        vo.setBpDate(excel.get("报批日期"));
+                        String nodeId = ydbpService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "01用地报批阶段");
+                        }
+                    }
+                }
+            }
 
+            // ----- 用地预审与选址 (仅单独选址) -----
+            if (projectVo.getProjectType() == 1 && CollectionUtils.isNotEmpty(ydysyxzList) && i < ydysyxzList.size()) {
+                Map<String, String> excel = ydysyxzList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String zzwh = excel.get("证书文号");
+                    String fzDate = excel.get("发证日期");
+                    if (StringUtils.isNotBlank(zzwh) && StringUtils.isNotBlank(fzDate) && isValidChineseDate(fzDate)) {
+                        YdysyxzVo vo = new YdysyxzVo();
+                        vo.setProjectId(projectId);
+                        vo.setZzwh(zzwh);
+                        vo.setFzDate(fzDate);
+                        vo.setJsdd(excel.get("建设地点"));
+                        vo.setArea(parseFloatField(excel.get("拟用地面积"), "用地预审与选址-拟用地面积"));
+                        vo.setAreaUnit(validateAreaUnit(excel.get("拟用地面积"), excel.get("面积单位"), "拟用地面积", "面积单位"));
+                        String hasZz = excel.get("是否完成征转");
+                        if (StringUtils.isNotBlank(hasZz)) {
+                            if ("是".equals(hasZz)) hasZz = "已报已征";
+                            else if ("否".equals(hasZz)) hasZz = "未报未征";
+                            else hasZz = "";
+                        }
+                        vo.setHasZz(hasZz);
+                        vo.setXmjsyj(excel.get("项目建设依据"));
+                        String nodeId = ydysyxzService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "00用地预审与选址阶段");
+                        }
+                    }
+                }
+            }
 
+            // ----- 规划条件与用地红线出具 (仅批次报批) -----
+            if (projectVo.getProjectType() == 2 && CollectionUtils.isNotEmpty(tjyydhxList) && i < tjyydhxList.size()) {
+                Map<String, String> excel = tjyydhxList.get(i);
+                if (!isAllFieldsEmpty(excel)) {
+                    String cjbh = excel.get("出具编号");
+                    String cjDate = excel.get("出具日期");
+                    if (StringUtils.isNotBlank(cjbh) && StringUtils.isNotBlank(cjDate) && isValidChineseDate(cjDate)) {
+                        TjyydhxVo vo = new TjyydhxVo();
+                        vo.setProjectId(projectId);
+                        vo.setCjbh(cjbh);
+                        vo.setCjDate(cjDate);
+                        vo.setDkbm(excel.get("地块编码"));
+                        vo.setArea(parseFloatField(excel.get("用地面积"), "规划条件与用地红线出具-用地面积"));
+                        vo.setAreaUnit(validateAreaUnit(excel.get("用地面积"), excel.get("面积单位"), "用地面积", "面积单位"));
+                        vo.setYdxz(excel.get("用地性质"));
+                        vo.setYdwz(excel.get("用地位置"));
+                        String nodeId = tjyydhxService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachment(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "09规划条件与用地红线出具阶段");
+                        }
+                    }
+                }
+            }
 
 
 
 
 
             i++;
-            if (i > 2) {
+            if (i > 9) {
                 log.warn("目前只支持处理一条土地供应数据,后续增加处理逻辑");
                 break;
             }