package com.ruoyi.web.controller.shate;

import ch.qos.logback.classic.pattern.LineOfCallerConverter;
import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.BarChart;
import com.ruoyi.common.utils.CustomXWPFDocument;
import com.ruoyi.common.utils.shate.PageUtils;

import com.ruoyi.system.domain_shate.*;
import com.ruoyi.system.service_shate.*;
import com.sun.jna.platform.unix.solaris.LibKstat;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.models.security.SecurityScheme;
import net.sf.jsqlparser.statement.create.procedure.CreateProcedure;
import org.apache.poi.hssf.usermodel.HeaderFooter;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.aspectj.weaver.loadtime.Aj;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.lang.reflect.AnnotatedArrayType;
import java.lang.reflect.Parameter;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @Author: JinSheng Song
 * @Date: 2022/7/11 15:46
 */
@RestController
@RequestMapping(value = "/api/Upload", produces = "application/json;charset=UTF-8")
@Api(tags = "文件上传记录")

public class DateUploadController {
    @Resource
    IPlantingSuitabilityService plantingSuitabilityService;
    @Resource
    ILandUseServices landUseServices;
    @Resource
    IVegetationHealthServices vegetationHealthServices;
    @Resource
    private IDateUploadService service;

    @Resource
    private ITopographicFactorService factorService;

    @Resource
    ISeedingSuccessService seedingSuccessService;

    private String FilePathName;

    private String ExePathName;

    private String FilePaths;

    private String ShpPaths;

    private String MapExePath;


    @RequestMapping(value = "/SelectUpload", method = {RequestMethod.POST})
    public AjaxResult SelectUpload(@RequestBody paging paging) {
//        LocalDate tomorrow = LocalDate.of(2022,10,2);
//        LocalDate today = LocalDate.now();
//
//        if(tomorrow.isAfter(today)==false)
//        {
//            return AjaxResult.error("软件授权日期已过，请联系管理人员！");
//        }

        String type1 = paging.getType1().replace(" ", "");
        String type = paging.getType().replace(" ", "");
        String type2 = "";

        if (paging.getType2() != null) {
            type2 = paging.getType2().toUpperCase();
        }
        String date = paging.getUploadTime();
        String name = paging.getType3();
        String dateTime = paging.getDateTime();


        if (name != null && name != "") {
            if (name.equals("1")) {
                name = "M_Heal%";
            } else if (name.equals("2")) {
                name = "H_Heal%";
            }

        }
        List<DateUpload> Seeding = service.selectUpload(paging.getZone(), type.toUpperCase(), type1.toUpperCase(),
                type2, paging.getYear(), date, name, dateTime);
        pageVO vaue = new pageVO();
        List<?> value = PageUtils.getListPaging(Seeding, paging.getPageNum(), paging.getPageSize());
        vaue.setValue(value);
        vaue.setTotal(Seeding.size());
        return AjaxResult.success(vaue);
    }


    @RequestMapping(value = "/delUpload", method = {RequestMethod.POST})
    public AjaxResult DelUpload(@RequestBody UplodFile uplodFile) {
        return delUploadFile(uplodFile.getId());

    }


    @RequestMapping(value = "/delUpload1", method = {RequestMethod.DELETE})
    public AjaxResult DelUpload1(@RequestParam("id") List<Integer> id) {
        List<Integer> ids = id;
        Integer Seeding = 0;
        for (int i = 0; i < ids.size(); i++) {
            Seeding = service.DelUpload(ids.get(i));
            if (Seeding == 0) {
                return AjaxResult.error("没有此id单据！" + ids.get(i));
            }
        }
        return AjaxResult.success(Seeding);

    }


    @RequestMapping(value = "/InitShp", method = {RequestMethod.POST})
    public AjaxResult InitShp(@RequestBody UplodFile uplodFile) {
        List<DateUpload> dateUploads = infr(uplodFile.getDateUploads());

        for (int i = 0; i < dateUploads.size(); i++) {
            Integer Seeding = service.IntoShp(dateUploads.get(i));
        }

        return AjaxResult.success("成功");
    }


    @RequestMapping(value = "/InitUpload", method = {RequestMethod.POST})
    public AjaxResult InitUpload(@RequestBody UplodFile uplodFile) {

        readXml();

        List<DateUpload> dateUploads = infr(uplodFile.getDateUploads());

        for (int i = 0; i < dateUploads.size(); i++) {
            Integer Seeding = service.IntoUpload(dateUploads.get(i));

        }

        return AjaxResult.success("成功");
    }

