diff --git a/src/main/java/a8k/app/a8kproj/optalgo/type/OptScanResult.java b/src/main/java/a8k/app/a8kproj/optalgo/type/OptScanResult.java index e07757b..ff50a9e 100644 --- a/src/main/java/a8k/app/a8kproj/optalgo/type/OptScanResult.java +++ b/src/main/java/a8k/app/a8kproj/optalgo/type/OptScanResult.java @@ -1,6 +1,7 @@ package a8k.app.a8kproj.optalgo.type; import a8k.app.dao.db.type.OptRawScanData; +import a8k.app.utils.ZJsonHelper; import java.util.Date; @@ -8,4 +9,7 @@ public class OptScanResult { public Date scanDate; public OptRawScanData rawData; public OptAlgoAnalysResult analysResult; + public String toString() { + return ZJsonHelper.objectToJson(this); + } } diff --git a/src/main/java/a8k/app/dao/db/type/ReactionReport.java b/src/main/java/a8k/app/dao/db/type/ReactionReport.java index 2bd262b..4bec822 100644 --- a/src/main/java/a8k/app/dao/db/type/ReactionReport.java +++ b/src/main/java/a8k/app/dao/db/type/ReactionReport.java @@ -3,6 +3,7 @@ package a8k.app.dao.db.type; import a8k.app.a8kproj.optalgo.type.OptScanResult; import a8k.app.a8ktype.type.ReactionResult; import a8k.app.a8ktype.device.BloodType; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; import a8k.app.utils.ProjInfo; import a8k.app.utils.ZDateUtils; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -87,4 +88,24 @@ public class ReactionReport implements Serializable { //记录单个反应板的 @Schema(description = "扫描结果") @JsonIgnore public List detailOptData = new ArrayList<>();// 扫描上下文数据(包含原始结果,扫描参数,扫描原始数据) + + + public OptScanResult getOptData(int subProjIndex) { + A8kOptType subProjOptType = getSubProjOptType(subProjIndex); + + for (OptScanResult optScanResult : detailOptData) { + if (optScanResult.rawData.optType == subProjOptType) { + return optScanResult; + } + } + return null; + } + + public A8kOptType getSubProjOptType(int subProjIndex) { + return projInfo.buildIn.optcfg.get(subProjIndex).optType; + } + + public String getSubProjName(int subProjIndex) { + return projInfo.buildIn.optcfg.get(subProjIndex).subProjName; + } } diff --git a/src/main/java/a8k/app/service/data/FileMgrService.java b/src/main/java/a8k/app/service/data/FileMgrService.java index 07b103c..462fff2 100644 --- a/src/main/java/a8k/app/service/data/FileMgrService.java +++ b/src/main/java/a8k/app/service/data/FileMgrService.java @@ -51,15 +51,19 @@ public class FileMgrService { } public String storageOptReport(String projName, Integer projId, OptScanResult optScanResult) throws IOException { + return storageOptReport("NotSet", projName, projId, "NotSet", optScanResult, "NotSet"); + } + + public String storageOptReport(String userid, String projName, Integer projId, String subprojName, OptScanResult optScanResult, String result) throws IOException { File dir = new File(FilePathConstant.FILE_OPT_REPORT_PATH); dir.mkdir(); - String fileName = String.format("%s(%s)-%s-%s.txt", projName, projId, optScanResult.rawData.optType, ZDateUtils.toID(optScanResult.scanDate)); + String fileName = String.format("%s-(%s)-%s-%s.txt", userid, projName, projId, optScanResult.rawData.optType, ZDateUtils.toID(optScanResult.scanDate)); String filePath = String.format("%s/%s", FilePathConstant.FILE_OPT_REPORT_PATH, fileName); File file = new File(filePath); FileWriter writer = new FileWriter(file.getAbsolutePath()); - String content = createOptReportContent(projName, projId, optScanResult); + String content = createOptReportContent(userid, projName, projId, subprojName, optScanResult, result); writer.write(content); writer.close(); @@ -71,31 +75,39 @@ public class FileMgrService { // - private String createOptReportContent(String projName, Integer projId, OptScanResult optScanResult) { + private String createOptReportContent(String userid, String projName, Integer projId, String subprojName, OptScanResult optScanResult, String result) { StringBuilder sb = new StringBuilder(); sb.append("Date").append("\n"); - sb.append(ZDateUtils.toDateString(optScanResult.scanDate)).append("\n"); + sb.append("userId").append("\n"); + sb.append(userid).append("\n"); sb.append("ProjName").append("\n"); sb.append(projName).append("\n"); sb.append("ProjId").append("\n"); sb.append(projId).append("\n"); + sb.append("SubProjName").append("\n"); + sb.append(subprojName).append("\n"); sb.append("OptType").append("\n"); sb.append(optScanResult.rawData.optType).append("\n"); sb.append("lasterGain").append("\n"); sb.append(optScanResult.rawData.lasterGain).append("\n"); sb.append("scanerGain").append("\n"); sb.append(optScanResult.rawData.scanGain).append("\n"); + sb.append("Result").append("\n"); + sb.append(result).append("\n"); + sb.append("\n"); + sb.append("\n"); + sb.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(String.format("%d",optScanResult.analysResult.T4.peakStartPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.T4.peakEndPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.T4.peakPos)).append("\n"); - sb.append(String.format("%.2f",optScanResult.analysResult.T4.area)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T4.peakStartPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T4.peakEndPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T4.peakPos)).append("\n"); + sb.append(String.format("%.2f", optScanResult.analysResult.T4.area)).append("\n"); } @@ -103,20 +115,20 @@ public class FileMgrService { if (optScanResult.analysResult.R == null || optScanResult.analysResult.R.state == PeakFindState.NOT_FIND_PEAK) { sb.append("\n\n\n\n"); } else { - sb.append(String.format("%d",optScanResult.analysResult.R.peakStartPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.R.peakEndPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.R.peakPos)).append("\n"); - sb.append(String.format("%.2f",optScanResult.analysResult.R.area)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.R.peakStartPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.R.peakEndPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.R.peakPos)).append("\n"); + sb.append(String.format("%.2f", 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(String.format("%d",optScanResult.analysResult.H.peakStartPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.H.peakEndPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.H.peakPos)).append("\n"); - sb.append(String.format("%.2f",optScanResult.analysResult.H.area)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.H.peakStartPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.H.peakEndPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.H.peakPos)).append("\n"); + sb.append(String.format("%.2f", optScanResult.analysResult.H.area)).append("\n"); } @@ -124,20 +136,20 @@ public class FileMgrService { if (optScanResult.analysResult.T == null || optScanResult.analysResult.T.state == PeakFindState.NOT_FIND_PEAK) { sb.append("\n\n\n\n"); } else { - sb.append(String.format("%d",optScanResult.analysResult.T.peakStartPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.T.peakEndPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.T.peakPos)).append("\n"); - sb.append(String.format("%.2f",optScanResult.analysResult.T.area)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T.peakStartPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T.peakEndPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.T.peakPos)).append("\n"); + sb.append(String.format("%.2f", 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(String.format("%d",optScanResult.analysResult.C.peakStartPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.C.peakEndPos)).append("\n"); - sb.append(String.format("%d",optScanResult.analysResult.C.peakPos)).append("\n"); - sb.append(String.format("%.2f",optScanResult.analysResult.C.area)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.C.peakStartPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.C.peakEndPos)).append("\n"); + sb.append(String.format("%d", optScanResult.analysResult.C.peakPos)).append("\n"); + sb.append(String.format("%.2f", optScanResult.analysResult.C.area)).append("\n"); } sb.append("\n"); diff --git a/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java b/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java index 943ddd4..f42bcc6 100644 --- a/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java +++ b/src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java @@ -83,6 +83,10 @@ public class ProjIdCardInfoMgrService { } public ProjExtInfoCard getByLotId(String lotId) { + var mountedProjInfoCard = getMountedProjInfoCard(); + if (mountedProjInfoCard != null && mountedProjInfoCard.lotId.equals(lotId)) { + return mountedProjInfoCard; + } return a8KProjExtInfoCardDao.getByLotId(lotId); } @@ -126,7 +130,7 @@ public class ProjIdCardInfoMgrService { } for (int i = 0; i < projExtInfoCard.subProjNum; i++) { - ZAppChecker.notNull(projExtInfoCard.projFnFormuals.get(i), A8kEcode.CODEERROR, "项目卡配置的光学%s公式为空",i+1); + ZAppChecker.notNull(projExtInfoCard.projFnFormuals.get(i), A8kEcode.CODEERROR, "项目卡配置的光学%s公式为空", i + 1); verifyOptFunction(projExtInfoCard.projFnFormuals.get(i), ecodeList); } diff --git a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java index 866ebee..be9d263 100644 --- a/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java +++ b/src/main/java/a8k/extui/page/extsetting/db/ReactionRecordMgrDebugPage.java @@ -1,6 +1,7 @@ package a8k.extui.page.extsetting.db; import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.opttype.ReactionResultStatus; import a8k.app.controler.filemgr.StorageControler; import a8k.app.dao.db.type.ReactionReport; import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; @@ -59,8 +60,18 @@ public class ReactionRecordMgrDebugPage { if (report.detailOptData.isEmpty()) { throw AppException.ofSimplePrompt("没有光学数据"); } - for (var optData : report.detailOptData) { - tasks.urls.add(fileMgrService.storageOptReport(report.projName, report.projId, optData)); + int offset = 0; + for (var result : report.results) { + // public String storageOptReport(String userid, String projName, Integer projId, String subprojName, OptScanResult optScanResult, String result) throws IOException { + tasks.urls.add(fileMgrService.storageOptReport( + report.getSampleUserid(), + report.getProjName(), + report.getProjId(), + result.subProjName, + report.getOptData(offset), + result.status.equals(ReactionResultStatus.SUCCESS) ? String.format("%.2f %s", result.result, result.resultConverters.get(0).uintstr) : "ERROR" + )); + offset++; } return tasks; } diff --git a/tools/20250120光学光学报告.xlsx b/tools/20250120光学光学报告.xlsx new file mode 100644 index 0000000..13dad82 Binary files /dev/null and b/tools/20250120光学光学报告.xlsx differ