From 70d4605b244109e327d80c255dabe44d9499ff40 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 31 Oct 2024 09:43:55 +0800 Subject: [PATCH] update --- .../java/a8k/hardware/A8kModParamInitializer.java | 3 ++ src/main/java/a8k/optalgo/A8kOptAlgoV2.java | 2 +- src/main/java/a8k/optanalyzer/A8kOptXComputer.java | 12 ++++- .../app/appdata/ReactionRecordMgrService.java | 17 ++++--- .../ctrlservice/OptScanModuleCtrlService.java | 23 +++++----- .../app/devicectrl/script/DeviceCtrlScripter.java | 2 +- .../java/a8k/service/dao/type/A8kProjInfoCard.java | 52 +++++++++++----------- .../service/dao/type/a8kidcard/A8kFnFormula.java | 12 ++--- .../service/dao/type/a8kidcard/A8kIdCardFn.java | 8 ++-- .../a8k/service/test/MainflowCtrlTestService.java | 2 +- .../a8k/service/test/fakeproj/FAKE_PROJ_02.java | 2 +- .../a8k/service/test/fakeproj/FAKE_PROJ_03.java | 2 +- .../a8k/service/test/fakeproj/FAKE_PROJ_04.java | 2 +- .../a8k/service/test/fakeproj/FAKE_PROJ_05.java | 2 +- .../a8k/service/test/fakeproj/FAKE_PROJ_06.java | 2 +- .../test/fakeproj/FAKE_PROJ_07_EXPIRED.java | 2 +- .../a8k/service/test/fakeproj/FakeProjInfo.java | 16 +++---- 17 files changed, 90 insertions(+), 71 deletions(-) diff --git a/src/main/java/a8k/hardware/A8kModParamInitializer.java b/src/main/java/a8k/hardware/A8kModParamInitializer.java index 992d67a..9951345 100644 --- a/src/main/java/a8k/hardware/A8kModParamInitializer.java +++ b/src/main/java/a8k/hardware/A8kModParamInitializer.java @@ -112,6 +112,9 @@ public class A8kModParamInitializer { canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_look_zero_edge_speed, 10); + pipetteCtrlDriver.setReg(PipetteRegIndex.kreg_pipette_zm_default_velocity, 1500); + + } diff --git a/src/main/java/a8k/optalgo/A8kOptAlgoV2.java b/src/main/java/a8k/optalgo/A8kOptAlgoV2.java index d32261a..2419155 100644 --- a/src/main/java/a8k/optalgo/A8kOptAlgoV2.java +++ b/src/main/java/a8k/optalgo/A8kOptAlgoV2.java @@ -61,7 +61,7 @@ public class A8kOptAlgoV2 { findpeak(avg, 180, 220, result.peaks.P040); } - return null; + return result; } static double findAvgLine(double[] inputRaw) { diff --git a/src/main/java/a8k/optanalyzer/A8kOptXComputer.java b/src/main/java/a8k/optanalyzer/A8kOptXComputer.java index 667c0e9..d3fb883 100644 --- a/src/main/java/a8k/optanalyzer/A8kOptXComputer.java +++ b/src/main/java/a8k/optanalyzer/A8kOptXComputer.java @@ -1,5 +1,6 @@ package a8k.optanalyzer; +import a8k.optalgo.type.A8kOptPeaks; import a8k.optanalyzer.context.OptAnalyzeContext; import a8k.optanalyzer.exception.A8kOptProcessException; import a8k.service.dao.type.ProjOptConfig; @@ -73,7 +74,16 @@ public class A8kOptXComputer { OptChecker.checkNotNull(optcxt, idCardFn, "idCardFn == null"); OptChecker.checkNotNull(optcxt, optcfg, "optcfg == null"); - Double X = A8kOptXGetter.getX(idCardFn.norFnX, optcfg, optcxt.foptResult.peaks, optcxt.toptResult.peaks); + A8kOptPeaks tpeaks = null, fpeaks = null; + if (optcxt.foptResult != null) { + fpeaks = optcxt.foptResult.peaks; + } + if (optcxt.toptResult != null) { + tpeaks = optcxt.toptResult.peaks; + } + + + Double X = A8kOptXGetter.getX(idCardFn.norFnX, optcfg, fpeaks, tpeaks); OptChecker.checkX(X, idCardFn.norFnXMin, idCardFn.norFnXMax); Double result1 = fn.A * X * X + fn.B * X + fn.C; diff --git a/src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java b/src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java index 3564059..bcd3680 100644 --- a/src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java +++ b/src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java @@ -39,6 +39,9 @@ public class ReactionRecordMgrService { } public void addRecord(ProjProcessContext projContext, ReactionResult... reactionResults) { + if (reactionResults == null || reactionResults.length == 0) { + return; + } ReactionResultRecord record = new ReactionResultRecord(); String operator = appUserMgrService.getLoginUsr() != null ? appUserMgrService.getLoginUsr().account : "UNLOGIN"; @@ -48,14 +51,14 @@ public class ReactionRecordMgrService { record.sampleUserid = projContext.userid; record.sampleId = projContext.sampleId; record.projName = projContext.projInfo.projName; - record.lotId = projContext.projCfg.idCardInfo.lotId; - record.projId = projContext.projCfg.idCardInfo.projId; + record.lotId = projContext.projCfg.idCardInfo.lotId; + record.projId = projContext.projCfg.idCardInfo.projId; record.setExpiryDate(projContext.projCfg.idCardInfo.expiryDate); - record.operator = operator; - record.projShortName = projContext.projInfo.projShortName; - record.appVersion = gstate.getAppVersion(); - record.mcuVersion = gstate.getMcuVersion(); - record.sn = gstate.getSn(); + record.operator = operator; + record.projShortName = projContext.projInfo.projShortName; + record.appVersion = gstate.getAppVersion(); + record.mcuVersion = gstate.getMcuVersion(); + record.sn = gstate.getSn(); if (reactionResults.length == 1) { diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java index c38062b..bc5cee6 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java @@ -181,16 +181,19 @@ public class OptScanModuleCtrlService { } - for (int i = 0; i < optCxt.pcfg.projOptConfigList.size(); i++) { - try { - ReactionResult result = A8kOptXComputer.computeResult(optCxt, i); - optCxt.result.add(result); - } catch (A8kOptProcessException e) { - ProjOptConfig optcfg = optCxt.getfOptCfg(i); - var result = new ReactionResult(optcfg.projName, optcfg.subProjShortName, e.status, e.errorMsg); - optCxt.result.add(result); - } - } + //TODO: + return; + +// for (int i = 0; i < optCxt.pcfg.projOptConfigList.size(); i++) { + // try { + // ReactionResult result = A8kOptXComputer.computeResult(optCxt, i); + // optCxt.result.add(result); + // } catch (A8kOptProcessException e) { + // ProjOptConfig optcfg = optCxt.getfOptCfg(i); + // var result = new ReactionResult(optcfg.projName, optcfg.subProjShortName, e.status, e.errorMsg); + // optCxt.result.add(result); + // } + // } } diff --git a/src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java b/src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java index 6eaaf88..57b3fb0 100644 --- a/src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java +++ b/src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java @@ -182,7 +182,7 @@ public class DeviceCtrlScripter { hbotCtrlService.moveTo(hbotConsumableParamMgr.getProbeSubstanceSamplePosEnd(ctx.consumable.getGroup(), ctx.consumable.getPos())); //吐液 - distribute(PipetteGunBindActionType.DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE, ctx, takeul); + distribute(PipetteGunBindActionType.DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE, ctx, -takeul); //丢tip hbotCtrlService.dropTip(); diff --git a/src/main/java/a8k/service/dao/type/A8kProjInfoCard.java b/src/main/java/a8k/service/dao/type/A8kProjInfoCard.java index 7e585d8..18c12a9 100644 --- a/src/main/java/a8k/service/dao/type/A8kProjInfoCard.java +++ b/src/main/java/a8k/service/dao/type/A8kProjInfoCard.java @@ -19,33 +19,33 @@ public class A8kProjInfoCard { public Integer palteCode; // 板条条码代码 0x0020 public Integer updateChipVersion; // 更新芯片版本号 0x0021 - public Double QCPeakMinVal; // 质控峰最小值 0x0022 - public Double QCPeakMaxVal; // 质控峰最大值 设置值x10最大不超过250000 0x0027 - public Integer optType; // 光学类型 光学类型(0=自动;1=F光学;2=T光学;3=F/T光学;其他=无效;) 0x002C - public Integer optFixedGainSetting; // 光学固定增益设置 0x002D - public Integer optAreaPeakCount; // 光学面积峰个数 0x002E - public Integer calculationDirection; // 计算方向 0=默认;1=反向;2=正常; 0x002F - public Integer sampleType; // 0=默认;1=血清;2=全血;其他值=无效 样本类型 0x0030 - public Integer equipmentManufacturer; // 设备厂商 0x0031 - public Integer tOptIlluminationTime; // T光学持续光照时间 0x0032 - public Integer incMultiInstruDataMerge; // 是否包含多款仪器数据合并 0x0034 - public Integer multiInstruDataMerge0; // 多款仪器数据合并 0x0035 - public Integer multiInstruDataMerge1; // 多款仪器数据合并 0x0036 - public Integer wBloodSampleVolUl; // 全血样本量 0x0037 - public Integer serumSampleVolUl; // 血清/血浆样本量 0x0038 - public Integer tubeMixingCount; // 试管混匀次数 0x0039 - public Integer bufferBottleSize; // 缓冲液瓶大小 0x003A ,没有的配置 - public Integer bufferBottleCapacity; // 缓冲液瓶容量 0x003B ,没有的配置 - public Integer bufferSolutionMixingCnt; // 缓冲液吸吐混匀次数 0x003C - public Integer reactionPlateDropletVolUl; // 缓冲液吐混混匀量 0x003D - public Integer buffLiquidReactionTime; // 缓冲液反应时间 0x003E - public Integer reactionPlateReactionTime; // 反应板反应时间 0x003F - public Integer reactionPlateDropletVol; // 反应板滴样量 0x0040 - public Integer resultDecimalPlaces; // 结果小数点位数 0x0041 - public Integer scanningRange; // 扫描范围 0x0042 + public Double QCPeakMinVal = 0.0; // 质控峰最小值 0x0022 + public Double QCPeakMaxVal = 3000.0; // 质控峰最大值 设置值x10最大不超过250000 0x0027 + public Integer optType = 0; // 光学类型 光学类型(0=自动;1=F光学;2=T光学;3=F/T光学;其他=无效;) 0x002C + public Integer optFixedGainSetting = 1; // 光学固定增益设置 0x002D + public Integer optAreaPeakCount = 3; // 光学面积峰个数 0x002E + public Integer calculationDirection = 0; // 计算方向 0=默认;1=反向;2=正常; 0x002F + public Integer sampleType = 0; // 0=默认;1=血清;2=全血;其他值=无效 样本类型 0x0030 + public Integer equipmentManufacturer = 0; // 设备厂商 0x0031 + public Integer tOptIlluminationTime = -1; // T光学持续光照时间 0x0032 + public Integer incMultiInstruDataMerge = -1; // 是否包含多款仪器数据合并 0x0034 + public Integer multiInstruDataMerge0 = -1; // 多款仪器数据合并 0x0035 + public Integer multiInstruDataMerge1 = -1; // 多款仪器数据合并 0x0036 + public Integer wBloodSampleVolUl = -1; // 全血样本量 0x0037 + public Integer serumSampleVolUl = -1; // 血清/血浆样本量 0x0038 + public Integer tubeMixingCount = -1; // 试管混匀次数 0x0039 + public Integer bufferBottleSize = -1; // 缓冲液瓶大小 0x003A ,没有的配置 + public Integer bufferBottleCapacity = -1; // 缓冲液瓶容量 0x003B ,没有的配置 + public Integer bufferSolutionMixingCnt = -1; // 缓冲液吸吐混匀次数 0x003C + public Integer reactionPlateDropletVolUl = -1; // 缓冲液吐混混匀量 0x003D + public Integer buffLiquidReactionTime = -1; // 缓冲液反应时间 0x003E + public Integer reactionPlateReactionTime = -1; // 反应板反应时间 0x003F + public Integer reactionPlateDropletVol = -1; // 反应板滴样量 0x0040 + public Integer resultDecimalPlaces = -1; // 结果小数点位数 0x0041 + public Integer scanningRange = -1; // 扫描范围 0x0042 - public Integer subProjNum; // 当前项目是几联卡项目,val = 1,2,3 0x0100 - public A8kIdCardFn pj1FnInfo; + public Integer subProjNum = 1; // 当前项目是几联卡项目,val = 1,2,3 0x0100 + public A8kIdCardFn pj1FnInfo = new A8kIdCardFn(); public A8kIdCardFn pj2FnInfo; public A8kIdCardFn pj3FnInfo; diff --git a/src/main/java/a8k/service/dao/type/a8kidcard/A8kFnFormula.java b/src/main/java/a8k/service/dao/type/a8kidcard/A8kFnFormula.java index 0b99d5f..222bfbf 100644 --- a/src/main/java/a8k/service/dao/type/a8kidcard/A8kFnFormula.java +++ b/src/main/java/a8k/service/dao/type/a8kidcard/A8kFnFormula.java @@ -4,10 +4,10 @@ package a8k.service.dao.type.a8kidcard; * 普通函数 */ public class A8kFnFormula { - public Double A;//015F - public Double B;//0164 - public Double C;//0169 - public Double D;//016E - public Double lowLimit;//0173 - public Double upLimit;//0178 + public Double A = 1.0;//015F + public Double B = 1.0;//0164 + public Double C = 1.0;//0169 + public Double D = 1.0;//016E + public Double lowLimit = 0.0;//0173 + public Double upLimit = 999999.0;//0178 } diff --git a/src/main/java/a8k/service/dao/type/a8kidcard/A8kIdCardFn.java b/src/main/java/a8k/service/dao/type/a8kidcard/A8kIdCardFn.java index a5b455a..055fe82 100644 --- a/src/main/java/a8k/service/dao/type/a8kidcard/A8kIdCardFn.java +++ b/src/main/java/a8k/service/dao/type/a8kidcard/A8kIdCardFn.java @@ -5,12 +5,12 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kFnType; import a8k.service.dao.type.a8kidcard.zenum.A8kResultUnit; public class A8kIdCardFn { - public A8kFnType fnType; + public A8kFnType fnType = A8kFnType.NormalFn; // 非分段函数 - public A8kOptX norFnX; // 函数未知数是 0150 - public Double norFnXMin; // 函数未知数下限闻值 0155 - public Double norFnXMax; // 函数未知数上限闻值 015A + public A8kOptX norFnX = A8kOptX.R; // 函数未知数是 0150 + public Double norFnXMin = 0.0; // 函数未知数下限闻值 0155 + public Double norFnXMax = 99999.0; // 函数未知数上限闻值 015A //血清函数系数 public A8kFnFormula norSerumFn = new A8kFnFormula(); //015F diff --git a/src/main/java/a8k/service/test/MainflowCtrlTestService.java b/src/main/java/a8k/service/test/MainflowCtrlTestService.java index ac59cfb..518bdff 100644 --- a/src/main/java/a8k/service/test/MainflowCtrlTestService.java +++ b/src/main/java/a8k/service/test/MainflowCtrlTestService.java @@ -185,7 +185,7 @@ public class MainflowCtrlTestService { //无校验模式 testModeState.setNoCheckMode(true); //无光学检查 - testModeState.setEnableOptScan(false); + testModeState.setEnableOptScan(true); //添加项目信息 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java index d30b82e..22d891d 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_02 extends FakeProjInfo { public FAKE_PROJ_02() { super(2); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType2; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_03.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_03.java index 0b22e44..0808692 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_03.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_03.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_03 extends FakeProjInfo { public FAKE_PROJ_03() { super(3); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType1; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_04.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_04.java index 2a6474b..958356d 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_04.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_04.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_04 extends FakeProjInfo { public FAKE_PROJ_04() { super(4); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType2; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_05.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_05.java index c052d15..71e3334 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_05.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_05.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_05 extends FakeProjInfo { public FAKE_PROJ_05() { super(5); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType2; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_06.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_06.java index b208171..0508cc0 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_06.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_06.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_06 extends FakeProjInfo { public FAKE_PROJ_06() { super(6); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType2; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_07_EXPIRED.java b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_07_EXPIRED.java index a0703b7..6795214 100644 --- a/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_07_EXPIRED.java +++ b/src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_07_EXPIRED.java @@ -6,7 +6,7 @@ import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType; public class FAKE_PROJ_07_EXPIRED extends FakeProjInfo { public FAKE_PROJ_07_EXPIRED() { super(7); - subProjNum = 2; // 子项目数量 + subProjNum = 1; // 子项目数量 reactionTemperature = 25; // 反应温度 reactionPlateIncubationTimeMin = 1; // 反应板孵育时间(min) reactionFlowType = A8kReactionFlowType.FlowType2; // 反应流程类型 diff --git a/src/main/java/a8k/service/test/fakeproj/FakeProjInfo.java b/src/main/java/a8k/service/test/fakeproj/FakeProjInfo.java index d7a8db2..c3c842f 100644 --- a/src/main/java/a8k/service/test/fakeproj/FakeProjInfo.java +++ b/src/main/java/a8k/service/test/fakeproj/FakeProjInfo.java @@ -15,7 +15,7 @@ public class FakeProjInfo { public String projName = "FA00"; public String lotId = "FA001234"; - public Integer projId = 0; + public Integer projId = 0; public Integer updateChipVersion = 1; public Integer subProjNum = 1; public String projShortName = "FA"; @@ -32,9 +32,9 @@ public class FakeProjInfo { public Boolean expired = false; FakeProjInfo(Integer projNum) { - projName = String.format("FA%02d", projNum); - lotId = String.format("FA%02d0000", projNum); - projId = projNum; + projName = String.format("FA%02d", projNum); + lotId = String.format("FA%02d0000", projNum); + projId = projNum; } FakeProjInfo() {} @@ -58,7 +58,7 @@ public class FakeProjInfo { public A8kProjectInfo buildA8kProjectInfo() { A8kProjectInfo projInfo = new A8kProjectInfo(); - projInfo.projId = projId; + projInfo.projId = projId; projInfo.projName = projName; projInfo.projShortName = projShortName; projInfo.subProjNum = subProjNum; @@ -79,9 +79,9 @@ public class FakeProjInfo { for (int subIndex = 0; subIndex < subProjNum; subIndex++) { ProjOptConfig projOptConfig = new ProjOptConfig(); - projOptConfig.id = 0; - projOptConfig.projId = projId; - projOptConfig.projName = projName; + projOptConfig.id = 0; + projOptConfig.projId = projId; + projOptConfig.projName = projName; projOptConfig.subProjIndex = subIndex; /*光学配置*/ projOptConfig.subProjName = String.format("%s_%d", projName, subIndex);