    private List<DateUpload> infr(List<DateUpload> dateUpload) {
        for (int i = 0; i < dateUpload.size(); i++) {

            String[] typesList = dateUpload.get(i).getType1().split("\\/");

            String type1 = typesList[1].replace(" ", "").toUpperCase();

            String type = typesList[0].replace(" ", "").toUpperCase();


            Date d = new Date();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

            String dateNowStr = sdf.format(d);
            if (type1.equals("EVALUATIONINDICATORS")) {
                String[] strs = dateUpload.get(i).getFileName().split("\\.");

                String name = strs[0];

                String[] strs2 = name.split("\\_");

                String[] typeValue = name.split("2");

                String type2 = typeValue[0];

                String name1 = strs2[strs2.length - 1];

                String name2 = strs2[strs2.length - 2];

                dateUpload.get(i).setDataTime(name2);

                dateUpload.get(i).setZone(name1);

                dateUpload.get(i).setCreatedTime(dateNowStr);

                dateUpload.get(i).setType(type);

                dateUpload.get(i).setType1(type1);

                dateUpload.get(i).setYear(name2.substring(0, 4));

                dateUpload.get(i).setType2(type2.substring(0, type2.length() - 1).toUpperCase());

                dateUpload.get(i).setExtent1(dateUpload.get(i).getExtent().toString());

                DateUpload uploadValue = service.selectShp(name1, type, "");
                MyThread1 demo = new MyThread1(name.replace(".tif", ""),
                        FilePaths + dateUpload.get(i).getData_id(),
                        ShpPaths + uploadValue.getData_id());
                demo.run();

            } else if (type1.equals("BOUNDARIES"))//Boundaries
            {
                String[] strs = dateUpload.get(i).getFileName().split("\\.");

                String name = strs[0];

                String[] strs2 = name.split("\\_");

                String name1 = strs2[strs2.length - 1];

                dateUpload.get(i).setZone(name1);

                dateUpload.get(i).setCreatedTime(dateNowStr);

                dateUpload.get(i).setYear(dateNowStr.substring(0, 4));

                dateUpload.get(i).setType(type);

                dateUpload.get(i).setType1(type1);

                dateUpload.get(i).setExtent1(dateUpload.get(i).getExtent().toString());

            } else if (type1.equals("LANDUSE")) {
                String[] strs = dateUpload.get(i).getFileName().split("\\.");

                String name = strs[0];

                String[] strs2 = name.split("\\_");

                String[] typeValue = name.split("2");

                String type2 = typeValue[0];

                String name1 = strs2[strs2.length - 1];

                String name2 = strs2[strs2.length - 2];

                dateUpload.get(i).setDataTime(name2);

                dateUpload.get(i).setZone(name1);

                dateUpload.get(i).setCreatedTime(dateNowStr);

                dateUpload.get(i).setType(type);

                dateUpload.get(i).setType1(type1);

                dateUpload.get(i).setYear(name2.substring(0, 4));

                dateUpload.get(i).setType2(type2.substring(0, type2.length() - 1).toUpperCase());

                dateUpload.get(i).setExtent1(dateUpload.get(i).getExtent().toString());

                DateUpload uploadValue = service.selectShp(name1, type, "");
                MyThread1 demo = new MyThread1(name.replace(".tif", ""),
                        FilePaths + dateUpload.get(i).getData_id(),
                        ShpPaths + uploadValue.getData_id());
                demo.run();

            } else if (type1.equals("SUITABILITY")) {
                String[] strs = dateUpload.get(i).getFileName().split("\\.");

                String name = strs[0];

                String[] strs2 = name.split("\\_");

                String[] typeValue = name.split("2");

                String type2 = typeValue[0];

                String name1 = strs2[strs2.length - 1];

                String name2 = strs2[strs2.length - 2];

                dateUpload.get(i).setDataTime(name2);

                dateUpload.get(i).setZone(name1);

                dateUpload.get(i).setCreatedTime(dateNowStr);

                dateUpload.get(i).setType(type);

                dateUpload.get(i).setType1(type1);

                dateUpload.get(i).setYear(name2.substring(0, 4));

                dateUpload.get(i).setType2(type2.substring(0, type2.length() - 1).toUpperCase());

                dateUpload.get(i).setExtent1(dateUpload.get(i).getExtent().toString());

                DateUpload uploadValue = service.selectShp(name1, type, "");

                MyThread1 demo = new MyThread1(name.replace(".tif", ""),
                        FilePaths + dateUpload.get(i).getData_id(),
                        ShpPaths + uploadValue.getData_id());
                demo.run();
            } else {
                String[] strs = dateUpload.get(i).getFileName().split("\\.");

                String name = strs[0];

                String[] strs2 = name.split("\\_");

                String name1 = strs2[strs2.length - 1];

                String name2 = strs2[strs2.length - 2];

                dateUpload.get(i).setDataTime(name2);

                Integer month = Integer.parseInt(name2.substring(4, 6));

                dateUpload.get(i).setYear(name2.substring(0, 4));

                dateUpload.get(i).setMonth(month);

                dateUpload.get(i).setZone(name1);

                dateUpload.get(i).setCreatedTime(dateNowStr);

                dateUpload.get(i).setType(type);

                dateUpload.get(i).setType1(type1);

                dateUpload.get(i).setExtent1(dateUpload.get(i).getExtent().toString());


                DateUpload uploadValue = service.selectShp(name1, type, "");
                MyThread1 demo = new MyThread1(name.replace(".tif", ""),
                        FilePaths + dateUpload.get(i).getData_id(),
                        ShpPaths + uploadValue.getData_id());
                demo.run();

            }

        }
        return dateUpload;
    }


    public void callExe1(String fileName, String filePath) {

        BufferedReader bufferedReader = null;
        Process proc = null;
        try {

            System.out.println("MapExePath路径:" + MapExePath);
            String[] cmd = {MapExePath, fileName, filePath + ".tif", FilePaths + "jpg/"};

            System.out.println("调用方法名：" + MapExePath + " 文件名：" + fileName + " 调用tif文件：" + filePath + ".tif" + " 生成jpg路径：" + FilePaths + "jpg/");

            ProcessBuilder pb = new ProcessBuilder();
            pb.command(cmd);
            proc = pb.start();
            System.out.println("Start calling algorithm(image)");

            bufferedReader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
            String aa = null;
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                aa = aa + line;
            }
            System.out.println(aa);

        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 调用exe
     *
     * @param fileName 文件名称
     * @param filePath tif文件路径
     * @param shpPath  shp文件路径
     */
    @RequestMapping(value = "/callExe", method = {RequestMethod.GET})
    public void callExe(String fileName, String filePath, String shpPath) {
        BufferedReader bufferedReader = null;
        Process proc = null;
        try {

//            String til = UrlFileUpload.fileUpload(filePath,FilePathName);
//
//            String shp = UrlFileUpload.fileUpload(shpPath,FilePathName);
            String[] cmd = {ExePathName,
                    fileName,
                    filePath + ".tif",
                    shpPath + ".zip"};

            ProcessBuilder pb = new ProcessBuilder();
            pb.command(cmd);
            proc = pb.start();
            System.out.println("Start calling algorithm(tif)");

            bufferedReader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
            String aa = null;
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                aa = aa + line;
            }
            System.out.println(aa);


        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
            ;
        }
    }

    public class MyThread1 extends Thread {

        private String FileName;

        private String FilePath;

