Przeglądaj źródła

修改上传文件路径为相对路径

lhy 9 miesięcy temu
rodzic
commit
af086479ea
15 zmienionych plików z 218 dodań i 68 usunięć
  1. 39 0
      industry-system/industry-da/src/main/java/com/example/opc_da/config/FilePathConfig.java
  2. 18 0
      industry-system/industry-da/src/main/java/com/example/opc_da/config/InterceptorConfig.java
  3. 11 0
      industry-system/industry-da/src/main/java/com/example/opc_da/config/OpcuaClientConfig.java
  4. 17 17
      industry-system/industry-da/src/main/java/com/example/opc_da/controller/ReportTableController.java
  5. 20 5
      industry-system/industry-da/src/main/java/com/example/opc_da/controller/SceneController.java
  6. 2 2
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/CollectorServiceImpl.java
  7. 12 8
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/DeviceLedgerServiceImpl.java
  8. 10 4
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/FaultManageServiceImpl.java
  9. 7 2
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/FileServiceImpl.java
  10. 12 5
      industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/PlaybackPlanServiceImpl.java
  11. 42 9
      industry-system/industry-da/src/main/java/com/example/opc_da/util/FileUtil.java
  12. 1 1
      industry-system/industry-da/src/main/java/com/example/opc_da/validate/dataSource/KeyStoreLoader.java
  13. 9 5
      industry-system/industry-da/src/main/resources/application-dev.yml
  14. 9 5
      industry-system/industry-da/src/main/resources/application-prod.yml
  15. 9 5
      industry-system/industry-da/src/main/resources/application-test.yml

+ 39 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/config/FilePathConfig.java

@@ -0,0 +1,39 @@
+package com.example.opc_da.config;
+
+import com.example.opc_da.util.FileUtil;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Data
+public class FilePathConfig {
+
+    @Value("${file.path}")
+    private String filePath;
+
+    @Value("${file.commonPath}")
+    private String fileCommonPath;
+
+    @Value("${file.pdf-delete-days:1}")
+    private Integer pdfDeleteDays;
+
+
+    /**
+     * 添加项目同级目录的filePath路径
+     *
+     * @return
+     */
+    public String getFilePathAddRootPath() {
+        return FileUtil.getUploadFileRootPath(this.getFilePath());
+    }
+
+    /**
+     * 添加项目同级目录的fileCommonPath路径
+     *
+     * @return
+     */
+    public String getFileCommonPathAddRootPath() {
+        return FileUtil.getUploadFileRootPath(this.getFileCommonPath());
+    }
+}

+ 18 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/config/InterceptorConfig.java

@@ -1,16 +1,24 @@
 package com.example.opc_da.config;
 
+import com.example.opc_da.util.FileUtil;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ResourceLoader;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
+import javax.annotation.Resource;
+
 /**
  * 拦截器配置
  */
 @Configuration
 public class InterceptorConfig implements WebMvcConfigurer {
 
+    @Resource
+    private FilePathConfig filePathConfig;
+
     //将拦截器bean化
     @Bean
     public Interceptors interceptors(){
@@ -96,4 +104,14 @@ public class InterceptorConfig implements WebMvcConfigurer {
                 .excludePathPatterns("/favicon.ico")
         ;
     }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        // 添加自定义的静态资源路径
+        registry.addResourceHandler("/**")
+                .addResourceLocations("classpath:/static/")
+                .addResourceLocations("file:" + filePathConfig.getFilePathAddRootPath())
+                .addResourceLocations("file:" + filePathConfig.getFileCommonPathAddRootPath()
+            );
+    }
 }

+ 11 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/config/OpcuaClientConfig.java

@@ -1,5 +1,6 @@
 package com.example.opc_da.config;
 
+import com.example.opc_da.util.FileUtil;
 import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
@@ -46,4 +47,14 @@ public class OpcuaClientConfig {
 
     @Value("${opcua.client.cert.keystorePassword}")
     private String certKeystorePassword;
+
+
+    /**
+     * 添加项目同级目录的filePath路径
+     *
+     * @return
+     */
+    public String getCertPathAddRootPath() {
+        return FileUtil.getUploadFileRootPath(this.getCertPath());
+    }
 }

+ 17 - 17
industry-system/industry-da/src/main/java/com/example/opc_da/controller/ReportTableController.java

