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.

289 lines
9.3 KiB

  1. ```mermaid
  2. classDiagram
  3. %% 全局耗材容器
  4. class A8kConsumableContainer
  5. class TipContainer {
  6. }
  7. class ReactionPlateContainer {
  8. }
  9. class LittBottleContainer {
  10. public Integer projId; //项目ID
  11. public String projName; //项目名称
  12. public String projShortName;//项目缩写名称
  13. public LittleBottleConsumableType type;
  14. public String lotId = ""; //批次号
  15. public String color = ""; //颜色
  16. public Integer num = 0;
  17. public Integer reserveNum = 0;
  18. public Boolean isInstall = false;
  19. }
  20. class LarBottleContainer
  21. A8kConsumableContainer "1" --> "3" TipContainer
  22. A8kConsumableContainer "1" --> "6" ReactionPlateContainer
  23. A8kConsumableContainer "1" --> "6" LittBottleContainer
  24. A8kConsumableContainer "1" --> "6" LarBottleContainer
  25. class ConsumablesMgrService {
  26. + unInstallConsumable() // 卸载耗材
  27. + useReserveConsumable() // 使用耗材
  28. + reserveConsumable() // 预留耗材
  29. }
  30. ConsumablesMgrService --> A8kConsumableContainer
  31. class ConsumableInfo {
  32. public String lotid;
  33. public ConsumableGroup group; // 耗材组
  34. public Integer pos; // 当前耗材信息属于哪个耗材组
  35. }
  36. ```
  37. ```mermaid
  38. classDiagram
  39. %% 试管状态管理器
  40. class TubeStateMgrService {
  41. }
  42. %% 试管设置
  43. class TubeSetting {
  44. public int tubeIndex; // 试管位置索引
  45. public String userid = ""; //用户输入的样本ID,不做逻辑,只做展示
  46. public String sampleBarcode = ""; //用于请求用户信息的条码ID
  47. public List<Integer> projId = new ArrayList<>(); //项目编码,标明需要做的项目
  48. public BloodType bloodType = BloodType.WHOLE_BLOOD;
  49. }
  50. %% 试管架设置管理器
  51. class TubeHolderSettingMgrService {
  52. }
  53. %% 试管架设置
  54. class TubeHolderSetting {
  55. public String uuid = UUID.randomUUID().toString(); //唯一标识
  56. public Boolean active = false;//是否激活对应前端页面的☑️
  57. public TubeSetting[] tubeSettings = new TubeSetting[10]; // 试管设置
  58. public Boolean lock = false;//如果后台已经使用,前端不允许修改
  59. }
  60. TubeHolderSettingMgrService --> TubeHolderSetting
  61. TubeHolderSetting "1" --> "10" TubeSetting
  62. %% 试管架设置状态
  63. class TubeHolderSettingState {
  64. INACTIVE,
  65. ACTIVE,
  66. LOCKED
  67. }
  68. <<enumeration>> TubeHolderSettingState
  69. %% 试管架
  70. class TubeHolder {
  71. }
  72. %% 试管架状态
  73. class TubeHolderState {
  74. IDLE, //没有试管架
  75. PROCESSING, //正在处理试管架
  76. }
  77. <<enumeration>> TubeHolderState
  78. %% 试管架类型
  79. class A8kTubeHolderType {
  80. BloodTube("0000"), //全血试管
  81. // MiniTube("1111"), //迷你试管
  82. MiniBlood("2222"), //阳普管
  83. BulletTube1P5("5555"),//子弹头试管1.5mL
  84. BulletTube0P5("4444"), //子弹头试管0.5mL
  85. StoolTestTube("8888"); //粪便试管
  86. }
  87. <<enumeration>> A8kTubeHolderType
  88. TubeHolder --> TubeHolderState
  89. TubeHolder "1" --> "10" Tube
  90. TubeHolder --> A8kTubeHolderType
  91. ```
  92. ```mermaid
  93. ---
  94. title: 新增试管架配置时序图
  95. ---
  96. sequenceDiagram
  97. actor user
  98. participant TubeHolderSettingMgrControler
  99. participant TubeHolderSettingMgrService
  100. participant AppEventBusService
  101. user->>+TubeHolderSettingMgrControler: 添加试管架
  102. TubeHolderSettingMgrControler->>+TubeHolderSettingMgrService: newTubeHolderSetting()
  103. TubeHolderSettingMgrService ->>-TubeHolderSettingMgrControler: 试管架配置
  104. TubeHolderSettingMgrService -->> AppEventBusService: 发送试管架配置更新消息
  105. TubeHolderSettingMgrControler ->>-user: 操作成功
  106. ```
  107. ```mermaid
  108. ---
  109. title: 激活试管架时序图
  110. ---
  111. sequenceDiagram
  112. actor user
  113. participant TubeHolderSettingMgrControler
  114. participant TubeHolderSettingMgrService
  115. user ->>+ TubeHolderSettingMgrControler: 激活试管架
  116. TubeHolderSettingMgrControler ->>+ TubeHolderSettingMgrService: updateActiveState(String uuid, Boolean active)
  117. TubeHolderSettingMgrService ->>- TubeHolderSettingMgrControler: void
  118. TubeHolderSettingMgrControler ->>- user: 操作成功
  119. ```
  120. ```mermaid
  121. ---
  122. tilte: 扫描试管架任务时序图
  123. ---
  124. sequenceDiagram
  125. actor a8k
  126. participant AC30ScanTubeHolderTask
  127. participant TubeHolderSettingMgrService
  128. participant AppEventBusService
  129. a8k->>+AC30ScanTubeHolderTask:doAction
  130. AC30ScanTubeHolderTask->>+TubeHolderSettingMgrService:getThelastActiveTubeHolderSetting
  131. TubeHolderSettingMgrService->>-AC30ScanTubeHolderTask:TubeHolderSetting
  132. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:priDoAction(tubeSetting)
  133. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEnterTubeHolder推入试管架
  134. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:推入结果
  135. alt 推入失败
  136. AC30ScanTubeHolderTask-->>AppEventBusService:发送推入试管架失败消息
  137. else 推入成功
  138. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doScanHolder
  139. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolderScanResult
  140. end
  141. alt 扫描结果为空
  142. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  143. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  144. else 扫描结果不为空
  145. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:parseScanResult(scanResult, tubeHolderSetting)
  146. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolder
  147. end
  148. alt 试管扫描结果解析失败
  149. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  150. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  151. else 扫描结果解析成功
  152. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:newTubeHolder(tubeholder)
  153. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: analyze
  154. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材状态信息(项目还有多少耗材,当前试管架需要多少项目多少耗材)
  155. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isEnough
  156. alt 耗材不够
  157. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材不足错误
  158. end
  159. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isHasEnoughTip
  160. alt Tip不足
  161. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: Tip头不足错误
  162. end
  163. loop 试管个数
  164. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask: newSample(生成一条检验记录)
  165. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask: 检验记录id
  166. loop 项目个数
  167. AC30ScanTubeHolderTask->>+ProjectContextMgrService: newCxt(生产项目上下文)
  168. ProjectContextMgrService->>-AC30ScanTubeHolderTask: void
  169. end
  170. end
  171. AC30ScanTubeHolderTask->>+TubeHolder: setState(TubeHolderState.PROCESSING)
  172. TubeHolder->>-AC30ScanTubeHolderTask: void
  173. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:AppError
  174. end
  175. alt 存在系统错误
  176. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  177. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  178. end
  179. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  180. AC30ScanTubeHolderTask->>-a8k: void
  181. ```
  182. ```mermaid
  183. classDiagram
  184. %% 孵育盘状态管理器
  185. class IncubationPlateStateMgrService {
  186. + IncubationSubTank getOneExpiredPlate() // 获取一个孵育完成的插槽
  187. + IncubatorPos takeOneIncubationIDLEPos() // 获取空闲的插槽位置
  188. }
  189. %% 孵育盘
  190. class IncubationPlate {
  191. }
  192. %% 孵育盘反应板插槽
  193. class IncubationSubTank {
  194. }
  195. %% 插槽位置
  196. class IncubatorPos {
  197. }
  198. %% 插槽状态
  199. class IncubationSubTankState {
  200. EMPTY,//空
  201. RESERVED,//预定
  202. WAITING_FOR_DROP,//等待滴液
  203. INCUBATING, //孵育中
  204. INCUBATION_COMPLETE, //孵育完成
  205. ERROR,//错误
  206. }
  207. <<enumeration>> IncubationSubTankState
  208. IncubationSubTank "1" --> "1" IncubatorPos
  209. IncubationSubTank "1" --> "1" IncubationSubTankState
  210. IncubationPlate "1" --> "20" IncubationSubTank
  211. IncubationPlateStateMgrService --> IncubationPlate
  212. ```
  213. ```mermaid
  214. ---
  215. title: 孵育盘槽位状态变更图
  216. ---
  217. stateDiagram-v2
  218. [*] --> EMPTY
  219. RESERVED --> INCUBATING: startIncubating
  220. INCUBATING --> INCUBATION_COMPLETE: scheduled_timeout[remainTimeSec < 0]
  221. %% 当找到一个空闲的槽位时将其状态置为预留
  222. EMPTY --> RESERVED: takeOneIncubationIDLEPos
  223. INCUBATION_COMPLETE --> EMPTY: reset
  224. RESERVED --> EMPTY: reset
  225. INCUBATING --> EMPTY: reset
  226. ```
  227. ```mermaid
  228. classDiagram
  229. %% 项目上下文管理器
  230. class ProjectContextMgrService {
  231. }
  232. ```
  233. ```mermaid
  234. ---
  235. title: 一次检测时序图
  236. ---
  237. sequenceDiagram
  238. ```