Compare commits

...

No commits in common. "main" and "cf9644ef29aa0344c8f4ab71d0d5b93712f702d8" have entirely different histories.

21 changed files with 667 additions and 50 deletions

BIN
CreateWordXDDFChart.docx Normal file

Binary file not shown.

View File

@ -18,23 +18,15 @@
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
@ -93,6 +85,9 @@
<artifactId>ruoyi-generator</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.util.ObjectUtils;
import java.time.LocalDate;
/**
@ -23,6 +23,7 @@ public class RuoYiApplication
public static void main(String[] args)
{
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println();

View File

@ -1,41 +1,31 @@
package com.ruoyi.web.controller.shate;
import ch.qos.logback.core.pattern.color.MagentaCompositeConverter;
import com.mysql.cj.x.protobuf.MysqlxResultset;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.file.UrlFileUpload;
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.IDateUploadService;
import com.sun.jna.platform.win32.OaIdl;
import com.sun.jna.platform.win32.ShTypes;
import com.ruoyi.system.service_shate.IPlantingSuitabilityService;
import com.ruoyi.system.service_shate.ISeedingSuccessService;
import com.ruoyi.system.service_shate.IVegetationHealthServices;
import io.swagger.annotations.Api;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import oshi.driver.mac.net.NetStat;
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.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.*;
/**
* @Author: JinSheng Song
@ -47,9 +37,16 @@ import java.util.concurrent.TimeUnit;
public class DateUploadController
{
@Resource
IPlantingSuitabilityService plantingSuitabilityService;
@Resource
IVegetationHealthServices vegetationHealthServices;
@Resource
private IDateUploadService service;
@Resource
ISeedingSuccessService seedingSuccessService;
private String FilePathName;
private String ExePathName;
@ -59,12 +56,23 @@ public class DateUploadController
private String ShpPaths;
@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();
@ -78,7 +86,7 @@ public class DateUploadController
{
if (name.equals("1"))
{
name="M_Heal";
name="M_Heal%";
}
else if(name.equals("2"))
{
@ -532,5 +540,133 @@ public class DateUploadController
e.printStackTrace();
}
}
/**
* 导出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())) +" hm², the vegetation survival area was "+seedingSuccessRate.getSeedingSuccessArea()+" hm², 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\\xkrs\\Desktop\\pic\\2.png");
BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation planting area");
BarChart.insertPic(docxDocument, "C:\\Users\\xkrs\\Desktop\\pic\\1.png");
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()+" hm², accounting for "+BarChart.getDoubleNumber((vegetationHealth_m.getHealthy()/vegetationHealth_m.getTotalArea())*100)+"%. The area with normal vegetation growth was "+vegetationHealth_m.getNormal()+" hm², accounting for "+BarChart.getDoubleNumber((vegetationHealth_m.getNormal()/vegetationHealth_m.getTotalArea())*100)+"%. The area of unhealthy vegetation growth was "+vegetationHealth_m.getNotHealthy()+" hm², 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\\xkrs\\Desktop\\pic\\1.png");
BarChart.setPicTitle(docxDocument, "Spatial distribution data of vegetation planting area");
BarChart.insertPic(docxDocument, "C:\\Users\\xkrs\\Desktop\\pic\\2.png");
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() + " hm², accounting for " + BarChart.getDoubleNumber((vegetationHealth_h.getHealthy() / vegetationHealth_h.getTotalArea()) * 100) + "%. The area with normal vegetation growth was " + vegetationHealth_h.getNormal() + " hm², accounting for " + BarChart.getDoubleNumber((vegetationHealth_h.getNormal() / vegetationHealth_h.getTotalArea()) * 100) + "%. The area of unhealthy vegetation growth was " + vegetationHealth_h.getNotHealthy() + " hm², 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\\xkrs\\Desktop\\pic\\1.png");
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()+" hm², accounting for "+BarChart.getDoubleNumber((suitability.getVerySuitable()/suitability.getTotalArea())*100)+"%. The area of suitable grade was "+suitability.getSuitable()+" hm², accounting for "+BarChart.getDoubleNumber((suitability.getSuitable()/suitability.getTotalArea())*100)+"%. The area of unsuitable area was "+suitability.getNotSuitable()+" hm², 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();
}
}

View File

@ -10,6 +10,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@ -34,6 +35,14 @@ public class LandUseController {
@RequestMapping(value = "/SelectSeeding",method = {RequestMethod.POST})
public AjaxResult SelectSeeding(@RequestBody HelpLandUse user)
{
// LocalDate tomorrow = LocalDate.of(2022,10,2);
// LocalDate today = LocalDate.now();
//
// if(tomorrow.isAfter(today)==false)
// {
// return AjaxResult.error("软件授权日期已过,请联系管理人员!");
// }
if(user.getLandUses().length==0)
{
List<LandUse> Seeding= Service.sqlSeeding1(user.getZone(),user.getYear());

View File

@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
/**
@ -36,6 +37,14 @@ public class PlantingSuitabilityController
@RequestMapping(value = "/SelectSeeding",method = {RequestMethod.GET})
public AjaxResult SelectSeeding(String zone)
{
// LocalDate tomorrow = LocalDate.of(2022,10,2);
// LocalDate today = LocalDate.now();
//
// if(tomorrow.isAfter(today)==false)
// {
// return AjaxResult.error("软件授权日期已过,请联系管理人员!");
// }
List<PlantingSuitability> Seeding= Service.sqlSeeding(zone);
Double Number=0.0;
Double Max=0.0;

View File

@ -6,15 +6,14 @@ spring:
driver-class-name: org.postgresql.Driver
druid:
master:
url: jdbc:postgresql://rs-middleware-postgres:5432/itba?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: gis
password: AQBSdU5bT27AKxAAvKoWQdGpSuNRCHjC4B8DVA
# url: jdbc:postgresql://rs-middleware-postgres:5432/itba?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
# username: gis
# password: AQBSdU5bT27AKxAAvKoWQdGpSuNRCHjC4B8DVA
#url: jdbc:postgresql://192.168.2.9:5432/saudiArabia?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
#url: jdbc:postgresql://121.36.229.60:5432/saudiArabia?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
#username: sjs
#password: song5325
url: jdbc:postgresql://121.36.229.60:5432/saudiArabia?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: sjs
password: song5325
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -60,16 +60,16 @@ spring:
# redis 配置
redis:
# 地址
host: rs-middleware-redis
#host: localhost
#host: rs-middleware-redis
host: localhost
# 端口默认为6379
#port: 14096
port: 6379
# 数据库索引
database: 0
# 密码
password: SenseTime@2019
#password: sdust2020
#password: SenseTime@2019
password: sdust2020
# 连接超时时间
timeout: 10s
lettuce:

View File

@ -140,6 +140,24 @@
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<!--<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>-->
<!-- <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>11.0.2</version>
</dependency>
-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency>
</dependencies>

View File

@ -0,0 +1,166 @@
package com.ruoyi.common.utils;
import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule;
/**
* @Description: poi工具类
* @Date: 2022/10/11
* @Author shuaihua zang
*/
public class BarChart
{
public static void drawTable(XWPFDocument document, String[] xAxisData,Double[] yAxisData) throws Exception {
/*int numOfPoints = categories.length;
String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
String valuesDataRangeA = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1));
String valuesDataRangeB = chart.formatRange(new CellRangeAddress(1, numOfPoints, 2, 2));
XDDFDataSource<String> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);
XDDFNumericalDataSource<Double> valuesDataA = XDDFDataSourcesFactory.fromArray(valuesA, valuesDataRangeA, 1);
XDDFNumericalDataSource<Double> valuesDataB = XDDFDataSourcesFactory.fromArray(valuesB, valuesDataRangeB, 2);*/
// 创建chart图表对象,抛出异常
XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
// 图表相关设置
chart.setTitleText(""); // 图表标题
chart.setTitleOverlay(false); // 图例是否覆盖标题
//XDDFChartLegend legend = chart.getOrAddLegend();
//legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右
// X轴(分类轴)相关设置
XDDFCategoryAxis xAxis =chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置
xAxis.setTitle(""); // x轴标题
XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据
// Y轴(值轴)相关设置
//chart.createValueAxis(AxisPosition.LEFT);
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置
yAxis.setTitle("Area(hm²)"); // Y轴标题
yAxis.setCrossBetween(AxisCrossBetween.BETWEEN); // 设置图柱的位置:BETWEEN居中
XDDFNumericalDataSource<Double> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据
ChartTypes chartTypes = ChartTypes.BAR;
// 创建柱状图对象
XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(chartTypes, xAxis, yAxis);
barChart.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR
barChart.setVaryColors(false);
// 加载柱状图数据集
XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);
barSeries.setTitle(" ", null); // 图例标题
// 绘制柱状图
chart.plot(barChart);
}
//插入图片
public static void insertPic(XWPFDocument document,String fileAddress)
{
XWPFParagraph Paragraph = document.createParagraph();
Paragraph.setAlignment(ParagraphAlignment.CENTER);//对齐方式
XWPFRun run = Paragraph.createRun();
try (FileInputStream is = new FileInputStream
(fileAddress)) {
run.addPicture(is, XWPFDocument.PICTURE_TYPE_PNG,
fileAddress,
Units.toEMU(185), Units.toEMU(223)); // 200x200 pixels
} catch (Exception e) {
e.printStackTrace();
}
}
//创建段落并插入文字
public static void createParagraphAndInsertWord(XWPFDocument document,String date) {
XWPFParagraph Paragraph = document.createParagraph();
//设置行距固定值20磅
//setLineSpace(Paragraph,30);
Paragraph.setAlignment(ParagraphAlignment.LEFT);//对齐方式
//paragraph_2.setFirstLineIndent(400);//首行缩进
XWPFRun run = Paragraph.createRun();
run.setText(date);
run.setBold(false);//加粗
run.setFontSize(12);
run.setFontFamily("Times New Roman");
}
//创建一级标题的内容
public static void createFirstLevelTopic(XWPFDocument document,String date)
{
XWPFParagraph Paragraph = document.createParagraph();
Paragraph.setAlignment(ParagraphAlignment.LEFT);//对齐方式
//BarChart.setLineSpace(Paragraph,30);
XWPFRun run = Paragraph.createRun();
run.setText(date);
run.setBold(true);//加粗
run.setFontSize(16);
run.setFontFamily("Times New Roman");
}
//创建二级标题的内容
public static void createSecondLevelTopic(XWPFDocument document,String date)
{
XWPFParagraph Paragraph = document.createParagraph();
Paragraph.setAlignment(ParagraphAlignment.LEFT);//对齐方式
//BarChart.setLineSpace(Paragraph,30);
XWPFRun run = Paragraph.createRun();
run.setText(date);
run.setBold(true);//加粗
run.setFontSize(12);
run.setFontFamily("Times New Roman");
}
//创建图片标题的内容
public static void setPicTitle(XWPFDocument document,String date)
{
XWPFParagraph Paragraph = document.createParagraph();
Paragraph.setAlignment(ParagraphAlignment.CENTER);//对齐方式
//BarChart.setLineSpace(Paragraph,30);
XWPFRun run = Paragraph.createRun();
run.setText(date);
run.setBold(true);//加粗
run.setFontSize(10);
run.setFontFamily("Times New Roman");
}
//设置题目
public static void setTitle(XWPFDocument document,String date)
{
XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);
XWPFRun runTitle = title.createRun();
runTitle.setText(date);
runTitle.setBold(false);
runTitle.setFontSize(16);
runTitle.setFontFamily("Times New Roman");
}
//设置行间距
public static void setLineSpace(XWPFParagraph titleParagraph,int size) {
CTP ctp = titleParagraph.getCTP();
CTPPr ppr = ctp.isSetPPr() ? ctp.getPPr() : ctp.addNewPPr();
CTSpacing spacing = ppr.isSetSpacing()? ppr.getSpacing() : ppr.addNewSpacing();
spacing.setAfter(BigInteger.valueOf(0));
spacing.setBefore(BigInteger.valueOf(0));
//设置行距类型为 EXACT
spacing.setLineRule(STLineSpacingRule.EXACT);
//1磅数是20
spacing.setLine(BigInteger.valueOf(size*20));
}
public static String getDoubleNumber(Double d)
{
DecimalFormat df = new DecimalFormat("#.00");
return df.format(d);
}
public static String changeDate(String date)
{
String s1 = date.substring(0, 4);
String s2 = date.substring(4, 6);
String s3 = date.substring(6, date.length());
return s1+"-"+s2+"-"+s3;
}
}

