Quellcode durchsuchen

同步Server最新接口

loki.wu vor 2 Jahren
Ursprung
Commit
84e11ea84d

+ 28 - 0
lib/services/aIDiagnosis.m.dart

@@ -308,23 +308,39 @@ class MeasureImageFileDTO {
 	}
 }
 
+enum RecommendedDownloadModeEnum {
+	placeHolder_0,
+	Origin,
+	CDN,
+}
+
 class CarotidResultDTO {
 	CarotidScanTypeEnum carotidScanType;
 	CarotidScanDirectionEnum carotidScanDirection;
 	String? surfaceFile;
+	String? cDNSurfaceFile;
+	int surfaceFileSize;
 	String? mdlFile;
+	String? cDNMdlFile;
+	int mdlFileSize;
 	List<MeasureImageFileDTO >? measureImageFiles;
 	String? measureResult;
 	List<String >? surfaceImageList;
+	RecommendedDownloadModeEnum recommendedDownloadMode;
 
 	CarotidResultDTO({
 		this.carotidScanType = CarotidScanTypeEnum.CarotidLeft,
 		this.carotidScanDirection = CarotidScanDirectionEnum.TopToBottom,
 		this.surfaceFile,
+		this.cDNSurfaceFile,
+		this.surfaceFileSize = 0,
 		this.mdlFile,
+		this.cDNMdlFile,
+		this.mdlFileSize = 0,
 		this.measureImageFiles,
 		this.measureResult,
 		this.surfaceImageList,
+		this.recommendedDownloadMode = RecommendedDownloadModeEnum.Origin,
 	});
 
 	factory CarotidResultDTO.fromJson(Map<String, dynamic> map) {
@@ -332,10 +348,15 @@ class CarotidResultDTO {
 			carotidScanType: CarotidScanTypeEnum.values.firstWhere((e) => e.index == map['CarotidScanType']),
 			carotidScanDirection: CarotidScanDirectionEnum.values.firstWhere((e) => e.index == map['CarotidScanDirection']),
 			surfaceFile: map['SurfaceFile'],
+			cDNSurfaceFile: map['CDNSurfaceFile'],
+			surfaceFileSize: map['SurfaceFileSize'],
 			mdlFile: map['MdlFile'],
+			cDNMdlFile: map['CDNMdlFile'],
+			mdlFileSize: map['MdlFileSize'],
 			measureImageFiles: map['MeasureImageFiles'] != null ? (map['MeasureImageFiles'] as List).map((e)=>MeasureImageFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			measureResult: map['MeasureResult'],
 			surfaceImageList: map['SurfaceImageList'] != null ? map['SurfaceImageList'].cast<String>().toList() : null,
+			recommendedDownloadMode: RecommendedDownloadModeEnum.values.firstWhere((e) => e.index == map['RecommendedDownloadMode']),
 		);
 	}
 
@@ -345,14 +366,21 @@ class CarotidResultDTO {
 		map['CarotidScanDirection'] = carotidScanDirection.index;
 		if(surfaceFile != null)
 			map['SurfaceFile'] = surfaceFile;
+		if(cDNSurfaceFile != null)
+			map['CDNSurfaceFile'] = cDNSurfaceFile;
+		map['SurfaceFileSize'] = surfaceFileSize;
 		if(mdlFile != null)
 			map['MdlFile'] = mdlFile;
+		if(cDNMdlFile != null)
+			map['CDNMdlFile'] = cDNMdlFile;
+		map['MdlFileSize'] = mdlFileSize;
 		if(measureImageFiles != null)
 			map['MeasureImageFiles'] = measureImageFiles;
 		if(measureResult != null)
 			map['MeasureResult'] = measureResult;
 		if(surfaceImageList != null)
 			map['SurfaceImageList'] = surfaceImageList;
+		map['RecommendedDownloadMode'] = recommendedDownloadMode.index;
 		return map;
 	}
 }

+ 4 - 3
lib/services/authentication.m.dart

@@ -2198,9 +2198,9 @@ enum CustomerRpcCode {
 	DeviceModelEmpty,
 	DeviceTypeError,
 	DeviceModelError,
-	placeHolder_2021,
-	placeHolder_2022,
-	placeHolder_2023,
+	VideoDeviceInfosEmpty,
+	VideoDeviceIdEmpty,
+	VideoDeviceIdRepeatError,
 	placeHolder_2024,
 	placeHolder_2025,
 	placeHolder_2026,
@@ -6242,6 +6242,7 @@ enum CustomerRpcCode {
 	AccountIsLocked,
 	UserPasswordExpiredError,
 	UserPasswordRepeatError,
+	SignatureUrlNotValid,
 }
 
 class ValidateTokenResult {

+ 88 - 0
lib/services/connect.m.dart

@@ -139,6 +139,58 @@ class BaseDTO {
 	}
 }
 
+enum VideoDeviceSourceTypeEnum {
+	Desktop,
+	Camera,
+}
+
+class VideoDeviceDTO {
+	String? videoDeviceId;
+	VideoDeviceSourceTypeEnum videoDeviceSourceType;
+	int width;
+	int height;
+	int outputWidth;
+	int outputHeight;
+
+	VideoDeviceDTO({
+		this.videoDeviceId,
+		this.videoDeviceSourceType = VideoDeviceSourceTypeEnum.Desktop,
+		this.width = 0,
+		this.height = 0,
+		this.outputWidth = 0,
+		this.outputHeight = 0,
+	});
+
+	factory VideoDeviceDTO.fromJson(Map<String, dynamic> map) {
+		return VideoDeviceDTO( 
+			videoDeviceId: map['VideoDeviceId'],
+			videoDeviceSourceType: VideoDeviceSourceTypeEnum.values.firstWhere((e) => e.index == map['VideoDeviceSourceType']),
+			width: map['Width'],
+			height: map['Height'],
+			outputWidth: map['OutputWidth'],
+			outputHeight: map['OutputHeight'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(videoDeviceId != null)
+			map['VideoDeviceId'] = videoDeviceId;
+		map['VideoDeviceSourceType'] = videoDeviceSourceType.index;
+		map['Width'] = width;
+		map['Height'] = height;
+		map['OutputWidth'] = outputWidth;
+		map['OutputHeight'] = outputHeight;
+		return map;
+	}
+}
+
+enum DownloadModeSettingEnum {
+	Auto,
+	Origin,
+	CDN,
+}
+
 class DeviceInfoDTO extends BaseDTO{
 	String? deviceCode;
 	String? serialNumber;
@@ -161,6 +213,11 @@ class DeviceInfoDTO extends BaseDTO{
 	String? systemLanguage;
 	List<String >? diagnosisModules;
 	List<String >? reportPosterCodes;
+	bool mergedChannel;
+	int mergedVideoOutputWidth;
+	int mergedVideoOutputHeight;
+	List<VideoDeviceDTO >? videoDeviceInfos;
+	DownloadModeSettingEnum downloadModeSetting;
 
 	DeviceInfoDTO({
 		this.deviceCode,
@@ -184,6 +241,11 @@ class DeviceInfoDTO extends BaseDTO{
 		this.systemLanguage,
 		this.diagnosisModules,
 		this.reportPosterCodes,
+		this.mergedChannel = false,
+		this.mergedVideoOutputWidth = 0,
+		this.mergedVideoOutputHeight = 0,
+		this.videoDeviceInfos,
+		this.downloadModeSetting = DownloadModeSettingEnum.Auto,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -214,6 +276,11 @@ class DeviceInfoDTO extends BaseDTO{
 			systemLanguage: map['SystemLanguage'],
 			diagnosisModules: map['DiagnosisModules'] != null ? map['DiagnosisModules'].cast<String>().toList() : null,
 			reportPosterCodes: map['ReportPosterCodes'] != null ? map['ReportPosterCodes'].cast<String>().toList() : null,
+			mergedChannel: map['MergedChannel'],
+			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
+			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
+			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -261,6 +328,12 @@ class DeviceInfoDTO extends BaseDTO{
 			map['DiagnosisModules'] = diagnosisModules;
 		if(reportPosterCodes != null)
 			map['ReportPosterCodes'] = reportPosterCodes;
+		map['MergedChannel'] = mergedChannel;
+		map['MergedVideoOutputWidth'] = mergedVideoOutputWidth;
+		map['MergedVideoOutputHeight'] = mergedVideoOutputHeight;
+		if(videoDeviceInfos != null)
+			map['VideoDeviceInfos'] = videoDeviceInfos;
+		map['DownloadModeSetting'] = downloadModeSetting.index;
 		return map;
 	}
 }
@@ -293,6 +366,11 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 		String? systemLanguage,
 		List<String >? diagnosisModules,
 		List<String >? reportPosterCodes,
+		bool mergedChannel = false,
+		int mergedVideoOutputWidth = 0,
+		int mergedVideoOutputHeight = 0,
+		List<VideoDeviceDTO >? videoDeviceInfos,
+		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -317,6 +395,11 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 			systemLanguage: systemLanguage,
 			diagnosisModules: diagnosisModules,
 			reportPosterCodes: reportPosterCodes,
+			mergedChannel: mergedChannel,
+			mergedVideoOutputWidth: mergedVideoOutputWidth,
+			mergedVideoOutputHeight: mergedVideoOutputHeight,
+			videoDeviceInfos: videoDeviceInfos,
+			downloadModeSetting: downloadModeSetting,
 			createTime: createTime,
 			updateTime: updateTime,
 		);
@@ -346,6 +429,11 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 			systemLanguage: map['SystemLanguage'],
 			diagnosisModules: map['DiagnosisModules'] != null ? map['DiagnosisModules'].cast<String>().toList() : null,
 			reportPosterCodes: map['ReportPosterCodes'] != null ? map['ReportPosterCodes'].cast<String>().toList() : null,
+			mergedChannel: map['MergedChannel'],
+			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
+			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
+			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);

+ 7 - 0
lib/services/device.dart

@@ -29,6 +29,7 @@ class DeviceService extends JsonRpcClientBase {
 		FJsonConvert.setDecoder((map) => PageCollection<DeviceExtendInfoDTO>.fromJson(map));
 		FJsonConvert.setDecoder((map) => SelectItemDTO.fromJson(map));
 		FJsonConvert.setDecoder((map) => DiagnosisModuleDTO.fromJson(map));
+		FJsonConvert.setDecoder((map) => ReportVideoDeviceInfoResult.fromJson(map));
 	}
 
 	Future<bool> heartRateAsync(TokenRequest request) async {
@@ -148,5 +149,11 @@ class DeviceService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<ReportVideoDeviceInfoResult> reportVideoDeviceInfoAsync(ReportVideoDeviceInfoRequest request) async {
+		var rpcRst = await call("ReportVideoDeviceInfoAsync", request);
+		var result = ReportVideoDeviceInfoResult.fromJson(rpcRst as Map<String, dynamic>);
+		return result;
+	}
+
 }
 

+ 93 - 0
lib/services/device.m.dart

@@ -154,6 +154,11 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 		String? systemLanguage,
 		List<String >? diagnosisModules,
 		List<String >? reportPosterCodes,
+		bool mergedChannel = false,
+		int mergedVideoOutputWidth = 0,
+		int mergedVideoOutputHeight = 0,
+		List<VideoDeviceDTO >? videoDeviceInfos,
+		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -178,6 +183,11 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 			systemLanguage: systemLanguage,
 			diagnosisModules: diagnosisModules,
 			reportPosterCodes: reportPosterCodes,
+			mergedChannel: mergedChannel,
+			mergedVideoOutputWidth: mergedVideoOutputWidth,
+			mergedVideoOutputHeight: mergedVideoOutputHeight,
+			videoDeviceInfos: videoDeviceInfos,
+			downloadModeSetting: downloadModeSetting,
 			createTime: createTime,
 			updateTime: updateTime,
 		);
@@ -212,6 +222,11 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 			systemLanguage: map['SystemLanguage'],
 			diagnosisModules: map['DiagnosisModules'] != null ? map['DiagnosisModules'].cast<String>().toList() : null,
 			reportPosterCodes: map['ReportPosterCodes'] != null ? map['ReportPosterCodes'].cast<String>().toList() : null,
+			mergedChannel: map['MergedChannel'],
+			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
+			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
+			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -913,4 +928,82 @@ class ModifyDeviceDiagnosisModuleStateRequest extends TokenRequest{
 	}
 }
 
+class ReportVideoDeviceInfoResult {
+	bool success;
+
+	ReportVideoDeviceInfoResult({
+		this.success = false,
+	});
+
+	factory ReportVideoDeviceInfoResult.fromJson(Map<String, dynamic> map) {
+		return ReportVideoDeviceInfoResult( 
+			success: map['Success'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		map['Success'] = success;
+		return map;
+	}
+}
+
+class VideoDeviceInfo {
+	String? videoDeviceId;
+	VideoDeviceSourceTypeEnum videoDeviceSourceType;
+	int width;
+	int height;
+
+	VideoDeviceInfo({
+		this.videoDeviceId,
+		this.videoDeviceSourceType = VideoDeviceSourceTypeEnum.Desktop,
+		this.width = 0,
+		this.height = 0,
+	});
+
+	factory VideoDeviceInfo.fromJson(Map<String, dynamic> map) {
+		return VideoDeviceInfo( 
+			videoDeviceId: map['VideoDeviceId'],
+			videoDeviceSourceType: VideoDeviceSourceTypeEnum.values.firstWhere((e) => e.index == map['VideoDeviceSourceType']),
+			width: map['Width'],
+			height: map['Height'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(videoDeviceId != null)
+			map['VideoDeviceId'] = videoDeviceId;
+		map['VideoDeviceSourceType'] = videoDeviceSourceType.index;
+		map['Width'] = width;
+		map['Height'] = height;
+		return map;
+	}
+}
+
+class ReportVideoDeviceInfoRequest extends TokenRequest{
+	List<VideoDeviceInfo >? videoDeviceInfos;
+
+	ReportVideoDeviceInfoRequest({
+		this.videoDeviceInfos,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory ReportVideoDeviceInfoRequest.fromJson(Map<String, dynamic> map) {
+		return ReportVideoDeviceInfoRequest( 
+			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(videoDeviceInfos != null)
+			map['VideoDeviceInfos'] = videoDeviceInfos;
+		return map;
+	}
+}
+
 

+ 5 - 0
lib/services/liveConsultation.dart

@@ -269,5 +269,10 @@ class LiveConsultationService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> syncServerMessageAsync(SyncReceiveServiceDataRequest request) async {
+		var rpcRst = await call("SyncServerMessageAsync", request);
+		return rpcRst;
+	}
+
 }
 

+ 196 - 10
lib/services/liveConsultation.m.dart

@@ -1116,6 +1116,39 @@ class LiveData {
 	}
 }
 
+class VideoDeviceOutputInfo {
+	String? videoDeviceId;
+	VideoDeviceSourceTypeEnum videoDeviceSourceType;
+	int outputWidth;
+	int outputHeight;
+
+	VideoDeviceOutputInfo({
+		this.videoDeviceId,
+		this.videoDeviceSourceType = VideoDeviceSourceTypeEnum.Desktop,
+		this.outputWidth = 0,
+		this.outputHeight = 0,
+	});
+
+	factory VideoDeviceOutputInfo.fromJson(Map<String, dynamic> map) {
+		return VideoDeviceOutputInfo( 
+			videoDeviceId: map['VideoDeviceId'],
+			videoDeviceSourceType: VideoDeviceSourceTypeEnum.values.firstWhere((e) => e.index == map['VideoDeviceSourceType']),
+			outputWidth: map['OutputWidth'],
+			outputHeight: map['OutputHeight'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(videoDeviceId != null)
+			map['VideoDeviceId'] = videoDeviceId;
+		map['VideoDeviceSourceType'] = videoDeviceSourceType.index;
+		map['OutputWidth'] = outputWidth;
+		map['OutputHeight'] = outputHeight;
+		return map;
+	}
+}
+
 class LiveConsultationMember {
 	String? id;
 	String? name;
@@ -1130,6 +1163,10 @@ class LiveConsultationMember {
 	String? loginServerUrl;
 	LoginSource loginSource;
 	LiveData? liveData;
+	bool mergedChannel;
+	int mergedVideoOutputWidth;
+	int mergedVideoOutputHeight;
+	List<VideoDeviceOutputInfo >? videoDeviceInfos;
 
 	LiveConsultationMember({
 		this.id,
@@ -1145,6 +1182,10 @@ class LiveConsultationMember {
 		this.loginServerUrl,
 		this.loginSource = LoginSource.PC,
 		this.liveData,
+		this.mergedChannel = false,
+		this.mergedVideoOutputWidth = 0,
+		this.mergedVideoOutputHeight = 0,
+		this.videoDeviceInfos,
 	});
 
 	factory LiveConsultationMember.fromJson(Map<String, dynamic> map) {
@@ -1162,6 +1203,10 @@ class LiveConsultationMember {
 			loginServerUrl: map['LoginServerUrl'],
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			liveData: map['LiveData'] != null ? LiveData.fromJson(map['LiveData']) : null,
+			mergedChannel: map['MergedChannel'],
+			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
+			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
+			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceOutputInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
 		);
 	}
 
@@ -1185,6 +1230,11 @@ class LiveConsultationMember {
 		map['LoginSource'] = loginSource.index;
 		if(liveData != null)
 			map['LiveData'] = liveData;
+		map['MergedChannel'] = mergedChannel;
+		map['MergedVideoOutputWidth'] = mergedVideoOutputWidth;
+		map['MergedVideoOutputHeight'] = mergedVideoOutputHeight;
+		if(videoDeviceInfos != null)
+			map['VideoDeviceInfos'] = videoDeviceInfos;
 		return map;
 	}
 }
@@ -1195,8 +1245,7 @@ class InitiateLiveConsultationResult {
 	int roomNo;
 	int appId;
 	String? userSign;
-	List<LiveConsultationMember >? userLiveDatas;
-	List<LiveConsultationMember >? deviceLiveDatas;
+	List<LiveConsultationMember >? memberLiveDatas;
 
 	InitiateLiveConsultationResult({
 		this.consultationCode,
@@ -1204,8 +1253,7 @@ class InitiateLiveConsultationResult {
 		this.roomNo = 0,
 		this.appId = 0,
 		this.userSign,
-		this.userLiveDatas,
-		this.deviceLiveDatas,
+		this.memberLiveDatas,
 	});
 
 	factory InitiateLiveConsultationResult.fromJson(Map<String, dynamic> map) {
@@ -1215,8 +1263,7 @@ class InitiateLiveConsultationResult {
 			roomNo: map['RoomNo'],
 			appId: map['AppId'],
 			userSign: map['UserSign'],
-			userLiveDatas: map['UserLiveDatas'] != null ? (map['UserLiveDatas'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
-			deviceLiveDatas: map['DeviceLiveDatas'] != null ? (map['DeviceLiveDatas'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
+			memberLiveDatas: map['MemberLiveDatas'] != null ? (map['MemberLiveDatas'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
 		);
 	}
 
@@ -1230,10 +1277,8 @@ class InitiateLiveConsultationResult {
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;
-		if(userLiveDatas != null)
-			map['UserLiveDatas'] = userLiveDatas;
-		if(deviceLiveDatas != null)
-			map['DeviceLiveDatas'] = deviceLiveDatas;
+		if(memberLiveDatas != null)
+			map['MemberLiveDatas'] = memberLiveDatas;
 		return map;
 	}
 }
@@ -1422,16 +1467,28 @@ class CancelLiveConsultationRequest extends TokenRequest{
 class AcceptLiveConsultationResult {
 	String? consultationCode;
 	String? userCode;
+	int roomNo;
+	int appId;
+	String? userSign;
+	List<LiveConsultationMember >? memberLiveDatas;
 
 	AcceptLiveConsultationResult({
 		this.consultationCode,
 		this.userCode,
+		this.roomNo = 0,
+		this.appId = 0,
+		this.userSign,
+		this.memberLiveDatas,
 	});
 
 	factory AcceptLiveConsultationResult.fromJson(Map<String, dynamic> map) {
 		return AcceptLiveConsultationResult( 
 			consultationCode: map['ConsultationCode'],
 			userCode: map['UserCode'],
+			roomNo: map['RoomNo'],
+			appId: map['AppId'],
+			userSign: map['UserSign'],
+			memberLiveDatas: map['MemberLiveDatas'] != null ? (map['MemberLiveDatas'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
 		);
 	}
 
@@ -1441,6 +1498,12 @@ class AcceptLiveConsultationResult {
 			map['ConsultationCode'] = consultationCode;
 		if(userCode != null)
 			map['UserCode'] = userCode;
+		map['RoomNo'] = roomNo;
+		map['AppId'] = appId;
+		if(userSign != null)
+			map['UserSign'] = userSign;
+		if(memberLiveDatas != null)
+			map['MemberLiveDatas'] = memberLiveDatas;
 		return map;
 	}
 }
@@ -2301,4 +2364,127 @@ class AcceptInvitationRequest extends TokenRequest{
 	}
 }
 
+enum SyncTypeEnum {
+	InitiateLiveConsultation,
+	AcceptLiveConsultation,
+	RejectLiveConsultation,
+}
+
+enum MongoDBActionTypeEnum {
+	InsertOne,
+	InsertOneAsync,
+	InsertMany,
+	InsertManyAsync,
+	DeleteOne,
+	DeleteOneAsync,
+	DeleteMany,
+	DeleteManyAsync,
+	FindOneAndDelete,
+	FindOneAndDeleteAsync,
+	ReplaceOne,
+	ReplaceOneAsync,
+	FindOneAndReplace,
+	FindOneAndReplaceAsync,
+	UpdateOne,
+	UpdateOneAsync,
+	UpdateMany,
+	UpdateManyAsync,
+	FindOneAndUpdate,
+	FindOneAndUpdateAsync,
+}
+
+class OperationLogDTO {
+	int id;
+	String? collectionName;
+	MongoDBActionTypeEnum actionType;
+	String? bsonContent;
+	String? filterContent;
+	DateTime? createTime;
+	String? code;
+	String? sourceUrl;
+
+	OperationLogDTO({
+		this.id = 0,
+		this.collectionName,
+		this.actionType = MongoDBActionTypeEnum.InsertOne,
+		this.bsonContent,
+		this.filterContent,
+		this.createTime,
+		this.code,
+		this.sourceUrl,
+	});
+
+	factory OperationLogDTO.fromJson(Map<String, dynamic> map) {
+		return OperationLogDTO( 
+			id: map['Id'],
+			collectionName: map['CollectionName'],
+			actionType: MongoDBActionTypeEnum.values.firstWhere((e) => e.index == map['ActionType']),
+			bsonContent: map['BsonContent'],
+			filterContent: map['FilterContent'],
+			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+			code: map['Code'],
+			sourceUrl: map['SourceUrl'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		map['Id'] = id;
+		if(collectionName != null)
+			map['CollectionName'] = collectionName;
+		map['ActionType'] = actionType.index;
+		if(bsonContent != null)
+			map['BsonContent'] = bsonContent;
+		if(filterContent != null)
+			map['FilterContent'] = filterContent;
+		if(createTime != null)
+			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
+		if(code != null)
+			map['Code'] = code;
+		if(sourceUrl != null)
+			map['SourceUrl'] = sourceUrl;
+		return map;
+	}
+}
+
+class SyncReceiveServiceDataRequest {
+	SyncTypeEnum syncType;
+	String? serviceDataJson;
+	List<OperationLogDTO >? oplogs;
+	String? sourceUrl;
+	String? serverID;
+
+	SyncReceiveServiceDataRequest({
+		this.syncType = SyncTypeEnum.InitiateLiveConsultation,
+		this.serviceDataJson,
+		this.oplogs,
+		this.sourceUrl,
+		this.serverID,
+	});
+
+	factory SyncReceiveServiceDataRequest.fromJson(Map<String, dynamic> map) {
+		return SyncReceiveServiceDataRequest( 
+			syncType: SyncTypeEnum.values.firstWhere((e) => e.index == map['SyncType']),
+			serviceDataJson: map['ServiceDataJson'],
+			oplogs: map['Oplogs'] != null ? (map['Oplogs'] as List).map((e)=>OperationLogDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			sourceUrl: map['SourceUrl'],
+			serverID: map['ServerID'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		map['SyncType'] = syncType.index;
+		if(serviceDataJson != null)
+			map['ServiceDataJson'] = serviceDataJson;
+		if(oplogs != null)
+			map['Oplogs'] = oplogs;
+		if(sourceUrl != null)
+			map['SourceUrl'] = sourceUrl;
+		if(serverID != null)
+			map['ServerID'] = serverID;
+		return map;
+	}
+}
+
 

+ 5 - 0
lib/services/organization.m.dart

@@ -720,16 +720,19 @@ class UpdateOrganizationNameRequest extends TokenRequest{
 
 class OrganizationSettingResult {
 	String? settingVersion;
+	String? cMSTemplateCode;
 	String? settingData;
 
 	OrganizationSettingResult({
 		this.settingVersion,
+		this.cMSTemplateCode,
 		this.settingData,
 	});
 
 	factory OrganizationSettingResult.fromJson(Map<String, dynamic> map) {
 		return OrganizationSettingResult( 
 			settingVersion: map['SettingVersion'],
+			cMSTemplateCode: map['CMSTemplateCode'],
 			settingData: map['SettingData'],
 		);
 	}
@@ -738,6 +741,8 @@ class OrganizationSettingResult {
 		final map = Map<String, dynamic>();
 		if(settingVersion != null)
 			map['SettingVersion'] = settingVersion;
+		if(cMSTemplateCode != null)
+			map['CMSTemplateCode'] = cMSTemplateCode;
 		if(settingData != null)
 			map['SettingData'] = settingData;
 		return map;

+ 13 - 0
lib/services/patient.m.dart

@@ -493,11 +493,17 @@ class TerminalImageDTO {
 	String? previewUrl;
 	String? imageUrl;
 	String? coverImageUrl;
+	RecommendedDownloadModeEnum recommendedDownloadMode;
+	String? originImageUrl;
+	int imageSize;
 
 	TerminalImageDTO({
 		this.previewUrl,
 		this.imageUrl,
 		this.coverImageUrl,
+		this.recommendedDownloadMode = RecommendedDownloadModeEnum.Origin,
+		this.originImageUrl,
+		this.imageSize = 0,
 	});
 
 	factory TerminalImageDTO.fromJson(Map<String, dynamic> map) {
@@ -505,6 +511,9 @@ class TerminalImageDTO {
 			previewUrl: map['PreviewUrl'],
 			imageUrl: map['ImageUrl'],
 			coverImageUrl: map['CoverImageUrl'],
+			recommendedDownloadMode: RecommendedDownloadModeEnum.values.firstWhere((e) => e.index == map['RecommendedDownloadMode']),
+			originImageUrl: map['OriginImageUrl'],
+			imageSize: map['ImageSize'],
 		);
 	}
 
@@ -516,6 +525,10 @@ class TerminalImageDTO {
 			map['ImageUrl'] = imageUrl;
 		if(coverImageUrl != null)
 			map['CoverImageUrl'] = coverImageUrl;
+		map['RecommendedDownloadMode'] = recommendedDownloadMode.index;
+		if(originImageUrl != null)
+			map['OriginImageUrl'] = originImageUrl;
+		map['ImageSize'] = imageSize;
 		return map;
 	}
 }

+ 4 - 0
lib/services/remedical.m.dart

@@ -72,6 +72,7 @@ class UploadExamDataRequest extends TokenRequest{
 	String? examCode;
 	String? previewFileToken;
 	String? fileToken;
+	int fileSize;
 	String? coverImageToken;
 	String? applicationCategory;
 	String? application;
@@ -83,6 +84,7 @@ class UploadExamDataRequest extends TokenRequest{
 		this.examCode,
 		this.previewFileToken,
 		this.fileToken,
+		this.fileSize = 0,
 		this.coverImageToken,
 		this.applicationCategory,
 		this.application,
@@ -99,6 +101,7 @@ class UploadExamDataRequest extends TokenRequest{
 			examCode: map['ExamCode'],
 			previewFileToken: map['PreviewFileToken'],
 			fileToken: map['FileToken'],
+			fileSize: map['FileSize'],
 			coverImageToken: map['CoverImageToken'],
 			applicationCategory: map['ApplicationCategory'],
 			application: map['Application'],
@@ -117,6 +120,7 @@ class UploadExamDataRequest extends TokenRequest{
 			map['PreviewFileToken'] = previewFileToken;
 		if(fileToken != null)
 			map['FileToken'] = fileToken;
+		map['FileSize'] = fileSize;
 		if(coverImageToken != null)
 			map['CoverImageToken'] = coverImageToken;
 		if(applicationCategory != null)

+ 5 - 0
lib/services/user.dart

@@ -88,5 +88,10 @@ class UserService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> setCommonSettingsAsync(CommonSettingsRequest request) async {
+		var rpcRst = await call("SetCommonSettingsAsync", request);
+		return rpcRst;
+	}
+
 }
 

+ 49 - 0
lib/services/user.m.dart

@@ -62,6 +62,9 @@ class UserDTO extends UserBaseDTO{
 	bool isBatchExportDiagnoseData;
 	String? bindAssistantUserCode;
 	LoginLockInfoDTO? loginLockInfo;
+	String? signature;
+	String? language;
+	bool enableReportLabel;
 
 	UserDTO({
 		this.phone,
@@ -89,6 +92,9 @@ class UserDTO extends UserBaseDTO{
 		this.isBatchExportDiagnoseData = false,
 		this.bindAssistantUserCode,
 		this.loginLockInfo,
+		this.signature,
+		this.language,
+		this.enableReportLabel = false,
 		String? userCode,
 		String? userName,
 		String? headImageUrl,
@@ -129,6 +135,9 @@ class UserDTO extends UserBaseDTO{
 			isBatchExportDiagnoseData: map['IsBatchExportDiagnoseData'],
 			bindAssistantUserCode: map['BindAssistantUserCode'],
 			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
+			signature: map['Signature'],
+			language: map['Language'],
+			enableReportLabel: map['EnableReportLabel'],
 			userCode: map['UserCode'],
 			userName: map['UserName'],
 			headImageUrl: map['HeadImageUrl'],
@@ -184,6 +193,11 @@ class UserDTO extends UserBaseDTO{
 			map['BindAssistantUserCode'] = bindAssistantUserCode;
 		if(loginLockInfo != null)
 			map['LoginLockInfo'] = loginLockInfo;
+		if(signature != null)
+			map['Signature'] = signature;
+		if(language != null)
+			map['Language'] = language;
+		map['EnableReportLabel'] = enableReportLabel;
 		return map;
 	}
 }
@@ -569,4 +583,39 @@ class GetUserByCodeRequest extends TokenRequest{
 	}
 }
 
+enum CommonSettingsEnum {
+	Signature,
+	Language,
+	EnableReportLabel,
+}
+
+class CommonSettingsRequest extends TokenRequest{
+	CommonSettingsEnum settingType;
+	String? value;
+
+	CommonSettingsRequest({
+		this.settingType = CommonSettingsEnum.Signature,
+		this.value,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory CommonSettingsRequest.fromJson(Map<String, dynamic> map) {
+		return CommonSettingsRequest( 
+			settingType: CommonSettingsEnum.values.firstWhere((e) => e.index == map['SettingType']),
+			value: map['Value'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		map['SettingType'] = settingType.index;
+		if(value != null)
+			map['Value'] = value;
+		return map;
+	}
+}
+