Browse Source

update

tags/v0
zhaohe 9 months ago
parent
commit
16ae320fc8
  1. 5
      pom.xml
  2. 15
      src/main/java/a8k/a8kproj/optalgo/type/A8kOptPeak.java
  3. 5
      src/main/java/a8k/constant/FilePathConstant.java
  4. 56
      src/main/java/a8k/controler/filemgr/FileMgrControler.java
  5. 153
      src/main/java/a8k/controler/filemgr/FileMgrController.java
  6. 32
      src/main/java/a8k/extapi_controler/DownloadMgr.java
  7. 192
      src/main/java/a8k/service/app/appdata/FileMgrService.java
  8. 100
      src/main/java/a8k/service/test/A8kOptTest.java
  9. 41
      src/main/resources/static/filemgr/index.html
  10. 23
      src/main/resources/templates/filemgr/index.html

5
pom.xml

@ -75,6 +75,7 @@
<!-- <version>3.0.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
@ -96,6 +97,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>

15
src/main/java/a8k/a8kproj/optalgo/type/A8kOptPeak.java

@ -4,6 +4,7 @@ import a8k.a8kproj.opttype.PeakName;
public class A8kOptPeak {
public PeakFindState state = PeakFindState.NOT_FIND_PEAK;
public PeakName peakName;
public Integer off;
public Double area;
@ -11,7 +12,6 @@ public class A8kOptPeak {
public Integer peakStartPos;
public Integer peakEndPos;
public PeakName peakName;
public String toString() {
return String.format("[%s: %s]", peakName, area);
@ -28,4 +28,17 @@ public class A8kOptPeak {
val.peakName = peakName;
return val;
}
public A8kOptPeak() {
}
public A8kOptPeak(PeakFindState state, PeakName peakName, Integer off, Double area, Integer peakPos, Integer peakStartPos, Integer peakEndPos) {
this.state = state;
this.peakName = peakName;
this.off = off;
this.area = area;
this.peakPos = peakPos;
this.peakStartPos = peakStartPos;
this.peakEndPos = peakEndPos;
}
}

5
src/main/java/a8k/constant/FilePathConstant.java

@ -1,6 +1,7 @@
package a8k.constant;
public class FilePathConstant {
public static final String FILE_UPLOAD_PATH = "runenv/files/";
public static final String FILE_DOWNLOAD_PATH = "runenv/files/";
public static final String FILE_UPLOAD_PATH = "runenv/files";
public static final String FILE_OPT_REPORT_PATH = "runenv/files/optReport";
public static final String FILE_DOWNLOAD_PATH = "runenv/files";
}

56
src/main/java/a8k/controler/filemgr/FileMgrControler.java

@ -1,56 +0,0 @@
package a8k.controler.filemgr;
import a8k.constant.FilePathConstant;
import a8k.type.appret.ApiV1Ret;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Tag(name = "文件管理")
@Slf4j
@RestController
@RequestMapping(value = "/filemgr")
public class FileMgrControler {
@GetMapping("/download/{path}")
public ResponseEntity<Resource> download(@PathVariable String path) {
String realpath = String.format(FilePathConstant.FILE_DOWNLOAD_PATH + "/%s", path);
String contentDisposition = ContentDisposition
.builder("attachment")
.filename(path) // Use the original filename
.build().toString();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(new FileSystemResource(realpath));
}
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
String uploadDir = FilePathConstant.FILE_UPLOAD_PATH;
File updatefilepath = new File(uploadDir);
if (!updatefilepath.exists()) {
updatefilepath.mkdirs();
}
try {
file.transferTo(new File(updatefilepath.getAbsolutePath() + file.getOriginalFilename()));
return "success";
} catch (IOException e) {
return "fail";
}
}
}

153
src/main/java/a8k/controler/filemgr/FileMgrController.java

@ -0,0 +1,153 @@
//package a8k.controler.filemgr;
//
//
//import a8k.constant.FilePathConstant;
//import a8k.type.appret.ApiV1Ret;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.core.io.FileSystemResource;
//import org.springframework.core.io.Resource;
//import org.springframework.http.ContentDisposition;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.ResponseEntity;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.File;
//import java.io.IOException;
//
//@Tag(name = "文件管理")
//@Slf4j
//@Controller
//@RequestMapping(value = "/files")
//public class FileMgrControler {
//
// @GetMapping("")
// public String index() {
// log.info("=======================================================================================");
// return "files/index.html";
// }
//
// @GetMapping("/download/{path}")
// @ResponseBody
// public ResponseEntity<Resource> download(@PathVariable String path) {
// String realpath = String.format(FilePathConstant.FILE_DOWNLOAD_PATH + "/%s", path);
// String contentDisposition = ContentDisposition
// .builder("attachment")
// .filename(path) // Use the original filename
// .build().toString();
// return ResponseEntity.ok()
// .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
// .body(new FileSystemResource(realpath));
// }
//
//
// @PostMapping("/upload")
// @ResponseBody
// public String handleFileUpload(@RequestParam("file") MultipartFile file) {
// String uploadDir = FilePathConstant.FILE_UPLOAD_PATH;
// File updatefilepath = new File(uploadDir);
// if (!updatefilepath.exists()) {
// updatefilepath.mkdirs();
// }
//
// try {
// file.transferTo(new File(updatefilepath.getAbsolutePath() + file.getOriginalFilename()));
// return "success";
// } catch (IOException e) {
// return "fail";
// }
// }
//
//}
// src/main/java/a8k/controller/FileMgrController.java
package a8k.controler.filemgr;
import a8k.constant.FilePathConstant;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
@Controller
@Slf4j
@RequestMapping("/filemgr")
public class FileMgrController {
record FileGroup(String name, List<FileInfo> files) {
}
record FileInfo(String filePath, String name) {
}
@GetMapping("/index")
public String fileDownloadPage(Model model) {
// Mock data for file groups and files
List<FileGroup> fileGroups = List.of(
new FileGroup("Group 1", List.of(new FileInfo("runenv/files/optReport/20241112152609.txt", "File1.txt"), new FileInfo("", "File2.txt"))),
new FileGroup("Group 2", List.of(new FileInfo("", "File3.txt"), new FileInfo("", "File4.txt")))
);
model.addAttribute("fileGroups", fileGroups);
return "filemgr/index.html";
}
// @GetMapping("/download/{fileId}")
// public ResponseEntity<Resource> downloadFile(@RequestParam("file") MultipartFile file) {
// String realpath = String.format(FilePathConstant.FILE_DOWNLOAD_PATH + "/%s", path);
// String contentDisposition = ContentDisposition
// .builder("attachment")
// .filename(path) // Use the original filename
// .build().toString();
// return ResponseEntity.ok()
// .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
// .body(new FileSystemResource(realpath));
// }
//
// @GetMapping("/download/{path}")
// @ResponseBody
// public ResponseEntity<Resource> download(@PathVariable String path) {
// log.info("Download file: {}", path);
// // String realpath = String.format(FilePathConstant.FILE_DOWNLOAD_PATH + "/%s", path);
// String contentDisposition = ContentDisposition
// .builder("attachment")
// .filename(path) // Use the original filename
// .build().toString();
// return ResponseEntity.ok()
// .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
// .body(new FileSystemResource(path));
// }
@GetMapping("/download/**")
@ResponseBody
public ResponseEntity<Resource> download(HttpServletRequest request) {
String path = request.getRequestURI().substring("/filemgr/download/".length());
String fileName = Paths.get(path).getFileName().toString();
log.info("Download file:{} path:{}", fileName, path);
File file = new File(path);
String contentDisposition = ContentDisposition
.builder("attachment")
.filename(fileName) // Use the original filename
.build().toString();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(new FileSystemResource(file.getAbsolutePath()));
}
}

32
src/main/java/a8k/extapi_controler/DownloadMgr.java

@ -36,21 +36,21 @@ public class DownloadMgr {
}
@PostConstruct
void init() throws IOException {
//创建一个文件并保存你好
FileSystemResource file = new FileSystemResource("你好.txt");
log.info("文件路径:{}", file.getFile().getAbsolutePath());
File file1 = new File("你好.txt");
log.info("文件路径:{}", file1.getAbsolutePath());
// var output = file.getOutputStream();
// output.write("你好".getBytes());
// output.close();
}
// @PostConstruct
// void init() throws IOException {
// //创建一个文件并保存你好
//
// FileSystemResource file = new FileSystemResource("你好.txt");
// log.info("文件路径:{}", file.getFile().getAbsolutePath());
//
// File file1 = new File("你好.txt");
// log.info("文件路径:{}", file1.getAbsolutePath());
//
// // var output = file.getOutputStream();
// // output.write("你好".getBytes());
// // output.close();
//
//
// }
}