View File

@ -0,0 +1,108 @@
package com.ruoyi.common.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlToken;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
/**
* @Author shuaihua zang
* @date 2022/10/8
* word导出图片所需的工具类
*/
public class CustomXWPFDocument extends XWPFDocument{
public CustomXWPFDocument(InputStream in) throws IOException {
super(in);
}
public CustomXWPFDocument() {
super();
}
public CustomXWPFDocument(OPCPackage pkg) throws IOException {
super(pkg);
}
/**
* @param id
* @param width
*
* @param height
*
* @param paragraph
* 段落
*/
public void createPicture(int id, int width, int height,
XWPFParagraph paragraph) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
String blipId = super.getRelationId(super.getAllPictures().get(id));
CTInline inline = paragraph.createRun().getCTR().addNewDrawing()
.addNewInline();
String picXml = ""
+ "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:nvPicPr>" + " <pic:cNvPr id=\""
+ id
+ "\" name=\"Generated\"/>"
+ " <pic:cNvPicPr/>"
+ " </pic:nvPicPr>"
+ " <pic:blipFill>"
+ " <a:blip r:embed=\""
+ blipId
+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
+ " <a:stretch>"
+ " <a:fillRect/>"
+ " </a:stretch>"
+ " </pic:blipFill>"
+ " <pic:spPr>"
+ " <a:xfrm>"
+ " <a:off x=\"0\" y=\"0\"/>"
+ " <a:ext cx=\""
+ width
+ "\" cy=\""
+ height
+ "\"/>"
+ " </a:xfrm>"
+ " <a:prstGeom prst=\"rect\">"
+ " <a:avLst/>"
+ " </a:prstGeom>"
+ " </pic:spPr>"
+ " </pic:pic>"
+ " </a:graphicData>" + "</a:graphic>";
inline.addNewGraphic().addNewGraphicData();
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
xe.printStackTrace();
}
inline.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("图片名称");
docPr.setDescr("描述信息");
}
}

