Browse Source

doc:增加耗材扫描流程梳理

master
黄翔 3 months ago
parent
commit
fac7b461a4
  1. 64
      doc/孵育盘管理.md
  2. 257
      doc/耗材管理.md
  3. 183
      doc/试管及试管架管理.md
  4. 0
      doc/项目上下文管理.md

64
doc/孵育盘管理.md

@ -0,0 +1,64 @@
```mermaid
classDiagram
%% 孵育盘状态管理器
class IncubationPlateStateMgrService {
+ IncubationSubTank getOneExpiredPlate() // 获取一个孵育完成的插槽
+ IncubatorPos takeOneIncubationIDLEPos() // 获取空闲的插槽位置
}
%% 孵育盘
class IncubationPlate {
}
%% 孵育盘反应板插槽
class IncubationSubTank {
}
%% 插槽位置
class IncubatorPos {
}
%% 插槽状态
class IncubationSubTankState {
EMPTY,//空
RESERVED,//预定
WAITING_FOR_DROP,//等待滴液
INCUBATING, //孵育中
INCUBATION_COMPLETE, //孵育完成
ERROR,//错误
}
<<enumeration>> IncubationSubTankState
IncubationSubTank "1" --> "1" IncubatorPos
IncubationSubTank "1" --> "1" IncubationSubTankState
IncubationPlate "1" --> "20" IncubationSubTank
IncubationPlateStateMgrService --> IncubationPlate
```
```mermaid
---
title: 孵育盘槽位状态变更图
---
stateDiagram-v2
[*] --> EMPTY
RESERVED --> INCUBATING: startIncubating
INCUBATING --> INCUBATION_COMPLETE: scheduled_timeout[remainTimeSec < 0]
%% 当找到一个空闲的槽位时将其状态置为预留
EMPTY --> RESERVED: takeOneIncubationIDLEPos
INCUBATION_COMPLETE --> EMPTY: reset
RESERVED --> EMPTY: reset
INCUBATING --> EMPTY: reset
```
```mermaid
classDiagram
%% 项目上下文管理器
class ProjectContextMgrService {
}
```

257
doc/耗材管理.md

@ -41,250 +41,39 @@ classDiagram
```
```mermaid
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
```
```mermaid
---
title: 新增试管架配置时序图
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头不足错误
participant ConsumableScanControler
participant AppConsumablesScanService
participant GStateMgrService
participant ConsumablesScanCtrlService
user->>+ConsumableScanControler: 开始扫描
ConsumableScanControler->>+AppConsumablesScanService: scanConsumables
AppConsumablesScanService->>+GStateMgrService: isDeviceInited
GStateMgrService->>-AppConsumablesScanService: 设备初始化结果
alt 未初始化
AppConsumablesScanService->>-ConsumableScanControler: 抛出系统未初始化异常
else
AppConsumablesScanService->>+ConsumablesScanCtrlService: doScanConsumablesAction
ConsumablesScanCtrlService->>-AppConsumablesScanService: scanRawResults原始扫描结果
loop 遍历扫描结果
AppConsumablesScanService->>+AppConsumablesScanService: parseScanResult
AppConsumablesScanService->>-AppConsumablesScanService: 解析后的结果
end
loop 试管个数
AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask: newSample(生成一条检验记录)
AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask: 检验记录id
loop 项目个数
AC30ScanTubeHolderTask->>+ProjectContextMgrService: newCxt(生产项目上下文)
ProjectContextMgrService->>-AC30ScanTubeHolderTask: void
end
loop 遍历解析后的扫描结果
AppConsumablesScanService->>+AppConsumablesScanService: loadingConsumables
AppConsumablesScanService->>-AppConsumablesScanService: 解析后的结果
end
AC30ScanTubeHolderTask->>+TubeHolder: setState(TubeHolderState.PROCESSING)
TubeHolder->>-AC30ScanTubeHolderTask: void
AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:AppError
end
alt 存在系统错误
AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
AppConsumablesScanService->>-ConsumableScanControler:ConsumablesScanResultPacket
end
AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
AC30ScanTubeHolderTask->>-a8k: void
```
```mermaid
classDiagram
%% 孵育盘状态管理器
class IncubationPlateStateMgrService {
+ IncubationSubTank getOneExpiredPlate() // 获取一个孵育完成的插槽
+ IncubatorPos takeOneIncubationIDLEPos() // 获取空闲的插槽位置
}
%% 孵育盘
class IncubationPlate {
}
%% 孵育盘反应板插槽
class IncubationSubTank {
}
%% 插槽位置
class IncubatorPos {
}
%% 插槽状态
class IncubationSubTankState {
EMPTY,//空
RESERVED,//预定
WAITING_FOR_DROP,//等待滴液
INCUBATING, //孵育中
INCUBATION_COMPLETE, //孵育完成
ERROR,//错误
}
<<enumeration>> IncubationSubTankState
IncubationSubTank "1" --> "1" IncubatorPos
IncubationSubTank "1" --> "1" IncubationSubTankState
IncubationPlate "1" --> "20" IncubationSubTank
IncubationPlateStateMgrService --> IncubationPlate
```
```mermaid
---
title: 孵育盘槽位状态变更图
---
stateDiagram-v2
[*] --> EMPTY
RESERVED --> INCUBATING: startIncubating
INCUBATING --> INCUBATION_COMPLETE: scheduled_timeout[remainTimeSec < 0]
%% 当找到一个空闲的槽位时将其状态置为预留
EMPTY --> RESERVED: takeOneIncubationIDLEPos
INCUBATION_COMPLETE --> EMPTY: reset
RESERVED --> EMPTY: reset
INCUBATING --> EMPTY: reset
```
```mermaid
classDiagram
%% 项目上下文管理器
class ProjectContextMgrService {
}
```
```mermaid
---
title: 一次检测时序图
---
sequenceDiagram
ConsumableScanControler->>-user:ConsumablesScanResultPacket
```

183
doc/试管及试管架管理.md

@ -0,0 +1,183 @@
```mermaid
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
```
```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
```

0
doc/项目上下文管理.md

Loading…
Cancel
Save