item_meta_convert.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import 'package:fis_jsonrpc/services/remedical.m.dart';
  2. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  3. import 'package:vid/us/vid_us_unit.dart';
  4. class ItemMetaConverter {
  5. ItemMetaConverter(this.dto);
  6. final ItemMetaDTO dto;
  7. late String _measureType = dto.measureTypeName!;
  8. late final List<ItemOutputMeta> _outputs;
  9. late final List<ItemMeta> _childItems = [];
  10. /// 输出测量项元
  11. ItemMeta output() {
  12. if (dto.multiMethodItems != null && dto.multiMethodItems!.isNotEmpty) {
  13. _loadMulti();
  14. } else if (dto.methodChildItems != null &&
  15. dto.methodChildItems!.isNotEmpty) {
  16. _loadCombo();
  17. _outputs = _convetOutputsFromCalc(dto.calculator!);
  18. } else {
  19. _loadSimple();
  20. _outputs = _convetOutputsFromCalc(dto.calculator!);
  21. }
  22. final meta = ItemMeta(
  23. dto.name!,
  24. measureType: _measureType,
  25. description: dto.description!,
  26. briefAnnotation: dto.briefAnnotation ?? '',
  27. outputs: _outputs,
  28. childItems: _childItems,
  29. /// 【TODO】 暂时屏蔽 buyStatus
  30. // buyStatus: dto.status,
  31. );
  32. return meta;
  33. }
  34. /// 简单测量
  35. void _loadSimple() {
  36. //
  37. }
  38. /// 组合测量
  39. void _loadCombo() {
  40. for (var child in dto.methodChildItems!) {
  41. _childItems.add(_convertChildItem(child));
  42. }
  43. }
  44. /// 多测量方法
  45. void _loadMulti() {
  46. final workingItem = dto.multiMethodItems!.firstWhere((e) => e.isWorking);
  47. _measureType = workingItem.measureTypeName!;
  48. if (workingItem.childItems != null && workingItem.childItems!.isNotEmpty) {
  49. for (var child in workingItem.childItems!) {
  50. _childItems.add(_convertChildItem(child));
  51. }
  52. }
  53. _outputs = _convetOutputsFromCalc(workingItem.calculator!);
  54. }
  55. static ItemMeta _convertChildItem(ChildItemMetaDTO c) {
  56. List<ItemMeta> _kids = [];
  57. if (c.childItems != null && c.childItems!.isNotEmpty) {
  58. for (var child in c.childItems!) {
  59. // if (child.isWorking) {
  60. _kids.add(_convertChildItem(child));
  61. // }
  62. }
  63. }
  64. return ItemMeta(
  65. c.name!,
  66. measureType: c.measureTypeName!,
  67. description: c.description ?? c.name!,
  68. outputs: _convetOutputsFromCalc(c.calculator!),
  69. childItems: _kids,
  70. );
  71. }
  72. static List<ItemOutputMeta> _convetOutputsFromCalc(
  73. CalculatorMetaDTO calcDto) {
  74. final outputs = calcDto.availableOutputs!
  75. .where((e) => e.isWorking == true)
  76. .map((e) => _convetOutputFromDto(e))
  77. .toList();
  78. if (outputs.isEmpty) {
  79. //TODO: wait remove
  80. // return [_convetOutputFromDto(calcDto.availableOutputs!.first)];
  81. return [];
  82. }
  83. return outputs;
  84. }
  85. static ItemOutputMeta _convetOutputFromDto(OutputItemMetaDTO o) {
  86. return ItemOutputMeta(
  87. o.name!,
  88. o.description!,
  89. VidUsUnitMap.getUnit(o.unit),
  90. );
  91. }
  92. }