measure_view_controller.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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/workspace/application.dart';
  6. import 'package:fis_measure/interfaces/process/workspace/measure_3d_view_controller.dart';
  7. import 'package:fis_measure/process/items/item_meta_convert.dart';
  8. import 'package:fis_measure/process/workspace/measure_3d_view_controller.dart';
  9. import 'package:fis_measure/process/workspace/measure_data_controller.dart';
  10. import 'package:fis_measure/process/workspace/measure_handler.dart';
  11. import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
  12. import 'package:get/get.dart';
  13. class MeasureMetaController extends GetxController {
  14. /// 数据
  15. late final measureData = Get.find<MeasureDataController>();
  16. late final measureHandler = Get.find<MeasureHandler>();
  17. late final measure3DViewController = Get.find<Measure3DViewController>();
  18. get isCarotid2D =>
  19. measure3DViewController.curMeasureMode == MeasureMode.carotid2DMode;
  20. /// 跟超声机端保持一致,配置 项目写死
  21. List<ItemMetaGroup> getMeasureConfigurationGroupName() {
  22. return [
  23. ItemMetaGroup('Common', [], true),
  24. ItemMetaGroup('ABD', [], false),
  25. ItemMetaGroup('CARD', [], false),
  26. ItemMetaGroup('GYN', [], false),
  27. ItemMetaGroup('OB', [], false),
  28. ItemMetaGroup('VAS', [], false),
  29. ];
  30. }
  31. /// 获取组合测量项
  32. void updateItemList() {
  33. if (isCarotid2D) return; //颈动脉2D采用写死的测量项,无需更新
  34. /// 格式化数据
  35. List<ItemMeta> itemMetaList = [];
  36. for (var element in measureData.itemMetaList) {
  37. if (measureData.getMeasureApplicationList.contains(element.description)) {
  38. itemMetaList.add(element);
  39. }
  40. }
  41. measureData.curItemMetaList = itemMetaList;
  42. }
  43. void setAvailableModes(String name) {
  44. List<MeasureModeDTO> models = measureData.availableModes;
  45. measureData.currentMode = name;
  46. if (models.isNotEmpty) {
  47. ///群组列表
  48. var groups = models
  49. .firstWhereOrNull(
  50. (element) => element.modeName == measureData.currentMode)
  51. ?.availableGroups;
  52. if (groups != null && groups.isNotEmpty) {
  53. ///项目列表
  54. var folders = groups[0].availableFolders;
  55. if (folders != null && folders.isNotEmpty) {
  56. measureData.getMeasureApplicationList =
  57. folders[0].workingItemNames ?? [];
  58. if (folders[0].availableItems != null) {
  59. measureData.itemMetaList = folders[0]
  60. .availableItems!
  61. // 排除不支持的测量项
  62. .where((element) =>
  63. !MeasureUnsupportedTerms.items.contains(element.name))
  64. .map((element) {
  65. try {
  66. return ItemMetaConverter(element).output();
  67. } catch (e) {
  68. logger.e(
  69. "Item meta -[${element.name}] convert error; JSON-Text: ${element.toJson()}",
  70. e,
  71. );
  72. return null;
  73. }
  74. })
  75. .where((element) => element != null)
  76. .map((e) => e!)
  77. .toList();
  78. updateItemList();
  79. }
  80. if (measureData.getMeasureApplicationList.isNotEmpty) {
  81. measureData.curItemMetaListChanged.emit(this, []);
  82. }
  83. }
  84. }
  85. }
  86. }
  87. List<ItemMetaDTO> setMeasureConfigItemMetaList() {
  88. List<ItemMetaDTO> _measureConfigItemMetaList = [];
  89. var groups = measureData.availableModes
  90. .firstWhereOrNull(
  91. (element) => element.modeName == measureData.currentMode)
  92. ?.availableGroups;
  93. (groups![0].availableFolders![0].availableItems)?.toList().forEach(
  94. (e) {
  95. if (!MeasureUnsupportedTerms.items.contains(e.name)) {
  96. _measureConfigItemMetaList.add(e);
  97. }
  98. },
  99. );
  100. return _measureConfigItemMetaList;
  101. }
  102. /// 测量项配置组
  103. void measureConfig() {
  104. List<ItemMetaGroup> _itemMetaConfigurationList = [];
  105. Map<String, List<ItemMetaDTO>> _group = {};
  106. getMeasureConfigurationGroupName().forEach(
  107. ((element) {
  108. List<ItemMetaDTO> itemMetaListGroupItem = [];
  109. var groups = measureData.availableModes
  110. .firstWhereOrNull(
  111. (element) => element.modeName == measureData.currentMode)
  112. ?.availableGroups;
  113. (groups![0].availableFolders![0].availableItems)?.toList().forEach(
  114. (e) {
  115. if (e.categories!.toList().contains(element.itemMetaGroupTitle)) {
  116. if (!MeasureUnsupportedTerms.items.contains(e.name)) {
  117. itemMetaListGroupItem.add(e);
  118. }
  119. }
  120. _group[element.itemMetaGroupTitle] = itemMetaListGroupItem;
  121. },
  122. );
  123. }),
  124. );
  125. _group.forEach(
  126. (key, value) {
  127. if (key == 'Common') {
  128. _itemMetaConfigurationList.add(
  129. ItemMetaGroup(key, value, true),
  130. );
  131. } else {
  132. _itemMetaConfigurationList.add(
  133. ItemMetaGroup(key, value, false),
  134. );
  135. }
  136. },
  137. );
  138. measureData.itemMetaListGroup = _itemMetaConfigurationList;
  139. }
  140. void changeItem(ItemMeta itemMeta) {
  141. final application = Get.find<IApplication>();
  142. application.switchItem(itemMeta);
  143. }
  144. }