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.

182 lines
6.3 KiB

  1. ```mermaid
  2. classDiagram
  3. %% 试管状态管理器
  4. class TubeStateMgrService {
  5. }
  6. %% 试管设置
  7. class TubeSetting {
  8. public int tubeIndex; // 试管位置索引
  9. public String userid = ""; //用户输入的样本ID,不做逻辑,只做展示
  10. public String sampleBarcode = ""; //用于请求用户信息的条码ID
  11. public List<Integer> projId = new ArrayList<>(); //项目编码,标明需要做的项目
  12. public BloodType bloodType = BloodType.WHOLE_BLOOD;
  13. }
  14. %% 试管架设置管理器
  15. class TubeHolderSettingMgrService {
  16. }
  17. %% 试管架设置
  18. class TubeHolderSetting {
  19. public String uuid = UUID.randomUUID().toString(); //唯一标识
  20. public Boolean active = false;//是否激活对应前端页面的☑️
  21. public TubeSetting[] tubeSettings = new TubeSetting[10]; // 试管设置
  22. public Boolean lock = false;//如果后台已经使用,前端不允许修改
  23. }
  24. TubeHolderSettingMgrService --> TubeHolderSetting
  25. TubeHolderSetting "1" --> "10" TubeSetting
  26. %% 试管架设置状态
  27. class TubeHolderSettingState {
  28. INACTIVE,
  29. ACTIVE,
  30. LOCKED
  31. }
  32. <<enumeration>> TubeHolderSettingState
  33. %% 试管架
  34. class TubeHolder {
  35. }
  36. %% 试管架状态
  37. class TubeHolderState {
  38. IDLE, //没有试管架
  39. PROCESSING, //正在处理试管架
  40. }
  41. <<enumeration>> TubeHolderState
  42. %% 试管架类型
  43. class A8kTubeHolderType {
  44. BloodTube("0000"), //全血试管
  45. // MiniTube("1111"), //迷你试管
  46. MiniBlood("2222"), //阳普管
  47. BulletTube1P5("5555"),//子弹头试管1.5mL
  48. BulletTube0P5("4444"), //子弹头试管0.5mL
  49. StoolTestTube("8888"); //粪便试管
  50. }
  51. <<enumeration>> A8kTubeHolderType
  52. TubeHolder --> TubeHolderState
  53. TubeHolder "1" --> "10" Tube
  54. TubeHolder --> A8kTubeHolderType
  55. ```
  56. ```mermaid
  57. ---
  58. title: 新增试管架配置时序图
  59. ---
  60. sequenceDiagram
  61. actor user
  62. participant TubeHolderSettingMgrControler
  63. participant TubeHolderSettingMgrService
  64. participant AppEventBusService
  65. user->>+TubeHolderSettingMgrControler: 添加试管架
  66. TubeHolderSettingMgrControler->>+TubeHolderSettingMgrService: newTubeHolderSetting()
  67. TubeHolderSettingMgrService ->>-TubeHolderSettingMgrControler: 试管架配置
  68. TubeHolderSettingMgrService -->> AppEventBusService: 发送试管架配置更新消息
  69. TubeHolderSettingMgrControler ->>-user: 操作成功
  70. ```
  71. ```mermaid
  72. ---
  73. title: 激活试管架时序图
  74. ---
  75. sequenceDiagram
  76. actor user
  77. participant TubeHolderSettingMgrControler
  78. participant TubeHolderSettingMgrService
  79. user ->>+ TubeHolderSettingMgrControler: 激活试管架
  80. TubeHolderSettingMgrControler ->>+ TubeHolderSettingMgrService: updateActiveState(String uuid, Boolean active)
  81. TubeHolderSettingMgrService ->>- TubeHolderSettingMgrControler: void
  82. TubeHolderSettingMgrControler ->>- user: 操作成功
  83. ```
  84. ```mermaid
  85. ---
  86. tilte: 扫描试管架任务时序图
  87. ---
  88. sequenceDiagram
  89. actor a8k
  90. participant AC30ScanTubeHolderTask
  91. participant TubeHolderSettingMgrService
  92. participant AppEventBusService
  93. a8k->>+AC30ScanTubeHolderTask:doAction
  94. AC30ScanTubeHolderTask->>+TubeHolderSettingMgrService:getThelastActiveTubeHolderSetting
  95. TubeHolderSettingMgrService->>-AC30ScanTubeHolderTask:TubeHolderSetting
  96. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:priDoAction(tubeSetting)
  97. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEnterTubeHolder推入试管架
  98. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:推入结果
  99. alt 推入失败
  100. AC30ScanTubeHolderTask-->>AppEventBusService:发送推入试管架失败消息
  101. else 推入成功
  102. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doScanHolder
  103. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolderScanResult
  104. end
  105. alt 扫描结果为空
  106. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  107. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  108. else 扫描结果不为空
  109. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:parseScanResult(scanResult, tubeHolderSetting)
  110. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:TubeHolder
  111. end
  112. alt 试管扫描结果解析失败
  113. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  114. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  115. else 扫描结果解析成功
  116. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:newTubeHolder(tubeholder)
  117. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: analyze
  118. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材状态信息(项目还有多少耗材,当前试管架需要多少项目多少耗材)
  119. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isEnough
  120. alt 耗材不够
  121. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: 耗材不足错误
  122. end
  123. AC30ScanTubeHolderTask->>+ConsumableStateAnalyzerService: isHasEnoughTip
  124. alt Tip不足
  125. ConsumableStateAnalyzerService->>-AC30ScanTubeHolderTask: Tip头不足错误
  126. end
  127. loop 试管个数
  128. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask: newSample(生成一条检验记录)
  129. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask: 检验记录id
  130. loop 项目个数
  131. AC30ScanTubeHolderTask->>+ProjectContextMgrService: newCxt(生产项目上下文)
  132. ProjectContextMgrService->>-AC30ScanTubeHolderTask: void
  133. end
  134. end
  135. AC30ScanTubeHolderTask->>+TubeHolder: setState(TubeHolderState.PROCESSING)
  136. TubeHolder->>-AC30ScanTubeHolderTask: void
  137. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:AppError
  138. end
  139. alt 存在系统错误
  140. AC30ScanTubeHolderTask->>+AC30ScanTubeHolderTask:doEjectHodler
  141. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  142. end
  143. AC30ScanTubeHolderTask->>-AC30ScanTubeHolderTask:void
  144. AC30ScanTubeHolderTask->>-a8k: void
  145. ```
  146. ```mermaid
  147. ---
  148. title: 一次检测时序图
  149. ---
  150. sequenceDiagram
  151. ```