item_meta_convert.dart 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. } else {
  18. _loadSimple();
  19. }
  20. _outputs = _convetOutputsFromCalc(dto.calculator!);
  21. final meta = ItemMeta(
  22. dto.name!,
  23. measureType: _measureType,
  24. description: dto.description!,
  25. briefAnnotation: dto.briefAnnotation ?? '',
  26. outputs: _outputs,
  27. childItems: _childItems,
  28. );
  29. return meta;
  30. }
  31. /// 简单测量
  32. void _loadSimple() {
  33. //
  34. }
  35. /// 组合测量
  36. void _loadCombo() {
  37. for (var child in dto.methodChildItems!) {
  38. _childItems.add(_convertChildItem(child));
  39. }
  40. }
  41. /// 多测量方法
  42. void _loadMulti() {
  43. final workingItem = dto.multiMethodItems!.firstWhere((e) => e.isWorking);
  44. _measureType = workingItem.measureTypeName!;
  45. if (workingItem.childItems != null && workingItem.childItems!.isNotEmpty) {
  46. for (var child in workingItem.childItems!) {
  47. _childItems.add(_convertChildItem(child));
  48. }
  49. }
  50. }
  51. static ItemMeta _convertChildItem(ChildItemMetaDTO c) {
  52. return ItemMeta(
  53. c.name!,
  54. measureType: c.measureTypeName!,
  55. description: c.description!,
  56. outputs: _convetOutputsFromCalc(c.calculator!),
  57. childItems: [],
  58. );
  59. }
  60. static List<ItemOutputMeta> _convetOutputsFromCalc(
  61. CalculatorMetaDTO calcDto) {
  62. return calcDto.availableOutputs!
  63. .where((e) => e.isWorking == true)
  64. .map((e) => _convetOutputFromDto(e))
  65. .toList();
  66. }
  67. static ItemOutputMeta _convetOutputFromDto(OutputItemMetaDTO o) {
  68. return ItemOutputMeta(
  69. o.name!,
  70. o.description!,
  71. VidUsUnitMap.getUnit(o.unit),
  72. );
  73. }
  74. }