|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|