        private String ShpPath;

        public MyThread1(String fileName, String filePath, String shpPath) {
            this.FileName = fileName;
            this.FilePath = filePath;
            this.ShpPath = shpPath;

        }

        @Override
        public void run() {
            callExe1(FileName, FilePath);
            callExe(FileName, FilePath, ShpPath);
        }
    }

    /**
     * 删除
     *
     * @return
     */
    @RequestMapping(value = "/delUploadFile", method = {RequestMethod.DELETE})
    public AjaxResult delUploadFile(List<Integer> id) {

        List<Integer> ids = id;
        UploadFile file = new UploadFile();

        for (int i = 0; i < ids.size(); i++) {
            Integer Seeding = 0;
            DateUpload value = service.selectDel(ids.get(i));
            String type1 = value.getType1();
            String type = value.getType();
            if (type1.equals("EVALUATIONINDICATORS")) {
                //value.getType2();
                String[] typeValue = value.getFileName().split("2");
                String type2 = typeValue[0];
                type2 = type2.substring(0, type2.length() - 1);
                file.UploadFile1(type2, value.getZone(), value.getDataTime(), service, "");
                Seeding = service.DelUpload(ids.get(i));
                if (Seeding == 0) {
                    return AjaxResult.error("没有此id单据！" + ids.get(i));
                }
                continue;
            }
            else if (type.equals("VEGETATIONHEALTH")) {
                String[] typeValue = value.getFileName().split("_");
                String resolution = typeValue[0];
                String type2 = "Heal";
                file.UploadFile1(type2, value.getZone(), value.getDataTime(), service, resolution);
                Seeding = service.DelUpload(ids.get(i));
                if (Seeding == 0) {
                    return AjaxResult.error("没有此id单据！" + ids.get(i));
                }
                continue;
            }
            else if (type1.equals("BOUNDARIES") || type1.equals("RSIMAGES")) {
                Seeding = service.DelUpload(ids.get(i));
                if (Seeding == 0) {
                    return AjaxResult.error("没有此id单据！" + ids.get(i));
                }
                continue;
            }
            else {

                String[] typeValue = value.getFileName().split("_");
                String type2 = typeValue[0];
                file.UploadFile1(type2, value.getZone(), value.getDataTime(), service, "");
                Seeding = service.DelUpload(ids.get(i));
                if (Seeding == 0) {
                    return AjaxResult.error("没有此id单据！" + ids.get(i));
                }
                continue;
            }
        }

        return AjaxResult.success("成功！");
    }


