```mermaid classDiagram %% 试管状态管理器 class TubeStateMgrService { } %% 试管设置 class TubeSetting { public int tubeIndex; // 试管位置索引 public String userid = ""; //用户输入的样本ID,不做逻辑,只做展示 public String sampleBarcode = ""; //用于请求用户信息的条码ID public List projId = new ArrayList<>(); //项目编码,标明需要做的项目 public BloodType bloodType = BloodType.WHOLE_BLOOD; } %% 试管架设置管理器 class TubeHolderSettingMgrService { } %% 试管架设置 class TubeHolderSetting { public String uuid = UUID.randomUUID().toString(); //唯一标识 public Boolean active = false;//是否激活对应前端页面的☑️ public TubeSetting[] tubeSettings = new TubeSetting[10]; // 试管设置 public Boolean lock = false;//如果后台已经使用,前端不允许修改 } TubeHolderSettingMgrService --> TubeHolderSetting TubeHolderSetting "1" --> "10" TubeSetting %% 试管架设置状态 class TubeHolderSettingState { INACTIVE, ACTIVE, LOCKED } <> TubeHolderSettingState %% 试管架 class TubeHolder { } %% 试管架状态 class TubeHolderState { IDLE, //没有试管架 PROCESSING, //正在处理试管架 } <> TubeHolderState %% 试管架类型 class A8kTubeHolderType { BloodTube("0000"), //全血试管 // MiniTube("1111"), //迷你试管 MiniBlood("2222"), //阳普管 BulletTube1P5("5555"),//子弹头试管1.5mL BulletTube0P5("4444"), //子弹头试管0.5mL StoolTestTube("8888"); //粪便试管 } <> A8kTubeHolderType TubeHolder --> TubeHolderState TubeHolder "1" --> "10" Tube TubeHolder --> A8kTubeHolderType ``` ```mermaid --- title: 新增试管架配置时序图 --- sequenceDiagram actor user participant TubeHolderSettingMgrControler participant TubeHolderSettingMgrService participant AppEventBusService user->>+TubeHolderSettingMgrControler: 添加试管架 TubeHolderSettingMgrControler->>+TubeHolderSettingMgrService: newTubeHolderSetting() TubeHolderSettingMgrService ->>-TubeHolderSettingMgrControler: 试管架配置 TubeHolderSettingMgrService -->> AppEventBusService: 发送试管架配置更新消息 TubeHolderSettingMgrControler ->>-user: 操作成功 ``` ```mermaid --- title: 激活试管架时序图 --- sequenceDiagram actor user participant TubeHolderSettingMgrControler participant TubeHolderSettingMgrService user ->>+ TubeHolderSettingMgrControler: 激活试管架 TubeHolderSettingMgrControler ->>+ TubeHolderSettingMgrService: updateActiveState(String uuid, Boolean active) TubeHolderSettingMgrService ->>- TubeHolderSettingMgrControler: void TubeHolderSettingMgrControler ->>- user: 操作成功 ``` ```mermaid --- tilte: 扫描试管架任务时序图 --- sequenceDiagram actor a8k participant AC30ScanTubeHolderTask participant TubeHolderSettingMgrService participant AppEventBusService a8k->>+AC30ScanTubeHolderTask:doAction AC30ScanTubeHolderTask->>+TubeHolderSettingMgrService:getThelastActiveTubeHolderSetting TubeHolderSettingMgrService->>-AC30ScanTubeHolderTask:TubeHolderSetting AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:priDoAction(tubeSetting) AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEnterTubeHolder推入试管架 AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:推入结果 alt 推入失败 AC30ScanTubeHolderTask-->>AppEventBusService:发送推入试管架失败消息 else 推入成功 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doScanHolder AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolderScanResult end alt 扫描结果为空 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void else 扫描结果不为空 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:parseScanResult(scanResult, tubeHolderSetting) AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolder end alt 试管扫描结果解析失败 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void else 扫描结果解析成功 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:newTubeHolder(tubeholder) AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: analyze ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材状态信息(项目还有多少耗材,当前试管架需要多少项目多少耗材) AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isEnough alt 耗材不够 ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材不足错误 end AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isHasEnoughTip alt Tip不足 ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: Tip头不足错误 end loop 试管个数 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask: newSample(生成一条检验记录) AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask: 检验记录id loop 项目个数 AC30ScanTubeHolderTask->>+ProjectContextMgrService: newCxt(生产项目上下文) ProjectContextMgrService->>-AC30ScanTubeHolderTask: void end end AC30ScanTubeHolderTask->>+TubeHolder: setState(TubeHolderState.PROCESSING) TubeHolder->>-AC30ScanTubeHolderTask: void AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:AppError end alt 存在系统错误 AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void end AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void AC30ScanTubeHolderTask->>-a8k: void ``` ```mermaid --- title: 一次检测时序图 --- sequenceDiagram ```