192
src/main/java/a8k/service/app/appdata/FileMgrService.java

@ -1,8 +1,200 @@
package a8k.service.app.appdata;
import a8k.a8kproj.optalgo.type.A8kOptPeak;
import a8k.a8kproj.optalgo.type.OptAlgoAnalysResult;
import a8k.a8kproj.optalgo.type.OptScanResult;
import a8k.a8kproj.optalgo.type.PeakFindState;
import a8k.a8kproj.opttype.PeakDivision;
import a8k.a8kproj.opttype.PeakName;
import a8k.constant.FilePathConstant;
import a8k.service.dao.type.OptRawScanData;
import a8k.service.dao.type.a8kidcard.zenum.A8kOptType;
import a8k.utils.ZDateUtils;
import cn.hutool.core.io.FileUtil;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
@Slf4j
@Component
public class FileMgrService {
private String createOptReportContent(String projName, Integer projId, OptScanResult optScanResult) {
StringBuilder sb = new StringBuilder();
sb.append("日期").append("\n");
sb.append(ZDateUtils.toDateString(optScanResult.rawData.scanDate)).append("\n");
sb.append("项目名称").append("\n");
sb.append(projName).append("\n");
sb.append("项目ID").append("\n");
sb.append(projId).append("\n");
sb.append("光学类型").append("\n");
sb.append(optScanResult.rawData.optType).append("\n");
sb.append("发射增益").append("\n");
sb.append(optScanResult.rawData.lasterGain).append("\n");
sb.append("接收增益").append("\n");
sb.append(optScanResult.rawData.scanGain).append("\n");
sb.append("\n");
sb.append("T4").append("\n");
if (optScanResult.analysResult.T4 == null || optScanResult.analysResult.T4.state == PeakFindState.NOT_FIND_PEAK) {
sb.append("\n\n\n\n");
} else {
sb.append(optScanResult.analysResult.T4.peakStartPos).append("\n");
sb.append(optScanResult.analysResult.T4.peakEndPos).append("\n");
sb.append(optScanResult.analysResult.T4.peakPos).append("\n");
sb.append(optScanResult.analysResult.T4.area).append("\n");
}
sb.append("R").append("\n");
if (optScanResult.analysResult.R == null || optScanResult.analysResult.R.state == PeakFindState.NOT_FIND_PEAK) {
sb.append("\n\n\n\n");
} else {
sb.append(optScanResult.analysResult.R.peakStartPos).append("\n");
sb.append(optScanResult.analysResult.R.peakEndPos).append("\n");
sb.append(optScanResult.analysResult.R.peakPos).append("\n");
sb.append(optScanResult.analysResult.R.area).append("\n");
}
sb.append("H").append("\n");
if (optScanResult.analysResult.H == null || optScanResult.analysResult.H.state == PeakFindState.NOT_FIND_PEAK) {
sb.append("\n\n\n\n");
} else {
sb.append(optScanResult.analysResult.H.peakStartPos).append("\n");
sb.append(optScanResult.analysResult.H.peakEndPos).append("\n");
sb.append(optScanResult.analysResult.H.peakPos).append("\n");
sb.append(optScanResult.analysResult.H.area).append("\n");
}
sb.append("T").append("\n");
if (optScanResult.analysResult.T == null || optScanResult.analysResult.T.state == PeakFindState.NOT_FIND_PEAK) {
sb.append("\n\n\n\n");
} else {
sb.append(optScanResult.analysResult.T.peakStartPos).append("\n");
sb.append(optScanResult.analysResult.T.peakEndPos).append("\n");
sb.append(optScanResult.analysResult.T.peakPos).append("\n");
sb.append(optScanResult.analysResult.T.area).append("\n");
}
sb.append("C").append("\n");
if (optScanResult.analysResult.C == null || optScanResult.analysResult.C.state == PeakFindState.NOT_FIND_PEAK) {
sb.append("\n\n\n\n");
} else {
sb.append(optScanResult.analysResult.C.peakStartPos).append("\n");
sb.append(optScanResult.analysResult.C.peakEndPos).append("\n");
sb.append(optScanResult.analysResult.C.peakPos).append("\n");
sb.append(optScanResult.analysResult.C.area).append("\n");
}
sb.append("\n");
sb.append("R(").append(PeakDivision.R.numerator).append("/").append(PeakDivision.R.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdR).append("\n");
sb.append("AR(").append(PeakDivision.AR.numerator).append("/").append(PeakDivision.AR.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdAR).append("\n");
sb.append("ATR(").append(PeakDivision.ATR.numerator).append("/").append(PeakDivision.ATR.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdATR).append("\n");
sb.append("RFR(").append(PeakDivision.RFR.numerator).append("/").append(PeakDivision.RFR.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdRFR).append("\n");
sb.append("T4R(").append(PeakDivision.T4R.numerator).append("/").append(PeakDivision.T4R.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdT4R).append("\n");
sb.append("T4T3R(").append(PeakDivision.T4T3R.numerator).append("/").append(PeakDivision.T4T3R.denominator).append(")").append("\n");
sb.append(optScanResult.analysResult.pdT4T3R).append("\n");
sb.append("\n");
sb.append("解析后的数据(250个点)").append("\n");
for (int i = 0; i < 250; i++) {
if (i < optScanResult.analysResult.resultData.length) {
sb.append(optScanResult.analysResult.resultData[i]).append("\n");
} else {
sb.append(" ").append("\n");
}
}
sb.append("\n");
sb.append("原始数据(1200个点)").append("\n");
for (int i = 0; i < 1200; i++) {
if (i < optScanResult.rawData.rawData.length) {
sb.append(optScanResult.rawData.rawData[i]).append("\n");
} else {
sb.append(" ").append("\n");
}
}
sb.append("\n");
return sb.toString();
}
public String createOptReport(String projName, Integer projId, OptScanResult optScanResult) throws IOException {
File dir = new File(FilePathConstant.FILE_OPT_REPORT_PATH);
dir.mkdir();
String path = String.format("%s/%s.txt", FilePathConstant.FILE_OPT_REPORT_PATH, ZDateUtils.toID(optScanResult.rawData.scanDate));
File file = new File(path);
FileWriter writer = new FileWriter(file.getAbsolutePath());
String content = createOptReportContent(projName, projId, optScanResult);
writer.write(content);
writer.close();
return file.getAbsolutePath();
}
public void createFakeOptReport() throws IOException {
OptRawScanData data = new OptRawScanData();
data.id = 1;
data.dataid = ZDateUtils.toID(new Date());
data.scanDate = new Date();
data.optType = A8kOptType.FOPT;
data.lasterGain = 10;
data.scanGain = 11;
data.rawData = new Integer[1200];
for (int i = 0; i < 1200; i++) {
data.rawData[i] = i;
}
OptAlgoAnalysResult optAlgoAnalysResult = new OptAlgoAnalysResult();
optAlgoAnalysResult.T4 = new A8kOptPeak(PeakFindState.FIND_PEAK, PeakName.T4, 0, 1.1, 40, 0, 80);
optAlgoAnalysResult.R = new A8kOptPeak(PeakFindState.FIND_PEAK, PeakName.R, 0, 1.1, 80, 40, 120);
optAlgoAnalysResult.H = null;
optAlgoAnalysResult.T = new A8kOptPeak(PeakFindState.FIND_PEAK, PeakName.T, 0, 1.1, 160, 120, 200);
optAlgoAnalysResult.C = new A8kOptPeak(PeakFindState.FIND_PEAK, PeakName.C, 0, 1.1, 200, 160, 240);
optAlgoAnalysResult.pdR = 1.1;
optAlgoAnalysResult.pdAR = 1.2;
optAlgoAnalysResult.pdATR = 1.3;
optAlgoAnalysResult.pdRFR = 1.4;
optAlgoAnalysResult.pdT4R = 1.5;
optAlgoAnalysResult.pdT4T3R = 1.6;
optAlgoAnalysResult.rawData = new Integer[1200];
for (int i = 0; i < 1200; i++) {
optAlgoAnalysResult.rawData[i] = i;
}
optAlgoAnalysResult.resultData = new double[250];
for (int i = 0; i < 250; i++) {
optAlgoAnalysResult.resultData[i] = i;
}
OptScanResult optScanResult = new OptScanResult();
optScanResult.rawData = data;
optScanResult.analysResult = optAlgoAnalysResult;
String path = createOptReport("Fake", 1, optScanResult);
log.info("createFakeOptReport success {}", path);
}
// public static void main(String[] args) {
// FileMgrService fileMgrService = new FileMgrService();
// try {
// fileMgrService.createFakeOptReport();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}

100
src/main/java/a8k/service/test/A8kOptTest.java

@ -1,9 +1,11 @@
package a8k.service.test;
import a8k.a8kproj.optalgo.type.OptAlgoAnalysResult;
import a8k.a8kproj.optalgo.type.OptScanResult;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.service.app.appdata.FileMgrService;
import a8k.service.app.appdata.ProjInfoMgrService;
import a8k.service.app.devicectrl.ctrlservice.OptScanModuleCtrlService;
import a8k.service.app.devicectrl.ctrlservice.PlateBoxCtrlService;
@ -11,13 +13,17 @@ import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver;
import a8k.service.app.devicectrl.driver.type.StepMotorMId;
import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
import a8k.service.app.devicectrl.param.param_mgr.OptModuleExtParamsMgr;
import a8k.type.A8kScanCurve;
import a8k.type.ConsumableGroup;
import a8k.type.IncubatorPos;
import a8k.type.exception.AppException;
import a8k.utils.ProjBuildinInfo;
import a8k.utils.ZList;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -47,6 +53,8 @@ public class A8kOptTest {
@Resource
ProjInfoMgrService projInfoMgrService;
@Autowired
private FileMgrService fileMgrService;
@ExtApiFn(name = "归零", group = "测试工具", order = 11)
public void deviceReset() throws AppException {
@ -84,71 +92,61 @@ public class A8kOptTest {
}
// A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) {
// // Integer[] optScanResult250 = A8kOptAlgoUtils.supperSamplingAndSubSampling(optScanResult);
// List<Integer> refCurve = new ArrayList<>();
// for (int i = 1; i < 6; i++) {
// refCurve.add((int) (40 * 4.8 * i));
// }
//
// var result = new A8kScanCurve();
// result.refCurve = refCurve;
// result.scanDataCurve = ZList.of(optScanResult);
// return result;
// }
//
//
// @ExtApiFn(name = "F光学扫描", group = "扫描", order = 303)
// public A8kScanCurve FOptScan() throws AppException {
// Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.FOPT);
// Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.FOPT, scanGain);
// Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.FOPT);
// var result = optScanModuleCtrlService.startOptScan(A8kOptType.FOPT, rawLasterGain, rawScanGain);
// return createScanCurve1200Point(result);
// }
//
// @ExtApiFn(name = "T光学扫描", group = "扫描", order = 403)
// public A8kScanCurve TOptScan() throws AppException {
// Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.TOPT);
// Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.TOPT, scanGain);
// Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.TOPT);
//
// var result = optScanModuleCtrlService.startOptScan(A8kOptType.TOPT, rawLasterGain, rawScanGain);
// return createScanCurve1200Point(result);
// }
A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) {
List<Integer> refCurve = new ArrayList<>();
for (int i = 1; i < 6; i++) {
refCurve.add((int) (40 * 4.8 * i));
}
var result = new A8kScanCurve();
result.refCurve = refCurve;
result.scanDataCurve = ZList.of(optScanResult);
return result;
}
//
// 生成报告
//
//
//
public void doOptScan(Integer projId) throws AppException {
// assignName ok
// R/AR/
static class OptScanReport {
public A8kScanCurve optScanCurve;
public String reportURL;
}
ProjBuildinInfo info = projInfoMgrService.getProjBuildInInfo(projId);
List<OptScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < info.projOptInfos.size(); i++) {
// OptScanResult scanResult = optScanModuleCtrlService.optScan(info.projInfo, info.projOptInfoList, i);
// scanResults.add(scanResult);
}
List<OptScanReport> optScanReports = new ArrayList<>();
public void generateOptReport(OptScanResult optScanResult) {
OptScanReport report = new OptScanReport();
report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData);
optScanReports.add(report);
}
public List<OptAlgoAnalysResult> doOptScan(Integer projId) throws AppException {
optScanReports.clear();
ProjBuildinInfo info = projInfoMgrService.getProjBuildInInfo(projId);
List<OptAlgoAnalysResult> analysResults = new ArrayList<>();
for (int i = 0; i < info.projOptInfos.size(); i++) {
OptScanResult scanResult = optScanModuleCtrlService.optScan(info.projBaseInfo, info.projOptInfos.get(i), i);
generateOptReport(scanResult);
analysResults.add(scanResult.analysResult);
}
return analysResults;
}
public void parseOptData(String rawOptDataId) {
// assignName ok
// R/AR/
public A8kScanCurve getScanCurve(Integer subProjIndex) {
if (subProjIndex < optScanReports.size()) {
return optScanReports.get(subProjIndex).optScanCurve;
}
return null;
}
@ExtApiFn(name = "生成光学扫描报告", group = "报告", order = 100)
public void generateOptReport() {
public ProjBuildinInfo getProjInfo(Integer projId) throws AppException {
return projInfoMgrService.getProjBuildInInfo(projId);
}
// assignName ok
// R/AR/
}
}

41
src/main/resources/static/filemgr/index.html

@ -1,41 +0,0 @@
<!-- src/main/resources/static/filemgr/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>File Upload</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.9.1/jquery.modal.min.js"></script>
</head>
<body>
<h1>Upload a File</h1>
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">Upload</button>
</form>
<div id="message" class="modal"></div>
<script>
$(document).ready(function() {
$('#uploadForm').on('submit', function(event) {
event.preventDefault();
var formData = new FormData(this);
$.ajax({
url: '/filemgr/upload',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function(response) {
$('#message').text(response).modal();
},
error: function() {
$('#message').text('Failed to upload file.').modal();
}
});
});
});
</script>
</body>
</html>

23
src/main/resources/templates/filemgr/index.html

@ -0,0 +1,23 @@
<!-- src/main/resources/templates/filemgr/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件管理</title>
</head>
<body>
<h1>文件下载</h1>
<div>
<div th:each="group : ${fileGroups}">
<h2 th:text="${group.name}"></h2>
<div th:each="file : ${group.files}">
<a th:href="@{'/filemgr/download/' + ${file.filePath}}">
<button>
<span th:text="${file.name}"></span>
</button>
</a>
</div>
</div>
</div>
</body>
</html>
Loading…
Cancel
Save