Browse Source

样本测试更新

tags/v0
sige 1 year ago
parent
commit
433828a27f
  1. 75
      src/main/java/com/iflytop/a800/task/TubeTestTask.java

75
src/main/java/com/iflytop/a800/task/TubeTestTask.java

@ -9,11 +9,17 @@ import com.iflytop.a800.model.MdbProject;
import com.iflytop.a800.model.MdbTest; import com.iflytop.a800.model.MdbTest;
import com.iflytop.a800.resource.*; import com.iflytop.a800.resource.*;
import com.iflytop.a800.utils.ScanResultAnalysisAlgo; import com.iflytop.a800.utils.ScanResultAnalysisAlgo;
import com.iflytop.uf.UfActuatorCmdExecutor;
import com.iflytop.uf.UfCmdSnippetExecutor; import com.iflytop.uf.UfCmdSnippetExecutor;
import com.iflytop.uf.util.UfCommon;
import com.iflytop.uf.model.UfMdbDictItem;
import com.iflytop.uf.model.UfMdbOption;
import com.iflytop.uf.util.UfJsonHelper; import com.iflytop.uf.util.UfJsonHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*; import java.util.*;
public class TubeTestTask extends TaskBase { public class TubeTestTask extends TaskBase {
// logger
public static final Logger LOG = LoggerFactory.getLogger(TubeTestTask.class);
// 测试试管 // 测试试管
public TestTube tube; public TestTube tube;
// 测试项目 // 测试项目
@ -32,6 +38,8 @@ public class TubeTestTask extends TaskBase {
private TestCard testCard; private TestCard testCard;
// id chip // id chip
private MdbIdChip idChip; private MdbIdChip idChip;
// 孵育槽位
private IncubatorSlot incubatorSlot;
// 任务准备 // 任务准备
public void prepare() { public void prepare() {
@ -54,6 +62,14 @@ public class TubeTestTask extends TaskBase {
this.test.materialLotCode = this.testCard.lotCode; this.test.materialLotCode = this.testCard.lotCode;
this.test.save(); this.test.save();
// 移动试管架
if ( !UfMdbDictItem.match("TUBE_TYPE", "EMERGENCY", this.tube.type) ) {
Integer testStartPos = UfMdbOption.getInteger("TubeRackTubeTestStartPos");
Integer testDistance = UfMdbOption.getInteger("TubeRackTubeTestDistance");
int testPos = testStartPos + testDistance * this.tube.index;
UfActuatorCmdExecutor.execute("MotorTubeRackMove", "motor_easy_move_to", Integer.toString(testPos));
}
this.idChip = new MdbIdChip(); this.idChip = new MdbIdChip();
this.idChip.peakCount = 3; this.idChip.peakCount = 3;
this.idChip.itemCount = 1; this.idChip.itemCount = 1;
@ -69,6 +85,11 @@ public class TubeTestTask extends TaskBase {
))); )));
} }
// 记录日志
private void log(String message, Object ... args ) {
LOG.info(message, args);
}
@Override @Override
public void run() { public void run() {
this.prepare(); this.prepare();
@ -89,7 +110,9 @@ public class TubeTestTask extends TaskBase {
var stepAction = stepNode.get("action").asText(); var stepAction = stepNode.get("action").asText();
switch ( stepAction ) { switch ( stepAction ) {
// case "shaking" : this.shake(stepNode); break;
case "shaking" : this.shake(stepNode); break;
case "uncap" : this.uncap(); break;
case "cap" : this.cap(); break;
case "puncture" : this.executeStepPuncture(stepNode); break; case "puncture" : this.executeStepPuncture(stepNode); break;
case "aspirate" : this.executeStepAspirate(stepNode); break; case "aspirate" : this.executeStepAspirate(stepNode); break;
case "mixing" : this.executeStepMixing(stepNode); break; case "mixing" : this.executeStepMixing(stepNode); break;
@ -98,16 +121,36 @@ public class TubeTestTask extends TaskBase {
case "analysis" : this.executeStepAnalysis(stepNode); break; case "analysis" : this.executeStepAnalysis(stepNode); break;
} }
} }
this.taskFinish();
} }
// 摇匀 // 摇匀
private void shake( JsonNode stepNode ) { private void shake( JsonNode stepNode ) {
UfCmdSnippetExecutor.execute("SampleTestShake");
UfCmdSnippetExecutor.execute("SampleTestShakePrepare");
for ( int i=0; i<3; i++ ) {
UfActuatorCmdExecutor.execute("MotorTubeShake","step_motor_easy_move_to", "60");
UfActuatorCmdExecutor.execute("MotorTubeShake","step_motor_easy_move_to", "120");
}
UfActuatorCmdExecutor.execute("MotorTubeShake","step_motor_easy_move_to", "90");
} }
// 取盖 // 取盖
private void uncap() { private void uncap() {
UfCmdSnippetExecutor.execute("SampleTestUnCap");
if ( UfMdbDictItem.match("TUBE_TYPE", "WB_5ML", this.tube.type) ) {
UfCmdSnippetExecutor.execute("SampleTestUnCap");
} else if ( UfMdbDictItem.match("TUBE_TYPE", "WB_3ML", this.tube.type) ) {
UfCmdSnippetExecutor.execute("SampleTestUnCap");
}
}
// 盖帽
private void cap() {
if ( UfMdbDictItem.match("TUBE_TYPE", "WB_5ML", this.tube.type) ) {
UfCmdSnippetExecutor.execute("SampleTestCap");
} else if ( UfMdbDictItem.match("TUBE_TYPE", "WB_3ML", this.tube.type) ) {
UfCmdSnippetExecutor.execute("SampleTestCap");
}
} }
// 穿孔 // 穿孔
@ -133,8 +176,8 @@ public class TubeTestTask extends TaskBase {
pipette.aspirateFromSampleEpp0_5(this.tube.index, volume); pipette.aspirateFromSampleEpp0_5(this.tube.index, volume);
} else if ( "Sample".equals(source) && "SampleEpp1_5Tube".equals(this.tube.type) ) { } else if ( "Sample".equals(source) && "SampleEpp1_5Tube".equals(this.tube.type) ) {
pipette.aspirateFromSampleEpp1_5(this.tube.index, volume); pipette.aspirateFromSampleEpp1_5(this.tube.index, volume);
} else if ( "Sample".equals(source) && "SampleWholeBlood5mlTube".equals(this.tube.type) ) {
pipette.aspirateFromWholeBlood5ml(this.tube.index, volume);
} else if ( "Sample".equals(source) && UfMdbDictItem.match("TUBE_TYPE", "WB_5ML", this.tube.type)) {
pipette.aspirateFromWholeBlood5ml(volume);
} else if ( "Sample".equals(source) && "SampleWholeBlood3mlTube".equals(this.tube.type) ) { } else if ( "Sample".equals(source) && "SampleWholeBlood3mlTube".equals(this.tube.type) ) {
pipette.aspirateFromWholeBlood3ml(this.tube.index, volume); pipette.aspirateFromWholeBlood3ml(this.tube.index, volume);
} else { } else {
@ -162,7 +205,7 @@ public class TubeTestTask extends TaskBase {
// 孵育 // 孵育
private void executeStepIncubate( JsonNode stepNode ) { private void executeStepIncubate( JsonNode stepNode ) {
Device device = Device.getInstance(); Device device = Device.getInstance();
device.incubator.pushNewCard(this.testCard.boxIndex);
this.incubatorSlot = device.incubator.pushNewCard(this.testCard);
var pipette = device.pipette; var pipette = device.pipette;
pipette.tipPickUp(); pipette.tipPickUp();
@ -172,15 +215,25 @@ public class TubeTestTask extends TaskBase {
pipette.tipDrop(); pipette.tipDrop();
Integer duration = stepNode.get("duration").asInt();
UfCommon.delay(duration);
int duration = stepNode.get("duration").asInt();
TimerTask wakeupTask = new TimerTask() {
@Override
public void run() {
TubeTestTask.this.log("孵育完成,等待扫描结果");
TubeTestTask.this.setStatus("READY");
}
};
Timer timer = new Timer();
timer.schedule(wakeupTask, duration);
this.taskWait("IncubateDone");
} }
// 扫描 // 扫描
private void executeStepAnalysis( JsonNode stepNode ) { private void executeStepAnalysis( JsonNode stepNode ) {
// 扫描
this.log("扫描结果");
Device device = Device.getInstance(); Device device = Device.getInstance();
// device.incubator.exitToScanner();
device.incubator.exitToScanner(this.incubatorSlot);
var scanner = device.scanner; var scanner = device.scanner;
scanner.scanTypeF(); scanner.scanTypeF();
var scanResult = scanner.readResult(); var scanResult = scanner.readResult();

Loading…
Cancel
Save