1
0
Просмотр исходного кода

关于excel相关类及处理流程

chenendian 9 часов назад
Родитель
Сommit
7e32099efb

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

@@ -1,5 +1,6 @@
 package com.siwei.apply.controller.third;
 
+import com.siwei.apply.service.third.impl.DealExcelServiceImpl;
 import com.siwei.common.core.domain.R;
 import com.siwei.common.core.web.controller.BaseController;
 import lombok.RequiredArgsConstructor;
@@ -9,6 +10,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.File;
@@ -28,22 +30,30 @@ public class DealExcelController extends BaseController {
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
 
+    @Autowired
+    DealExcelServiceImpl  dealExcelService;
+
+
+
     /**
      * 处理excel数据(按合并列头分组读取)
      */
-    @GetMapping("excelDeal_v2")
-    public R<Map<String, List<Map<String,String>>>> excelDeal_v2() {
+    @GetMapping("excelDeal_v2/{fileName}")
+    public R<Map<String, List<Map<String,String>>>> excelDeal_v2(@PathVariable String fileName) {
         try {
-            String uploadFile = "D:\\workspace\\one-code-manage\\node_modules\\excel_deom\\project_info_v4.xlsx";
+            String uploadFile = "D:\\workspace\\one-code-manage\\node_modules\\excel_deom\\"+fileName;
             Path filePath = Paths.get(uploadFile);
             File file = filePath.toFile();
             Map<String, List<Map<String, String>>> dataMap = readExcelWithMergedHeaders(file);
-            for (Map.Entry<String, List<Map<String, String>>> entry : dataMap.entrySet()) {
-                logger.info("分类 [{}] 共 {} 条数据", entry.getKey(), entry.getValue().size());
-                for (int i = 0; i < entry.getValue().size(); i++) {
-                    logger.info("  第{}行: {}", i + 1, entry.getValue().get(i));
-                }
-            }
+            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());
+//                for (int i = 0; i < entry.getValue().size(); i++) {
+//                    logger.info("  第{}行: {}", i + 1, entry.getValue().get(i));
+//                }
+//            }
             return R.ok(dataMap);
         } catch (Exception e) {
             return R.fail(e.getMessage());

+ 178 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/DealExcelServiceImpl.java

@@ -0,0 +1,178 @@
+package com.siwei.apply.service.third.impl;
+
+import com.siwei.apply.domain.Project;
+import com.siwei.apply.domain.ProjectWorkflow;
+import com.siwei.apply.domain.vo.ProjectVo;
+import com.siwei.apply.domain.vo.TdgyVo;
+import com.siwei.apply.enums.AloneWorkFlowEnum;
+import com.siwei.apply.mapper.ProjectWorkflowMapper;
+import com.siwei.apply.service.NodeLandService;
+import com.siwei.apply.service.ProjectService;
+import com.siwei.apply.service.TdgyService;
+import com.siwei.apply.utils.HttpClientUtil;
+import com.siwei.common.core.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * excel 导入数据处理类
+ */
+@Slf4j
+@Service
+public class DealExcelServiceImpl{
+
+    @Autowired
+    private ProjectService projectService;
+
+    @Autowired
+    private ProjectWorkflowMapper projectWorkflowMapper;
+
+    @Autowired
+    private NodeLandService nodeLandService;
+
+
+    @Autowired
+    private TdgyService tdgyService;
+
+
+
+
+    /**
+     * 添加excel数据到数据库
+     * @param dataMap
+     * @return
+     */
+    public String addExcelDataToDb(Map<String, List<Map<String, String>>> dataMap) {
+        List<Map<String, String>> xmList = Collections.singletonList((Map<String, String>) dataMap.get("项目信息"));
+        List<Map<String, String>> tdgyList = Collections.singletonList((Map<String, String>) 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);
+
+           // -----------------第一部分增加项目结束-------------------------------
+
+
+            TdgyVo tdgyVo = new TdgyVo();
+            Map<String, String>  tdgyExcel =  tdgyList.get(i);
+            tdgyExcel.get("项目ID");
+
+            // 土地受让人	土地用途(源版)	土地用途	建设位置	供地面积(平方米)(源数据)	供地面积	面积单位	供地方式	是否完成征转
+            // 用地划拨/出让方案批复文号	土地权属来源	"划拨决定书/出让合同编号
+            // (必填)"	划拨决定书/出让合同日期	供地单位
+
+
+            String id = tdgyService.add(tdgyVo);
+
+
+
+            i++;
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        return null;
+    }
+
+
+
+
+
+
+
+
+
+
+
+    public Map<String, String> getImmobileCode(String projectId) {
+        Map<String, String> retMap = new LinkedHashMap<>();
+
+        Project project = projectService.get(projectId);
+        String firstPlotCode = project.getFirstPlotCode();
+        String secondPlotCode = project.getSecondPlotCode();
+        String tableName = AloneWorkFlowEnum.NODE_2.getTableName(); // 土地供应图斑
+
+        List<ProjectWorkflow> projectWorkflows = projectWorkflowMapper.selectByProjectIdAndNodeTableName(projectId, tableName);
+        if (CollectionUtils.isNotEmpty(projectWorkflows)) {
+            String nodeId = projectWorkflows.get(0).getNodeId();
+            Map<String, Object> paramMap = new LinkedHashMap<>();
+            paramMap.put("batchId", projectId);
+            paramMap.put("plotCode", firstPlotCode + secondPlotCode);
+            paramMap.put("geoms", "");
+            Map<String, Object> geomInfo = nodeLandService.getGeomByNodeId(nodeId);
+            if (geomInfo.get("geoms") instanceof List) {
+                List<String> geoms = (List<String>) geomInfo.get("geoms");
+                paramMap.put("geoms", geoms);
+            }
+            // todo 这里调用 httpClient 进行远程调用
+            String result = HttpClientUtil.doGet("https://www.baidu.com", paramMap);
+            // log.error("解析节点附件json失败",e);
+            log.info("获取解析数据为:{}", result);
+            // 构造结果进行入库
+        }
+        retMap.put("code", "12345678");
+        retMap.put("projectId", projectId);
+        return retMap;
+    }
+
+
+
+
+
+
+
+
+}

+ 4 - 70
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/utils/MdbUtil.java

@@ -357,94 +357,28 @@ public class MdbUtil {
 
 
 
-//    /**
-//     *  判断两个List<Map<String, Object>>中的数据是否完全一致
-//     * (排除map中的geom字段和valid_flag字段的比较,针对其他字段值做比较)
-//     * @param dbDataList  之前图层数据列表 (从数据库查询出来的图层数据列表)
-//     * @param layerDataList 图层数据列表
-//     * @return
-//     */
-//    private boolean validMapSameData(List<Map<String, Object>> dbDataList, List<Map<String, Object>> layerDataList) {
-//
-//
-//
-//        return true;
-//    }
-
-
     /**
-     * 判断两个List<Map<String, Object>>中的数据是否完全一致
+     *  判断两个List<Map<String, Object>>中的key-value数据是否完全一致
      * (排除map中的geom字段和valid_flag字段的比较,针对其他字段值做比较)
-     * @param dbDataList    数据库查询出来的图层数据列表
-     * @param layerDataList 前端/图层传入的数据列表
-     * @return 数据完全一致返回true,不一致返回false
+     * @param dbDataList  之前图层数据列表 (从数据库查询出来的图层数据列表)
+     * @param layerDataList 图层数据列表
+     * @return
      */
     private boolean validMapSameData(List<Map<String, Object>> dbDataList, List<Map<String, Object>> layerDataList) {
-        // 1. 先判断集合是否都为null
-        if (dbDataList == null && layerDataList == null) {
-            return true;
-        }
-        // 2. 一个null一个非null → 不相等
-        if (dbDataList == null || layerDataList == null) {
-            return false;
-        }
-        // 3. 数量不一样 → 直接不相等
-        if (dbDataList.size() != layerDataList.size()) {
-            return false;
-        }
 
-        // 4. 逐行对比
-        for (int i = 0; i < dbDataList.size(); i++) {
-            Map<String, Object> dbMap = dbDataList.get(i);
-            Map<String, Object> layerMap = layerDataList.get(i);
 
-            // 逐行内部对比(排除geom、valid_flag)
-            if (!compareSingleMapIgnoreKeys(dbMap, layerMap, "geom", "valid_flag")) {
-                return false;
-            }
-        }
 
-        // 所有行都一致
         return true;
     }
 
 
 
-
     /**
      * 对比两个Map,忽略指定的key,其他所有key必须值完全一致
      */
     private boolean compareSingleMapIgnoreKeys(Map<String, Object> map1,
                                                Map<String, Object> map2,
                                                String... ignoreKeys) {
-        if (map1 == null && map2 == null) return true;
-        if (map1 == null || map2 == null) return false;
-
-        Set<String> ignoreSet = new HashSet<>(Arrays.asList(ignoreKeys));
-
-        // 只对比需要比较的key
-        Set<String> allKeys = new HashSet<>();
-        allKeys.addAll(map1.keySet());
-        allKeys.addAll(map2.keySet());
-        allKeys.removeAll(ignoreSet);
-
-        for (String key : allKeys) {
-            Object v1 = map1.get(key);
-            Object v2 = map2.get(key);
-
-            // 处理 null 情况
-            if (v1 == null && v2 == null) {
-                continue;
-            }
-            if (v1 == null || v2 == null) {
-                return false;
-            }
-
-            // 正常对比(支持日期、数字、字符串等)
-            if (!v1.equals(v2)) {
-                return false;
-            }
-        }
 
         return true;
     }