item_meta_convert.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import 'package:fis_jsonrpc/services/remedical.m.dart';
  2. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  3. import 'package:fis_measure/interfaces/process/items/terms.dart';
  4. import 'package:vid/us/vid_us_unit.dart';
  5. class ItemMetaConverter {
  6. ItemMetaConverter(this.dto);
  7. final ItemMetaDTO dto;
  8. late String _measureType = dto.measureTypeName!;
  9. late final List<ItemOutputMeta> _outputs;
  10. late final List<ItemMeta> _childItems = [];
  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. } else {
  19. _loadSimple();
  20. }
  21. _outputs = _convetOutputsFromCalc(dto.calculator!);
  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. );
  30. return meta;
  31. }
  32. /// 简单测量
  33. void _loadSimple() {
  34. //
  35. }
  36. /// 组合测量
  37. void _loadCombo() {
  38. for (var child in dto.methodChildItems!) {
  39. _childItems.add(_convertChildItem(child));
  40. }
  41. }
  42. /// 多测量方法
  43. void _loadMulti() {
  44. final workingItem = dto.multiMethodItems!.firstWhere((e) => e.isWorking);
  45. _measureType = workingItem.measureTypeName!;
  46. if (workingItem.childItems != null && workingItem.childItems!.isNotEmpty) {
  47. for (var child in workingItem.childItems!) {
  48. _childItems.add(_convertChildItem(child));
  49. }
  50. }
  51. }
  52. static ItemMeta _convertChildItem(ChildItemMetaDTO c) {
  53. ChildItemMetaDTO dto = c;
  54. if (c.childItems != null && c.childItems!.isNotEmpty) {
  55. final child = c.childItems!.firstWhere((e) => e.isWorking);
  56. dto = child;
  57. }
  58. return ItemMeta(
  59. c.name!,
  60. measureType: dto.measureTypeName!,
  61. description: c.description ?? c.name!,
  62. outputs: _convetOutputsFromCalc(dto.calculator!),
  63. childItems: [],
  64. );
  65. }
  66. static List<ItemOutputMeta> _convetOutputsFromCalc(
  67. CalculatorMetaDTO calcDto) {
  68. final outputs = calcDto.availableOutputs!
  69. .where((e) => e.isWorking == true)
  70. .map((e) => _convetOutputFromDto(e))
  71. .toList();
  72. if (outputs.isEmpty) {
  73. //TODO: wait remove
  74. return [_convetOutputFromDto(calcDto.availableOutputs!.first)];
  75. }
  76. return outputs;
  77. }
  78. static ItemOutputMeta _convetOutputFromDto(OutputItemMetaDTO o) {
  79. return ItemOutputMeta(
  80. o.name!,
  81. o.description!,
  82. VidUsUnitMap.getUnit(o.unit),
  83. );
  84. }
  85. }