浏览代码

更新接口

gavin.chen 1 年之前
父节点
当前提交
55644d7296

+ 1 - 0
lib/services/authentication.m.dart

@@ -7280,6 +7280,7 @@ enum CustomerRpcCode {
 	IncorrectPrice,
 	StudentAlreadyIn,
 	UserAndDeviceNoSameOrganization,
+	FISVinnoNotAddParentOrg,
 }
 
 class ValidateTokenResult {

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

@@ -155,6 +155,7 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -186,6 +187,7 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -222,6 +224,7 @@ class CacheDeviceDTO extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,

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

@@ -209,6 +209,7 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -240,6 +241,7 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -283,6 +285,7 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
@@ -1307,10 +1310,14 @@ class VideoDeviceInfo {
 
 class ReportVideoDeviceInfoRequest extends TokenRequest{
 	bool liveOpened;
+	bool supportRtc;
+	bool mergedChannel;
 	List<VideoDeviceInfo >? videoDeviceInfos;
 
 	ReportVideoDeviceInfoRequest({
 		this.liveOpened = false,
+		this.supportRtc = false,
+		this.mergedChannel = false,
 		this.videoDeviceInfos,
 		String? token,
 	}) : super(
@@ -1320,6 +1327,8 @@ class ReportVideoDeviceInfoRequest extends TokenRequest{
 	factory ReportVideoDeviceInfoRequest.fromJson(Map<String, dynamic> map) {
 		return ReportVideoDeviceInfoRequest( 
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
+			mergedChannel: map['MergedChannel'],
 			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
 			token: map['Token'],
 		);
@@ -1328,6 +1337,8 @@ class ReportVideoDeviceInfoRequest extends TokenRequest{
 	Map<String, dynamic> toJson() {
 		final map = super.toJson();
 		map['LiveOpened'] = liveOpened;
+		map['SupportRtc'] = supportRtc;
+		map['MergedChannel'] = mergedChannel;
 		if(videoDeviceInfos != null)
 			map['VideoDeviceInfos'] = videoDeviceInfos;
 		return map;
@@ -1553,6 +1564,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 	int mergedVideoOutputHeight;
 	List<VideoDeviceInfoDTO >? videoDeviceInfos;
 	int reportStateIntervalSeconds;
+	bool isOldPlatform;
 
 	JoinDeviceLiveRoomResult({
 		this.roomNo = 0,
@@ -1563,6 +1575,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 		this.mergedVideoOutputHeight = 0,
 		this.videoDeviceInfos,
 		this.reportStateIntervalSeconds = 0,
+		this.isOldPlatform = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -1578,6 +1591,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
 			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			reportStateIntervalSeconds: map['ReportStateIntervalSeconds'],
+			isOldPlatform: map['IsOldPlatform'],
 			token: map['Token'],
 		);
 	}
@@ -1594,6 +1608,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 		if(videoDeviceInfos != null)
 			map['VideoDeviceInfos'] = videoDeviceInfos;
 		map['ReportStateIntervalSeconds'] = reportStateIntervalSeconds;
+		map['IsOldPlatform'] = isOldPlatform;
 		return map;
 	}
 }

+ 15 - 0
lib/services/liveConsultation.m.dart

@@ -4295,6 +4295,7 @@ class UserDTO extends UserBaseDTO{
 	String? rootOrganizationName;
 	List<String >? authorityGroups;
 	List<String >? bindDevices;
+	List<String >? bindDeviceOrganizations;
 	String? lastIP;
 	int logintimes;
 	UserInfoStateEnum userState;
@@ -4328,6 +4329,7 @@ class UserDTO extends UserBaseDTO{
 		this.rootOrganizationName,
 		this.authorityGroups,
 		this.bindDevices,
+		this.bindDeviceOrganizations,
 		this.lastIP,
 		this.logintimes = 0,
 		this.userState = UserInfoStateEnum.Nonactivated,
@@ -4382,6 +4384,7 @@ class UserDTO extends UserBaseDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -4434,6 +4437,8 @@ class UserDTO extends UserBaseDTO{
 			map['AuthorityGroups'] = authorityGroups;
 		if(bindDevices != null)
 			map['BindDevices'] = bindDevices;
+		if(bindDeviceOrganizations != null)
+			map['BindDeviceOrganizations'] = bindDeviceOrganizations;
 		if(lastIP != null)
 			map['LastIP'] = lastIP;
 		map['Logintimes'] = logintimes;
@@ -4494,6 +4499,7 @@ class UserExtendDTO extends UserDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -4535,6 +4541,7 @@ class UserExtendDTO extends UserDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -4581,6 +4588,7 @@ class UserExtendDTO extends UserDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -4760,6 +4768,7 @@ class DeviceInfoDTO extends BaseDTO{
 	List<VideoDeviceDTO >? videoDeviceInfos;
 	DownloadModeSettingEnum downloadModeSetting;
 	bool liveOpened;
+	bool supportRtc;
 	String? displayName;
 
 	DeviceInfoDTO({
@@ -4790,6 +4799,7 @@ class DeviceInfoDTO extends BaseDTO{
 		this.videoDeviceInfos,
 		this.downloadModeSetting = DownloadModeSettingEnum.Auto,
 		this.liveOpened = false,
+		this.supportRtc = false,
 		this.displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -4827,6 +4837,7 @@ class DeviceInfoDTO extends BaseDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
@@ -4882,6 +4893,7 @@ class DeviceInfoDTO extends BaseDTO{
 			map['VideoDeviceInfos'] = videoDeviceInfos;
 		map['DownloadModeSetting'] = downloadModeSetting.index;
 		map['LiveOpened'] = liveOpened;
+		map['SupportRtc'] = supportRtc;
 		if(displayName != null)
 			map['DisplayName'] = displayName;
 		return map;
@@ -4931,6 +4943,7 @@ class EmergencyDeviceInfoDTO extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -4962,6 +4975,7 @@ class EmergencyDeviceInfoDTO extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -4998,6 +5012,7 @@ class EmergencyDeviceInfoDTO extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,

+ 84 - 0
lib/services/notification.m.dart

@@ -160,12 +160,16 @@ class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 	String? userCode;
 	ControlDeviceParameterEnum controlType;
 	LoginSource loginSource;
+	String? deviceCode;
+	String? controlUserName;
 
 	ApplyProbeApplicationSettingNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.userCode,
 		this.controlType = ControlDeviceParameterEnum.Start,
 		this.loginSource = LoginSource.PC,
+		this.deviceCode,
+		this.controlUserName,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -180,6 +184,8 @@ class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 			userCode: map['UserCode'],
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			deviceCode: map['DeviceCode'],
+			controlUserName: map['ControlUserName'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -191,6 +197,10 @@ class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 			map['UserCode'] = userCode;
 		map['ControlType'] = controlType.index;
 		map['LoginSource'] = loginSource.index;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(controlUserName != null)
+			map['ControlUserName'] = controlUserName;
 		return map;
 	}
 }
@@ -199,12 +209,16 @@ class SendCommandToDeviceNotification extends NotificationDTO{
 	String? actionType;
 	String? resultCode;
 	String? sender;
+	String? deviceCode;
+	String? operatorCode;
 
 	SendCommandToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.actionType,
 		this.resultCode,
 		this.sender,
+		this.deviceCode,
+		this.operatorCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -219,6 +233,8 @@ class SendCommandToDeviceNotification extends NotificationDTO{
 			actionType: map['ActionType'],
 			resultCode: map['ResultCode'],
 			sender: map['Sender'],
+			deviceCode: map['DeviceCode'],
+			operatorCode: map['OperatorCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -232,6 +248,10 @@ class SendCommandToDeviceNotification extends NotificationDTO{
 			map['ResultCode'] = resultCode;
 		if(sender != null)
 			map['Sender'] = sender;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(operatorCode != null)
+			map['OperatorCode'] = operatorCode;
 		return map;
 	}
 }
@@ -473,6 +493,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 	ControlDeviceParameterEnum controlType;
 	List<AdditionParameterDTO >? parameters;
 	LoginSource loginSource;
+	String? deviceCode;
 
 	DeviceControlledParametersNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -481,6 +502,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 		this.controlType = ControlDeviceParameterEnum.Start,
 		this.parameters,
 		this.loginSource = LoginSource.PC,
+		this.deviceCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -497,6 +519,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
 			parameters: map['Parameters'] != null ? (map['Parameters'] as List).map((e)=>AdditionParameterDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			deviceCode: map['DeviceCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -512,6 +535,8 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 		if(parameters != null)
 			map['Parameters'] = parameters;
 		map['LoginSource'] = loginSource.index;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
 		return map;
 	}
 }
@@ -1023,11 +1048,13 @@ class UpgradeVersionNotification extends NotificationDTO{
 class CloseLiveToDeviceNotification extends NotificationDTO{
 	String? liveRoomCode;
 	String? deviceCode;
+	String? userCode;
 
 	CloseLiveToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.liveRoomCode,
 		this.deviceCode,
+		this.userCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -1041,6 +1068,7 @@ class CloseLiveToDeviceNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			liveRoomCode: map['LiveRoomCode'],
 			deviceCode: map['DeviceCode'],
+			userCode: map['UserCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -1052,6 +1080,8 @@ class CloseLiveToDeviceNotification extends NotificationDTO{
 			map['LiveRoomCode'] = liveRoomCode;
 		if(deviceCode != null)
 			map['DeviceCode'] = deviceCode;
+		if(userCode != null)
+			map['UserCode'] = userCode;
 		return map;
 	}
 }
@@ -1325,6 +1355,7 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 	List<VideoDeviceOutputInfo >? videoDeviceOutputList;
 	String? deviceCode;
 	String? deviceSign;
+	String? initiatorCode;
 
 	StartLiveToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -1338,6 +1369,7 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 		this.videoDeviceOutputList,
 		this.deviceCode,
 		this.deviceSign,
+		this.initiatorCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -1359,6 +1391,7 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 			videoDeviceOutputList: map['VideoDeviceOutputList'] != null ? (map['VideoDeviceOutputList'] as List).map((e)=>VideoDeviceOutputInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
 			deviceCode: map['DeviceCode'],
 			deviceSign: map['DeviceSign'],
+			initiatorCode: map['InitiatorCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -1380,6 +1413,8 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 			map['DeviceCode'] = deviceCode;
 		if(deviceSign != null)
 			map['DeviceSign'] = deviceSign;
+		if(initiatorCode != null)
+			map['InitiatorCode'] = initiatorCode;
 		return map;
 	}
 }
@@ -3404,11 +3439,15 @@ class ProbeApplicationSettingResponseNotification extends NotificationDTO{
 class CancelLogDownloadNotification extends NotificationDTO{
 	String? controlUserCode;
 	LoginSource loginSource;
+	String? deviceCode;
+	String? controlUserName;
 
 	CancelLogDownloadNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.controlUserCode,
 		this.loginSource = LoginSource.PC,
+		this.deviceCode,
+		this.controlUserName,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -3422,6 +3461,8 @@ class CancelLogDownloadNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			controlUserCode: map['ControlUserCode'],
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			deviceCode: map['DeviceCode'],
+			controlUserName: map['ControlUserName'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -3432,6 +3473,10 @@ class CancelLogDownloadNotification extends NotificationDTO{
 		if(controlUserCode != null)
 			map['ControlUserCode'] = controlUserCode;
 		map['LoginSource'] = loginSource.index;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(controlUserName != null)
+			map['ControlUserName'] = controlUserName;
 		return map;
 	}
 }
@@ -3661,12 +3706,16 @@ class DevicePrinterRequestNotification extends NotificationDTO{
 	DevicePrinterEnum setPrinterEnum;
 	List<DevicePrinterParameter >? parameters;
 	DevicePrinterDTO? devicePrinter;
+	String? deviceCode;
+	String? operatorCode;
 
 	DevicePrinterRequestNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.setPrinterEnum = DevicePrinterEnum.GetInstalledPrinters,
 		this.parameters,
 		this.devicePrinter,
+		this.deviceCode,
+		this.operatorCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -3681,6 +3730,8 @@ class DevicePrinterRequestNotification extends NotificationDTO{
 			setPrinterEnum: DevicePrinterEnum.values.firstWhere((e) => e.index == map['SetPrinterEnum']),
 			parameters: map['Parameters'] != null ? (map['Parameters'] as List).map((e)=>DevicePrinterParameter.fromJson(e as Map<String,dynamic>)).toList() : null,
 			devicePrinter: map['DevicePrinter'] != null ? DevicePrinterDTO.fromJson(map['DevicePrinter']) : null,
+			deviceCode: map['DeviceCode'],
+			operatorCode: map['OperatorCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -3693,6 +3744,10 @@ class DevicePrinterRequestNotification extends NotificationDTO{
 			map['Parameters'] = parameters;
 		if(devicePrinter != null)
 			map['DevicePrinter'] = devicePrinter;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(operatorCode != null)
+			map['OperatorCode'] = operatorCode;
 		return map;
 	}
 }
@@ -3850,6 +3905,9 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 	DateTime? startTime;
 	DateTime? endTime;
 	LoginSource loginSource;
+	String? deviceCode;
+	String? controlUserName;
+	String? scriptVersion;
 
 	GetRemoteLogToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -3857,6 +3915,9 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 		this.startTime,
 		this.endTime,
 		this.loginSource = LoginSource.PC,
+		this.deviceCode,
+		this.controlUserName,
+		this.scriptVersion,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -3872,6 +3933,9 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
 			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			deviceCode: map['DeviceCode'],
+			controlUserName: map['ControlUserName'],
+			scriptVersion: map['ScriptVersion'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -3886,6 +3950,12 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 		if(endTime != null)
 			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
 		map['LoginSource'] = loginSource.index;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(controlUserName != null)
+			map['ControlUserName'] = controlUserName;
+		if(scriptVersion != null)
+			map['ScriptVersion'] = scriptVersion;
 		return map;
 	}
 }
@@ -3903,6 +3973,8 @@ class PushDevicePatchToDeviceNotification extends NotificationDTO{
 	PushDevicePatchEnum pushEnum;
 	String? fileName;
 	String? deviceType;
+	String? deviceCode;
+	String? userCode;
 
 	PushDevicePatchToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -3913,6 +3985,8 @@ class PushDevicePatchToDeviceNotification extends NotificationDTO{
 		this.pushEnum = PushDevicePatchEnum.Start,
 		this.fileName,
 		this.deviceType,
+		this.deviceCode,
+		this.userCode,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -3931,6 +4005,8 @@ class PushDevicePatchToDeviceNotification extends NotificationDTO{
 			pushEnum: PushDevicePatchEnum.values.firstWhere((e) => e.index == map['PushEnum']),
 			fileName: map['FileName'],
 			deviceType: map['DeviceType'],
+			deviceCode: map['DeviceCode'],
+			userCode: map['UserCode'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -3950,6 +4026,10 @@ class PushDevicePatchToDeviceNotification extends NotificationDTO{
 			map['FileName'] = fileName;
 		if(deviceType != null)
 			map['DeviceType'] = deviceType;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(userCode != null)
+			map['UserCode'] = userCode;
 		return map;
 	}
 }
@@ -4241,6 +4321,7 @@ class LiveConsultationMember {
 	bool isControllingParameter;
 	int sortNumber;
 	int sortLevel;
+	bool isOldPlatform;
 
 	LiveConsultationMember({
 		this.id,
@@ -4263,6 +4344,7 @@ class LiveConsultationMember {
 		this.isControllingParameter = false,
 		this.sortNumber = 0,
 		this.sortLevel = 0,
+		this.isOldPlatform = false,
 	});
 
 	factory LiveConsultationMember.fromJson(Map<String, dynamic> map) {
@@ -4287,6 +4369,7 @@ class LiveConsultationMember {
 			isControllingParameter: map['IsControllingParameter'],
 			sortNumber: map['SortNumber'],
 			sortLevel: map['SortLevel'],
+			isOldPlatform: map['IsOldPlatform'],
 		);
 	}
 
@@ -4318,6 +4401,7 @@ class LiveConsultationMember {
 		map['IsControllingParameter'] = isControllingParameter;
 		map['SortNumber'] = sortNumber;
 		map['SortLevel'] = sortLevel;
+		map['IsOldPlatform'] = isOldPlatform;
 		return map;
 	}
 }

+ 319 - 0
lib/services/other.m.dart

@@ -569,6 +569,57 @@ class DownloadFileResult {
 	}
 }
 
+class QueryExamListItemResult {
+	String? examCode;
+	String? patientName;
+	String? age;
+	List<DataItemDTO >? ageInfo;
+	String? sex;
+	List<String >? associatedExamCodes;
+	DateTime? createTime;
+
+	QueryExamListItemResult({
+		this.examCode,
+		this.patientName,
+		this.age,
+		this.ageInfo,
+		this.sex,
+		this.associatedExamCodes,
+		this.createTime,
+	});
+
+	factory QueryExamListItemResult.fromJson(Map<String, dynamic> map) {
+		return QueryExamListItemResult( 
+			examCode: map['ExamCode'],
+			patientName: map['PatientName'],
+			age: map['Age'],
+			ageInfo: map['AgeInfo'] != null ? (map['AgeInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			sex: map['Sex'],
+			associatedExamCodes: map['AssociatedExamCodes'] != null ? map['AssociatedExamCodes'].cast<String>().toList() : null,
+			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(examCode != null)
+			map['ExamCode'] = examCode;
+		if(patientName != null)
+			map['PatientName'] = patientName;
+		if(age != null)
+			map['Age'] = age;
+		if(ageInfo != null)
+			map['AgeInfo'] = ageInfo;
+		if(sex != null)
+			map['Sex'] = sex;
+		if(associatedExamCodes != null)
+			map['AssociatedExamCodes'] = associatedExamCodes;
+		if(createTime != null)
+			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
+		return map;
+	}
+}
+
 class BaseLiveResult {
 	String? roomCode;
 	int integerRoomId;
@@ -1710,6 +1761,32 @@ class CleanDeviceCacheRequest {
 	}
 }
 
+class CreateShareCodeRequest {
+	String? reportCode;
+	String? languageCode;
+
+	CreateShareCodeRequest({
+		this.reportCode,
+		this.languageCode,
+	});
+
+	factory CreateShareCodeRequest.fromJson(Map<String, dynamic> map) {
+		return CreateShareCodeRequest( 
+			reportCode: map['ReportCode'],
+			languageCode: map['LanguageCode'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(reportCode != null)
+			map['ReportCode'] = reportCode;
+		if(languageCode != null)
+			map['LanguageCode'] = languageCode;
+		return map;
+	}
+}
+
 class DeviceDiagnosisChangedNotification extends TokenRequest{
 	String? diagnosisModule;
 	String? organizationCode;
@@ -1984,6 +2061,7 @@ class SignUpRequest extends UserDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -2025,6 +2103,7 @@ class SignUpRequest extends UserDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -2069,6 +2148,7 @@ class SignUpRequest extends UserDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -3673,6 +3753,7 @@ class DeviceMigratoryInfo extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -3704,6 +3785,7 @@ class DeviceMigratoryInfo extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -3740,6 +3822,7 @@ class DeviceMigratoryInfo extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
@@ -4372,6 +4455,41 @@ class BatchInsertUserGroupRequest extends TokenRequest{
 	}
 }
 
+class BindUserDevicesRequest extends TokenRequest{
+	String? userCode;
+	List<String >? bindDeviceCodes;
+	List<String >? removeDeviceCodes;
+
+	BindUserDevicesRequest({
+		this.userCode,
+		this.bindDeviceCodes,
+		this.removeDeviceCodes,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory BindUserDevicesRequest.fromJson(Map<String, dynamic> map) {
+		return BindUserDevicesRequest( 
+			userCode: map['UserCode'],
+			bindDeviceCodes: map['BindDeviceCodes'] != null ? map['BindDeviceCodes'].cast<String>().toList() : null,
+			removeDeviceCodes: map['RemoveDeviceCodes'] != null ? map['RemoveDeviceCodes'].cast<String>().toList() : null,
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(userCode != null)
+			map['UserCode'] = userCode;
+		if(bindDeviceCodes != null)
+			map['BindDeviceCodes'] = bindDeviceCodes;
+		if(removeDeviceCodes != null)
+			map['RemoveDeviceCodes'] = removeDeviceCodes;
+		return map;
+	}
+}
+
 class ConfirmIdentityApplyRequest extends TokenRequest{
 	String? identityApplyCode;
 
@@ -6451,6 +6569,78 @@ class GetThirdPartyInfoPagesRequest extends PageRequest{
 	}
 }
 
+class GetUserDevicesPagesRequest extends PageRequest{
+	String? userCode;
+	String? keyword;
+
+	GetUserDevicesPagesRequest({
+		this.userCode,
+		this.keyword,
+		int pageIndex = 0,
+		int pageSize = 0,
+		String? token,
+	}) : super(
+			pageIndex: pageIndex,
+			pageSize: pageSize,
+			token: token,
+		);
+
+	factory GetUserDevicesPagesRequest.fromJson(Map<String, dynamic> map) {
+		return GetUserDevicesPagesRequest( 
+			userCode: map['UserCode'],
+			keyword: map['Keyword'],
+			pageIndex: map['PageIndex'],
+			pageSize: map['PageSize'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(userCode != null)
+			map['UserCode'] = userCode;
+		if(keyword != null)
+			map['Keyword'] = keyword;
+		return map;
+	}
+}
+
+class GetOrganizationDevicesPagesRequest extends PageRequest{
+	String? organizationCode;
+	String? keyword;
+
+	GetOrganizationDevicesPagesRequest({
+		this.organizationCode,
+		this.keyword,
+		int pageIndex = 0,
+		int pageSize = 0,
+		String? token,
+	}) : super(
+			pageIndex: pageIndex,
+			pageSize: pageSize,
+			token: token,
+		);
+
+	factory GetOrganizationDevicesPagesRequest.fromJson(Map<String, dynamic> map) {
+		return GetOrganizationDevicesPagesRequest( 
+			organizationCode: map['OrganizationCode'],
+			keyword: map['Keyword'],
+			pageIndex: map['PageIndex'],
+			pageSize: map['PageSize'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(organizationCode != null)
+			map['OrganizationCode'] = organizationCode;
+		if(keyword != null)
+			map['Keyword'] = keyword;
+		return map;
+	}
+}
+
 class ImitateLoginRequest {
 	String? account;
 	String? password;
@@ -7148,6 +7338,7 @@ class ModifyDeviceRequest2 extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -7179,6 +7370,7 @@ class ModifyDeviceRequest2 extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -7214,6 +7406,7 @@ class ModifyDeviceRequest2 extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
@@ -8002,6 +8195,71 @@ class ModifyThirdPartyInfoRequest extends ThirdPartyInfoDTO{
 	}
 }
 
+class ModifyUserBindDeviceOrganizationRequest extends TokenRequest{
+	List<String >? userCodes;
+	List<String >? organizationCodes;
+
+	ModifyUserBindDeviceOrganizationRequest({
+		this.userCodes,
+		this.organizationCodes,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory ModifyUserBindDeviceOrganizationRequest.fromJson(Map<String, dynamic> map) {
+		return ModifyUserBindDeviceOrganizationRequest( 
+			userCodes: map['UserCodes'] != null ? map['UserCodes'].cast<String>().toList() : null,
+			organizationCodes: map['OrganizationCodes'] != null ? map['OrganizationCodes'].cast<String>().toList() : null,
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(userCodes != null)
+			map['UserCodes'] = userCodes;
+		if(organizationCodes != null)
+			map['OrganizationCodes'] = organizationCodes;
+		return map;
+	}
+}
+
+class ModifyUserSpecialOrganizationRequest extends TokenRequest{
+	List<String >? userCodes;
+	String? originOrganizationCode;
+	String? targetOrganizationCode;
+
+	ModifyUserSpecialOrganizationRequest({
+		this.userCodes,
+		this.originOrganizationCode,
+		this.targetOrganizationCode,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory ModifyUserSpecialOrganizationRequest.fromJson(Map<String, dynamic> map) {
+		return ModifyUserSpecialOrganizationRequest( 
+			userCodes: map['UserCodes'] != null ? map['UserCodes'].cast<String>().toList() : null,
+			originOrganizationCode: map['OriginOrganizationCode'],
+			targetOrganizationCode: map['TargetOrganizationCode'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(userCodes != null)
+			map['UserCodes'] = userCodes;
+		if(originOrganizationCode != null)
+			map['OriginOrganizationCode'] = originOrganizationCode;
+		if(targetOrganizationCode != null)
+			map['TargetOrganizationCode'] = targetOrganizationCode;
+		return map;
+	}
+}
+
 class UserFeatureInfoDTO extends BaseFeatureInfoDTO{
 
 	UserFeatureInfoDTO({
@@ -8113,6 +8371,7 @@ class ManageUserInfoDTO extends UserDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -8152,6 +8411,7 @@ class ManageUserInfoDTO extends UserDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -8207,6 +8467,7 @@ class ManageUserInfoDTO extends UserDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -8287,6 +8548,7 @@ class ModifyUserRequest extends ManageUserInfoDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -8337,6 +8599,7 @@ class ModifyUserRequest extends ManageUserInfoDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -8391,6 +8654,7 @@ class ModifyUserRequest extends ManageUserInfoDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -9592,6 +9856,39 @@ class OperationLogDTO {
 	}
 }
 
+class SyncDataCheckResult {
+	Map<String,String>? serverUrlMap;
+	int workerCount;
+	bool executingStatus;
+	bool isClosed;
+
+	SyncDataCheckResult({
+		this.serverUrlMap,
+		this.workerCount = 0,
+		this.executingStatus = false,
+		this.isClosed = false,
+	});
+
+	factory SyncDataCheckResult.fromJson(Map<String, dynamic> map) {
+		return SyncDataCheckResult( 
+			serverUrlMap: map['ServerUrlMap'] != null ? map['ServerUrlMap'].cast<String,String>() : null,
+			workerCount: map['WorkerCount'],
+			executingStatus: map['ExecutingStatus'],
+			isClosed: map['IsClosed'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(serverUrlMap != null)
+			map['ServerUrlMap'] = serverUrlMap;
+		map['WorkerCount'] = workerCount;
+		map['ExecutingStatus'] = executingStatus;
+		map['IsClosed'] = isClosed;
+		return map;
+	}
+}
+
 class SyncCompleteOpLogsRequest {
 	List<OperationLogDTO >? oplogs;
 
@@ -11873,6 +12170,7 @@ class UserPasswordDTO extends BaseDTO{
 	String? rootOrganizationCode;
 	List<String >? authorityGroups;
 	List<String >? bindDevices;
+	List<String >? bindDeviceOrganizations;
 	String? lastIP;
 	int logintimes;
 	UserInfoStateEnum userState;
@@ -11890,6 +12188,8 @@ class UserPasswordDTO extends BaseDTO{
 	String? signature;
 	String? language;
 	bool enableReportLabel;
+	String? bindEmergencyDeviceCode;
+	String? bindEmergencyExpertCode;
 
 	UserPasswordDTO({
 		this.userCode,
@@ -11904,6 +12204,7 @@ class UserPasswordDTO extends BaseDTO{
 		this.rootOrganizationCode,
 		this.authorityGroups,
 		this.bindDevices,
+		this.bindDeviceOrganizations,
 		this.lastIP,
 		this.logintimes = 0,
 		this.userState = UserInfoStateEnum.Nonactivated,
@@ -11921,6 +12222,8 @@ class UserPasswordDTO extends BaseDTO{
 		this.signature,
 		this.language,
 		this.enableReportLabel = false,
+		this.bindEmergencyDeviceCode,
+		this.bindEmergencyExpertCode,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -11942,6 +12245,7 @@ class UserPasswordDTO extends BaseDTO{
 			rootOrganizationCode: map['RootOrganizationCode'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -11959,6 +12263,8 @@ class UserPasswordDTO extends BaseDTO{
 			signature: map['Signature'],
 			language: map['Language'],
 			enableReportLabel: map['EnableReportLabel'],
+			bindEmergencyDeviceCode: map['BindEmergencyDeviceCode'],
+			bindEmergencyExpertCode: map['BindEmergencyExpertCode'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -11990,6 +12296,8 @@ class UserPasswordDTO extends BaseDTO{
 			map['AuthorityGroups'] = authorityGroups;
 		if(bindDevices != null)
 			map['BindDevices'] = bindDevices;
+		if(bindDeviceOrganizations != null)
+			map['BindDeviceOrganizations'] = bindDeviceOrganizations;
 		if(lastIP != null)
 			map['LastIP'] = lastIP;
 		map['Logintimes'] = logintimes;
@@ -12019,6 +12327,10 @@ class UserPasswordDTO extends BaseDTO{
 		if(language != null)
 			map['Language'] = language;
 		map['EnableReportLabel'] = enableReportLabel;
+		if(bindEmergencyDeviceCode != null)
+			map['BindEmergencyDeviceCode'] = bindEmergencyDeviceCode;
+		if(bindEmergencyExpertCode != null)
+			map['BindEmergencyExpertCode'] = bindEmergencyExpertCode;
 		return map;
 	}
 }
@@ -12462,6 +12774,7 @@ class LiveMemberDTO {
 	LoginSource loginSource;
 	String? inviterCode;
 	bool backgroundRole;
+	bool isOldPlatform;
 
 	LiveMemberDTO({
 		this.code,
@@ -12479,6 +12792,7 @@ class LiveMemberDTO {
 		this.loginSource = LoginSource.PC,
 		this.inviterCode,
 		this.backgroundRole = false,
+		this.isOldPlatform = false,
 	});
 
 	factory LiveMemberDTO.fromJson(Map<String, dynamic> map) {
@@ -12498,6 +12812,7 @@ class LiveMemberDTO {
 			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			inviterCode: map['InviterCode'],
 			backgroundRole: map['BackgroundRole'],
+			isOldPlatform: map['IsOldPlatform'],
 		);
 	}
 
@@ -12525,6 +12840,7 @@ class LiveMemberDTO {
 		if(inviterCode != null)
 			map['InviterCode'] = inviterCode;
 		map['BackgroundRole'] = backgroundRole;
+		map['IsOldPlatform'] = isOldPlatform;
 		return map;
 	}
 }
@@ -15996,6 +16312,7 @@ class ManageDeviceInfoDTO extends DeviceInfoDTO{
 		List<VideoDeviceDTO >? videoDeviceInfos,
 		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
 		bool liveOpened = false,
+		bool supportRtc = false,
 		String? displayName,
 		DateTime? createTime,
 		DateTime? updateTime,
@@ -16027,6 +16344,7 @@ class ManageDeviceInfoDTO extends DeviceInfoDTO{
 			videoDeviceInfos: videoDeviceInfos,
 			downloadModeSetting: downloadModeSetting,
 			liveOpened: liveOpened,
+			supportRtc: supportRtc,
 			displayName: displayName,
 			createTime: createTime,
 			updateTime: updateTime,
@@ -16068,6 +16386,7 @@ class ManageDeviceInfoDTO extends DeviceInfoDTO{
 			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']),
 			liveOpened: map['LiveOpened'],
+			supportRtc: map['SupportRtc'],
 			displayName: map['DisplayName'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,

+ 30 - 0
lib/services/recordInfo.dart

@@ -27,6 +27,9 @@ class RecordInfoService extends JsonRpcClientBase {
 		FJsonConvert.setDecoder((map) => QueryRecordResult.fromJson(map));
 		FJsonConvert.setDecoder((map) => ProcessRecordDataResult.fromJson(map));
 		FJsonConvert.setDecoder((map) => RemedicalMeasuredInfoDTO.fromJson(map));
+		FJsonConvert.setDecoder((map) => PageResult<SimpleRecordInfoDTO>.fromJson(map));
+		FJsonConvert.setDecoder((map) => SimpleRecordInfoDTO.fromJson(map));
+		FJsonConvert.setDecoder((map) => ReferralHistoryDetail.fromJson(map));
 	}
 
 	Future<bool> createRecordInfoAsync(CreateRecordRequest request) async {
@@ -88,5 +91,32 @@ class RecordInfoService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<PageResult<SimpleRecordInfoDTO>> findRecordPagesAsync(FindRecordPagesRequest request) async {
+		var rpcRst = await call("FindRecordPagesAsync", request);
+		var result = PageResult<SimpleRecordInfoDTO>.fromJson(rpcRst as Map<String, dynamic>);
+		return result;
+	}
+
+	Future<bool> createForRecordInfoListAsync(CreateRecordNewRequest request) async {
+		var rpcRst = await call("CreateForRecordInfoListAsync", request);
+		return rpcRst;
+	}
+
+	Future<bool> applyReferralForRecordInfoListAsync(CreateReferralRecordNewRequest request) async {
+		var rpcRst = await call("ApplyReferralForRecordInfoListAsync", request);
+		return rpcRst;
+	}
+
+	Future<bool> withdrawReferralForRecordInfoListAsync(WithdrawReferralForRecordListRequest request) async {
+		var rpcRst = await call("WithdrawReferralForRecordInfoListAsync", request);
+		return rpcRst;
+	}
+
+	Future<List<ReferralHistoryDetail>> findReferralHistoryAsync(FindReferralHistoryRequest request) async {
+		var rpcRst = await call("FindReferralHistoryAsync", request);
+		var result = (rpcRst as List).map((e)=>ReferralHistoryDetail.fromJson(e as Map<String, dynamic>)).toList();
+		return result;
+	}
+
 }
 

+ 427 - 0
lib/services/recordInfo.m.dart

@@ -507,4 +507,431 @@ class StartCollectingImgRequest extends TokenRequest{
 	}
 }
 
+enum ReferralTypeEnum {
+	Normal,
+	ReferralIn,
+	ReferralOut,
+}
+
+class SimpleRecordInfoDTO {
+	String? recordCode;
+	RecordStatusEnum recordStatus;
+	ReferralTypeEnum referralType;
+	String? patientCode;
+	String? patientName;
+	String? age;
+	String? sex;
+	String? devicePatientID;
+	String? deviceCode;
+	String? deviceName;
+	String? rootOrganizationCode;
+	String? rootOrganizationName;
+	String? languge;
+
+	SimpleRecordInfoDTO({
+		this.recordCode,
+		this.recordStatus = RecordStatusEnum.NotScanned,
+		this.referralType = ReferralTypeEnum.Normal,
+		this.patientCode,
+		this.patientName,
+		this.age,
+		this.sex,
+		this.devicePatientID,
+		this.deviceCode,
+		this.deviceName,
+		this.rootOrganizationCode,
+		this.rootOrganizationName,
+		this.languge,
+	});
+
+	factory SimpleRecordInfoDTO.fromJson(Map<String, dynamic> map) {
+		return SimpleRecordInfoDTO( 
+			recordCode: map['RecordCode'],
+			recordStatus: RecordStatusEnum.values.firstWhere((e) => e.index == map['RecordStatus']),
+			referralType: ReferralTypeEnum.values.firstWhere((e) => e.index == map['ReferralType']),
+			patientCode: map['PatientCode'],
+			patientName: map['PatientName'],
+			age: map['Age'],
+			sex: map['Sex'],
+			devicePatientID: map['DevicePatientID'],
+			deviceCode: map['DeviceCode'],
+			deviceName: map['DeviceName'],
+			rootOrganizationCode: map['RootOrganizationCode'],
+			rootOrganizationName: map['RootOrganizationName'],
+			languge: map['Languge'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(recordCode != null)
+			map['RecordCode'] = recordCode;
+		map['RecordStatus'] = recordStatus.index;
+		map['ReferralType'] = referralType.index;
+		if(patientCode != null)
+			map['PatientCode'] = patientCode;
+		if(patientName != null)
+			map['PatientName'] = patientName;
+		if(age != null)
+			map['Age'] = age;
+		if(sex != null)
+			map['Sex'] = sex;
+		if(devicePatientID != null)
+			map['DevicePatientID'] = devicePatientID;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(deviceName != null)
+			map['DeviceName'] = deviceName;
+		if(rootOrganizationCode != null)
+			map['RootOrganizationCode'] = rootOrganizationCode;
+		if(rootOrganizationName != null)
+			map['RootOrganizationName'] = rootOrganizationName;
+		if(languge != null)
+			map['Languge'] = languge;
+		return map;
+	}
+}
+
+enum RecordQueryStateEnum {
+	All,
+	NotScanned,
+	Uploaded,
+	NotReport,
+	Completed,
+}
+
+enum RecordProcessStateEnum {
+	All,
+	Wait,
+	Done,
+	ReferralOut,
+}
+
+class FindRecordPagesRequest extends PageRequest{
+	List<String >? organizationCodes;
+	List<String >? deviceCodes;
+	RecordQueryStateEnum recordQueryState;
+	RecordProcessStateEnum recordProcessState;
+	String? language;
+	String? keyWord;
+
+	FindRecordPagesRequest({
+		this.organizationCodes,
+		this.deviceCodes,
+		this.recordQueryState = RecordQueryStateEnum.All,
+		this.recordProcessState = RecordProcessStateEnum.All,
+		this.language,
+		this.keyWord,
+		int pageIndex = 0,
+		int pageSize = 0,
+		String? token,
+	}) : super(
+			pageIndex: pageIndex,
+			pageSize: pageSize,
+			token: token,
+		);
+
+	factory FindRecordPagesRequest.fromJson(Map<String, dynamic> map) {
+		return FindRecordPagesRequest( 
+			organizationCodes: map['OrganizationCodes'] != null ? map['OrganizationCodes'].cast<String>().toList() : null,
+			deviceCodes: map['DeviceCodes'] != null ? map['DeviceCodes'].cast<String>().toList() : null,
+			recordQueryState: RecordQueryStateEnum.values.firstWhere((e) => e.index == map['RecordQueryState']),
+			recordProcessState: RecordProcessStateEnum.values.firstWhere((e) => e.index == map['RecordProcessState']),
+			language: map['Language'],
+			keyWord: map['KeyWord'],
+			pageIndex: map['PageIndex'],
+			pageSize: map['PageSize'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(organizationCodes != null)
+			map['OrganizationCodes'] = organizationCodes;
+		if(deviceCodes != null)
+			map['DeviceCodes'] = deviceCodes;
+		map['RecordQueryState'] = recordQueryState.index;
+		map['RecordProcessState'] = recordProcessState.index;
+		if(language != null)
+			map['Language'] = language;
+		if(keyWord != null)
+			map['KeyWord'] = keyWord;
+		return map;
+	}
+}
+
+class CreateRecordNewRequest extends TokenRequest{
+	String? patientCode;
+	List<DataItemDTO >? patientDatas;
+	String? deviceCode;
+	List<PatientInfoExt >? patientInfoExtList;
+
+	CreateRecordNewRequest({
+		this.patientCode,
+		this.patientDatas,
+		this.deviceCode,
+		this.patientInfoExtList,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory CreateRecordNewRequest.fromJson(Map<String, dynamic> map) {
+		return CreateRecordNewRequest( 
+			patientCode: map['PatientCode'],
+			patientDatas: map['PatientDatas'] != null ? (map['PatientDatas'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			deviceCode: map['DeviceCode'],
+			patientInfoExtList: map['PatientInfoExtList'] != null ? (map['PatientInfoExtList'] as List).map((e)=>PatientInfoExt.fromJson(e as Map<String,dynamic>)).toList() : null,
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(patientCode != null)
+			map['PatientCode'] = patientCode;
+		if(patientDatas != null)
+			map['PatientDatas'] = patientDatas;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		if(patientInfoExtList != null)
+			map['PatientInfoExtList'] = patientInfoExtList;
+		return map;
+	}
+}
+
+class CreateReferralRecordNewRequest extends TokenRequest{
+	String? recordCode;
+	String? referralOrganizationCode;
+	String? referralUserCode;
+	String? subjectMatter;
+
+	CreateReferralRecordNewRequest({
+		this.recordCode,
+		this.referralOrganizationCode,
+		this.referralUserCode,
+		this.subjectMatter,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory CreateReferralRecordNewRequest.fromJson(Map<String, dynamic> map) {
+		return CreateReferralRecordNewRequest( 
+			recordCode: map['RecordCode'],
+			referralOrganizationCode: map['ReferralOrganizationCode'],
+			referralUserCode: map['ReferralUserCode'],
+			subjectMatter: map['SubjectMatter'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(recordCode != null)
+			map['RecordCode'] = recordCode;
+		if(referralOrganizationCode != null)
+			map['ReferralOrganizationCode'] = referralOrganizationCode;
+		if(referralUserCode != null)
+			map['ReferralUserCode'] = referralUserCode;
+		if(subjectMatter != null)
+			map['SubjectMatter'] = subjectMatter;
+		return map;
+	}
+}
+
+class WithdrawReferralForRecordListRequest extends TokenRequest{
+	String? recordCode;
+
+	WithdrawReferralForRecordListRequest({
+		this.recordCode,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory WithdrawReferralForRecordListRequest.fromJson(Map<String, dynamic> map) {
+		return WithdrawReferralForRecordListRequest( 
+			recordCode: map['RecordCode'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(recordCode != null)
+			map['RecordCode'] = recordCode;
+		return map;
+	}
+}
+
+enum RecordReferralStatusEnum {
+	ReferralIn,
+	Processed,
+	Withdrawn,
+}
+
+class ReferralData extends BaseDTO{
+	String? code;
+	String? recordCode;
+	String? referralOutUserCode;
+	String? referralOutOrganizationCode;
+	String? referralInUserCode;
+	String? referralInOrganizationCode;
+	RecordReferralStatusEnum referralStatus;
+	DateTime? referralTime;
+	String? subjectMatter;
+
+	ReferralData({
+		this.code,
+		this.recordCode,
+		this.referralOutUserCode,
+		this.referralOutOrganizationCode,
+		this.referralInUserCode,
+		this.referralInOrganizationCode,
+		this.referralStatus = RecordReferralStatusEnum.ReferralIn,
+		this.referralTime,
+		this.subjectMatter,
+		DateTime? createTime,
+		DateTime? updateTime,
+	}) : super(
+			createTime: createTime,
+			updateTime: updateTime,
+		);
+
+	factory ReferralData.fromJson(Map<String, dynamic> map) {
+		return ReferralData( 
+			code: map['Code'],
+			recordCode: map['RecordCode'],
+			referralOutUserCode: map['ReferralOutUserCode'],
+			referralOutOrganizationCode: map['ReferralOutOrganizationCode'],
+			referralInUserCode: map['ReferralInUserCode'],
+			referralInOrganizationCode: map['ReferralInOrganizationCode'],
+			referralStatus: RecordReferralStatusEnum.values.firstWhere((e) => e.index == map['ReferralStatus']),
+			referralTime: map['ReferralTime'] != null ? DateTime.parse(map['ReferralTime']) : null,
+			subjectMatter: map['SubjectMatter'],
+			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(code != null)
+			map['Code'] = code;
+		if(recordCode != null)
+			map['RecordCode'] = recordCode;
+		if(referralOutUserCode != null)
+			map['ReferralOutUserCode'] = referralOutUserCode;
+		if(referralOutOrganizationCode != null)
+			map['ReferralOutOrganizationCode'] = referralOutOrganizationCode;
+		if(referralInUserCode != null)
+			map['ReferralInUserCode'] = referralInUserCode;
+		if(referralInOrganizationCode != null)
+			map['ReferralInOrganizationCode'] = referralInOrganizationCode;
+		map['ReferralStatus'] = referralStatus.index;
+		if(referralTime != null)
+			map['ReferralTime'] = JsonRpcUtils.dateFormat(referralTime!);
+		if(subjectMatter != null)
+			map['SubjectMatter'] = subjectMatter;
+		return map;
+	}
+}
+
+class ReferralHistoryDetail extends ReferralData{
+	String? referralOutOrganizationName;
+	String? referralOutUserName;
+	String? referralInOrganizationName;
+	String? referralInUserName;
+
+	ReferralHistoryDetail({
+		this.referralOutOrganizationName,
+		this.referralOutUserName,
+		this.referralInOrganizationName,
+		this.referralInUserName,
+		String? code,
+		String? recordCode,
+		String? referralOutUserCode,
+		String? referralOutOrganizationCode,
+		String? referralInUserCode,
+		String? referralInOrganizationCode,
+		RecordReferralStatusEnum referralStatus = RecordReferralStatusEnum.ReferralIn,
+		DateTime? referralTime,
+		String? subjectMatter,
+		DateTime? createTime,
+		DateTime? updateTime,
+	}) : super(
+			code: code,
+			recordCode: recordCode,
+			referralOutUserCode: referralOutUserCode,
+			referralOutOrganizationCode: referralOutOrganizationCode,
+			referralInUserCode: referralInUserCode,
+			referralInOrganizationCode: referralInOrganizationCode,
+			referralStatus: referralStatus,
+			referralTime: referralTime,
+			subjectMatter: subjectMatter,
+			createTime: createTime,
+			updateTime: updateTime,
+		);
+
+	factory ReferralHistoryDetail.fromJson(Map<String, dynamic> map) {
+		return ReferralHistoryDetail( 
+			referralOutOrganizationName: map['ReferralOutOrganizationName'],
+			referralOutUserName: map['ReferralOutUserName'],
+			referralInOrganizationName: map['ReferralInOrganizationName'],
+			referralInUserName: map['ReferralInUserName'],
+			code: map['Code'],
+			recordCode: map['RecordCode'],
+			referralOutUserCode: map['ReferralOutUserCode'],
+			referralOutOrganizationCode: map['ReferralOutOrganizationCode'],
+			referralInUserCode: map['ReferralInUserCode'],
+			referralInOrganizationCode: map['ReferralInOrganizationCode'],
+			referralStatus: RecordReferralStatusEnum.values.firstWhere((e) => e.index == map['ReferralStatus']),
+			referralTime: map['ReferralTime'] != null ? DateTime.parse(map['ReferralTime']) : null,
+			subjectMatter: map['SubjectMatter'],
+			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(referralOutOrganizationName != null)
+			map['ReferralOutOrganizationName'] = referralOutOrganizationName;
+		if(referralOutUserName != null)
+			map['ReferralOutUserName'] = referralOutUserName;
+		if(referralInOrganizationName != null)
+			map['ReferralInOrganizationName'] = referralInOrganizationName;
+		if(referralInUserName != null)
+			map['ReferralInUserName'] = referralInUserName;
+		return map;
+	}
+}
+
+class FindReferralHistoryRequest extends TokenRequest{
+	String? recordCode;
+
+	FindReferralHistoryRequest({
+		this.recordCode,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory FindReferralHistoryRequest.fromJson(Map<String, dynamic> map) {
+		return FindReferralHistoryRequest( 
+			recordCode: map['RecordCode'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(recordCode != null)
+			map['RecordCode'] = recordCode;
+		return map;
+	}
+}
+
 

+ 3 - 4
lib/services/remedical.dart

@@ -31,8 +31,7 @@ class RemedicalService extends JsonRpcClientBase {
 		FJsonConvert.setDecoder((map) => DataItemDTO.fromJson(map));
 		FJsonConvert.setDecoder((map) => OrganizationSettingResult.fromJson(map));
 		FJsonConvert.setDecoder((map) => QueryReservationResult.fromJson(map));
-		FJsonConvert.setDecoder((map) => PageResult<QueryExamListItemResult>.fromJson(map));
-		FJsonConvert.setDecoder((map) => QueryExamListItemResult.fromJson(map));
+		FJsonConvert.setDecoder((map) => PageResult<QueryExamInfoResult>.fromJson(map));
 		FJsonConvert.setDecoder((map) => QueryExamInfoResult.fromJson(map));
 		FJsonConvert.setDecoder((map) => MeasureApplicationDTO.fromJson(map));
 		FJsonConvert.setDecoder((map) => CommentItemResultDTO.fromJson(map));
@@ -113,9 +112,9 @@ class RemedicalService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
-	Future<PageResult<QueryExamListItemResult>> queryExamListAsync(QueryExamListRequest request) async {
+	Future<PageResult<QueryExamInfoResult>> queryExamListAsync(QueryExamListRequest request) async {
 		var rpcRst = await call("QueryExamListAsync", request);
-		var result = PageResult<QueryExamListItemResult>.fromJson(rpcRst as Map<String, dynamic>);
+		var result = PageResult<QueryExamInfoResult>.fromJson(rpcRst as Map<String, dynamic>);
 		return result;
 	}
 

+ 55 - 89
lib/services/remedical.m.dart

@@ -34,12 +34,14 @@ class CreateExaminfoRequest extends TokenRequest{
 	String? examRecordCode;
 	List<DataItemDTO >? patientInfo;
 	List<PatientInfoExt >? patientScanInfoList;
+	bool isScreenshotVersion;
 
 	CreateExaminfoRequest({
 		this.patientType,
 		this.examRecordCode,
 		this.patientInfo,
 		this.patientScanInfoList,
+		this.isScreenshotVersion = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -51,6 +53,7 @@ class CreateExaminfoRequest extends TokenRequest{
 			examRecordCode: map['ExamRecordCode'],
 			patientInfo: map['PatientInfo'] != null ? (map['PatientInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			patientScanInfoList: map['PatientScanInfoList'] != null ? (map['PatientScanInfoList'] as List).map((e)=>PatientInfoExt.fromJson(e as Map<String,dynamic>)).toList() : null,
+			isScreenshotVersion: map['IsScreenshotVersion'],
 			token: map['Token'],
 		);
 	}
@@ -65,6 +68,7 @@ class CreateExaminfoRequest extends TokenRequest{
 			map['PatientInfo'] = patientInfo;
 		if(patientScanInfoList != null)
 			map['PatientScanInfoList'] = patientScanInfoList;
+		map['IsScreenshotVersion'] = isScreenshotVersion;
 		return map;
 	}
 }
@@ -459,53 +463,67 @@ class DeviceFinishExamRequest extends TokenRequest{
 	}
 }
 
-class QueryExamListItemResult {
-	String? examCode;
+class QueryExamInfoResult {
+	DateTime? createTime;
+	String? deptName;
+	String? patientCode;
 	String? patientName;
-	String? age;
-	List<DataItemDTO >? ageInfo;
-	String? sex;
+	String? patientAge;
+	List<DataItemDTO >? patientAgeInfo;
+	String? patientSex;
+	List<PatientInfoExt >? patientInfoExtList;
 	List<String >? associatedExamCodes;
-	DateTime? createTime;
+	RecordStatusEnum examStatus;
 
-	QueryExamListItemResult({
-		this.examCode,
+	QueryExamInfoResult({
+		this.createTime,
+		this.deptName,
+		this.patientCode,
 		this.patientName,
-		this.age,
-		this.ageInfo,
-		this.sex,
+		this.patientAge,
+		this.patientAgeInfo,
+		this.patientSex,
+		this.patientInfoExtList,
 		this.associatedExamCodes,
-		this.createTime,
+		this.examStatus = RecordStatusEnum.NotScanned,
 	});
 
-	factory QueryExamListItemResult.fromJson(Map<String, dynamic> map) {
-		return QueryExamListItemResult( 
-			examCode: map['ExamCode'],
+	factory QueryExamInfoResult.fromJson(Map<String, dynamic> map) {
+		return QueryExamInfoResult( 
+			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+			deptName: map['DeptName'],
+			patientCode: map['PatientCode'],
 			patientName: map['PatientName'],
-			age: map['Age'],
-			ageInfo: map['AgeInfo'] != null ? (map['AgeInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
-			sex: map['Sex'],
+			patientAge: map['PatientAge'],
+			patientAgeInfo: map['PatientAgeInfo'] != null ? (map['PatientAgeInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			patientSex: map['PatientSex'],
+			patientInfoExtList: map['PatientInfoExtList'] != null ? (map['PatientInfoExtList'] as List).map((e)=>PatientInfoExt.fromJson(e as Map<String,dynamic>)).toList() : null,
 			associatedExamCodes: map['AssociatedExamCodes'] != null ? map['AssociatedExamCodes'].cast<String>().toList() : null,
-			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
+			examStatus: RecordStatusEnum.values.firstWhere((e) => e.index == map['ExamStatus']),
 		);
 	}
 
 	Map<String, dynamic> toJson() {
 		final map = Map<String, dynamic>();
-		if(examCode != null)
-			map['ExamCode'] = examCode;
+		if(createTime != null)
+			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
+		if(deptName != null)
+			map['DeptName'] = deptName;
+		if(patientCode != null)
+			map['PatientCode'] = patientCode;
 		if(patientName != null)
 			map['PatientName'] = patientName;
-		if(age != null)
-			map['Age'] = age;
-		if(ageInfo != null)
-			map['AgeInfo'] = ageInfo;
-		if(sex != null)
-			map['Sex'] = sex;
+		if(patientAge != null)
+			map['PatientAge'] = patientAge;
+		if(patientAgeInfo != null)
+			map['PatientAgeInfo'] = patientAgeInfo;
+		if(patientSex != null)
+			map['PatientSex'] = patientSex;
+		if(patientInfoExtList != null)
+			map['PatientInfoExtList'] = patientInfoExtList;
 		if(associatedExamCodes != null)
 			map['AssociatedExamCodes'] = associatedExamCodes;
-		if(createTime != null)
-			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
+		map['ExamStatus'] = examStatus.index;
 		return map;
 	}
 }
@@ -560,66 +578,6 @@ class QueryExamListRequest extends PageRequest{
 	}
 }
 
-class QueryExamInfoResult {
-	DateTime? createTime;
-	String? deptName;
-	String? patientName;
-	String? patientAge;
-	List<DataItemDTO >? patientAgeInfo;
-	String? patientSex;
-	List<PatientInfoExt >? patientInfoExtList;
-	List<String >? associatedExamCodes;
-	RecordStatusEnum examStatus;
-
-	QueryExamInfoResult({
-		this.createTime,
-		this.deptName,
-		this.patientName,
-		this.patientAge,
-		this.patientAgeInfo,
-		this.patientSex,
-		this.patientInfoExtList,
-		this.associatedExamCodes,
-		this.examStatus = RecordStatusEnum.NotScanned,
-	});
-
-	factory QueryExamInfoResult.fromJson(Map<String, dynamic> map) {
-		return QueryExamInfoResult( 
-			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
-			deptName: map['DeptName'],
-			patientName: map['PatientName'],
-			patientAge: map['PatientAge'],
-			patientAgeInfo: map['PatientAgeInfo'] != null ? (map['PatientAgeInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
-			patientSex: map['PatientSex'],
-			patientInfoExtList: map['PatientInfoExtList'] != null ? (map['PatientInfoExtList'] as List).map((e)=>PatientInfoExt.fromJson(e as Map<String,dynamic>)).toList() : null,
-			associatedExamCodes: map['AssociatedExamCodes'] != null ? map['AssociatedExamCodes'].cast<String>().toList() : null,
-			examStatus: RecordStatusEnum.values.firstWhere((e) => e.index == map['ExamStatus']),
-		);
-	}
-
-	Map<String, dynamic> toJson() {
-		final map = Map<String, dynamic>();
-		if(createTime != null)
-			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
-		if(deptName != null)
-			map['DeptName'] = deptName;
-		if(patientName != null)
-			map['PatientName'] = patientName;
-		if(patientAge != null)
-			map['PatientAge'] = patientAge;
-		if(patientAgeInfo != null)
-			map['PatientAgeInfo'] = patientAgeInfo;
-		if(patientSex != null)
-			map['PatientSex'] = patientSex;
-		if(patientInfoExtList != null)
-			map['PatientInfoExtList'] = patientInfoExtList;
-		if(associatedExamCodes != null)
-			map['AssociatedExamCodes'] = associatedExamCodes;
-		map['ExamStatus'] = examStatus.index;
-		return map;
-	}
-}
-
 class QueryExamInfoRequest extends TokenRequest{
 	String? examCode;
 
@@ -1595,6 +1553,8 @@ class RecordInfoDTO extends BaseDTO{
 	List<DiagnosisInfoDTO >? diagnosisInfos;
 	bool isCollecting;
 	DateTime? startCollectingTime;
+	bool isUserReport;
+	bool isReferral;
 
 	RecordInfoDTO({
 		this.recordCode,
@@ -1616,6 +1576,8 @@ class RecordInfoDTO extends BaseDTO{
 		this.diagnosisInfos,
 		this.isCollecting = false,
 		this.startCollectingTime,
+		this.isUserReport = false,
+		this.isReferral = false,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -1644,6 +1606,8 @@ class RecordInfoDTO extends BaseDTO{
 			diagnosisInfos: map['DiagnosisInfos'] != null ? (map['DiagnosisInfos'] as List).map((e)=>DiagnosisInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			isCollecting: map['IsCollecting'],
 			startCollectingTime: map['StartCollectingTime'] != null ? DateTime.parse(map['StartCollectingTime']) : null,
+			isUserReport: map['IsUserReport'],
+			isReferral: map['IsReferral'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -1685,6 +1649,8 @@ class RecordInfoDTO extends BaseDTO{
 		map['IsCollecting'] = isCollecting;
 		if(startCollectingTime != null)
 			map['StartCollectingTime'] = JsonRpcUtils.dateFormat(startCollectingTime!);
+		map['IsUserReport'] = isUserReport;
+		map['IsReferral'] = isReferral;
 		return map;
 	}
 }

+ 7 - 0
lib/services/report.m.dart

@@ -353,6 +353,7 @@ class AddReportRequest extends TokenRequest{
 	List<String >? diagnosisLabels;
 	DiagnosisOrganEnum reportOrgan;
 	String? referralRecordCode;
+	bool isReferral;
 
 	AddReportRequest({
 		this.reportType = ReportTypeEnum.RemoteDiagnosis,
@@ -365,6 +366,7 @@ class AddReportRequest extends TokenRequest{
 		this.diagnosisLabels,
 		this.reportOrgan = DiagnosisOrganEnum.Null,
 		this.referralRecordCode,
+		this.isReferral = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -382,6 +384,7 @@ class AddReportRequest extends TokenRequest{
 			diagnosisLabels: map['DiagnosisLabels'] != null ? map['DiagnosisLabels'].cast<String>().toList() : null,
 			reportOrgan: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['ReportOrgan']),
 			referralRecordCode: map['ReferralRecordCode'],
+			isReferral: map['IsReferral'],
 			token: map['Token'],
 		);
 	}
@@ -406,6 +409,7 @@ class AddReportRequest extends TokenRequest{
 		map['ReportOrgan'] = reportOrgan.index;
 		if(referralRecordCode != null)
 			map['ReferralRecordCode'] = referralRecordCode;
+		map['IsReferral'] = isReferral;
 		return map;
 	}
 }
@@ -425,6 +429,7 @@ class ModifyReportRequest extends AddReportRequest{
 		List<String >? diagnosisLabels,
 		DiagnosisOrganEnum reportOrgan = DiagnosisOrganEnum.Null,
 		String? referralRecordCode,
+		bool isReferral = false,
 		String? token,
 	}) : super(
 			reportType: reportType,
@@ -437,6 +442,7 @@ class ModifyReportRequest extends AddReportRequest{
 			diagnosisLabels: diagnosisLabels,
 			reportOrgan: reportOrgan,
 			referralRecordCode: referralRecordCode,
+			isReferral: isReferral,
 			token: token,
 		);
 
@@ -453,6 +459,7 @@ class ModifyReportRequest extends AddReportRequest{
 			diagnosisLabels: map['DiagnosisLabels'] != null ? map['DiagnosisLabels'].cast<String>().toList() : null,
 			reportOrgan: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['ReportOrgan']),
 			referralRecordCode: map['ReferralRecordCode'],
+			isReferral: map['IsReferral'],
 			token: map['Token'],
 		);
 	}

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

@@ -393,6 +393,7 @@ class UserInfoByCodeDTO extends UserDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -434,6 +435,7 @@ class UserInfoByCodeDTO extends UserDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -480,6 +482,7 @@ class UserInfoByCodeDTO extends UserDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
@@ -1081,6 +1084,7 @@ class UserMigratoryInfo extends UserDTO{
 		String? rootOrganizationName,
 		List<String >? authorityGroups,
 		List<String >? bindDevices,
+		List<String >? bindDeviceOrganizations,
 		String? lastIP,
 		int logintimes = 0,
 		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
@@ -1122,6 +1126,7 @@ class UserMigratoryInfo extends UserDTO{
 			rootOrganizationName: rootOrganizationName,
 			authorityGroups: authorityGroups,
 			bindDevices: bindDevices,
+			bindDeviceOrganizations: bindDeviceOrganizations,
 			lastIP: lastIP,
 			logintimes: logintimes,
 			userState: userState,
@@ -1171,6 +1176,7 @@ class UserMigratoryInfo extends UserDTO{
 			rootOrganizationName: map['RootOrganizationName'],
 			authorityGroups: map['AuthorityGroups'] != null ? map['AuthorityGroups'].cast<String>().toList() : null,
 			bindDevices: map['BindDevices'] != null ? map['BindDevices'].cast<String>().toList() : null,
+			bindDeviceOrganizations: map['BindDeviceOrganizations'] != null ? map['BindDeviceOrganizations'].cast<String>().toList() : null,
 			lastIP: map['LastIP'],
 			logintimes: map['Logintimes'],
 			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),