Эх сурвалжийг харах

Merge branch 'f-xiaogu' into dev

gushoubang 8 сар өмнө
parent
commit
99263d0afb

+ 116 - 48
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/ReportServiceImpl.java

@@ -25,6 +25,7 @@ import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.system.api.SpatialService;
 import com.onemap.system.api.domain.WktsVo;
 import org.apache.commons.io.FileUtils;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.util.Units;
 import org.apache.poi.xwpf.usermodel.*;
 import org.springframework.beans.factory.annotation.Value;
@@ -174,7 +175,7 @@ public class ReportServiceImpl implements IReportService {
             // 获取最后一级节点与根节点的对应关系
             Map<String, FzxzFactorDTO> rootMap = FzxzFactorDTO.getLastLevelToRootMapping(fzxzFactorDTOS);
             // 因子按照大类区分
-            Map<String, List<FactorUseDTO>> factorImageMap = new HashMap<>();
+            Map<String, List<FactorUseDTO>> factorTypeMap = new HashMap<>();
 
             // 查询选址因子,并且转换为List<Map> 因子条件(包含:C、不包含:N、分析:A)
             QueryWrapper<FactorUseDTO> wrapper = new QueryWrapper<>();
@@ -196,59 +197,59 @@ public class ReportServiceImpl implements IReportService {
 
                 // 添加因子图片
                 FzxzFactorDTO factorRoot = rootMap.get(factorUseDTO.getFactorId());
-                if (factorImageMap.containsKey(factorRoot.getId())) {
-                    factorImageMap.get(factorRoot.getId()).add(factorUseDTO);
+                if (factorTypeMap.containsKey(factorRoot.getId())) {
+                    factorTypeMap.get(factorRoot.getId()).add(factorUseDTO);
                 } else {
                     List<FactorUseDTO> factorUseDTOS = new ArrayList<>();
                     factorUseDTOS.add(factorUseDTO);
-                    factorImageMap.put(factorRoot.getId(), factorUseDTOS);
+                    factorTypeMap.put(factorRoot.getId(), factorUseDTOS);
                 }
             }
             NpoiHelper.setComTable(document, tabYzTitles, dataTablelist, "表1:选址影响因子", pos++);
 
-            // 生成因子图片
-            for (FzxzFactorDTO rootFactor : rootFactors) {
-                if (factorImageMap.containsKey(rootFactor.getId())) {
-                    List<FactorUseDTO> factorUseDTOS = factorImageMap.get(rootFactor.getId());
-                    List<WktsVo.WktInfo> wktInfos = new ArrayList<>();
-                    for (FactorUseDTO factorUseDTO : factorUseDTOS) {
-                        if (factorUseDTO.getFactorName().equals("坡度") || factorUseDTO.getFactorName().equals("高程"))
-                            continue;
-                        String ewkt = getFactorWkt(geomRes.getGeom(), factorUseDTO.getFactorBsm());
-
-                        Random random = new Random();
-                        int rgb = random.nextInt(0xFFFFFF + 1);
-                        String color = String.format("#%06X", rgb);
-
-
-                        WktsVo.WktInfo wktInfo = new WktsVo.WktInfo();
-                        wktInfo.setWkt(ewkt);
-                        wktInfo.setBorderColor(color);
-                        wktInfo.setBorderColor(color);
-
-                        wktInfos.add(wktInfo);
-                    }
-                    if (wktInfos.size() == 0) continue;
-
-                    String imagePath = reportImg(wktInfos);
-                    if (imagePath.equals("")) continue;
-                    // 获取插入图片
-                    NpoiHelper.content(document, rootFactor.getName(), pos++, ParagraphAlignment.CENTER);
-                    ReportImage reportImage = getPathImage(imagePath, 300);
-
-                    XWPFParagraph imageParagraph = document.createParagraph();
-                    imageParagraph.setAlignment(ParagraphAlignment.CENTER); // Center align the image
-                    XWPFRun imageRun = imageParagraph.createRun();
-                    imageRun.addPicture(reportImage.getInputStream(), XWPFDocument.PICTURE_TYPE_PNG, null, Units.toEMU(reportImage.getUseWidth()), Units.toEMU(reportImage.getUseHeight()));
-                    pos++;
-                }
-            }
-
-            // 添加分页
-            XWPFParagraph pageBreakParagraph0 = document.createParagraph();
-            XWPFRun pageBreakRun0 = pageBreakParagraph0.createRun();
-            pageBreakRun0.addBreak(BreakType.PAGE);
-            pos++;
+            // // 生成因子图片
+            // for (FzxzFactorDTO rootFactor : rootFactors) {
+            //     if (factorImageMap.containsKey(rootFactor.getId())) {
+            //         List<FactorUseDTO> factorUseDTOS = factorImageMap.get(rootFactor.getId());
+            //         List<WktsVo.WktInfo> wktInfos = new ArrayList<>();
+            //         for (FactorUseDTO factorUseDTO : factorUseDTOS) {
+            //             if (factorUseDTO.getFactorName().equals("坡度") || factorUseDTO.getFactorName().equals("高程"))
+            //                 continue;
+            //             String ewkt = getFactorWkt(geomRes.getGeom(), factorUseDTO.getFactorBsm());
+            //
+            //             Random random = new Random();
+            //             int rgb = random.nextInt(0xFFFFFF + 1);
+            //             String color = String.format("#%06X", rgb);
+            //
+            //
+            //             WktsVo.WktInfo wktInfo = new WktsVo.WktInfo();
+            //             wktInfo.setWkt(ewkt);
+            //             wktInfo.setBorderColor(color);
+            //             wktInfo.setBorderColor(color);
+            //
+            //             wktInfos.add(wktInfo);
+            //         }
+            //         if (wktInfos.size() == 0) continue;
+            //
+            //         String imagePath = reportImg(wktInfos);
+            //         if (imagePath.equals("")) continue;
+            //         // 获取插入图片
+            //         NpoiHelper.content(document, rootFactor.getName(), pos++, ParagraphAlignment.CENTER);
+            //         ReportImage reportImage = getPathImage(imagePath, 400);
+            //
+            //         XWPFParagraph imageParagraph = document.createParagraph();
+            //         imageParagraph.setAlignment(ParagraphAlignment.CENTER); // Center align the image
+            //         XWPFRun imageRun = imageParagraph.createRun();
+            //         imageRun.addPicture(reportImage.getInputStream(), XWPFDocument.PICTURE_TYPE_PNG, null, Units.toEMU(reportImage.getUseWidth()), Units.toEMU(reportImage.getUseHeight()));
+            //         pos++;
+            //     }
+            // }
+            //
+            // // 添加分页
+            // XWPFParagraph pageBreakParagraph0 = document.createParagraph();
+            // XWPFRun pageBreakRun0 = pageBreakParagraph0.createRun();
+            // pageBreakRun0.addBreak(BreakType.PAGE);
+            // pos++;
 
             // TODO 二、选址范围分析
             NpoiHelper.catalog(document, "二、选址范围分析", pos++);
@@ -257,7 +258,7 @@ public class ReportServiceImpl implements IReportService {
             NpoiHelper.content(document, fwfx, pos++);
 
             // 获取插入图片
-            ReportImage reportImage = getWktImage(geomRes.getGeom(), 300);
+            ReportImage reportImage = getWktImage(geomRes.getGeom(), 400);
 
             XWPFParagraph imageParagraph = document.createParagraph();
             imageParagraph.setAlignment(ParagraphAlignment.CENTER); // Center align the image
@@ -348,7 +349,12 @@ public class ReportServiceImpl implements IReportService {
                 paraImag.setAlignment(ParagraphAlignment.CENTER); // 居中对齐
                 XWPFRun run = paraImag.createRun();
                 run.addPicture(imageTable.getInputStream(), XWPFDocument.PICTURE_TYPE_PNG, null, Units.toEMU(imageTable.getUseWidth()), Units.toEMU(imageTable.getUseHeight()));
+
+                // 插入因子
+                insertFactorImage(geomRes.getGeom(), geomWkt, rootFactors, factorTypeMap, document, pos);
             }
+
+
             File fileDoc = new File(reportPath);
             if (fileDoc.exists()) {
                 FileUtils.forceDelete(fileDoc);
@@ -382,6 +388,68 @@ public class ReportServiceImpl implements IReportService {
         System.out.println(outfilepath);
     }
 
+    /**
+     * 插入因子图片
+     */
+    private void insertFactorImage(String scopeEwkt, String landEwkt, List<FzxzFactorDTO> rootFactors, Map<String, List<FactorUseDTO>> factorTypeMap, XWPFDocument document, int pos) throws IOException, InvalidFormatException {
+        // 生成因子图片
+        for (FzxzFactorDTO rootFactor : rootFactors) {
+            if (factorTypeMap.containsKey(rootFactor.getId())) {
+                List<FactorUseDTO> factorUseDTOS = factorTypeMap.get(rootFactor.getId());
+                List<WktsVo.WktInfo> wktInfos = new ArrayList<>();
+
+                // 选址范围
+                WktsVo.WktInfo wktInfo0 = new WktsVo.WktInfo();
+                wktInfo0.setWkt(scopeEwkt);
+                wktInfo0.setBorderColor("#FF0000");
+                wktInfos.add(wktInfo0);
+
+                // 地块范围
+                WktsVo.WktInfo wktInfo1 = new WktsVo.WktInfo();
+                wktInfo1.setWkt(landEwkt);
+                wktInfo1.setBorderColor("#FF0000");
+                wktInfos.add(wktInfo1);
+
+                for (FactorUseDTO factorUseDTO : factorUseDTOS) {
+                    if (factorUseDTO.getFactorName().equals("坡度") || factorUseDTO.getFactorName().equals("高程"))
+                        continue;
+                    String ewkt = getFactorWkt(scopeEwkt, factorUseDTO.getFactorBsm());
+
+                    Random random = new Random();
+                    int rgb = random.nextInt(0xFFFFFF + 1);
+                    String color = String.format("#%06X", rgb);
+
+
+                    WktsVo.WktInfo wktInfo = new WktsVo.WktInfo();
+                    wktInfo.setWkt(ewkt);
+                    wktInfo.setBorderColor(color);
+                    wktInfo.setFillColor(color);
+
+                    wktInfos.add(wktInfo);
+                }
+                if (wktInfos.size() == 2) continue;
+
+                String imagePath = reportImg(wktInfos);
+                if (imagePath.equals("")) continue;
+                // 获取插入图片
+                NpoiHelper.content(document, rootFactor.getName(), pos++, ParagraphAlignment.CENTER);
+                ReportImage reportImage = getPathImage(imagePath, 400);
+
+                XWPFParagraph imageParagraph = document.createParagraph();
+                imageParagraph.setAlignment(ParagraphAlignment.CENTER); // Center align the image
+                XWPFRun imageRun = imageParagraph.createRun();
+                imageRun.addPicture(reportImage.getInputStream(), XWPFDocument.PICTURE_TYPE_PNG, null, Units.toEMU(reportImage.getUseWidth()), Units.toEMU(reportImage.getUseHeight()));
+                pos++;
+            }
+        }
+
+        // // 添加分页
+        // XWPFParagraph pageBreakParagraph0 = document.createParagraph();
+        // XWPFRun pageBreakRun0 = pageBreakParagraph0.createRun();
+        // pageBreakRun0.addBreak(BreakType.PAGE);
+        // pos++;
+    }
+
     /**
      * 获取因子内容
      *