import 'dart:typed_data'; import 'package:fis_common/event/event_type.dart'; import 'package:fis_i18n/i18n.dart'; import 'package:fis_jsonrpc/rpc.dart'; import 'package:fis_measure/interfaces/process/items/item_metas.dart'; import 'package:fis_measure/interfaces/process/workspace/application.dart'; import 'package:fis_measure/process/workspace/measure_handler.dart'; import 'package:fis_measure/utils/prompt_box.dart'; import 'package:fis_measure/values/colors.dart'; import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vid/us/vid_us_mode.dart'; class MeasureImageData { final String? patientCode; final String? remedicalCode; final String? recordCode; MeasureImageData({ this.patientCode, this.recordCode, this.remedicalCode, }); } /// 图片信息数据 abstract class IMeasureDataController { late FEventHandler aiResultsInfoChanged; late FEventHandler measureApplicationVersionChanged; late FEventHandler measureLanguageChanged; late FEventHandler diagnosisConclusionChanged; late FEventHandler> remedicalListResultChanged; late FEventHandler itemCurrentImageChanged; late FEventHandler> itemMetaListChanged; late FEventHandler> getMeasureApplicationChanged; late FEventHandler measureImageDataChanged; late FEventHandler measureSystemSettingChanged; late FEventHandler> applicationModesChanged; late FEventHandler> curItemMetaListChanged; late FEventHandler> annotationListChanged; /// 切换至另一个病人的图像集 late FEventHandler> curMeasureDataChanged; /// 该图像下面的应用 List get itemMetaList; set itemMetaList(List value); /// 测量的翻译 String get measureLanguage; set measureLanguage(String value); /// 测量应用的版本号 String get measureApplicationVersion; set measureApplicationVersion(String value); ///当前选择图像 String get itemCurrentImage; set itemCurrentImage(String value); /// 测量图片的ai结果 String get aiResults; set aiResults(String value); /// 良恶性 用来判断是否存在ai结果 DiagnosisConclusionEnum get diagnosisConclusion; set diagnosisConclusion(DiagnosisConclusionEnum value); /// 测量图片集 List get remedicalList; set remedicalList(List value); /// 测量方式集 List get getMeasureApplicationList; set getMeasureApplicationList(List value); /// 当前载入的测量项列表 List get curItemMetaList; set curItemMetaList(List value); /// 当前所有的注释项 List get annotationList; set annotationList(List value); /// 所有的预置的注释项 PresetCommentItemResultDTO get allPresetAnnotationList; set allPresetAnnotationList(PresetCommentItemResultDTO value); /// 当前模式下预置的注释项 List get currPresetAnnotationList; set currPresetAnnotationList(List value); /// 注释List List get measureCommentItemResult; set measureCommentItemResult(List value); /// 测量图片数据 MeasureImageData get measureImageData; set measureImageData(MeasureImageData value); /// 测量样式数据 MeasureSystemSettingDTO get measureSystemSetting; set measureSystemSetting(MeasureSystemSettingDTO value); /// 测量当前图片所有模式 List get applicationModes; set applicationModes(List value); /// 测量图片当前模式下所有测量项数据 List get availableModes; set availableModes(List value); List get itemMetaListGroup; set itemMetaListGroup(List itemMetaListGroup); String get currentMode; set currentMode(String value); /// 卡尺线画笔 Paint get paintLinePan; set paintLinePan(Paint value); /// 标记点画笔 Paint get paintPointPan; set paintPointPan(Paint value); } class MeasureDataController implements IMeasureDataController { String _aiResults = ''; String _itemCurrentImage = ''; String _measureLanguage = ''; String _currentMode = ''; String _measureApplicationVersion = ''; List _remedicalList = []; List _itemMetaList = []; List _getMeasureApplicationList = []; DiagnosisConclusionEnum _diagnosisConclusion = DiagnosisConclusionEnum.NotRequired; MeasureImageData _measureImageData = MeasureImageData(); MeasureSystemSettingDTO _measureSystemSetting = MeasureSystemSettingDTO(); List _applicationModes = []; List _availableModes = []; List _curItemMetaList = []; List _annotationList = []; List _presetAnnotationList = []; PresetCommentItemResultDTO _allPresetAnnotationList = PresetCommentItemResultDTO(); List _measureCommentItemResult = []; List _itemMetaListGroup = []; Paint _paintLinePan = Paint() ..color = MeasureColors.Primary ..isAntiAlias = true ..strokeWidth = 2 ..style = PaintingStyle.stroke; Paint _paintPointPan = Paint() ..color = MeasureColors.Primary ..isAntiAlias = true ..strokeWidth = 2 ..style = PaintingStyle.stroke; @override var remedicalListResultChanged = FEventHandler>(); @override var aiResultsInfoChanged = FEventHandler(); @override var measureLanguageChanged = FEventHandler(); @override var measureApplicationVersionChanged = FEventHandler(); @override var diagnosisConclusionChanged = FEventHandler(); @override var itemMetaListChanged = FEventHandler>(); @override var itemCurrentImageChanged = FEventHandler(); @override var getMeasureApplicationChanged = FEventHandler>(); @override var measureImageDataChanged = FEventHandler(); @override var measureSystemSettingChanged = FEventHandler(); @override var applicationModesChanged = FEventHandler>(); @override var curItemMetaListChanged = FEventHandler>(); @override var annotationListChanged = FEventHandler>(); @override var curMeasureDataChanged = FEventHandler>(); @override List get curItemMetaList => _curItemMetaList; @override set curItemMetaList(List value) { if (value != _curItemMetaList) { _curItemMetaList = value; _onCurItemMetaListChanged(); } } @override List get annotationList => _annotationList; @override set annotationList(List value) { if (value != _annotationList) { _annotationList = value; _onGetCommentsListChanged(); } } @override List get currPresetAnnotationList => _presetAnnotationList; @override set currPresetAnnotationList(List value) { if (value != _presetAnnotationList) { _presetAnnotationList = value; } } @override PresetCommentItemResultDTO get allPresetAnnotationList => _allPresetAnnotationList; @override set allPresetAnnotationList(PresetCommentItemResultDTO value) { if (value != _allPresetAnnotationList) { _allPresetAnnotationList = value; } } @override List get measureCommentItemResult => _measureCommentItemResult; @override set measureCommentItemResult(List value) { if (value != _measureCommentItemResult) { _measureCommentItemResult = value; } } @override List get availableModes => _availableModes; @override set availableModes(List value) { if (value != _availableModes) { _availableModes = value; } } @override MeasureSystemSettingDTO get measureSystemSetting => _measureSystemSetting; @override set measureSystemSetting(MeasureSystemSettingDTO value) { if (value != _measureSystemSetting) { _measureSystemSetting = value; setGuideline(value.showCursorLine); _onMeasureSystemSettingChanged(); } } /// 设置是否隐藏卡尺线 void setGuideline(bool isShow) { if (isShow) { _paintLinePan.color = MeasureColors.Primary; } else { _paintLinePan.color = MeasureColors.Hide; } } @override List get applicationModes => _applicationModes; @override set applicationModes(List value) { if (value != _applicationModes) { _applicationModes = value; _onApplicationModesChanged(); } } @override String get currentMode => _currentMode; @override set currentMode(String value) { if (value != _currentMode) { _currentMode = value; } } @override List get getMeasureApplicationList => _getMeasureApplicationList; @override set getMeasureApplicationList(List value) { if (value != _getMeasureApplicationList) { _getMeasureApplicationList = value; _onGetMeasureApplicationChanged(); } } @override List get itemMetaList => _itemMetaList; @override set itemMetaList(List value) { if (value != _itemMetaList) { _itemMetaList = value; _onItemMetaListChanged(); } } @override List get itemMetaListGroup => _itemMetaListGroup; @override set itemMetaListGroup(List value) { if (value != _itemMetaListGroup) { _itemMetaListGroup = value; // _onItemMetaListChanged(); } } @override String get itemCurrentImage => _itemCurrentImage; @override set itemCurrentImage(String value) { if (value != _itemCurrentImage) { _itemCurrentImage = value; _onItemCurrentImageChanged(); } } @override String get aiResults => _aiResults; @override set aiResults(String value) { if (value != _aiResults) { _aiResults = value; _onAIResultsChanged(); } } @override String get measureLanguage => _measureLanguage; @override set measureLanguage(String value) { if (value != _measureLanguage) { _measureLanguage = value; _onMeasureLanguageChanged(); } } @override String get measureApplicationVersion => _measureApplicationVersion; @override set measureApplicationVersion(String value) { if (value != _measureApplicationVersion) { _measureApplicationVersion = value; _onMeasureApplicationVersion(); } } @override DiagnosisConclusionEnum get diagnosisConclusion => _diagnosisConclusion; @override set diagnosisConclusion(DiagnosisConclusionEnum value) { if (value != _diagnosisConclusion) { _diagnosisConclusion = value; _onDiagnosisConclusionChanged(); } } @override MeasureImageData get measureImageData => _measureImageData; @override set measureImageData(MeasureImageData value) { if (value != _measureImageData) { _measureImageData = value; _onMeasureImageDataChanged(); } } @override List get remedicalList => _remedicalList; @override set remedicalList(List value) { if (value != _remedicalList) { _remedicalList = value; _onRemedicalListChanged(); } } @override Paint get paintLinePan => _paintLinePan; @override set paintLinePan(Paint value) { if (value != _paintLinePan) { _paintLinePan = value; } } @override Paint get paintPointPan => _paintPointPan; @override set paintPointPan(Paint value) { if (value != _paintPointPan) { _paintPointPan = value; } } MeasureDataController( this.getRemedicalList, this.getImageInfo, this.getMeasureApplication, this.saveUserDefinedMeasureApplicationAsync, this.saveImage, this.saveMeasureSystemSettingAsync, this.getMeasureSystemSettingAsync, this.shareImage, this.getCommentsByApplicationAsync, this.saveUserDefinedCommentsAsync, this.resetUserCommentsAsync, this.getPresetCommentsAsync, ) { _init(); } _init() async {} ///参数1:patientCode,参数2:recordCode,参数3:token Future> Function(String, String, String) getRemedicalList; ///参数1:remedicalCode,参数2:token Future Function(String, String) getImageInfo; ///参数1:测量模式参数 Future Function(MeasureModeSelection) getMeasureApplication; ///参数1:imageBytes 图片字节, 参数2: patientCode 病人code,参数3:recordCode 检查code, 参数4:remedicalCode 检查code,参数5: measuredData 测量值 Future Function(Uint8List, String, String, String, String) saveImage; /// 分享vid Future Function(String) shareImage; /// 保存测量项 Future Function(MeasureModeSubmit) saveUserDefinedMeasureApplicationAsync; /// 保存卡尺样式 Future Function(MeasureSystemSettingDTO) saveMeasureSystemSettingAsync; /// 获取卡尺样式 Future Function() getMeasureSystemSettingAsync; /// 参数1:ApplicationName 应用名称,参数2:CategoryName /分类名称, Future Function(String, String) getCommentsByApplicationAsync; /// 参数1:ApplicationName 应用名称,参数2:CategoryName /分类名称, Future Function(String, String) resetUserCommentsAsync; /// 获取预置的注释项 Future Function() getPresetCommentsAsync; Future Function( String, String, List?, List?, List?) saveUserDefinedCommentsAsync; /// 添加注释项 Future addAnnotation( IApplication application, String annotationName) async { final result = await saveUserDefinedCommentsAsync( application.applicationName, application.categoryName, [CommentItemDTO(text: annotationName)], null, null); return result; } /// 删除注释项 Future deleteAnnotation( IApplication application, String annotationName) async { final result = await saveUserDefinedCommentsAsync( application.applicationName, application.categoryName, null, [CommentItemDTO(text: annotationName)], null); return result; } /// 更新注释项 Future updateAnnotation(IApplication application, String oldAnnotationName, String newAnnotationName) async { final result = await saveUserDefinedCommentsAsync( application.applicationName, application.categoryName, null, null, [ UpdateCommentItemDTO( oldText: oldAnnotationName, newText: newAnnotationName) ], ); return result; } void _onRemedicalListChanged() { remedicalListResultChanged.emit(this, remedicalList); } void _onAIResultsChanged() { aiResultsInfoChanged.emit(this, aiResults); } void _onItemCurrentImageChanged() { itemCurrentImageChanged.emit(this, itemCurrentImage); } void _onItemMetaListChanged() { itemMetaListChanged.emit(this, itemMetaList); } void _onGetMeasureApplicationChanged() { getMeasureApplicationChanged.emit(this, getMeasureApplicationList); } void _onDiagnosisConclusionChanged() { diagnosisConclusionChanged.emit(this, diagnosisConclusion); } void _onMeasureLanguageChanged() { measureLanguageChanged.emit(this, measureLanguage); } void _onMeasureApplicationVersion() { measureApplicationVersionChanged.emit(this, measureApplicationVersion); } void _onMeasureImageDataChanged() { measureImageDataChanged.emit(this, measureImageData); } void _onMeasureSystemSettingChanged() { measureSystemSettingChanged.emit(this, measureSystemSetting); } void _onApplicationModesChanged() { applicationModesChanged.emit(this, applicationModes); } void _onCurItemMetaListChanged() { curItemMetaListChanged.emit(this, curItemMetaList); } void _onGetCommentsListChanged() { annotationListChanged.emit(this, annotationList); } }