measure_view_controller.dart 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. import 'package:fis_common/logger/logger.dart';
  2. import 'package:fis_jsonrpc/rpc.dart';
  3. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  4. import 'package:fis_measure/interfaces/process/items/terms.dart';
  5. import 'package:fis_measure/interfaces/process/items/types.dart';
  6. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  7. import 'package:fis_measure/interfaces/process/workspace/measure_3d_view_controller.dart';
  8. import 'package:fis_measure/process/items/item_meta_convert.dart';
  9. import 'package:fis_measure/process/workspace/measure_3d_view_controller.dart';
  10. import 'package:fis_measure/process/workspace/measure_data_controller.dart';
  11. import 'package:fis_measure/process/workspace/measure_handler.dart';
  12. import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
  13. import 'package:get/get.dart';
  14. import 'package:vid/us/vid_us_unit.dart';
  15. class MeasureMetaController extends GetxController {
  16. /// 数据
  17. late final measureData = Get.find<MeasureDataController>();
  18. late final measureHandler = Get.find<MeasureHandler>();
  19. late final measure3DViewController = Get.find<Measure3DViewController>();
  20. get isCarotid2D =>
  21. measure3DViewController.curMeasureMode == MeasureMode.carotid2DMode;
  22. /// 跟超声机端保持一致,配置 项目写死
  23. List<ItemMetaGroup> getMeasureConfigurationGroupName() {
  24. return [
  25. ItemMetaGroup('Common', [], true),
  26. ItemMetaGroup('ABD', [], false),
  27. ItemMetaGroup('CARD', [], false),
  28. ItemMetaGroup('GYN', [], false),
  29. ItemMetaGroup('OB', [], false),
  30. ItemMetaGroup('VAS', [], false),
  31. /// 【TODO】 暂时屏蔽 buyStatus
  32. // ItemMetaGroup('VET', [], false),
  33. // ItemMetaGroup('URM', [], false),
  34. ];
  35. }
  36. /// 获取组合测量项
  37. void updateItemList() {
  38. if (isCarotid2D) return; //颈动脉2D采用写死的测量项,无需更新
  39. /// 格式化数据
  40. List<ItemMeta> itemMetaList = [];
  41. for (var element in measureData.itemMetaList) {
  42. if (measureData.getMeasureApplicationList.contains(element.description)) {
  43. itemMetaList.add(element);
  44. }
  45. }
  46. // TODO: Remove mock
  47. // _mockAddLvStudy(itemMetaList);
  48. measureData.curItemMetaList = itemMetaList;
  49. }
  50. void _mockAddLvStudy(List<ItemMeta> itemMetaList) {
  51. itemMetaList.insert(
  52. 1,
  53. ItemMeta(
  54. MeasureTerms.LvStudy,
  55. measureType: MeasureTypes.LvStudyByLineGroupTissue,
  56. description: MeasureTypes.Distance,
  57. briefAnnotation: "LvStudy",
  58. outputs: [
  59. ItemOutputMeta(MeasureTerms.LvStudy, "LvStudy", VidUsUnit.None),
  60. ItemOutputMeta(MeasureTerms.LVEDV, "LVEDV", VidUsUnit.ml),
  61. ItemOutputMeta(MeasureTerms.LVESV, "LVESV", VidUsUnit.ml),
  62. ItemOutputMeta(MeasureTerms.SV, "SV", VidUsUnit.ml),
  63. ItemOutputMeta(MeasureTerms.LVdMass, "LVd Mass", VidUsUnit.g),
  64. ItemOutputMeta(MeasureTerms.EF, "EF", VidUsUnit.percent),
  65. ItemOutputMeta(MeasureTerms.FS, "%FS", VidUsUnit.percent),
  66. ItemOutputMeta(MeasureTerms.PercentIVS, "%IVS", VidUsUnit.percent),
  67. ItemOutputMeta(MeasureTerms.PercentLVPW, "%LVPW", VidUsUnit.percent),
  68. ],
  69. childItems: [
  70. ItemMeta(
  71. MeasureTerms.IVSd,
  72. description: "IVSd",
  73. measureType: MeasureTypes.Distance,
  74. outputs: [
  75. ItemOutputMeta(MeasureTerms.IVSd, "IVSd", VidUsUnit.mm),
  76. ],
  77. ),
  78. ItemMeta(
  79. MeasureTerms.LVIDd,
  80. description: "LVIDd",
  81. measureType: MeasureTypes.Distance,
  82. outputs: [
  83. ItemOutputMeta(MeasureTerms.LVIDd, "LVIDd", VidUsUnit.mm),
  84. ],
  85. ),
  86. ItemMeta(
  87. MeasureTerms.LVPWd,
  88. description: "LVPWd",
  89. measureType: MeasureTypes.Distance,
  90. outputs: [
  91. ItemOutputMeta(MeasureTerms.LVPWd, "LVPWd", VidUsUnit.mm),
  92. ],
  93. ),
  94. ItemMeta(
  95. MeasureTerms.IVSs,
  96. description: "IVSs",
  97. measureType: MeasureTypes.Distance,
  98. outputs: [
  99. ItemOutputMeta(MeasureTerms.IVSs, "IVSs", VidUsUnit.mm),
  100. ],
  101. ),
  102. ItemMeta(
  103. MeasureTerms.LVIDs,
  104. description: "LVIDs",
  105. measureType: MeasureTypes.Distance,
  106. outputs: [
  107. ItemOutputMeta(MeasureTerms.LVIDs, "LVIDs", VidUsUnit.mm),
  108. ],
  109. ),
  110. ItemMeta(
  111. MeasureTerms.LVPWs,
  112. description: "LVPWs",
  113. measureType: MeasureTypes.Distance,
  114. outputs: [
  115. ItemOutputMeta(MeasureTerms.LVPWs, "LVPWs", VidUsUnit.mm),
  116. ],
  117. ),
  118. ],
  119. ),
  120. );
  121. }
  122. void setAvailableModes(String name) {
  123. List<MeasureModeDTO> models = measureData.availableModes;
  124. measureData.currentMode = name;
  125. if (models.isNotEmpty) {
  126. ///群组列表
  127. var groups = models
  128. .firstWhereOrNull(
  129. (element) => element.modeName == measureData.currentMode)
  130. ?.availableGroups;
  131. if (groups != null && groups.isNotEmpty) {
  132. ///项目列表
  133. var folders = groups[0].availableFolders;
  134. if (folders != null && folders.isNotEmpty) {
  135. measureData.getMeasureApplicationList =
  136. folders[0].workingItemNames ?? [];
  137. if (folders[0].availableItems != null) {
  138. measureData.itemMetaList = folders[0]
  139. .availableItems!
  140. // 排除不支持的测量项
  141. .where((element) =>
  142. !MeasureUnsupportedTerms.items.contains(element.name))
  143. .map((element) {
  144. try {
  145. if (element.name == 'LV Study') {
  146. print(element);
  147. }
  148. return ItemMetaConverter(element).output();
  149. } catch (e) {
  150. logger.e(
  151. "Item meta -[${element.name}] convert error; JSON-Text: ${element.toJson()}",
  152. e,
  153. );
  154. return null;
  155. }
  156. })
  157. .where((element) => element != null)
  158. .map((e) => e!)
  159. .toList();
  160. updateItemList();
  161. }
  162. if (measureData.getMeasureApplicationList.isNotEmpty) {
  163. measureData.curItemMetaListChanged.emit(this, []);
  164. }
  165. }
  166. }
  167. }
  168. }
  169. List<ItemMetaDTO> setMeasureConfigItemMetaList() {
  170. List<ItemMetaDTO> _measureConfigItemMetaList = [];
  171. var groups = measureData.availableModes
  172. .firstWhereOrNull(
  173. (element) => element.modeName == measureData.currentMode)
  174. ?.availableGroups;
  175. (groups![0].availableFolders![0].availableItems)?.toList().forEach(
  176. (e) {
  177. if (!MeasureUnsupportedTerms.items.contains(e.name)) {
  178. _measureConfigItemMetaList.add(e);
  179. }
  180. },
  181. );
  182. return _measureConfigItemMetaList;
  183. }
  184. /// 测量项配置组
  185. void measureConfig() {
  186. List<ItemMetaGroup> _itemMetaConfigurationList = [];
  187. Map<String, List<ItemMetaDTO>> _group = {};
  188. getMeasureConfigurationGroupName().forEach(
  189. ((element) {
  190. List<ItemMetaDTO> itemMetaListGroupItem = [];
  191. var groups = measureData.availableModes
  192. .firstWhereOrNull(
  193. (element) => element.modeName == measureData.currentMode)
  194. ?.availableGroups;
  195. (groups![0].availableFolders![0].availableItems)?.toList().forEach(
  196. (e) {
  197. if (e.categories!.toList().contains(element.itemMetaGroupTitle)) {
  198. if (!MeasureUnsupportedTerms.items.contains(e.name)) {
  199. itemMetaListGroupItem.add(e);
  200. }
  201. }
  202. _group[element.itemMetaGroupTitle] = itemMetaListGroupItem;
  203. },
  204. );
  205. }),
  206. );
  207. _group.forEach(
  208. (key, value) {
  209. if (key == 'Common') {
  210. _itemMetaConfigurationList.add(
  211. ItemMetaGroup(key, value, true),
  212. );
  213. } else {
  214. _itemMetaConfigurationList.add(
  215. ItemMetaGroup(key, value, false),
  216. );
  217. }
  218. },
  219. );
  220. measureData.itemMetaListGroup = _itemMetaConfigurationList;
  221. }
  222. void changeItem(ItemMeta itemMeta) {
  223. final application = Get.find<IApplication>();
  224. application.switchItem(itemMeta);
  225. }
  226. }