    public void readXml() {
        try {
            // 创建解析器工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = factory.newDocumentBuilder();
            // 创建一个Document对象

            String parent = new File(ResourceUtils.getURL("classpath:").getPath()).getParentFile().getParentFile().getParent();


            File file = new File("route.xml");
            Document doc = db.parse(file);
            NodeList routeList = doc.getElementsByTagName("Rodel");
            // 遍历每个book节点
            for (int i = 0; i < routeList.getLength(); i++) {

                // 索引从零开始
                org.w3c.dom.Node book = routeList.item(i);
                // 获取book节点所有属性集合
                org.w3c.dom.NamedNodeMap attrs = book.getAttributes();


                NodeList childNodes = book.getChildNodes();
                for (int k = 0; k < childNodes.getLength(); k++) {
                    // 区分,去掉空格和换行符
                    if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {

                        this.ExePathName = childNodes.item(1).getTextContent().trim();

                        this.FilePathName = childNodes.item(3).getTextContent().trim();

                        this.FilePaths = childNodes.item(5).getTextContent().trim();

                        this.ShpPaths = childNodes.item(7).getTextContent().trim();

                        this.MapExePath = childNodes.item(9).getTextContent().trim();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 修改全部区域名称
     *
     * @return
     */
    @RequestMapping(value = "/updateAllRegionName", method = {RequestMethod.POST})
    public AjaxResult updateAllRegionName(@RequestBody RegionName regionName) {

        return landUseServices.updateAllRegionName(regionName.getRegionName());
    }

    /**
     * 查询所有区域名称
     *
     * @return
     */
    @RequestMapping(value = "/queryAllRegionName", method = {RequestMethod.GET})
    public AjaxResult queryAllRegionName() {
        try {
            List<String> regionNameList = new ArrayList<>();
            List<LandUse> landUses = landUseServices.sqlSeeding1(null, null);
            UplodFile main = landUseServices.mainClass(null, null);
            if (main == null) {
                return null;
            }
            if (landUses != null) {
                landUses.forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getWaterFactors() != null) {
                main.getWaterFactors().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getRoadFactors() != null) {
                main.getRoadFactors().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getSoilMoistures() != null) {
                main.getSoilMoistures().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getSoilSalinizations() != null) {
                main.getSoilSalinizations().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getSoilDesertifications() != null) {
                main.getSoilDesertifications().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getAspects() != null) {
                main.getAspects().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getSlopes() != null) {
                main.getSlopes().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getAltitudes() != null) {
                main.getAltitudes().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getInformation() != null) {
                main.getInformation().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getPlantingSuitabilities() != null) {
                main.getPlantingSuitabilities().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            if (main.getVegetationHealths() != null) {
                main.getVegetationHealths().forEach(e -> {
                    regionNameList.add(e.getRegionName());
                });
            }
            List<String> regionNameLists = regionNameList.stream().distinct().collect(Collectors.toList());
            Collections.sort(regionNameLists);
            return AjaxResult.success(regionNameLists);
        } catch (Exception e) {
            return AjaxResult.error(e.getMessage());
        }
    }

    /**
     * 导出Word
     *
     * @param
     */
    @RequestMapping(value = "/exportWord1", method = {RequestMethod.POST})
    public AjaxResult exportWord1(HttpServletResponse response, HttpServletRequest request, @RequestBody WordVo wordVo) {
        try {
            readXml();
            String[] zoneList = wordVo.getZoneList();
            //接受前端传来的数据
            String[] years = wordVo.getYear();
            String filePath = FilePaths + "jpg/";
            for (String year : years) {
                String zoneString = "";
                for (String zone : zoneList) {
                    zone += " | ";
                    zoneString += zone;
                }
                zoneString = zoneString.substring(0, zoneString.length() - 3);
                //创建文本对象
                CustomXWPFDocument docxDocument = new CustomXWPFDocument();
                //创建标题
                BarChart.setTitle(docxDocument, "Evaluation report of planting monitoring in ITBA Nature Reserve ");
                //创建第一个段落的标题
                BarChart.createFirstLevelTopic(docxDocument, "1.Background information");
                //创建第一个段落的内容
                BarChart.createParagraphAndInsertWord(docxDocument, "Date time: " + year);
                //创建页眉页脚
                BarChart.createHeader(docxDocument, "Evaluation report of planting monitoring in ITBA Nature Reserve");
                BarChart.createParagraphAndInsertWord(docxDocument, "Evaluation area: " + zoneString);
                Integer number = 0;

                for (int i = 0; i < zoneList.length; i++) {
                    String zone = zoneList[i];
                    //2.1
                    BarChart.createFirstLevelTopic(docxDocument, i + 2 + ". Results of remote sensing monitoring of planting suitability" + "( zone:" + zone + ")");
                    List<LandUse> landUses = landUseServices.sqlSeeding1(zone, year);
                    UplodFile main = landUseServices.mainClass(zone, year);
                    //土地利用类型
                    BarChart.createSecondLevelTopic(docxDocument, i + 2 + ".1. Monitoring results of land use types");
                    BarChart.insertPic(docxDocument, filePath + landUses.get(1).getProductCode3() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 1) + " Spatial distribution data of land use types");
                    //绘制土地利用类型图表
                    //x轴
                    String[] xAxisData = new String[]{"Fields", "Buildings", "Roads", "Water", "Forest", "Grass", "Soil", "Desert", "Rocks", "Other"};
                    //y轴
                    Double[] yAxisData = new Double[]{BarChart.fun(landUses.get(2).getArea() * 0.01),
                            BarChart.fun(landUses.get(0).getArea() * 0.01),
                            BarChart.fun(landUses.get(6).getArea() * 0.01),
                            BarChart.fun(landUses.get(9).getArea() * 0.01),
                            BarChart.fun(landUses.get(3).getArea() * 0.01),
                            BarChart.fun(landUses.get(4).getArea() * 0.01),
                            BarChart.fun(landUses.get(8).getArea() * 0.01),
                            BarChart.fun(landUses.get(1).getArea() * 0.01),
                            BarChart.fun(landUses.get(7).getArea() * 0.01),
                            BarChart.fun(landUses.get(5).getArea() * 0.01)};
                    BarChart.drawTable(docxDocument, xAxisData, yAxisData);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 2) + " Statistical data on land use types");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the total area of field is "
                            + BarChart.fun(landUses.get(2).getArea() * 0.01) + " km², the building is " + BarChart.fun(landUses.get(0).getArea() * 0.01) +
                            " km², the road is " + BarChart.fun(landUses.get(6).getArea() * 0.01) +
                            " km², the water is " + BarChart.fun(landUses.get(9).getArea() * 0.01) +
                            " km², the forest is " + BarChart.fun(landUses.get(3).getArea() * 0.01) +
                            " km², the grass is " + BarChart.fun(landUses.get(4).getArea() * 0.01) +
                            " km², the soil is " + BarChart.fun(landUses.get(8).getArea() * 0.01) +
                            " km², the desert is " + BarChart.fun(landUses.get(1).getArea() * 0.01) +
                            " km², the rock is " + BarChart.fun(landUses.get(7).getArea() * 0.01) +
                            " km², and other land use types are " + BarChart.fun(landUses.get(5).getArea() * 0.01) + " km².");

                    BarChart.createSecondLevelTopic(docxDocument, i + 2 + ".2 Monitoring results of planting suitability evaluation index");
                    //2.2.1海拔、坡向、坡度
                    //海拔
                    BarChart.createSecondLevelTopic(docxDocument, i + 2 + ".2.1. Monitoring results of terrain index");
                    BarChart.insertPic(docxDocument, filePath + main.getAltitudes().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 3) + " Spatial distribution data of altitude");
                    //绘制折线图(已取消)
                    String[] xAxis = new String[]{"<400", "400-600", "600-100", "1000-1500", ">1500"};//x轴
                    Double[] yAxis = new Double[]{BarChart.fun(main.getAltitudes().get(0).getLevel1() * 0.01),
                            BarChart.fun(main.getAltitudes().get(0).getLevel2() * 0.01),
                            BarChart.fun(main.getAltitudes().get(0).getLevel3() * 0.01),
                            BarChart.fun(main.getAltitudes().get(0).getLevel4() * 0.01),
                            BarChart.fun(main.getAltitudes().get(0).getLevel5() * 0.01)};//y轴
                    BarChart.drawTable(docxDocument, xAxis, yAxis);
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 4) + " Classification statistics of altitude");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the area with an altitude lower than 400m is " + BarChart.fun(main.getAltitudes().get(0).getLevel1() * 0.01) + " km², the area with 400-600m is " + BarChart.fun(main.getAltitudes().get(0).getLevel2() * 0.01) + " km², the area with 600-1000m is " + BarChart.fun(main.getAltitudes().get(0).getLevel3() * 0.01) + " km², and the area with 1000-1500m is " + BarChart.fun(main.getAltitudes().get(0).getLevel4() * 0.01) + " km². The area with an altitude higher than 1500m is " + BarChart.fun(main.getAltitudes().get(0).getLevel5() * 0.01) + " km².");
                    //坡向
                    BarChart.insertPic(docxDocument, filePath + main.getAspects().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 5) + " Spatial distribution data of aspect");
                    String[] xAspectAxis = new String[]{"North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "NorthWest"};//x轴
                    Double[] yAspectAxis = new Double[]{BarChart.fun(main.getAspects().get(0).getNorth() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getNortheast() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getEast() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getSoutheast() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getSouth() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getSouthwest() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getWest() * 0.01),
                            BarChart.fun(main.getAspects().get(0).getNorthwest() * 0.01)};//y轴

                    BarChart.drawTable(docxDocument, xAspectAxis, yAspectAxis);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 6) + " Classification statistics of aspect");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the area with the north aspect is " + BarChart.fun(main.getAspects().get(0).getNorth() / 100) +
                            " km², the area with the northeast aspect is " + BarChart.fun(main.getAspects().get(0).getNortheast() / 100) +
                            " km², the area with the east aspect is " + BarChart.fun(main.getAspects().get(0).getEast() / 100) +
                            " km², the area with the southeast aspect is " + BarChart.fun(main.getAspects().get(0).getSoutheast() / 100) +
                            " km², and the area with the south aspect is " + BarChart.fun(main.getAspects().get(0).getSouth() / 100) +
                            " km², the area with the southwest aspect is " + BarChart.fun(main.getAspects().get(0).getSouthwest() / 100) +
                            " km², the area with the west aspect is " + BarChart.fun(main.getAspects().get(0).getWest() / 100) +
                            " km², and the area with the northwest aspect is " + BarChart.fun(main.getAspects().get(0).getNorthwest() / 100) + " km².");
                    //坡度
                    BarChart.insertPic(docxDocument, filePath + main.getSlopes().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 7) + " Spatial distribution data of slope");
                    String[] xSlopeAxis = new String[]{"<10°", "10°~30°", "30°~50°", "50°~70°", ">70°"};//x轴
                    Double[] ySlopeAxis = new Double[]{BarChart.fun(main.getSlopes().get(0).getLevel1() * 0.01),
                            BarChart.fun(main.getSlopes().get(0).getLevel2() * 0.01),
                            BarChart.fun(main.getSlopes().get(0).getLevel3() * 0.01),
                            BarChart.fun(main.getSlopes().get(0).getLevel4() * 0.01),
                            BarChart.fun(main.getSlopes().get(0).getLevel5() * 0.01)};
                    BarChart.drawTable(docxDocument, xSlopeAxis, ySlopeAxis);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 8) + " Classification statistics of slope");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the area of slope less than 10° is " + BarChart.fun(main.getSlopes().get(0).getLevel1() * 0.01) + " km², the area of 10°-30° is " + BarChart.fun(main.getSlopes().get(0).getLevel2() * 0.01) + " km², the area of 30°-50° is " + BarChart.fun(main.getSlopes().get(0).getLevel3() * 0.01) + " km², and the area of 50°-70° is " + BarChart.fun(main.getSlopes().get(0).getLevel4() * 0.01) + "km². The area greater than 70° is " + BarChart.fun(main.getSlopes().get(0).getLevel5() * 0.01) + " km².");

                    //2.2.2 沙化指数、湿度指数、盐渍化指数
                    BarChart.createSecondLevelTopic(docxDocument, i + 2 + ".2.2. Monitoring results of soil index");
                    //沙化指数
                    BarChart.insertPic(docxDocument, filePath + main.getSoilDesertifications().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 9) + " Spatial distribution data of soil desertification factor");
                    String[] xDesertificationAxis = new String[]{"<0.1", "0.1~0.3", "0.3~0.5", "0.5~0.7", ">0.7"};//x轴
                    Double[] yDesertificationAxis = new Double[]{BarChart.fun(main.getSoilDesertifications().get(0).getLevel1() * 0.01),
                            BarChart.fun(main.getSoilDesertifications().get(0).getLevel2() * 0.01),
                            BarChart.fun(main.getSoilDesertifications().get(0).getLevel3() * 0.01),
                            BarChart.fun(main.getSoilDesertifications().get(0).getLevel4() * 0.01),
                            BarChart.fun(main.getSoilDesertifications().get(0).getLevel5() * 0.01)};
                    BarChart.drawTable(docxDocument, xDesertificationAxis, yDesertificationAxis);
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 10) + " Classification statistics of soil desertification factor");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the area of soil desertification factor less than 0.1 is " + BarChart.fun(main.getSoilDesertifications().get(0).getLevel1() * 0.01) + " km², the area of 0.1-0.3 is " + BarChart.fun(main.getSoilDesertifications().get(0).getLevel2() * 0.01) + "km², the area of 0.3-0.5 is " + BarChart.fun(main.getSoilDesertifications().get(0).getLevel3() * 0.01) + " km², and the area of 0.5-0.7 is " + BarChart.fun(main.getSoilDesertifications().get(0).getLevel4() * 0.01) + " km². The area greater than 0.7 is " + BarChart.fun(main.getSoilDesertifications().get(0).getLevel5() * 0.01) + " km².");
                    //湿度指数
                    BarChart.insertPic(docxDocument, filePath + main.getSoilMoistures().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 11) + " Spatial distribution data of soil moisture factor");
                    Double[] yMoistureAxis = new Double[]{BarChart.fun(main.getSoilMoistures().get(0).getLevel1() * 0.01),
                            BarChart.fun(main.getSoilMoistures().get(0).getLevel2() * 0.01),
                            BarChart.fun(main.getSoilMoistures().get(0).getLevel3() * 0.01),
                            BarChart.fun(main.getSoilMoistures().get(0).getLevel4() * 0.01),
                            BarChart.fun(main.getSoilMoistures().get(0).getLevel5() * 0.01)};
                    BarChart.drawTable(docxDocument, xDesertificationAxis, yMoistureAxis);
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 12) + " Classification statistics of soil moisture factor");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region,  the area of soil moisture factor less than 0.1 is " + BarChart.fun(main.getSoilMoistures().get(0).getLevel1() * 0.01) + " km², the area of 0.1-0.3 is " + BarChart.fun(main.getSoilMoistures().get(0).getLevel2() * 0.01) + " km², the area of 0.3-0.5 is " + BarChart.fun(main.getSoilMoistures().get(0).getLevel3() * 0.01) + " km², and the area of 0.5-0.7 is " + BarChart.fun(main.getSoilMoistures().get(0).getLevel4() * 0.01) + "km². The area greater than 0.7 is " + BarChart.fun(main.getSoilMoistures().get(0).getLevel5() * 0.01) + " km².");
                    //盐渍化指数
                    BarChart.insertPic(docxDocument, filePath + main.getSoilSalinizations().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 13) + " Spatial distribution data of soil salinization factor");
                    Double[] ySalinizationsAxis = new Double[]{
                            BarChart.fun(main.getSoilSalinizations().get(0).getLevel1() * 0.01),
                            BarChart.fun(main.getSoilSalinizations().get(0).getLevel2() * 0.01),
                            BarChart.fun(main.getSoilSalinizations().get(0).getLevel3() * 0.01),
                            BarChart.fun(main.getSoilSalinizations().get(0).getLevel4() * 0.01),
                            BarChart.fun(main.getSoilSalinizations().get(0).getLevel5() * 0.01)};
                    BarChart.drawTable(docxDocument, xDesertificationAxis, ySalinizationsAxis);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 14) + " Classification statistics of soil salinization factor");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, In 01 area, the area of soil salinization factor less than 0.1 is" + BarChart.fun(main.getSoilSalinizations().get(0).getLevel1() * 0.01) + "km², the area of 0.1-0.3 is " + BarChart.fun(main.getSoilSalinizations().get(0).getLevel2() * 0.01) + " km², the area of 0.3-0.5 is " + BarChart.fun(main.getSoilSalinizations().get(0).getLevel3() * 0.01) + " km², and the area of 0.5-0.7 is " + BarChart.fun(main.getSoilSalinizations().get(0).getLevel4() * 0.01) + " km². The area greater than 0.7 is " + BarChart.fun(main.getSoilSalinizations().get(0).getLevel5() * 0.01) + " km².");

                    //2.2.3 水域因子、道路因子
                    BarChart.createSecondLevelTopic(docxDocument, "2.2.3. Monitoring results of regional index");
                    //道路因子
                    BarChart.insertPic(docxDocument, filePath + main.getRoadFactors().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 15) + " Spatial distribution data of road factor");
                    Double[] yRoadAxis = new Double[]{BarChart.fun(main.getRoadFactors().get(0).getLevel1() / 100),
                            BarChart.fun(main.getRoadFactors().get(0).getLevel2() / 100),
                            BarChart.fun(main.getRoadFactors().get(0).getLevel3() / 100),
                            BarChart.fun(main.getRoadFactors().get(0).getLevel4() / 100),
                            BarChart.fun(main.getRoadFactors().get(0).getLevel5() / 100)};
                    BarChart.drawTable(docxDocument, xDesertificationAxis, yRoadAxis);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 16) + " Classification statistics of road factor");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region, the area of road factor less than 0.1 is " + BarChart.fun(main.getRoadFactors().get(0).getLevel1() * 0.01) + " km², the area of 0.1-0.3 is " + BarChart.fun(main.getRoadFactors().get(0).getLevel2() * 0.01) + " km², the area of 0.3-0.5 is " + BarChart.fun(main.getRoadFactors().get(0).getLevel3() * 0.01) + " km², and the area of 0.5-0.7 is " + BarChart.fun(main.getRoadFactors().get(0).getLevel4() * 0.01) + " km². The area greater than 0.7 is " + BarChart.fun(main.getRoadFactors().get(0).getLevel5() * 0.01) + "km².");
                    //水域因子
                    BarChart.insertPic(docxDocument, filePath + main.getWaterFactors().get(0).getProductCode2() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 17) + " Spatial distribution data of water factor");
                    Double[] yWaterAxis = new Double[]{BarChart.fun(main.getWaterFactors().get(0).getLevel1() / 100),
                            BarChart.fun(main.getWaterFactors().get(0).getLevel2() / 100),
                            BarChart.fun(main.getWaterFactors().get(0).getLevel3() / 100),
                            BarChart.fun(main.getWaterFactors().get(0).getLevel4() / 100),
                            BarChart.fun(main.getWaterFactors().get(0).getLevel5() / 100)};
                    BarChart.drawTable(docxDocument, xDesertificationAxis, yWaterAxis);//标题2图标
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 18) + " Classification statistics of water factor");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + zone + " region,  the area of water factor less than 0.1 is " + BarChart.fun(main.getWaterFactors().get(0).getLevel1() * 0.01) + " km², the area of 0.1-0.3 is " + BarChart.fun(main.getWaterFactors().get(0).getLevel2() * 0.01) + " km², the area of 0.3-0.5 is " + BarChart.fun(main.getWaterFactors().get(0).getLevel3() * 0.01) + " km², and the area of 0.5-0.7 is " + BarChart.fun(main.getWaterFactors().get(0).getLevel4() * 0.01) + " km². The area greater than 0.7 is " + BarChart.fun(main.getWaterFactors().get(0).getLevel5() * 0.01) + " km².");
                    //2.3
                    BarChart.createSecondLevelTopic(docxDocument, i + 2 + ".3. Monitoring results of planting suitability");
                    //查找适宜性
                    PlantingSuitability suitability = plantingSuitabilityService.sqlSeeding1(zone, year);
                    BarChart.insertPic(docxDocument, filePath + suitability.getProductCode3() + ".jpg");
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 19) + " Spatial distribution data of planting suitability");
                    //此处插入图表
                    String[] xAxisData2 = new String[]{"Very Suitable", "Suitable", "Not Suitable"};
                    Double x1 = suitability.getVerySuitable() / 100;
                    Double x2 = suitability.getSuitable() / 100;
                    Double x3 = suitability.getNotSuitable() / 100;
                    Double[] yAxisData2 = new Double[]{x1, x2, x3};
                    BarChart.drawTable(docxDocument, xAxisData2, yAxisData2);
                    BarChart.setPicTitle(docxDocument, "Figure " + (number + 20) + " Classification statistics of planting suitability");
                    BarChart.createParagraphAndInsertWord(docxDocument, "In " + suitability.getZone() + " region, the area of very suitable region was " + BarChart.fun(suitability.getVerySuitable() / 100) +
                            " km², accounting for " + BarChart.fun((suitability.getVerySuitable() / suitability.getTotalArea()) * 100) + "%. The area of suitable grade was " + BarChart.fun(suitability.getSuitable() / 100) +
                            " km², accounting for " + BarChart.fun((suitability.getSuitable() / suitability.getTotalArea()) * 100) + "%. The area of unsuitable area was " + BarChart.fun(suitability.getNotSuitable() / 100) +
                            " km², accounting for " + BarChart.fun((suitability.getNotSuitable() / suitability.getTotalArea()) * 100) + "%.");
                    number += 20;
                }


                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/msword");
                //文件名
                String fileName = "Evaluation report of planting monitoring in ITBA Nature Reserve - " + "Year:" + year + "(" + zoneString + ")" + ".docx";

                response.setHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
                response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");

                ServletOutputStream responseOutputStream = response.getOutputStream();
                docxDocument.write(responseOutputStream);
                responseOutputStream.flush();
                responseOutputStream.close();
            }
        } catch (Exception e) {
            return AjaxResult.error(e.getMessage());
        }
        return AjaxResult.success("成功！");

    }


