gushoubang 10 сар өмнө
parent
commit
eb8b74a666

+ 11 - 51
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/FzxzXzyzDTO.java

@@ -1,62 +1,22 @@
 package com.onemap.analyse.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
 
-//辅助选址选址因子,任务中使用
+// 辅助选址选址因子,任务中使用
 @TableName("t_fzss_fzxz_xzyz")
+@Data
 public class FzxzXzyzDTO {
+    // 标识码
     private String bsm;
+    // 选址任务标识码
     private String rwbsm;
+    // 因子标识码
     private String yzbsm;
+    // 影响因子名称
     private String yxyzmc;
-    private String yztj;
-    private String yxz;
-
-    public String getBsm() {
-        return bsm;
-    }
-
-    public void setBsm(String bsm) {
-        this.bsm = bsm;
-    }
-
-    public String getRwbsm() {
-        return rwbsm;
-    }
-
-    public void setRwbsm(String rwbsm) {
-        this.rwbsm = rwbsm;
-    }
-
-    public String getYzbsm() {
-        return yzbsm;
-    }
-
-    public void setYzbsm(String yzbsm) {
-        this.yzbsm = yzbsm;
-    }
-
-    public String getYxyzmc() {
-        return yxyzmc;
-    }
-
-    public void setYxyzmc(String yxyzmc) {
-        this.yxyzmc = yxyzmc;
-    }
-
-    public String getYztj() {
-        return yztj;
-    }
-
-    public void setYztj(String yztj) {
-        this.yztj = yztj;
-    }
-
-    public String getYxz() {
-        return yxz;
-    }
-
-    public void setYxz(String yxz) {
-        this.yxz = yxz;
-    }
+    // 因子条件,包含:contain,n_contain,相交:identity,n_identity
+    private String spatial_type;
+    // 影响值
+    private Float yxz;
 }

+ 1 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/query/GhdkaFilter.java

@@ -11,5 +11,5 @@ import java.util.List;
 @Data
 public class GhdkaFilter {
     List<Integer> idList;
-    List<FzxzXzyzDTO> xzyxList;
+    FzxzXzyzDTO fzxzXzyzDTO;
 }

+ 8 - 2
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/FzssServiceImpl.java

@@ -151,8 +151,14 @@ public class FzssServiceImpl implements IFzssService {
         // 2.条件筛选
         GhdkaFilter ghdkaFilter = new GhdkaFilter();
         ghdkaFilter.setIdList(ids);
-        ghdkaFilter.setXzyxList(fzxzCalc.getXzyxList());
-        ids = ghdkaMapper.getIdByFilter(ghdkaFilter);
+        for (FzxzXzyzDTO fzxzXzyzDTO : fzxzCalc.getXzyxList()) {
+            ghdkaFilter.setFzxzXzyzDTO(fzxzXzyzDTO);
+            ids = ghdkaMapper.getIdByFilter(ghdkaFilter);
+            if (ids.size() == 0) {
+                return RequestResult.error("条件筛选未找到符合条件数据!", null);
+            }
+            ghdkaFilter.setIdList(ids);
+        }
         return RequestResult.success(ids);
     }
 

+ 360 - 360
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/task/FzxzSchedule.java

