item_meta_convert.dart 2.9 KB

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