//    /**
//     * 导出Word
//     * @param
//     */
//    @RequestMapping(value = "/exportWord",method = {RequestMethod.GET})
//    @ResponseBody
//    public void exportWord(HttpServletResponse response, HttpServletRequest request) throws Exception {
//        //接受前端传来的数据
//        String year = "2022";//request.getParameter("year");
//        String zone = "03";//request.getParameter("zone");
//        //创建文本对象
//        CustomXWPFDocument docxDocument = new CustomXWPFDocument();
//        //创建标题
//        BarChart.setTitle(docxDocument,"Evaluation report of planting monitoring in ITBA Nature Reserve");
//        //创建第一个段落的标题
//        BarChart.createFirstLevelTopic(docxDocument, "1.Background information");
//        //创建第一个段落的内容
//        BarChart.createParagraphAndInsertWord(docxDocument, "Date time: "+year);
//        BarChart.createParagraphAndInsertWord(docxDocument, "Evaluation area: "+zone);
//
//
//        //创建第二段落的标题
//        BarChart.createFirstLevelTopic(docxDocument, "2.Results of remote sensing monitoring of seeding success rate");
//        //循环判断有多少个资源
//        List<SeedingSuccessRate> seedingSuccessRates = seedingSuccessService.sqlSeeding(zone, year);
//        for (SeedingSuccessRate seedingSuccessRate : seedingSuccessRates) {
//            //图片的url
//            //String productCode1 = seedingSuccessRate.getProductCode1();
//            //String productCode2 = seedingSuccessRate.getProductCode2();
//            //创建第二段落的内容
//            BarChart.insertPic(docxDocument, "C:\\Users\\xkrs\\Desktop\\pic\\1.png");
//            BarChart.setPicTitle(docxDocument, "Spatial distribution data of successful seeding regions");
//            BarChart.insertPic(docxDocument, "C:\\Users\\xkrs\\Desktop\\pic\\2.png");
//            BarChart.setPicTitle(docxDocument, "Spatial distribution data of seeding success rate");
//            BarChart.createParagraphAndInsertWord(docxDocument, ""+BarChart.changeDate(seedingSuccessRate.getImageDate())+
//                    ". The total planting area in "+seedingSuccessRate.getZone()+" area was "+
//                    BarChart.getDoubleNumber((seedingSuccessRate.getSeedingSuccessArea()/seedingSuccessRate.getSeedingSuccess())) +
//                    " km², the vegetation survival area was "+seedingSuccessRate.getSeedingSuccessArea()+" km², and the seeding success rate was "+seedingSuccessRate.getSeedingSuccess()+"%.");
//        }
//        //第三段的标题
//        BarChart.createFirstLevelTopic(docxDocument, "3.Results of remote sensing monitoring of vegetation health");
//        //获取ProductCode1的集合
//        List<String> M_code=new ArrayList<>();
//        List<String> H_code=new ArrayList<>();
//        //查询数据库中有多少条数据
//        List<VegetationHealth> vegetationHealths = vegetationHealthServices.sqlInfo(zone, year);
//        //循环查询的数据分别加入到不同的集合中作为中质量和高质量的循环次数
//        for (VegetationHealth vegetationHealth : vegetationHealths) {
//            String productCode1 = vegetationHealth.getProductCode1();
//            if(productCode1.startsWith("M"))
//            {
//                M_code.add(vegetationHealth.getProductCode1());
//            }
//            if(productCode1.startsWith("H"))
//            {
//                H_code.add(vegetationHealth.getProductCode1());
//            }
//        }
//        //第三段的内容
//        //第三段的第一个小标题
//        int size=H_code.size()+M_code.size();
//        BarChart.createSecondLevelTopic(docxDocument, "3.1.Monitoring results of medium resolution data");
//        for(int i = 0; i <M_code.size(); i++) {
//            List<VegetationHealth> vegetationHealths_M = vegetationHealthServices.sqlSeeding(zone, M_code.get(i), year);
//            for (VegetationHealth vegetationHealth_m : vegetationHealths_M) {
//                //第三段的第一个小标题的内容
//                BarChart.insertPic(docxDocument, "C:\\Users\\sjs\\Desktop\\R-C.jpg");
//                BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation planting area");
//                BarChart.insertPic(docxDocument, "C:\\Users\\sjs\\Desktop\\R-C.jpg");
//                BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation health status");
//                //插入柱状图表
//                String[] xAxisData = new String[]{"Health", "Normal", "Not-Health"};
//                Double m1 = vegetationHealth_m.getHealthy();
//                Double m2 = vegetationHealth_m.getNormal();
//                Double m3 = vegetationHealth_m.getNotHealthy();
//                Double[] yAxisData = new Double[]{m1, m2, m3};
//                BarChart.drawTable(docxDocument,xAxisData,yAxisData);
//                BarChart.setPicTitle(docxDocument, "Statistical data on vegetation health");
//                BarChart.createParagraphAndInsertWord(docxDocument, ""+BarChart.changeDate(vegetationHealth_m.getImageDate())+". Based on the monitoring results of high resolution satellite images, the area of healthy vegetation growth in "+vegetationHealth_m.getZone()+" region was "+vegetationHealth_m.getHealthy()+" km², accounting for "+BarChart.getDoubleNumber((vegetationHealth_m.getHealthy()/vegetationHealth_m.getTotalArea())*100)+"%. The area with normal vegetation growth was "+vegetationHealth_m.getNormal()+" km², accounting for "+BarChart.getDoubleNumber((vegetationHealth_m.getNormal()/vegetationHealth_m.getTotalArea())*100)+"%. The area of unhealthy vegetation growth was "+vegetationHealth_m.getNotHealthy()+" km², accounting for "+BarChart.getDoubleNumber((vegetationHealth_m.getNotHealthy()/vegetationHealth_m.getTotalArea())*100)+"%.");
//            }
//        }
//        //第三段的第二个小标题
//        BarChart.createSecondLevelTopic(docxDocument, "3.2.Monitoring results of high resolution data");
//        for(int i=0;i<H_code.size();i++) {
//            List<VegetationHealth> vegetationHealths_H = vegetationHealthServices.sqlSeeding(zone, H_code.get(i), year);
//            for (VegetationHealth vegetationHealth_h : vegetationHealths_H) {
//                //第三段的第二个小标题的内容
//                BarChart.insertPic(docxDocument, "C:\\Users\\sjs\\Desktop\\R-C.jpg");
//                BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation planting area");
//                BarChart.insertPic(docxDocument, "C:\\Users\\sjs\\Desktop\\R-C.jpg");
//                BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation health status");
//                //此处插入图表
//                String[] xAxisData1 = new String[]{"Health", "Normal", "Not-Health"};
//                Double h1 = vegetationHealth_h.getHealthy();
//                Double h2 = vegetationHealth_h.getNormal();
//                Double h3 = vegetationHealth_h.getNotHealthy();
//                Double[] yAxisData1 = new Double[]{h1, h2, h3};
//                BarChart.drawTable(docxDocument, xAxisData1, yAxisData1);
//                BarChart.setPicTitle(docxDocument, "Statistical data on vegetation health");
//                BarChart.createParagraphAndInsertWord(docxDocument, "" + BarChart.changeDate(vegetationHealth_h.getImageDate()) + ". Based on the monitoring results of high resolution satellite images, the area of healthy vegetation growth in " + vegetationHealth_h.getZone() + " region was " + vegetationHealth_h.getHealthy() + " km², accounting for " + BarChart.getDoubleNumber((vegetationHealth_h.getHealthy() / vegetationHealth_h.getTotalArea()) * 100) + "%. The area with normal vegetation growth was " + vegetationHealth_h.getNormal() + " km², accounting for " + BarChart.getDoubleNumber((vegetationHealth_h.getNormal() / vegetationHealth_h.getTotalArea()) * 100) + "%. The area of unhealthy vegetation growth was " + vegetationHealth_h.getNotHealthy() + " km², accounting for " + BarChart.getDoubleNumber((vegetationHealth_h.getNotHealthy() / vegetationHealth_h.getTotalArea()) * 100) + "%.");
//            }
//        }
//        //第四个标题
//        List<PlantingSuitability> plantingSuitabilities = plantingSuitabilityService.sqlSeeding(zone);
//        for (PlantingSuitability suitability : plantingSuitabilities) {
//            BarChart.createFirstLevelTopic(docxDocument,"4.Results of remote sensing monitoring of planting suitability");
//            //获取图片的url
//            String productCode1 = suitability.getProductCode1();
//            //第四个标题的内容
//            BarChart.insertPic(docxDocument,"C:\\Users\\sjs\\Desktop\\R-C.jpg");
//            BarChart.setPicTitle(docxDocument,"Spatial distribution data of planting suitability");
//            //此处插入图表
//            String[] xAxisData2 = new String[]{"Very Suitable", "Suitable", "Not Suitable"};
//            Double s1 = suitability.getVerySuitable();
//            Double s2 = suitability.getSuitable();
//            Double s3 = suitability.getNotSuitable();
//            Double[] yAxisData2 = new Double[]{s1, s2, s3};
//            BarChart.drawTable(docxDocument,xAxisData2,yAxisData2);
//            BarChart.setPicTitle(docxDocument,"Classification statistics of planting suitability");
//            BarChart.createParagraphAndInsertWord(docxDocument,"In "+suitability.getZone()+" region, the area of very suitable region was "+suitability.getVerySuitable()+" km², accounting for "+BarChart.getDoubleNumber((suitability.getVerySuitable()/suitability.getTotalArea())*100)+"%. The area of suitable grade was "+suitability.getSuitable()+" km², accounting for "+BarChart.getDoubleNumber((suitability.getSuitable()/suitability.getTotalArea())*100)+"%. The area of unsuitable area was "+suitability.getNotSuitable()+" km², accounting for "+BarChart.getDoubleNumber((suitability.getNotSuitable()/suitability.getTotalArea())*100)+"%.");
//        }
//        response.setCharacterEncoding("UTF-8");
//        response.setContentType("application/msword");
//        //文件名
//        String fileName = "Evaluation report of planting monitoring in ITBA Nature Reserve - V2.0.docx";
//        response.setHeader("Content-Disposition","attachment;fileName="+new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
//        ServletOutputStream responseOutputStream = response.getOutputStream();
//        docxDocument.write(responseOutputStream);
//        responseOutputStream.flush();
//        responseOutputStream.close();
//    }

}
