Pārlūkot izejas kodu

报批数据入库,修改前备份

chenendian 18 stundas atpakaļ
vecāks
revīzija
a832c8d674

+ 2 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/common/Constant.java

@@ -113,6 +113,8 @@ public class Constant {
     //public static final String  IMPORT_EXCEL_DATA_FILE_PATH = "D:\\tmp\\one_code_manage\\excel_deom";
     public static final String  IMPORT_EXCEL_DATA_FILE_PATH = "D:\\tmp\\one_code_manage\\excel_full_deal";
 
+    public static final String  IMPORT_EXCEL_FILE_PATH = "D:\\tmp\\给开发";
+
 
     public static final String  FILE_UPLOAD_PATH = "/home/siwei/uploadPath/2026/09/32";
 

+ 258 - 116
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/DealExcelServiceImpl.java

@@ -48,10 +48,16 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class DealExcelServiceImpl {
+    // 土地供应 ,出让,划拨
+    private final String rootPathAll = "";
 
-    private final String rootPathAll = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\数据治理批量导入示例数据\\赣江新区项目文件夹建立\\1.出让项目";
-    private final String rootPath2019 = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\数据治理批量导入示例数据\\赣江新区项目文件夹建立\\1.出让项目\\2019";
-    private final String rootPath2020 = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\数据治理批量导入示例数据\\赣江新区项目文件夹建立\\1.出让项目\\2020";
+    private final String rootPathAll_CR = Constant.IMPORT_EXCEL_FILE_PATH + "\\4.土地供应\\附件材料\\1.出让项目";
+    private final String rootPathAll_HB = Constant.IMPORT_EXCEL_FILE_PATH + "\\4.土地供应\\附件材料\\2.划拨项目";
+    //用地预审选址
+    private final String rootPathAll_YDYSYXZ = Constant.IMPORT_EXCEL_FILE_PATH + "\\2.用地预审与选址项目";
+
+    //private final String rootPath2019 = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\数据治理批量导入示例数据\\赣江新区项目文件夹建立\\1.出让项目\\2019";
+    //private final String rootPath2020 = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\数据治理批量导入示例数据\\赣江新区项目文件夹建立\\1.出让项目\\2020";
     private final String rootPathZip = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\zip";
     private final String targectDir = Constant.FILE_UPLOAD_PATH;
     private static final String bdcFileDownPath =  Constant.BDC_FILE_DOWN_PATH;
@@ -121,22 +127,17 @@ public class DealExcelServiceImpl {
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public String addExcelDataToDb_V3(Map<String, List<Map<String, String>>> dataMap) {
+    public String addExcelDataToDb_V3(Map<String, List<Map<String, String>>> dataMap){
 
         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;
-        int j = 0;
 
         for (Map<String, String> xm : xmList) {
             ProjectVo projectVo = new ProjectVo();
@@ -150,124 +151,216 @@ public class DealExcelServiceImpl {
                 continue;
             }
 
-            String projectName = StringUtils.isNotBlank(xm.get("项目名称"))? xm.get("项目名称"):"";
+            String projectName = xm.get("项目名称");
+            if (StringUtils.isBlank(projectName)) {
+                projectName = "xxxx3_" + System.currentTimeMillis();
+                log.warn("项目名称为空,默认设置为{}", projectName);
+            }else {
+                projectName = "pro3_" + projectName;
+            }
+
             projectVo.setName(projectName);
 
-            String code = StringUtils.isNotBlank(xm.get("项目代码"))? xm.get("项目代码"):"";
+            String code = xm.get("项目代码");
             projectVo.setCode(code);
 
-            String company = StringUtils.isNotBlank(xm.get("建设单位"))? xm.get("建设单位"):"";
+            String company = xm.get("建设单位");
             projectVo.setCompany(company);
+            projectVo.setOnChainNum(0);
+
+            String projectId = projectService.add(projectVo);
+
+            // -----------------第一部分增加项目结束-------------------------------
+
+
+            // -----------------第二部分增加土地供应环节开始-------------------------------
+            if (CollectionUtils.isNotEmpty(tdgyList)) {
+                TdgyVo tdgyVo = new TdgyVo();
+                tdgyVo.setProjectId(projectId);
+
+                Map<String, String> tdgyExcel = tdgyList.get(i);
+                String srf = tdgyExcel.get("土地受让人");
+                tdgyVo.setSrf(srf);
+
+                String tdyt = tdgyExcel.get("土地用途");
+                String tdytCode = getTdytCodeByName(tdyt);
+                if (StringUtils.isBlank(tdytCode)) {
+                    log.warn("土地用途{}没有找到对应的code,默认设置为{}", tdyt, tdytCode);
+                }
+                tdgyVo.setTdyt(tdytCode);
+
+                String gdArea = tdgyExcel.get("供地面积");
+                if (StringUtils.isBlank(gdArea)) {
+                    log.warn("供地面积为空,默认设置为0");
+                    gdArea = "0";
+                }
+                tdgyVo.setGdArea(Float.parseFloat(gdArea));
+
+                String gdUnit = tdgyExcel.get("面积单位");
+                if (StringUtils.isBlank(gdUnit)) {
+                    log.warn("面积单位为空,默认设置为空字符");
+                    gdUnit = "";
+                }
+                tdgyVo.setGdUnit(gdUnit);
+
+                String jswz = tdgyExcel.get("建设位置");
+                tdgyVo.setJswz(jswz);
+
+                String gdType = tdgyExcel.get("供地方式");
+                tdgyVo.setGdType(gdType);
+
+                String hasZz = tdgyExcel.get("是否完成征转");
+                if (hasZz.equalsIgnoreCase("是")) {
+                    hasZz = "已报已征";
+                } else if (hasZz.equalsIgnoreCase("否")) {
+                    hasZz = "未报未征";
+                } else {
+                    log.warn("是否完成征转{}不合法,默认设置为否", hasZz);
+                    hasZz = "";
+                }
+                tdgyVo.setHasZz(hasZz);
+
+                String hbcrfapfwh = tdgyExcel.get("用地划拨/出让方案批复文号");
+                tdgyVo.setHbcrfapfwh(hbcrfapfwh);
+
+                String hbcrhtbh = tdgyExcel.get("划拨决定书/出让合同编号(必填)");
+                tdgyVo.setHbcrhtbh(hbcrhtbh);
+
+                String hbcrhtDate = tdgyExcel.get("划拨决定书/出让合同日期");
+                hbcrhtDate = parseChineseDate(hbcrhtDate);
+                tdgyVo.setHbcrhtDate(hbcrhtDate);
+                String id = tdgyService.add(tdgyVo);
+
+                //附件材料处理  -- 数据治理文件名
+                Map<String, String> jdMap = jdList.get(i);
+                String projectFileName = jdMap.get("数据治理文件名");
+                String nodeFileName = "03土地供应阶段";
+                writeToLog("project_file_name_err2.log", "excel行(" + i + ")-> "+projectFileName);
+
+                String currentGdType =  gdType.equalsIgnoreCase("出让") ? "1" : (gdType.equalsIgnoreCase("划拨")? "2" : "1");
+                dealCurrentNodeAttachmentV3(projectId, id, projectFileName,"", nodeFileName, currentGdType);
+                //矢量数据处理  -- 数据治理文件名
+                String dzjgh = jdMap.get("划拨决定书/出让合同电子监管号");
+                dealCurrentNodeGeom(dzjgh, id);
+
+                try{
+                    //这里更新上链
+                    NodeLand nodeLand = nodeLandService.getNodeLandByNodeId(id);
+                    if(Objects.nonNull(nodeLand)){
+                        tdgyService.updateHasOnchain(id, projectId,true);
+                        // 更新项目表的上链数量
+                        projectService.countOnChinaNum(projectId);
+                        //这里生成资源吗
+                        landOneCodeService.addOrUpdateLandOneCodeInfo(projectId,id);
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.info("自动上链失败:上链项目名称:{},错误信息{}",projectName, e.getMessage());
+                }
 
-            if(StringUtils.isBlank(projectName)||StringUtils.isBlank(code)||StringUtils.isBlank(company)){
-                log.error("项目名称、项目代码、建设单位不能为空,项目名称:{},项目代码:{},建设单位:{}", projectName, code, company);
-                continue;
             }
+            // -----------------第二部分增加项目关联的(土地供应)环节结束-------------------------------
 
-            List<Project> proList =  projectMapper.getByConditionList(projectName, code, company);
-            if(CollectionUtils.isNotEmpty(proList)){
-                log.info("找到项目: name:{},code:{},company:{},条数:{}", projectName, code, company,proList.size());
-            }else {
-                log.info("新增项目: name:{},code:{},company:{},条数:{}", projectName, code, company,++j);
+
+            // ----- 用地报批 (仅单独选址) -----
+            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)) {
+                        pfDate = parseChineseDate(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()) {
+                            dealCurrentNodeAttachmentV3(projectId, nodeId, jdList.get(i).get("数据治理文件名"),rootPathAll, "01用地报批阶段", null);
+                        }
+                    }
+                }
             }
 
 
-            //String projectId = projectService.add(projectVo);
-            // -----------------第一部分增加项目结束-------------------------------
 
+            // ----- 用地预审与选址 (仅单独选址) -----
+            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)) {
+                        fzDate = parseChineseDate(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.setJsyj(excel.get("项目建设依据"));
+                        vo.setXmjsyj(excel.get("项目规模及内容"));
+
+                        String nodeId = ydysyxzService.add(vo);
+                        if (CollectionUtils.isNotEmpty(jdList) && i < jdList.size()) {
+                            dealCurrentNodeAttachmentV3(projectId, nodeId, projectName, rootPathAll_YDYSYXZ,"00用地预审与选址阶段", null);
+                        }
+                    }
+                }
+            }
 
-            // -----------------第二部分增加土地供应环节开始-------------------------------
-//            if (CollectionUtils.isNotEmpty(tdgyList) && false) {
-//                TdgyVo tdgyVo = new TdgyVo();
-//                tdgyVo.setProjectId(projectId);
-//
-//                Map<String, String> tdgyExcel = tdgyList.get(i);
-//                String srf = tdgyExcel.get("土地受让人");
-//                tdgyVo.setSrf(srf);
-//
-//                String tdyt = tdgyExcel.get("土地用途");
-//                String tdytCode = getTdytCodeByName(tdyt);
-//                if (StringUtils.isBlank(tdytCode)) {
-//                    log.warn("土地用途{}没有找到对应的code,默认设置为{}", tdyt, tdytCode);
-//                }
-//                tdgyVo.setTdyt(tdytCode);
-//
-//                String gdArea = tdgyExcel.get("供地面积");
-//                if (StringUtils.isBlank(gdArea)) {
-//                    log.warn("供地面积为空,默认设置为0");
-//                    gdArea = "0";
-//                }
-//                tdgyVo.setGdArea(Float.parseFloat(gdArea));
-//
-//                String gdUnit = tdgyExcel.get("面积单位");
-//                if (StringUtils.isBlank(gdUnit)) {
-//                    log.warn("面积单位为空,默认设置为空字符");
-//                    gdUnit = "";
-//                }
-//                tdgyVo.setGdUnit(gdUnit);
-//
-//                String jswz = tdgyExcel.get("建设位置");
-//                tdgyVo.setJswz(jswz);
-//
-//                String gdType = tdgyExcel.get("供地方式");
-//                tdgyVo.setGdType(gdType);
-//
-//                String hasZz = tdgyExcel.get("是否完成征转");
-//                if (hasZz.equalsIgnoreCase("是")) {
-//                    hasZz = "已报已征";
-//                } else if (hasZz.equalsIgnoreCase("否")) {
-//                    hasZz = "未报未征";
-//                } else {
-//                    log.warn("是否完成征转{}不合法,默认设置为否", hasZz);
-//                    hasZz = "";
-//                }
-//                tdgyVo.setHasZz(hasZz);
-//
-//                String hbcrfapfwh = tdgyExcel.get("用地划拨/出让方案批复文号");
-//                tdgyVo.setHbcrfapfwh(hbcrfapfwh);
-//
-//                String hbcrhtbh = tdgyExcel.get("划拨决定书/出让合同编号(必填)");
-//                tdgyVo.setHbcrhtbh(hbcrhtbh);
-//
-//                String hbcrhtDate = tdgyExcel.get("划拨决定书/出让合同日期");
-//                hbcrhtDate = parseChineseDate(hbcrhtDate);
-//                tdgyVo.setHbcrhtDate(hbcrhtDate);
-//                String id = tdgyService.add(tdgyVo);
-//
-//                //附件材料处理  -- 数据治理文件名
-//                Map<String, String> jdMap = jdList.get(i);
-//                String projectFileName = jdMap.get("数据治理文件名");
-//                String nodeFileName = "03土地供应阶段";
-//                writeToLog("project_file_name_err2.log", "excel行(" + i + ")-> "+projectFileName);
-//
-//                String currentGdType =  gdType.equalsIgnoreCase("出让") ? "1" : (gdType.equalsIgnoreCase("划拨")? "2" : "1");
-//                dealCurrentNodeAttachment(projectId, id, projectFileName, nodeFileName, currentGdType);
-//                //矢量数据处理  -- 数据治理文件名
-//                String dzjgh = jdMap.get("划拨决定书/出让合同电子监管号");
-//                dealCurrentNodeGeom(dzjgh, id);
-//                try{
-//                    //这里更新上链
-//                    NodeLand nodeLand = nodeLandService.getNodeLandByNodeId(id);
-//                    if(Objects.nonNull(nodeLand)){
-//                        tdgyService.updateHasOnchain(id, projectId,true);
-//                        // 更新项目表的上链数量
-//                        projectService.countOnChinaNum(projectId);
-//                        //这里生成资源吗
-//                        landOneCodeService.addOrUpdateLandOneCodeInfo(projectId,id);
-//                    }
-//
-//                } catch (Exception e) {
-//                    e.printStackTrace();
-//                    log.info("自动上链失败:上链项目名称:{},错误信息{}",projectName, e.getMessage());
-//                }
-//
-//            }
-            // -----------------第二部分增加项目关联的(土地供应)环节结束-------------------------------
-            i++;
-        }
 
 
+            // ----- 规划条件与用地红线出具 (仅批次报批) -----
+            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)) {
+                        cjDate = parseChineseDate(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()) {
+                            dealCurrentNodeAttachmentV3(projectId, nodeId, jdList.get(i).get("数据治理文件名"), "","09规划条件与用地红线出具阶段", null);
+                        }
+                    }
+                }
+            }
+
+            i++;
+        }
         return "successs";
     }
 
