bakamaka.guan 1 жил өмнө
parent
commit
9fe5e10899

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

@@ -290,6 +290,7 @@ class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
 	double pixel;
 	String? remedicalFileToken;
 	String? aIFileToken;
+	String? aIPreviewFileToken;
 	String? perImageJson;
 	DiagnosisConclusionEnum diagnosisConclusion;
 	List<DiagnosisOrganEnum >? diagnosisOrgans;
@@ -300,6 +301,7 @@ class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
 		this.pixel = 0,
 		this.remedicalFileToken,
 		this.aIFileToken,
+		this.aIPreviewFileToken,
 		this.perImageJson,
 		this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
 		this.diagnosisOrgans,
@@ -319,6 +321,7 @@ class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
 			pixel: double.parse(map['Pixel'].toString()),
 			remedicalFileToken: map['RemedicalFileToken'],
 			aIFileToken: map['AIFileToken'],
+			aIPreviewFileToken: map['AIPreviewFileToken'],
 			perImageJson: map['PerImageJson'],
 			diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
 			diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
@@ -338,6 +341,8 @@ class DiagnosisPerImageDTO extends AIDiagnosisPerImageDTO{
 			map['RemedicalFileToken'] = remedicalFileToken;
 		if(aIFileToken != null)
 			map['AIFileToken'] = aIFileToken;
+		if(aIPreviewFileToken != null)
+			map['AIPreviewFileToken'] = aIPreviewFileToken;
 		if(perImageJson != null)
 			map['PerImageJson'] = perImageJson;
 		map['DiagnosisConclusion'] = diagnosisConclusion.index;

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

@@ -7252,6 +7252,7 @@ enum CustomerRpcCode {
 	EndTimeFormatError,
 	RemoteConnectDeviceOccupied,
 	LogFileTokenEmpty,
+	UserIsAreadyAnotherDeviceUseRemoteConnect,
 }
 
 class ValidateTokenResult {

+ 32 - 4
lib/services/deployPlatform.dart

@@ -40,6 +40,17 @@ class DeployPlatformService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> saveLogsAsync(SaveLogsRequest request) async {
+		var rpcRst = await call("SaveLogsAsync", request);
+		return rpcRst;
+	}
+
+	Future<DeployPlatServerInfoDTO> getServerAsync(GetServerRequest request) async {
+		var rpcRst = await call("GetServerAsync", request);
+		var result = DeployPlatServerInfoDTO.fromJson(rpcRst as Map<String, dynamic>);
+		return result;
+	}
+
 	Future<List<DeployPlatOperatorDTO>> getOperatorListAsync() async {
 		var rpcRst = await call("GetOperatorListAsync", );
 		var result = (rpcRst as List).map((e)=>DeployPlatOperatorDTO.fromJson(e as Map<String, dynamic>)).toList();
@@ -77,6 +88,11 @@ class DeployPlatformService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> loginAsync(OperatorLoginRequest request) async {
+		var rpcRst = await call("LoginAsync", request);
+		return rpcRst;
+	}
+
 	Future<List<String>> findTextWithUrlAndPrefixAsync(FindTextWithUrlAndPrefixRequest request) async {
 		var rpcRst = await call("FindTextWithUrlAndPrefixAsync", request);
 		var result = (rpcRst as List).cast<String>().toList();
@@ -105,12 +121,18 @@ class DeployPlatformService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
-	Future<void> check() async {
-		await call("Check", );
+	Future<bool> check() async {
+		var rpcRst = await call("Check", );
+		return rpcRst;
+	}
+
+	Future<bool> getIsPublishing() async {
+		var rpcRst = await call("GetIsPublishing", );
+		return rpcRst;
 	}
 
-	Future<String> readAppSettingsJsonAsync() async {
-		var rpcRst = await call("ReadAppSettingsJsonAsync", );
+	Future<String> readAppSettingsJsonAsync(ReadAppSettingsJsonRequest request) async {
+		var rpcRst = await call("ReadAppSettingsJsonAsync", request);
 		return rpcRst;
 	}
 
@@ -137,5 +159,11 @@ class DeployPlatformService extends JsonRpcClientBase {
 		await call("StopServer", );
 	}
 
+	Future<List<String>> getPublishPackageLogsAsync() async {
+		var rpcRst = await call("GetPublishPackageLogsAsync", );
+		var result = (rpcRst as List).cast<String>().toList();
+		return result;
+	}
+
 }
 

+ 127 - 0
lib/services/deployPlatform.m.dart

@@ -9,6 +9,8 @@ class DeployPlatServerInfoDTO extends BaseDTO{
 	String? name;
 	bool isMaster;
 	String? masterServerId;
+	String? logs;
+	String? remoteServerIp;
 
 	DeployPlatServerInfoDTO({
 		this.id,
@@ -17,6 +19,8 @@ class DeployPlatServerInfoDTO extends BaseDTO{
 		this.name,
 		this.isMaster = false,
 		this.masterServerId,
+		this.logs,
+		this.remoteServerIp,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -32,6 +36,8 @@ class DeployPlatServerInfoDTO extends BaseDTO{
 			name: map['Name'],
 			isMaster: map['IsMaster'],
 			masterServerId: map['MasterServerId'],
+			logs: map['Logs'],
+			remoteServerIp: map['RemoteServerIp'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -50,6 +56,10 @@ class DeployPlatServerInfoDTO extends BaseDTO{
 		map['IsMaster'] = isMaster;
 		if(masterServerId != null)
 			map['MasterServerId'] = masterServerId;
+		if(logs != null)
+			map['Logs'] = logs;
+		if(remoteServerIp != null)
+			map['RemoteServerIp'] = remoteServerIp;
 		return map;
 	}
 }
@@ -60,6 +70,7 @@ class AddServerRequest {
 	String? name;
 	bool isMaster;
 	String? masterServerId;
+	String? remoteServerIp;
 
 	AddServerRequest({
 		this.serverID,
@@ -67,6 +78,7 @@ class AddServerRequest {
 		this.name,
 		this.isMaster = false,
 		this.masterServerId,
+		this.remoteServerIp,
 	});
 
 	factory AddServerRequest.fromJson(Map<String, dynamic> map) {
@@ -76,6 +88,7 @@ class AddServerRequest {
 			name: map['Name'],
 			isMaster: map['IsMaster'],
 			masterServerId: map['MasterServerId'],
+			remoteServerIp: map['RemoteServerIp'],
 		);
 	}
 
@@ -90,6 +103,8 @@ class AddServerRequest {
 		map['IsMaster'] = isMaster;
 		if(masterServerId != null)
 			map['MasterServerId'] = masterServerId;
+		if(remoteServerIp != null)
+			map['RemoteServerIp'] = remoteServerIp;
 		return map;
 	}
 }
@@ -101,6 +116,7 @@ class UpdateServerRequest {
 	String? name;
 	bool isMaster;
 	String? masterServerId;
+	String? remoteServerIp;
 
 	UpdateServerRequest({
 		this.id,
@@ -109,6 +125,7 @@ class UpdateServerRequest {
 		this.name,
 		this.isMaster = false,
 		this.masterServerId,
+		this.remoteServerIp,
 	});
 
 	factory UpdateServerRequest.fromJson(Map<String, dynamic> map) {
@@ -119,6 +136,7 @@ class UpdateServerRequest {
 			name: map['Name'],
 			isMaster: map['IsMaster'],
 			masterServerId: map['MasterServerId'],
+			remoteServerIp: map['RemoteServerIp'],
 		);
 	}
 
@@ -135,6 +153,55 @@ class UpdateServerRequest {
 		map['IsMaster'] = isMaster;
 		if(masterServerId != null)
 			map['MasterServerId'] = masterServerId;
+		if(remoteServerIp != null)
+			map['RemoteServerIp'] = remoteServerIp;
+		return map;
+	}
+}
+
+class SaveLogsRequest {
+	String? id;
+	String? logs;
+
+	SaveLogsRequest({
+		this.id,
+		this.logs,
+	});
+
+	factory SaveLogsRequest.fromJson(Map<String, dynamic> map) {
+		return SaveLogsRequest( 
+			id: map['Id'],
+			logs: map['Logs'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(id != null)
+			map['Id'] = id;
+		if(logs != null)
+			map['Logs'] = logs;
+		return map;
+	}
+}
+
+class GetServerRequest {
+	String? id;
+
+	GetServerRequest({
+		this.id,
+	});
+
+	factory GetServerRequest.fromJson(Map<String, dynamic> map) {
+		return GetServerRequest( 
+			id: map['Id'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(id != null)
+			map['Id'] = id;
 		return map;
 	}
 }
@@ -454,6 +521,32 @@ class DeleteDeployPlatOperatorRequest {
 	}
 }
 
+class OperatorLoginRequest {
+	String? name;
+	String? password;
+
+	OperatorLoginRequest({
+		this.name,
+		this.password,
+	});
+
+	factory OperatorLoginRequest.fromJson(Map<String, dynamic> map) {
+		return OperatorLoginRequest( 
+			name: map['Name'],
+			password: map['Password'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(name != null)
+			map['Name'] = name;
+		if(password != null)
+			map['Password'] = password;
+		return map;
+	}
+}
+
 class FindTextWithUrlAndPrefixRequest {
 	String? url;
 	String? prefix;
@@ -493,6 +586,7 @@ class GeneratePackageRequest {
 	String? selectedAndroidClientZipUrl;
 	String? selectedSonoPostZipUrl;
 	String? selectedWindowsFISSDKZipUrl;
+	String? language;
 
 	GeneratePackageRequest({
 		this.deployRecordId,
@@ -507,6 +601,7 @@ class GeneratePackageRequest {
 		this.selectedAndroidClientZipUrl,
 		this.selectedSonoPostZipUrl,
 		this.selectedWindowsFISSDKZipUrl,
+		this.language,
 	});
 
 	factory GeneratePackageRequest.fromJson(Map<String, dynamic> map) {
@@ -523,6 +618,7 @@ class GeneratePackageRequest {
 			selectedAndroidClientZipUrl: map['SelectedAndroidClientZipUrl'],
 			selectedSonoPostZipUrl: map['SelectedSonoPostZipUrl'],
 			selectedWindowsFISSDKZipUrl: map['SelectedWindowsFISSDKZipUrl'],
+			language: map['Language'],
 		);
 	}
 
@@ -546,6 +642,8 @@ class GeneratePackageRequest {
 			map['SelectedSonoPostZipUrl'] = selectedSonoPostZipUrl;
 		if(selectedWindowsFISSDKZipUrl != null)
 			map['SelectedWindowsFISSDKZipUrl'] = selectedWindowsFISSDKZipUrl;
+		if(language != null)
+			map['Language'] = language;
 		return map;
 	}
 }
@@ -592,21 +690,45 @@ class CancelPackagingRequest {
 	}
 }
 
+class ReadAppSettingsJsonRequest {
+	int settingType;
+
+	ReadAppSettingsJsonRequest({
+		this.settingType = 0,
+	});
+
+	factory ReadAppSettingsJsonRequest.fromJson(Map<String, dynamic> map) {
+		return ReadAppSettingsJsonRequest( 
+			settingType: map['SettingType'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		map['SettingType'] = settingType;
+		return map;
+	}
+}
+
 class ModifyAppSettingsJsonRequest {
+	int settingType;
 	String? json;
 
 	ModifyAppSettingsJsonRequest({
+		this.settingType = 0,
 		this.json,
 	});
 
 	factory ModifyAppSettingsJsonRequest.fromJson(Map<String, dynamic> map) {
 		return ModifyAppSettingsJsonRequest( 
+			settingType: map['SettingType'],
 			json: map['Json'],
 		);
 	}
 
 	Map<String, dynamic> toJson() {
 		final map = Map<String, dynamic>();
+		map['SettingType'] = settingType;
 		if(json != null)
 			map['Json'] = json;
 		return map;
@@ -617,11 +739,13 @@ class DeployRequest {
 	bool isUpgradeServer;
 	String? serverZipUrl;
 	String? upgradeSettings;
+	String? updateMode;
 
 	DeployRequest({
 		this.isUpgradeServer = false,
 		this.serverZipUrl,
 		this.upgradeSettings,
+		this.updateMode,
 	});
 
 	factory DeployRequest.fromJson(Map<String, dynamic> map) {
@@ -629,6 +753,7 @@ class DeployRequest {
 			isUpgradeServer: map['IsUpgradeServer'],
 			serverZipUrl: map['ServerZipUrl'],
 			upgradeSettings: map['UpgradeSettings'],
+			updateMode: map['UpdateMode'],
 		);
 	}
 
@@ -639,6 +764,8 @@ class DeployRequest {
 			map['ServerZipUrl'] = serverZipUrl;
 		if(upgradeSettings != null)
 			map['UpgradeSettings'] = upgradeSettings;
+		if(updateMode != null)
+			map['UpdateMode'] = updateMode;
 		return map;
 	}
 }

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

@@ -265,9 +265,11 @@ class DeviceExtendInfoDTO extends DeviceInfoDTO{
 
 class GetDeviceRequest extends TokenRequest{
 	String? deviceCode;
+	bool isNeedSyn;
 
 	GetDeviceRequest({
 		this.deviceCode,
+		this.isNeedSyn = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -276,6 +278,7 @@ class GetDeviceRequest extends TokenRequest{
 	factory GetDeviceRequest.fromJson(Map<String, dynamic> map) {
 		return GetDeviceRequest( 
 			deviceCode: map['DeviceCode'],
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -284,6 +287,7 @@ class GetDeviceRequest extends TokenRequest{
 		final map = super.toJson();
 		if(deviceCode != null)
 			map['DeviceCode'] = deviceCode;
+		map['IsNeedSyn'] = isNeedSyn;
 		return map;
 	}
 }
@@ -831,6 +835,7 @@ class DeviceServerSettingResult {
 	int mergedVideoOutputHeight;
 	bool isSelfRtcService;
 	int remoteControlAskTimeoutSec;
+	String? liveProtocol;
 
 	DeviceServerSettingResult({
 		this.serverConfigList,
@@ -844,6 +849,7 @@ class DeviceServerSettingResult {
 		this.mergedVideoOutputHeight = 0,
 		this.isSelfRtcService = false,
 		this.remoteControlAskTimeoutSec = 0,
+		this.liveProtocol,
 	});
 
 	factory DeviceServerSettingResult.fromJson(Map<String, dynamic> map) {
@@ -859,6 +865,7 @@ class DeviceServerSettingResult {
 			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
 			isSelfRtcService: map['IsSelfRtcService'],
 			remoteControlAskTimeoutSec: map['RemoteControlAskTimeoutSec'],
+			liveProtocol: map['LiveProtocol'],
 		);
 	}
 
@@ -877,6 +884,8 @@ class DeviceServerSettingResult {
 		map['MergedVideoOutputHeight'] = mergedVideoOutputHeight;
 		map['IsSelfRtcService'] = isSelfRtcService;
 		map['RemoteControlAskTimeoutSec'] = remoteControlAskTimeoutSec;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		return map;
 	}
 }
@@ -1357,6 +1366,7 @@ class VideoDeviceInfoDTO {
 
 class JoinDeviceLiveRoomResult extends TokenRequest{
 	int roomNo;
+	String? liveProtocol;
 	String? deviceCode;
 	bool mergedChannel;
 	int mergedVideoOutputWidth;
@@ -1366,6 +1376,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 
 	JoinDeviceLiveRoomResult({
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.deviceCode,
 		this.mergedChannel = false,
 		this.mergedVideoOutputWidth = 0,
@@ -1380,6 +1391,7 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 	factory JoinDeviceLiveRoomResult.fromJson(Map<String, dynamic> map) {
 		return JoinDeviceLiveRoomResult( 
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			deviceCode: map['DeviceCode'],
 			mergedChannel: map['MergedChannel'],
 			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
@@ -1393,6 +1405,8 @@ class JoinDeviceLiveRoomResult extends TokenRequest{
 	Map<String, dynamic> toJson() {
 		final map = super.toJson();
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		if(deviceCode != null)
 			map['DeviceCode'] = deviceCode;
 		map['MergedChannel'] = mergedChannel;
@@ -1532,6 +1546,7 @@ class CreateLiveShareInfoRequest extends TokenRequest{
 
 class JoinDeviceLiveRoomByShareResult {
 	int roomNo;
+	String? liveProtocol;
 	String? deviceCode;
 	bool mergedChannel;
 	int mergedVideoOutputWidth;
@@ -1541,6 +1556,7 @@ class JoinDeviceLiveRoomByShareResult {
 
 	JoinDeviceLiveRoomByShareResult({
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.deviceCode,
 		this.mergedChannel = false,
 		this.mergedVideoOutputWidth = 0,
@@ -1552,6 +1568,7 @@ class JoinDeviceLiveRoomByShareResult {
 	factory JoinDeviceLiveRoomByShareResult.fromJson(Map<String, dynamic> map) {
 		return JoinDeviceLiveRoomByShareResult( 
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			deviceCode: map['DeviceCode'],
 			mergedChannel: map['MergedChannel'],
 			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
@@ -1564,6 +1581,8 @@ class JoinDeviceLiveRoomByShareResult {
 	Map<String, dynamic> toJson() {
 		final map = Map<String, dynamic>();
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		if(deviceCode != null)
 			map['DeviceCode'] = deviceCode;
 		map['MergedChannel'] = mergedChannel;
@@ -1894,9 +1913,11 @@ class ControlDeviceConnectRequest extends BaseControlDeviceRequest{
 	ControlDeviceConnectRequest({
 		this.deviceCode,
 		ControlDeviceParameterEnum controlType = ControlDeviceParameterEnum.Start,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			controlType: controlType,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -1904,6 +1925,7 @@ class ControlDeviceConnectRequest extends BaseControlDeviceRequest{
 		return ControlDeviceConnectRequest( 
 			deviceCode: map['DeviceCode'],
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -1923,10 +1945,12 @@ class ControlDeviceParameterRequest extends BaseControlDeviceParameterRequest{
 		this.deviceCode,
 		List<AdditionParameterDTO >? parameters,
 		ControlDeviceParameterEnum controlType = ControlDeviceParameterEnum.Start,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			parameters: parameters,
 			controlType: controlType,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -1935,6 +1959,7 @@ class ControlDeviceParameterRequest extends BaseControlDeviceParameterRequest{
 			deviceCode: map['DeviceCode'],
 			parameters: map['Parameters'] != null ? (map['Parameters'] as List).map((e)=>AdditionParameterDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3011,9 +3036,11 @@ class UploadDevicePrinterRequest extends TokenRequest{
 
 class RestartDeviceRequest extends TokenRequest{
 	String? deviceCode;
+	bool isNeedSyn;
 
 	RestartDeviceRequest({
 		this.deviceCode,
+		this.isNeedSyn = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -3022,6 +3049,7 @@ class RestartDeviceRequest extends TokenRequest{
 	factory RestartDeviceRequest.fromJson(Map<String, dynamic> map) {
 		return RestartDeviceRequest( 
 			deviceCode: map['DeviceCode'],
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3030,6 +3058,7 @@ class RestartDeviceRequest extends TokenRequest{
 		final map = super.toJson();
 		if(deviceCode != null)
 			map['DeviceCode'] = deviceCode;
+		map['IsNeedSyn'] = isNeedSyn;
 		return map;
 	}
 }
@@ -3151,9 +3180,13 @@ class GetResultFromServerRequest extends TokenRequest{
 
 class RemoteConnectStautsRequest extends TokenRequest{
 	String? userCode;
+	LoginSource loginSource;
+	bool isNeedSyn;
 
 	RemoteConnectStautsRequest({
 		this.userCode,
+		this.loginSource = LoginSource.PC,
+		this.isNeedSyn = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -3162,6 +3195,8 @@ class RemoteConnectStautsRequest extends TokenRequest{
 	factory RemoteConnectStautsRequest.fromJson(Map<String, dynamic> map) {
 		return RemoteConnectStautsRequest( 
 			userCode: map['UserCode'],
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3170,15 +3205,19 @@ class RemoteConnectStautsRequest extends TokenRequest{
 		final map = super.toJson();
 		if(userCode != null)
 			map['UserCode'] = userCode;
+		map['LoginSource'] = loginSource.index;
+		map['IsNeedSyn'] = isNeedSyn;
 		return map;
 	}
 }
 
 class RemoteConnectHeartRateRequest extends TokenRequest{
 	TransactionTypeEnum transactionType;
+	bool isNeedSyn;
 
 	RemoteConnectHeartRateRequest({
 		this.transactionType = TransactionTypeEnum.Consultion,
+		this.isNeedSyn = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -3187,6 +3226,7 @@ class RemoteConnectHeartRateRequest extends TokenRequest{
 	factory RemoteConnectHeartRateRequest.fromJson(Map<String, dynamic> map) {
 		return RemoteConnectHeartRateRequest( 
 			transactionType: TransactionTypeEnum.values.firstWhere((e) => e.index == map['TransactionType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3194,6 +3234,7 @@ class RemoteConnectHeartRateRequest extends TokenRequest{
 	Map<String, dynamic> toJson() {
 		final map = super.toJson();
 		map['TransactionType'] = transactionType.index;
+		map['IsNeedSyn'] = isNeedSyn;
 		return map;
 	}
 }
@@ -3214,9 +3255,11 @@ class AddUserRemoteConnectRequest extends GetDeviceRequest{
 		this.roomId,
 		this.statusEnum = ConnectStatusEnum.UnConnect,
 		String? deviceCode,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			deviceCode: deviceCode,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -3225,6 +3268,7 @@ class AddUserRemoteConnectRequest extends GetDeviceRequest{
 			roomId: map['RoomId'],
 			statusEnum: ConnectStatusEnum.values.firstWhere((e) => e.index == map['StatusEnum']),
 			deviceCode: map['DeviceCode'],
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}

+ 11 - 0
lib/services/education.m.dart

@@ -176,6 +176,7 @@ enum CourseTypeEnum {
 	Unknown,
 	LiveCourse,
 	VideoCourse,
+	Multimedia,
 }
 
 enum CourseAudienceTypeEnum {
@@ -2455,6 +2456,7 @@ class LiveCourseMember {
 class InitiateLiveCourseResult extends LiveCourseBaseResult{
 	String? initiatorCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	String? userSign;
 	List<LiveCourseMember >? memberLiveDatas;
@@ -2462,6 +2464,7 @@ class InitiateLiveCourseResult extends LiveCourseBaseResult{
 	InitiateLiveCourseResult({
 		this.initiatorCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.userSign,
 		this.memberLiveDatas,
@@ -2474,6 +2477,7 @@ class InitiateLiveCourseResult extends LiveCourseBaseResult{
 		return InitiateLiveCourseResult( 
 			initiatorCode: map['InitiatorCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			appId: map['AppId'],
 			userSign: map['UserSign'],
 			memberLiveDatas: map['MemberLiveDatas'] != null ? (map['MemberLiveDatas'] as List).map((e)=>LiveCourseMember.fromJson(e as Map<String,dynamic>)).toList() : null,
@@ -2486,6 +2490,8 @@ class InitiateLiveCourseResult extends LiveCourseBaseResult{
 		if(initiatorCode != null)
 			map['InitiatorCode'] = initiatorCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;
@@ -2523,6 +2529,7 @@ class InitiateLiveCourseRequest extends TokenRequest{
 class JoinLiveCourseResult extends LiveCourseBaseResult{
 	String? userCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	String? userSign;
 	List<LiveCourseMember >? memberLiveDatas;
@@ -2530,6 +2537,7 @@ class JoinLiveCourseResult extends LiveCourseBaseResult{
 	JoinLiveCourseResult({
 		this.userCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.userSign,
 		this.memberLiveDatas,
@@ -2542,6 +2550,7 @@ class JoinLiveCourseResult extends LiveCourseBaseResult{
 		return JoinLiveCourseResult( 
 			userCode: map['UserCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			appId: map['AppId'],
 			userSign: map['UserSign'],
 			memberLiveDatas: map['MemberLiveDatas'] != null ? (map['MemberLiveDatas'] as List).map((e)=>LiveCourseMember.fromJson(e as Map<String,dynamic>)).toList() : null,
@@ -2554,6 +2563,8 @@ class JoinLiveCourseResult extends LiveCourseBaseResult{
 		if(userCode != null)
 			map['UserCode'] = userCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;

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

@@ -2175,6 +2175,7 @@ class InitiateLiveConsultationResult {
 	String? consultationCode;
 	String? initiatorCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	String? userSign;
 	List<LiveConsultationMember >? memberLiveDatas;
@@ -2183,6 +2184,7 @@ class InitiateLiveConsultationResult {
 		this.consultationCode,
 		this.initiatorCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.userSign,
 		this.memberLiveDatas,
@@ -2193,6 +2195,7 @@ class InitiateLiveConsultationResult {
 			consultationCode: map['ConsultationCode'],
 			initiatorCode: map['InitiatorCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			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,
@@ -2206,6 +2209,8 @@ class InitiateLiveConsultationResult {
 		if(initiatorCode != null)
 			map['InitiatorCode'] = initiatorCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;
@@ -2431,6 +2436,7 @@ class JoinLiveConsultationResult {
 	String? consultationCode;
 	String? userCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	String? userSign;
 	List<LiveConsultationMember >? memberLiveDatas;
@@ -2440,6 +2446,7 @@ class JoinLiveConsultationResult {
 		this.consultationCode,
 		this.userCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.userSign,
 		this.memberLiveDatas,
@@ -2451,6 +2458,7 @@ class JoinLiveConsultationResult {
 			consultationCode: map['ConsultationCode'],
 			userCode: map['UserCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			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,
@@ -2465,6 +2473,8 @@ class JoinLiveConsultationResult {
 		if(userCode != null)
 			map['UserCode'] = userCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;
@@ -2559,6 +2569,7 @@ class AcceptLiveConsultationResult {
 	String? consultationCode;
 	String? userCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	String? userSign;
 	List<LiveConsultationMember >? memberLiveDatas;
@@ -2568,6 +2579,7 @@ class AcceptLiveConsultationResult {
 		this.consultationCode,
 		this.userCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.userSign,
 		this.memberLiveDatas,
@@ -2579,6 +2591,7 @@ class AcceptLiveConsultationResult {
 			consultationCode: map['ConsultationCode'],
 			userCode: map['UserCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			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,
@@ -2593,6 +2606,8 @@ class AcceptLiveConsultationResult {
 		if(userCode != null)
 			map['UserCode'] = userCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		if(userSign != null)
 			map['UserSign'] = userSign;
@@ -3317,9 +3332,11 @@ class ApplyEmergencyTreatmentRequest extends TokenRequest{
 
 class BaseControlDeviceRequest extends TokenRequest{
 	ControlDeviceParameterEnum controlType;
+	bool isNeedSyn;
 
 	BaseControlDeviceRequest({
 		this.controlType = ControlDeviceParameterEnum.Start,
+		this.isNeedSyn = false,
 		String? token,
 	}) : super(
 			token: token,
@@ -3328,6 +3345,7 @@ class BaseControlDeviceRequest extends TokenRequest{
 	factory BaseControlDeviceRequest.fromJson(Map<String, dynamic> map) {
 		return BaseControlDeviceRequest( 
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3335,6 +3353,7 @@ class BaseControlDeviceRequest extends TokenRequest{
 	Map<String, dynamic> toJson() {
 		final map = super.toJson();
 		map['ControlType'] = controlType.index;
+		map['IsNeedSyn'] = isNeedSyn;
 		return map;
 	}
 }
@@ -3345,9 +3364,11 @@ class BaseControlDeviceParameterRequest extends BaseControlDeviceRequest{
 	BaseControlDeviceParameterRequest({
 		this.parameters,
 		ControlDeviceParameterEnum controlType = ControlDeviceParameterEnum.Start,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			controlType: controlType,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -3355,6 +3376,7 @@ class BaseControlDeviceParameterRequest extends BaseControlDeviceRequest{
 		return BaseControlDeviceParameterRequest( 
 			parameters: map['Parameters'] != null ? (map['Parameters'] as List).map((e)=>AdditionParameterDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -3374,10 +3396,12 @@ class ControlDeviceParameterInConsultationRequest extends BaseControlDeviceParam
 		this.consultationCode,
 		List<AdditionParameterDTO >? parameters,
 		ControlDeviceParameterEnum controlType = ControlDeviceParameterEnum.Start,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			parameters: parameters,
 			controlType: controlType,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -3386,6 +3410,7 @@ class ControlDeviceParameterInConsultationRequest extends BaseControlDeviceParam
 			consultationCode: map['ConsultationCode'],
 			parameters: map['Parameters'] != null ? (map['Parameters'] as List).map((e)=>AdditionParameterDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -4837,14 +4862,18 @@ class QueryEmergencyDataResult {
 class ControlDeviceResponseRequest extends BaseControlDeviceRequest{
 	String? userCode;
 	String? userName;
+	LoginSource loginSource;
 
 	ControlDeviceResponseRequest({
 		this.userCode,
 		this.userName,
+		this.loginSource = LoginSource.PC,
 		ControlDeviceParameterEnum controlType = ControlDeviceParameterEnum.Start,
+		bool isNeedSyn = false,
 		String? token,
 	}) : super(
 			controlType: controlType,
+			isNeedSyn: isNeedSyn,
 			token: token,
 		);
 
@@ -4852,7 +4881,9 @@ class ControlDeviceResponseRequest extends BaseControlDeviceRequest{
 		return ControlDeviceResponseRequest( 
 			userCode: map['UserCode'],
 			userName: map['UserName'],
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			isNeedSyn: map['IsNeedSyn'],
 			token: map['Token'],
 		);
 	}
@@ -4863,6 +4894,7 @@ class ControlDeviceResponseRequest extends BaseControlDeviceRequest{
 			map['UserCode'] = userCode;
 		if(userName != null)
 			map['UserName'] = userName;
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }

+ 48 - 8
lib/services/notification.m.dart

@@ -136,14 +136,24 @@ enum ControlDeviceParameterEnum {
 	GetProbeApplication,
 }
 
+enum LoginSource {
+	PC,
+	Mobile,
+	Pad,
+	Web,
+	US,
+}
+
 class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 	String? userCode;
 	ControlDeviceParameterEnum controlType;
+	LoginSource loginSource;
 
 	ApplyProbeApplicationSettingNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.userCode,
 		this.controlType = ControlDeviceParameterEnum.Start,
+		this.loginSource = LoginSource.PC,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -157,6 +167,7 @@ class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			userCode: map['UserCode'],
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -167,6 +178,7 @@ class ApplyProbeApplicationSettingNotification extends NotificationDTO{
 		if(userCode != null)
 			map['UserCode'] = userCode;
 		map['ControlType'] = controlType.index;
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }
@@ -438,6 +450,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 	String? controlUserName;
 	ControlDeviceParameterEnum controlType;
 	List<AdditionParameterDTO >? parameters;
+	LoginSource loginSource;
 
 	DeviceControlledParametersNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -445,6 +458,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 		this.controlUserName,
 		this.controlType = ControlDeviceParameterEnum.Start,
 		this.parameters,
+		this.loginSource = LoginSource.PC,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -460,6 +474,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 			controlUserName: map['ControlUserName'],
 			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']),
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -474,6 +489,7 @@ class DeviceControlledParametersNotification extends NotificationDTO{
 		map['ControlType'] = controlType.index;
 		if(parameters != null)
 			map['Parameters'] = parameters;
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }
@@ -1075,6 +1091,7 @@ class ConnectStatusToDeviceNotification extends NotificationDTO{
 	String? controlUserName;
 	ControlDeviceParameterEnum controlType;
 	TransactionTypeEnum transactionType;
+	LoginSource loginSource;
 
 	ConnectStatusToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
@@ -1082,6 +1099,7 @@ class ConnectStatusToDeviceNotification extends NotificationDTO{
 		this.controlUserName,
 		this.controlType = ControlDeviceParameterEnum.Start,
 		this.transactionType = TransactionTypeEnum.Consultion,
+		this.loginSource = LoginSource.PC,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -1097,6 +1115,7 @@ class ConnectStatusToDeviceNotification extends NotificationDTO{
 			controlUserName: map['ControlUserName'],
 			controlType: ControlDeviceParameterEnum.values.firstWhere((e) => e.index == map['ControlType']),
 			transactionType: TransactionTypeEnum.values.firstWhere((e) => e.index == map['TransactionType']),
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -1110,6 +1129,7 @@ class ConnectStatusToDeviceNotification extends NotificationDTO{
 			map['ControlUserName'] = controlUserName;
 		map['ControlType'] = controlType.index;
 		map['TransactionType'] = transactionType.index;
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }
@@ -1198,6 +1218,7 @@ class VideoDeviceOutputInfo {
 class StartLiveToDeviceNotification extends NotificationDTO{
 	String? liveRoomCode;
 	int roomNo;
+	String? liveProtocol;
 	int appId;
 	bool mergedChannel;
 	int mergedVideoOutputWidth;
@@ -1208,6 +1229,7 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.liveRoomCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.appId = 0,
 		this.mergedChannel = false,
 		this.mergedVideoOutputWidth = 0,
@@ -1226,6 +1248,7 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			liveRoomCode: map['LiveRoomCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			appId: map['AppId'],
 			mergedChannel: map['MergedChannel'],
 			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
@@ -1241,6 +1264,8 @@ class StartLiveToDeviceNotification extends NotificationDTO{
 		if(liveRoomCode != null)
 			map['LiveRoomCode'] = liveRoomCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['AppId'] = appId;
 		map['MergedChannel'] = mergedChannel;
 		map['MergedVideoOutputWidth'] = mergedVideoOutputWidth;
@@ -1465,14 +1490,6 @@ enum LiveConsultationMemberStatus {
 	Left,
 }
 
-enum LoginSource {
-	PC,
-	Mobile,
-	Pad,
-	Web,
-	US,
-}
-
 class LiveData {
 	int height;
 	int width;
@@ -1694,12 +1711,14 @@ class HeartRateLeaveCourseNotification extends NotificationDTO{
 class InviteLiveCourseNotification extends NotificationDTO{
 	String? courseCode;
 	int roomNo;
+	String? liveProtocol;
 	LiveConsultationMember? initiator;
 
 	InviteLiveCourseNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.courseCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.initiator,
 		String? code,
 		bool isResponse = false,
@@ -1714,6 +1733,7 @@ class InviteLiveCourseNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			courseCode: map['CourseCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			initiator: map['Initiator'] != null ? LiveConsultationMember.fromJson(map['Initiator']) : null,
 			code: map['Code'],
 			isResponse: map['IsResponse'],
@@ -1725,6 +1745,8 @@ class InviteLiveCourseNotification extends NotificationDTO{
 		if(courseCode != null)
 			map['CourseCode'] = courseCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		if(initiator != null)
 			map['Initiator'] = initiator;
 		return map;
@@ -2377,11 +2399,13 @@ class RejectApplyConsultationNotification extends NotificationDTO{
 
 class StartConsolutionHeartRateToDeviceNotification extends NotificationDTO{
 	String? liveRoomCode;
+	String? liveProtocol;
 	int intervalSeconds;
 
 	StartConsolutionHeartRateToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.liveRoomCode,
+		this.liveProtocol,
 		this.intervalSeconds = 0,
 		String? code,
 		bool isResponse = false,
@@ -2395,6 +2419,7 @@ class StartConsolutionHeartRateToDeviceNotification extends NotificationDTO{
 		return StartConsolutionHeartRateToDeviceNotification( 
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			liveRoomCode: map['LiveRoomCode'],
+			liveProtocol: map['LiveProtocol'],
 			intervalSeconds: map['IntervalSeconds'],
 			code: map['Code'],
 			isResponse: map['IsResponse'],
@@ -2405,6 +2430,8 @@ class StartConsolutionHeartRateToDeviceNotification extends NotificationDTO{
 		final map = super.toJson();
 		if(liveRoomCode != null)
 			map['LiveRoomCode'] = liveRoomCode;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		map['IntervalSeconds'] = intervalSeconds;
 		return map;
 	}
@@ -2486,10 +2513,12 @@ class ProbeApplicationSettingResponseNotification extends NotificationDTO{
 
 class CancelLogDownloadNotification extends NotificationDTO{
 	String? controlUserCode;
+	LoginSource loginSource;
 
 	CancelLogDownloadNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.controlUserCode,
+		this.loginSource = LoginSource.PC,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -2502,6 +2531,7 @@ class CancelLogDownloadNotification extends NotificationDTO{
 		return CancelLogDownloadNotification( 
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			controlUserCode: map['ControlUserCode'],
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -2511,6 +2541,7 @@ class CancelLogDownloadNotification extends NotificationDTO{
 		final map = super.toJson();
 		if(controlUserCode != null)
 			map['ControlUserCode'] = controlUserCode;
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }
@@ -2923,12 +2954,14 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 	String? controlUserCode;
 	DateTime? startTime;
 	DateTime? endTime;
+	LoginSource loginSource;
 
 	GetRemoteLogToDeviceNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.controlUserCode,
 		this.startTime,
 		this.endTime,
+		this.loginSource = LoginSource.PC,
 		String? code,
 		bool isResponse = false,
 	}) : super(
@@ -2943,6 +2976,7 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 			controlUserCode: map['ControlUserCode'],
 			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']),
 			code: map['Code'],
 			isResponse: map['IsResponse'],
 		);
@@ -2956,6 +2990,7 @@ class GetRemoteLogToDeviceNotification extends NotificationDTO{
 			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
 		if(endTime != null)
 			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
+		map['LoginSource'] = loginSource.index;
 		return map;
 	}
 }
@@ -3613,12 +3648,14 @@ class HeartRateLeaveConsultationNotification extends NotificationDTO{
 class InviteLiveConsultationNotification extends NotificationDTO{
 	String? consultationCode;
 	int roomNo;
+	String? liveProtocol;
 	LiveConsultationMember? initiator;
 
 	InviteLiveConsultationNotification({
 		NotificationTypeEnum notificationType = NotificationTypeEnum.Unknown,
 		this.consultationCode,
 		this.roomNo = 0,
+		this.liveProtocol,
 		this.initiator,
 		String? code,
 		bool isResponse = false,
@@ -3633,6 +3670,7 @@ class InviteLiveConsultationNotification extends NotificationDTO{
 			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
 			consultationCode: map['ConsultationCode'],
 			roomNo: map['RoomNo'],
+			liveProtocol: map['LiveProtocol'],
 			initiator: map['Initiator'] != null ? LiveConsultationMember.fromJson(map['Initiator']) : null,
 			code: map['Code'],
 			isResponse: map['IsResponse'],
@@ -3644,6 +3682,8 @@ class InviteLiveConsultationNotification extends NotificationDTO{
 		if(consultationCode != null)
 			map['ConsultationCode'] = consultationCode;
 		map['RoomNo'] = roomNo;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		if(initiator != null)
 			map['Initiator'] = initiator;
 		return map;

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

@@ -747,6 +747,7 @@ class ServerSettingResult {
 	int liveConsultationRateSeconds;
 	String? cMSUrl;
 	bool isSelfRtcService;
+	String? liveProtocol;
 
 	ServerSettingResult({
 		this.serverLangugeList,
@@ -757,6 +758,7 @@ class ServerSettingResult {
 		this.liveConsultationRateSeconds = 0,
 		this.cMSUrl,
 		this.isSelfRtcService = false,
+		this.liveProtocol,
 	});
 
 	factory ServerSettingResult.fromJson(Map<String, dynamic> map) {
@@ -769,6 +771,7 @@ class ServerSettingResult {
 			liveConsultationRateSeconds: map['LiveConsultationRateSeconds'],
 			cMSUrl: map['CMSUrl'],
 			isSelfRtcService: map['IsSelfRtcService'],
+			liveProtocol: map['LiveProtocol'],
 		);
 	}
 
@@ -786,6 +789,8 @@ class ServerSettingResult {
 		if(cMSUrl != null)
 			map['CMSUrl'] = cMSUrl;
 		map['IsSelfRtcService'] = isSelfRtcService;
+		if(liveProtocol != null)
+			map['LiveProtocol'] = liveProtocol;
 		return map;
 	}
 }

+ 183 - 40
lib/services/other.m.dart

@@ -56,11 +56,13 @@ class GenerateRoomUrlRequest {
 
 class GenerateRoomUrlResult {
 	String? rtmpUrl;
+	String? rtmpPushUrl;
 	String? hlsUrl;
 	String? flvUrl;
 
 	GenerateRoomUrlResult({
 		this.rtmpUrl,
+		this.rtmpPushUrl,
 		this.hlsUrl,
 		this.flvUrl,
 	});
@@ -68,6 +70,7 @@ class GenerateRoomUrlResult {
 	factory GenerateRoomUrlResult.fromJson(Map<String, dynamic> map) {
 		return GenerateRoomUrlResult( 
 			rtmpUrl: map['RtmpUrl'],
+			rtmpPushUrl: map['RtmpPushUrl'],
 			hlsUrl: map['HlsUrl'],
 			flvUrl: map['FlvUrl'],
 		);
@@ -77,6 +80,8 @@ class GenerateRoomUrlResult {
 		final map = Map<String, dynamic>();
 		if(rtmpUrl != null)
 			map['RtmpUrl'] = rtmpUrl;
+		if(rtmpPushUrl != null)
+			map['RtmpPushUrl'] = rtmpPushUrl;
 		if(hlsUrl != null)
 			map['HlsUrl'] = hlsUrl;
 		if(flvUrl != null)
@@ -1789,6 +1794,89 @@ class GetDevicePrinterRequest extends TokenRequest{
 	}
 }
 
+class UserRemoteConnectRequest {
+	TransactionTypeEnum transactionType;
+	ConnectStatusEnum statusEnum;
+	String? userToken;
+	String? deviceToken;
+	String? userCode;
+	String? roomId;
+	String? deviceCode;
+	LoginSource loginSource;
+	bool isNeedSyn;
+
+	UserRemoteConnectRequest({
+		this.transactionType = TransactionTypeEnum.Consultion,
+		this.statusEnum = ConnectStatusEnum.UnConnect,
+		this.userToken,
+		this.deviceToken,
+		this.userCode,
+		this.roomId,
+		this.deviceCode,
+		this.loginSource = LoginSource.PC,
+		this.isNeedSyn = false,
+	});
+
+	factory UserRemoteConnectRequest.fromJson(Map<String, dynamic> map) {
+		return UserRemoteConnectRequest( 
+			transactionType: TransactionTypeEnum.values.firstWhere((e) => e.index == map['TransactionType']),
+			statusEnum: ConnectStatusEnum.values.firstWhere((e) => e.index == map['StatusEnum']),
+			userToken: map['UserToken'],
+			deviceToken: map['DeviceToken'],
+			userCode: map['UserCode'],
+			roomId: map['RoomId'],
+			deviceCode: map['DeviceCode'],
+			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
+			isNeedSyn: map['IsNeedSyn'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		map['TransactionType'] = transactionType.index;
+		map['StatusEnum'] = statusEnum.index;
+		if(userToken != null)
+			map['UserToken'] = userToken;
+		if(deviceToken != null)
+			map['DeviceToken'] = deviceToken;
+		if(userCode != null)
+			map['UserCode'] = userCode;
+		if(roomId != null)
+			map['RoomId'] = roomId;
+		if(deviceCode != null)
+			map['DeviceCode'] = deviceCode;
+		map['LoginSource'] = loginSource.index;
+		map['IsNeedSyn'] = isNeedSyn;
+		return map;
+	}
+}
+
+class RemoteConnectDataRequest {
+	String? roomCode;
+	UserRemoteConnectRequest? userRemoteConnect;
+
+	RemoteConnectDataRequest({
+		this.roomCode,
+		this.userRemoteConnect,
+	});
+
+	factory RemoteConnectDataRequest.fromJson(Map<String, dynamic> map) {
+		return RemoteConnectDataRequest( 
+			roomCode: map['RoomCode'],
+			userRemoteConnect: map['UserRemoteConnect'] != null ? UserRemoteConnectRequest.fromJson(map['UserRemoteConnect']) : null,
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(roomCode != null)
+			map['RoomCode'] = roomCode;
+		if(userRemoteConnect != null)
+			map['UserRemoteConnect'] = userRemoteConnect;
+		return map;
+	}
+}
+
 class ReportLiveStateResult {
 
 	ReportLiveStateResult();
@@ -2973,6 +3061,8 @@ class DistributedServerInfoRequest extends TokenRequest{
 	String? lat;
 	String? lng;
 	List<IPAddressInfoDTO >? assignClientIPList;
+	int rTCStartingRoomId;
+	String? shareCodePrefix;
 
 	DistributedServerInfoRequest({
 		this.code,
@@ -2986,6 +3076,8 @@ class DistributedServerInfoRequest extends TokenRequest{
 		this.lat,
 		this.lng,
 		this.assignClientIPList,
+		this.rTCStartingRoomId = 0,
+		this.shareCodePrefix,
 		String? token,
 	}) : super(
 			token: token,
@@ -3004,6 +3096,8 @@ class DistributedServerInfoRequest extends TokenRequest{
 			lat: map['Lat'],
 			lng: map['Lng'],
 			assignClientIPList: map['AssignClientIPList'] != null ? (map['AssignClientIPList'] as List).map((e)=>IPAddressInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			rTCStartingRoomId: map['RTCStartingRoomId'],
+			shareCodePrefix: map['ShareCodePrefix'],
 			token: map['Token'],
 		);
 	}
@@ -3029,6 +3123,9 @@ class DistributedServerInfoRequest extends TokenRequest{
 			map['Lng'] = lng;
 		if(assignClientIPList != null)
 			map['AssignClientIPList'] = assignClientIPList;
+		map['RTCStartingRoomId'] = rTCStartingRoomId;
+		if(shareCodePrefix != null)
+			map['ShareCodePrefix'] = shareCodePrefix;
 		return map;
 	}
 }
@@ -6840,15 +6937,11 @@ class QueryRoleUserNumRequest extends TokenRequest{
 
 class QuerySystemConfigRequest extends TokenRequest{
 	String? code;
-	String? configName;
-	String? configHost;
-	String? configDomain;
+	String? configKey;
 
 	QuerySystemConfigRequest({
 		this.code,
-		this.configName,
-		this.configHost,
-		this.configDomain,
+		this.configKey,
 		String? token,
 	}) : super(
 			token: token,
@@ -6857,9 +6950,7 @@ class QuerySystemConfigRequest extends TokenRequest{
 	factory QuerySystemConfigRequest.fromJson(Map<String, dynamic> map) {
 		return QuerySystemConfigRequest( 
 			code: map['Code'],
-			configName: map['ConfigName'],
-			configHost: map['ConfigHost'],
-			configDomain: map['ConfigDomain'],
+			configKey: map['ConfigKey'],
 			token: map['Token'],
 		);
 	}
@@ -6868,12 +6959,8 @@ class QuerySystemConfigRequest extends TokenRequest{
 		final map = super.toJson();
 		if(code != null)
 			map['Code'] = code;
-		if(configName != null)
-			map['ConfigName'] = configName;
-		if(configHost != null)
-			map['ConfigHost'] = configHost;
-		if(configDomain != null)
-			map['ConfigDomain'] = configDomain;
+		if(configKey != null)
+			map['ConfigKey'] = configKey;
 		return map;
 	}
 }
@@ -7231,6 +7318,7 @@ enum ReportPosterTypeEnum {
 enum ReportFormatEnum {
 	Json,
 	Xml,
+	Text,
 }
 
 class SaveReportPosterRequest extends TokenRequest{
@@ -9278,6 +9366,19 @@ enum SyncTypeEnum {
 	DeleteViewer,
 	DeviceAcceptIn,
 	SyncControllingParameter,
+	ApplyRemoteConnect,
+	AcceptRemoteConnect,
+	RejectRemoteConnect,
+	ApplyDisConnect,
+	AcceptDisConnect,
+	DeviceDisconnect,
+	DeviceRemoteConnectHeartRate,
+	UserRemoteConnectHeartRate,
+	DeviceRemoteConnectOutline,
+	UserRemoteConnectOutline,
+	ConsultionRemoteConnect,
+	ConsultionDisConnect,
+	RestartDevice,
 }
 
 enum SyncServiceEnum {
@@ -9286,6 +9387,7 @@ enum SyncServiceEnum {
 	Notification,
 	ScanLogin,
 	Device,
+	RemoteConnect,
 }
 
 enum WSConnectTypeEnum {
@@ -9756,6 +9858,12 @@ enum Unit {
 	mmHgml,
 }
 
+enum CourseAppearTypeEnum {
+	Unknown,
+	Independent,
+	Album,
+}
+
 enum ArrowOrientation {
 	Down,
 	Left,
@@ -14687,21 +14795,15 @@ class SelectParentItemDTO extends SelectItemDTO{
 
 class SystemConfigDTO extends BaseDTO{
 	String? code;
-	String? configName;
-	String? configTypeKey;
+	String? configKey;
 	String? configContent;
-	String? configVersion;
-	String? configHost;
-	String? configDomain;
+	String? configPageControls;
 
 	SystemConfigDTO({
 		this.code,
-		this.configName,
-		this.configTypeKey,
+		this.configKey,
 		this.configContent,
-		this.configVersion,
-		this.configHost,
-		this.configDomain,
+		this.configPageControls,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -14712,12 +14814,9 @@ class SystemConfigDTO extends BaseDTO{
 	factory SystemConfigDTO.fromJson(Map<String, dynamic> map) {
 		return SystemConfigDTO( 
 			code: map['Code'],
-			configName: map['ConfigName'],
-			configTypeKey: map['ConfigTypeKey'],
+			configKey: map['ConfigKey'],
 			configContent: map['ConfigContent'],
-			configVersion: map['ConfigVersion'],
-			configHost: map['ConfigHost'],
-			configDomain: map['ConfigDomain'],
+			configPageControls: map['ConfigPageControls'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -14727,18 +14826,12 @@ class SystemConfigDTO extends BaseDTO{
 		final map = super.toJson();
 		if(code != null)
 			map['Code'] = code;
-		if(configName != null)
-			map['ConfigName'] = configName;
-		if(configTypeKey != null)
-			map['ConfigTypeKey'] = configTypeKey;
+		if(configKey != null)
+			map['ConfigKey'] = configKey;
 		if(configContent != null)
 			map['ConfigContent'] = configContent;
-		if(configVersion != null)
-			map['ConfigVersion'] = configVersion;
-		if(configHost != null)
-			map['ConfigHost'] = configHost;
-		if(configDomain != null)
-			map['ConfigDomain'] = configDomain;
+		if(configPageControls != null)
+			map['ConfigPageControls'] = configPageControls;
 		return map;
 	}
 }
@@ -15228,6 +15321,8 @@ class DistributedServerInfoDTO extends BaseDTO{
 	String? lat;
 	String? lng;
 	List<IPAddressInfoDTO >? assignClientIPList;
+	int rTCStartingRoomId;
+	String? shareCodePrefix;
 
 	DistributedServerInfoDTO({
 		this.serverCode,
@@ -15240,6 +15335,8 @@ class DistributedServerInfoDTO extends BaseDTO{
 		this.lat,
 		this.lng,
 		this.assignClientIPList,
+		this.rTCStartingRoomId = 0,
+		this.shareCodePrefix,
 		DateTime? createTime,
 		DateTime? updateTime,
 	}) : super(
@@ -15259,6 +15356,8 @@ class DistributedServerInfoDTO extends BaseDTO{
 			lat: map['Lat'],
 			lng: map['Lng'],
 			assignClientIPList: map['AssignClientIPList'] != null ? (map['AssignClientIPList'] as List).map((e)=>IPAddressInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
+			rTCStartingRoomId: map['RTCStartingRoomId'],
+			shareCodePrefix: map['ShareCodePrefix'],
 			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
 			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
 		);
@@ -15283,6 +15382,9 @@ class DistributedServerInfoDTO extends BaseDTO{
 			map['Lng'] = lng;
 		if(assignClientIPList != null)
 			map['AssignClientIPList'] = assignClientIPList;
+		map['RTCStartingRoomId'] = rTCStartingRoomId;
+		if(shareCodePrefix != null)
+			map['ShareCodePrefix'] = shareCodePrefix;
 		return map;
 	}
 }
@@ -15841,6 +15943,47 @@ class CommandResultPageSettingInfoDTO extends ListPageSettingInfoDTO{
 	}
 }
 
+class CourseAlbumDTO {
+	String? code;
+	List<String >? courseCodes;
+	String? cover;
+	String? introduction;
+	List<String >? courseLabelCodes;
+
+	CourseAlbumDTO({
+		this.code,
+		this.courseCodes,
+		this.cover,
+		this.introduction,
+		this.courseLabelCodes,
+	});
+
+	factory CourseAlbumDTO.fromJson(Map<String, dynamic> map) {
+		return CourseAlbumDTO( 
+			code: map['Code'],
+			courseCodes: map['CourseCodes'] != null ? map['CourseCodes'].cast<String>().toList() : null,
+			cover: map['Cover'],
+			introduction: map['Introduction'],
+			courseLabelCodes: map['CourseLabelCodes'] != null ? map['CourseLabelCodes'].cast<String>().toList() : null,
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(code != null)
+			map['Code'] = code;
+		if(courseCodes != null)
+			map['CourseCodes'] = courseCodes;
+		if(cover != null)
+			map['Cover'] = cover;
+		if(introduction != null)
+			map['Introduction'] = introduction;
+		if(courseLabelCodes != null)
+			map['CourseLabelCodes'] = courseLabelCodes;
+		return map;
+	}
+}
+
 class BoardPointDTO {
 	double x;
 	double y;

+ 35 - 5
lib/services/remedical.m.dart

@@ -2701,12 +2701,18 @@ class ReportDTO extends ReportBaseDTO{
 	String? reportDatasJson;
 	String? encryptPatientName;
 	bool canEditReport;
+	String? deviceName;
+	String? reportTemplateName;
+	DateTime? examDate;
 
 	ReportDTO({
 		this.reportTemplateJson,
 		this.reportDatasJson,
 		this.encryptPatientName,
 		this.canEditReport = false,
+		this.deviceName,
+		this.reportTemplateName,
+		this.examDate,
 		String? reportCode,
 		String? recordCode,
 		String? reportUserCode,
@@ -2752,6 +2758,9 @@ class ReportDTO extends ReportBaseDTO{
 			reportDatasJson: map['ReportDatasJson'],
 			encryptPatientName: map['EncryptPatientName'],
 			canEditReport: map['CanEditReport'],
+			deviceName: map['DeviceName'],
+			reportTemplateName: map['ReportTemplateName'],
+			examDate: map['ExamDate'] != null ? DateTime.parse(map['ExamDate']) : null,
 			reportCode: map['ReportCode'],
 			recordCode: map['RecordCode'],
 			reportUserCode: map['ReportUserCode'],
@@ -2782,6 +2791,12 @@ class ReportDTO extends ReportBaseDTO{
 		if(encryptPatientName != null)
 			map['EncryptPatientName'] = encryptPatientName;
 		map['CanEditReport'] = canEditReport;
+		if(deviceName != null)
+			map['DeviceName'] = deviceName;
+		if(reportTemplateName != null)
+			map['ReportTemplateName'] = reportTemplateName;
+		if(examDate != null)
+			map['ExamDate'] = JsonRpcUtils.dateFormat(examDate!);
 		return map;
 	}
 }
@@ -2991,6 +3006,9 @@ class RemedicalAISelectedInfoDTO {
 	int frameIndex;
 	String? userCode;
 	String? orginalFileToken;
+	String? cdnFileToken;
+	String? aIFileToken;
+	String? aICdnFileToken;
 	String? previewFileToken;
 	String? diagnosisData;
 	DiagnosisConclusionEnum diagnosisConclusion;
@@ -3004,6 +3022,9 @@ class RemedicalAISelectedInfoDTO {
 		this.frameIndex = 0,
 		this.userCode,
 		this.orginalFileToken,
+		this.cdnFileToken,
+		this.aIFileToken,
+		this.aICdnFileToken,
 		this.previewFileToken,
 		this.diagnosisData,
 		this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
@@ -3019,6 +3040,9 @@ class RemedicalAISelectedInfoDTO {
 			frameIndex: map['FrameIndex'],
 			userCode: map['UserCode'],
 			orginalFileToken: map['OrginalFileToken'],
+			cdnFileToken: map['CdnFileToken'],
+			aIFileToken: map['AIFileToken'],
+			aICdnFileToken: map['AICdnFileToken'],
 			previewFileToken: map['PreviewFileToken'],
 			diagnosisData: map['DiagnosisData'],
 			diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
@@ -3041,6 +3065,12 @@ class RemedicalAISelectedInfoDTO {
 			map['UserCode'] = userCode;
 		if(orginalFileToken != null)
 			map['OrginalFileToken'] = orginalFileToken;
+		if(cdnFileToken != null)
+			map['CdnFileToken'] = cdnFileToken;
+		if(aIFileToken != null)
+			map['AIFileToken'] = aIFileToken;
+		if(aICdnFileToken != null)
+			map['AICdnFileToken'] = aICdnFileToken;
 		if(previewFileToken != null)
 			map['PreviewFileToken'] = previewFileToken;
 		if(diagnosisData != null)
@@ -3111,7 +3141,7 @@ class SaveRemedicalAISelectedInfoRequest extends TokenRequest{
 	String? code;
 	String? remedicalCode;
 	int frameIndex;
-	String? orginalFileToken;
+	String? aIFileToken;
 	String? previewFileToken;
 	String? diagnosisData;
 	DiagnosisConclusionEnum diagnosisConclusion;
@@ -3121,7 +3151,7 @@ class SaveRemedicalAISelectedInfoRequest extends TokenRequest{
 		this.code,
 		this.remedicalCode,
 		this.frameIndex = 0,
-		this.orginalFileToken,
+		this.aIFileToken,
 		this.previewFileToken,
 		this.diagnosisData,
 		this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
@@ -3136,7 +3166,7 @@ class SaveRemedicalAISelectedInfoRequest extends TokenRequest{
 			code: map['Code'],
 			remedicalCode: map['RemedicalCode'],
 			frameIndex: map['FrameIndex'],
-			orginalFileToken: map['OrginalFileToken'],
+			aIFileToken: map['AIFileToken'],
 			previewFileToken: map['PreviewFileToken'],
 			diagnosisData: map['DiagnosisData'],
 			diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
@@ -3152,8 +3182,8 @@ class SaveRemedicalAISelectedInfoRequest extends TokenRequest{
 		if(remedicalCode != null)
 			map['RemedicalCode'] = remedicalCode;
 		map['FrameIndex'] = frameIndex;
-		if(orginalFileToken != null)
-			map['OrginalFileToken'] = orginalFileToken;
+		if(aIFileToken != null)
+			map['AIFileToken'] = aIFileToken;
 		if(previewFileToken != null)
 			map['PreviewFileToken'] = previewFileToken;
 		if(diagnosisData != null)

+ 5 - 0
lib/services/report.dart

@@ -290,5 +290,10 @@ class ReportService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> refreshReportPosterFromDb(RefreshReportPosterRequest request) async {
+		var rpcRst = await call("RefreshReportPosterFromDb", request);
+		return rpcRst;
+	}
+
 }
 

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

@@ -1611,4 +1611,29 @@ class GetReportTemplateDBRequest {
 	}
 }
 
+class RefreshReportPosterRequest extends TokenRequest{
+	String? reportPosterCode;
+
+	RefreshReportPosterRequest({
+		this.reportPosterCode,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory RefreshReportPosterRequest.fromJson(Map<String, dynamic> map) {
+		return RefreshReportPosterRequest( 
+			reportPosterCode: map['ReportPosterCode'],
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(reportPosterCode != null)
+			map['ReportPosterCode'] = reportPosterCode;
+		return map;
+	}
+}
+
 

+ 5 - 0
lib/services/storage.dart

@@ -39,5 +39,10 @@ class StorageService extends JsonRpcClientBase {
 		return result;
 	}
 
+	Future<bool> checkFileIsExist(CheckFileIsExistRequest request) async {
+		var rpcRst = await call("CheckFileIsExist", request);
+		return rpcRst;
+	}
+
 }
 

+ 29 - 0
lib/services/storage.m.dart

@@ -127,4 +127,33 @@ class CheckStorageRequest {
 	}
 }
 
+class CheckFileIsExistRequest {
+	String? oriFileName;
+	int fileSize;
+	bool isNeedPartUpload;
+
+	CheckFileIsExistRequest({
+		this.oriFileName,
+		this.fileSize = 0,
+		this.isNeedPartUpload = false,
+	});
+
+	factory CheckFileIsExistRequest.fromJson(Map<String, dynamic> map) {
+		return CheckFileIsExistRequest( 
+			oriFileName: map['OriFileName'],
+			fileSize: map['FileSize'],
+			isNeedPartUpload: map['IsNeedPartUpload'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = Map<String, dynamic>();
+		if(oriFileName != null)
+			map['OriFileName'] = oriFileName;
+		map['FileSize'] = fileSize;
+		map['IsNeedPartUpload'] = isNeedPartUpload;
+		return map;
+	}
+}
+
 

+ 22 - 0
lib/services/upgrade.dart

@@ -5,6 +5,9 @@ import 'package:fis_common/json_convert.dart';
 
 import 'upgrade.m.dart';
 
+import 'organization.m.dart';
+import 'liveConsultation.m.dart';
+
 
 class UpgradeService extends JsonRpcClientBase {
 	UpgradeService(
@@ -20,6 +23,8 @@ class UpgradeService extends JsonRpcClientBase {
 				) {
 		/// 注册响应实体反序列化处理器
 		FJsonConvert.setDecoder((map) => GetUpgradeInfoResult.fromJson(map));
+		FJsonConvert.setDecoder((map) => OrganizationDTO.fromJson(map));
+		FJsonConvert.setDecoder((map) => UserExtendDTO.fromJson(map));
 	}
 
 	Future<GetUpgradeInfoResult> getUpgradeInfoAsync(GetUpgradeInfoRequest request) async {
@@ -33,5 +38,22 @@ class UpgradeService extends JsonRpcClientBase {
 		return rpcRst;
 	}
 
+	Future<bool> reloadUpgradeConfig() async {
+		var rpcRst = await call("ReloadUpgradeConfig", );
+		return rpcRst;
+	}
+
+	Future<List<OrganizationDTO>> searchGrayscaleOrganizationsAsync(SearchOrganizationsRequest request) async {
+		var rpcRst = await call("SearchGrayscaleOrganizationsAsync", request);
+		var result = (rpcRst as List).map((e)=>OrganizationDTO.fromJson(e as Map<String, dynamic>)).toList();
+		return result;
+	}
+
+	Future<List<UserExtendDTO>> getGrayscaleUserListAsync(GetUserListRequest request) async {
+		var rpcRst = await call("GetGrayscaleUserListAsync", request);
+		var result = (rpcRst as List).map((e)=>UserExtendDTO.fromJson(e as Map<String, dynamic>)).toList();
+		return result;
+	}
+
 }
 

+ 67 - 0
lib/services/upgrade.m.dart

@@ -1,4 +1,6 @@
 import 'notification.m.dart';
+import 'liveConsultation.m.dart';
+import 'organization.m.dart';
 
 class GetUpgradeInfoResult {
 	UpgradeTypeEnum upgradeType;
@@ -136,4 +138,69 @@ class SetUpgradeInfoRequest {
 	}
 }
 
+enum OrganizationQueryTypeEnum {
+	Wait,
+	Single,
+	AllDep,
+	All,
+}
+
+class GetUserListRequest extends TokenRequest{
+	String? keyword;
+	OrganizationQueryTypeEnum organizationQueryType;
+	String? organizationCode;
+	String? rankCode;
+	String? positionCode;
+	bool exceptSelf;
+	String? language;
+	List<String >? roleCodes;
+
+	GetUserListRequest({
+		this.keyword,
+		this.organizationQueryType = OrganizationQueryTypeEnum.Wait,
+		this.organizationCode,
+		this.rankCode,
+		this.positionCode,
+		this.exceptSelf = false,
+		this.language,
+		this.roleCodes,
+		String? token,
+	}) : super(
+			token: token,
+		);
+
+	factory GetUserListRequest.fromJson(Map<String, dynamic> map) {
+		return GetUserListRequest( 
+			keyword: map['Keyword'],
+			organizationQueryType: OrganizationQueryTypeEnum.values.firstWhere((e) => e.index == map['OrganizationQueryType']),
+			organizationCode: map['OrganizationCode'],
+			rankCode: map['RankCode'],
+			positionCode: map['PositionCode'],
+			exceptSelf: map['ExceptSelf'],
+			language: map['Language'],
+			roleCodes: map['RoleCodes'] != null ? map['RoleCodes'].cast<String>().toList() : null,
+			token: map['Token'],
+		);
+	}
+
+	Map<String, dynamic> toJson() {
+		final map = super.toJson();
+		if(keyword != null)
+			map['Keyword'] = keyword;
+		map['OrganizationQueryType'] = organizationQueryType.index;
+		if(organizationCode != null)
+			map['OrganizationCode'] = organizationCode;
+		if(rankCode != null)
+			map['RankCode'] = rankCode;
+		if(positionCode != null)
+			map['PositionCode'] = positionCode;
+		map['ExceptSelf'] = exceptSelf;
+		if(language != null)
+			map['Language'] = language;
+		if(roleCodes != null)
+			map['RoleCodes'] = roleCodes;
+		return map;
+	}
+}
+
 

+ 1 - 0
lib/services/user.dart

@@ -6,6 +6,7 @@ import 'package:fis_common/json_convert.dart';
 import 'user.m.dart';
 
 import 'liveConsultation.m.dart';
+import 'upgrade.m.dart';
 
 
 class UserService extends JsonRpcClientBase {

+ 1 - 65
lib/services/user.m.dart

@@ -1,5 +1,6 @@
 import 'liveConsultation.m.dart';
 import 'notification.m.dart';
+import 'upgrade.m.dart';
 
 import 'package:fis_jsonrpc/utils.dart';
 
@@ -78,71 +79,6 @@ class AlterUserInfoRequest extends TokenRequest{
 	}
 }
 
-enum OrganizationQueryTypeEnum {
-	Wait,
-	Single,
-	AllDep,
-	All,
-}
-
-class GetUserListRequest extends TokenRequest{
-	String? keyword;
-	OrganizationQueryTypeEnum organizationQueryType;
-	String? organizationCode;
-	String? rankCode;
-	String? positionCode;
-	bool exceptSelf;
-	String? language;
-	List<String >? roleCodes;
-
-	GetUserListRequest({
-		this.keyword,
-		this.organizationQueryType = OrganizationQueryTypeEnum.Wait,
-		this.organizationCode,
-		this.rankCode,
-		this.positionCode,
-		this.exceptSelf = false,
-		this.language,
-		this.roleCodes,
-		String? token,
-	}) : super(
-			token: token,
-		);
-
-	factory GetUserListRequest.fromJson(Map<String, dynamic> map) {
-		return GetUserListRequest( 
-			keyword: map['Keyword'],
-			organizationQueryType: OrganizationQueryTypeEnum.values.firstWhere((e) => e.index == map['OrganizationQueryType']),
-			organizationCode: map['OrganizationCode'],
-			rankCode: map['RankCode'],
-			positionCode: map['PositionCode'],
-			exceptSelf: map['ExceptSelf'],
-			language: map['Language'],
-			roleCodes: map['RoleCodes'] != null ? map['RoleCodes'].cast<String>().toList() : null,
-			token: map['Token'],
-		);
-	}
-
-	Map<String, dynamic> toJson() {
-		final map = super.toJson();
-		if(keyword != null)
-			map['Keyword'] = keyword;
-		map['OrganizationQueryType'] = organizationQueryType.index;
-		if(organizationCode != null)
-			map['OrganizationCode'] = organizationCode;
-		if(rankCode != null)
-			map['RankCode'] = rankCode;
-		if(positionCode != null)
-			map['PositionCode'] = positionCode;
-		map['ExceptSelf'] = exceptSelf;
-		if(language != null)
-			map['Language'] = language;
-		if(roleCodes != null)
-			map['RoleCodes'] = roleCodes;
-		return map;
-	}
-}
-
 class RemoveUsersFromOrganizationRequest extends TokenRequest{
 	List<String >? userCodes;
 

+ 5 - 0
lib/services/vinnoServer.dart

@@ -52,5 +52,10 @@ class VinnoServerService extends JsonRpcClientBase {
 		return result;
 	}
 
+	Future<bool> reloadConfig() async {
+		var rpcRst = await call("ReloadConfig", );
+		return rpcRst;
+	}
+
 }