From eae0b3ac22d65887228115c2b2b3426834660546 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 9 Oct 2024 10:34:31 +0800 Subject: [PATCH] update --- .../mainflowctrl/action/DO_PROCESS_ERROR_TUBE.java | 6 +- .../mainflowctrl/action/PLATE_OPT_SCAN.java | 4 +- .../action/PROCESS_INCUBATE_COMPLETED_PLATE.java | 4 +- .../action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java | 8 +- .../action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java | 8 +- .../mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java | 8 +- .../mainflowctrl/action/SEQ4_PRE_PROCESS.java | 4 +- .../appctrl/mainflowctrl/action/SEQ5_PROCESS.java | 6 +- .../mainflowctrl/action/SEQ6_POST_PROCESS.java | 6 +- .../apps/appdata/AppReactionResultMgrService.java | 6 +- .../EmergencySamplePosStateMgrService.java | 4 +- .../appstate/TubeProcessContextMgrService.java | 167 --------------------- .../apps/appstate/TubeProcessStateMgrService.java | 3 - .../service/apps/appstate/TubeStateMgrService.java | 165 ++++++++++++++++++++ 14 files changed, 197 insertions(+), 202 deletions(-) delete mode 100644 src/main/java/a8k/service/apps/appstate/TubeProcessContextMgrService.java delete mode 100644 src/main/java/a8k/service/apps/appstate/TubeProcessStateMgrService.java create mode 100644 src/main/java/a8k/service/apps/appstate/TubeStateMgrService.java diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_TUBE.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_TUBE.java index b2d5065..ed02e20 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_TUBE.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_TUBE.java @@ -7,7 +7,7 @@ import a8k.service.apps.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.apps.appstate.GStateService; import a8k.service.apps.appstate.IncubationPlateMgrService; import a8k.service.apps.appstate.OptScanModuleStateMgrService; -import a8k.service.apps.appstate.TubeProcessContextMgrService; +import a8k.service.apps.appstate.TubeStateMgrService; import a8k.service.apps.appstate.TubeProcessStateMgrService; import a8k.service.apps.appstate.resource.A8kPublicResourceType; import a8k.service.apps.appstate.type.MainFlowCtrlState; @@ -42,7 +42,7 @@ public class DO_PROCESS_ERROR_TUBE extends A8kStepAction { @Resource OptScanModuleStateMgrService optScanModuleStateMgrService; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; MainFlowCtrlState mfcs; @@ -65,7 +65,7 @@ public class DO_PROCESS_ERROR_TUBE extends A8kStepAction { logger.info("复位HBOT"); //复位HBOT OS.forceSleep(4000); - tubeProcessContextMgrService.setCurTubeState(TubeState.PROCESS_COMPLETE); + tubeStateMgrService.setCurTubeState(TubeState.PROCESS_COMPLETE); } @Override public Boolean checkCondition() { diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java index 5a54422..7fa5572 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java @@ -7,7 +7,7 @@ import a8k.service.apps.appdata.AppReactionResultMgrService; import a8k.service.apps.appstate.GStateService; import a8k.service.apps.appstate.IncubationPlateMgrService; import a8k.service.apps.appstate.OptScanModuleStateMgrService; -import a8k.service.apps.appstate.TubeProcessContextMgrService; +import a8k.service.apps.appstate.TubeStateMgrService; import a8k.service.apps.appstate.resource.A8kPublicResourceType; import a8k.service.apps.appstate.type.MainFlowCtrlState; @@ -42,7 +42,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction { @Resource OptScanModuleStateMgrService optScanModuleStateMgrService; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource AppReactionResultMgrService appReactionResultMgrService; diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java index 97dc5a5..0987bed 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java @@ -7,7 +7,7 @@ import a8k.service.apps.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.apps.appstate.GStateService; import a8k.service.apps.appstate.IncubationPlateMgrService; import a8k.service.apps.appstate.OptScanModuleStateMgrService; -import a8k.service.apps.appstate.TubeProcessContextMgrService; +import a8k.service.apps.appstate.TubeStateMgrService; import a8k.service.apps.appstate.resource.A8kPublicResourceType; import a8k.service.apps.appstate.type.IncubationSubTank; import a8k.service.apps.appstate.type.MainFlowCtrlState; @@ -41,7 +41,7 @@ public class PROCESS_INCUBATE_COMPLETED_PLATE extends A8kStepAction { @Resource OptScanModuleStateMgrService optScanModuleStateMgrService; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; MainFlowCtrlState mfcs; diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java index 9251a4e..b121406 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java @@ -9,7 +9,7 @@ import a8k.service.apps.appctrl.TubeSettingMgrService; import a8k.service.apps.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.apps.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.apps.appstate.GStateService; -import a8k.service.apps.appstate.TubeProcessContextMgrService; +import a8k.service.apps.appstate.TubeStateMgrService; import a8k.service.apps.appstate.resource.A8kPublicResourceType; import a8k.service.apps.appstate.type.TubeHolder; import a8k.service.apps.appstate.type.state.TubeHolderState; @@ -69,9 +69,9 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { @Resource A8kCanBusService canBus; @Resource - TubeSettingMgrService tubeSettingMgrService; + TubeSettingMgrService tubeSettingMgrService; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; SampleScanResult scanTubeHodler() throws AppException { @@ -209,7 +209,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { } logger.info("将样本信息写入数据库"); - tubeProcessContextMgrService.createNewTubeContexts(state.tubes); + tubeStateMgrService.createNewTubeContexts(state.tubes); logger.info("更新试管架状态"); gstate.setTubeHolder(state); diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java index 363b5a0..2cf5022 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java @@ -37,11 +37,11 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction { @Resource GStateService gstate; @Resource - SampleScanTransportCtrl sstc; + SampleScanTransportCtrl sstc; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource - CondtionMgrService cms; + CondtionMgrService cms; MainFlowCtrlState state; @@ -93,7 +93,7 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction { sstc.moveTubeToPreProcessPos(nextTubeIndex); } - tubeProcessContextMgrService.pendingTube(nextProcessTube); + tubeStateMgrService.pendingTube(nextProcessTube); } @Override public Boolean checkCondition() { diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java index 4b50366..ac18373 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java @@ -49,11 +49,11 @@ public class SEQ3_APPLAY_RESOURCE extends A8kStepAction { @Resource IncubationPlateMgrService incubationPlateMgrService; //孵育盘管理 @Resource - AppProjInfoMgrService appProjInfoMgrService; //项目信息管理 + AppProjInfoMgrService appProjInfoMgrService; //项目信息管理 @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource - CondtionMgrService cms; + CondtionMgrService cms; MainFlowCtrlState state; @@ -112,7 +112,7 @@ public class SEQ3_APPLAY_RESOURCE extends A8kStepAction { tipPos.add(tips); } //创建项目处理上下文 - tubeProcessContextMgrService.setTubeResourceIsReady(a8kIdCardInfo, consumables, tipPos, incubatorPoss); + tubeStateMgrService.setTubeResourceIsReady(a8kIdCardInfo, consumables, tipPos, incubatorPoss); logger.info("apply resource ok"); } diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java index d15e8c2..b8ff6d2 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java @@ -63,7 +63,7 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction { AppExceptionBuilder ebuilder; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; @@ -195,7 +195,7 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction { throw ebuilder.buildMutiErrorAppException(errors); } - tubeProcessContextMgrService.setCurTubeState(TubeState.PRE_PROCESSED); + tubeStateMgrService.setCurTubeState(TubeState.PRE_PROCESSED); incubationPlateMgrService.waitingForDrop(tube); logger.info("pre process success"); } diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ5_PROCESS.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ5_PROCESS.java index 371a386..57c08ad 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ5_PROCESS.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ5_PROCESS.java @@ -41,7 +41,7 @@ public class SEQ5_PROCESS extends A8kStepAction { AppExceptionBuilder ebuilder; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource IncubationPlateMgrService incubationPlateMgrService; @@ -63,10 +63,10 @@ public class SEQ5_PROCESS extends A8kStepAction { // 2.取tip头 // 3.摇匀,脱帽 // - tubeProcessContextMgrService.setCurTubeState(TubeState.PROCESSING); + tubeStateMgrService.setCurTubeState(TubeState.PROCESSING); Tube tube = gstate.getCurProcessingTube(); OS.forceSleep(3000); - tubeProcessContextMgrService.setCurTubeState(TubeState.PROCESSED); + tubeStateMgrService.setCurTubeState(TubeState.PROCESSED); incubationPlateMgrService.startIncubating(tube, 60 * 2); logger.info("pre process success"); } diff --git a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ6_POST_PROCESS.java b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ6_POST_PROCESS.java index 05eca92..6039268 100644 --- a/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ6_POST_PROCESS.java +++ b/src/main/java/a8k/service/apps/appctrl/mainflowctrl/action/SEQ6_POST_PROCESS.java @@ -41,7 +41,7 @@ public class SEQ6_POST_PROCESS extends A8kStepAction { AppExceptionBuilder ebuilder; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource IncubationPlateMgrService incubationPlateMgrService; @@ -61,10 +61,10 @@ public class SEQ6_POST_PROCESS extends A8kStepAction { } @Override public void doaction() throws AppException { - tubeProcessContextMgrService.setCurTubeState(TubeState.POST_PROCESSING); + tubeStateMgrService.setCurTubeState(TubeState.POST_PROCESSING); Tube tube = gstate.getCurProcessingTube(); OS.forceSleep(3000); - tubeProcessContextMgrService.setCurTubeState(TubeState.POST_PROCESSED); + tubeStateMgrService.setCurTubeState(TubeState.POST_PROCESSED); } @Override public Boolean checkCondition() { diff --git a/src/main/java/a8k/service/apps/appdata/AppReactionResultMgrService.java b/src/main/java/a8k/service/apps/appdata/AppReactionResultMgrService.java index f1fc658..8b5d619 100644 --- a/src/main/java/a8k/service/apps/appdata/AppReactionResultMgrService.java +++ b/src/main/java/a8k/service/apps/appdata/AppReactionResultMgrService.java @@ -6,7 +6,7 @@ import a8k.extapi_controler.utils.ExtApiTab; import a8k.service.apps.dbservice.ReactionRecordDBService; import a8k.service.apps.dbservice.type.ReactionResultRecord; import a8k.service.apps.appstate.GStateService; -import a8k.service.apps.appstate.TubeProcessContextMgrService; +import a8k.service.apps.appstate.TubeStateMgrService; import a8k.service.apps.appstate.type.ProjProcessContext; import a8k.service.apps.appstate.type.TubeProcessContext; import a8k.type.ReactionResult; @@ -29,7 +29,7 @@ public class AppReactionResultMgrService { ReactionRecordDBService reactionRecordDBService; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; @Resource AppUserMgrService appUserMgrService; @@ -48,7 +48,7 @@ public class AppReactionResultMgrService { public void addRecord(ProjProcessContext projContext, ReactionResult... reactionResults) { ReactionResultRecord record = new ReactionResultRecord(); - TubeProcessContext tubeContext = tubeProcessContextMgrService.getTubeContext(projContext.sampleId); + TubeProcessContext tubeContext = tubeStateMgrService.getTubeContext(projContext.sampleId); String operator = appUserMgrService.getLoginUsr() != null ? appUserMgrService.getLoginUsr().account : "UNLOGIN"; diff --git a/src/main/java/a8k/service/apps/appstate/EmergencySamplePosStateMgrService.java b/src/main/java/a8k/service/apps/appstate/EmergencySamplePosStateMgrService.java index 1d652be..2052e20 100644 --- a/src/main/java/a8k/service/apps/appstate/EmergencySamplePosStateMgrService.java +++ b/src/main/java/a8k/service/apps/appstate/EmergencySamplePosStateMgrService.java @@ -21,7 +21,7 @@ public class EmergencySamplePosStateMgrService { GStateService gstate; @Resource - TubeProcessContextMgrService tubeProcessContextMgrService; + TubeStateMgrService tubeStateMgrService; /** * 提交紧急样本设置 @@ -47,7 +47,7 @@ public class EmergencySamplePosStateMgrService { tube.projIndex.add(Integer.parseInt(index)); } tube.state = TubeState.TO_BE_PROCESSED; - tubeProcessContextMgrService.createNewEmergencyTubeContext(tube); + tubeStateMgrService.createNewEmergencyTubeContext(tube); } else { throw new AppException(A8kEcode.EmergencySampleIsProcessing); } diff --git a/src/main/java/a8k/service/apps/appstate/TubeProcessContextMgrService.java b/src/main/java/a8k/service/apps/appstate/TubeProcessContextMgrService.java deleted file mode 100644 index 8d32ca4..0000000 --- a/src/main/java/a8k/service/apps/appstate/TubeProcessContextMgrService.java +++ /dev/null @@ -1,167 +0,0 @@ -package a8k.service.apps.appstate; - -import a8k.service.apps.dbservice.type.SampleRecord; -import a8k.service.apps.appstate.type.ProjProcessContext; -import a8k.service.apps.appstate.type.Tube; -import a8k.service.apps.appstate.type.TubeProcessContext; -import a8k.service.apps.appstate.type.state.TubeState; -import a8k.type.Consumable; -import a8k.type.IncubatorPos; -import a8k.type.TipPos; -import a8k.type.projecttype.a8kidcard.A8kIdCardInfo; -import jakarta.annotation.Resource; -import org.jetbrains.annotations.NotNull; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; - -import a8k.service.apps.dbservice.SampleRecordDBService; - -@Component -public class TubeProcessContextMgrService { - - - @Resource - GStateService gstate; - @Resource - SampleRecordDBService sampleRecordDBService; - - List contexts = new ArrayList<>(); - - String generateSampleId(Date date, Integer tubePos) { - String sampleid = ""; - Integer cnt = sampleRecordDBService.getRecordCntToday(); - - SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); - sampleid = String.format("%s_%s", sdf.format(date), cnt); - if (tubePos == -1) { - sampleid = String.format("%s_%sE", sdf.format(date), cnt); - } - return sampleid; - } - - - void assignTubeProcessContext(TubeProcessContext cxt, Tube tube) { - cxt.sampleid = tube.sampleid; - cxt.isHighTube = tube.isHighTube; - cxt.isEmergency = tube.isEmergency; - cxt.bloodType = tube.bloodType; - cxt.sampleBarcode = tube.sampleBarcode; - cxt.userid = tube.userid; - cxt.projIndex = tube.projIndex; - cxt.projProcessContext = tube.projProcessContexts; - - } - - - private void addSampleRecord(Tube[] state) { - Date intertime = new Date(); - for (int i = 0; i < state.length; i++) { - if (state[i] == null) { - continue; - } - if (state[i].state.equals(TubeState.EMPTY)) { - continue; - } - SampleRecord record = new SampleRecord(); - record.bloodType = state[i].bloodType; - record.sampleBarcode = state[i].sampleBarcode; - record.userid = state[i].userid; - record.date = intertime; - record.isEmergency = state[i].isEmergency; - record.sampleid = generateSampleId(intertime, i); - record.projIndex = state[i].projIndex; - state[i].sampleid = record.sampleid; - sampleRecordDBService.add(record); - } - } - - private void addEmergencySampleRecord(Tube state) { - Date intertime = new Date(); - SampleRecord record = new SampleRecord(); - state.isEmergency = true; - - record.bloodType = state.bloodType; - record.sampleBarcode = state.sampleBarcode; - record.userid = state.userid; - record.date = intertime; - record.isEmergency = true; - record.sampleid = generateSampleId(intertime, -1); - record.projIndex = state.projIndex; - state.sampleid = record.sampleid; - sampleRecordDBService.add(record); - } - - - synchronized public void createNewEmergencyTubeContext(Tube tube) { - assert tube != null; - assert !tube.sampleid.isEmpty(); - - TubeProcessContext context = new TubeProcessContext(); - assignTubeProcessContext(context, tube); - contexts.add(context); - } - - synchronized public void createNewTubeContexts(Tube[] tube) { - addSampleRecord(tube); - for (Tube t : tube) { - TubeProcessContext context = new TubeProcessContext(); - assignTubeProcessContext(context, t); - contexts.add(context); - } - } - - synchronized public TubeProcessContext getTubeContext(String sampleid) { - for (TubeProcessContext context : contexts) { - if (context.sampleid.equals(sampleid)) { - return context; - } - } - return null; - } - - - synchronized public void createProjProcessContext(@NotNull Tube tube, @NotNull A8kIdCardInfo idCardInfo, @NotNull Consumable consumable, @NotNull List tipPos, - @NotNull IncubatorPos incubatorPos) { - ProjProcessContext context = new ProjProcessContext(); - context.projIndex = idCardInfo.projIndex; - context.projName = idCardInfo.projName; - context.a8kIdCardInfo = idCardInfo; - context.consumable = consumable; - context.incubatorPos = incubatorPos; - context.tipPos = tipPos; - context.sampleId = tube.sampleid; - context.uuid = UUID.randomUUID().toString(); - - tube.projProcessContexts.add(context); - } - - - synchronized public void setCurTubeState(TubeState state) { - Tube tube = gstate.getCurProcessingTube(); - assert tube != null; - - tube.state = state; - } - - synchronized public void setTubeResourceIsReady(@NotNull List idCardInfo, @NotNull List consumable, @NotNull List> tipPos, - @NotNull List incubatorPos) { - Tube tube = gstate.getCurProcessingTube(); - assert tube != null; - for (int i = 0; i < tube.projIndex.size(); i++) { - createProjProcessContext(tube, idCardInfo.get(i), consumable.get(i), tipPos.get(i), incubatorPos.get(i)); - } - tube.state = TubeState.RESOURCE_IS_READY; - } - - synchronized public void pendingTube(Tube tube) { - tube.state = TubeState.PENDING; - gstate.curProcessingTube = tube; - } - - -} diff --git a/src/main/java/a8k/service/apps/appstate/TubeProcessStateMgrService.java b/src/main/java/a8k/service/apps/appstate/TubeProcessStateMgrService.java deleted file mode 100644 index b28b04f..0000000 --- a/src/main/java/a8k/service/apps/appstate/TubeProcessStateMgrService.java +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/main/java/a8k/service/apps/appstate/TubeStateMgrService.java b/src/main/java/a8k/service/apps/appstate/TubeStateMgrService.java new file mode 100644 index 0000000..71f3d9d --- /dev/null +++ b/src/main/java/a8k/service/apps/appstate/TubeStateMgrService.java @@ -0,0 +1,165 @@ +package a8k.service.apps.appstate; + +import a8k.service.apps.dbservice.type.SampleRecord; +import a8k.service.apps.appstate.type.ProjProcessContext; +import a8k.service.apps.appstate.type.Tube; +import a8k.service.apps.appstate.type.TubeProcessContext; +import a8k.service.apps.appstate.type.state.TubeState; +import a8k.type.Consumable; +import a8k.type.IncubatorPos; +import a8k.type.TipPos; +import a8k.type.projecttype.a8kidcard.A8kIdCardInfo; +import jakarta.annotation.Resource; +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import a8k.service.apps.dbservice.SampleRecordDBService; + +@Component +public class TubeStateMgrService { + + + @Resource + GStateService gstate; + @Resource + SampleRecordDBService sampleRecordDBService; + + List contexts = new ArrayList<>(); + + String generateSampleId(Date date, Integer tubePos) { + String sampleid = ""; + Integer cnt = sampleRecordDBService.getRecordCntToday(); + + SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); + sampleid = String.format("%s_%s", sdf.format(date), cnt); + if (tubePos == -1) { + sampleid = String.format("%s_%sE", sdf.format(date), cnt); + } + return sampleid; + } + + + void assignTubeProcessContext(TubeProcessContext cxt, Tube tube) { + cxt.sampleid = tube.sampleid; + cxt.isHighTube = tube.isHighTube; + cxt.isEmergency = tube.isEmergency; + cxt.bloodType = tube.bloodType; + cxt.sampleBarcode = tube.sampleBarcode; + cxt.userid = tube.userid; + cxt.projIndex = tube.projIndex; + cxt.projProcessContext = tube.projProcessContexts; + + } + + + private void addSampleRecord(Tube[] state) { + Date intertime = new Date(); + for (int i = 0; i < state.length; i++) { + if (state[i] == null) { + continue; + } + if (state[i].state.equals(TubeState.EMPTY)) { + continue; + } + SampleRecord record = new SampleRecord(); + record.bloodType = state[i].bloodType; + record.sampleBarcode = state[i].sampleBarcode; + record.userid = state[i].userid; + record.date = intertime; + record.isEmergency = state[i].isEmergency; + record.sampleid = generateSampleId(intertime, i); + record.projIndex = state[i].projIndex; + state[i].sampleid = record.sampleid; + sampleRecordDBService.add(record); + } + } + + private void addEmergencySampleRecord(Tube state) { + Date intertime = new Date(); + SampleRecord record = new SampleRecord(); + state.isEmergency = true; + + record.bloodType = state.bloodType; + record.sampleBarcode = state.sampleBarcode; + record.userid = state.userid; + record.date = intertime; + record.isEmergency = true; + record.sampleid = generateSampleId(intertime, -1); + record.projIndex = state.projIndex; + state.sampleid = record.sampleid; + sampleRecordDBService.add(record); + } + + + synchronized public void createNewEmergencyTubeContext(Tube tube) { + assert tube != null; + assert !tube.sampleid.isEmpty(); + + TubeProcessContext context = new TubeProcessContext(); + assignTubeProcessContext(context, tube); + contexts.add(context); + } + + synchronized public void createNewTubeContexts(Tube[] tube) { + addSampleRecord(tube); + for (Tube t : tube) { + TubeProcessContext context = new TubeProcessContext(); + assignTubeProcessContext(context, t); + contexts.add(context); + } + } + + synchronized public TubeProcessContext getTubeContext(String sampleid) { + for (TubeProcessContext context : contexts) { + if (context.sampleid.equals(sampleid)) { + return context; + } + } + return null; + } + + + synchronized public void createProjProcessContext(@NotNull Tube tube, @NotNull A8kIdCardInfo idCardInfo, @NotNull Consumable consumable, @NotNull List tipPos, + @NotNull IncubatorPos incubatorPos) { + ProjProcessContext context = new ProjProcessContext(); + context.projIndex = idCardInfo.projIndex; + context.projName = idCardInfo.projName; + context.a8kIdCardInfo = idCardInfo; + context.consumable = consumable; + context.incubatorPos = incubatorPos; + context.tipPos = tipPos; + context.sampleId = tube.sampleid; + context.uuid = UUID.randomUUID().toString(); + + tube.projProcessContexts.add(context); + } + + + synchronized public void setCurTubeState(TubeState state) { + Tube tube = gstate.getCurProcessingTube(); + assert tube != null; + + tube.state = state; + } + + synchronized public void setTubeResourceIsReady(@NotNull List idCardInfo, @NotNull List consumable, @NotNull List> tipPos, + @NotNull List incubatorPos) { + Tube tube = gstate.getCurProcessingTube(); + assert tube != null; + for (int i = 0; i < tube.projIndex.size(); i++) { + createProjProcessContext(tube, idCardInfo.get(i), consumable.get(i), tipPos.get(i), incubatorPos.get(i)); + } + tube.state = TubeState.RESOURCE_IS_READY; + } + + synchronized public void pendingTube(Tube tube) { + tube.state = TubeState.PENDING; + gstate.curProcessingTube = tube; + } +}