瀏覽代碼

项目校验日志等

chenendian 2 天之前
父節點
當前提交
d028a8036d

+ 3 - 1
.gitignore

@@ -84,4 +84,6 @@ nbdist/
 /.vscode/*
 /.workbuddy/*
 /node_modules/*
-/siwei-modules/siwei-apply/lib/aspose-words-18.6-jdk16-crack.jar
+/siwei-modules/siwei-apply/lib/aspose-words-18.6-jdk16-crack.jar
+/.SiWei/*
+/memory/*

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

@@ -84,7 +84,8 @@ public class Constant {
     );
 
     //项目excel导入路径
-    public static final String  IMPORT_EXCEL_DATA_FILE_PATH = "D:\\one_code_manage\\project_excel_data";
+    //public static final String  IMPORT_EXCEL_DATA_FILE_PATH = "D:\\one_code_manage\\project_excel_data";
+    public static final String  IMPORT_EXCEL_DATA_FILE_PATH = "D:\\tmp\\one_code_manage\\excel_deom";
 
     public static final String  FILE_UPLOAD_PATH = "/home/siwei/uploadPath/2026/05/26";
 

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

@@ -45,8 +45,8 @@ public class DealExcelController extends BaseController {
             Path filePath = Paths.get(uploadFile);
             File file = filePath.toFile();
             Map<String, List<Map<String, String>>> dataMap = readExcelWithMergedHeaders(file);
-             String res = dealExcelService.addBatchDateExcelDataToDb(dataMap);
-            logger.info("检查数据结果{}",res);
+            //String res = dealExcelService.addBatchDateExcelDataToDb(dataMap);
+            //logger.info("检查数据结果{}",res);
             return R.ok(dataMap);
         } catch (Exception e) {
             e.printStackTrace();

+ 441 - 175
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/DealExcelServiceImpl.java

@@ -90,7 +90,7 @@ public class DealExcelServiceImpl {
      */
     public String addBatchDateExcelDataToDb(Map<String, List<Map<String, String>>> dataMap) {
         List<Map<String, String>> batchList = dataMap.get("新建(用地报批(批次)数据集成)");
-        for(Map<String, String> batch : batchList){
+        for (Map<String, String> batch : batchList) {
             String projectName = batch.get("项目名称");
             String reportStatus = batch.get("报征状态");
             String batchApprovalNum = batch.get("批复文号");
@@ -101,19 +101,19 @@ public class DealExcelServiceImpl {
             log.info("项目名称:{},报征状态:{},批复文号:{},报批日期:{},批复日期:{}", projectName, reportStatus, batchApprovalNum, reportDate, approvalDate);
 
             YdbpDataVo ydbpDataVo = new YdbpDataVo();
-            ydbpDataVo.setName(projectName+System.currentTimeMillis());
+            ydbpDataVo.setName(projectName + System.currentTimeMillis());
             ydbpDataVo.setPfwh(batchApprovalNum);
             ydbpDataVo.setBpDate(approvalDate);
 
             String nodeId = ydbpDataService.add(ydbpDataVo);
 
-            String shpFileName = projectName+"shp.zip";
-           //数据治理文件名
+            String shpFileName = projectName + "shp.zip";
+            //数据治理文件名
             if (StringUtils.isNotBlank(projectName)) {
-                Path filePath = Paths.get(rootPathZip + "\\" +shpFileName);
+                Path filePath = Paths.get(rootPathZip + "\\" + shpFileName);
                 if (Files.exists(filePath) || !Files.isDirectory(filePath)) {
-                    String fullFilePath = copyFileToDirectory(rootPathZip + "\\", targectDir ,  shpFileName);
-                    R<TGeomDb> saveGeomRes = remoteSpatialFilesDbService.readShp(shpFileName,fullFilePath,"excel", SecurityConstants.INNER);
+                    String fullFilePath = copyFileToDirectory(rootPathZip + "\\", targectDir, shpFileName);
+                    R<TGeomDb> saveGeomRes = remoteSpatialFilesDbService.readShp(shpFileName, fullFilePath, "excel", SecurityConstants.INNER);
                     TGeomDb tGeomDb = saveGeomRes.getData();
                     log.info("远程调用geom保存,返回结果:{}", tGeomDb);
                     //这里保存geom映射关系
@@ -121,15 +121,11 @@ public class DealExcelServiceImpl {
                 }
             }
         }
-        log.info("------------"+batchList);
+        log.info("------------" + batchList);
         return "successs";
     }
 
 
-
-
-
-
     /**
      * 检查excel数据到数据库
      *
@@ -140,18 +136,27 @@ public class DealExcelServiceImpl {
         List<Map<String, String>> xmList = dataMap.get("项目信息");
         int i = 4;
         for (Map<String, String> xm : xmList) {
+            // 检查是否所有字段为空
+            if (isAllFieldsEmpty(xm)) {
+                i++;
+                continue;
+            }
+
+            String projectType = xm.get("项目类型(必填)");
+            // 项目类型为空则直接跳过此数据
+            if (StringUtils.isBlank(projectType)) {
+                i++;
+                continue;
+            }
 
             String projectName = xm.get("项目名称");
             if (StringUtils.isBlank(projectName)) {
-                writeToLog("xm_err.log", "excel行(" + i + ")项目名称为空,是否需要默认设置" );
+                writeToLog("xm_err.log", "excel行(" + i + ")项目名称为空,是否需要默认设置");
             }
 
-            String projectType = xm.get("项目类型(必填)");
             if (!(projectType.equalsIgnoreCase("单独选址") || projectType.equalsIgnoreCase("批次报批"))) {
                 writeToLog("xm_err.log", "excel行(" + i + ")项目类型不合法,项目类型只能是单独选址或者批次报批");
             }
-
-
             i++;
         }
 
@@ -161,6 +166,11 @@ public class DealExcelServiceImpl {
         List<Map<String, String>> tdgyList = dataMap.get("土地供应");
         i = 4;
         for (Map<String, String> tdgyExcel : tdgyList) {
+            // 检查是否所有字段为空
+            if (isAllFieldsEmpty(tdgyExcel)) {
+                i++;
+                continue;
+            }
             String tdyt = tdgyExcel.get("土地用途");
             String tdytCode = getTdytCodeByName(tdyt);
             if (StringUtils.isBlank(tdytCode)) {
@@ -170,9 +180,383 @@ public class DealExcelServiceImpl {
             if (StringUtils.isBlank(hetongCode)) {
                 writeToLog("tdgy_err.log", "excel行(" + i + ")(用地划拨/出让方案批复文号)不能为空");
             }
+            // 校验面积字段和面积单位
+            checkAreaFields(tdgyExcel, "供地面积", "面积单位", i, "tdgy_err.log");
+            i++;
+        }
+
+        // -----------------第二部分校验(国有建设用地使用权首次登记)环节数据开始-------------------------------
+        List<Map<String, String>> gyjsydscdjList = dataMap.get("国有建设用地使用权首次登记");
+        i = 4;
+        for (Map<String, String> gyjsydscdjExcel : gyjsydscdjList) {
+            // 检查是否所有字段为空
+            if (isAllFieldsEmpty(gyjsydscdjExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (不动产单元号,不动产证号) 字段不能为空
+            String bdcdyh = gyjsydscdjExcel.get("不动产单元号(必填)");
+            if (StringUtils.isBlank(bdcdyh)) {
+                writeToLog("gyjsydscdj_err.log", "excel行(" + i + ")不动产单元号不能为空,字段值:" + bdcdyh);
+            }
+            String bdczh = gyjsydscdjExcel.get("不动产证号(必填)");
+            if (StringUtils.isBlank(bdczh)) {
+                writeToLog("gyjsydscdj_err.log", "excel行(" + i + ")不动产证号不能为空,字段值:" + bdczh);
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(gyjsydscdjExcel, "面积", "面积单位", i, "gyjsydscdj_err.log");
+            i++;
+        }
+
+        // -----------------第三部分校验(建设用地规划许可)环节数据开始-------------------------------
+        List<Map<String, String>> jsydghxkList = dataMap.get("建设用地规划许可");
+        i = 4;
+        for (Map<String, String> jsydghxkExcel : jsydghxkList) {
+            if (isAllFieldsEmpty(jsydghxkExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
+            String zsbh = jsydghxkExcel.get("证书编号(必填)");
+            if (StringUtils.isBlank(zsbh)) {
+                writeToLog("jsydghxk_err.log", "excel行(" + i + ")证书编号不能为空,字段值:" + zsbh);
+            }
+            String fzrq = jsydghxkExcel.get("发证日期(必填)");
+            if (StringUtils.isBlank(fzrq)) {
+                writeToLog("jsydghxk_err.log", "excel行(" + i + ")发证日期不能为空,字段值:" + fzrq);
+            } else {
+                if (!isValidChineseDate(fzrq)) {
+                    writeToLog("jsydghxk_err.log", "excel行(" + i + ")发证日期格式不合法,应为(2019年9月4日)格式,字段值:" + fzrq);
+                }
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(jsydghxkExcel, "用地面积", "面积单位", i, "jsydghxk_err.log");
+            i++;
+        }
+
+        // -----------------第四部分校验(建设工程规划许可)环节数据开始-------------------------------
+        List<Map<String, String>> jsgcghxkList = dataMap.get("建设工程规划许可");
+        i = 4;
+        for (Map<String, String> jsgcghxkExcel : jsgcghxkList) {
+            if (isAllFieldsEmpty(jsgcghxkExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
+            String zsbh = jsgcghxkExcel.get("证书编号(必填)");
+            if (StringUtils.isBlank(zsbh)) {
+                writeToLog("jsgcghxk_err.log", "excel行(" + i + ")证书编号不能为空,字段值:" + zsbh);
+            }
+            String fzrq = jsgcghxkExcel.get("发证日期(必填)");
+            if (StringUtils.isBlank(fzrq)) {
+                writeToLog("jsgcghxk_err.log", "excel行(" + i + ")发证日期不能为空,字段值:" + fzrq);
+            } else {
+                if (!isValidChineseDate(fzrq)) {
+                    writeToLog("jsgcghxk_err.log", "excel行(" + i + ")发证日期格式不合法,应为(2019年9月4日)格式,字段值:" + fzrq);
+                }
+            }
+            i++;
+        }
+
+        // -----------------第五部分校验(土地核验与规划核实)环节数据开始-------------------------------
+        List<Map<String, String>> tdhyhsList = dataMap.get("土地核验与规划核实");
+        i = 4;
+        for (Map<String, String> tdhyhsExcel : tdhyhsList) {
+            if (isAllFieldsEmpty(tdhyhsExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (合格证号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
+            String hgzh = tdhyhsExcel.get("合格证号(必填)");
+            if (StringUtils.isBlank(hgzh)) {
+                writeToLog("tdhyhs_err.log", "excel行(" + i + ")合格证号不能为空,字段值:" + hgzh);
+            }
+            String fzrq = tdhyhsExcel.get("发证日期(必填)");
+            if (StringUtils.isBlank(fzrq)) {
+                writeToLog("tdhyhs_err.log", "excel行(" + i + ")发证日期不能为空,字段值:" + fzrq);
+            } else {
+                if (!isValidChineseDate(fzrq)) {
+                    writeToLog("tdhyhs_err.log", "excel行(" + i + ")发证日期格式不合法,应为(2019年9月4日)格式,字段值:" + fzrq);
+                }
+            }
+            i++;
+        }
+
+        // -----------------第六部分校验(国有建设用地使用权及房屋所有权首次登记)环节数据开始-------------------------------
+        List<Map<String, String>> gyjsydjfwscdjList = dataMap.get("国有建设用地使用权及房屋所有权首次登记(会有多个不动产权证)(界面新参数)");
+        i = 4;
+        for (Map<String, String> gyjsydjfwscdjExcel : gyjsydjfwscdjList) {
+            if (isAllFieldsEmpty(gyjsydjfwscdjExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (业务号) 字段不能为空
+            String ywh = gyjsydjfwscdjExcel.get("业务号(必填)");
+            if (StringUtils.isBlank(ywh)) {
+                writeToLog("gyjsydjfwscdj_err.log", "excel行(" + i + ")业务号不能为空,字段值:" + ywh);
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(gyjsydjfwscdjExcel, "建筑面积", "建筑面积单位", i, "gyjsydjfwscdj_err.log");
+            checkAreaFields(gyjsydjfwscdjExcel, "套内面积", "套内面积单位", i, "gyjsydjfwscdj_err.log");
+            checkAreaFields(gyjsydjfwscdjExcel, "分摊面积", "分摊面积单位", i, "gyjsydjfwscdj_err.log");
+            i++;
+        }
+
+        // -----------------第七部分校验(用地报批)环节数据开始-------------------------------
+        List<Map<String, String>> ydbpList = dataMap.get("用地报批");
+        i = 4;
+        for (Map<String, String> ydbpExcel : ydbpList) {
+            if (isAllFieldsEmpty(ydbpExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (批复文号,批复日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
+            String pfwh = ydbpExcel.get("批复文号(必填)");
+            if (StringUtils.isBlank(pfwh)) {
+                writeToLog("ydbp_err.log", "excel行(" + i + ")批复文号不能为空,字段值:" + pfwh);
+            }
+            String pfrq = ydbpExcel.get("批复日期(必填)");
+            if (StringUtils.isBlank(pfrq)) {
+                writeToLog("ydbp_err.log", "excel行(" + i + ")批复日期不能为空,字段值:" + pfrq);
+            } else {
+                if (!isValidChineseDate(pfrq)) {
+                    writeToLog("ydbp_err.log", "excel行(" + i + ")批复日期格式不合法,应为(2019年9月4日)格式,字段值:" + pfrq);
+                }
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(ydbpExcel, "用地面积", "用地面积单位", i, "ydbp_err.log");
+            checkAreaFields(ydbpExcel, "征收面积", "征收面积单位", i, "ydbp_err.log");
+            i++;
+        }
+
+        // -----------------第八部分校验(用地预审与选址)环节数据开始-------------------------------
+        List<Map<String, String>> ydysyxzList = dataMap.get("用地预审与选址");
+        i = 4;
+        for (Map<String, String> ydysyxzExcel : ydysyxzList) {
+            if (isAllFieldsEmpty(ydysyxzExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (证书文号,发证日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
+            String zswh = ydysyxzExcel.get("证书文号");
+            if (StringUtils.isBlank(zswh)) {
+                writeToLog("ydysyxz_err.log", "excel行(" + i + ")证书文号不能为空,字段值:" + zswh);
+            }
+            String fzrq = ydysyxzExcel.get("发证日期");
+            if (StringUtils.isBlank(fzrq)) {
+                writeToLog("ydysyxz_err.log", "excel行(" + i + ")发证日期不能为空,字段值:" + fzrq);
+            } else {
+                if (!isValidChineseDate(fzrq)) {
+                    writeToLog("ydysyxz_err.log", "excel行(" + i + ")发证日期格式不合法,应为(2019年9月4日)格式,字段值:" + fzrq);
+                }
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(ydysyxzExcel, "拟用地面积", "面积单位", i, "ydysyxz_err.log");
             i++;
         }
 
+        // -----------------第九部分校验(规划条件与用地红线出具)环节数据开始-------------------------------
+        List<Map<String, String>> tjyydhxList = dataMap.get("规划条件与用地红线出具");
+        i = 4;
+        for (Map<String, String> tjyydhxExcel : tjyydhxList) {
+            if (isAllFieldsEmpty(tjyydhxExcel)) {
+                i++;
+                continue;
+            }
+            // 需要校验 (出具编号,出具日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
+            String cjbh = tjyydhxExcel.get("出具编号");
+            if (StringUtils.isBlank(cjbh)) {
+                writeToLog("tjyydhx_err.log", "excel行(" + i + ")出具编号不能为空,字段值:" + cjbh);
+            }
+            String cjrq = tjyydhxExcel.get("出具日期");
+            if (StringUtils.isBlank(cjrq)) {
+                writeToLog("tjyydhx_err.log", "excel行(" + i + ")出具日期不能为空,字段值:" + cjrq);
+            } else {
+                if (!isValidChineseDate(cjrq)) {
+                    writeToLog("tjyydhx_err.log", "excel行(" + i + ")出具日期格式不合法,应为(2019年9月4日)格式,字段值:" + cjrq);
+                }
+            }
+            // 校验面积字段和面积单位
+            checkAreaFields(tjyydhxExcel, "用地面积", "面积单位", i, "tjyydhx_err.log");
+            i++;
+        }
+
+        return "successs";
+    }
+
+    /**
+     * 检查Map中所有字段是否为空
+     */
+    private boolean isAllFieldsEmpty(Map<String, String> data) {
+        if (data == null || data.isEmpty()) {
+            return true;
+        }
+        for (String value : data.values()) {
+            if (StringUtils.isNotBlank(value)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 校验面积字段和面积单位
+     */
+    private void checkAreaFields(Map<String, String> data, String areaFieldName, String unitFieldName, int lineNum, String logFileName) {
+        String areaValue = data.get(areaFieldName);
+        String unitValue = data.get(unitFieldName);
+
+        // 如果面积字段有值(数字),则面积单位不能为空
+        if (StringUtils.isNotBlank(areaValue)) {
+            // 检查是否是数字
+            boolean isNumber = false;
+            try {
+                Double.parseDouble(areaValue);
+                isNumber = true;
+            } catch (NumberFormatException e) {
+                // 不是数字
+            }
+
+            if (isNumber) {
+                if (StringUtils.isBlank(unitValue)) {
+                    writeToLog(logFileName, "excel行(" + lineNum + ")" + areaFieldName + "有值时," + unitFieldName + "不能为空,面积值:" + areaValue);
+                } else {
+                    // 校验面积单位是否合法(亩,公顷,平方米)
+                    if (!"亩".equals(unitValue) && !"公顷".equals(unitValue) && !"平方米".equals(unitValue)) {
+                        writeToLog(logFileName, "excel行(" + lineNum + ")" + unitFieldName + "不合法,应为亩、公顷或平方米,字段值:" + unitValue);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 校验中文日期格式,如:2019年9月4日
+     */
+    private boolean isValidChineseDate(String dateStr) {
+        if (StringUtils.isBlank(dateStr)) {
+            return false;
+        }
+        // 正则匹配:YYYY年MM月DD日 或 YYYY年M月D日
+        return dateStr.matches("^\\d{4}年\\d{1,2}月\\d{1,2}日$");
+    }
+
+
+    /**
+     * 添加excel数据到数据库
+     *
+     * @param dataMap
+     * @return
+     */
+    public String addExcelDataToDb(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("阶段");
+
+        int i = 0;
+
+        for (Map<String, String> xm : xmList) {
+            ProjectVo projectVo = new ProjectVo();
+            String projectType = xm.get("项目类型(必填)");
+            if (projectType.equalsIgnoreCase("单独选址")) {
+                projectVo.setProjectType(1);
+            } else if (projectType.equalsIgnoreCase("批次报批")) {
+                projectVo.setProjectType(2);
+            } else {
+                log.error("项目类型不合法,项目类型只能是单独选址或者批次报批{}", projectType);
+                continue;
+            }
+
+            String projectName = xm.get("项目名称");
+            if (StringUtils.isBlank(projectName)) {
+                projectName = "xxxxx" + System.currentTimeMillis();
+                log.warn("项目名称为空,默认设置为{}", projectName);
+            }
+            projectVo.setName(projectName);
+
+            String code = xm.get("项目代码");
+            projectVo.setCode(code);
+
+            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("供地面积为空,默认设置为0");
+                    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("划拨决定书/出让合同日期");
+                tdgyVo.setHbcrhtDate(hbcrhtDate);
+                String id = tdgyService.add(tdgyVo);
+
+                //附件材料处理  -- 数据治理文件名
+                Map<String, String> jdMap = jdList.get(i);
+                String projectFileName = jdMap.get("数据治理文件名");
+                String nodeFileName = "03土地供应阶段";
+                dealCurrentNodeAttachment(projectId, id, projectFileName, nodeFileName);
+
+                //矢量数据处理  -- 数据治理文件名
+                String dzjgh = jdMap.get("划拨决定书/出让合同电子监管号");
+                dealCurrentNodeGeom(dzjgh, id);
+            }
+            // -----------------第二部分增加项目关联的(土地供应)环节结束-------------------------------
+
+
 
         /*   ------------------参考json数据结构-------------------------------
             {
@@ -350,8 +734,6 @@ public class DealExcelServiceImpl {
             ]
         }
 
-
-
          ------------------项目类型为:单独选址-------项目的环节----------------------------------
                 t_ydysyxz	用地预审与选址
                 t_ydbp	用地报批
@@ -372,192 +754,61 @@ public class DealExcelServiceImpl {
                 t_tjyydhx	规划条件与用地红线出具
 
 
-                    -----------各个环节的必传字段见下表----------------------------
-
-                    土地供应:(出让/划拨合同编号)
-
-                    国有建设用地使用权首次登记 (不动产单元号,不动产证号)
-
-                    建设用地规划许可  (证书编号,发证日期)
-
-                    建设工程规划许可 (证书编号,发证日期)
-
-                    土地核验与规划核实 (合格证号,发证日期)
-
-                    国有建设用地使用权及房屋所有权首次登记 (业务号)
-
-                    用地报批 (批复文号,批复日期)
-
-
          */
 
 
-        //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日) 格式
-
-        // -----------------第七部分校验(规划条件与用地红线出具)环节数据开始-------------------------------
-        //todo  需要校验 (出具编号,出具日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
-
+            //todo 读取excel中的数据然后做校验,excel字段对应,见上面参考json,这里继续完善其他部分的校验逻辑,按照上面两部分的示例进行编写,注意日志文件的命名和日志内容的准确性,方便后续排查问题
+            // 要求一,如果当前环节,如:String tdyt = tdgyExcel.get("土地用途"); 获取的所有字段都是空,直接跳过,不写日志
+            // 要求二,如果当前环节存在类似(供地面积,用地面积) 需要有(面积单位字段) ,用地面积的值都是数字,那么面积单位不能为空,并且需要校验面积单位是否合法(亩,公顷,平方米),如果不合法,记录日志
+            // 要求三,各个环节必填字段都没有满足要求的,记录日志,日志内容包括:excel行数,字段名称,字段值,错误描述等信息,方便后续排查问题
+            // 要求四,项目类型为空则直接跳过此数据
+            // 要求五, 若某个环节所有字段为空,或者必填字段不满足要求或为空,记录日志后,继续校验下一个环节,把当前环节跳过处理。
 
+            // -----------------第二部分校验(国有建设用地使用权首次登记)环节数据开始-------------------------------
+            //excel 字段:
+            //todo  需要校验 (不动产单元号,不动产证号) 字段不能为空
 
 
 
-        return "successs";
-    }
-
-
-
+            // -----------------第三部分校验(建设用地规划许可)环节数据开始-------------------------------
+            //todo  需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
 
 
 
 
-    /**
-     * 添加excel数据到数据库
-     *
-     * @param dataMap
-     * @return
-     */
-    public String addExcelDataToDb(Map<String, List<Map<String, String>>> dataMap) {
+            // -----------------第四部分校验(建设工程规划许可)环节数据开始-------------------------------
+            //todo  需要校验 (证书编号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
 
-        List<Map<String, String>> xmList = dataMap.get("项目信息");
-        List<Map<String, String>> tdgyList = dataMap.get("土地供应");
-        List<Map<String, String>> jdList = dataMap.get("阶段");
 
-        int i = 0;
-
-        for (Map<String, String> xm : xmList) {
-            ProjectVo projectVo = new ProjectVo();
-            String projectType = xm.get("项目类型(必填)");
-            if (projectType.equalsIgnoreCase("单独选址")) {
-                projectVo.setProjectType(1);
-            } else if (projectType.equalsIgnoreCase("批次报批")) {
-                projectVo.setProjectType(2);
-            } else {
-                log.error("项目类型不合法,项目类型只能是单独选址或者批次报批{}", projectType);
-                continue;
-            }
 
-            String projectName = xm.get("项目名称");
-            if (StringUtils.isBlank(projectName)) {
-                projectName = "xxxxx" + System.currentTimeMillis();
-                log.warn("项目名称为空,默认设置为{}", projectName);
-            }
-            projectVo.setName(projectName);
+            // -----------------第五部分校验(土地核验与规划核实)环节数据开始-------------------------------
+            //todo  需要校验 (合格证号,发证日期) 字段不能为空,并且日期满足(2019年9月4日) 格式
 
-            String code = xm.get("项目代码");
-            projectVo.setCode(code);
 
-            String company = xm.get("建设单位");
-            projectVo.setCompany(company);
-            projectVo.setOnChainNum(0);
+            // -----------------第六部分校验(国有建设用地使用权及房屋所有权首次登记)环节数据开始-------------------------------
+            //todo  需要校验 (业务号) 字段不能为空
 
-            String projectId = projectService.add(projectVo);
 
-            // -----------------第一部分增加项目结束-------------------------------
 
-            TdgyVo tdgyVo = new TdgyVo();
-            tdgyVo.setProjectId(projectId);
+            // -----------------第六部分校验(用地报批)环节数据开始-------------------------------
+            //todo  需要校验 (批复文号,批复日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
 
-            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));
+            // -----------------第七部分校验(用地预审与选址)环节数据开始-------------------------------
+            //todo  需要校验 (证书文号,发证日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
 
-            String gdUnit = tdgyExcel.get("面积单位");
-            if (StringUtils.isBlank(gdUnit)) {
-                log.warn("供地面积为空,默认设置为0");
-                gdUnit = "";
-            }
-            tdgyVo.setGdUnit(gdUnit);
+            // -----------------第七部分校验(规划条件与用地红线出具)环节数据开始-------------------------------
+            //todo  需要校验 (出具编号,出具日期)字段不能为空  ,并且日期满足(2019年9月4日) 格式
 
-            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("划拨决定书/出让合同日期");
-            tdgyVo.setHbcrhtDate(hbcrhtDate);
-            String id = tdgyService.add(tdgyVo);
 
-            //附件材料处理  -- 数据治理文件名
-            Map<String, String> jdMap = jdList.get(i);
-            String projectFileName = jdMap.get("数据治理文件名");
-            String nodeFileName = "03土地供应阶段";
-            dealCurrentNodeAttachment(projectId, id, projectFileName, nodeFileName);
 
 
-            //矢量数据处理  -- 数据治理文件名
-            String dzjgh = jdMap.get("划拨决定书/出让合同电子监管号");
-            dealCurrentNodeGeom(dzjgh, id);
-            // -----------------第二部分增加项目关联的(土地供应)环节结束-------------------------------
 
             i++;
             if (i > 2) {
@@ -633,6 +884,7 @@ public class DealExcelServiceImpl {
 
     /**
      * 把FileName 文件移动到targetDirectoryPath目录下,并且返回移动后的全路径,前提是sourceFilePath目录下存在FileName文件
+     *
      * @param sourceFilePath
      * @param targetDirectoryPath
      * @param FileName
@@ -648,9 +900,9 @@ public class DealExcelServiceImpl {
                 targetDir.mkdirs();
             }
 
-            if(sourceDir.isDirectory()){
+            if (sourceDir.isDirectory()) {
                 FileUtils.copyDirectoryToDirectory(sourceDir, targetDir);
-            }else {
+            } else {
                 FileUtils.copyFileToDirectory(sourceDir, targetDir);
             }
             fullTargetFilePath = Paths.get(targetDirectoryPath, FileName).toString();
@@ -686,7 +938,7 @@ public class DealExcelServiceImpl {
      */
     public static String writeToLog(String fileName, String msg) {
         // 转换为节点
-        String filePath = "D:\\workspace\\one-code-manage\\node_modules\\excel_deom\\" + fileName;
+        String filePath = Constant.IMPORT_EXCEL_DATA_FILE_PATH + "\\log\\" + fileName;
         //todo 完善当前方法,功能:1.将msg写入到filePath指定的文件中;2.如果文件不存在则创建;3.每次写入都追加到文件末尾;4.写入完成后返回写入结果(成功/失败)
         // 文件就是一个文本文件,每次写入一行日志,格式为:时间戳 + msg
         try {
@@ -780,4 +1032,18 @@ public class DealExcelServiceImpl {
 //
 
 
+    /**
+     * 检查List的Map中所有字段是否为空
+     */
+    /**
+     * 检查List的Map中所有字段是否为空
+     */
+    private boolean isAllFieldsIsEmpty(List<Map<String, String>> dataList) {
+        //todo 这里实现检查List的Map中所有<...
+        // I'll just use the exact text I know was there.
+        // Wait, I need to be careful. I'll read the file again to find the start of the method.
+        return true;
+    }
+
+
 }