You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

6.3 KiB

classDiagram
    %% 试管状态管理器
    class TubeStateMgrService {
        
    }

    %% 试管设置
    class TubeSetting {
        public int tubeIndex; // 试管位置索引

        public String        userid        = ""; //用户输入的样本ID,不做逻辑,只做展示
        public String        sampleBarcode = ""; //用于请求用户信息的条码ID
        public List<Integer> 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
    }
    <<enumeration>> TubeHolderSettingState
    
    %% 试管架
    class TubeHolder {
        
    }
    
    %% 试管架状态
    class TubeHolderState {
        IDLE, //没有试管架
        PROCESSING, //正在处理试管架
    }
    <<enumeration>> TubeHolderState
    
    %% 试管架类型
    class A8kTubeHolderType {
        BloodTube("0000"), //全血试管
        //	MiniTube("1111"), //迷你试管
        MiniBlood("2222"), //阳普管
        BulletTube1P5("5555"),//子弹头试管1.5mL
        BulletTube0P5("4444"), //子弹头试管0.5mL
        StoolTestTube("8888"); //粪便试管
    }
    <<enumeration>> A8kTubeHolderType
    
    TubeHolder --> TubeHolderState
    TubeHolder "1" --> "10" Tube
    TubeHolder --> A8kTubeHolderType
---
title: 新增试管架配置时序图
---
sequenceDiagram
    actor user
    participant TubeHolderSettingMgrControler
    participant TubeHolderSettingMgrService
    participant AppEventBusService
    
    user->>+TubeHolderSettingMgrControler: 添加试管架
    TubeHolderSettingMgrControler->>+TubeHolderSettingMgrService: newTubeHolderSetting()
    TubeHolderSettingMgrService ->>-TubeHolderSettingMgrControler: 试管架配置
    TubeHolderSettingMgrService -->> AppEventBusService: 发送试管架配置更新消息
    TubeHolderSettingMgrControler ->>-user: 操作成功
---
title: 激活试管架时序图
---
sequenceDiagram
    actor user
    participant TubeHolderSettingMgrControler
    participant TubeHolderSettingMgrService
    
    user ->>+ TubeHolderSettingMgrControler: 激活试管架
    TubeHolderSettingMgrControler ->>+ TubeHolderSettingMgrService: updateActiveState(String uuid, Boolean active)
    TubeHolderSettingMgrService ->>- TubeHolderSettingMgrControler: void
    TubeHolderSettingMgrControler ->>- user: 操作成功
    
---
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
---
title: 一次检测时序图
---

sequenceDiagram