@@ -16,9 +16,9 @@ import com.example.opc_common.util.Result;
 import com.example.opc_common.util.XlsxToPdfUtil;
 import com.example.opc_da.annotation.WebLog;
 import com.example.opc_da.base.BaseController;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.service.ReportTableService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -34,11 +34,8 @@ import java.util.Map;
 @Slf4j
 public class ReportTableController extends BaseController {
 
-    @Value("${file.path}")
-    private String filePath;
-
-    @Value("${file.pdf-delete-days:1}")
-    private Integer pdfDeleteDays;
+    @Resource
+    private FilePathConfig filePathConfig;
 
     @Resource
     private ReportTableService reportTableService;
@@ -186,7 +183,7 @@ public class ReportTableController extends BaseController {
         TableTemplate tableTemplateEntity = reportTableService.getTableTemplateEntityById(id);
         Result result = reportTableService.delTableTemplateById(id, isDelete);
         // 记录业务操作日志
-        insertOperationLog(ModelEnum.TABLETEMPLATE,OperationEnum.DELETE,tableTemplateEntity.getTemplateName() + "@" + id, result.getCode());
+        insertOperationLog(ModelEnum.TABLETEMPLATE, OperationEnum.DELETE, tableTemplateEntity.getTemplateName() + "@" + id, result.getCode());
         return result;
     }
 
@@ -266,7 +263,7 @@ public class ReportTableController extends BaseController {
         ReportTable reportTableNoDataEntity = reportTableService.getReportTableNoDataEntityById(id);
         Result result = reportTableService.delReportTableById(id);
         // 记录业务操作日志
-        insertOperationLog(ModelEnum.RUNSETUP,OperationEnum.DELETE,reportTableNoDataEntity.getReportTableName() + "@" + id, result.getCode());
+        insertOperationLog(ModelEnum.RUNSETUP, OperationEnum.DELETE, reportTableNoDataEntity.getReportTableName() + "@" + id, result.getCode());
         return result;
     }
 
@@ -288,14 +285,14 @@ public class ReportTableController extends BaseController {
         List<ReportTable> reportTableNoDataEntityList = reportTableService.getReportTableNoDataEntityByIds(idList);
         Result result = reportTableService.delChReportTableList(idList);
         String content = "";
-        for (ReportTable reportTable: reportTableNoDataEntityList) {
+        for (ReportTable reportTable : reportTableNoDataEntityList) {
             content += ";" + reportTable.getReportTableName() + "@" + reportTable.getId();
         }
-        if(content.length() > 0){
+        if (content.length() > 0) {
             content = content.substring(1);
         }
         // 记录业务操作日志
-        insertOperationLog(ModelEnum.RUNSETUP,OperationEnum.DELETE, content, result.getCode());
+        insertOperationLog(ModelEnum.RUNSETUP, OperationEnum.DELETE, content, result.getCode());
         return result;
     }
 
@@ -330,12 +327,12 @@ public class ReportTableController extends BaseController {
         setBeginTime();
         // 刷新采集器
         Result result = reportTableService.runAutoTableById(id, 1);
-        if(StrUtil.isEmpty(reportTableName)){
+        if (StrUtil.isEmpty(reportTableName)) {
             ReportTable reportTableNoDataEntity = reportTableService.getReportTableNoDataEntityById(id);
             reportTableName = reportTableNoDataEntity.getReportTableName();
         }
         // 记录业务操作日志
-        insertOperationLog(ModelEnum.RUNSETUP,OperationEnum.RUN,reportTableName + "@" + id, result.getCode());
+        insertOperationLog(ModelEnum.RUNSETUP, OperationEnum.RUN, reportTableName + "@" + id, result.getCode());
         return result;
     }
 
@@ -355,12 +352,12 @@ public class ReportTableController extends BaseController {
         setBeginTime();
         // 刷新采集器
         Result result = reportTableService.runAutoTableById(id, 0);
-        if(StrUtil.isEmpty(reportTableName)){
+        if (StrUtil.isEmpty(reportTableName)) {
             ReportTable reportTableNoDataEntity = reportTableService.getReportTableNoDataEntityById(id);
             reportTableName = reportTableNoDataEntity.getReportTableName();
         }
         // 记录业务操作日志
-        insertOperationLog(ModelEnum.RUNSETUP,OperationEnum.STOPIT,reportTableName + "@" + id, result.getCode());
+        insertOperationLog(ModelEnum.RUNSETUP, OperationEnum.STOPIT, reportTableName + "@" + id, result.getCode());
         return result;
     }
 
@@ -475,10 +472,12 @@ public class ReportTableController extends BaseController {
     @PostMapping("/xlsToPdf")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.RUNSETUP, OperationEnum = OperationEnum.UPLOAD)
     public Result xlsToPdf(PageSetupEntity pageSetupEntity) {
+        String filePath = filePathConfig.getFilePathAddRootPath();
+        Integer pdfDeleteDays = filePathConfig.getPdfDeleteDays();
         String fileName = XlsxToPdfUtil.convert(pageSetupEntity, filePath);
         try {
             XlsxToPdfUtil.deleteFileDate(FileUtil.file(filePath + fileName).getParentFile(), pdfDeleteDays);
-        }catch (Exception e){
+        } catch (Exception e) {
             log.error("清理" + pdfDeleteDays + "天前的pdf打印临时文件失败", e);
         }
         return Result.ok(fileName);
@@ -501,12 +500,13 @@ public class ReportTableController extends BaseController {
 
     /**
      * 通过报表id获取报表、用户组、用户关系(分享功能)
+     *
      * @param reportTableId 报表id
      * @return
      */
     @GetMapping("/getTableUserGroupUserList")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.RUNSETUP, OperationEnum = OperationEnum.SELECT)
-    public Result getTableUserGroupUserList(String reportTableId){
+    public Result getTableUserGroupUserList(String reportTableId) {
         if (Blank.isEmpty(reportTableId)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "reportTableId不能为空");
         }

+ 20 - 5
industry-system/industry-da/src/main/java/com/example/opc_da/controller/SceneController.java

@@ -6,11 +6,11 @@ import com.example.opc_common.entity.FileEntity;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.service.DeviceLedgerService;
 import com.example.opc_da.service.SceneService;
 import com.example.opc_da.util.FileUtil;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -25,11 +25,11 @@ public class SceneController {
 
     private final SceneService sceneService;
 
-    @Value("${file.path}")
-    private String uploadFilePath;
+    private final FilePathConfig filePathConfig;
 
     /**
      * 获取设备树
+     *
      * @return
      */
     @GetMapping("getDeviceLedgerTree")
@@ -39,6 +39,7 @@ public class SceneController {
 
     /**
      * 根据场景名称查询数量
+     *
      * @param sceneName
      * @return
      */
@@ -52,6 +53,7 @@ public class SceneController {
 
     /**
      * 新建场景
+     *
      * @param files
      * @param sceneName
      * @param imgs
@@ -73,8 +75,9 @@ public class SceneController {
             array = JSONUtil.parseArray(imgs);
         }
         if (Blank.isNotEmpty(files) || files.length > 0) {
+            String uploadFilePath = filePathConfig.getFilePathAddRootPath();
             List<FileEntity> fileList = FileUtil.fileManyUpload(uploadFilePath, files);
-            for (FileEntity file: fileList) {
+            for (FileEntity file : fileList) {
                 array.add(file.getSaveFileName());
             }
         }
@@ -84,6 +87,7 @@ public class SceneController {
 
     /**
      * 获取所有场景
+     *
      * @return
      */
     @GetMapping("getAllScene")
@@ -93,6 +97,7 @@ public class SceneController {
 
     /**
      * 获取设备
+     *
      * @param ids
      * @return
      */
@@ -106,6 +111,7 @@ public class SceneController {
 
     /**
      * 查询设备点位
+     *
      * @param deviceLedgerId
      * @param itemName
      * @return
@@ -120,6 +126,7 @@ public class SceneController {
 
     /**
      * 保存点位配置
+     *
      * @param sceneId
      * @param imgId
      * @param config
@@ -135,6 +142,7 @@ public class SceneController {
 
     /**
      * 获取单个场景
+     *
      * @param sceneId
      * @return
      */
@@ -148,6 +156,7 @@ public class SceneController {
 
     /**
      * 修改场景
+     *
      * @param files
      * @param imgs
      * @param sceneName
@@ -171,8 +180,9 @@ public class SceneController {
             array = JSONUtil.parseArray(imgs);
         }
         if (Blank.isNotEmpty(files) || files.length > 0) {
+            String uploadFilePath = filePathConfig.getFilePathAddRootPath();
             List<FileEntity> fileList = FileUtil.fileManyUpload(uploadFilePath, files);
-            for (FileEntity file: fileList) {
+            for (FileEntity file : fileList) {
                 array.add(file.getSaveFileName());
             }
         }
@@ -181,6 +191,7 @@ public class SceneController {
 
     /**
      * 删除场景
+     *
      * @param sceneId
      * @return
      */
@@ -194,17 +205,20 @@ public class SceneController {
 
     /**
      * 上传素材
+     *
      * @param file
      * @return
      */
     @RequestMapping("uploadImg")
     public Result uploadImg(@RequestParam("file") MultipartFile file) {
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         FileEntity entity = FileUtil.uploadOneFile(uploadFilePath, file);
         return Result.ok(sceneService.uploadOneFile(entity.getSaveFileName()));
     }
 
     /**
      * 查询所有素材
+     *
      * @return
      */
     @GetMapping("getAllSceneImg")
@@ -214,6 +228,7 @@ public class SceneController {
 
     /**
      * 删除素材
+     *
      * @param id
      * @return
      */

+ 2 - 2
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/CollectorServiceImpl.java

@@ -178,7 +178,7 @@ public class CollectorServiceImpl implements CollectorService {
         List<Integer> itemGroupIds = JSONUtil.parseArray(collector.getItemJson()).stream().map(obj -> JSONUtil.parseObj(obj).getInt("itemGroupId")).collect(Collectors.toList());
         // 查询采集项
         List<Map<String, Object>> items = collectorDao.getItemNameByGroupId(itemGroupIds);
-        Path serverKeyStore = KeyStoreLoader.getPfxPath(opcuaClientConfig.getCertPath(), opcuaClientConfig.getCertAlias());
+        Path serverKeyStore = KeyStoreLoader.getPfxPath(opcuaClientConfig.getCertPathAddRootPath(), opcuaClientConfig.getCertAlias());
         String certificatePemPath = KeyStoreLoader.getCertificatePemPath(serverKeyStore.toFile().getAbsolutePath());
         String privatePemPath = KeyStoreLoader.getPrivatePemPath(serverKeyStore.toFile().getAbsolutePath());
         json.set("input", ClientInfoUtil.createInput(param, items, Convert.toStr(map.get("measurement")),
@@ -222,7 +222,7 @@ public class CollectorServiceImpl implements CollectorService {
         List<Integer> itemGroupIds = JSONUtil.parseArray(collector.getItemJson()).stream().map(obj -> JSONUtil.parseObj(obj).getInt("itemGroupId")).collect(Collectors.toList());
         // 查询采集项
         List<Map<String, Object>> items = collectorDao.getItemNameByGroupId(itemGroupIds);
-        Path serverKeyStore = KeyStoreLoader.getPfxPath(opcuaClientConfig.getCertPath(), opcuaClientConfig.getCertAlias());
+        Path serverKeyStore = KeyStoreLoader.getPfxPath(opcuaClientConfig.getCertPathAddRootPath(), opcuaClientConfig.getCertAlias());
         String certificatePemPath = KeyStoreLoader.getCertificatePemPath(serverKeyStore.toFile().getAbsolutePath());
         String privatePemPath = KeyStoreLoader.getPrivatePemPath(serverKeyStore.toFile().getAbsolutePath());
         json.set("input", ClientInfoUtil.createInput(param, items, Convert.toStr(map.get("measurement")),

+ 12 - 8
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/DeviceLedgerServiceImpl.java

@@ -7,16 +7,17 @@ import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.DateUtil;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.dao.DeviceLedgerDao;
 import com.example.opc_da.service.DeviceLedgerService;
 import com.example.opc_da.util.FileUtil;
 import com.example.opc_da.util.QueryServiceUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -30,8 +31,8 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
     @Autowired
     private DeviceLedgerDao deviceLedgerDao;
 
-    @Value("${file.path}")
-    private String uploadFilePath;
+    @Resource
+    private FilePathConfig filePathConfig;
 
     @Autowired
     private QueryServiceUtil queryServiceUtil;
@@ -174,18 +175,18 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
     }
 
     @Override
-    public Result getManyDirectoryAllAlarm(Integer directoryId,List<Integer> directoryIdList, String startTime, String endTime, Integer page, Integer limit) {
+    public Result getManyDirectoryAllAlarm(Integer directoryId, List<Integer> directoryIdList, String startTime, String endTime, Integer page, Integer limit) {
         JSONObject jsonObject = new JSONObject();
         List<DeviceDirectory> allDeviceDirectory = deviceLedgerDao.getAllDeviceDirectory();
         //得到自身的设备目录
         List<DeviceDirectory> deviceDirectoryList = new ArrayList<>();
-        if(Blank.isNotEmpty(directoryId)){
+        if (Blank.isNotEmpty(directoryId)) {
             deviceDirectoryList = allDeviceDirectory.stream()
                     .filter(d -> d.getId() == directoryId)
                     .collect(Collectors.toList());
             //将下级所有的设备目录添加进来
             deviceDirectoryList.addAll(getNextAll(directoryId, allDeviceDirectory));
-        }else{
+        } else {
             for (Integer dId : directoryIdList) {
                 deviceDirectoryList.addAll(allDeviceDirectory.stream()
                         .filter(d -> d.getId() == dId)
@@ -235,6 +236,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
         if (deviceLedgerDao.addDeviceLedger(deviceLedger) <= 0) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "添加设备台账失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         //将传入进来的文件存入到磁盘中,并将关联的信息存入到数据库
         List<FileEntity> technicalDataList = FileUtil.fileManyUpload(uploadFilePath, technicalDataFiles);
         List<FileEntity> pictureList = FileUtil.fileManyUpload(uploadFilePath, pictureFiles);
@@ -275,6 +277,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
         if (deviceLedgerDao.updateDeviceLedger(deviceLedger) <= 0) {
             return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改设备台账失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         List<FileEntity> technicalDataList = FileUtil.fileManyUpload(uploadFilePath, technicalDataFiles);
         List<FileEntity> pictureList = FileUtil.fileManyUpload(uploadFilePath, pictureFiles);
         if (Blank.isNotEmpty(technicalDataList)) {
@@ -344,6 +347,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
         List<DevicePicture> pictureList = deviceLedgerDao.getPictureByLedgerId(id);
         deviceLedgerDao.delTechnicalByLedgerId(id);
         deviceLedgerDao.delPictureByLedgerId(id);
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         if (Blank.isNotEmpty(technicalDataList)) {
             for (TechnicalData technicalData : technicalDataList) {
                 FileUtil.fileDelete(uploadFilePath, technicalData.getSaveFileName());
@@ -369,8 +373,8 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
     }
 
     @Override
-    public List<DeviceLedger>  getDeviceLedgerForExport(Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow){
-        return deviceLedgerDao.getDeviceLedgerForExport(directoryId,deviceTypeId,deviceName,deviceNum,isShow);
+    public List<DeviceLedger> getDeviceLedgerForExport(Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow) {
+        return deviceLedgerDao.getDeviceLedgerForExport(directoryId, deviceTypeId, deviceName, deviceNum, isShow);
     }
 
     @Override

+ 10 - 4
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/FaultManageServiceImpl.java

@@ -1,20 +1,23 @@
 package com.example.opc_da.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.example.opc_common.entity.*;
+import com.example.opc_common.entity.FaultManage;
+import com.example.opc_common.entity.FaultPicture;
+import com.example.opc_common.entity.FileEntity;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.dao.FaultManageDao;
 import com.example.opc_da.service.FaultManageService;
 import com.example.opc_da.util.FileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -27,14 +30,15 @@ public class FaultManageServiceImpl implements FaultManageService {
     @Autowired
     private FaultManageDao faultManageDao;
 
-    @Value("${file.path}")
-    private String uploadFilePath;
+    @Resource
+    private FilePathConfig filePathConfig;
 
     @Override
     public synchronized Result addFaultManage(FaultManage faultManage, MultipartFile[] files) {
         if (faultManageDao.addFaultManage(faultManage) <= 0) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "添加故障记录失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         //将传入进来的文件存入到磁盘中,并将关联的信息存入到数据库
         List<FileEntity> fileList = FileUtil.fileManyUpload(uploadFilePath, files);
         if (Blank.isNotEmpty(fileList)) {
@@ -54,6 +58,7 @@ public class FaultManageServiceImpl implements FaultManageService {
         if (faultManageDao.updateFaultManage(faultManage) <= 0) {
             return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改故障记录失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         List<FileEntity> fileList = FileUtil.fileManyUpload(uploadFilePath, files);
         if (Blank.isNotEmpty(fileList)) {
             if (faultManageDao.addFaultPictureList(faultManage.getId(), fileList) <= 0) {
@@ -93,6 +98,7 @@ public class FaultManageServiceImpl implements FaultManageService {
         }
         List<FaultPicture> pictureList = faultManageDao.getPictureByFaultId(id);
         faultManageDao.delPictureByFaultId(id);
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         if (Blank.isNotEmpty(pictureList)) {
             for (FaultPicture picture : pictureList) {
                 FileUtil.fileDelete(uploadFilePath, picture.getSaveFileName());

+ 7 - 2
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/FileServiceImpl.java

@@ -5,6 +5,7 @@ import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.dao.FileDao;
 import com.example.opc_da.service.FileService;
 import com.example.opc_da.util.FileUtil;
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 @Transactional
@@ -23,8 +25,9 @@ public class FileServiceImpl implements FileService {
     @Autowired
     private FileDao fileDao;
 
-    @Value("${file.commonPath}")
-    private String uploadFilePath;
+
+    @Resource
+    private FilePathConfig filePathConfig;
 
     @Override
     public Result uploadFiles(MultipartFile[] files) {
@@ -33,6 +36,7 @@ public class FileServiceImpl implements FileService {
 
     @Override
     public Result uploadFile(MultipartFile file) {
+        String uploadFilePath = filePathConfig.getFileCommonPathAddRootPath();
         FileEntity fileEntity = FileUtil.uploadOneFile(uploadFilePath, file);
         if (fileDao.saveFile(fileEntity) <= 0) {
             FileUtil.fileDelete(uploadFilePath, fileEntity.getSaveFileName());
@@ -45,6 +49,7 @@ public class FileServiceImpl implements FileService {
     public Result deleleFiles(List<Integer> idList) {
         List<FileEntity> fileEntityList = fileDao.getFileEntityList(idList);
         if (Blank.isNotEmpty(fileEntityList)) {
+            String uploadFilePath = filePathConfig.getFileCommonPathAddRootPath();
             fileEntityList.forEach(fileEntity -> {
                 FileUtil.fileDelete(uploadFilePath, fileEntity.getSaveFileName());
             });

+ 12 - 5
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/PlaybackPlanServiceImpl.java

@@ -1,20 +1,23 @@
 package com.example.opc_da.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.example.opc_common.entity.*;
+import com.example.opc_common.entity.FileEntity;
+import com.example.opc_common.entity.PlaybackPlan;
+import com.example.opc_common.entity.PlaybackRecordFile;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.config.FilePathConfig;
 import com.example.opc_da.dao.PlaybackPlanDao;
 import com.example.opc_da.service.PlaybackPlanService;
 import com.example.opc_da.util.FileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 @Service
@@ -24,8 +27,8 @@ public class PlaybackPlanServiceImpl implements PlaybackPlanService {
     @Autowired
     private PlaybackPlanDao playbackPlanDao;
 
-    @Value("${file.path}")
-    private String uploadFilePath;
+    @Resource
+    private FilePathConfig filePathConfig;
 
     @Override
     public Result addPlaybackPlan(PlaybackPlan playbackPlan, MultipartFile[] playbackRecordFiles) {
@@ -36,6 +39,7 @@ public class PlaybackPlanServiceImpl implements PlaybackPlanService {
         if (playbackPlanDao.addPlaybackPlan(playbackPlan) <= 0) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "添加失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         //将传入进来的文件存入到磁盘中,并将关联的信息存入到数据库
         List<FileEntity> playbackRecordFileList = FileUtil.fileManyUpload(uploadFilePath, playbackRecordFiles);
         if (Blank.isNotEmpty(playbackRecordFileList)) {
@@ -52,13 +56,14 @@ public class PlaybackPlanServiceImpl implements PlaybackPlanService {
 
     @Override
     public Result updatePlaybackPlan(PlaybackPlan playbackPlan, MultipartFile[] playbackRecordFiles, List<String> delPlaybackRecordFileNameList) {
-        PlaybackPlan oldPlaybackPlan = playbackPlanDao.getPlaybackPlanByNameNoId(playbackPlan.getPlanName(),playbackPlan.getId());
+        PlaybackPlan oldPlaybackPlan = playbackPlanDao.getPlaybackPlanByNameNoId(playbackPlan.getPlanName(), playbackPlan.getId());
         if (Blank.isNotEmpty(oldPlaybackPlan)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "方案名称已经存在,请更改后再试");
         }
         if (playbackPlanDao.updatePlaybackPlan(playbackPlan) <= 0) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "修改失败");
         }
+        String uploadFilePath = filePathConfig.getFilePathAddRootPath();
         //将传入进来的文件存入到磁盘中,并将关联的信息存入到数据库
         List<FileEntity> playbackRecordFileList = FileUtil.fileManyUpload(uploadFilePath, playbackRecordFiles);
         if (Blank.isNotEmpty(playbackRecordFileList)) {
@@ -93,6 +98,7 @@ public class PlaybackPlanServiceImpl implements PlaybackPlanService {
         List<PlaybackRecordFile> playbackRecordFileList = playbackPlanDao.getPlaybackRecordFileByPlaybackPlanId(id);
         playbackPlanDao.delPlaybackRecordFileByPlaybackPlanId(id);
         if (Blank.isNotEmpty(playbackRecordFileList)) {
+            String uploadFilePath = filePathConfig.getFilePathAddRootPath();
             for (PlaybackRecordFile playbackRecordFile : playbackRecordFileList) {
                 FileUtil.fileDelete(uploadFilePath, playbackRecordFile.getSaveFileName());
             }
@@ -108,6 +114,7 @@ public class PlaybackPlanServiceImpl implements PlaybackPlanService {
         List<PlaybackRecordFile> playbackRecordFileList = playbackPlanDao.getPlaybackRecordFileByPlaybackPlanIds(ids);
         playbackPlanDao.delPlaybackRecordFileByPlaybackPlanIds(ids);
         if (Blank.isNotEmpty(playbackRecordFileList)) {
+            String uploadFilePath = filePathConfig.getFilePathAddRootPath();
             for (PlaybackRecordFile playbackRecordFile : playbackRecordFileList) {
                 FileUtil.fileDelete(uploadFilePath, playbackRecordFile.getSaveFileName());
             }

+ 42 - 9
industry-system/industry-da/src/main/java/com/example/opc_da/util/FileUtil.java

@@ -1,16 +1,14 @@
 package com.example.opc_da.util;
 
+import cn.hutool.core.util.StrUtil;
 import com.example.opc_common.entity.FileEntity;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
-import com.example.opc_da.dao.FileDao;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
@@ -24,12 +22,6 @@ import java.util.List;
 @Transactional
 public class FileUtil {
 
-    @Value("${file.path}")
-    private String filePath;
-
-    @Resource
-    private FileDao fileDao;
-
     /**
      * 上传单个上传文件
      *
@@ -114,4 +106,45 @@ public class FileUtil {
             file2.delete();
         }
     }
+
+
+    /**
+     * 获取项目同级目录下的文件路径
+     * @param path 文件路径
+     * @return
+     */
+    public static String getUploadFileRootPath(String path) {
+        // 获取当前运行的jar文件的路径
+        String jarPath = cn.hutool.core.io.FileUtil.getAbsolutePath("");
+        // 获取jar文件的同级目录
+        String siblingDirPath = new File(jarPath).getParent();
+        // 原路径
+        //System.out.println("Jar同级目录路径: " + siblingDirPath);
+        // Jar同级目录路径: E:\EI_Report\industry-da-0.0.1-SNAPSHOT.jar!\BOOT-INF
+        // Jar同级目录路径: E:\WorkSoft\STS\workspace\industry-data-platform\industry-system\industry-da\target
+        if (StrUtil.isNotEmpty(siblingDirPath)) {
+            if (siblingDirPath.indexOf(".jar!\\BOOT-INF") > -1) {
+                siblingDirPath = siblingDirPath.substring(0, siblingDirPath.indexOf(".jar!\\BOOT-INF"));
+                siblingDirPath = siblingDirPath.substring(0, siblingDirPath.lastIndexOf("\\"));
+            } else {
+                siblingDirPath = siblingDirPath.substring(0, siblingDirPath.lastIndexOf("\\"));
+            }
+        }
+        // 项目同级路径
+        //System.out.println("Jar同级目录路径: " + siblingDirPath);
+        // Jar同级目录路径: E:\EI_Report
+        // Jar同级目录路径: E:\WorkSoft\STS\workspace\industry-data-platform\industry-system\industry-da
+        if (StrUtil.isNotEmpty(path)) {
+            path = path.replace("/", "\\");
+            if (path.indexOf("\\") == 0) {
+                siblingDirPath += path;
+            } else {
+                siblingDirPath += "\\" + path;
+            }
+        }
+        if(!cn.hutool.core.io.FileUtil.exist(siblingDirPath)){
+            cn.hutool.core.io.FileUtil.mkdir(siblingDirPath);
+        }
+        return siblingDirPath;
+    }
 }

+ 1 - 1
industry-system/industry-da/src/main/java/com/example/opc_da/validate/dataSource/KeyStoreLoader.java

@@ -38,7 +38,7 @@ public class KeyStoreLoader {
         String certificateAlias = opcuaClientConfig.getCertAlias();
         char[] certificateKey = opcuaClientConfig.getCertKeystorePassword().toCharArray();
 
-        String certificateDir = opcuaClientConfig.getCertPath();
+        String certificateDir = opcuaClientConfig.getCertPathAddRootPath();
         if(!FileUtil.exist(certificateDir)){
             FileUtil.mkdir(certificateDir);
         }

+ 9 - 5
industry-system/industry-da/src/main/resources/application-dev.yml

@@ -1,8 +1,10 @@
 server:
   port: 8081
 file:
-  path: D:/upload/chuanyi/
-  commonPath: D:/upload/file/
+  # 相对于项目同级目录
+  path: /upload/chuanyi/
+  # 相对于项目同级目录
+  commonPath: /upload/file/
   # 清理间隔时间段前的pdf打印临时文件,单位:天
   # 默认清理1天前的pdf打印临时文件
   pdf-delete-days: 1
@@ -10,8 +12,9 @@ file:
 opcua:
   client:
     cert:
+      # 相对于项目同级目录
       # 证书地址
-      path: "D:/security"
+      path: "/security"
 
 spring:
   servlet:
@@ -38,8 +41,9 @@ spring:
       maximum-pool-size: 1000
       # 设置连接池中保持的最小空闲连接数,默认为10
       minimum-idle: 10
-  resources:
-    static-locations: classpath:/static/,file:${file.path},file:${file.commonPath}
+#  已在com.example.opc_da.config.InterceptorConfig中配置
+#  resources:
+#    static-locations: classpath:/static/,${file.path},${file.commonPath}
   redis:
     database: 0
     #host: 127.0.0.1

+ 9 - 5
industry-system/industry-da/src/main/resources/application-prod.yml

@@ -1,8 +1,10 @@
 server:
   port: 8081
 file:
-  path: /EI_Report/upload/chuanyi/
-  commonPath: /EI_Report/upload/file/
+  # 相对于项目同级目录
+  path: /upload/chuanyi/
+  # 相对于项目同级目录
+  commonPath: /upload/file/
   # 清理间隔时间段前的pdf打印临时文件,单位:天
   # 默认清理1天前的pdf打印临时文件
   pdf-delete-days: 1
@@ -10,8 +12,9 @@ file:
 opcua:
   client:
     cert:
+      # 相对于项目同级目录
       # 证书地址
-      path: "/EI_Report/security"
+      path: "/security"
 
 spring:
   servlet:
@@ -36,8 +39,9 @@ spring:
       maximum-pool-size: 1000
       # 设置连接池中保持的最小空闲连接数,默认为10
       minimum-idle: 10
-  resources:
-    static-locations: classpath:/static/,file:${file.path},file:${file.commonPath}
+# 已在com.example.opc_da.config.InterceptorConfig中配置
+#  resources:
+#    static-locations: classpath:/static/,${file.path},${file.commonPath}
   redis:
     database: 0
     host: 127.0.0.1

+ 9 - 5
industry-system/industry-da/src/main/resources/application-test.yml

@@ -1,8 +1,10 @@
 server:
   port: 8089
 file:
-  path: /EI_Report/upload/chuanyi/
-  commonPath: /EI_Report/upload/file/
+  # 相对于项目同级目录
+  path: /upload/chuanyi/
+  # 相对于项目同级目录
+  commonPath: /upload/file/
   # 清理间隔时间段前的pdf打印临时文件,单位:天
   # 默认清理1天前的pdf打印临时文件
   pdf-delete-days: 1
@@ -10,8 +12,9 @@ file:
 opcua:
   client:
     cert:
+      # 相对于项目同级目录
       # 证书地址
-      path: "/EI_Report/security"
+      path: "/security"
 
 spring:
   servlet:
@@ -37,8 +40,9 @@ spring:
       maximum-pool-size: 1000
       # 设置连接池中保持的最小空闲连接数,默认为10
       minimum-idle: 10
-  resources:
-    static-locations: classpath:/static/,file:${file.path},file:${file.commonPath}
+# 已在com.example.opc_da.config.InterceptorConfig中配置
+#  resources:
+#    static-locations: classpath:/static/,${file.path},${file.commonPath}
   redis:
     database: 0
     host: 192.168.1.253