@@ -204,352 +204,352 @@ public class FzxzSchedule {
      * 选址报告
      */
     private void createReport(FzxzEntityDTO res, String reportPath, List<String> xzbsmList) {
-        List<String> imgList = ReportImg(res, xzbsmList);
-        //创建document文档对象对象实例
-        XWPFDocument document = null;
-        OutputStream outputStream = null;//把doc输出到输出流
-        try {
-            document = new XWPFDocument();
-            int pos = 0;
-            //文本标题
-            NpoiHelper.title(document, res.getXmmc() + "选址报告", pos++);
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
-            NpoiHelper.Option optionCENTER = new NpoiHelper.Option();
-            optionCENTER.setAlign(ParagraphAlignment.CENTER);
-            document.setParagraph(NpoiHelper.newParagraph(document, sdf.format(new Date()), optionCENTER), pos++);
-            NpoiHelper.catalog(document, "一、项目选址信息", pos++);
-            String ydmj = res.getYdmjbegin() + " - " + res.getYdmjend();
-            if (StringUtils.isEmpty(res.getYdmjbegin()) || Double.parseDouble(res.getYdmjbegin()) == 0)
-                ydmj = "≤" + res.getYdmjend();
-            else if (StringUtils.isEmpty(res.getYdmjend()) || Double.parseDouble(res.getYdmjend()) == 0)
-                ydmj = "≥" + res.getYdmjbegin();
-            List<String> listTemp = new ArrayList<String>();
-            listTemp.add("\t项目名称:" + res.getXmmc());
-            listTemp.add("\t建设单位:" + res.getJsdw());
-            listTemp.add("\t用地面积:" + ydmj + "平方米");
-            listTemp.add("\t用地性质:" + res.getYdmc());
-            listTemp.add("\t影响因子:");
-            NpoiHelper.content(document, listTemp, pos++);
-            List tabYzTitles = new ArrayList<NpoiHelper.TableTitle>();
-            NpoiHelper.TableTitle tableTitle = new NpoiHelper.TableTitle();
-            tableTitle.setKey("YXYZMC");
-            tableTitle.setName("因子名称");
-            tableTitle.setWidth(2880);
-            tabYzTitles.add(tableTitle);
-            tableTitle = new NpoiHelper.TableTitle();
-            tableTitle.setKey("YZTJ_TEXT");
-            tableTitle.setName("影响条件");
-            tableTitle.setAlign(ParagraphAlignment.CENTER);
-            tableTitle.setWidth(2880);
-            tabYzTitles.add(tableTitle);
-            tableTitle = new NpoiHelper.TableTitle();
-            tableTitle.setKey("YXZ");
-            tableTitle.setName("约束范围值(M)");
-            tableTitle.setAlign(ParagraphAlignment.CENTER);
-            tableTitle.setWidth(2880);
-            tabYzTitles.add(tableTitle);
-            //查询选址因子,并且转换为List<Map> 因子条件(包含:C、不包含:N、分析:A)
-            QueryWrapper<FzxzXzyzDTO> wrapper = new QueryWrapper<FzxzXzyzDTO>();
-            wrapper.eq("rwbsm", res.getBsm());
-            List<FzxzXzyzDTO> fzxzXzyzDTOList = fzxzXzyzMapper.selectList(wrapper);
-            List<Map<String, Object>> dataTablelist = new ArrayList<>();
-            for (int i = 0; i < fzxzXzyzDTOList.size(); i++) {
-                Map<String, Object> map = new HashMap<>();
-                FzxzXzyzDTO fzxzXzyzDTO = fzxzXzyzDTOList.get(i);
-                map.put("YXYZMC", fzxzXzyzDTO.getYxyzmc());
-                String yztj = "";
-                if (fzxzXzyzDTO.getYztj() != null) {
-                    if ("C".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "包含";
-                    }
-                    if ("N".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "不包含";
-                    }
-                    if ("A".equals(fzxzXzyzDTO.getYztj().toUpperCase()) || "F".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "分析";
-                    }
-                }
-
-                map.put("YZTJ_TEXT", yztj);
-                String yxz = "";
-                if (StringUtils.isNotEmpty(fzxzXzyzDTO.getYxz())) {
-                    yxz = fzxzXzyzDTO.getYxz();
-                }
-                map.put("YXZ", yxz);
-                dataTablelist.add(map);
-            }
-            XWPFTable tableYz = NpoiHelper.setComTable(document, tabYzTitles, dataTablelist, "表1:选址影响因子", pos++);
-            NpoiHelper.catalog(document, "二、选址范围分析", pos++);
-            //查询辅助选址分析图斑
-            QueryWrapper<FzxzTbEntityDTO> wrapperTb = new QueryWrapper<FzxzTbEntityDTO>();
-            wrapperTb.eq("rwbsm", res.getBsm());
-            wrapperTb.groupBy("objectid", "rwbsm", "ydyhfldm", "ydyhflmc", "frequency", "sum_mj");
-            List<FzxzTbEntityDTO> fzxzTbEntityDTOList = fzxzTbMapper.selectList(wrapperTb);
-            //计算面积总和
-            double sumcount = 0;
-            for (int i = 0; i < fzxzTbEntityDTOList.size(); i++) {
-                sumcount = sumcount + fzxzTbEntityDTOList.get(i).getSumMj();
-            }
-
-            List<FzxzTbEntityDTO> list = fzxzTbEntityDTOList.stream().sorted(
-                    Comparator.comparing(FzxzTbEntityDTO::getSumMj).reversed()
-            ).collect(Collectors.toList());
-            String fwfx = "\t根据指定选址分析得出,所选范围共" + Math.round(sumcount) + "平方米,其中";
-            List<Map<String, Object>> fztable = new ArrayList<>();
-            //生成地类分析统计表
-            for (int i = 0; i < list.size(); i++) {
-                FzxzTbEntityDTO item = list.get(i);
-                String zb = String.format("%.1f", item.getSumMj() / sumcount * 100);
-                if (i < 5) {
-                    //面积前五的占比地类计算
-                    fwfx += item.getYdyhflmc()
-                            + Math.round(item.getSumMj()) + "平方米,占比" + zb + "%;";
-                }
-                //List<FzxzTbEntityDTO>转List<Map<String, Object>> 地类编码	地类名称	面积(平方千米)	占比(%)
-                Map map = new HashMap();
-                map.put("ZB", zb);
-                map.put("YDYHFLDM", item.getYdyhfldm());
-                map.put("YDYHFLMC", item.getYdyhflmc());
-                map.put("SUM_MJ", Math.round(item.getSumMj()));
-                fztable.add(map);
-            }
-            fwfx = fwfx.substring(0, fwfx.length() - 1) + "。详情如下:";
-            NpoiHelper.content(document, fwfx, pos++);
-            //地类编码	地类名称	面积(平方千米)	占比(%)
-            List<NpoiHelper.TableTitle> tabYztbTitles = new ArrayList();
-            NpoiHelper.TableTitle tableTitleTb = new NpoiHelper.TableTitle();
-            tableTitleTb.setKey("YDYHFLDM");
-            tableTitleTb.setName("地类编码");
-            tableTitleTb.setAlign(ParagraphAlignment.CENTER);
-            tableTitleTb.setWidth(2010);
-            tabYztbTitles.add(tableTitleTb);
-            tableTitleTb = new NpoiHelper.TableTitle();
-            tableTitleTb.setKey("YDYHFLMC");
-            tableTitleTb.setName("地类名称");
-            tableTitleTb.setWidth(2910);
-            tabYztbTitles.add(tableTitleTb);
-            tableTitleTb = new NpoiHelper.TableTitle();
-            tableTitleTb.setKey("SUM_MJ");
-            tableTitleTb.setName("面积(平方千米)");
-            tableTitleTb.setAlign(ParagraphAlignment.CENTER);
-            tableTitleTb.setWidth(1870);
-            tabYztbTitles.add(tableTitleTb);
-            tableTitleTb = new NpoiHelper.TableTitle();
-            tableTitleTb.setKey("ZB");
-            tableTitleTb.setName("占比(%)");
-            tableTitleTb.setAlign(ParagraphAlignment.CENTER);
-            tableTitleTb.setWidth(1700);
-            tabYztbTitles.add(tableTitleTb);
-            XWPFTable tableYztb = NpoiHelper.setComTable(document, tabYztbTitles, fztable, "表2:地类分析统计表", pos++);
-            //查询结果GIS FzxzJgGisDTO
-            QueryWrapper<FzxzJgGisDTO> giswrapper = new QueryWrapper<FzxzJgGisDTO>();
-            giswrapper.eq("rwbsm", res.getBsm());
-            //筛选方案,根据传参或者预选方案
-//            giswrapper.ne("yxfa", "0");
-            if (xzbsmList != null) {
-                giswrapper.in("bsm", xzbsmList);
-            }
-            List<FzxzJgGisDTO> fzxzJgGisDTOList = fzxzJgGISMapper.selectList(giswrapper);
-            NpoiHelper.catalog(document, "三、选址分析", pos++);
-            String ydmc = res.getYdmc();
-            if(!StringUtils.isEmpty(ydmc)){
-                if (ydmc.lastIndexOf("用地") == ydmc.length() - 2) {
-                    ydmc = res.getYdmc().substring(0, ydmc.length() - 2);
-                }
-                NpoiHelper.content(document, "\t按照项目选址要求和影响因子,经对所选范围内的所有"
-                        + ydmc + "用地进行分析,筛选出符合要求的方案共" + fzxzJgGisDTOList.size() + "个。", pos++);
-            }else{
-                NpoiHelper.content(document, "\t按照项目选址要求和影响因子,经对所选范围内的所有用地进行分析,筛选出符合要求的方案共" + fzxzJgGisDTOList.size() + "个。", pos++);
-            }
-
-            int index = 1;
-            NpoiHelper.Option optionIsBold = new NpoiHelper.Option();
-            optionIsBold.setBold(true);
-            for (int i = 0; i < fzxzJgGisDTOList.size(); i++) {
-                FzxzJgGisDTO item = fzxzJgGisDTOList.get(i);
-                document.setParagraph(NpoiHelper.newParagraph(document, index + "、方案" + NumberUtil.int2chineseNum(index)
-                        , optionIsBold), pos++);
-                XWPFTable table = document.createTable(7, 4);
-                table.setWidth(9000);//总宽度
-                for (int k = 0; k < 4; k++) {
-                    XWPFTableCell cell = table.getRow(0).getCell(k);
-                    CTTcPr ctTcPr = cell.getCTTc().isSetTcPr() ? cell.getCTTc().getTcPr() : cell.getCTTc().addNewTcPr();
-                    CTTblWidth ctTblWidth = ctTcPr.addNewTcW();
-                    ctTblWidth.setW(BigInteger.valueOf(2250));
-                    ctTblWidth.setType(STTblWidth.DXA);
-                }
-                //Table 表格第一行
-                table.getRow(0).getCell(0).setColor("DBE5F1");
-                NpoiHelper.mergeHorizontal(table, 0, 0, 3);
-                table.getRow(0).getCell(0).setParagraph(NpoiHelper.setCellText(table, "符合用地情况", optionIsBold));
-                //Table 表格第二行
-                table.getRow(1).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地类编码", optionIsBold));
-                table.getRow(1).getCell(1).setParagraph(NpoiHelper.setCellText(table, item.getDlbm(), null));
-                table.getRow(1).getCell(2).setParagraph(NpoiHelper.setCellText(table, "地类名称", optionIsBold));
-                table.getRow(1).getCell(3).setParagraph(NpoiHelper.setCellText(table, item.getDlmc(), null));
-                //Table 表格第三行
-                table.getRow(2).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地块面积", optionIsBold));
-                table.getRow(2).getCell(1).setParagraph(NpoiHelper.setCellText(table, Math.round(item.getTbmj()) + "平方米", null));
-                table.getRow(2).getCell(2).setParagraph(NpoiHelper.setCellText(table, "土地位置", optionIsBold));
-                table.getRow(2).getCell(3).setParagraph(NpoiHelper.setCellText(table, item.getXzqmc(), null));
-                //Table 表格第四行
-                table.getRow(3).getCell(0).setColor("DBE5F1");
-                NpoiHelper.mergeHorizontal(table, 3, 0, 3);
-                table.getRow(3).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地块位置信息", optionIsBold));
-                //Table 表格第五行 -专题图
-                NpoiHelper.mergeHorizontal(table, 4, 0, 1);
-                NpoiHelper.mergeHorizontal(table, 4, 2, 3);
-                String mapF = "";
-                String mapM = "";
-                if (imgList != null && imgList.size() > 0) {
-                    for (int j = 0; j < imgList.size(); j++) {
-                        String s = imgList.get(j);
-                        if (s.indexOf(item.getBsm() + "_F") >= 0) {
-                            mapF = s;//全局
-                        }
-                        if (s.indexOf(item.getBsm() + "_M") >= 0) {
-                            mapM = s;//局部
-                        }
-                    }
-                }
-                if (StringUtils.isNotEmpty(mapF)) {
-                    FileInputStream fis = null;
-                    try {
-                        fis = new FileInputStream(new File(mapF));
-                        XWPFParagraph paragraph = table.getRow(4).getCell(0).addParagraph();
-                        paragraph.setAlignment(ParagraphAlignment.CENTER);
-                        XWPFRun run = paragraph.createRun();
-                        run.addPicture(
-                                fis,    // 条形码图片的位置
-                                Document.PICTURE_TYPE_JPEG, // 图片类型
-                                item.getBsm() + "_F.jpeg", // 图片名称
-                                2200000, // 图片的长
-                                1700000 // 图片的宽
-                        );
-                        run.addBreak(BreakType.TEXT_WRAPPING);
-                        run.setText("(宏观位置)");
-                    } catch (Exception e) {
-                        System.out.println(e.toString());
-                    } finally {
-                        if (fis != null) {
-                            try {
-                                fis.close();
-                            } catch (IOException e) {
-                                throw e;
-                            }
-                        }
-                    }
-                }
-                if (StringUtils.isNotEmpty(mapM)) {
-                    FileInputStream fis = null;
-                    try {
-                        fis = new FileInputStream(new File(mapM));
-                        XWPFParagraph paragraph = table.getRow(4).getCell(2).addParagraph();
-                        paragraph.setAlignment(ParagraphAlignment.CENTER);
-                        XWPFRun run = paragraph.createRun();
-                        run.addPicture(
-                                fis,    // 条形码图片的位置
-                                Document.PICTURE_TYPE_JPEG, // 图片类型
-                                item.getBsm() + "_M.jpeg", // 图片名称
-                                2200000, // 图片的长
-                                1700000 // 图片的宽
-                        );
-                        run.addBreak(BreakType.TEXT_WRAPPING);
-                        run.setText("(具体位置)");
-                    } catch (Exception e) {
-                        System.out.println(e.toString());
-                        throw e;
-                    } finally {
-                        if (fis != null) {
-                            try {
-                                fis.close();
-                            } catch (IOException e) {
-                                throw e;
-                            }
-                        }
-                    }
-                }
-                //Table 表格第六行
-                table.getRow(5).getCell(0).setColor("DBE5F1");
-                NpoiHelper.mergeHorizontal(table, 5, 0, 3);
-                table.getRow(5).getCell(0).setParagraph(NpoiHelper.setCellText(table, "分析结论", optionIsBold));
-                //Table 表格第七行
-                NpoiHelper.mergeHorizontal(table, 6, 0, 3);
-                XWPFParagraph para6 = table.getRow(6).getCell(0).addParagraph();
-                para6.setAlignment(ParagraphAlignment.LEFT);
-
-                //查询辅助选址因子
-                QueryWrapper<FzxzJgyzDTO> jgyzWrapper = new QueryWrapper<FzxzJgyzDTO>();
-                jgyzWrapper.eq("jbbsm", item.getBsm());
-                jgyzWrapper.ne("yztj", "F");
-                List<FzxzJgyzDTO> jgyzList = fzxzJgyzMapper.selectList(jgyzWrapper);
-                int jgyzid = 1;
-                for (int j = 0; j < jgyzList.size(); j++) {
-                    FzxzJgyzDTO fzxzJgyzDTO = jgyzList.get(j);
-                    XWPFRun run = para6.createRun();
-                    run.setText(jgyzid + "、" + fzxzJgyzDTO.getFxjg());
-                    run.addBreak(BreakType.TEXT_WRAPPING);
-                    jgyzid++;
-                }
-                //查询辅助选址因子
-                jgyzWrapper = new QueryWrapper<FzxzJgyzDTO>();
-                jgyzWrapper.eq("jbbsm", item.getBsm());
-                jgyzWrapper.eq("yztj", "F");
-                jgyzList = fzxzJgyzMapper.selectList(jgyzWrapper);
-
-                for (int j = 0; j < jgyzList.size(); j++) {
-                    FzxzJgyzDTO jgyz = jgyzList.get(j);
-                    XWPFRun run = para6.createRun();
-                    String jg = jgyz.getFxjg();
-                    Double jgDouble = 0.0;
-                    try {
-                        jgDouble = Double.parseDouble(jg);
-                        run.setText(jgyzid + "、压占" + jgyz.getYxyzmc() + "面积" + jg + "平方米");
-                    } catch (Exception e) {
-                        run.setText(jg);
-                    }
-                    run.addBreak(BreakType.TEXT_WRAPPING);
-                    jgyzid++;
-                }
-                index++;
-            }
-            File fileDoc = new File(reportPath);
-            if (fileDoc.exists()) {
-                FileUtils.forceDelete(fileDoc);
-            }
-            //word文件输出流
-            outputStream = new FileOutputStream(reportPath);
-            document.write(outputStream);
-        } catch (Exception e) {
-            e.printStackTrace();
-            //插入任务日志
-            FxrwrzDTO errorDto = new FxrwrzDTO();
-            errorDto.setRwbsm(res.getBsm());
-            errorDto.setRwlx("辅助选址");
-            errorDto.setRzlr("生成选址报告错误:" + e.getMessage());
-            errorDto.setRzsj(new Date());
-            errorDto.setRzlx("error");
-            fxrwrzMapper.insert(errorDto);
-        } finally {
-            if (document != null) {
-                try {
-                    document.close();
-                } catch (Exception ex) {
-                    System.out.println(ex.toString());
-                }
-            }
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        //转PDF
-        String outfilepath = reportPath.replace(".docx", ".pdf");
-        NpoiHelper.doc2pdf(reportPath, outfilepath);
-        System.out.println(outfilepath);
+//         List<String> imgList = ReportImg(res, xzbsmList);
+//         //创建document文档对象对象实例
+//         XWPFDocument document = null;
+//         OutputStream outputStream = null;//把doc输出到输出流
+//         try {
+//             document = new XWPFDocument();
+//             int pos = 0;
+//             //文本标题
+//             NpoiHelper.title(document, res.getXmmc() + "选址报告", pos++);
+//             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
+//             NpoiHelper.Option optionCENTER = new NpoiHelper.Option();
+//             optionCENTER.setAlign(ParagraphAlignment.CENTER);
+//             document.setParagraph(NpoiHelper.newParagraph(document, sdf.format(new Date()), optionCENTER), pos++);
+//             NpoiHelper.catalog(document, "一、项目选址信息", pos++);
+//             String ydmj = res.getYdmjbegin() + " - " + res.getYdmjend();
+//             if (StringUtils.isEmpty(res.getYdmjbegin()) || Double.parseDouble(res.getYdmjbegin()) == 0)
+//                 ydmj = "≤" + res.getYdmjend();
+//             else if (StringUtils.isEmpty(res.getYdmjend()) || Double.parseDouble(res.getYdmjend()) == 0)
+//                 ydmj = "≥" + res.getYdmjbegin();
+//             List<String> listTemp = new ArrayList<String>();
+//             listTemp.add("\t项目名称:" + res.getXmmc());
+//             listTemp.add("\t建设单位:" + res.getJsdw());
+//             listTemp.add("\t用地面积:" + ydmj + "平方米");
+//             listTemp.add("\t用地性质:" + res.getYdmc());
+//             listTemp.add("\t影响因子:");
+//             NpoiHelper.content(document, listTemp, pos++);
+//             List tabYzTitles = new ArrayList<NpoiHelper.TableTitle>();
+//             NpoiHelper.TableTitle tableTitle = new NpoiHelper.TableTitle();
+//             tableTitle.setKey("YXYZMC");
+//             tableTitle.setName("因子名称");
+//             tableTitle.setWidth(2880);
+//             tabYzTitles.add(tableTitle);
+//             tableTitle = new NpoiHelper.TableTitle();
+//             tableTitle.setKey("YZTJ_TEXT");
+//             tableTitle.setName("影响条件");
+//             tableTitle.setAlign(ParagraphAlignment.CENTER);
+//             tableTitle.setWidth(2880);
+//             tabYzTitles.add(tableTitle);
+//             tableTitle = new NpoiHelper.TableTitle();
+//             tableTitle.setKey("YXZ");
+//             tableTitle.setName("约束范围值(M)");
+//             tableTitle.setAlign(ParagraphAlignment.CENTER);
+//             tableTitle.setWidth(2880);
+//             tabYzTitles.add(tableTitle);
+//             //查询选址因子,并且转换为List<Map> 因子条件(包含:C、不包含:N、分析:A)
+//             QueryWrapper<FzxzXzyzDTO> wrapper = new QueryWrapper<FzxzXzyzDTO>();
+//             wrapper.eq("rwbsm", res.getBsm());
+//             List<FzxzXzyzDTO> fzxzXzyzDTOList = fzxzXzyzMapper.selectList(wrapper);
+//             List<Map<String, Object>> dataTablelist = new ArrayList<>();
+//             for (int i = 0; i < fzxzXzyzDTOList.size(); i++) {
+//                 Map<String, Object> map = new HashMap<>();
+//                 FzxzXzyzDTO fzxzXzyzDTO = fzxzXzyzDTOList.get(i);
+//                 map.put("YXYZMC", fzxzXzyzDTO.getYxyzmc());
+//                 String yztj = "";
+//                 if (fzxzXzyzDTO.getYztj() != null) {
+//                     if ("C".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+//                         yztj = "包含";
+//                     }
+//                     if ("N".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+//                         yztj = "不包含";
+//                     }
+//                     if ("A".equals(fzxzXzyzDTO.getYztj().toUpperCase()) || "F".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+//                         yztj = "分析";
+//                     }
+//                 }
+//
+//                 map.put("YZTJ_TEXT", yztj);
+//                 String yxz = "";
+//                 if (StringUtils.isNotEmpty(fzxzXzyzDTO.getYxz())) {
+//                     yxz = fzxzXzyzDTO.getYxz();
+//                 }
+//                 map.put("YXZ", yxz);
+//                 dataTablelist.add(map);
+//             }
+//             XWPFTable tableYz = NpoiHelper.setComTable(document, tabYzTitles, dataTablelist, "表1:选址影响因子", pos++);
+//             NpoiHelper.catalog(document, "二、选址范围分析", pos++);
+//             //查询辅助选址分析图斑
+//             QueryWrapper<FzxzTbEntityDTO> wrapperTb = new QueryWrapper<FzxzTbEntityDTO>();
+//             wrapperTb.eq("rwbsm", res.getBsm());
+//             wrapperTb.groupBy("objectid", "rwbsm", "ydyhfldm", "ydyhflmc", "frequency", "sum_mj");
+//             List<FzxzTbEntityDTO> fzxzTbEntityDTOList = fzxzTbMapper.selectList(wrapperTb);
+//             //计算面积总和
+//             double sumcount = 0;
+//             for (int i = 0; i < fzxzTbEntityDTOList.size(); i++) {
+//                 sumcount = sumcount + fzxzTbEntityDTOList.get(i).getSumMj();
+//             }
+//
+//             List<FzxzTbEntityDTO> list = fzxzTbEntityDTOList.stream().sorted(
+//                     Comparator.comparing(FzxzTbEntityDTO::getSumMj).reversed()
+//             ).collect(Collectors.toList());
+//             String fwfx = "\t根据指定选址分析得出,所选范围共" + Math.round(sumcount) + "平方米,其中";
+//             List<Map<String, Object>> fztable = new ArrayList<>();
+//             //生成地类分析统计表
+//             for (int i = 0; i < list.size(); i++) {
+//                 FzxzTbEntityDTO item = list.get(i);
+//                 String zb = String.format("%.1f", item.getSumMj() / sumcount * 100);
+//                 if (i < 5) {
+//                     //面积前五的占比地类计算
+//                     fwfx += item.getYdyhflmc()
+//                             + Math.round(item.getSumMj()) + "平方米,占比" + zb + "%;";
+//                 }
+//                 //List<FzxzTbEntityDTO>转List<Map<String, Object>> 地类编码	地类名称	面积(平方千米)	占比(%)
+//                 Map map = new HashMap();
+//                 map.put("ZB", zb);
+//                 map.put("YDYHFLDM", item.getYdyhfldm());
+//                 map.put("YDYHFLMC", item.getYdyhflmc());
+//                 map.put("SUM_MJ", Math.round(item.getSumMj()));
+//                 fztable.add(map);
+//             }
+//             fwfx = fwfx.substring(0, fwfx.length() - 1) + "。详情如下:";
+//             NpoiHelper.content(document, fwfx, pos++);
+//             //地类编码	地类名称	面积(平方千米)	占比(%)
+//             List<NpoiHelper.TableTitle> tabYztbTitles = new ArrayList();
+//             NpoiHelper.TableTitle tableTitleTb = new NpoiHelper.TableTitle();
+//             tableTitleTb.setKey("YDYHFLDM");
+//             tableTitleTb.setName("地类编码");
+//             tableTitleTb.setAlign(ParagraphAlignment.CENTER);
+//             tableTitleTb.setWidth(2010);
+//             tabYztbTitles.add(tableTitleTb);
+//             tableTitleTb = new NpoiHelper.TableTitle();
+//             tableTitleTb.setKey("YDYHFLMC");
+//             tableTitleTb.setName("地类名称");
+//             tableTitleTb.setWidth(2910);
+//             tabYztbTitles.add(tableTitleTb);
+//             tableTitleTb = new NpoiHelper.TableTitle();
+//             tableTitleTb.setKey("SUM_MJ");
+//             tableTitleTb.setName("面积(平方千米)");
+//             tableTitleTb.setAlign(ParagraphAlignment.CENTER);
+//             tableTitleTb.setWidth(1870);
+//             tabYztbTitles.add(tableTitleTb);
+//             tableTitleTb = new NpoiHelper.TableTitle();
+//             tableTitleTb.setKey("ZB");
+//             tableTitleTb.setName("占比(%)");
+//             tableTitleTb.setAlign(ParagraphAlignment.CENTER);
+//             tableTitleTb.setWidth(1700);
+//             tabYztbTitles.add(tableTitleTb);
+//             XWPFTable tableYztb = NpoiHelper.setComTable(document, tabYztbTitles, fztable, "表2:地类分析统计表", pos++);
+//             //查询结果GIS FzxzJgGisDTO
+//             QueryWrapper<FzxzJgGisDTO> giswrapper = new QueryWrapper<FzxzJgGisDTO>();
+//             giswrapper.eq("rwbsm", res.getBsm());
+//             //筛选方案,根据传参或者预选方案
+// //            giswrapper.ne("yxfa", "0");
+//             if (xzbsmList != null) {
+//                 giswrapper.in("bsm", xzbsmList);
+//             }
+//             List<FzxzJgGisDTO> fzxzJgGisDTOList = fzxzJgGISMapper.selectList(giswrapper);
+//             NpoiHelper.catalog(document, "三、选址分析", pos++);
+//             String ydmc = res.getYdmc();
+//             if(!StringUtils.isEmpty(ydmc)){
+//                 if (ydmc.lastIndexOf("用地") == ydmc.length() - 2) {
+//                     ydmc = res.getYdmc().substring(0, ydmc.length() - 2);
+//                 }
+//                 NpoiHelper.content(document, "\t按照项目选址要求和影响因子,经对所选范围内的所有"
+//                         + ydmc + "用地进行分析,筛选出符合要求的方案共" + fzxzJgGisDTOList.size() + "个。", pos++);
+//             }else{
+//                 NpoiHelper.content(document, "\t按照项目选址要求和影响因子,经对所选范围内的所有用地进行分析,筛选出符合要求的方案共" + fzxzJgGisDTOList.size() + "个。", pos++);
+//             }
+//
+//             int index = 1;
+//             NpoiHelper.Option optionIsBold = new NpoiHelper.Option();
+//             optionIsBold.setBold(true);
+//             for (int i = 0; i < fzxzJgGisDTOList.size(); i++) {
+//                 FzxzJgGisDTO item = fzxzJgGisDTOList.get(i);
+//                 document.setParagraph(NpoiHelper.newParagraph(document, index + "、方案" + NumberUtil.int2chineseNum(index)
+//                         , optionIsBold), pos++);
+//                 XWPFTable table = document.createTable(7, 4);
+//                 table.setWidth(9000);//总宽度
+//                 for (int k = 0; k < 4; k++) {
+//                     XWPFTableCell cell = table.getRow(0).getCell(k);
+//                     CTTcPr ctTcPr = cell.getCTTc().isSetTcPr() ? cell.getCTTc().getTcPr() : cell.getCTTc().addNewTcPr();
+//                     CTTblWidth ctTblWidth = ctTcPr.addNewTcW();
+//                     ctTblWidth.setW(BigInteger.valueOf(2250));
+//                     ctTblWidth.setType(STTblWidth.DXA);
+//                 }
+//                 //Table 表格第一行
+//                 table.getRow(0).getCell(0).setColor("DBE5F1");
+//                 NpoiHelper.mergeHorizontal(table, 0, 0, 3);
+//                 table.getRow(0).getCell(0).setParagraph(NpoiHelper.setCellText(table, "符合用地情况", optionIsBold));
+//                 //Table 表格第二行
+//                 table.getRow(1).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地类编码", optionIsBold));
+//                 table.getRow(1).getCell(1).setParagraph(NpoiHelper.setCellText(table, item.getDlbm(), null));
+//                 table.getRow(1).getCell(2).setParagraph(NpoiHelper.setCellText(table, "地类名称", optionIsBold));
+//                 table.getRow(1).getCell(3).setParagraph(NpoiHelper.setCellText(table, item.getDlmc(), null));
+//                 //Table 表格第三行
+//                 table.getRow(2).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地块面积", optionIsBold));
+//                 table.getRow(2).getCell(1).setParagraph(NpoiHelper.setCellText(table, Math.round(item.getTbmj()) + "平方米", null));
+//                 table.getRow(2).getCell(2).setParagraph(NpoiHelper.setCellText(table, "土地位置", optionIsBold));
+//                 table.getRow(2).getCell(3).setParagraph(NpoiHelper.setCellText(table, item.getXzqmc(), null));
+//                 //Table 表格第四行
+//                 table.getRow(3).getCell(0).setColor("DBE5F1");
+//                 NpoiHelper.mergeHorizontal(table, 3, 0, 3);
+//                 table.getRow(3).getCell(0).setParagraph(NpoiHelper.setCellText(table, "地块位置信息", optionIsBold));
+//                 //Table 表格第五行 -专题图
+//                 NpoiHelper.mergeHorizontal(table, 4, 0, 1);
+//                 NpoiHelper.mergeHorizontal(table, 4, 2, 3);
+//                 String mapF = "";
+//                 String mapM = "";
+//                 if (imgList != null && imgList.size() > 0) {
+//                     for (int j = 0; j < imgList.size(); j++) {
+//                         String s = imgList.get(j);
+//                         if (s.indexOf(item.getBsm() + "_F") >= 0) {
+//                             mapF = s;//全局
+//                         }
+//                         if (s.indexOf(item.getBsm() + "_M") >= 0) {
+//                             mapM = s;//局部
+//                         }
+//                     }
+//                 }
+//                 if (StringUtils.isNotEmpty(mapF)) {
+//                     FileInputStream fis = null;
+//                     try {
+//                         fis = new FileInputStream(new File(mapF));
+//                         XWPFParagraph paragraph = table.getRow(4).getCell(0).addParagraph();
+//                         paragraph.setAlignment(ParagraphAlignment.CENTER);
+//                         XWPFRun run = paragraph.createRun();
+//                         run.addPicture(
+//                                 fis,    // 条形码图片的位置
+//                                 Document.PICTURE_TYPE_JPEG, // 图片类型
+//                                 item.getBsm() + "_F.jpeg", // 图片名称
+//                                 2200000, // 图片的长
+//                                 1700000 // 图片的宽
+//                         );
+//                         run.addBreak(BreakType.TEXT_WRAPPING);
+//                         run.setText("(宏观位置)");
+//                     } catch (Exception e) {
+//                         System.out.println(e.toString());
+//                     } finally {
+//                         if (fis != null) {
+//                             try {
+//                                 fis.close();
+//                             } catch (IOException e) {
+//                                 throw e;
+//                             }
+//                         }
+//                     }
+//                 }
+//                 if (StringUtils.isNotEmpty(mapM)) {
+//                     FileInputStream fis = null;
+//                     try {
+//                         fis = new FileInputStream(new File(mapM));
+//                         XWPFParagraph paragraph = table.getRow(4).getCell(2).addParagraph();
+//                         paragraph.setAlignment(ParagraphAlignment.CENTER);
+//                         XWPFRun run = paragraph.createRun();
+//                         run.addPicture(
+//                                 fis,    // 条形码图片的位置
+//                                 Document.PICTURE_TYPE_JPEG, // 图片类型
+//                                 item.getBsm() + "_M.jpeg", // 图片名称
+//                                 2200000, // 图片的长
+//                                 1700000 // 图片的宽
+//                         );
+//                         run.addBreak(BreakType.TEXT_WRAPPING);
+//                         run.setText("(具体位置)");
+//                     } catch (Exception e) {
+//                         System.out.println(e.toString());
+//                         throw e;
+//                     } finally {
+//                         if (fis != null) {
+//                             try {
+//                                 fis.close();
+//                             } catch (IOException e) {
+//                                 throw e;
+//                             }
+//                         }
+//                     }
+//                 }
+//                 //Table 表格第六行
+//                 table.getRow(5).getCell(0).setColor("DBE5F1");
+//                 NpoiHelper.mergeHorizontal(table, 5, 0, 3);
+//                 table.getRow(5).getCell(0).setParagraph(NpoiHelper.setCellText(table, "分析结论", optionIsBold));
+//                 //Table 表格第七行
+//                 NpoiHelper.mergeHorizontal(table, 6, 0, 3);
+//                 XWPFParagraph para6 = table.getRow(6).getCell(0).addParagraph();
+//                 para6.setAlignment(ParagraphAlignment.LEFT);
+//
+//                 //查询辅助选址因子
+//                 QueryWrapper<FzxzJgyzDTO> jgyzWrapper = new QueryWrapper<FzxzJgyzDTO>();
+//                 jgyzWrapper.eq("jbbsm", item.getBsm());
+//                 jgyzWrapper.ne("yztj", "F");
+//                 List<FzxzJgyzDTO> jgyzList = fzxzJgyzMapper.selectList(jgyzWrapper);
+//                 int jgyzid = 1;
+//                 for (int j = 0; j < jgyzList.size(); j++) {
+//                     FzxzJgyzDTO fzxzJgyzDTO = jgyzList.get(j);
+//                     XWPFRun run = para6.createRun();
+//                     run.setText(jgyzid + "、" + fzxzJgyzDTO.getFxjg());
+//                     run.addBreak(BreakType.TEXT_WRAPPING);
+//                     jgyzid++;
+//                 }
+//                 //查询辅助选址因子
+//                 jgyzWrapper = new QueryWrapper<FzxzJgyzDTO>();
+//                 jgyzWrapper.eq("jbbsm", item.getBsm());
+//                 jgyzWrapper.eq("yztj", "F");
+//                 jgyzList = fzxzJgyzMapper.selectList(jgyzWrapper);
+//
+//                 for (int j = 0; j < jgyzList.size(); j++) {
+//                     FzxzJgyzDTO jgyz = jgyzList.get(j);
+//                     XWPFRun run = para6.createRun();
+//                     String jg = jgyz.getFxjg();
+//                     Double jgDouble = 0.0;
+//                     try {
+//                         jgDouble = Double.parseDouble(jg);
+//                         run.setText(jgyzid + "、压占" + jgyz.getYxyzmc() + "面积" + jg + "平方米");
+//                     } catch (Exception e) {
+//                         run.setText(jg);
+//                     }
+//                     run.addBreak(BreakType.TEXT_WRAPPING);
+//                     jgyzid++;
+//                 }
+//                 index++;
+//             }
+//             File fileDoc = new File(reportPath);
+//             if (fileDoc.exists()) {
+//                 FileUtils.forceDelete(fileDoc);
+//             }
+//             //word文件输出流
+//             outputStream = new FileOutputStream(reportPath);
+//             document.write(outputStream);
+//         } catch (Exception e) {
+//             e.printStackTrace();
+//             //插入任务日志
+//             FxrwrzDTO errorDto = new FxrwrzDTO();
+//             errorDto.setRwbsm(res.getBsm());
+//             errorDto.setRwlx("辅助选址");
+//             errorDto.setRzlr("生成选址报告错误:" + e.getMessage());
+//             errorDto.setRzsj(new Date());
+//             errorDto.setRzlx("error");
+//             fxrwrzMapper.insert(errorDto);
+//         } finally {
+//             if (document != null) {
+//                 try {
+//                     document.close();
+//                 } catch (Exception ex) {
+//                     System.out.println(ex.toString());
+//                 }
+//             }
+//             if (outputStream != null) {
+//                 try {
+//                     outputStream.close();
+//                 } catch (IOException e) {
+//                     e.printStackTrace();
+//                 }
+//             }
+//         }
+//         //转PDF
+//         String outfilepath = reportPath.replace(".docx", ".pdf");
+//         NpoiHelper.doc2pdf(reportPath, outfilepath);
+//         System.out.println(outfilepath);
     }
 
     /**
@@ -620,21 +620,21 @@ public class FzxzSchedule {
             for (int i = 0; i < fzxzXzyzDTOList.size(); i++) {
                 FzxzXzyzDTO fzxzXzyzDTO = fzxzXzyzDTOList.get(i);
                 String yztj = "";
-                if (fzxzXzyzDTO.getYztj() != null) {
-                    if ("C".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "包含";
-                    }
-                    if ("N".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "不包含";
-                    }
-                    if ("A".equals(fzxzXzyzDTO.getYztj().toUpperCase()) || "F".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
-                        yztj = "分析";
-                    }
-                }
+                // if (fzxzXzyzDTO.getYztj() != null) {
+                //     if ("C".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+                //         yztj = "包含";
+                //     }
+                //     if ("N".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+                //         yztj = "不包含";
+                //     }
+                //     if ("A".equals(fzxzXzyzDTO.getYztj().toUpperCase()) || "F".equals(fzxzXzyzDTO.getYztj().toUpperCase())) {
+                //         yztj = "分析";
+                //     }
+                // }
                 String yxz = "";
-                if (StringUtils.isNotEmpty(fzxzXzyzDTO.getYxz())) {
-                    yxz = fzxzXzyzDTO.getYxz();
-                }
+                // if (StringUtils.isNotEmpty(fzxzXzyzDTO.getYxz())) {
+                //     yxz = fzxzXzyzDTO.getYxz();
+                // }
                 XWPFTableRow mr = table.createRow();
 
                 mr.getCell(1).setParagraph(NpoiHelper.setCellText(table, fzxzXzyzDTO.getYxyzmc(), optionCENTER));

+ 17 - 3
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/GhdkaMapper.xml

@@ -9,13 +9,27 @@
         WHERE public.st_contains(public.st_geometryfromtext(#{geom}, 4326), geom);
     </select>
 
-    <select id="getIdByFilter" parameterType="com.onemap.analyse.domain.query.GhdkaFilter" resultType="java.lang.Integer">
+    <select id="getIdByFilter" parameterType="com.onemap.analyse.domain.query.GhdkaFilter"
+            resultType="java.lang.Integer">
         SELECT id
-        FROM "GHDKA"
-        WHERE
+        FROM "GHDKA" as dk,#{fzxzXzyzDTO.yzbsm} as tbName
+        WHEREh
         id in
         <foreach collection="idList" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>
+        and
+        <if test="fzxzXzyzDTO.spatial_type == 'contain'">
+            st_contains ( tbName.geom, dk.geom )
+        </if>
+        <if test="fzxzXzyzDTO.spatial_type == 'n_contain'">
+            not st_contains ( tbName.geom, dk.geom )
+        </if>
+        <if test="fzxzXzyzDTO.spatial_type == 'identity'">
+            st_intersects ( tbName.geom, dk.geom )
+        </if>
+        <if test="fzxzXzyzDTO.spatial_type == 'n_identity'">
+            not st_intersects ( tbName.geom, dk.geom )
+        </if>
     </select>
 </mapper>