58 changed files with 618 additions and 781 deletions
-
2src/main/java/a8k/app/a8kproj/A8kReactionResultComputer.java
-
212src/main/java/a8k/app/a8kproj/fakeprojcontext/FakeProjInfoContextFactory.java
-
1src/main/java/a8k/app/a8kproj/optanalyzer/A8kOptXGetter.java
-
3src/main/java/a8k/app/config/A8kCanBusConnectionConfig.java
-
2src/main/java/a8k/app/config/CorsConfig.java
-
2src/main/java/a8k/app/config/SpringDocConfig.java
-
2src/main/java/a8k/app/config/WebSocketConfiguration.java
-
3src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java
-
18src/main/java/a8k/app/hardware/driver/MiniServoDriver.java
-
6src/main/java/a8k/app/hardware/driver/StepMotorCtrlDriver.java
-
1src/main/java/a8k/app/hardware/driver/type/StepMotorRegIndex.java
-
13src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java
-
34src/main/java/a8k/app/hardware/type/a8kcanprotocol/IOId.java
-
25src/main/java/a8k/app/hardware/type/regindex/RegIndex.java
-
2src/main/java/a8k/app/service/background/TemperatureCtrlService.java
-
2src/main/java/a8k/app/service/data/ProjIdCardInfoMgrService.java
-
5src/main/java/a8k/app/service/lowerctrl/ConsumablesScanCtrlService.java
-
4src/main/java/a8k/app/service/lowerctrl/DeviceInitCtrlService.java
-
1src/main/java/a8k/app/service/lowerctrl/TubeFeedingCtrlService.java
-
6src/main/java/a8k/app/service/lowerctrl/TubeFeedingExCtrlService.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC10ErrorReactionPlateProcesser.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ProcessCompletedPlate.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC20ScanReactionPlate.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30EjectTubeHolder.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30ScanTubeHolderTask.java
-
2src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC30SwitchToNextTubeTake.java
-
4src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/AC41ProcessSample.java
-
3src/main/java/a8k/app/service/mainctrl/mainflowctrl/processer/MainFlowStateChangeProcesser.java
-
2src/main/java/a8k/app/service/setting/AppSettingsMgrService.java
-
3src/main/java/a8k/app/teststate/TestStateMgrService.java
-
8src/main/java/a8k/app/teststate/VirtualDevice.java
-
6src/main/java/a8k/app/utils/DoAction.java
-
2src/main/java/a8k/app/utils/DoubleUtils.java
-
2src/main/java/a8k/app/utils/IPAddressValidator.java
-
2src/main/java/a8k/app/utils/ZloggerRecorder.java
-
0src/main/java/a8k/config/JacksonCustomizerConfig.java
-
4src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java
-
4src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java
-
13src/main/java/a8k/extui/page/extapp/UsrOperationSimulation.java
-
48src/main/java/a8k/extui/page/extapp/tools/MoterMoveUtilsPage.java
-
25src/main/java/a8k/extui/page/measurement/FeedingModMeasurePage.java
-
49src/main/java/a8k/extui/page/miniservo/MiniServoScanerPage.java
-
14src/main/java/a8k/extui/page/miniservo/P01MiniServoReferencePointIniter.java
-
4src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java
-
21src/main/java/a8k/unittest/TestBeforeRun.java
-
55src/main/java/a8k/unittest/TestOptAnalyzer.java
-
2src/main/resources/application.yml
@ -1,212 +0,0 @@ |
|||
package a8k.app.a8kproj.fakeprojcontext; |
|||
|
|||
import a8k.app.a8ktype.opttype.A8kOptX; |
|||
import a8k.app.service.data.UtilsProjectColorAllocer; |
|||
import a8k.app.dao.db.type.ProjExtInfoCard; |
|||
import a8k.app.dao.db.type.OptCfg; |
|||
import a8k.app.dao.db.type.ProjectBaseInfo; |
|||
import a8k.app.dao.db.type.a8kidcard.A8kNormalFn; |
|||
import a8k.app.dao.db.type.a8kidcard.A8kOptFnFormula; |
|||
import a8k.app.dao.db.type.a8kidcard.A8kPiecewiseFn; |
|||
import a8k.app.dao.db.type.a8kidcard.A8kResultBuilderFn; |
|||
import a8k.app.dao.db.type.a8kidcard.zenum.A8kFnType; |
|||
import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; |
|||
import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; |
|||
import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; |
|||
import a8k.app.utils.ProjBuildinInfo; |
|||
import a8k.app.utils.ProjInfo; |
|||
import a8k.app.utils.ZDateUtils; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
public class FakeProjInfoContextFactory { |
|||
|
|||
public static class FakeProjInfoContextCfg { |
|||
public String projName; |
|||
public String lotId; |
|||
public Integer projId; |
|||
public Integer updateChipVersion; |
|||
public Integer subProjNum; |
|||
public String projShortName; |
|||
public Integer reactionTemperature; |
|||
public String color; |
|||
public A8kReactionFlowType reactionFlowType; |
|||
public Integer wBloodSampleVolUl; |
|||
public Integer serumSampleVolUl; |
|||
public Integer shakeTimes; |
|||
public Integer bigBufferSampleUl; |
|||
public Integer mixLiquidAspirMixingCnt; |
|||
public Integer reactionPlateIncubationTimeMin; |
|||
public Integer reactionPlateDropletVolUl; |
|||
public Boolean expired; |
|||
|
|||
public A8kFnType fnType; |
|||
public A8kOptType optType; |
|||
|
|||
public Integer optScanPeakNum; |
|||
public Integer optPeakNameAssginRefPeakNum; |
|||
|
|||
} |
|||
|
|||
; |
|||
|
|||
|
|||
public static FakeProjInfoContextCfg createCfg(String projShortName, Integer projId, A8kReactionFlowType reactionType, Integer subProjNum) { |
|||
var val = new FakeProjInfoContextCfg(); |
|||
val.projName = String.format("%s%04d", projShortName, projId); |
|||
val.lotId = String.format("%s001234", projShortName, projId); |
|||
val.projId = projId; |
|||
val.updateChipVersion = 1; |
|||
val.subProjNum = subProjNum; |
|||
val.projShortName = projShortName; |
|||
val.reactionTemperature = 25; |
|||
val.color = UtilsProjectColorAllocer.getProjColor(projId); |
|||
val.reactionFlowType = reactionType; |
|||
val.wBloodSampleVolUl = 100; |
|||
val.serumSampleVolUl = 100; |
|||
val.shakeTimes = 2; |
|||
val.bigBufferSampleUl = 200; |
|||
val.mixLiquidAspirMixingCnt = 1; |
|||
val.reactionPlateIncubationTimeMin = 1; |
|||
val.reactionPlateDropletVolUl = 50; |
|||
val.expired = false; |
|||
val.fnType = A8kFnType.NormalFn; |
|||
val.optType = A8kOptType.FOPT; |
|||
if (projId == 1) { |
|||
val.optScanPeakNum = 2; |
|||
val.optPeakNameAssginRefPeakNum = 2; |
|||
} else { |
|||
val.optScanPeakNum = 5; |
|||
val.optPeakNameAssginRefPeakNum = 5; |
|||
} |
|||
|
|||
return val; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* !!! WARNING 这个方法中的数值轻易不要修改,后续很多测试代码都是基于这个数值的 |
|||
*/ |
|||
private static A8kOptFnFormula buildTestFnFormula(A8kFnType fntyp) { |
|||
A8kOptFnFormula formula = new A8kOptFnFormula(); |
|||
|
|||
A8kNormalFn a8kNormalFn = new A8kNormalFn(); |
|||
a8kNormalFn.x = A8kOptX.R; |
|||
a8kNormalFn.xMin = 1.0; |
|||
a8kNormalFn.xMax = 100.0; |
|||
a8kNormalFn.A = 1.0; |
|||
a8kNormalFn.B = 1.0; |
|||
a8kNormalFn.C = 1.0; |
|||
a8kNormalFn.D = 1.0; |
|||
a8kNormalFn.lowLimit = 1.0; |
|||
a8kNormalFn.upLimit = 100.0; |
|||
|
|||
A8kPiecewiseFn a8kPiecewiseFn = new A8kPiecewiseFn(); |
|||
a8kPiecewiseFn.judeX = A8kOptX.R; |
|||
a8kPiecewiseFn.judeThres = 1.0; |
|||
a8kPiecewiseFn.lX = A8kOptX.R; |
|||
a8kPiecewiseFn.hX = A8kOptX.R; |
|||
a8kPiecewiseFn.xMin = 1.0; |
|||
a8kPiecewiseFn.xMax = 100.0; |
|||
a8kPiecewiseFn.A0 = 1.0; |
|||
a8kPiecewiseFn.B0 = 1.0; |
|||
a8kPiecewiseFn.C0 = 1.0; |
|||
a8kPiecewiseFn.D0 = 1.0; |
|||
a8kPiecewiseFn.A1 = 1.0; |
|||
a8kPiecewiseFn.B1 = 1.0; |
|||
a8kPiecewiseFn.C1 = 1.0; |
|||
a8kPiecewiseFn.D1 = 1.0; |
|||
a8kPiecewiseFn.lowLimit = 1.0; |
|||
a8kPiecewiseFn.upLimit = 100.0; |
|||
|
|||
A8kResultBuilderFn a8kResultBuilderFn = new A8kResultBuilderFn(); //结果生成函数 |
|||
|
|||
a8kResultBuilderFn.ret1Unit = A8kResultUnit.pgPml; |
|||
a8kResultBuilderFn.ret2Unit = A8kResultUnit.ngPml; |
|||
a8kResultBuilderFn.ret3Unit = A8kResultUnit.ugPml; |
|||
a8kResultBuilderFn.toUint2FnA = 2.0; |
|||
a8kResultBuilderFn.toUint2FnB = 0.1; |
|||
a8kResultBuilderFn.toUint3FnA = 3.0; |
|||
a8kResultBuilderFn.toUint3FnB = 0.1; |
|||
|
|||
|
|||
formula.fnType = fntyp; |
|||
//普通函数 |
|||
if (A8kFnType.NormalFn.equals(fntyp)) { |
|||
formula.serumNorFn = a8kNormalFn.clone(); // 血清 |
|||
formula.bloodNorFn = a8kNormalFn.clone(); // 血浆 |
|||
} |
|||
// 分段函数系数 |
|||
if (A8kFnType.PiecewiseFn.equals(fntyp)) { |
|||
formula.serumPiecewiseFn = a8kPiecewiseFn.clone(); // 血清 |
|||
formula.bloodPiecewiseFn = a8kPiecewiseFn.clone(); // 血浆 |
|||
} |
|||
//结果 |
|||
formula.resultBuilderFn = a8kResultBuilderFn.clone(); //结果生成函数 |
|||
return formula; |
|||
} |
|||
|
|||
|
|||
static public ProjInfo build(FakeProjInfoContextCfg cfg) { |
|||
|
|||
// |
|||
// ProjectInfo |
|||
// |
|||
ProjectBaseInfo projInfo = new ProjectBaseInfo(); |
|||
projInfo.projId = cfg.projId; |
|||
projInfo.projName = cfg.projName; |
|||
projInfo.projShortName = cfg.projShortName; |
|||
projInfo.subProjNum = cfg.subProjNum; |
|||
projInfo.reactionTemperature = cfg.reactionTemperature; |
|||
projInfo.color = cfg.color; |
|||
projInfo.reactionFlowType = cfg.reactionFlowType; |
|||
projInfo.wBloodSampleVolUl = cfg.wBloodSampleVolUl; |
|||
projInfo.serumSampleVolUl = cfg.serumSampleVolUl; |
|||
projInfo.shakeTimes = cfg.shakeTimes; |
|||
projInfo.bigBufferSampleUl = cfg.bigBufferSampleUl; |
|||
projInfo.reactionPlateIncubationTimeMin = cfg.reactionPlateIncubationTimeMin; |
|||
projInfo.reactionPlateDropletVolUl = cfg.reactionPlateDropletVolUl; |
|||
|
|||
// |
|||
// ProjInfoCard |
|||
// |
|||
ProjExtInfoCard projExtInfoCard = new ProjExtInfoCard(); |
|||
projExtInfoCard.projName = cfg.projName; |
|||
projExtInfoCard.lotId = cfg.lotId; |
|||
if (!cfg.expired) { |
|||
projExtInfoCard.expiryDate = ZDateUtils.nextDay(); |
|||
} else { |
|||
projExtInfoCard.expiryDate = ZDateUtils.theDayBeforeYesterday(); |
|||
} |
|||
projExtInfoCard.projId = cfg.projId; |
|||
projExtInfoCard.updateChipVersion = cfg.updateChipVersion; |
|||
projExtInfoCard.subProjNum = cfg.subProjNum; |
|||
|
|||
for (int i = 0; i < cfg.subProjNum; i++) { |
|||
var fnFormula = buildTestFnFormula(cfg.fnType); |
|||
projExtInfoCard.projFnFormuals.add(fnFormula); |
|||
} |
|||
|
|||
// |
|||
// ProjOptInfo |
|||
// |
|||
List<OptCfg> optCfgList = new ArrayList<>(); |
|||
for (int i = 0; i < cfg.subProjNum; i++) { |
|||
OptCfg optCfg = new OptCfg(); |
|||
optCfg.projId = cfg.projId; |
|||
optCfg.projName = cfg.projName; |
|||
optCfg.subProjIndex = i; |
|||
optCfg.subProjName = String.format("SUBPROJ_%d", i); |
|||
optCfg.subProjShortName = String.format("SP%d", i); |
|||
optCfg.optType = cfg.optType; |
|||
optCfg.optScanRange = 250; |
|||
optCfg.optScanPeakNum = cfg.optScanPeakNum; |
|||
optCfg.peakNameRefNum = cfg.optPeakNameAssginRefPeakNum; |
|||
optCfgList.add(optCfg); |
|||
} |
|||
|
|||
return new ProjInfo(new ProjBuildinInfo(projInfo, optCfgList), projExtInfoCard); |
|||
} |
|||
|
|||
} |
@ -1,7 +1,6 @@ |
|||
package a8k.config; |
|||
package a8k.app.config; |
|||
|
|||
import a8k.app.hardware.basedriver.A8kCanBusConnection; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
@ -1,4 +1,4 @@ |
|||
package a8k.config; |
|||
package a8k.app.config; |
|||
|
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.web.servlet.config.annotation.CorsRegistry; |
@ -1,4 +1,4 @@ |
|||
package a8k.config; |
|||
package a8k.app.config; |
|||
|
|||
import io.swagger.v3.oas.models.OpenAPI; |
|||
import io.swagger.v3.oas.models.info.Info; |
@ -1,4 +1,4 @@ |
|||
package a8k.config; |
|||
package a8k.app.config; |
|||
|
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
@ -1,7 +1,6 @@ |
|||
package a8k.teststate; |
|||
package a8k.app.teststate; |
|||
|
|||
|
|||
import a8k.app.a8ktype.type.ConsumableOneChRawResult; |
|||
import a8k.app.a8ktype.type.TubeHolderScanResult; |
|||
import a8k.app.service.lowerctrl.ConsumablesScanCtrlService; |
|||
import a8k.app.service.lowerctrl.TubeFeedingCtrlService; |
@ -1,17 +1,11 @@ |
|||
package a8k.teststate; |
|||
package a8k.app.teststate; |
|||
|
|||
import a8k.OS; |
|||
import a8k.app.a8ktype.DeviceRunMode; |
|||
import a8k.app.dao.db.type.ProjExtInfoCard; |
|||
import a8k.app.a8ktype.type.ConsumableOneChRawResult; |
|||
import a8k.app.a8ktype.type.TubeHolderScanResult; |
|||
import a8k.app.service.bases.UIMessage; |
|||
import a8k.app.service.statemgr.GStateMgrService; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Slf4j |
@ -1,10 +1,8 @@ |
|||
package a8k.utils; |
|||
package a8k.app.utils; |
|||
|
|||
import a8k.SpringBootBeanUtil; |
|||
import a8k.app.a8ktype.exception.AppException; |
|||
import a8k.app.service.bases.UIMessage; |
|||
import a8k.teststate.VirtualDevice; |
|||
import jakarta.annotation.Resource; |
|||
import a8k.app.teststate.VirtualDevice; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
|
|||
@Slf4j |
@ -1,4 +1,4 @@ |
|||
package a8k.utils; |
|||
package a8k.app.utils; |
|||
|
|||
public class DoubleUtils { |
|||
public static boolean equals(double a, double b) { |
@ -1,4 +1,4 @@ |
|||
package a8k.utils; |
|||
package a8k.app.utils; |
|||
|
|||
import java.util.regex.Pattern; |
|||
|
@ -1,4 +1,4 @@ |
|||
package a8k.utils; |
|||
package a8k.app.utils; |
|||
|
|||
import org.slf4j.Logger; |
|||
|
@ -0,0 +1,48 @@ |
|||
package a8k.extui.page.extapp.tools; |
|||
|
|||
import a8k.app.a8ktype.exception.AppException; |
|||
import a8k.app.hardware.driver.MiniServoDriver; |
|||
import a8k.app.hardware.driver.StepMotorCtrlDriver; |
|||
import a8k.app.hardware.driver.type.StepMotorMId; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
public class MoterMoveUtilsPage { |
|||
@Resource |
|||
ExtApiPageMgr extApiPageMgr; |
|||
|
|||
static final Integer overtime = 10000; |
|||
|
|||
|
|||
@Resource |
|||
StepMotorCtrlDriver stepMotorCtrlDriver; |
|||
|
|||
|
|||
@Resource |
|||
MiniServoDriver miniServoDriver; |
|||
|
|||
public void clampALittle(Integer dpos) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, dpos, overtime); |
|||
} |
|||
|
|||
public void unclampALittle(Integer dpos) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, -dpos, overtime); |
|||
} |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("摇匀模组-试管夹紧电机"); |
|||
page.addFunction("夹紧一点", this::clampALittle).setParamVal("dpos", () -> 5); |
|||
page.addFunction("松开一点", this::unclampALittle).setParamVal("dpos", 5); |
|||
|
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,49 @@ |
|||
package a8k.extui.page.miniservo; |
|||
|
|||
|
|||
import a8k.app.a8ktype.exception.AppException; |
|||
import a8k.app.hardware.driver.MiniServoDriver; |
|||
import a8k.app.hardware.driver.type.MiniServoMId; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
@Component |
|||
public class MiniServoScanerPage { |
|||
|
|||
@Resource |
|||
MiniServoDriver miniServoDriver; |
|||
|
|||
|
|||
public Object scan() throws AppException { |
|||
Boolean shakeModGripperSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModGripperSV); |
|||
Boolean shakeModGripperYSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModGripperYSV); |
|||
Boolean shakeModTubeScanerClampingSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModTubeScanerClampingSV); |
|||
Boolean shakeModTubeScanerRotateSVState = miniServoDriver.miniServoPing(MiniServoMId.ShakeModTubeScanerRotateSV); |
|||
|
|||
Map<String, Boolean> state = new HashMap<>(); |
|||
state.put("摇匀模组-夹爪", shakeModGripperSVState); |
|||
state.put("摇匀模组-Y轴", shakeModGripperYSVState); |
|||
|
|||
state.put("入料模组-扫码夹紧", shakeModTubeScanerClampingSVState); |
|||
state.put("入料模组-扫码旋转", shakeModTubeScanerRotateSVState); |
|||
return state; |
|||
} |
|||
|
|||
@Resource |
|||
ExtApiPageMgr extApiPageMgr; |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("基础"); |
|||
page.addFunction("扫描", this::scan); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -1,21 +0,0 @@ |
|||
package a8k.unittest; |
|||
|
|||
|
|||
import a8k.app.service.param.pipetteparam.PipetteGunLLDParamMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
public class TestBeforeRun { |
|||
|
|||
@Resource |
|||
PipetteGunLLDParamMgr pipetteGunLLDParamMgr; |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
// LldType lddType = pipetteGunLLDParamMgr.getLLDType(PipetteGunLLDTypeParam.DEFAULT_LLD_TYPE); |
|||
// Assert.isTrue(lddType != null, "LldType is null"); |
|||
} |
|||
|
|||
} |
@ -1,55 +0,0 @@ |
|||
package a8k.unittest; |
|||
|
|||
import a8k.app.a8kproj.A8kReactionResultComputer; |
|||
import a8k.app.a8kproj.fakeprojcontext.FakeProjInfoContextFactory; |
|||
import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; |
|||
import a8k.app.a8ktype.state.SampleInfo; |
|||
import a8k.app.dao.db.type.a8kidcard.zenum.A8kReactionFlowType; |
|||
import a8k.app.a8ktype.type.ReactionResult; |
|||
import a8k.app.utils.ProjInfo; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
public class TestOptAnalyzer { |
|||
|
|||
@FunctionalInterface |
|||
public interface TEST { |
|||
Boolean test(); |
|||
} |
|||
|
|||
public Boolean TEST_OPT_RESULT_PARSE_01() { |
|||
var cfg = FakeProjInfoContextFactory.createCfg("TEST_PROJ", 2, A8kReactionFlowType.SampleAndBS, 3); |
|||
|
|||
ProjInfo projInfoContext = FakeProjInfoContextFactory.build(cfg); |
|||
SampleInfo sampleInfo = new SampleInfo(); |
|||
|
|||
OptAlgoAnalysResult optAlgoAnalysResult = new OptAlgoAnalysResult(); |
|||
optAlgoAnalysResult.pdR = 1.0; |
|||
optAlgoAnalysResult.pdAR = 1.0; |
|||
optAlgoAnalysResult.pdATR = 1.0; |
|||
optAlgoAnalysResult.pdRFR = 1.0; |
|||
optAlgoAnalysResult.pdT4R = 1.0; |
|||
optAlgoAnalysResult.pdT4T3R = 1.0; |
|||
|
|||
ReactionResult result = A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, 0, optAlgoAnalysResult); |
|||
log.info("result: {}", result); |
|||
return true; |
|||
} |
|||
|
|||
void test(String mark, TEST test) { |
|||
Boolean suc = test.test(); |
|||
if (suc) { |
|||
log.info("TEST: {} -> SUCCESS", mark); |
|||
} else { |
|||
log.error("TEST: {} -> FAILED", mark); |
|||
} |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
test("TEST_OPT_RESULT_PARSE_01", this::TEST_OPT_RESULT_PARSE_01); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue