123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- // ignore_for_file: constant_identifier_names
- import 'dart:convert';
- import 'package:fis_common/logger/logger.dart';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:fis_measure/process/workspace/measure_handler.dart';
- import 'package:fis_measure/process/workspace/rpc_bridge.dart';
- import 'package:fis_i18n/i18n.dart';
- import 'package:flutter/foundation.dart';
- class MeasureDataHelper {
- // static VidImageSource source = VidImageSource.Remedical;
- static get source => RPCBridge.ins.source;
- // 获取图像列表
- static Future<List<RemedicalItemList>> getRemedicalList(
- String patientCode, String recordCode) async {
- try {
- // 初始化为空列表
- List<RemedicalItemList> remedicalItems = [];
- // 当数据来源是 Consultation 时
- if (source == VidImageSource.Consultation) {
- // 获取咨询图片
- var images = await getConsultationImages(recordCode);
- // 遍历图片列表,将非空的 imageInfos 添加到 remedicalItems 中
- images.forEach((imageInfo) {
- var imageInfos = imageInfo.ultrasoundImageList ?? [];
- if (imageInfos.isNotEmpty) {
- remedicalItems.add(RemedicalItemList(
- remedicalList: imageInfos,
- ));
- }
- });
- }
- // 当数据来源是 Laboratory 时
- else if (source == VidImageSource.Laboratory) {
- // 获取患者的文件列表
- var getRecordsPage =
- await RPCBridge.ins.rpc.lab.getFileListByFolderAsync(
- GetFileListByFolderRequest(
- token: RPCBridge.ins.userToken,
- pageIndex: 1,
- pageSize: 100,
- folderCode: patientCode,
- ),
- );
- remedicalItems.add(RemedicalItemList(
- remedicalList: getRecordsPage.pageData,
- ));
- }
- // 当数据来源为ai结果编辑的
- else if (source == VidImageSource.AiResultModifier) {
- var result =
- await RPCBridge.ins.rpc.remedical.getPatientAISelectedInfosAsync(
- GetPatientAISelectedInfosRequest(
- token: RPCBridge.ins.userToken,
- recordCode: recordCode,
- ),
- );
- List<RemedicalInfoDTO> remedicalInfoList = [];
- result.forEach((element) {
- remedicalInfoList.add(RemedicalInfoDTO(
- recordCode: element.recordCode,
- remedicalCode: element.remedicalAISelectedInfoCode,
- terminalImages: TerminalImageDTO(
- previewUrl: element.previewFileToken,
- imageUrl: element.cdnFileToken,
- coverImageUrl: element.previewFileToken,
- originImageUrl: element.orginalFileToken,
- recommendedDownloadMode: element.recommendedDownloadMode,
- ),
- diagnosisConclusion: element.diagnosisConclusion,
- diagnosisOrgans: element.diagnosisOrgans,
- ));
- });
- remedicalItems.add(RemedicalItemList(
- remedicalList: remedicalInfoList,
- ));
- } else if (source == VidImageSource.RemoteUS) {
- // 获取患者的病历记录
- PageResult<RemedicalListResult> result =
- PageResult<RemedicalListResult>();
- result.pageData = [];
- try {
- result = await RPCBridge.ins.rpc.remoteUltrasound
- .vitalGetRemedicalListPagesAsync(
- GetRecordsPageRequest(
- token: RPCBridge.ins.userToken,
- pageIndex: 1,
- pageSize: 100,
- patientCode: patientCode,
- ),
- );
- } catch (e) {
- logger.e('MeasureDataHelper vitalGetRemedicalListPagesAsync ex:$e');
- }
- // 遍历病历记录列表,当某条记录的 recordCode 与传入的 recordCode 相同时,将其 remedicalItemList 添加到 remedicalItems 中
- if (result.pageData!.isNotEmpty) {
- var recordInfo = result.pageData!.firstWhere(
- (element) => element.recordCode == recordCode,
- orElse: () => RemedicalListResult());
- remedicalItems = recordInfo.remedicalItemList ?? [];
- }
- }
- // 当数据来源为其他情况时
- else {
- // 获取患者的病历记录
- PageResult<RemedicalListResult> result =
- PageResult<RemedicalListResult>();
- result.pageData = [];
- try {
- result = await RPCBridge.ins.rpc.remedical.getRemedicalListPagesAsync(
- GetRecordsPageRequest(
- token: RPCBridge.ins.userToken,
- pageIndex: 1,
- pageSize: 100,
- patientCode: patientCode,
- ),
- );
- } catch (e) {
- logger.e('MeasureDataHelper getRemedicalListPagesAsync ex:$e');
- }
- // 遍历病历记录列表,当某条记录的 recordCode 与传入的 recordCode 相同时,将其 remedicalItemList 添加到 remedicalItems 中
- if (result.pageData!.isNotEmpty) {
- var recordInfo = result.pageData!.firstWhere(
- (element) => element.recordCode == recordCode,
- orElse: () => RemedicalListResult());
- remedicalItems = recordInfo.remedicalItemList ?? [];
- }
- }
- // 返回最终的 remedicalItems 列表
- return remedicalItems;
- } catch (e) {
- logger.e('MeasureHomeController getRemedicalList ex:', e);
- // 出现异常时返回空列表
- return [];
- }
- }
- ///获取会诊图像
- static Future<List<ConsultationImagesDTO>> getConsultationImages(
- String consultationCode) async {
- try {
- if (consultationCode.isEmpty) {
- return [];
- }
- var realTimeConsultationImageList =
- await RPCBridge.ins.rpc.liveConsultation.getConsultationFilesAsync(
- FindConsultationDetailRequest(
- consultationCode: consultationCode, token: RPCBridge.ins.userToken),
- );
- return realTimeConsultationImageList;
- } catch (e) {
- logger.e('RealTimeConsultationImageController getConsultationImages ex:' +
- e.toString());
- }
- return [];
- }
- ///获取图像详情
- static Future<RemedicalInfoDTO?> getImageInfo(
- String remedicalCode,
- String? remedicalAISelectedInfoCode,
- ) async {
- try {
- RemedicalInfoDTO result;
- print(source);
- if (source == VidImageSource.AiResultModifier) {
- final remedicalAISelectedInfo =
- await RPCBridge.ins.rpc.remedical.getRemedicalAISelectedInfoAsync(
- GetRemedicalAISelectedInfoRequest(
- token: RPCBridge.ins.userToken,
- code: remedicalAISelectedInfoCode,
- ),
- );
- result = RemedicalInfoDTO(
- diagnosisResult: jsonEncode(
- [
- {
- 'DiagResultsForEachOrgan':
- jsonDecode(remedicalAISelectedInfo.diagnosisData ?? '')[
- 'DiagResultsForEachOrgan'],
- 'Index': jsonDecode(
- remedicalAISelectedInfo.diagnosisData ?? '')['Index'],
- 'PriorityScore':
- jsonDecode(remedicalAISelectedInfo.diagnosisData ?? '')[
- 'PriorityScore'],
- }
- ],
- ),
- terminalImages: TerminalImageDTO(
- previewUrl: remedicalAISelectedInfo.previewFileToken,
- imageUrl: remedicalAISelectedInfo.cdnFileToken,
- coverImageUrl: remedicalAISelectedInfo.previewFileToken,
- originImageUrl: remedicalAISelectedInfo.orginalFileToken,
- recommendedDownloadMode:
- remedicalAISelectedInfo.recommendedDownloadMode,
- ),
- diagnosisConclusion: DiagnosisConclusionEnum.Benign,
- );
- } else if (source == VidImageSource.RemoteUS) {
- result = await RPCBridge.ins.rpc.remoteUltrasound
- .vitalFindRemedicalByCodeAsync(
- FindRemedicalByCodeRequest(
- token: RPCBridge.ins.userToken,
- remedicalCode: remedicalCode,
- existDiagnosisResult: true,
- ),
- );
- } else {
- result = await RPCBridge.ins.rpc.remedical.findRemedicalByCodeAsync(
- FindRemedicalByCodeRequest(
- token: RPCBridge.ins.userToken,
- remedicalCode: remedicalCode,
- existDiagnosisResult: true,
- ),
- );
- }
- return result;
- } catch (e) {
- logger.e('MeasureHomeController getRemedicalInfo ex:', e);
- return null;
- }
- }
- ///获取测量项
- static Future<MeasureApplicationDTO?> getMeasureApplication(
- MeasureModeSelection args) async {
- try {
- return await RPCBridge.ins.rpc.remoteUltrasound
- .vitalGetMeasureApplicationAsync(
- GetMeasureApplicationRequest(
- token: RPCBridge.ins.userToken,
- applicationName: args.applicationName,
- categoryName: args.categoryName,
- measureModes: args.measureModes,
- ),
- );
- } catch (e) {
- print(e);
- logger.e('MeasureHomeController getMeasureApplication ex: ', e);
- return null;
- }
- }
- /// 保存测量的方法
- static Future<bool> saveUserDefinedMeasureApplicationAsync(
- MeasureModeSubmit args) async {
- var result = false;
- try {
- result = await RPCBridge.ins.rpc.remedical
- .saveUserDefinedMeasureApplicationAsync(
- SaveUserDefinedMeasureApplicationRequest(
- token: RPCBridge.ins.userToken,
- version: args.version,
- applicationName: args.applicationName,
- categoryName: args.categoryName,
- workingMode: args.workingMode,
- ),
- );
- } catch (e) {
- logger.e(
- 'MeasureHomeController saveUserDefinedMeasureApplicationAsync ex: ',
- e);
- }
- return result;
- }
- /// 保存样式
- static Future<void> saveMeasureSystemSettingAsync(
- MeasureSystemSettingDTO measureSystemSetting,
- ) async {
- await RPCBridge.ins.rpc.remedical.saveMeasureSystemSettingAsync(
- SaveMeasureSystemSettingRequest(
- systemSetting: measureSystemSetting,
- token: RPCBridge.ins.userToken,
- ),
- );
- }
- /// 获取样式
- static Future<MeasureSystemSettingDTO> getMeasureSystemSettingAsync() async {
- final result = await RPCBridge.ins.rpc.remoteUltrasound
- .vitalGetMeasureSystemSettingAsync(
- GetMeasureSystemSettingRequest(
- token: RPCBridge.ins.userToken,
- ),
- );
- return result;
- }
- /// 分享vid
- static Future<String> shareImage(
- String examFile,
- ) async {
- try {
- final result = await RPCBridge.ins.rpc.remedical.queryShareExamPageAsync(
- QueryShareExamPageRequest(
- examFileToken: examFile,
- token: RPCBridge.ins.userToken,
- languageCode: i18nBook.locale.toCodeString('-'),
- ),
- );
- return result.shareExamPageUrl ?? '';
- } catch (e) {
- logger.e("queryShareExamPageAsync exception:", e);
- }
- return '';
- }
- /// 获取注释
- static Future<CommentItemResultDTO?> getCommentsByApplicationAsync(
- String applicationName, String categoryName) async {
- try {
- if (RPCBridge.ins.source == VidImageSource.RemoteUS) {
- final result = await RPCBridge.ins.rpc.remoteUltrasound
- .vitalGetCommentsByApplicationAsync(
- GetCommentsByApplicationRequest(
- token: RPCBridge.ins.userToken,
- applicationName: applicationName,
- categoryName: categoryName,
- languageCode: i18nBook.locale.toCodeString('-'),
- ),
- );
- return result;
- } else {
- final result =
- await RPCBridge.ins.rpc.remedical.getCommentsByApplicationAsync(
- GetCommentsByApplicationRequest(
- token: RPCBridge.ins.userToken,
- applicationName: applicationName,
- categoryName: categoryName,
- languageCode: i18nBook.locale.toCodeString('-'),
- ),
- );
- return result;
- }
- } catch (e) {
- logger.e('MeasureHomeController getCommentsByApplicationAsync ex: ', e);
- return null;
- }
- }
- /// 保存注释
- static Future<bool?> saveUserDefinedCommentsAsync(
- String applicationName,
- String categoryName,
- List<CommentItemDTO>? addCommentItems,
- List<CommentItemDTO>? deleteCommentItems,
- List<UpdateCommentItemDTO>? updateCommentItems,
- ) async {
- try {
- final result =
- await RPCBridge.ins.rpc.remedical.saveUserDefinedCommentsAsync(
- SaveUserDefinedCommentsRequest(
- token: RPCBridge.ins.userToken,
- applicationName: applicationName,
- categoryName: categoryName,
- languageCode: i18nBook.locale.toCodeString('-'),
- // Store.app.systemLocale.languageCode.toLowerCase(),
- addCommentItems: addCommentItems,
- deletedCommentItems: deleteCommentItems,
- updateCommentItems: updateCommentItems),
- );
- return result;
- } catch (e) {
- logger.e('MeasureHomeController getCommentsByApplicationAsync ex: ', e);
- return null;
- }
- }
- /// 重置注释
- static Future<bool?> resetUserCommentsAsync(
- String applicationName,
- String categoryName,
- ) async {
- try {
- final result = await RPCBridge.ins.rpc.remedical.resetUserCommentsAsync(
- ResetUserCommentsRequest(
- token: RPCBridge.ins.userToken,
- applicationName: applicationName,
- categoryName: categoryName,
- ),
- );
- return result;
- } catch (e) {
- logger.e('MeasureHomeController resetUserCommentsAsync ex: ', e);
- return null;
- }
- }
- /// 获取预置的注释项
- static Future<PresetCommentItemResultDTO?> getPresetCommentsAsync() async {
- try {
- final result = await RPCBridge.ins.rpc.remedical.getPresetCommentsAsync(
- GetPresetCommentsRequest(
- token: RPCBridge.ins.userToken,
- languageCode: i18nBook.locale.toCodeString('-'),
- // Store.app.systemLocale.languageCode.toLowerCase(),
- ),
- );
- return result;
- } catch (e) {
- logger.e('MeasureHomeController getPresetCommentsAsync ex: ', e);
- return null;
- }
- }
- static Future<RemedicalInfoDTO?> getImageInfoByIndex(
- String recordCode, String token, String patientCode, int index) async {
- var imageList = await getRemedicalList(patientCode, recordCode);
- int imageIndex = 0;
- for (RemedicalItemList r in imageList) {
- for (RemedicalInfoDTO i in r.remedicalList ?? []) {
- imageIndex++;
- if (imageIndex == index) {
- return i;
- }
- }
- }
- return null;
- }
- }
|