@@ -1379,7 +1472,49 @@ public class DealExcelServiceImpl {
         //这里先初始化项目
         nodeAttachmentService.addDefaultAttachment(projectId, nodeId,gdType);
         String fullFilePath ="";
-        String innerDirName = getDealFilePath(projectFileName);//找到当前文件
+        String innerDirName = getDealFilePath("",projectFileName);//找到当前文件
+        if (StringUtils.isNotBlank(innerDirName)) {
+            fullFilePath = copyFileToDirectory(rootPathAll +"\\" + innerDirName + "\\" + projectFileName, targectDir + "\\" + projectFileName, nodeFileName);
+        }
+        if (StringUtils.isNotBlank(fullFilePath)) {
+            //这里进行文件关联
+            String nodeAttachmentId = associationFile(fullFilePath, projectId, nodeId);
+            log.info("关于项目{}的土地供应环节,文件{}关联结果{}", projectId, nodeFileName, nodeAttachmentId);
+        }else {
+            log.warn("未找到数据治理文件名称--附件材料:{},请确认文件是否存在于路径{}或{}", projectFileName, rootPathAll);
+        }
+    }
+
+
+
+
+
+
+
+
+    //附件数据处理  -- 数据治理文件名
+    public void dealCurrentNodeAttachmentV3(String projectId, String nodeId, String projectFileName,String outPath, String nodeFileName,String gdType) {
+        if (StringUtils.isBlank(projectFileName)) {
+            log.info("数据治理文件名称--附件材料:{}", projectFileName);
+            return;
+        }
+
+//        List<String> aa = List.of(
+//                "2020-3 赣江新区直管区国药南大道以东、规划路以南、国药支路以西、慈菇东路以北(SHD02-07)",
+//                "2020-4 赣江新区直管区欧阳修支路以东、欧阳修路以南、储备用地以西、慈菇东路以北(SHD04-05-01)",
+//                "2020-12 赣江新区直管区济生南路以东、欧阳修路以南、储备用地以西、慈菇东路以北SHD06-03"
+//        );
+//
+//        if(aa.contains(projectFileName)){
+//            int a1=100;
+//            int b2=a1+100;
+//            log.info("附件材料处理逻辑:{},{}", projectFileName,b2);
+//        }
+
+        //这里先初始化项目
+        nodeAttachmentService.addDefaultAttachment(projectId, nodeId,gdType);
+        String fullFilePath ="";
+        String innerDirName = getDealFilePath(outPath,projectFileName);//找到当前文件
         if (StringUtils.isNotBlank(innerDirName)) {
             fullFilePath = copyFileToDirectory(rootPathAll +"\\" + innerDirName + "\\" + projectFileName, targectDir + "\\" + projectFileName, nodeFileName);
         }
@@ -1389,7 +1524,7 @@ public class DealExcelServiceImpl {
             String nodeAttachmentId = associationFile(fullFilePath, projectId, nodeId);
             log.info("关于项目{}的土地供应环节,文件{}关联结果{}", projectId, nodeFileName, nodeAttachmentId);
         }else {
-            log.warn("未找到数据治理文件名称--附件材料:{},请确认文件是否存在于路径{}或{}", projectFileName, rootPath2019, rootPath2020);
+            log.warn("未找到数据治理文件名称--附件材料:{},请确认文件是否存在于路径{}或{}", projectFileName, "", "");
         }
     }
 
@@ -1416,11 +1551,18 @@ public class DealExcelServiceImpl {
     }
 
 
-    public  String getDealFilePath(String projectFileName) {
+    public  String getDealFilePath(String outPath,String projectFileName) {
         String fullFilePath = "";
+        if(StringUtils.isBlank(outPath)){
+            return "";
+        }
+
         try {
             for(String pathName : Constant.NODE_ATTACHMENT_NAME_LIST){
-                Path filePath = Paths.get(rootPathAll + "\\" +pathName+ "\\" + projectFileName);
+                //Path filePath = Paths.get(rootPathAll + "\\" +pathName+ "\\" + projectFileName);
+                Path filePath = Paths.get(outPath + "\\" +pathName+ "\\" + projectFileName);
+
+
                 if (Files.exists(filePath) && Files.isDirectory(filePath)) {
                     fullFilePath =pathName;
                     break;