View File

@ -0,0 +1,146 @@
package com.ruoyi.common.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringFilterUtil {
/** 过滤字符串去除[]中的内容包括[]
* @param input
* @return
*/
public static String filterForBetween(String input, char startChar, char endChar) {
int head = input.indexOf(startChar); // 标记第一个使用左括号的位置
if (head == -1) {
return input; // 如果context中不存在括号什么也不做直接跑到函数底端返回初值str
} else {
int next = head + 1; // 从head+1起检查每个字符
int count = 1; // 记录括号情况
do {
if (input.charAt(next) == startChar)
count++;
else if (input.charAt(next) == endChar)
count--;
next++; // 更新即将读取的下一个字符的位置
if (count == 0) // 已经找到匹配的括号
{
String temp = input.substring(head, next); // 将两括号之间的内容及括号提取到temp中
input = input.replace(temp, ""); // 用空内容替换复制给context
head = input.indexOf(endChar); // 找寻下一个左括号
next = head + 1; // 标记下一个左括号后的字符位置
count = 1; // count的值还原成1
}
} while (head != -1); // 如果在该段落中找不到左括号了就终止循环
}
return input; // 返回更新后的context
}
/**
* str.replaceAll("\\s*", ""); //s* 可以匹配空格制表符换页符等空白字符的其中任意一个
* str.replaceAll(" +",""); //去掉所有空格包括首尾中间
* str.replaceAll(" ", ""); //去掉所有空格包括首尾中间
* str.replace(" ",""); //去除所有空格包括首尾中间
* str.trim(); //去掉首尾空格
* @param inputStr
* @return
*/
public static String filterForBlank(String inputStr){
if(inputStr.length()==0||inputStr==null) {
return "";
}
return inputStr.replace(" ", "");
}
/** 过滤字符串只允许字母和数字
* @param inputStr
* @return
*/
public static String filterForChars(String inputStr) {
if(inputStr.length()==0||inputStr==null) {
return "";
}
String regEx = "[^a-zA-Z0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputStr);
return m.replaceAll("").trim();
}
/**过滤字符串替换特殊字符
* <pre>
* StringFilterUtil.filterForSpechars(null)
* </pre>
* @param inputStr
* @return
*/
public static String filterForSpechars(String inputStr) {
if(inputStr.length()==0||inputStr==null) {
return "";
}
String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputStr);
return m.replaceAll("").trim();
}
/**过滤字符串去除html标记
* <pre>
* StringFilterUtil.filterForHtml(null) = ""
* StringFilterUtil.filterForHtml("") = ""
* StringFilterUtil.filterForHtml("<td>content</td>") = "content"
* </pre>
* @param inputStr
* @return
*/
public static String filterForHtml(String inputStr) {
if(inputStr.length()==0||inputStr==null) {
return "";
}
String regEx = "<.+?>";
Pattern p = Pattern.compile(regEx, Pattern.DOTALL);
Matcher m = p.matcher(inputStr);
return m.replaceAll("");
}
/**过滤字符串查询href条件
* <pre>
* StringFilterUtil.filterForHref(null)
* </pre>
* @param inputStr
* @return
*/
public static String filterForHref(String inputStr) {
if(inputStr.length()==0||inputStr==null) {
return "";
}
String regEx = "href=\"(.+?)\"";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputStr);
if(m.find()) {
return m.group(1);
}else {
return "";
}
}
/**过滤字符串匹配http://地址//获取Url地址
* @param inputStr
* @return
* 备注地址后需要以空格结束
*/
public static String filterForUrl(String inputStr) {
if(inputStr.length()==0||inputStr==null) {
return "";
}
String regEx = "(http://|https://){1}[\\w\\.\\-/:]+";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(inputStr);
StringBuffer buffer = new StringBuffer();
while(m.find()){
buffer.append(m.group());
buffer.append("\r\n");
}
return buffer.toString();
}
}

