From 5c72b20bee11513c06cdfb30c52cd0a4016a7102 Mon Sep 17 00:00:00 2001
From: huangzhen <867217663@qq.com>
Date: 星期五, 20 十月 2023 15:56:52 +0800
Subject: [PATCH] 解决日报在linux上无法生成的问题

---
 src/main/java/com/gkhy/fourierSpecialGasMonitor/websocket/GasFluxWebsocketServer.java    |    2 +-
 src/main/resources/config/application-online-uat.yaml                                    |    5 +++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java |   12 ++++++++++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/DailyReportSchedule.java        |   37 ++++++++++++++++++++++++++++++-------
 src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java          |    2 +-
 5 files changed, 49 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/DailyReportSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/DailyReportSchedule.java
index 2086fb0..b22477b 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/DailyReportSchedule.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/DailyReportSchedule.java
@@ -1,6 +1,7 @@
 package com.gkhy.fourierSpecialGasMonitor.schedule;
 
 import com.alibaba.fastjson.JSON;
+import com.gkhy.fourierSpecialGasMonitor.Application;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.ForeignResultCode;
 import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
 import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException;
@@ -26,6 +27,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -39,6 +42,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.*;
 import java.lang.reflect.Field;
+import java.net.URL;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -98,18 +102,38 @@
         //加载文档
         XWPFDocument doc = null;
         try {
-            FileInputStream originalFileInputStream = new FileInputStream("src/main/resources/template/dailyReportTemplate.docx");
-            FileOutputStream copyFileOutputStream = new FileOutputStream("src/main/resources/temp/dailyReportTemplate.docx");
-            // 创建副本文件
+            ClassLoader classLoader = Application.class.getClassLoader();
+            InputStream originalFileInputStream = classLoader.getResourceAsStream("template/dailyReportTemplate.docx");
+            String copyFileUrl = reportFilePathConfig.getDcPath()+"temp/dailyReportTemplate.docx";
+            File file = new File(copyFileUrl);
+            if (!file.exists()){
+                try {
+                    // 获取文件所在的文件夹路径
+                    String folderPath = file.getParent();
+                    // 创建文件夹(包括父目录)
+                    File folder = new File(folderPath);
+                    if (!folder.exists()){
+                        folder.mkdirs();
+                    }
+                    file.createNewFile();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            FileOutputStream copyFileOutputStream = new FileOutputStream(copyFileUrl);
             IOUtils.copy(originalFileInputStream, copyFileOutputStream);
-            opcPackage = POIXMLDocument.openPackage("src/main/resources/temp/dailyReportTemplate.docx");
+            opcPackage = POIXMLDocument.openPackage(copyFileUrl);
+
+            //FileInputStream originalFileInputStream = new FileInputStream("src/main/resources/template/dailyReportTemplate.docx");
+            //FileOutputStream copyFileOutputStream = new FileOutputStream("src/main/resources/temp/dailyReportTemplate.docx");
+            //// 创建副本文件
+            //IOUtils.copy(originalFileInputStream, copyFileOutputStream);
+            //opcPackage = POIXMLDocument.openPackage("src/main/resources/temp/dailyReportTemplate.docx");
             doc = new XWPFDocument(opcPackage);
         } catch (IOException e) {
             e.printStackTrace();
         }
-
         Map<String, Object> map = dataMap(gasCategories);
-
         List<XWPFParagraph> paragraphList = doc.getParagraphs();
         for (XWPFParagraph par : paragraphList) {
             //获取段落的文本对象
@@ -173,7 +197,6 @@
                 drawLineChart(gasConcentrations, fileurl, series, title, gasCategories.get(i).getMolecularFormula(), i);
             }
         }
-
         //List<GasFlux> gasFluxes = gasFluxService.listYesterday();
         List<GasFlux> gasFluxes = gasFluxService.listYesterdayTenAmToSixPm();
         List<Integer> areaNum = gasFluxes.stream().map(GasFlux::getAreaId).distinct().collect(Collectors.toList());
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
index 57078f3..a8eafe3 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
@@ -43,7 +43,7 @@
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
 
-    @Scheduled(cron = "1 * * * * ?") // 每天凌晨执行
+    @Scheduled(cron = "0/1 * * * * ?") // 每秒执行一次
     @Async(value = "SocketTaskExecutor")
     public void gasConcentrationStatus() {
         GasConcentration gasConcentration = gasConcentrationService.getLastData();
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
index f9aedeb..dd91e79 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasCategoryServiceImpl.java
@@ -20,8 +20,16 @@
 import com.gkhy.fourierSpecialGasMonitor.service.GasCategoryService;
 import com.gkhy.fourierSpecialGasMonitor.utils.ThreadLocalUtil;
 import io.micrometer.core.instrument.util.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
@@ -31,11 +39,15 @@
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.locks.ReentrantLock;
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/websocket/GasFluxWebsocketServer.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/websocket/GasFluxWebsocketServer.java
index 18db060..e649fd1 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/websocket/GasFluxWebsocketServer.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/websocket/GasFluxWebsocketServer.java
@@ -88,7 +88,7 @@
      */
     @OnMessage
     public void onMessage(String message, Session session) {
-        log.info("收到来自窗口" + userId + "的信息:" + message);
+        //log.info("收到来自窗口" + userId + "的信息:" + message);
 
         if (StringUtils.isNotBlank(message)) {
             try {
diff --git a/src/main/resources/config/application-online-uat.yaml b/src/main/resources/config/application-online-uat.yaml
index 5d4a69f..e9824a4 100644
--- a/src/main/resources/config/application-online-uat.yaml
+++ b/src/main/resources/config/application-online-uat.yaml
@@ -63,6 +63,11 @@
     externalAccessHeader: Access-Token
     externalAccessKey: HG0f40036fe7420230808150035407
 
+reportfile:
+  path:
+    #基础路径
+    dcPath: /home/gkhy/upload/fourierSpecialgasMonitor/
+    urlRootPath: /upload/
 file:
     path:
       #基础路径

--
Gitblit v1.9.2