资源管理微调
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -52,3 +52,4 @@ rebel.xml
|
|||||||
# 个人工作文档,不与团队共享
|
# 个人工作文档,不与团队共享
|
||||||
CLAUDE.md
|
CLAUDE.md
|
||||||
docs/
|
docs/
|
||||||
|
data/
|
||||||
@@ -46,6 +46,7 @@ import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult;
|
|||||||
import com.njcn.gather.storage.service.DetectionDataDealService;
|
import com.njcn.gather.storage.service.DetectionDataDealService;
|
||||||
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
|
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
|
||||||
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
|
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
||||||
@@ -57,7 +58,6 @@ import com.njcn.gather.tools.comtrade.comparewave.service.ICompareWaveService;
|
|||||||
import com.njcn.gather.util.StorageUtil;
|
import com.njcn.gather.util.StorageUtil;
|
||||||
import com.njcn.web.utils.ExcelUtil;
|
import com.njcn.web.utils.ExcelUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@@ -127,8 +127,9 @@ public class SocketContrastResponseService {
|
|||||||
// private SysRegRes contrastRegRes = null;
|
// private SysRegRes contrastRegRes = null;
|
||||||
|
|
||||||
|
|
||||||
@Value("${report.reportDir}")
|
// @Value("${report.reportDir}")
|
||||||
private String alignDataFilePath;
|
// private String alignDataFilePath;
|
||||||
|
private final PathConfig pathConfig;
|
||||||
|
|
||||||
public static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
|
public static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
|
||||||
put("FREQ", Arrays.asList(DetectionCodeEnum.FREQ.getCode()));
|
put("FREQ", Arrays.asList(DetectionCodeEnum.FREQ.getCode()));
|
||||||
@@ -2314,7 +2315,7 @@ public class SocketContrastResponseService {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
ExcelUtil.saveExcel(alignDataFilePath, "对齐数据.xlsx", sheetsList);
|
ExcelUtil.saveExcel(pathConfig.getDataPath(), "对齐数据.xlsx", sheetsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import com.njcn.gather.script.service.IPqScriptDtlsService;
|
|||||||
import com.njcn.gather.source.pojo.po.SourceInitialize;
|
import com.njcn.gather.source.pojo.po.SourceInitialize;
|
||||||
import com.njcn.gather.source.service.IPqSourceService;
|
import com.njcn.gather.source.service.IPqSourceService;
|
||||||
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
|
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
|
||||||
import com.njcn.gather.system.dictionary.service.IDictDataService;
|
import com.njcn.gather.system.dictionary.service.IDictDataService;
|
||||||
import com.njcn.web.utils.HttpServletUtil;
|
import com.njcn.web.utils.HttpServletUtil;
|
||||||
@@ -53,6 +54,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -81,8 +83,9 @@ public class PreDetectionServiceImpl implements PreDetectionService {
|
|||||||
private final ISysTestConfigService sysTestConfigService;
|
private final ISysTestConfigService sysTestConfigService;
|
||||||
|
|
||||||
|
|
||||||
@Value("${report.reportDir}")
|
// @Value("${report.reportDir}")
|
||||||
private String alignDataFilePath;
|
// private String alignDataFilePath;
|
||||||
|
private final PathConfig pathConfig;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -353,7 +356,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
|
|||||||
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
||||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||||
try {
|
try {
|
||||||
InputStream inputStream = new FileInputStream(alignDataFilePath + "\\" + fileName);
|
InputStream inputStream = new FileInputStream(pathConfig.getDataPath() + File.separator + fileName);
|
||||||
byte[] buffer = new byte[1024];
|
byte[] buffer = new byte[1024];
|
||||||
int len = 0;
|
int len = 0;
|
||||||
ServletOutputStream outputStream = response.getOutputStream();
|
ServletOutputStream outputStream = response.getOutputStream();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.njcn.gather.monitor.service.IPqMonitorService;
|
|||||||
import com.njcn.gather.plan.pojo.po.AdPlan;
|
import com.njcn.gather.plan.pojo.po.AdPlan;
|
||||||
import com.njcn.gather.plan.pojo.vo.AdPlanCheckDataVO;
|
import com.njcn.gather.plan.pojo.vo.AdPlanCheckDataVO;
|
||||||
import com.njcn.gather.plan.service.util.BatchFileReader;
|
import com.njcn.gather.plan.service.util.BatchFileReader;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.config.handler.NonWebAutoFillValueHandler;
|
import com.njcn.gather.system.config.handler.NonWebAutoFillValueHandler;
|
||||||
import com.njcn.gather.tools.report.model.constant.ReportConstant;
|
import com.njcn.gather.tools.report.model.constant.ReportConstant;
|
||||||
import com.njcn.gather.type.pojo.po.DevType;
|
import com.njcn.gather.type.pojo.po.DevType;
|
||||||
@@ -64,11 +65,11 @@ public class AsyncPlanHandler {
|
|||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
private final JdbcTemplate jdbcTemplate;
|
||||||
|
|
||||||
|
private final PathConfig pathConfig;
|
||||||
@Value("${report.reportDir}")
|
// @Value("${report.reportDir}")
|
||||||
private String reportPath;
|
// private String reportPath;
|
||||||
@Value("${data.homeDir}")
|
// @Value("${data.homeDir}")
|
||||||
private String dataPath;
|
// private String dataPath;
|
||||||
|
|
||||||
private static final int BATCH_SIZE = 10000;
|
private static final int BATCH_SIZE = 10000;
|
||||||
private static final int FINAL_STEP = 85;
|
private static final int FINAL_STEP = 85;
|
||||||
@@ -199,13 +200,13 @@ public class AsyncPlanHandler {
|
|||||||
|
|
||||||
// 创建 ZIP 文件
|
// 创建 ZIP 文件
|
||||||
String zipFileName = plan.getName() + "_检测数据包.zip";
|
String zipFileName = plan.getName() + "_检测数据包.zip";
|
||||||
File zipFile = FileUtil.file(dataPath + File.separator + TEST_DATA_DIR + File.separator, zipFileName);
|
File zipFile = FileUtil.file(pathConfig.getDataPath() + File.separator + TEST_DATA_DIR + File.separator, zipFileName);
|
||||||
|
|
||||||
// 添加检测报告文件
|
// 添加检测报告文件
|
||||||
if (ObjectUtil.isNotNull(report) && report.equals(1)) {
|
if (ObjectUtil.isNotNull(report) && report.equals(1)) {
|
||||||
for (PqDev dev : devList) {
|
for (PqDev dev : devList) {
|
||||||
DevType devType = devTypeService.getById(dev.getDevType());
|
DevType devType = devTypeService.getById(dev.getDevType());
|
||||||
String dirPath = reportPath.concat(File.separator).concat(devType.getName());
|
String dirPath = pathConfig.getReportPath().concat(File.separator).concat(devType.getName());
|
||||||
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
||||||
// 如果reportFile存在,则将reportFile中的文件添加到已有的zip文件中
|
// 如果reportFile存在,则将reportFile中的文件添加到已有的zip文件中
|
||||||
if (FileUtil.exist(reportFile)) {
|
if (FileUtil.exist(reportFile)) {
|
||||||
@@ -344,7 +345,7 @@ public class AsyncPlanHandler {
|
|||||||
for (File docx : docxFiles) {
|
for (File docx : docxFiles) {
|
||||||
for (PqDev dev : devList) {
|
for (PqDev dev : devList) {
|
||||||
DevType devType = devTypeService.getById(dev.getDevType());
|
DevType devType = devTypeService.getById(dev.getDevType());
|
||||||
String dirPath = reportPath.concat(File.separator).concat(devType.getName());
|
String dirPath = pathConfig.getReportPath().concat(File.separator).concat(devType.getName());
|
||||||
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
||||||
// 文件名匹配,复制到对应目录下
|
// 文件名匹配,复制到对应目录下
|
||||||
if (docx.getName().equals(reportFile.getName())) {
|
if (docx.getName().equals(reportFile.getName())) {
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ import com.njcn.gather.storage.service.TableGenService;
|
|||||||
import com.njcn.gather.system.cfg.pojo.enums.SceneEnum;
|
import com.njcn.gather.system.cfg.pojo.enums.SceneEnum;
|
||||||
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
|
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
|
||||||
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictType;
|
import com.njcn.gather.system.dictionary.pojo.po.DictType;
|
||||||
@@ -154,8 +155,9 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
private final IPqDevCheckHistoryService pqDevCheckHistoryService;
|
private final IPqDevCheckHistoryService pqDevCheckHistoryService;
|
||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
private final JdbcTemplate jdbcTemplate;
|
||||||
@Value("${report.reportDir}")
|
// @Value("${report.reportDir}")
|
||||||
private String reportPath;
|
// private String reportPath;
|
||||||
|
private final PathConfig pathConfig;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
|
public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
|
||||||
@@ -2333,7 +2335,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
if (ObjectUtil.isNotNull(report) && report.equals(1)) {
|
if (ObjectUtil.isNotNull(report) && report.equals(1)) {
|
||||||
for (PqDev dev : devList) {
|
for (PqDev dev : devList) {
|
||||||
DevType devType = devTypeService.getById(dev.getDevType());
|
DevType devType = devTypeService.getById(dev.getDevType());
|
||||||
String dirPath = reportPath.concat(File.separator).concat(devType.getName());
|
String dirPath = pathConfig.getReportPath().concat(File.separator).concat(devType.getName());
|
||||||
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
|
||||||
// 如果reportFile存在,则将reportFile中的文件添加到已有的zip文件中
|
// 如果reportFile存在,则将reportFile中的文件添加到已有的zip文件中
|
||||||
if (FileUtil.exist(reportFile)) {
|
if (FileUtil.exist(reportFile)) {
|
||||||
|
|||||||
@@ -68,16 +68,13 @@ import com.njcn.gather.storage.service.SimAndDigHarmonicService;
|
|||||||
import com.njcn.gather.storage.service.SimAndDigNonHarmonicService;
|
import com.njcn.gather.storage.service.SimAndDigNonHarmonicService;
|
||||||
import com.njcn.gather.system.cfg.pojo.enums.SceneEnum;
|
import com.njcn.gather.system.cfg.pojo.enums.SceneEnum;
|
||||||
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
import com.njcn.gather.system.cfg.service.ISysTestConfigService;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
import com.njcn.gather.system.dictionary.pojo.po.DictData;
|
||||||
import com.njcn.gather.system.dictionary.service.IDictDataService;
|
import com.njcn.gather.system.dictionary.service.IDictDataService;
|
||||||
import com.njcn.gather.system.pojo.enums.SystemResponseEnum;
|
import com.njcn.gather.system.pojo.enums.SystemResponseEnum;
|
||||||
import com.njcn.gather.tools.report.model.constant.ReportConstant;
|
import com.njcn.gather.tools.report.model.constant.ReportConstant;
|
||||||
import com.njcn.gather.tools.report.service.IWordReportService;
|
import com.njcn.gather.tools.report.service.IWordReportService;
|
||||||
import com.njcn.gather.tools.report.util.BookmarkUtil;
|
import com.njcn.gather.tools.report.util.*;
|
||||||
import com.njcn.gather.tools.report.util.Docx4jUtil;
|
|
||||||
import com.njcn.gather.tools.report.util.DocxMergeUtil;
|
|
||||||
import com.njcn.gather.tools.report.util.FilePathSanitizer;
|
|
||||||
import com.njcn.gather.tools.report.util.WordDocumentUtil;
|
|
||||||
import com.njcn.gather.type.pojo.po.DevType;
|
import com.njcn.gather.type.pojo.po.DevType;
|
||||||
import com.njcn.gather.type.service.IDevTypeService;
|
import com.njcn.gather.type.service.IDevTypeService;
|
||||||
import com.njcn.gather.user.user.pojo.po.SysUser;
|
import com.njcn.gather.user.user.pojo.po.SysUser;
|
||||||
@@ -145,13 +142,13 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
*/
|
*/
|
||||||
private static final String RESULT_MAP_NO_DATA_FLAG = "__internal_no_data__";
|
private static final String RESULT_MAP_NO_DATA_FLAG = "__internal_no_data__";
|
||||||
|
|
||||||
@Value("${report.template:D:\\template}")
|
// @Value("${report.template:D:\\template}")
|
||||||
private String templatePath;
|
// private String templatePath;
|
||||||
|
//
|
||||||
@Value("${report.reportDir:D:\\report}")
|
// @Value("${report.reportDir:D:\\report}")
|
||||||
private String reportPath;
|
// private String reportPath;
|
||||||
|
private final PathConfig pathConfig;
|
||||||
|
|
||||||
@Value("${qr.cloud}")
|
@Value("${qr.cloud}")
|
||||||
private String cloudUrl;
|
private String cloudUrl;
|
||||||
|
|
||||||
@@ -328,7 +325,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
MultipartFile baseFile = reportParam.getBaseFile();
|
MultipartFile baseFile = reportParam.getBaseFile();
|
||||||
MultipartFile detailFile = reportParam.getDetailFile();
|
MultipartFile detailFile = reportParam.getDetailFile();
|
||||||
String relativePath = reportParam.getName() + File.separator + reportParam.getVersion() + File.separator;
|
String relativePath = reportParam.getName() + File.separator + reportParam.getVersion() + File.separator;
|
||||||
String newDir = templatePath + File.separator + relativePath;
|
String newDir = pathConfig.getReportTemplatePath() + File.separator + relativePath;
|
||||||
|
|
||||||
long FILE_SIZE_LIMIT = 5 * 1024 * 1024;
|
long FILE_SIZE_LIMIT = 5 * 1024 * 1024;
|
||||||
if (isAdd) {
|
if (isAdd) {
|
||||||
@@ -405,13 +402,13 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
// 文件夹重命名
|
// 文件夹重命名
|
||||||
String oldBasePathStr = oldPqReport.getBasePath();
|
String oldBasePathStr = oldPqReport.getBasePath();
|
||||||
String baseName = oldBasePathStr.substring(oldBasePathStr.lastIndexOf(File.separator) + 1);
|
String baseName = oldBasePathStr.substring(oldBasePathStr.lastIndexOf(File.separator) + 1);
|
||||||
Path oldBasePath = Paths.get(templatePath + File.separator + oldBasePathStr);
|
Path oldBasePath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + oldBasePathStr);
|
||||||
Path newBasePath = Paths.get(newDir + baseName);
|
Path newBasePath = Paths.get(newDir + baseName);
|
||||||
pqReport.setBasePath(relativePath + baseName);
|
pqReport.setBasePath(relativePath + baseName);
|
||||||
|
|
||||||
String oldDetailPathStr = oldPqReport.getDetailPath();
|
String oldDetailPathStr = oldPqReport.getDetailPath();
|
||||||
String detailName = oldDetailPathStr.substring(oldDetailPathStr.lastIndexOf(File.separator) + 1);
|
String detailName = oldDetailPathStr.substring(oldDetailPathStr.lastIndexOf(File.separator) + 1);
|
||||||
Path oldDetailPath = Paths.get(templatePath + File.separator + oldDetailPathStr);
|
Path oldDetailPath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + oldDetailPathStr);
|
||||||
Path newDetailPath = Paths.get(newDir + detailName);
|
Path newDetailPath = Paths.get(newDir + detailName);
|
||||||
pqReport.setDetailPath(relativePath + detailName);
|
pqReport.setDetailPath(relativePath + detailName);
|
||||||
|
|
||||||
@@ -422,13 +419,13 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
Files.move(oldBasePath, newBasePath);
|
Files.move(oldBasePath, newBasePath);
|
||||||
Files.move(oldDetailPath, newDetailPath);
|
Files.move(oldDetailPath, newDetailPath);
|
||||||
if (!oldPqReport.getName().equals(reportParam.getName()) && !this.existSameName(pqReport.getId(), oldPqReport.getName())) {
|
if (!oldPqReport.getName().equals(reportParam.getName()) && !this.existSameName(pqReport.getId(), oldPqReport.getName())) {
|
||||||
this.recursionDeleteDirectory(templatePath + File.separator + oldPqReport.getName());
|
this.recursionDeleteDirectory(pathConfig.getReportTemplatePath() + File.separator + oldPqReport.getName());
|
||||||
} else {
|
} else {
|
||||||
Paths.get(templatePath + oldDir).toFile().delete();
|
Paths.get(pathConfig.getReportTemplatePath() + oldDir).toFile().delete();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 文件夹重命名
|
// 文件夹重命名
|
||||||
Paths.get(templatePath + oldDir).toFile().renameTo(Paths.get(newDir).toFile());
|
Paths.get(pathConfig.getReportTemplatePath() + oldDir).toFile().renameTo(Paths.get(newDir).toFile());
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new BusinessException(ReportResponseEnum.FILE_RENAME_FAILED);
|
throw new BusinessException(ReportResponseEnum.FILE_RENAME_FAILED);
|
||||||
@@ -437,13 +434,13 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
|
|
||||||
if (!baseFileOriginalFilename.isEmpty()) {
|
if (!baseFileOriginalFilename.isEmpty()) {
|
||||||
pqReport.setBasePath(relativePath + baseFileOriginalFilename);
|
pqReport.setBasePath(relativePath + baseFileOriginalFilename);
|
||||||
Paths.get(templatePath + File.separator + oldPqReport.getBasePath()).toFile().delete();
|
Paths.get(pathConfig.getReportTemplatePath() + File.separator + oldPqReport.getBasePath()).toFile().delete();
|
||||||
Paths.get(newDir + oldPqReport.getBasePath().substring(oldPqReport.getBasePath().lastIndexOf(File.separator) + 1)).toFile().delete();
|
Paths.get(newDir + oldPqReport.getBasePath().substring(oldPqReport.getBasePath().lastIndexOf(File.separator) + 1)).toFile().delete();
|
||||||
this.uploadFile(baseFile, newDir + baseFileOriginalFilename);
|
this.uploadFile(baseFile, newDir + baseFileOriginalFilename);
|
||||||
}
|
}
|
||||||
if (!detailFileOriginalFilename.isEmpty()) {
|
if (!detailFileOriginalFilename.isEmpty()) {
|
||||||
pqReport.setDetailPath(relativePath + detailFileOriginalFilename);
|
pqReport.setDetailPath(relativePath + detailFileOriginalFilename);
|
||||||
Paths.get(templatePath + File.separator + oldPqReport.getDetailPath()).toFile().delete();
|
Paths.get(pathConfig.getReportTemplatePath() + File.separator + oldPqReport.getDetailPath()).toFile().delete();
|
||||||
Paths.get(newDir + oldPqReport.getDetailPath().substring(oldPqReport.getDetailPath().lastIndexOf(File.separator) + 1)).toFile().delete();
|
Paths.get(newDir + oldPqReport.getDetailPath().substring(oldPqReport.getDetailPath().lastIndexOf(File.separator) + 1)).toFile().delete();
|
||||||
this.uploadFile(detailFile, newDir + detailFileOriginalFilename);
|
this.uploadFile(detailFile, newDir + detailFileOriginalFilename);
|
||||||
}
|
}
|
||||||
@@ -528,7 +525,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
private void deleteFile(List<String> ids) {
|
private void deleteFile(List<String> ids) {
|
||||||
List<PqReport> pqReports = this.listByIds(ids);
|
List<PqReport> pqReports = this.listByIds(ids);
|
||||||
for (PqReport pqReport : pqReports) {
|
for (PqReport pqReport : pqReports) {
|
||||||
String uploadDir = templatePath + File.separator + pqReport.getName() + File.separator + pqReport.getVersion() + File.separator;
|
String uploadDir = pathConfig.getReportTemplatePath() + File.separator + pqReport.getName() + File.separator + pqReport.getVersion() + File.separator;
|
||||||
Path uploadPath = Paths.get(uploadDir);
|
Path uploadPath = Paths.get(uploadDir);
|
||||||
if (Files.exists(uploadPath)) {
|
if (Files.exists(uploadPath)) {
|
||||||
//清空目录下的文件
|
//清空目录下的文件
|
||||||
@@ -540,7 +537,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file1.delete();
|
file1.delete();
|
||||||
String dir = templatePath + File.separator + pqReport.getName() + File.separator;
|
String dir = pathConfig.getReportTemplatePath() + File.separator + pqReport.getName() + File.separator;
|
||||||
Path dirPath = Paths.get(dir);
|
Path dirPath = Paths.get(dir);
|
||||||
File dirFile = dirPath.toFile();
|
File dirFile = dirPath.toFile();
|
||||||
File[] fileArr2 = dirFile.listFiles();
|
File[] fileArr2 = dirFile.listFiles();
|
||||||
@@ -634,8 +631,8 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
InputStream finalWordStream = DocxMergeUtil.mergeDocuments(wordFileInputStreams);
|
InputStream finalWordStream = DocxMergeUtil.mergeDocuments(wordFileInputStreams);
|
||||||
// 处理需要输出的目录地址 基础路径+设备类型+装置编号.docx
|
// 处理需要输出的目录地址 基础路径+设备类型+装置编号.docx
|
||||||
// 最终文件输出的路径
|
// 最终文件输出的路径
|
||||||
// String dirPath = reportPath.concat(File.separator).concat(devType.getName());
|
// String dirPath = pathConfig.getReportPath().concat(File.separator).concat(devType.getName());
|
||||||
String dirPath = reportPath;
|
String dirPath = pathConfig.getReportPath();
|
||||||
// 确保目录存在
|
// 确保目录存在
|
||||||
ensureDirectoryExists(dirPath);
|
ensureDirectoryExists(dirPath);
|
||||||
String reportFullPath = dirPath.concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
String reportFullPath = dirPath.concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
||||||
@@ -828,8 +825,8 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
if (Objects.isNull(report)) {
|
if (Objects.isNull(report)) {
|
||||||
throw new BusinessException(ReportResponseEnum.REPORT_TEMPLATE_NOT_EXIST);
|
throw new BusinessException(ReportResponseEnum.REPORT_TEMPLATE_NOT_EXIST);
|
||||||
}
|
}
|
||||||
Path basePath = Paths.get(templatePath + File.separator + report.getBasePath());
|
Path basePath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + report.getBasePath());
|
||||||
Path detailPath = Paths.get(templatePath + File.separator + report.getDetailPath());
|
Path detailPath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + report.getDetailPath());
|
||||||
try (InputStream baseInputStream = Files.newInputStream(basePath);
|
try (InputStream baseInputStream = Files.newInputStream(basePath);
|
||||||
InputStream detailInputStream = Files.newInputStream(detailPath)) {
|
InputStream detailInputStream = Files.newInputStream(detailPath)) {
|
||||||
WordprocessingMLPackage detailModelDocument = WordprocessingMLPackage.load(detailInputStream);
|
WordprocessingMLPackage detailModelDocument = WordprocessingMLPackage.load(detailInputStream);
|
||||||
@@ -843,7 +840,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
MainDocumentPart detailDocumentPart = detailModelDocument.getMainDocumentPart();
|
MainDocumentPart detailDocumentPart = detailModelDocument.getMainDocumentPart();
|
||||||
dealDataModelScatteredByBookmarkByPlanContrast(baseDocumentPart, detailDocumentPart, devReportParam, pqDevVO);
|
dealDataModelScatteredByBookmarkByPlanContrast(baseDocumentPart, detailDocumentPart, devReportParam, pqDevVO);
|
||||||
// 保存新的文档
|
// 保存新的文档
|
||||||
String dirPath = reportPath.concat(File.separator).concat(FilePathSanitizer.toSafeFileName(plan.getName()));
|
String dirPath = pathConfig.getReportPath().concat(File.separator).concat(FilePathSanitizer.toSafeFileName(plan.getName()));
|
||||||
// 确保目录存在
|
// 确保目录存在
|
||||||
ensureDirectoryExists(dirPath);
|
ensureDirectoryExists(dirPath);
|
||||||
// 构建文件名:cityName_gdName_subName_name.docx
|
// 构建文件名:cityName_gdName_subName_name.docx
|
||||||
@@ -910,8 +907,8 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
if (Objects.isNull(report)) {
|
if (Objects.isNull(report)) {
|
||||||
throw new BusinessException(ReportResponseEnum.REPORT_TEMPLATE_NOT_EXIST);
|
throw new BusinessException(ReportResponseEnum.REPORT_TEMPLATE_NOT_EXIST);
|
||||||
}
|
}
|
||||||
Path basePath = Paths.get(templatePath + File.separator + report.getBasePath());
|
Path basePath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + report.getBasePath());
|
||||||
Path detailPath = Paths.get(templatePath + File.separator + report.getDetailPath());
|
Path detailPath = Paths.get(pathConfig.getReportTemplatePath() + File.separator + report.getDetailPath());
|
||||||
try (InputStream baseInputStream = Files.newInputStream(basePath);
|
try (InputStream baseInputStream = Files.newInputStream(basePath);
|
||||||
InputStream detailInputStream = Files.newInputStream(detailPath)) {
|
InputStream detailInputStream = Files.newInputStream(detailPath)) {
|
||||||
WordprocessingMLPackage detailModelDocument = WordprocessingMLPackage.load(detailInputStream);
|
WordprocessingMLPackage detailModelDocument = WordprocessingMLPackage.load(detailInputStream);
|
||||||
@@ -926,7 +923,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
dealDataModelScatteredByBookmark(baseDocumentPart, detailDocumentPart, devReportParam, pqDevVO);
|
dealDataModelScatteredByBookmark(baseDocumentPart, detailDocumentPart, devReportParam, pqDevVO);
|
||||||
|
|
||||||
// 保存新的文档
|
// 保存新的文档
|
||||||
String dirPath = reportPath.concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName()));
|
String dirPath = pathConfig.getReportPath().concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName()));
|
||||||
// 确保目录存在
|
// 确保目录存在
|
||||||
ensureDirectoryExists(dirPath);
|
ensureDirectoryExists(dirPath);
|
||||||
baseModelDocument.save(new File(dirPath.concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX)));
|
baseModelDocument.save(new File(dirPath.concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX)));
|
||||||
@@ -1937,7 +1934,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
|
|
||||||
if (SceneEnum.LEAVE_FACTORY_TEST.getValue().equals(currrentScene)) {
|
if (SceneEnum.LEAVE_FACTORY_TEST.getValue().equals(currrentScene)) {
|
||||||
// 出厂测试场景
|
// 出厂测试场景
|
||||||
filePath = reportPath.concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
filePath = pathConfig.getReportPath().concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
||||||
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
||||||
} else if (plan != null) {
|
} else if (plan != null) {
|
||||||
// 根据计划模式确定路径结构
|
// 根据计划模式确定路径结构
|
||||||
@@ -1949,16 +1946,16 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
pqDevVO.getGdName() != null ? pqDevVO.getGdName() : "未知供电公司",
|
pqDevVO.getGdName() != null ? pqDevVO.getGdName() : "未知供电公司",
|
||||||
pqDevVO.getSubName() != null ? pqDevVO.getSubName() : "未知电站",
|
pqDevVO.getSubName() != null ? pqDevVO.getSubName() : "未知电站",
|
||||||
pqDevVO.getName() != null ? pqDevVO.getName() : "未知设备");
|
pqDevVO.getName() != null ? pqDevVO.getName() : "未知设备");
|
||||||
filePath = reportPath.concat(File.separator).concat(FilePathSanitizer.toSafeFileName(plan.getName())).concat(File.separator).concat(fileName);
|
filePath = pathConfig.getReportPath().concat(File.separator).concat(FilePathSanitizer.toSafeFileName(plan.getName())).concat(File.separator).concat(fileName);
|
||||||
downloadFileName = fileName;
|
downloadFileName = fileName;
|
||||||
} else {
|
} else {
|
||||||
// 数字/模拟模式:使用原来的路径结构
|
// 数字/模拟模式:使用原来的路径结构
|
||||||
filePath = reportPath.concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName())).concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
filePath = pathConfig.getReportPath().concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName())).concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
||||||
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 兜底:使用旧的路径结构
|
// 兜底:使用旧的路径结构
|
||||||
filePath = reportPath.concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName())).concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
filePath = pathConfig.getReportPath().concat(File.separator).concat(FilePathSanitizer.toSafeFileName(devType.getName())).concat(File.separator).concat(pqDevVO.getCreateId()).concat(ReportConstant.DOCX);
|
||||||
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
downloadFileName = pqDevVO.getCreateId() + ReportConstant.DOCX;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2486,7 +2483,7 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.info("找到{}台设备需要上传报告", devices.size());
|
log.info("找到{}台设备需要上传报告", devices.size());
|
||||||
String dirPath = reportPath;
|
String dirPath = pathConfig.getReportPath();
|
||||||
// 确保目录存在
|
// 确保目录存在
|
||||||
ensureDirectoryExists(dirPath);
|
ensureDirectoryExists(dirPath);
|
||||||
// 异步批量上传每台设备的报告
|
// 异步批量上传每台设备的报告
|
||||||
|
|||||||
@@ -75,14 +75,11 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
|||||||
private Double fRampIn;
|
private Double fRampIn;
|
||||||
@Value("${Dip.fRampOut}")
|
@Value("${Dip.fRampOut}")
|
||||||
private Double fRampOut;
|
private Double fRampOut;
|
||||||
// @Value("${Dip.fAfterTime}")
|
// @Value("${Dip.fAfterTime}")
|
||||||
// private Double fAfterTime;
|
// private Double fAfterTime;
|
||||||
@Value("${Flicker.waveFluType}")
|
private static final String waveFluType = "SQU";
|
||||||
private String waveFluType;
|
private static final String waveType = "CPM";
|
||||||
@Value("${Flicker.waveType}")
|
private static final Double fDutyCycle = 50.0;
|
||||||
private String waveType;
|
|
||||||
@Value("${Flicker.fDutyCycle}")
|
|
||||||
private Double fDutyCycle;
|
|
||||||
|
|
||||||
|
|
||||||
private final IPqDevService pqDevService;
|
private final IPqDevService pqDevService;
|
||||||
@@ -1067,9 +1064,16 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
|||||||
channelListDTO.setDipData(dipDataDTO);
|
channelListDTO.setDipData(dipDataDTO);
|
||||||
//闪变数据
|
//闪变数据
|
||||||
SourceIssue.ChannelListDTO.FlickerDataDTO flickerDataDTO = new SourceIssue.ChannelListDTO.FlickerDataDTO();
|
SourceIssue.ChannelListDTO.FlickerDataDTO flickerDataDTO = new SourceIssue.ChannelListDTO.FlickerDataDTO();
|
||||||
flickerDataDTO.setWaveFluType(waveFluType);
|
SourceIssue.ChannelListDTO.FlickerDataDTO flickerData = channelListDTO.getFlickerData();
|
||||||
flickerDataDTO.setWaveType(waveType);
|
if (ObjectUtil.isNotNull(flickerData)) {
|
||||||
flickerDataDTO.setFDutyCycle(fDutyCycle);
|
flickerDataDTO.setWaveFluType(flickerData.getWaveFluType());
|
||||||
|
flickerDataDTO.setWaveType(flickerData.getWaveType());
|
||||||
|
flickerDataDTO.setFDutyCycle(flickerData.getFDutyCycle());
|
||||||
|
} else {
|
||||||
|
flickerDataDTO.setWaveFluType(waveFluType);
|
||||||
|
flickerDataDTO.setWaveType(waveType);
|
||||||
|
flickerDataDTO.setFDutyCycle(fDutyCycle);
|
||||||
|
}
|
||||||
|
|
||||||
flickerDataDTO.setFChagFre(0.0);
|
flickerDataDTO.setFChagFre(0.0);
|
||||||
flickerDataDTO.setFChagValue(0.0);
|
flickerDataDTO.setFChagValue(0.0);
|
||||||
|
|||||||
@@ -64,32 +64,32 @@ webSocket:
|
|||||||
|
|
||||||
#源参数下发,暂态数据默认值
|
#源参数下发,暂态数据默认值
|
||||||
Dip:
|
Dip:
|
||||||
#暂态前时间(s)
|
# 暂态前时间(s)
|
||||||
fPreTime: 2f
|
# fPreTime: 2f
|
||||||
#写入时间(s)
|
#写入时间(s)
|
||||||
fRampIn: 0.001f
|
fRampIn: 0.001f
|
||||||
#写出时间(s)
|
#写出时间(s)
|
||||||
fRampOut: 0.001f
|
fRampOut: 0.001f
|
||||||
#暂态后时间(s)
|
# 暂态后时间(s)
|
||||||
fAfterTime: 3f
|
# fAfterTime: 3f
|
||||||
|
|
||||||
|
|
||||||
Flicker:
|
#Flicker:
|
||||||
waveFluType: CPM
|
# waveFluType: CPM
|
||||||
waveType: SQU
|
# waveType: SQU
|
||||||
fDutyCycle: 50f
|
# fDutyCycle: 50f
|
||||||
|
|
||||||
log:
|
#log:
|
||||||
homeDir: D:\logs
|
# homeDir: D:\logs
|
||||||
commonLevel: info
|
# commonLevel: info
|
||||||
report:
|
report:
|
||||||
template: D:\template
|
# template: D:\template
|
||||||
reportDir: D:\report
|
# reportDir: D:\report
|
||||||
dateFormat: yyyy年MM月dd日
|
dateFormat: yyyy年MM月dd日
|
||||||
data:
|
#data:
|
||||||
homeDir: D:\data
|
# homeDir: D:\data
|
||||||
resource:
|
#resource:
|
||||||
videoDir: ${data.homeDir}\resources\videos
|
# videoDir: ${data.homeDir}\resources\videos
|
||||||
qr:
|
qr:
|
||||||
cloud: http://pqmcc.com:18082/api/file
|
cloud: http://pqmcc.com:18082/api/file
|
||||||
dev:
|
dev:
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.njcn.gather.system.config;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author caozehui
|
||||||
|
* @data 2026-05-28
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class PathConfig {
|
||||||
|
|
||||||
|
private String appPath;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
// 获取程序运行目录
|
||||||
|
appPath = System.getProperty("user.dir");
|
||||||
|
|
||||||
|
// 或者获取jar包所在目录
|
||||||
|
// appPath = new File(getClass().getProtectionDomain()
|
||||||
|
// .getCodeSource().getLocation().getPath()).getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppPath() {
|
||||||
|
return appPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogPath() {
|
||||||
|
return appPath + File.separator + "logs";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDataPath() {
|
||||||
|
return appPath + File.separator + "data";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReportTemplatePath() {
|
||||||
|
return this.getDataPath() + File.separator + "template";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReportPath() {
|
||||||
|
return this.getDataPath() + File.separator + "report";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResourcePath() {
|
||||||
|
return this.getDataPath() + File.separator + "resource";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,6 +65,20 @@ public class ResourceManageController extends BaseController {
|
|||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.UPDATE)
|
||||||
|
@PostMapping("/update")
|
||||||
|
@ApiOperation("编辑资源信息")
|
||||||
|
@ApiImplicitParam(name = "updateParam", value = "资源参数", required = true)
|
||||||
|
public HttpResult<Boolean> update(@RequestBody @Validated ResourceManageParam.UpdateParam updateParam) {
|
||||||
|
String methodDescribe = getMethodDescribe("update");
|
||||||
|
LogUtil.njcnDebug(log, "{},编辑资源参数为:{}", methodDescribe, updateParam);
|
||||||
|
boolean result = resourceManageService.update(updateParam);
|
||||||
|
if (result) {
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
|
||||||
|
}
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
|
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
|
||||||
@GetMapping("/play")
|
@GetMapping("/play")
|
||||||
@ApiOperation("获取视频播放地址")
|
@ApiOperation("获取视频播放地址")
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ public enum ResourceManageResponseEnum {
|
|||||||
PLAY_TOKEN_INVALID("A013009", "播放授权无效"),
|
PLAY_TOKEN_INVALID("A013009", "播放授权无效"),
|
||||||
PLAY_TOKEN_EXPIRED("A013010", "播放授权已过期"),
|
PLAY_TOKEN_EXPIRED("A013010", "播放授权已过期"),
|
||||||
RANGE_INVALID("A013011", "视频请求范围非法"),
|
RANGE_INVALID("A013011", "视频请求范围非法"),
|
||||||
DISK_SPACE_NOT_ENOUGH("A013012", "磁盘空间不足");
|
DISK_SPACE_NOT_ENOUGH("A013012", "磁盘空间不足"),
|
||||||
|
ID_NOT_BLANK("A013013", "资源id不能为空");
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ public class ResourceManageParam {
|
|||||||
@ApiModelProperty(value = "视频文件", required = true)
|
@ApiModelProperty(value = "视频文件", required = true)
|
||||||
private MultipartFile file;
|
private MultipartFile file;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class UpdateParam {
|
||||||
|
@ApiModelProperty(value = "资源id", required = true)
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "资源名称", required = true)
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "备注", required = true)
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public static class QueryParam extends BaseParam {
|
public static class QueryParam extends BaseParam {
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public interface IResourceManageService extends IService<ResourceManage> {
|
|||||||
|
|
||||||
boolean add(ResourceManageParam resourceManageParam);
|
boolean add(ResourceManageParam resourceManageParam);
|
||||||
|
|
||||||
|
boolean update(ResourceManageParam.UpdateParam updateParam);
|
||||||
|
|
||||||
PlayVO play(String id);
|
PlayVO play(String id);
|
||||||
|
|
||||||
void stream(String id, String token, String rangeHeader, HttpServletResponse response);
|
void stream(String id, String token, String rangeHeader, HttpServletResponse response);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
|
import com.njcn.gather.system.config.PathConfig;
|
||||||
import com.njcn.gather.system.resource.mapper.ResourceManageMapper;
|
import com.njcn.gather.system.resource.mapper.ResourceManageMapper;
|
||||||
import com.njcn.gather.system.resource.pojo.enums.ResourceManageResponseEnum;
|
import com.njcn.gather.system.resource.pojo.enums.ResourceManageResponseEnum;
|
||||||
import com.njcn.gather.system.resource.pojo.param.ResourceManageParam;
|
import com.njcn.gather.system.resource.pojo.param.ResourceManageParam;
|
||||||
@@ -19,7 +20,6 @@ import com.njcn.web.utils.RequestUtil;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@@ -53,8 +53,9 @@ public class ResourceManageServiceImpl extends ServiceImpl<ResourceManageMapper,
|
|||||||
|
|
||||||
private static final ConcurrentHashMap<String, PlayToken> PLAY_TOKEN_CACHE = new ConcurrentHashMap<>();
|
private static final ConcurrentHashMap<String, PlayToken> PLAY_TOKEN_CACHE = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@Value("${resource.videoDir:D:/data/resources/videos}")
|
// @Value("${resource.videoDir:D:/data/resources/videos}")
|
||||||
private String videoDir;
|
// private String videoDir;
|
||||||
|
private final PathConfig pathConfig;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<ResourceManageVO> list(ResourceManageParam.QueryParam queryParam) {
|
public Page<ResourceManageVO> list(ResourceManageParam.QueryParam queryParam) {
|
||||||
@@ -93,7 +94,7 @@ public class ResourceManageServiceImpl extends ServiceImpl<ResourceManageMapper,
|
|||||||
String originalFilename = file.getOriginalFilename();
|
String originalFilename = file.getOriginalFilename();
|
||||||
String dateDir = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
String dateDir = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||||
String savedFileName = UUID.randomUUID().toString().replace("-", "") + MP4_SUFFIX;
|
String savedFileName = UUID.randomUUID().toString().replace("-", "") + MP4_SUFFIX;
|
||||||
Path rootPath = Paths.get(videoDir).toAbsolutePath().normalize();
|
Path rootPath = Paths.get(pathConfig.getResourcePath()).toAbsolutePath().normalize();
|
||||||
Path targetDir = rootPath.resolve(dateDir).normalize();
|
Path targetDir = rootPath.resolve(dateDir).normalize();
|
||||||
Path targetFile = targetDir.resolve(savedFileName).normalize();
|
Path targetFile = targetDir.resolve(savedFileName).normalize();
|
||||||
ensurePathInRoot(rootPath, targetFile);
|
ensurePathInRoot(rootPath, targetFile);
|
||||||
@@ -134,6 +135,19 @@ public class ResourceManageServiceImpl extends ServiceImpl<ResourceManageMapper,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean update(ResourceManageParam.UpdateParam updateParam) {
|
||||||
|
validateUpdateParam(updateParam);
|
||||||
|
getEnabledResource(updateParam.getId());
|
||||||
|
return this.lambdaUpdate()
|
||||||
|
.set(ResourceManage::getName, updateParam.getName().trim())
|
||||||
|
.set(ResourceManage::getRemark, updateParam.getRemark().trim())
|
||||||
|
.eq(ResourceManage::getId, updateParam.getId())
|
||||||
|
.eq(ResourceManage::getState, DataStateEnum.ENABLE.getCode())
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayVO play(String id) {
|
public PlayVO play(String id) {
|
||||||
ResourceManage resourceManage = getEnabledResource(id);
|
ResourceManage resourceManage = getEnabledResource(id);
|
||||||
@@ -217,6 +231,18 @@ public class ResourceManageServiceImpl extends ServiceImpl<ResourceManageMapper,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateUpdateParam(ResourceManageParam.UpdateParam param) {
|
||||||
|
if (param == null || StrUtil.isBlank(param.getId())) {
|
||||||
|
throw new BusinessException(ResourceManageResponseEnum.ID_NOT_BLANK);
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(param.getName())) {
|
||||||
|
throw new BusinessException(ResourceManageResponseEnum.NAME_NOT_BLANK);
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(param.getRemark())) {
|
||||||
|
throw new BusinessException(ResourceManageResponseEnum.REMARK_NOT_BLANK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ResourceManage getEnabledResource(String id) {
|
private ResourceManage getEnabledResource(String id) {
|
||||||
ResourceManage resourceManage = this.lambdaQuery()
|
ResourceManage resourceManage = this.lambdaQuery()
|
||||||
.eq(ResourceManage::getId, id)
|
.eq(ResourceManage::getId, id)
|
||||||
@@ -229,7 +255,7 @@ public class ResourceManageServiceImpl extends ServiceImpl<ResourceManageMapper,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Path resolveResourcePath(ResourceManage resourceManage) {
|
private Path resolveResourcePath(ResourceManage resourceManage) {
|
||||||
Path rootPath = Paths.get(videoDir).toAbsolutePath().normalize();
|
Path rootPath = Paths.get(pathConfig.getResourcePath()).toAbsolutePath().normalize();
|
||||||
String relativePath = resourceManage.getRelativePath().replace("\\", "/");
|
String relativePath = resourceManage.getRelativePath().replace("\\", "/");
|
||||||
String prefix = RELATIVE_VIDEO_ROOT + "/";
|
String prefix = RELATIVE_VIDEO_ROOT + "/";
|
||||||
if (!relativePath.startsWith(prefix)) {
|
if (!relativePath.startsWith(prefix)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user