View File

@ -24,6 +24,8 @@ public class SeedingSuccessRate extends SysSTEntity
private Double seedingSuccessArea;
private Double seedingSuccess;
private String imageDate;
@ -141,6 +143,7 @@ public class SeedingSuccessRate extends SysSTEntity
this.productCode3 = productCode3;
this.createdBy = createdBy;
this.createdTime = createdTime;
}
public String getYear() {

View File

@ -21,4 +21,8 @@ public interface VegetationHealthMapper
List<VegetationHealth> sqlYear();
Integer insertSeeding(VegetationHealth health);
List<VegetationHealth> sqlInfo(@Param("zone")String zone,
@Param("year")String year);
}

View File

@ -20,4 +20,7 @@ public interface ISeedingSuccessService {
Integer InsertSeeding2(SeedingSuccessRate eastVO);
Integer Delete(String zone,String imageDate,String name);
}

View File

@ -15,6 +15,8 @@ public interface IVegetationHealthServices {
List<VegetationHealth> sqlSeeding(String zone,String name,String year);
List<VegetationHealth> sqlYear();
List<VegetationHealth> sqlInfo(String zone,String year);
Integer insertSeeding(VegetationHealth health);
}

View File

@ -22,6 +22,7 @@ public class SeedingSuccessServiceimpl implements ISeedingSuccessService
public List<SeedingSuccessRate> sqlSeeding(String zone, String year)
{
List<SeedingSuccessRate> vaue =mapper.sqlSeeding(zone,year);
return vaue;
}

