|
|
@ -21,6 +21,7 @@ import a8k.service.app.devicectrl.ctrlservice.TubeFeedingCtrlService; |
|
|
|
import a8k.service.test.state.TestStateMgrService; |
|
|
|
import a8k.service.test.state.VirtualDevice; |
|
|
|
import a8k.type.TubeHolderScanResult; |
|
|
|
import a8k.type.ecode.TubeError; |
|
|
|
import a8k.type.exception.AppException; |
|
|
|
import a8k.type.tube_setting.TubeHolderSetting; |
|
|
|
import a8k.type.type.A8kTubeHolderType; |
|
|
@ -55,20 +56,20 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { |
|
|
|
TestStateMgrService testStateMgrService; |
|
|
|
@Resource |
|
|
|
VirtualDevice virtualDevice; |
|
|
|
|
|
|
|
@Resource |
|
|
|
CondtionMgrService cmgr; |
|
|
|
AppEventBusService ebus; |
|
|
|
|
|
|
|
@Resource |
|
|
|
TubeFeedingCtrlService stc; |
|
|
|
CondtionMgrService cmgr; |
|
|
|
@Resource |
|
|
|
AppEventBusService ebus; |
|
|
|
ProjectProcessContextMgrService projectProcessContextMgrService; |
|
|
|
@Resource |
|
|
|
AppTubeSettingMgrService appTubeSettingMgrService; |
|
|
|
AppTubeSettingMgrService appTubeSettingMgrService; |
|
|
|
@Resource |
|
|
|
ProjCfgMgrService appProjInfoMgr; |
|
|
|
ProjCfgMgrService appProjInfoMgr; |
|
|
|
|
|
|
|
@Resource |
|
|
|
ProjectProcessContextMgrService projectProcessContextMgrService; |
|
|
|
TubeFeedingCtrlService stc; |
|
|
|
|
|
|
|
// |
|
|
|
// HardwareOperation |
|
|
@ -93,16 +94,19 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
A8kEcode parseOneTube(Tube tube, Integer i, TubeHolderScanResult scanResult, TubeHolderSetting setting) { |
|
|
|
/** |
|
|
|
* |
|
|
|
*/ |
|
|
|
A8kEcode initOneTube(Tube tube, Integer i, TubeHolderScanResult scanResult, TubeHolderSetting setting) { |
|
|
|
if (!scanResult.tube[i].isTubeExist) { |
|
|
|
tube.setState(TubeState.EMPTY); |
|
|
|
return A8kEcode.SUC; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tube.setState(TubeState.TO_BE_PROCESSED); |
|
|
|
tube.setIsHighTube(scanResult.tube[i].isHighTube); |
|
|
|
|
|
|
|
|
|
|
|
//首先赋值默认值 |
|
|
|
tube.setBloodType(BloodType.WHOLE_BLOOD); |
|
|
|
tube.setSampleBarcode(""); |
|
|
@ -119,63 +123,48 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { |
|
|
|
|
|
|
|
if (tube.getProjInfo() == null) { |
|
|
|
logger.error("项目信息不存在,{}", setting.tubeSettings[i].projIndex); |
|
|
|
ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_PROJ_INFO_IS_NOT_EXIST)); |
|
|
|
return A8kEcode.APPE_PROJ_INFO_IS_NOT_EXIST; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (tube.getUserid().isEmpty()) { |
|
|
|
tube.setUserid(genUserId(i)); |
|
|
|
} |
|
|
|
return A8kEcode.SUC; |
|
|
|
|
|
|
|
//补全试管中的项目信息 |
|
|
|
//最后赋值扫描到的数值 |
|
|
|
// |
|
|
|
//TODO:添加请求后台的代码 |
|
|
|
// |
|
|
|
// state.tubeStates[i].bloodType = ; |
|
|
|
// state.tubeStates[i].sampleBarcode = setting.tubeSettings[i].sampleBarcode; |
|
|
|
// state.tubeStates[i].userid = setting.tubeSettings[i].userid; |
|
|
|
// state.tubeStates[i].projIndex = setting.tubeSettings[i].projIndex; |
|
|
|
// state.tubeStates[i].bloodType = ; |
|
|
|
// state.tubeStates[i].sampleBarcode = setting.tubeSettings[i].sampleBarcode; |
|
|
|
// state.tubeStates[i].userid = setting.tubeSettings[i].userid; |
|
|
|
// state.tubeStates[i].projIndex = setting.tubeSettings[i].projIndex; |
|
|
|
|
|
|
|
if (tube.getProjIndex().isEmpty()) { |
|
|
|
logger.error("试管{}待做项目为空", i); |
|
|
|
return A8kEcode.APPE_PROJ_INDEX_IS_EMPTY; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return A8kEcode.SUC; |
|
|
|
} |
|
|
|
|
|
|
|
TubeHolder parseScanResult(TubeHolderScanResult scanResult) throws AppException { |
|
|
|
TubeHolder tubeholder = new TubeHolder(); |
|
|
|
TubeHolderSetting setting = appTubeSettingMgrService.interUseGetThelastActiveTubeHolderSettingAndLock(); |
|
|
|
try { |
|
|
|
//获取试管架类型 |
|
|
|
A8kTubeHolderType tubeHolderType = A8kTubeHolderType.of(scanResult.tubeHolderType); |
|
|
|
if (tubeHolderType == null) { |
|
|
|
logger.error("不支持的试管架类型,{}", scanResult.tubeHolderType); |
|
|
|
ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_TUBE_HOLDER_TYPE_IS_NOT_SUPPORT)); |
|
|
|
return null; |
|
|
|
} |
|
|
|
TubeHolder parseScanResult(TubeHolderScanResult scanResult, TubeHolderSetting setting) { |
|
|
|
TubeHolder tubeholder = new TubeHolder(); |
|
|
|
Assert.isTrue(setting == null || setting.tubeSettings.length == tubeholder.tubes.length, "试管架配置信息与试管数量不匹配"); |
|
|
|
|
|
|
|
//获取试管架类型 |
|
|
|
A8kTubeHolderType tubeHolderType = A8kTubeHolderType.of(scanResult.tubeHolderType); |
|
|
|
if (tubeHolderType == null) { |
|
|
|
ebus.pushEvent(new AppWarningNotifyEvent(A8kEcode.APPE_TUBE_HOLDER_TYPE_IS_NOT_SUPPORT)); |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
// Assert.isTrue(setting == null || setting.tubeSettings.length == tubeholder.tubes.length; |
|
|
|
Assert.isTrue(setting == null || setting.tubeSettings.length == tubeholder.tubes.length, "试管架配置信息与试管数量不匹配"); |
|
|
|
|
|
|
|
//逐个赋值试管配置信息 |
|
|
|
updaetGroupId(); |
|
|
|
for (int i = 0; i < tubeholder.tubes.length; i++) { |
|
|
|
A8kEcode ecode = parseOneTube(tubeholder.tubes[i], i, scanResult, setting); |
|
|
|
if (ecode != A8kEcode.SUC) { |
|
|
|
ebus.pushEvent(new AppWarningNotifyEvent(ecode)); |
|
|
|
return null; |
|
|
|
} |
|
|
|
//逐个赋值试管配置信息 |
|
|
|
for (int i = 0; i < tubeholder.tubes.length; i++) { |
|
|
|
A8kEcode ecode = initOneTube(tubeholder.tubes[i], i, scanResult, setting); |
|
|
|
if (!ecode.equals(A8kEcode.SUC)) { |
|
|
|
ebus.pushEvent(new AppWarningNotifyEvent(new TubeError(ecode, i))); |
|
|
|
return null; |
|
|
|
} |
|
|
|
//设置试管架状态 |
|
|
|
tubeholder.setState(TubeHolderState.PROCESSING); |
|
|
|
//删除之前的试管架配置 |
|
|
|
appTubeSettingMgrService.interUseRemoveTubeHolderSetting(setting); |
|
|
|
return tubeholder; |
|
|
|
|
|
|
|
} catch (AppException e) { |
|
|
|
//回滚部分状态 |
|
|
|
if (setting != null) |
|
|
|
appTubeSettingMgrService.interUseUnlockTubeHolderSetting(setting.uuid); |
|
|
|
throw e; |
|
|
|
} |
|
|
|
|
|
|
|
//设置试管架状态 |
|
|
|
tubeholder.setState(TubeHolderState.PROCESSING); |
|
|
|
return tubeholder; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -189,14 +178,17 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { |
|
|
|
} |
|
|
|
logger.info("扫描到一个试管架:{}", scanResult); |
|
|
|
|
|
|
|
|
|
|
|
logger.info("解析扫描结果"); |
|
|
|
TubeHolder tubeholder = parseScanResult(scanResult); |
|
|
|
TubeHolderSetting setting = appTubeSettingMgrService.interUseGetThelastActiveTubeHolderSettingAndLock(); |
|
|
|
TubeHolder tubeholder = parseScanResult(scanResult, setting); |
|
|
|
if (tubeholder == null) { |
|
|
|
appTubeSettingMgrService.interUseUnlockTubeHolderSetting(setting); |
|
|
|
logger.warn("结果解析异常"); |
|
|
|
doEjectHodler(); |
|
|
|
return; |
|
|
|
} |
|
|
|
appTubeSettingMgrService.interUseRemoveTubeHolderSetting(setting); |
|
|
|
|
|
|
|
logger.info("更新试管架状态"); |
|
|
|
projectProcessContextMgrService.newTubeHolder(tubeholder); |
|
|
|
} |
|
|
@ -209,32 +201,5 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { |
|
|
|
return List.of(A8kPublicResourceType.ShakeModule); |
|
|
|
} |
|
|
|
|
|
|
|
// |
|
|
|
// UTILS |
|
|
|
// |
|
|
|
|
|
|
|
static Integer usrgroupidoff = 10; |
|
|
|
static Boolean tryUpdateGroupId = false; |
|
|
|
|
|
|
|
String genUserId(Integer tubeoff) { |
|
|
|
if (tryUpdateGroupId) { |
|
|
|
usrgroupidoff++; |
|
|
|
if (usrgroupidoff >= 100) { |
|
|
|
usrgroupidoff = 10; |
|
|
|
} |
|
|
|
tryUpdateGroupId = false; |
|
|
|
} |
|
|
|
//构造用户ID, 年月日时分秒_试管偏移量 |
|
|
|
int usrReadableOff = tubeoff + 1; |
|
|
|
if (usrReadableOff >= 10) { |
|
|
|
usrReadableOff = 0; |
|
|
|
} |
|
|
|
return String.format("%2d%d", usrgroupidoff, usrReadableOff); |
|
|
|
} |
|
|
|
|
|
|
|
void updaetGroupId() { |
|
|
|
tryUpdateGroupId = true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |