diff --git a/pom.xml b/pom.xml index b96e18e..79679fe 100644 --- a/pom.xml +++ b/pom.xml @@ -75,6 +75,7 @@ + org.springdoc springdoc-openapi-starter-webmvc-ui @@ -96,6 +97,10 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-thymeleaf + diff --git a/src/main/java/a8k/a8kproj/optalgo/type/A8kOptPeak.java b/src/main/java/a8k/a8kproj/optalgo/type/A8kOptPeak.java index 2530a37..b621a25 100644 --- a/src/main/java/a8k/a8kproj/optalgo/type/A8kOptPeak.java +++ b/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; + } } diff --git a/src/main/java/a8k/constant/FilePathConstant.java b/src/main/java/a8k/constant/FilePathConstant.java index 85d0b2a..f64939a 100644 --- a/src/main/java/a8k/constant/FilePathConstant.java +++ b/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"; } diff --git a/src/main/java/a8k/controler/filemgr/FileMgrControler.java b/src/main/java/a8k/controler/filemgr/FileMgrControler.java deleted file mode 100644 index 982515c..0000000 --- a/src/main/java/a8k/controler/filemgr/FileMgrControler.java +++ /dev/null @@ -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 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"; - } - } - -} diff --git a/src/main/java/a8k/controler/filemgr/FileMgrController.java b/src/main/java/a8k/controler/filemgr/FileMgrController.java new file mode 100644 index 0000000..bf2c51d --- /dev/null +++ b/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 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 files) { + } + + record FileInfo(String filePath, String name) { + } + + + @GetMapping("/index") + public String fileDownloadPage(Model model) { + // Mock data for file groups and files + List 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 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 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 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())); + } +} \ No newline at end of file diff --git a/src/main/java/a8k/extapi_controler/DownloadMgr.java b/src/main/java/a8k/extapi_controler/DownloadMgr.java index 74178c7..bdcf2fe 100644 --- a/src/main/java/a8k/extapi_controler/DownloadMgr.java +++ b/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(); +// +// +// } } diff --git a/src/main/java/a8k/service/app/appdata/FileMgrService.java b/src/main/java/a8k/service/app/appdata/FileMgrService.java index 0011c69..b3188d7 100644 --- a/src/main/java/a8k/service/app/appdata/FileMgrService.java +++ b/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(); + // } + // } } diff --git a/src/main/java/a8k/service/test/A8kOptTest.java b/src/main/java/a8k/service/test/A8kOptTest.java index 801d2d6..3477e4f 100644 --- a/src/main/java/a8k/service/test/A8kOptTest.java +++ b/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 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 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 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 optScanReports = new ArrayList<>(); + + public void generateOptReport(OptScanResult optScanResult) { + OptScanReport report = new OptScanReport(); + report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData); + optScanReports.add(report); + } + + public List doOptScan(Integer projId) throws AppException { + optScanReports.clear(); + ProjBuildinInfo info = projInfoMgrService.getProjBuildInInfo(projId); + List 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/ - } } diff --git a/src/main/resources/static/filemgr/index.html b/src/main/resources/static/filemgr/index.html deleted file mode 100644 index f0bb7a2..0000000 --- a/src/main/resources/static/filemgr/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - File Upload - - - - - -

Upload a File

-
- - -
- - - - - \ No newline at end of file diff --git a/src/main/resources/templates/filemgr/index.html b/src/main/resources/templates/filemgr/index.html new file mode 100644 index 0000000..e22dc84 --- /dev/null +++ b/src/main/resources/templates/filemgr/index.html @@ -0,0 +1,23 @@ + + + + + + 文件管理 + + +

文件下载

+
+
+

+ +
+
+ + \ No newline at end of file