View File

@ -30,8 +30,15 @@ public class VegetationHealthServiceimpl implements IVegetationHealthServices
return mapper.sqlYear();
}
@Override
public List<VegetationHealth> sqlInfo(String zone,String year) {
return mapper.sqlInfo(zone,year);
}
@Override
public Integer insertSeeding(VegetationHealth health) {
return mapper.insertSeeding(health);
}
}

View File

@ -238,7 +238,7 @@
</delete>
<delete id="seedSuccess">
DELETE FROM #{seed_Success}
DELETE FROM "seed_Success"
WHERE zone = #{zone}
and image_date =#{imageDate}
</delete>

View File

@ -11,7 +11,7 @@
<result property="seedingSuccessArea" column="Seeding_success_area"/>
<result property="seedingSuccess" column="seeding_success"/>
<result property="imageDate" column="Image_date"/>
<result property="productCode1" column="Product_code1"/>
<result property="productCode1" column="productCode1"/>
<result property="productCode2" column="Product_code2"/>
<result property="productCode3" column="Product_code3"/>
<result property="year" column="year1"/>

View File

@ -77,6 +77,16 @@
<select id="sqlYear" resultMap="RM_Seeding">
SELECT distinct year1,ZONE FROM healthy
</select>
<select id="sqlInfo" resultMap="RM_Seeding">
select * from healthy
where 1=1
<if test="zone!= null and zone !=''">
AND zone = #{zone}
</if>
<if test="year!= null and year !=''">
AND year1=#{year}
</if>
</select>
</mapper>