Browse Source

update

tags/v0
zhaohe 9 months ago
parent
commit
70d4605b24
  1. 3
      src/main/java/a8k/hardware/A8kModParamInitializer.java
  2. 2
      src/main/java/a8k/optalgo/A8kOptAlgoV2.java
  3. 12
      src/main/java/a8k/optanalyzer/A8kOptXComputer.java
  4. 17
      src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java
  5. 23
      src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java
  6. 2
      src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java
  7. 52
      src/main/java/a8k/service/dao/type/A8kProjInfoCard.java
  8. 12
      src/main/java/a8k/service/dao/type/a8kidcard/A8kFnFormula.java
  9. 8
      src/main/java/a8k/service/dao/type/a8kidcard/A8kIdCardFn.java
  10. 2
      src/main/java/a8k/service/test/MainflowCtrlTestService.java
  11. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java
  12. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_03.java
  13. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_04.java
  14. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_05.java
  15. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_06.java
  16. 2
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_07_EXPIRED.java
  17. 16
      src/main/java/a8k/service/test/fakeproj/FakeProjInfo.java

3
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);
}

2
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) {

12
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;

17
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) {

23
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);
// }
// }
}

2
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();

52
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;

12
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
}

8
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

2
src/main/java/a8k/service/test/MainflowCtrlTestService.java

@ -185,7 +185,7 @@ public class MainflowCtrlTestService {
//无校验模式
testModeState.setNoCheckMode(true);
//无光学检查
testModeState.setEnableOptScan(false);
testModeState.setEnableOptScan(true);
//添加项目信息

2
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; // 反应流程类型

2
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; // 反应流程类型

2
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; // 反应流程类型

2
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; // 反应流程类型

2
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; // 反应流程类型

2
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; // 反应流程类型

16
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);

Loading…
Cancel
Save