import 'authentication.m.dart';
import 'notification.m.dart';
import 'login.m.dart';
import 'upgrade.m.dart';
import 'user.m.dart';
import 'patient.m.dart';
import 'remedical.m.dart';
import 'liveConsultation.m.dart';
import 'recordInfo.m.dart';
import 'organization.m.dart';
import 'device.m.dart';
import 'report.m.dart';
import 'vinnoIOT.m.dart';
import 'education.m.dart';
import 'connect.m.dart';
import 'appletAPI.m.dart';
import 'aIDiagnosis.m.dart';
import 'chatMessage.m.dart';
import 'vitalAnalyzeConfig.m.dart';
import 'vitalLogin.m.dart';
import 'vitalCompletionRecord.m.dart';
import 'vitalContractRecord.m.dart';
import 'vitalContractTemplate.m.dart';
import 'vitalDevice.m.dart';
import 'vitalDiagnosis.m.dart';
import 'vitalDictionary.m.dart';
import 'vitalDynamicType.m.dart';
import 'vitalExam.m.dart';
import 'vitalSchedule.m.dart';
import 'vitalFollowUp.m.dart';
import 'vitalLabel.m.dart';
import 'vitalOperationLog.m.dart';
import 'vitalOrganization.m.dart';
import 'vitalPatientExtension.m.dart';
import 'vitalPatient.m.dart';
import 'vitalRegion.m.dart';
import 'vitalReport.m.dart';
import 'vitalResidence.m.dart';
import 'vitalRole.m.dart';
import 'vitalServicePack.m.dart';
import 'vitalStatistic.m.dart';
import 'vitalSystemSetting.m.dart';
import 'vitalTeamRegion.m.dart';
import 'vitalTeam.m.dart';
import 'vitalTemplate.m.dart';
import 'vitalTown.m.dart';
import 'vitalUpgrade.m.dart';
import 'vitalUserFeature.m.dart';
import 'vitalUserPassword.m.dart';
import 'vitalUser.m.dart';
import 'vitalHealthExamBooking.m.dart';
import 'register.m.dart';
import 'storage.m.dart';
import 'payment.m.dart';
import 'lab.m.dart';
import 'vinnoServer.m.dart';
import 'deployPlatform.m.dart';
import 'position.m.dart';
import 'rank.m.dart';
import 'identityApply.m.dart';
import 'role.m.dart';
import 'region.m.dart';
import 'aSR.m.dart';
import 'recognition.m.dart';

import 'package:fis_jsonrpc/utils.dart';

import 'package:fis_common/json_convert.dart';

class GenerateRoomUrlRequest {
	int roomId;
	String? uniqueId;

	GenerateRoomUrlRequest({
		this.roomId = 0,
		this.uniqueId,
	});

	factory GenerateRoomUrlRequest.fromJson(Map<String, dynamic> map) {
		return GenerateRoomUrlRequest( 
			roomId: map['RoomId'],
			uniqueId: map['UniqueId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['RoomId'] = roomId;
		if (uniqueId != null) {
			map['UniqueId'] = uniqueId;
		}
		return map;
	}
}

class GenerateRoomUrlResult {
	String? rtmpUrl;
	String? rtmpPushUrl;
	String? hlsUrl;
	String? flvUrl;

	GenerateRoomUrlResult({
		this.rtmpUrl,
		this.rtmpPushUrl,
		this.hlsUrl,
		this.flvUrl,
	});

	factory GenerateRoomUrlResult.fromJson(Map<String, dynamic> map) {
		return GenerateRoomUrlResult( 
			rtmpUrl: map['RtmpUrl'],
			rtmpPushUrl: map['RtmpPushUrl'],
			hlsUrl: map['HlsUrl'],
			flvUrl: map['FlvUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		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) {
			map['FlvUrl'] = flvUrl;
		}
		return map;
	}
}

class GetRoomIdRequest {
	String? uniqueId;

	GetRoomIdRequest({
		this.uniqueId,
	});

	factory GetRoomIdRequest.fromJson(Map<String, dynamic> map) {
		return GetRoomIdRequest( 
			uniqueId: map['UniqueId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (uniqueId != null) {
			map['UniqueId'] = uniqueId;
		}
		return map;
	}
}

class GetRoomIdResult {
	int roomId;

	GetRoomIdResult({
		this.roomId = 0,
	});

	factory GetRoomIdResult.fromJson(Map<String, dynamic> map) {
		return GetRoomIdResult( 
			roomId: map['RoomId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['RoomId'] = roomId;
		return map;
	}
}

class GetRtcSettingRequest {

	GetRtcSettingRequest();

	factory GetRtcSettingRequest.fromJson(Map<String, dynamic> map) {
		return GetRtcSettingRequest( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		return map;
	}
}

class GetRtcSettingResult {
	int appId;

	GetRtcSettingResult({
		this.appId = 0,
	});

	factory GetRtcSettingResult.fromJson(Map<String, dynamic> map) {
		return GetRtcSettingResult( 
			appId: map['AppId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['AppId'] = appId;
		return map;
	}
}

class GetUserSignRequest {
	String? userId;

	GetUserSignRequest({
		this.userId,
	});

	factory GetUserSignRequest.fromJson(Map<String, dynamic> map) {
		return GetUserSignRequest( 
			userId: map['UserId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userId != null) {
			map['UserId'] = userId;
		}
		return map;
	}
}

class GetUserSignResult {
	String? userSign;

	GetUserSignResult({
		this.userSign,
	});

	factory GetUserSignResult.fromJson(Map<String, dynamic> map) {
		return GetUserSignResult( 
			userSign: map['UserSign'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userSign != null) {
			map['UserSign'] = userSign;
		}
		return map;
	}
}

class StorageInfoResult {
	int code;
	bool isSuccess;
	String? message;

	StorageInfoResult({
		this.code = 0,
		this.isSuccess = false,
		this.message,
	});

	factory StorageInfoResult.fromJson(Map<String, dynamic> map) {
		return StorageInfoResult( 
			code: map['Code'],
			isSuccess: map['IsSuccess'],
			message: map['Message'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Code'] = code;
		map['IsSuccess'] = isSuccess;
		if (message != null) {
			map['Message'] = message;
		}
		return map;
	}
}

class MeasureItemsResult {

	MeasureItemsResult();

	factory MeasureItemsResult.fromJson(Map<String, dynamic> map) {
		return MeasureItemsResult( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		return map;
	}
}

class BindOrganizationTemplateResult {
	List<SelectItemDTO>? thesaurusDataList;
	List<SelectItemDTO>? reportTemplateDataList;
	String? defaultThesaurusCode;
	String? defaultReportTemplateCode;

	BindOrganizationTemplateResult({
		this.thesaurusDataList,
		this.reportTemplateDataList,
		this.defaultThesaurusCode,
		this.defaultReportTemplateCode,
	});

	factory BindOrganizationTemplateResult.fromJson(Map<String, dynamic> map) {
		return BindOrganizationTemplateResult( 
			thesaurusDataList: map['ThesaurusDataList'] != null ? (map['ThesaurusDataList'] as List).map((e)=>SelectItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			reportTemplateDataList: map['ReportTemplateDataList'] != null ? (map['ReportTemplateDataList'] as List).map((e)=>SelectItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			defaultThesaurusCode: map['DefaultThesaurusCode'],
			defaultReportTemplateCode: map['DefaultReportTemplateCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (thesaurusDataList != null) {
			map['ThesaurusDataList'] = thesaurusDataList;
		}
		if (reportTemplateDataList != null) {
			map['ReportTemplateDataList'] = reportTemplateDataList;
		}
		if (defaultThesaurusCode != null) {
			map['DefaultThesaurusCode'] = defaultThesaurusCode;
		}
		if (defaultReportTemplateCode != null) {
			map['DefaultReportTemplateCode'] = defaultReportTemplateCode;
		}
		return map;
	}
}

class WaitClearLogResult {
	int daysAgo;
	int waitDelCount;

	WaitClearLogResult({
		this.daysAgo = 0,
		this.waitDelCount = 0,
	});

	factory WaitClearLogResult.fromJson(Map<String, dynamic> map) {
		return WaitClearLogResult( 
			daysAgo: map['DaysAgo'],
			waitDelCount: map['WaitDelCount'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DaysAgo'] = daysAgo;
		map['WaitDelCount'] = waitDelCount;
		return map;
	}
}

class ClearSystemLogRecordResult {
	int daysAgo;
	String? requestServerHost;
	String? clearTime;
	List<WaitClearLogResult>? waitClearLogs;

	ClearSystemLogRecordResult({
		this.daysAgo = 0,
		this.requestServerHost,
		this.clearTime,
		this.waitClearLogs,
	});

	factory ClearSystemLogRecordResult.fromJson(Map<String, dynamic> map) {
		return ClearSystemLogRecordResult( 
			daysAgo: map['DaysAgo'],
			requestServerHost: map['RequestServerHost'],
			clearTime: map['ClearTime'],
			waitClearLogs: map['WaitClearLogs'] != null ? (map['WaitClearLogs'] as List).map((e)=>WaitClearLogResult.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DaysAgo'] = daysAgo;
		if (requestServerHost != null) {
			map['RequestServerHost'] = requestServerHost;
		}
		if (clearTime != null) {
			map['ClearTime'] = clearTime;
		}
		if (waitClearLogs != null) {
			map['WaitClearLogs'] = waitClearLogs;
		}
		return map;
	}
}

enum CMSTemplateStatusTypeEnum {
	UnPublished,
	Published,
}

class CMSTemplateResult {
	String? cMSTemplateCode;
	String? cMSTemplateName;
	CMSTemplateStatusTypeEnum cMSTemplateStateType;
	String? cMSTemplateJson;
	bool isDefault;
	DateTime? createTime;
	String? cMSBgColor;
	String? cMSBgImg;
	bool isShowTop;
	String? cMSBorderColor;
	int cMSBorderShadow;

	CMSTemplateResult({
		this.cMSTemplateCode,
		this.cMSTemplateName,
		this.cMSTemplateStateType = CMSTemplateStatusTypeEnum.UnPublished,
		this.cMSTemplateJson,
		this.isDefault = false,
		this.createTime,
		this.cMSBgColor,
		this.cMSBgImg,
		this.isShowTop = false,
		this.cMSBorderColor,
		this.cMSBorderShadow = 0,
	});

	factory CMSTemplateResult.fromJson(Map<String, dynamic> map) {
		return CMSTemplateResult( 
			cMSTemplateCode: map['CMSTemplateCode'],
			cMSTemplateName: map['CMSTemplateName'],
			cMSTemplateStateType: CMSTemplateStatusTypeEnum.values.firstWhere((e) => e.index == map['CMSTemplateStateType']),
			cMSTemplateJson: map['CMSTemplateJson'],
			isDefault: map['IsDefault'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			cMSBgColor: map['CMSBgColor'],
			cMSBgImg: map['CMSBgImg'],
			isShowTop: map['IsShowTop'],
			cMSBorderColor: map['CMSBorderColor'],
			cMSBorderShadow: map['CMSBorderShadow'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (cMSTemplateCode != null) {
			map['CMSTemplateCode'] = cMSTemplateCode;
		}
		if (cMSTemplateName != null) {
			map['CMSTemplateName'] = cMSTemplateName;
		}
		map['CMSTemplateStateType'] = cMSTemplateStateType.index;
		if (cMSTemplateJson != null) {
			map['CMSTemplateJson'] = cMSTemplateJson;
		}
		map['IsDefault'] = isDefault;
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (cMSBgColor != null) {
			map['CMSBgColor'] = cMSBgColor;
		}
		if (cMSBgImg != null) {
			map['CMSBgImg'] = cMSBgImg;
		}
		map['IsShowTop'] = isShowTop;
		if (cMSBorderColor != null) {
			map['CMSBorderColor'] = cMSBorderColor;
		}
		map['CMSBorderShadow'] = cMSBorderShadow;
		return map;
	}
}

class ConfigRecordResult {
	bool isOpenASR;
	bool isDistributed;

	ConfigRecordResult({
		this.isOpenASR = false,
		this.isDistributed = false,
	});

	factory ConfigRecordResult.fromJson(Map<String, dynamic> map) {
		return ConfigRecordResult( 
			isOpenASR: map['IsOpenASR'],
			isDistributed: map['IsDistributed'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsOpenASR'] = isOpenASR;
		map['IsDistributed'] = isDistributed;
		return map;
	}
}

class ExportThesaurusResult {
	String? thesaurusName;
	String? json;

	ExportThesaurusResult({
		this.thesaurusName,
		this.json,
	});

	factory ExportThesaurusResult.fromJson(Map<String, dynamic> map) {
		return ExportThesaurusResult( 
			thesaurusName: map['ThesaurusName'],
			json: map['Json'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (thesaurusName != null) {
			map['ThesaurusName'] = thesaurusName;
		}
		if (json != null) {
			map['Json'] = json;
		}
		return map;
	}
}

class OrganizationBindQueryResult {
	int bindDeviceNum;
	int bindUserNum;

	OrganizationBindQueryResult({
		this.bindDeviceNum = 0,
		this.bindUserNum = 0,
	});

	factory OrganizationBindQueryResult.fromJson(Map<String, dynamic> map) {
		return OrganizationBindQueryResult( 
			bindDeviceNum: map['BindDeviceNum'],
			bindUserNum: map['BindUserNum'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['BindDeviceNum'] = bindDeviceNum;
		map['BindUserNum'] = bindUserNum;
		return map;
	}
}

class ShareExamUrlResult {
	String? posterUrl;
	String? videoUrl;
	bool isConvertSusccess;

	ShareExamUrlResult({
		this.posterUrl,
		this.videoUrl,
		this.isConvertSusccess = false,
	});

	factory ShareExamUrlResult.fromJson(Map<String, dynamic> map) {
		return ShareExamUrlResult( 
			posterUrl: map['PosterUrl'],
			videoUrl: map['VideoUrl'],
			isConvertSusccess: map['IsConvertSusccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (posterUrl != null) {
			map['PosterUrl'] = posterUrl;
		}
		if (videoUrl != null) {
			map['VideoUrl'] = videoUrl;
		}
		map['IsConvertSusccess'] = isConvertSusccess;
		return map;
	}
}

class ShareImagesCellResult {
	int sortNum;
	String? posterUrl;
	String? videoUrl;
	String? defaultLoadingToken;
	List<String>? previewImageList;

	ShareImagesCellResult({
		this.sortNum = 0,
		this.posterUrl,
		this.videoUrl,
		this.defaultLoadingToken,
		this.previewImageList,
	});

	factory ShareImagesCellResult.fromJson(Map<String, dynamic> map) {
		return ShareImagesCellResult( 
			sortNum: map['SortNum'],
			posterUrl: map['PosterUrl'],
			videoUrl: map['VideoUrl'],
			defaultLoadingToken: map['DefaultLoadingToken'],
			previewImageList: map['PreviewImageList']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['SortNum'] = sortNum;
		if (posterUrl != null) {
			map['PosterUrl'] = posterUrl;
		}
		if (videoUrl != null) {
			map['VideoUrl'] = videoUrl;
		}
		if (defaultLoadingToken != null) {
			map['DefaultLoadingToken'] = defaultLoadingToken;
		}
		if (previewImageList != null) {
			map['PreviewImageList'] = previewImageList;
		}
		return map;
	}
}

class ShareImagesBasicInfoResult {
	List<ShareImagesCellResult>? imageCells;

	ShareImagesBasicInfoResult({
		this.imageCells,
	});

	factory ShareImagesBasicInfoResult.fromJson(Map<String, dynamic> map) {
		return ShareImagesBasicInfoResult( 
			imageCells: map['ImageCells'] != null ? (map['ImageCells'] as List).map((e)=>ShareImagesCellResult.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (imageCells != null) {
			map['ImageCells'] = imageCells;
		}
		return map;
	}
}

class ShareImagesUrlResult {
	bool isConvertSusccess;
	bool isPartConvertSusccess;
	String? language;
	List<ShareImagesBasicInfoResult>? shareImages;
	int fileCount;

	ShareImagesUrlResult({
		this.isConvertSusccess = false,
		this.isPartConvertSusccess = false,
		this.language,
		this.shareImages,
		this.fileCount = 0,
	});

	factory ShareImagesUrlResult.fromJson(Map<String, dynamic> map) {
		return ShareImagesUrlResult( 
			isConvertSusccess: map['IsConvertSusccess'],
			isPartConvertSusccess: map['IsPartConvertSusccess'],
			language: map['Language'],
			shareImages: map['ShareImages'] != null ? (map['ShareImages'] as List).map((e)=>ShareImagesBasicInfoResult.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileCount: map['FileCount'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsConvertSusccess'] = isConvertSusccess;
		map['IsPartConvertSusccess'] = isPartConvertSusccess;
		if (language != null) {
			map['Language'] = language;
		}
		if (shareImages != null) {
			map['ShareImages'] = shareImages;
		}
		map['FileCount'] = fileCount;
		return map;
	}
}

class BaseFeatureLanguageConfigDTO extends BaseDTO{
	String? language;
	String? featureName;

	BaseFeatureLanguageConfigDTO({
		this.language,
		this.featureName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory BaseFeatureLanguageConfigDTO.fromJson(Map<String, dynamic> map) {
		return BaseFeatureLanguageConfigDTO( 
			language: map['Language'],
			featureName: map['FeatureName'],
			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 (language != null)
			map['Language'] = language;
		if (featureName != null)
			map['FeatureName'] = featureName;
		return map;
	}
}

class BaseFeatureItemBaseDTO<T> {
	String? id;
	String? label;
	String? fatherCode;
	String? uniqueCode;
	List<BaseFeatureLanguageConfigDTO>? languageConfigs;
	List<T>? children;
	bool disabled;

	BaseFeatureItemBaseDTO({
		this.id,
		this.label,
		this.fatherCode,
		this.uniqueCode,
		this.languageConfigs,
		this.children,
		this.disabled = false,
	});

	factory BaseFeatureItemBaseDTO.fromJson(Map<String, dynamic> map) {
		List<T> childrenList = [];
		if (map['Children'] != null) {
			childrenList.addAll(
					(map['Children'] as List).map((e) => FJsonConvert.fromJson<T>(e)!));
		}
		return BaseFeatureItemBaseDTO( 
			id: map['Id'],
			label: map['Label'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			children: childrenList,
			disabled: map['Disabled'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		if (label != null) {
			map['Label'] = label;
		}
		if (fatherCode != null) {
			map['FatherCode'] = fatherCode;
		}
		if (uniqueCode != null) {
			map['UniqueCode'] = uniqueCode;
		}
		if (languageConfigs != null) {
			map['LanguageConfigs'] = languageConfigs;
		}
		if (children != null) {
			map['Children'] = children;
		}
		map['Disabled'] = disabled;
		return map;
	}
}

class UserFeatureItemDTO extends BaseFeatureItemBaseDTO<UserFeatureItemDTO>{

	UserFeatureItemDTO(
	);

	factory UserFeatureItemDTO.fromJson(Map<String, dynamic> map) {
		return UserFeatureItemDTO( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class UserFeatureInformationResult {
	List<String>? userFeatureCodes;
	List<String>? userRoleFeatureCodes;
	List<UserFeatureItemDTO>? userFeatureItems;

	UserFeatureInformationResult({
		this.userFeatureCodes,
		this.userRoleFeatureCodes,
		this.userFeatureItems,
	});

	factory UserFeatureInformationResult.fromJson(Map<String, dynamic> map) {
		return UserFeatureInformationResult( 
			userFeatureCodes: map['UserFeatureCodes']?.cast<String>().toList(),
			userRoleFeatureCodes: map['UserRoleFeatureCodes']?.cast<String>().toList(),
			userFeatureItems: map['UserFeatureItems'] != null ? (map['UserFeatureItems'] as List).map((e)=>UserFeatureItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userFeatureCodes != null) {
			map['UserFeatureCodes'] = userFeatureCodes;
		}
		if (userRoleFeatureCodes != null) {
			map['UserRoleFeatureCodes'] = userRoleFeatureCodes;
		}
		if (userFeatureItems != null) {
			map['UserFeatureItems'] = userFeatureItems;
		}
		return map;
	}
}

class ApplyLockResult {
	bool isSuccess;
	String? lockUniqueCode;

	ApplyLockResult({
		this.isSuccess = false,
		this.lockUniqueCode,
	});

	factory ApplyLockResult.fromJson(Map<String, dynamic> map) {
		return ApplyLockResult( 
			isSuccess: map['IsSuccess'],
			lockUniqueCode: map['LockUniqueCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		if (lockUniqueCode != null) {
			map['LockUniqueCode'] = lockUniqueCode;
		}
		return map;
	}
}

class ReleaseLockResult {
	bool isSuccess;

	ReleaseLockResult({
		this.isSuccess = false,
	});

	factory ReleaseLockResult.fromJson(Map<String, dynamic> map) {
		return ReleaseLockResult( 
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		return map;
	}
}

class MarshalByRefObject {

	MarshalByRefObject();

	factory MarshalByRefObject.fromJson(Map<String, dynamic> map) {
		return MarshalByRefObject( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		return map;
	}
}

class Stream extends MarshalByRefObject{
	bool canRead;
	bool canWrite;
	bool canSeek;
	bool canTimeout;
	int length;
	int position;
	int readTimeout;
	int writeTimeout;

	Stream({
		this.canRead = false,
		this.canWrite = false,
		this.canSeek = false,
		this.canTimeout = false,
		this.length = 0,
		this.position = 0,
		this.readTimeout = 0,
		this.writeTimeout = 0,
	}) : super(
		);

	factory Stream.fromJson(Map<String, dynamic> map) {
		return Stream( 
			canRead: map['CanRead'],
			canWrite: map['CanWrite'],
			canSeek: map['CanSeek'],
			canTimeout: map['CanTimeout'],
			length: map['Length'],
			position: map['Position'],
			readTimeout: map['ReadTimeout'],
			writeTimeout: map['WriteTimeout'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['CanRead'] = canRead;
		map['CanWrite'] = canWrite;
		map['CanSeek'] = canSeek;
		map['CanTimeout'] = canTimeout;
		map['Length'] = length;
		map['Position'] = position;
		map['ReadTimeout'] = readTimeout;
		map['WriteTimeout'] = writeTimeout;
		return map;
	}
}

class DownloadFileResult {
	Stream? merageFileStream;
	int fileSize;

	DownloadFileResult({
		this.merageFileStream,
		this.fileSize = 0,
	});

	factory DownloadFileResult.fromJson(Map<String, dynamic> map) {
		return DownloadFileResult( 
			merageFileStream: map['MerageFileStream'] != null ? Stream.fromJson(map['MerageFileStream']) : null,
			fileSize: map['FileSize'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (merageFileStream != null) {
			map['MerageFileStream'] = merageFileStream;
		}
		map['FileSize'] = fileSize;
		return map;
	}
}

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']?.cast<String>().toList(),
			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 TransferFileUrlEntity {
	String? transferMP4Url;
	String? transferImgUrl;
	bool isSuccess;

	TransferFileUrlEntity({
		this.transferMP4Url,
		this.transferImgUrl,
		this.isSuccess = false,
	});

	factory TransferFileUrlEntity.fromJson(Map<String, dynamic> map) {
		return TransferFileUrlEntity( 
			transferMP4Url: map['TransferMP4Url'],
			transferImgUrl: map['TransferImgUrl'],
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (transferMP4Url != null) {
			map['TransferMP4Url'] = transferMP4Url;
		}
		if (transferImgUrl != null) {
			map['TransferImgUrl'] = transferImgUrl;
		}
		map['IsSuccess'] = isSuccess;
		return map;
	}
}

class BaseLiveResult {
	String? roomCode;
	int integerRoomId;
	String? rtcMessageJson;

	BaseLiveResult({
		this.roomCode,
		this.integerRoomId = 0,
		this.rtcMessageJson,
	});

	factory BaseLiveResult.fromJson(Map<String, dynamic> map) {
		return BaseLiveResult( 
			roomCode: map['RoomCode'],
			integerRoomId: map['IntegerRoomId'],
			rtcMessageJson: map['RtcMessageJson'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (roomCode != null) {
			map['RoomCode'] = roomCode;
		}
		map['IntegerRoomId'] = integerRoomId;
		if (rtcMessageJson != null) {
			map['RtcMessageJson'] = rtcMessageJson;
		}
		return map;
	}
}

class MuteLiveResult extends BaseLiveResult{
	bool mute;

	MuteLiveResult({
		this.mute = false,
		String? roomCode,
		int integerRoomId = 0,
		String? rtcMessageJson,
	}) : super(
			roomCode: roomCode,
			integerRoomId: integerRoomId,
			rtcMessageJson: rtcMessageJson,
		);

	factory MuteLiveResult.fromJson(Map<String, dynamic> map) {
		return MuteLiveResult( 
			mute: map['Mute'],
			roomCode: map['RoomCode'],
			integerRoomId: map['IntegerRoomId'],
			rtcMessageJson: map['RtcMessageJson'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Mute'] = mute;
		return map;
	}
}

class OpenedVideoLiveResult extends BaseLiveResult{
	bool videoOpend;

	OpenedVideoLiveResult({
		this.videoOpend = false,
		String? roomCode,
		int integerRoomId = 0,
		String? rtcMessageJson,
	}) : super(
			roomCode: roomCode,
			integerRoomId: integerRoomId,
			rtcMessageJson: rtcMessageJson,
		);

	factory OpenedVideoLiveResult.fromJson(Map<String, dynamic> map) {
		return OpenedVideoLiveResult( 
			videoOpend: map['VideoOpend'],
			roomCode: map['RoomCode'],
			integerRoomId: map['IntegerRoomId'],
			rtcMessageJson: map['RtcMessageJson'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['VideoOpend'] = videoOpend;
		return map;
	}
}

class ControllingParameterLiveResult extends BaseLiveResult{
	bool isControllingParameter;

	ControllingParameterLiveResult({
		this.isControllingParameter = false,
		String? roomCode,
		int integerRoomId = 0,
		String? rtcMessageJson,
	}) : super(
			roomCode: roomCode,
			integerRoomId: integerRoomId,
			rtcMessageJson: rtcMessageJson,
		);

	factory ControllingParameterLiveResult.fromJson(Map<String, dynamic> map) {
		return ControllingParameterLiveResult( 
			isControllingParameter: map['IsControllingParameter'],
			roomCode: map['RoomCode'],
			integerRoomId: map['IntegerRoomId'],
			rtcMessageJson: map['RtcMessageJson'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsControllingParameter'] = isControllingParameter;
		return map;
	}
}

class ChangeCourseStatusResult extends BaseLiveResult{
	CourseStatusEnum status;

	ChangeCourseStatusResult({
		this.status = CourseStatusEnum.Unknown,
		String? roomCode,
		int integerRoomId = 0,
		String? rtcMessageJson,
	}) : super(
			roomCode: roomCode,
			integerRoomId: integerRoomId,
			rtcMessageJson: rtcMessageJson,
		);

	factory ChangeCourseStatusResult.fromJson(Map<String, dynamic> map) {
		return ChangeCourseStatusResult( 
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			roomCode: map['RoomCode'],
			integerRoomId: map['IntegerRoomId'],
			rtcMessageJson: map['RtcMessageJson'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Status'] = status.index;
		return map;
	}
}

class FindConsultationSettingResult {
	String? version;
	String? settingData;

	FindConsultationSettingResult({
		this.version,
		this.settingData,
	});

	factory FindConsultationSettingResult.fromJson(Map<String, dynamic> map) {
		return FindConsultationSettingResult( 
			version: map['Version'],
			settingData: map['SettingData'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (version != null) {
			map['Version'] = version;
		}
		if (settingData != null) {
			map['SettingData'] = settingData;
		}
		return map;
	}
}

class AuditContractRecordRequest extends TokenRequest{
	String? code;
	AuditStateEnum auditState;

	AuditContractRecordRequest({
		this.code,
		this.auditState = AuditStateEnum.Unaudited,
		String? token,
	}) : super(
			token: token,
		);

	factory AuditContractRecordRequest.fromJson(Map<String, dynamic> map) {
		return AuditContractRecordRequest( 
			code: map['Code'],
			auditState: AuditStateEnum.values.firstWhere((e) => e.index == map['AuditState']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		map['AuditState'] = auditState.index;
		return map;
	}
}

class GetTokenRequest {
	String? grantType;
	String? account;
	String? password;
	String? clientType;

	GetTokenRequest({
		this.grantType,
		this.account,
		this.password,
		this.clientType,
	});

	factory GetTokenRequest.fromJson(Map<String, dynamic> map) {
		return GetTokenRequest( 
			grantType: map['GrantType'],
			account: map['Account'],
			password: map['Password'],
			clientType: map['ClientType'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (grantType != null) {
			map['GrantType'] = grantType;
		}
		if (account != null) {
			map['Account'] = account;
		}
		if (password != null) {
			map['Password'] = password;
		}
		if (clientType != null) {
			map['ClientType'] = clientType;
		}
		return map;
	}
}

class CreateNotificationRequest extends TokenRequest{
	String? code;
	String? version;
	List<String>? applicableEquipment;
	String? notificationContent;
	NotificationTypeEnum notificationType;

	CreateNotificationRequest({
		this.code,
		this.version,
		this.applicableEquipment,
		this.notificationContent,
		this.notificationType = NotificationTypeEnum.Unknown,
		String? token,
	}) : super(
			token: token,
		);

	factory CreateNotificationRequest.fromJson(Map<String, dynamic> map) {
		return CreateNotificationRequest( 
			code: map['Code'],
			version: map['Version'],
			applicableEquipment: map['ApplicableEquipment']?.cast<String>().toList(),
			notificationContent: map['NotificationContent'],
			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (version != null)
			map['Version'] = version;
		if (applicableEquipment != null)
			map['ApplicableEquipment'] = applicableEquipment;
		if (notificationContent != null)
			map['NotificationContent'] = notificationContent;
		map['NotificationType'] = notificationType.index;
		return map;
	}
}

class GetNotificationRequest extends TokenRequest{
	String? code;

	GetNotificationRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory GetNotificationRequest.fromJson(Map<String, dynamic> map) {
		return GetNotificationRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class NotificationPageRequest extends PageRequest{
	int lastNotificationNo;
	String? version;
	List<String>? applicableEquipment;
	NotificationTypeEnum? notificationType;

	NotificationPageRequest({
		this.lastNotificationNo = 0,
		this.version,
		this.applicableEquipment,
		this.notificationType,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory NotificationPageRequest.fromJson(Map<String, dynamic> map) {
		return NotificationPageRequest( 
			lastNotificationNo: map['LastNotificationNo'],
			version: map['Version'],
			applicableEquipment: map['ApplicableEquipment']?.cast<String>().toList(),
			notificationType: map['NotificationType'] != null ? NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']) : null,
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['LastNotificationNo'] = lastNotificationNo;
		if (version != null)
			map['Version'] = version;
		if (applicableEquipment != null)
			map['ApplicableEquipment'] = applicableEquipment;
		if (notificationType != null)
			map['NotificationType'] = notificationType;
		return map;
	}
}

class UpdateUpgradeRequest extends TokenRequest{
	String? code;
	String? version;
	String? upgradeNotes;
	String? upgradeFileUrl;
	List<String>? applicableEquipment;
	bool isGatedLaunch;

	UpdateUpgradeRequest({
		this.code,
		this.version,
		this.upgradeNotes,
		this.upgradeFileUrl,
		this.applicableEquipment,
		this.isGatedLaunch = false,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateUpgradeRequest.fromJson(Map<String, dynamic> map) {
		return UpdateUpgradeRequest( 
			code: map['Code'],
			version: map['Version'],
			upgradeNotes: map['UpgradeNotes'],
			upgradeFileUrl: map['UpgradeFileUrl'],
			applicableEquipment: map['ApplicableEquipment']?.cast<String>().toList(),
			isGatedLaunch: map['IsGatedLaunch'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (version != null)
			map['Version'] = version;
		if (upgradeNotes != null)
			map['UpgradeNotes'] = upgradeNotes;
		if (upgradeFileUrl != null)
			map['UpgradeFileUrl'] = upgradeFileUrl;
		if (applicableEquipment != null)
			map['ApplicableEquipment'] = applicableEquipment;
		map['IsGatedLaunch'] = isGatedLaunch;
		return map;
	}
}

class GetUserPasswordByKeyRequest extends TokenRequest{
	String? key;
	String? value;

	GetUserPasswordByKeyRequest({
		this.key,
		this.value,
		String? token,
	}) : super(
			token: token,
		);

	factory GetUserPasswordByKeyRequest.fromJson(Map<String, dynamic> map) {
		return GetUserPasswordByKeyRequest( 
			key: map['Key'],
			value: map['Value'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (key != null)
			map['Key'] = key;
		if (value != null)
			map['Value'] = value;
		return map;
	}
}

class RemoveUserPasswordRequest extends TokenRequest{
	String? code;

	RemoveUserPasswordRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveUserPasswordRequest.fromJson(Map<String, dynamic> map) {
		return RemoveUserPasswordRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class GetUserPasswordListRequest extends TokenRequest{
	List<String>? codes;

	GetUserPasswordListRequest({
		this.codes,
		String? token,
	}) : super(
			token: token,
		);

	factory GetUserPasswordListRequest.fromJson(Map<String, dynamic> map) {
		return GetUserPasswordListRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		return map;
	}
}

class UserPasswordPageRequest extends PageRequest{

	UserPasswordPageRequest({
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory UserPasswordPageRequest.fromJson(Map<String, dynamic> map) {
		return UserPasswordPageRequest( 
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class AddCacheReportPosterRequest extends TokenRequest{
	String? reportPosterCode;

	AddCacheReportPosterRequest({
		this.reportPosterCode,
		String? token,
	}) : super(
			token: token,
		);

	factory AddCacheReportPosterRequest.fromJson(Map<String, dynamic> map) {
		return AddCacheReportPosterRequest( 
			reportPosterCode: map['ReportPosterCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		return map;
	}
}

class DeleteThesaurusUserCodeRequest extends TokenRequest{
	String? thesaurusCode;

	DeleteThesaurusUserCodeRequest({
		this.thesaurusCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteThesaurusUserCodeRequest.fromJson(Map<String, dynamic> map) {
		return DeleteThesaurusUserCodeRequest( 
			thesaurusCode: map['ThesaurusCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		return map;
	}
}

class RemoveCacheReportPosterRequest extends TokenRequest{
	String? reportPosterCode;

	RemoveCacheReportPosterRequest({
		this.reportPosterCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveCacheReportPosterRequest.fromJson(Map<String, dynamic> map) {
		return RemoveCacheReportPosterRequest( 
			reportPosterCode: map['ReportPosterCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		return map;
	}
}

class UpdateThesaurusUserCodeRequest extends TokenRequest{
	String? thesaurusCode;

	UpdateThesaurusUserCodeRequest({
		this.thesaurusCode,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateThesaurusUserCodeRequest.fromJson(Map<String, dynamic> map) {
		return UpdateThesaurusUserCodeRequest( 
			thesaurusCode: map['ThesaurusCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		return map;
	}
}

class PushRecordCodesToDeviceRequest extends TokenRequest{
	List<String>? recordCodes;
	String? deviceCode;

	PushRecordCodesToDeviceRequest({
		this.recordCodes,
		this.deviceCode,
		String? token,
	}) : super(
			token: token,
		);

	factory PushRecordCodesToDeviceRequest.fromJson(Map<String, dynamic> map) {
		return PushRecordCodesToDeviceRequest( 
			recordCodes: map['RecordCodes']?.cast<String>().toList(),
			deviceCode: map['DeviceCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (recordCodes != null)
			map['RecordCodes'] = recordCodes;
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		return map;
	}
}

class PayCallbackRequest {
	String? keyWord;

	PayCallbackRequest({
		this.keyWord,
	});

	factory PayCallbackRequest.fromJson(Map<String, dynamic> map) {
		return PayCallbackRequest( 
			keyWord: map['KeyWord'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (keyWord != null) {
			map['KeyWord'] = keyWord;
		}
		return map;
	}
}

class CloseNotifyQueueRequest {
	String? msgQueueId;

	CloseNotifyQueueRequest({
		this.msgQueueId,
	});

	factory CloseNotifyQueueRequest.fromJson(Map<String, dynamic> map) {
		return CloseNotifyQueueRequest( 
			msgQueueId: map['MsgQueueId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (msgQueueId != null) {
			map['MsgQueueId'] = msgQueueId;
		}
		return map;
	}
}

class OpenNotifyQueueRequest {
	String? module;

	OpenNotifyQueueRequest({
		this.module,
	});

	factory OpenNotifyQueueRequest.fromJson(Map<String, dynamic> map) {
		return OpenNotifyQueueRequest( 
			module: map['Module'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (module != null) {
			map['Module'] = module;
		}
		return map;
	}
}

class ApplyLockRequest {
	String? lockKey;

	ApplyLockRequest({
		this.lockKey,
	});

	factory ApplyLockRequest.fromJson(Map<String, dynamic> map) {
		return ApplyLockRequest( 
			lockKey: map['LockKey'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (lockKey != null) {
			map['LockKey'] = lockKey;
		}
		return map;
	}
}

class ReleaseLockRequest {
	String? lockUniqueCode;

	ReleaseLockRequest({
		this.lockUniqueCode,
	});

	factory ReleaseLockRequest.fromJson(Map<String, dynamic> map) {
		return ReleaseLockRequest( 
			lockUniqueCode: map['LockUniqueCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (lockUniqueCode != null) {
			map['LockUniqueCode'] = lockUniqueCode;
		}
		return map;
	}
}

class BindIOTUserDeviceRequest extends TokenRequest{
	String? machineNo;
	String? machineAddress;
	int type;
	String? userDeviceName;
	String? wifiName;
	int? modeType;
	bool? isAuto;
	String? areaCode;

	BindIOTUserDeviceRequest({
		this.machineNo,
		this.machineAddress,
		this.type = 0,
		this.userDeviceName,
		this.wifiName,
		this.modeType,
		this.isAuto,
		this.areaCode,
		String? token,
	}) : super(
			token: token,
		);

	factory BindIOTUserDeviceRequest.fromJson(Map<String, dynamic> map) {
		return BindIOTUserDeviceRequest( 
			machineNo: map['MachineNo'],
			machineAddress: map['MachineAddress'],
			type: map['Type'],
			userDeviceName: map['UserDeviceName'],
			wifiName: map['WifiName'],
			modeType: map['ModeType'],
			isAuto: map['IsAuto'],
			areaCode: map['AreaCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (machineNo != null)
			map['MachineNo'] = machineNo;
		if (machineAddress != null)
			map['MachineAddress'] = machineAddress;
		map['Type'] = type;
		if (userDeviceName != null)
			map['UserDeviceName'] = userDeviceName;
		if (wifiName != null)
			map['WifiName'] = wifiName;
		if (modeType != null)
			map['ModeType'] = modeType;
		if (isAuto != null)
			map['IsAuto'] = isAuto;
		if (areaCode != null)
			map['AreaCode'] = areaCode;
		return map;
	}
}

class AssignPatientToUsersRequest extends TokenRequest{
	String? patientCode;
	List<String>? userCodes;

	AssignPatientToUsersRequest({
		this.patientCode,
		this.userCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory AssignPatientToUsersRequest.fromJson(Map<String, dynamic> map) {
		return AssignPatientToUsersRequest( 
			patientCode: map['PatientCode'],
			userCodes: map['UserCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (patientCode != null)
			map['PatientCode'] = patientCode;
		if (userCodes != null)
			map['UserCodes'] = userCodes;
		return map;
	}
}

class QuestionDetailDTO extends BaseDTO{
	String? code;
	double score;

	QuestionDetailDTO({
		this.code,
		this.score = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory QuestionDetailDTO.fromJson(Map<String, dynamic> map) {
		return QuestionDetailDTO( 
			code: map['Code'],
			score: double.parse(map['Score'].toString()),
			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;
		map['Score'] = score;
		return map;
	}
}

class AddExaminationPaperRequest extends TokenRequest{
	String? name;
	double totalScore;
	List<QuestionDetailDTO>? questionList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;

	AddExaminationPaperRequest({
		this.name,
		this.totalScore = 0,
		this.questionList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory AddExaminationPaperRequest.fromJson(Map<String, dynamic> map) {
		return AddExaminationPaperRequest( 
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>QuestionDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (name != null)
			map['Name'] = name;
		map['TotalScore'] = totalScore;
		if (questionList != null)
			map['QuestionList'] = questionList;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		return map;
	}
}

class FindUserGroupByStudentRequest extends TokenRequest{

	FindUserGroupByStudentRequest({
		String? token,
	}) : super(
			token: token,
		);

	factory FindUserGroupByStudentRequest.fromJson(Map<String, dynamic> map) {
		return FindUserGroupByStudentRequest( 
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class CourseLabelRequest extends TokenRequest{
	String? code;
	List<LabelLanguageConfigDTO>? labelLanguageConfigs;
	OrganizationPatientTypeEnum useObjectType;
	LabelTypeEnum type;
	String? parentCode;
	bool isMove;

	CourseLabelRequest({
		this.code,
		this.labelLanguageConfigs,
		this.useObjectType = OrganizationPatientTypeEnum.Person,
		this.type = LabelTypeEnum.Unknown,
		this.parentCode,
		this.isMove = false,
		String? token,
	}) : super(
			token: token,
		);

	factory CourseLabelRequest.fromJson(Map<String, dynamic> map) {
		return CourseLabelRequest( 
			code: map['Code'],
			labelLanguageConfigs: map['LabelLanguageConfigs'] != null ? (map['LabelLanguageConfigs'] as List).map((e)=>LabelLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			useObjectType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['UseObjectType']),
			type: LabelTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			parentCode: map['ParentCode'],
			isMove: map['IsMove'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (labelLanguageConfigs != null)
			map['LabelLanguageConfigs'] = labelLanguageConfigs;
		map['UseObjectType'] = useObjectType.index;
		map['Type'] = type.index;
		if (parentCode != null)
			map['ParentCode'] = parentCode;
		map['IsMove'] = isMove;
		return map;
	}
}

class DeleteExaminationPaperRequest extends TokenRequest{
	String? examinationPaperCode;

	DeleteExaminationPaperRequest({
		this.examinationPaperCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteExaminationPaperRequest.fromJson(Map<String, dynamic> map) {
		return DeleteExaminationPaperRequest( 
			examinationPaperCode: map['ExaminationPaperCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (examinationPaperCode != null)
			map['ExaminationPaperCode'] = examinationPaperCode;
		return map;
	}
}

class FindExaminationQuestionPagesRequest extends PageRequest{
	String? searchKey;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	List<String>? codes;
	List<String>? notInCodes;

	FindExaminationQuestionPagesRequest({
		this.searchKey,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.codes,
		this.notInCodes,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindExaminationQuestionPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindExaminationQuestionPagesRequest( 
			searchKey: map['SearchKey'],
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			codes: map['Codes']?.cast<String>().toList(),
			notInCodes: map['NotInCodes']?.cast<String>().toList(),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (searchKey != null)
			map['SearchKey'] = searchKey;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		if (codes != null)
			map['Codes'] = codes;
		if (notInCodes != null)
			map['NotInCodes'] = notInCodes;
		return map;
	}
}

class FindExaminationQuestionsByCodesRequest extends TokenRequest{
	List<String>? codes;

	FindExaminationQuestionsByCodesRequest({
		this.codes,
		String? token,
	}) : super(
			token: token,
		);

	factory FindExaminationQuestionsByCodesRequest.fromJson(Map<String, dynamic> map) {
		return FindExaminationQuestionsByCodesRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		return map;
	}
}

class CreateExaminationQuestionRequest extends TokenRequest{
	String? stem;
	QuestionTypeEnum questionType;
	List<QuestionOptionDTO>? questionOptionList;
	List<QuestionFileDTO>? fileList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	bool trueOrFalse;

	CreateExaminationQuestionRequest({
		this.stem,
		this.questionType = QuestionTypeEnum.Judge,
		this.questionOptionList,
		this.fileList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.trueOrFalse = false,
		String? token,
	}) : super(
			token: token,
		);

	factory CreateExaminationQuestionRequest.fromJson(Map<String, dynamic> map) {
		return CreateExaminationQuestionRequest( 
			stem: map['Stem'],
			questionType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['QuestionType']),
			questionOptionList: map['QuestionOptionList'] != null ? (map['QuestionOptionList'] as List).map((e)=>QuestionOptionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileList: map['FileList'] != null ? (map['FileList'] as List).map((e)=>QuestionFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			trueOrFalse: map['TrueOrFalse'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (stem != null)
			map['Stem'] = stem;
		map['QuestionType'] = questionType.index;
		if (questionOptionList != null)
			map['QuestionOptionList'] = questionOptionList;
		if (fileList != null)
			map['FileList'] = fileList;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		map['TrueOrFalse'] = trueOrFalse;
		return map;
	}
}

class GetExaminationQuestionRequest extends TokenRequest{
	String? code;

	GetExaminationQuestionRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory GetExaminationQuestionRequest.fromJson(Map<String, dynamic> map) {
		return GetExaminationQuestionRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class UpdateExaminationQuestionRequest extends TokenRequest{
	String? code;
	String? stem;
	QuestionTypeEnum questionType;
	List<QuestionOptionDTO>? questionOptionList;
	List<QuestionFileDTO>? fileList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	bool trueOrFalse;

	UpdateExaminationQuestionRequest({
		this.code,
		this.stem,
		this.questionType = QuestionTypeEnum.Judge,
		this.questionOptionList,
		this.fileList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.trueOrFalse = false,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateExaminationQuestionRequest.fromJson(Map<String, dynamic> map) {
		return UpdateExaminationQuestionRequest( 
			code: map['Code'],
			stem: map['Stem'],
			questionType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['QuestionType']),
			questionOptionList: map['QuestionOptionList'] != null ? (map['QuestionOptionList'] as List).map((e)=>QuestionOptionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileList: map['FileList'] != null ? (map['FileList'] as List).map((e)=>QuestionFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			trueOrFalse: map['TrueOrFalse'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (stem != null)
			map['Stem'] = stem;
		map['QuestionType'] = questionType.index;
		if (questionOptionList != null)
			map['QuestionOptionList'] = questionOptionList;
		if (fileList != null)
			map['FileList'] = fileList;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		map['TrueOrFalse'] = trueOrFalse;
		return map;
	}
}

class DeleteExaminationQuestionRequest extends TokenRequest{
	String? code;

	DeleteExaminationQuestionRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteExaminationQuestionRequest.fromJson(Map<String, dynamic> map) {
		return DeleteExaminationQuestionRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class GetExaminationPaperPagesRequest extends PageRequest{
	String? keyword;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;

	GetExaminationPaperPagesRequest({
		this.keyword,
		this.caseLabelCodes,
		this.courseLabelCodes,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetExaminationPaperPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetExaminationPaperPagesRequest( 
			keyword: map['Keyword'],
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		return map;
	}
}

class GetExaminationPaperRequest extends TokenRequest{
	String? examinationPaperCode;

	GetExaminationPaperRequest({
		this.examinationPaperCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetExaminationPaperRequest.fromJson(Map<String, dynamic> map) {
		return GetExaminationPaperRequest( 
			examinationPaperCode: map['ExaminationPaperCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (examinationPaperCode != null)
			map['ExaminationPaperCode'] = examinationPaperCode;
		return map;
	}
}

class CancelLiveCourseRequest extends InitiateLiveCourseRequest{

	CancelLiveCourseRequest({
		String? courseCode,
		String? token,
	}) : super(
			courseCode: courseCode,
			token: token,
		);

	factory CancelLiveCourseRequest.fromJson(Map<String, dynamic> map) {
		return CancelLiveCourseRequest( 
			courseCode: map['CourseCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class QueryStudentByGroupCodePageRequest extends PageRequest{
	String? keyword;
	String? userGroupCode;

	QueryStudentByGroupCodePageRequest({
		this.keyword,
		this.userGroupCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryStudentByGroupCodePageRequest.fromJson(Map<String, dynamic> map) {
		return QueryStudentByGroupCodePageRequest( 
			keyword: map['Keyword'],
			userGroupCode: map['UserGroupCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (userGroupCode != null)
			map['UserGroupCode'] = userGroupCode;
		return map;
	}
}

class UpdateExaminationPaperRequest extends TokenRequest{
	String? examinationPaperCode;
	String? name;
	double totalScore;
	List<QuestionDetailDTO>? questionList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;

	UpdateExaminationPaperRequest({
		this.examinationPaperCode,
		this.name,
		this.totalScore = 0,
		this.questionList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateExaminationPaperRequest.fromJson(Map<String, dynamic> map) {
		return UpdateExaminationPaperRequest( 
			examinationPaperCode: map['ExaminationPaperCode'],
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>QuestionDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (examinationPaperCode != null)
			map['ExaminationPaperCode'] = examinationPaperCode;
		if (name != null)
			map['Name'] = name;
		map['TotalScore'] = totalScore;
		if (questionList != null)
			map['QuestionList'] = questionList;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		return map;
	}
}

class AlterDeviceRequest extends TokenRequest{
	String? deviceCode;
	String? serialNumber;
	String? name;
	String? description;
	String? headPicUrl;
	String? organizationCode;
	String? departmentCode;
	bool isAutoShared;

	AlterDeviceRequest({
		this.deviceCode,
		this.serialNumber,
		this.name,
		this.description,
		this.headPicUrl,
		this.organizationCode,
		this.departmentCode,
		this.isAutoShared = false,
		String? token,
	}) : super(
			token: token,
		);

	factory AlterDeviceRequest.fromJson(Map<String, dynamic> map) {
		return AlterDeviceRequest( 
			deviceCode: map['DeviceCode'],
			serialNumber: map['SerialNumber'],
			name: map['Name'],
			description: map['Description'],
			headPicUrl: map['HeadPicUrl'],
			organizationCode: map['OrganizationCode'],
			departmentCode: map['DepartmentCode'],
			isAutoShared: map['IsAutoShared'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		if (serialNumber != null)
			map['SerialNumber'] = serialNumber;
		if (name != null)
			map['Name'] = name;
		if (description != null)
			map['Description'] = description;
		if (headPicUrl != null)
			map['HeadPicUrl'] = headPicUrl;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (departmentCode != null)
			map['DepartmentCode'] = departmentCode;
		map['IsAutoShared'] = isAutoShared;
		return map;
	}
}

class CleanDeviceCacheRequest {
	String? deviceCode;

	CleanDeviceCacheRequest({
		this.deviceCode,
	});

	factory CleanDeviceCacheRequest.fromJson(Map<String, dynamic> map) {
		return CleanDeviceCacheRequest( 
			deviceCode: map['DeviceCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (deviceCode != null) {
			map['DeviceCode'] = deviceCode;
		}
		return map;
	}
}

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 DeleteDeviceRequest {
	String? deviceCode;

	DeleteDeviceRequest({
		this.deviceCode,
	});

	factory DeleteDeviceRequest.fromJson(Map<String, dynamic> map) {
		return DeleteDeviceRequest( 
			deviceCode: map['DeviceCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (deviceCode != null) {
			map['DeviceCode'] = deviceCode;
		}
		return map;
	}
}

class DeviceDiagnosisChangedNotification extends TokenRequest{
	String? diagnosisModule;
	String? organizationCode;
	String? deviceCode;

	DeviceDiagnosisChangedNotification({
		this.diagnosisModule,
		this.organizationCode,
		this.deviceCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeviceDiagnosisChangedNotification.fromJson(Map<String, dynamic> map) {
		return DeviceDiagnosisChangedNotification( 
			diagnosisModule: map['DiagnosisModule'],
			organizationCode: map['OrganizationCode'],
			deviceCode: map['DeviceCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (diagnosisModule != null)
			map['DiagnosisModule'] = diagnosisModule;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		return map;
	}
}

class DeviceLeaveLiveConsultationRequest extends TokenRequest{
	String? consultationCode;

	DeviceLeaveLiveConsultationRequest({
		this.consultationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeviceLeaveLiveConsultationRequest.fromJson(Map<String, dynamic> map) {
		return DeviceLeaveLiveConsultationRequest( 
			consultationCode: map['ConsultationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (consultationCode != null)
			map['ConsultationCode'] = consultationCode;
		return map;
	}
}

class DeviceLeaveLiveConsultationResult {
	bool success;

	DeviceLeaveLiveConsultationResult({
		this.success = false,
	});

	factory DeviceLeaveLiveConsultationResult.fromJson(Map<String, dynamic> map) {
		return DeviceLeaveLiveConsultationResult( 
			success: map['Success'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Success'] = success;
		return map;
	}
}

class GetDevicePrinterRequest extends TokenRequest{
	String? deviceCode;
	DevicePrinterEnum getPrinterEnum;

	GetDevicePrinterRequest({
		this.deviceCode,
		this.getPrinterEnum = DevicePrinterEnum.GetInstalledPrinters,
		String? token,
	}) : super(
			token: token,
		);

	factory GetDevicePrinterRequest.fromJson(Map<String, dynamic> map) {
		return GetDevicePrinterRequest( 
			deviceCode: map['DeviceCode'],
			getPrinterEnum: DevicePrinterEnum.values.firstWhere((e) => e.index == map['GetPrinterEnum']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		map['GetPrinterEnum'] = getPrinterEnum.index;
		return map;
	}
}

class RemoteConnectDataRequest {
	String? roomCode;
	UserRemoteConnectRequest? userRemoteConnect;
	bool isManangeDisConnnect;

	RemoteConnectDataRequest({
		this.roomCode,
		this.userRemoteConnect,
		this.isManangeDisConnnect = false,
	});

	factory RemoteConnectDataRequest.fromJson(Map<String, dynamic> map) {
		return RemoteConnectDataRequest( 
			roomCode: map['RoomCode'],
			userRemoteConnect: map['UserRemoteConnect'] != null ? UserRemoteConnectRequest.fromJson(map['UserRemoteConnect']) : null,
			isManangeDisConnnect: map['IsManangeDisConnnect'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (roomCode != null) {
			map['RoomCode'] = roomCode;
		}
		if (userRemoteConnect != null) {
			map['UserRemoteConnect'] = userRemoteConnect;
		}
		map['IsManangeDisConnnect'] = isManangeDisConnnect;
		return map;
	}
}

class ReportLiveStateResult {

	ReportLiveStateResult();

	factory ReportLiveStateResult.fromJson(Map<String, dynamic> map) {
		return ReportLiveStateResult( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		return map;
	}
}

class SaveDeviceUpgradeVersionRequest extends TokenRequest{
	String? deviceCode;
	String? deviceUpgradeVersionCode;

	SaveDeviceUpgradeVersionRequest({
		this.deviceCode,
		this.deviceUpgradeVersionCode,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveDeviceUpgradeVersionRequest.fromJson(Map<String, dynamic> map) {
		return SaveDeviceUpgradeVersionRequest( 
			deviceCode: map['DeviceCode'],
			deviceUpgradeVersionCode: map['DeviceUpgradeVersionCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		if (deviceUpgradeVersionCode != null)
			map['DeviceUpgradeVersionCode'] = deviceUpgradeVersionCode;
		return map;
	}
}

class RemoteControlRequest extends TokenRequest{
	String? controlUserCode;

	RemoteControlRequest({
		this.controlUserCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoteControlRequest.fromJson(Map<String, dynamic> map) {
		return RemoteControlRequest( 
			controlUserCode: map['ControlUserCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (controlUserCode != null)
			map['ControlUserCode'] = controlUserCode;
		return map;
	}
}

class TransportAfterSalesCommonRequest {
	String? reqJson;
	String? receiverId;
	NotificationTypeEnum notificationType;

	TransportAfterSalesCommonRequest({
		this.reqJson,
		this.receiverId,
		this.notificationType = NotificationTypeEnum.Unknown,
	});

	factory TransportAfterSalesCommonRequest.fromJson(Map<String, dynamic> map) {
		return TransportAfterSalesCommonRequest( 
			reqJson: map['ReqJson'],
			receiverId: map['ReceiverId'],
			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (reqJson != null) {
			map['ReqJson'] = reqJson;
		}
		if (receiverId != null) {
			map['ReceiverId'] = receiverId;
		}
		map['NotificationType'] = notificationType.index;
		return map;
	}
}

class CheckUserAuthRequest extends TokenRequest{
	String? signature;
	OrganizationPatientTypeEnum patientType;
	String? userName;
	String? organizationCode;

	CheckUserAuthRequest({
		this.signature,
		this.patientType = OrganizationPatientTypeEnum.Person,
		this.userName,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory CheckUserAuthRequest.fromJson(Map<String, dynamic> map) {
		return CheckUserAuthRequest( 
			signature: map['Signature'],
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
			userName: map['UserName'],
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (signature != null)
			map['Signature'] = signature;
		map['PatientType'] = patientType.index;
		if (userName != null)
			map['UserName'] = userName;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class ConfirmAssociatedWithAccountRequest extends TokenRequest{
	String? emailAddress;
	String? verifyCode;

	ConfirmAssociatedWithAccountRequest({
		this.emailAddress,
		this.verifyCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ConfirmAssociatedWithAccountRequest.fromJson(Map<String, dynamic> map) {
		return ConfirmAssociatedWithAccountRequest( 
			emailAddress: map['EmailAddress'],
			verifyCode: map['VerifyCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (emailAddress != null)
			map['EmailAddress'] = emailAddress;
		if (verifyCode != null)
			map['VerifyCode'] = verifyCode;
		return map;
	}
}

class DeleteThesaurusCodeRequest extends TokenRequest{
	String? thesaurusCode;

	DeleteThesaurusCodeRequest({
		this.thesaurusCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteThesaurusCodeRequest.fromJson(Map<String, dynamic> map) {
		return DeleteThesaurusCodeRequest( 
			thesaurusCode: map['ThesaurusCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		return map;
	}
}

class SignUpRequest extends UserDTO{

	SignUpRequest({
		String? nickName,
		String? organizationCode,
		String? organizationName,
		String? departmentCode,
		String? departmentName,
		String? departmentShortCode,
		String? rootOrganizationCode,
		String? rootOrganizationName,
		List<String>? authorityGroups,
		List<String>? bindDevices,
		List<String>? bindDeviceOrganizations,
		String? lastIP,
		int logintimes = 0,
		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
		List<String>? roleCodes,
		List<String>? rankCodes,
		List<String>? positionCodes,
		ApplyStateEnum applyState = ApplyStateEnum.NotApply,
		String? rankName,
		String? positionName,
		bool isDirector = false,
		List<String>? fieldList,
		List<String>? deletePatientCodes,
		bool isBatchExportDiagnoseData = false,
		String? bindAssistantUserCode,
		String? bindAssistantDoctorUserCode,
		LoginLockInfoDTO? loginLockInfo,
		String? signature,
		String? language,
		bool enableReportLabel = false,
		List<AssociatedInfoDTO>? associatedInfos,
		String? commonPlatformUserId,
		String? bindEmergencyDeviceCode,
		String? bindEmergencyExpertCode,
		List<String>? dashboardOrgCodes,
		String? organizationShortCode,
		String? rootOrganizationShortCode,
		bool isOldAgent = false,
		List<String>? userFeatureCodes,
		String? openId,
		String? phone,
		String? email,
		String? userCode,
		String? userName,
		String? fullName,
		String? headImageUrl,
		String? displayName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			nickName: nickName,
			organizationCode: organizationCode,
			organizationName: organizationName,
			departmentCode: departmentCode,
			departmentName: departmentName,
			departmentShortCode: departmentShortCode,
			rootOrganizationCode: rootOrganizationCode,
			rootOrganizationName: rootOrganizationName,
			authorityGroups: authorityGroups,
			bindDevices: bindDevices,
			bindDeviceOrganizations: bindDeviceOrganizations,
			lastIP: lastIP,
			logintimes: logintimes,
			userState: userState,
			roleCodes: roleCodes,
			rankCodes: rankCodes,
			positionCodes: positionCodes,
			applyState: applyState,
			rankName: rankName,
			positionName: positionName,
			isDirector: isDirector,
			fieldList: fieldList,
			deletePatientCodes: deletePatientCodes,
			isBatchExportDiagnoseData: isBatchExportDiagnoseData,
			bindAssistantUserCode: bindAssistantUserCode,
			bindAssistantDoctorUserCode: bindAssistantDoctorUserCode,
			loginLockInfo: loginLockInfo,
			signature: signature,
			language: language,
			enableReportLabel: enableReportLabel,
			associatedInfos: associatedInfos,
			commonPlatformUserId: commonPlatformUserId,
			bindEmergencyDeviceCode: bindEmergencyDeviceCode,
			bindEmergencyExpertCode: bindEmergencyExpertCode,
			dashboardOrgCodes: dashboardOrgCodes,
			organizationShortCode: organizationShortCode,
			rootOrganizationShortCode: rootOrganizationShortCode,
			isOldAgent: isOldAgent,
			userFeatureCodes: userFeatureCodes,
			openId: openId,
			phone: phone,
			email: email,
			userCode: userCode,
			userName: userName,
			fullName: fullName,
			headImageUrl: headImageUrl,
			displayName: displayName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory SignUpRequest.fromJson(Map<String, dynamic> map) {
		return SignUpRequest( 
			nickName: map['NickName'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			departmentCode: map['DepartmentCode'],
			departmentName: map['DepartmentName'],
			departmentShortCode: map['DepartmentShortCode'],
			rootOrganizationCode: map['RootOrganizationCode'],
			rootOrganizationName: map['RootOrganizationName'],
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			bindDevices: map['BindDevices']?.cast<String>().toList(),
			bindDeviceOrganizations: map['BindDeviceOrganizations']?.cast<String>().toList(),
			lastIP: map['LastIP'],
			logintimes: map['Logintimes'],
			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			rankCodes: map['RankCodes']?.cast<String>().toList(),
			positionCodes: map['PositionCodes']?.cast<String>().toList(),
			applyState: ApplyStateEnum.values.firstWhere((e) => e.index == map['ApplyState']),
			rankName: map['RankName'],
			positionName: map['PositionName'],
			isDirector: map['IsDirector'],
			fieldList: map['FieldList']?.cast<String>().toList(),
			deletePatientCodes: map['DeletePatientCodes']?.cast<String>().toList(),
			isBatchExportDiagnoseData: map['IsBatchExportDiagnoseData'],
			bindAssistantUserCode: map['BindAssistantUserCode'],
			bindAssistantDoctorUserCode: map['BindAssistantDoctorUserCode'],
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			signature: map['Signature'],
			language: map['Language'],
			enableReportLabel: map['EnableReportLabel'],
			associatedInfos: map['AssociatedInfos'] != null ? (map['AssociatedInfos'] as List).map((e)=>AssociatedInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			commonPlatformUserId: map['CommonPlatformUserId'],
			bindEmergencyDeviceCode: map['BindEmergencyDeviceCode'],
			bindEmergencyExpertCode: map['BindEmergencyExpertCode'],
			dashboardOrgCodes: map['DashboardOrgCodes']?.cast<String>().toList(),
			organizationShortCode: map['OrganizationShortCode'],
			rootOrganizationShortCode: map['RootOrganizationShortCode'],
			isOldAgent: map['IsOldAgent'],
			userFeatureCodes: map['UserFeatureCodes']?.cast<String>().toList(),
			openId: map['OpenId'],
			phone: map['Phone'],
			email: map['Email'],
			userCode: map['UserCode'],
			userName: map['UserName'],
			fullName: map['FullName'],
			headImageUrl: map['HeadImageUrl'],
			displayName: map['DisplayName'],
			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();
		return map;
	}
}

class ClearAssociatedWithAccountRequest extends TokenRequest{
	String? thirdPartyUserId;

	ClearAssociatedWithAccountRequest({
		this.thirdPartyUserId,
		String? token,
	}) : super(
			token: token,
		);

	factory ClearAssociatedWithAccountRequest.fromJson(Map<String, dynamic> map) {
		return ClearAssociatedWithAccountRequest( 
			thirdPartyUserId: map['ThirdPartyUserId'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thirdPartyUserId != null)
			map['ThirdPartyUserId'] = thirdPartyUserId;
		return map;
	}
}

class UpdateThesaurusCodeRequest extends TokenRequest{
	String? thesaurusCode;

	UpdateThesaurusCodeRequest({
		this.thesaurusCode,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateThesaurusCodeRequest.fromJson(Map<String, dynamic> map) {
		return UpdateThesaurusCodeRequest( 
			thesaurusCode: map['ThesaurusCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		return map;
	}
}

enum AnnouncementStatusEnum {
	placeHolder_0,
	Released,
	Pending,
}

class AnnouncementInfoDTO extends BaseDTO{
	String? code;
	String? fileToken;
	int sort;
	String? deviceType;
	AnnouncementTypeEnum announcementType;
	AnnouncementStatusEnum announcementStatus;
	List<AnnouncementLanguageConfigDTO>? languageConfigs;
	String? videoToken;
	String? poster;
	String? vodFileId;
	int duration;
	double videoSize;

	AnnouncementInfoDTO({
		this.code,
		this.fileToken,
		this.sort = 0,
		this.deviceType,
		this.announcementType = AnnouncementTypeEnum.Broadcast,
		this.announcementStatus = AnnouncementStatusEnum.Released,
		this.languageConfigs,
		this.videoToken,
		this.poster,
		this.vodFileId,
		this.duration = 0,
		this.videoSize = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AnnouncementInfoDTO.fromJson(Map<String, dynamic> map) {
		return AnnouncementInfoDTO( 
			code: map['Code'],
			fileToken: map['FileToken'],
			sort: map['Sort'],
			deviceType: map['DeviceType'],
			announcementType: AnnouncementTypeEnum.values.firstWhere((e) => e.index == map['AnnouncementType']),
			announcementStatus: AnnouncementStatusEnum.values.firstWhere((e) => e.index == map['AnnouncementStatus']),
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>AnnouncementLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			videoToken: map['VideoToken'],
			poster: map['Poster'],
			vodFileId: map['VodFileId'],
			duration: map['Duration'],
			videoSize: double.parse(map['VideoSize'].toString()),
			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 (fileToken != null)
			map['FileToken'] = fileToken;
		map['Sort'] = sort;
		if (deviceType != null)
			map['DeviceType'] = deviceType;
		map['AnnouncementType'] = announcementType.index;
		map['AnnouncementStatus'] = announcementStatus.index;
		if (languageConfigs != null)
			map['LanguageConfigs'] = languageConfigs;
		if (videoToken != null)
			map['VideoToken'] = videoToken;
		if (poster != null)
			map['Poster'] = poster;
		if (vodFileId != null)
			map['VodFileId'] = vodFileId;
		map['Duration'] = duration;
		map['VideoSize'] = videoSize;
		return map;
	}
}

class AddAnnouncementRequest extends AnnouncementInfoDTO{

	AddAnnouncementRequest({
		String? code,
		String? fileToken,
		int sort = 0,
		String? deviceType,
		AnnouncementTypeEnum announcementType = AnnouncementTypeEnum.Broadcast,
		AnnouncementStatusEnum announcementStatus = AnnouncementStatusEnum.Released,
		List<AnnouncementLanguageConfigDTO>? languageConfigs,
		String? videoToken,
		String? poster,
		String? vodFileId,
		int duration = 0,
		double videoSize = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			fileToken: fileToken,
			sort: sort,
			deviceType: deviceType,
			announcementType: announcementType,
			announcementStatus: announcementStatus,
			languageConfigs: languageConfigs,
			videoToken: videoToken,
			poster: poster,
			vodFileId: vodFileId,
			duration: duration,
			videoSize: videoSize,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AddAnnouncementRequest.fromJson(Map<String, dynamic> map) {
		return AddAnnouncementRequest( 
			code: map['Code'],
			fileToken: map['FileToken'],
			sort: map['Sort'],
			deviceType: map['DeviceType'],
			announcementType: AnnouncementTypeEnum.values.firstWhere((e) => e.index == map['AnnouncementType']),
			announcementStatus: AnnouncementStatusEnum.values.firstWhere((e) => e.index == map['AnnouncementStatus']),
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>AnnouncementLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			videoToken: map['VideoToken'],
			poster: map['Poster'],
			vodFileId: map['VodFileId'],
			duration: map['Duration'],
			videoSize: double.parse(map['VideoSize'].toString()),
			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();
		return map;
	}
}

class UpdateAnnouncementRequest extends AnnouncementInfoDTO{

	UpdateAnnouncementRequest({
		String? code,
		String? fileToken,
		int sort = 0,
		String? deviceType,
		AnnouncementTypeEnum announcementType = AnnouncementTypeEnum.Broadcast,
		AnnouncementStatusEnum announcementStatus = AnnouncementStatusEnum.Released,
		List<AnnouncementLanguageConfigDTO>? languageConfigs,
		String? videoToken,
		String? poster,
		String? vodFileId,
		int duration = 0,
		double videoSize = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			fileToken: fileToken,
			sort: sort,
			deviceType: deviceType,
			announcementType: announcementType,
			announcementStatus: announcementStatus,
			languageConfigs: languageConfigs,
			videoToken: videoToken,
			poster: poster,
			vodFileId: vodFileId,
			duration: duration,
			videoSize: videoSize,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UpdateAnnouncementRequest.fromJson(Map<String, dynamic> map) {
		return UpdateAnnouncementRequest( 
			code: map['Code'],
			fileToken: map['FileToken'],
			sort: map['Sort'],
			deviceType: map['DeviceType'],
			announcementType: AnnouncementTypeEnum.values.firstWhere((e) => e.index == map['AnnouncementType']),
			announcementStatus: AnnouncementStatusEnum.values.firstWhere((e) => e.index == map['AnnouncementStatus']),
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>AnnouncementLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			videoToken: map['VideoToken'],
			poster: map['Poster'],
			vodFileId: map['VodFileId'],
			duration: map['Duration'],
			videoSize: double.parse(map['VideoSize'].toString()),
			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();
		return map;
	}
}

class AddContentConfigRequest extends TokenRequest{
	String? bindTypeKey;
	String? bindTypeValue;
	String? bindContentKey;
	String? bindContentValue;

	AddContentConfigRequest({
		this.bindTypeKey,
		this.bindTypeValue,
		this.bindContentKey,
		this.bindContentValue,
		String? token,
	}) : super(
			token: token,
		);

	factory AddContentConfigRequest.fromJson(Map<String, dynamic> map) {
		return AddContentConfigRequest( 
			bindTypeKey: map['BindTypeKey'],
			bindTypeValue: map['BindTypeValue'],
			bindContentKey: map['BindContentKey'],
			bindContentValue: map['BindContentValue'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (bindTypeKey != null)
			map['BindTypeKey'] = bindTypeKey;
		if (bindTypeValue != null)
			map['BindTypeValue'] = bindTypeValue;
		if (bindContentKey != null)
			map['BindContentKey'] = bindContentKey;
		if (bindContentValue != null)
			map['BindContentValue'] = bindContentValue;
		return map;
	}
}

enum DeviceVideoOutputTypeEnum {
	MergedVideo,
	Desktop,
	Camera,
}

class AddDeviceOutputConfigRequest extends TokenRequest{
	DeviceVideoOutputTypeEnum deviceVideoOutputType;
	int videoWidth;
	int videoHeight;

	AddDeviceOutputConfigRequest({
		this.deviceVideoOutputType = DeviceVideoOutputTypeEnum.MergedVideo,
		this.videoWidth = 0,
		this.videoHeight = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory AddDeviceOutputConfigRequest.fromJson(Map<String, dynamic> map) {
		return AddDeviceOutputConfigRequest( 
			deviceVideoOutputType: DeviceVideoOutputTypeEnum.values.firstWhere((e) => e.index == map['DeviceVideoOutputType']),
			videoWidth: map['VideoWidth'],
			videoHeight: map['VideoHeight'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['DeviceVideoOutputType'] = deviceVideoOutputType.index;
		map['VideoWidth'] = videoWidth;
		map['VideoHeight'] = videoHeight;
		return map;
	}
}

class AdminApplyCourseRequest extends TokenRequest{
	String? name;
	String? courseIntro;
	String? teacherCode;
	String? cover;
	DateTime? startTime;
	int duration;
	CourseTypeEnum courseType;
	CourseAudienceTypeEnum audienceType;
	String? coursewareToken;
	String? teacherName;
	CourseViewRangeEnum viewRange;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	List<String>? userGroupCodes;
	double price;
	List<String>? courseVideoCodes;
	List<CourseExaminationDTO>? bindExams;
	bool isSmallClass;
	List<String>? assistants;
	List<String>? experts;
	bool isAgentCourse;
	List<String>? courseAlbumCodes;
	bool isStick;
	int sort;
	bool isJustVideoCourse;

	AdminApplyCourseRequest({
		this.name,
		this.courseIntro,
		this.teacherCode,
		this.cover,
		this.startTime,
		this.duration = 0,
		this.courseType = CourseTypeEnum.Unknown,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		this.coursewareToken,
		this.teacherName,
		this.viewRange = CourseViewRangeEnum.All,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.userGroupCodes,
		this.price = 0,
		this.courseVideoCodes,
		this.bindExams,
		this.isSmallClass = false,
		this.assistants,
		this.experts,
		this.isAgentCourse = false,
		this.courseAlbumCodes,
		this.isStick = false,
		this.sort = 0,
		this.isJustVideoCourse = false,
		String? token,
	}) : super(
			token: token,
		);

	factory AdminApplyCourseRequest.fromJson(Map<String, dynamic> map) {
		return AdminApplyCourseRequest( 
			name: map['Name'],
			courseIntro: map['CourseIntro'],
			teacherCode: map['TeacherCode'],
			cover: map['Cover'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			duration: map['Duration'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			coursewareToken: map['CoursewareToken'],
			teacherName: map['TeacherName'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			userGroupCodes: map['UserGroupCodes']?.cast<String>().toList(),
			price: double.parse(map['Price'].toString()),
			courseVideoCodes: map['CourseVideoCodes']?.cast<String>().toList(),
			bindExams: map['BindExams'] != null ? (map['BindExams'] as List).map((e)=>CourseExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isSmallClass: map['IsSmallClass'],
			assistants: map['Assistants']?.cast<String>().toList(),
			experts: map['Experts']?.cast<String>().toList(),
			isAgentCourse: map['IsAgentCourse'],
			courseAlbumCodes: map['CourseAlbumCodes']?.cast<String>().toList(),
			isStick: map['IsStick'],
			sort: map['Sort'],
			isJustVideoCourse: map['IsJustVideoCourse'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (name != null)
			map['Name'] = name;
		if (courseIntro != null)
			map['CourseIntro'] = courseIntro;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (cover != null)
			map['Cover'] = cover;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		map['Duration'] = duration;
		map['CourseType'] = courseType.index;
		map['AudienceType'] = audienceType.index;
		if (coursewareToken != null)
			map['CoursewareToken'] = coursewareToken;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		map['ViewRange'] = viewRange.index;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		if (userGroupCodes != null)
			map['UserGroupCodes'] = userGroupCodes;
		map['Price'] = price;
		if (courseVideoCodes != null)
			map['CourseVideoCodes'] = courseVideoCodes;
		if (bindExams != null)
			map['BindExams'] = bindExams;
		map['IsSmallClass'] = isSmallClass;
		if (assistants != null)
			map['Assistants'] = assistants;
		if (experts != null)
			map['Experts'] = experts;
		map['IsAgentCourse'] = isAgentCourse;
		if (courseAlbumCodes != null)
			map['CourseAlbumCodes'] = courseAlbumCodes;
		map['IsStick'] = isStick;
		map['Sort'] = sort;
		map['IsJustVideoCourse'] = isJustVideoCourse;
		return map;
	}
}

class AdminApprovalCourseRequest extends TokenRequest{
	String? code;
	CourseStatusEnum status;

	AdminApprovalCourseRequest({
		this.code,
		this.status = CourseStatusEnum.Unknown,
		String? token,
	}) : super(
			token: token,
		);

	factory AdminApprovalCourseRequest.fromJson(Map<String, dynamic> map) {
		return AdminApprovalCourseRequest( 
			code: map['Code'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		map['Status'] = status.index;
		return map;
	}
}

class AdminDeleteCourseByCodeRequest extends TokenRequest{
	String? code;

	AdminDeleteCourseByCodeRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory AdminDeleteCourseByCodeRequest.fromJson(Map<String, dynamic> map) {
		return AdminDeleteCourseByCodeRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class AdminFindCoursePagesRequest extends PageRequest{
	String? keyword;
	CourseStatusEnum status;
	String? languageCode;
	CourseTypeEnum courseType;
	CourseAudienceTypeEnum audienceType;

	AdminFindCoursePagesRequest({
		this.keyword,
		this.status = CourseStatusEnum.Unknown,
		this.languageCode,
		this.courseType = CourseTypeEnum.Unknown,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory AdminFindCoursePagesRequest.fromJson(Map<String, dynamic> map) {
		return AdminFindCoursePagesRequest( 
			keyword: map['Keyword'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			languageCode: map['LanguageCode'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		map['Status'] = status.index;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		map['CourseType'] = courseType.index;
		map['AudienceType'] = audienceType.index;
		return map;
	}
}

class AdminUpdateCourseRequest extends TokenRequest{
	String? code;
	String? name;
	String? courseIntro;
	String? teacherCode;
	String? cover;
	DateTime? startTime;
	int duration;
	CourseTypeEnum courseType;
	CourseAudienceTypeEnum audienceType;
	String? coursewareToken;
	String? teacherName;
	CourseViewRangeEnum viewRange;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	List<String>? userGroupCodes;
	double price;
	List<String>? courseVideoCodes;
	List<CourseExaminationDTO>? bindExams;
	bool isSmallClass;
	List<String>? assistants;
	List<String>? experts;
	bool isAgentCourse;
	List<String>? courseAlbumCodes;
	bool isStick;
	int sort;
	bool isJustVideoCourse;

	AdminUpdateCourseRequest({
		this.code,
		this.name,
		this.courseIntro,
		this.teacherCode,
		this.cover,
		this.startTime,
		this.duration = 0,
		this.courseType = CourseTypeEnum.Unknown,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		this.coursewareToken,
		this.teacherName,
		this.viewRange = CourseViewRangeEnum.All,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.userGroupCodes,
		this.price = 0,
		this.courseVideoCodes,
		this.bindExams,
		this.isSmallClass = false,
		this.assistants,
		this.experts,
		this.isAgentCourse = false,
		this.courseAlbumCodes,
		this.isStick = false,
		this.sort = 0,
		this.isJustVideoCourse = false,
		String? token,
	}) : super(
			token: token,
		);

	factory AdminUpdateCourseRequest.fromJson(Map<String, dynamic> map) {
		return AdminUpdateCourseRequest( 
			code: map['Code'],
			name: map['Name'],
			courseIntro: map['CourseIntro'],
			teacherCode: map['TeacherCode'],
			cover: map['Cover'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			duration: map['Duration'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			coursewareToken: map['CoursewareToken'],
			teacherName: map['TeacherName'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			userGroupCodes: map['UserGroupCodes']?.cast<String>().toList(),
			price: double.parse(map['Price'].toString()),
			courseVideoCodes: map['CourseVideoCodes']?.cast<String>().toList(),
			bindExams: map['BindExams'] != null ? (map['BindExams'] as List).map((e)=>CourseExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isSmallClass: map['IsSmallClass'],
			assistants: map['Assistants']?.cast<String>().toList(),
			experts: map['Experts']?.cast<String>().toList(),
			isAgentCourse: map['IsAgentCourse'],
			courseAlbumCodes: map['CourseAlbumCodes']?.cast<String>().toList(),
			isStick: map['IsStick'],
			sort: map['Sort'],
			isJustVideoCourse: map['IsJustVideoCourse'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (name != null)
			map['Name'] = name;
		if (courseIntro != null)
			map['CourseIntro'] = courseIntro;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (cover != null)
			map['Cover'] = cover;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		map['Duration'] = duration;
		map['CourseType'] = courseType.index;
		map['AudienceType'] = audienceType.index;
		if (coursewareToken != null)
			map['CoursewareToken'] = coursewareToken;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		map['ViewRange'] = viewRange.index;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		if (userGroupCodes != null)
			map['UserGroupCodes'] = userGroupCodes;
		map['Price'] = price;
		if (courseVideoCodes != null)
			map['CourseVideoCodes'] = courseVideoCodes;
		if (bindExams != null)
			map['BindExams'] = bindExams;
		map['IsSmallClass'] = isSmallClass;
		if (assistants != null)
			map['Assistants'] = assistants;
		if (experts != null)
			map['Experts'] = experts;
		map['IsAgentCourse'] = isAgentCourse;
		if (courseAlbumCodes != null)
			map['CourseAlbumCodes'] = courseAlbumCodes;
		map['IsStick'] = isStick;
		map['Sort'] = sort;
		map['IsJustVideoCourse'] = isJustVideoCourse;
		return map;
	}
}

class AdminUpdateCourseBindExamsRequest extends TokenRequest{
	String? code;
	List<CourseExaminationDTO>? bindExams;
	bool isJustVideoCourse;

	AdminUpdateCourseBindExamsRequest({
		this.code,
		this.bindExams,
		this.isJustVideoCourse = false,
		String? token,
	}) : super(
			token: token,
		);

	factory AdminUpdateCourseBindExamsRequest.fromJson(Map<String, dynamic> map) {
		return AdminUpdateCourseBindExamsRequest( 
			code: map['Code'],
			bindExams: map['BindExams'] != null ? (map['BindExams'] as List).map((e)=>CourseExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isJustVideoCourse: map['IsJustVideoCourse'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (bindExams != null)
			map['BindExams'] = bindExams;
		map['IsJustVideoCourse'] = isJustVideoCourse;
		return map;
	}
}

class AssignedAdminsToOrganizationsRequest extends TokenRequest{
	List<String>? assignedAdmins;
	List<String>? organizationCodes;

	AssignedAdminsToOrganizationsRequest({
		this.assignedAdmins,
		this.organizationCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory AssignedAdminsToOrganizationsRequest.fromJson(Map<String, dynamic> map) {
		return AssignedAdminsToOrganizationsRequest( 
			assignedAdmins: map['AssignedAdmins']?.cast<String>().toList(),
			organizationCodes: map['OrganizationCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (assignedAdmins != null)
			map['AssignedAdmins'] = assignedAdmins;
		if (organizationCodes != null)
			map['OrganizationCodes'] = organizationCodes;
		return map;
	}
}

class ClearLogOperateDTO {
	String? serverHost;
	DateTime? lastClearTime;
	DateTime? lastClearOperateTime;

	ClearLogOperateDTO({
		this.serverHost,
		this.lastClearTime,
		this.lastClearOperateTime,
	});

	factory ClearLogOperateDTO.fromJson(Map<String, dynamic> map) {
		return ClearLogOperateDTO( 
			serverHost: map['ServerHost'],
			lastClearTime: map['LastClearTime'] != null ? DateTime.parse(map['LastClearTime']) : null,
			lastClearOperateTime: map['LastClearOperateTime'] != null ? DateTime.parse(map['LastClearOperateTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (serverHost != null) {
			map['ServerHost'] = serverHost;
		}
		if (lastClearTime != null) {
			map['LastClearTime'] = JsonRpcUtils.dateFormat(lastClearTime!);
		}
		if (lastClearOperateTime != null) {
			map['LastClearOperateTime'] = JsonRpcUtils.dateFormat(lastClearOperateTime!);
		}
		return map;
	}
}

class AdminInfoDTO extends BaseDTO{
	String? adminCode;
	String? fatherCode;
	String? adminName;
	String? fullName;
	String? secretPassword;
	String? headImageToken;
	String? licenseKey;
	String? lastIP;
	String? phone;
	String? email;
	List<String>? roleCodes;
	LoginLockInfoDTO? loginLockInfo;
	DateTime? passwordUpdateTime;
	List<String>? passwordRecords;
	List<ClearLogOperateDTO>? clearLogOperateList;
	List<String>? assignedOrganizations;
	String? bindUserCode;
	String? bindUserName;

	AdminInfoDTO({
		this.adminCode,
		this.fatherCode,
		this.adminName,
		this.fullName,
		this.secretPassword,
		this.headImageToken,
		this.licenseKey,
		this.lastIP,
		this.phone,
		this.email,
		this.roleCodes,
		this.loginLockInfo,
		this.passwordUpdateTime,
		this.passwordRecords,
		this.clearLogOperateList,
		this.assignedOrganizations,
		this.bindUserCode,
		this.bindUserName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminInfoDTO.fromJson(Map<String, dynamic> map) {
		return AdminInfoDTO( 
			adminCode: map['AdminCode'],
			fatherCode: map['FatherCode'],
			adminName: map['AdminName'],
			fullName: map['FullName'],
			secretPassword: map['SecretPassword'],
			headImageToken: map['HeadImageToken'],
			licenseKey: map['LicenseKey'],
			lastIP: map['LastIP'],
			phone: map['Phone'],
			email: map['Email'],
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			passwordUpdateTime: map['PasswordUpdateTime'] != null ? DateTime.parse(map['PasswordUpdateTime']) : null,
			passwordRecords: map['PasswordRecords']?.cast<String>().toList(),
			clearLogOperateList: map['ClearLogOperateList'] != null ? (map['ClearLogOperateList'] as List).map((e)=>ClearLogOperateDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			assignedOrganizations: map['AssignedOrganizations']?.cast<String>().toList(),
			bindUserCode: map['BindUserCode'],
			bindUserName: map['BindUserName'],
			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 (adminCode != null)
			map['AdminCode'] = adminCode;
		if (fatherCode != null)
			map['FatherCode'] = fatherCode;
		if (adminName != null)
			map['AdminName'] = adminName;
		if (fullName != null)
			map['FullName'] = fullName;
		if (secretPassword != null)
			map['SecretPassword'] = secretPassword;
		if (headImageToken != null)
			map['HeadImageToken'] = headImageToken;
		if (licenseKey != null)
			map['LicenseKey'] = licenseKey;
		if (lastIP != null)
			map['LastIP'] = lastIP;
		if (phone != null)
			map['Phone'] = phone;
		if (email != null)
			map['Email'] = email;
		if (roleCodes != null)
			map['RoleCodes'] = roleCodes;
		if (loginLockInfo != null)
			map['LoginLockInfo'] = loginLockInfo;
		if (passwordUpdateTime != null)
			map['PasswordUpdateTime'] = JsonRpcUtils.dateFormat(passwordUpdateTime!);
		if (passwordRecords != null)
			map['PasswordRecords'] = passwordRecords;
		if (clearLogOperateList != null)
			map['ClearLogOperateList'] = clearLogOperateList;
		if (assignedOrganizations != null)
			map['AssignedOrganizations'] = assignedOrganizations;
		if (bindUserCode != null)
			map['BindUserCode'] = bindUserCode;
		if (bindUserName != null)
			map['BindUserName'] = bindUserName;
		return map;
	}
}

enum AdminMigratoryRoleEnum {
	PrimaryAdmin01,
	GeneralAdmin,
}

class AdminMigratoryInfo extends AdminInfoDTO{
	AdminMigratoryRoleEnum adminRole;
	bool isDelete;

	AdminMigratoryInfo({
		this.adminRole = AdminMigratoryRoleEnum.PrimaryAdmin01,
		this.isDelete = false,
		String? adminCode,
		String? fatherCode,
		String? adminName,
		String? fullName,
		String? secretPassword,
		String? headImageToken,
		String? licenseKey,
		String? lastIP,
		String? phone,
		String? email,
		List<String>? roleCodes,
		LoginLockInfoDTO? loginLockInfo,
		DateTime? passwordUpdateTime,
		List<String>? passwordRecords,
		List<ClearLogOperateDTO>? clearLogOperateList,
		List<String>? assignedOrganizations,
		String? bindUserCode,
		String? bindUserName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminCode: adminCode,
			fatherCode: fatherCode,
			adminName: adminName,
			fullName: fullName,
			secretPassword: secretPassword,
			headImageToken: headImageToken,
			licenseKey: licenseKey,
			lastIP: lastIP,
			phone: phone,
			email: email,
			roleCodes: roleCodes,
			loginLockInfo: loginLockInfo,
			passwordUpdateTime: passwordUpdateTime,
			passwordRecords: passwordRecords,
			clearLogOperateList: clearLogOperateList,
			assignedOrganizations: assignedOrganizations,
			bindUserCode: bindUserCode,
			bindUserName: bindUserName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return AdminMigratoryInfo( 
			adminRole: AdminMigratoryRoleEnum.values.firstWhere((e) => e.index == map['AdminRole']),
			isDelete: map['IsDelete'],
			adminCode: map['AdminCode'],
			fatherCode: map['FatherCode'],
			adminName: map['AdminName'],
			fullName: map['FullName'],
			secretPassword: map['SecretPassword'],
			headImageToken: map['HeadImageToken'],
			licenseKey: map['LicenseKey'],
			lastIP: map['LastIP'],
			phone: map['Phone'],
			email: map['Email'],
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			passwordUpdateTime: map['PasswordUpdateTime'] != null ? DateTime.parse(map['PasswordUpdateTime']) : null,
			passwordRecords: map['PasswordRecords']?.cast<String>().toList(),
			clearLogOperateList: map['ClearLogOperateList'] != null ? (map['ClearLogOperateList'] as List).map((e)=>ClearLogOperateDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			assignedOrganizations: map['AssignedOrganizations']?.cast<String>().toList(),
			bindUserCode: map['BindUserCode'],
			bindUserName: map['BindUserName'],
			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();
		map['AdminRole'] = adminRole.index;
		map['IsDelete'] = isDelete;
		return map;
	}
}

class BatchInsertAdminRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<AdminMigratoryInfo>? adminMigratorys;

	BatchInsertAdminRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.adminMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertAdminRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertAdminRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			adminMigratorys: map['AdminMigratorys'] != null ? (map['AdminMigratorys'] as List).map((e)=>AdminMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (adminMigratorys != null)
			map['AdminMigratorys'] = adminMigratorys;
		return map;
	}
}

class CourseLabelMigratoryInfo extends BaseDTO{
	bool isDelete;
	String? code;
	List<LabelLanguageConfigDTO>? labelLanguageConfigs;
	OrganizationPatientTypeEnum useObjectType;
	LabelTypeEnum type;

	CourseLabelMigratoryInfo({
		this.isDelete = false,
		this.code,
		this.labelLanguageConfigs,
		this.useObjectType = OrganizationPatientTypeEnum.Person,
		this.type = LabelTypeEnum.Unknown,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CourseLabelMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return CourseLabelMigratoryInfo( 
			isDelete: map['IsDelete'],
			code: map['Code'],
			labelLanguageConfigs: map['LabelLanguageConfigs'] != null ? (map['LabelLanguageConfigs'] as List).map((e)=>LabelLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			useObjectType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['UseObjectType']),
			type: LabelTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			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();
		map['IsDelete'] = isDelete;
		if (code != null)
			map['Code'] = code;
		if (labelLanguageConfigs != null)
			map['LabelLanguageConfigs'] = labelLanguageConfigs;
		map['UseObjectType'] = useObjectType.index;
		map['Type'] = type.index;
		return map;
	}
}

class BatchInsertCourseLabelRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<CourseLabelMigratoryInfo>? courseLabelMigratorys;

	BatchInsertCourseLabelRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.courseLabelMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertCourseLabelRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertCourseLabelRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			courseLabelMigratorys: map['CourseLabelMigratorys'] != null ? (map['CourseLabelMigratorys'] as List).map((e)=>CourseLabelMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (courseLabelMigratorys != null)
			map['CourseLabelMigratorys'] = courseLabelMigratorys;
		return map;
	}
}

class CourseMigratoryInfo extends BaseDTO{
	bool isDelete;
	String? code;
	String? name;
	String? courseIntro;
	String? teacherCode;
	String? poster;
	CourseStatusEnum status;
	DateTime? startTime;
	int duration;
	DateTime? deadline;
	DateTime? actualStartTime;
	DateTime? actualEndTime;
	String? courseToken;
	String? creatorCode;
	String? organizationCode;
	CourseTypeEnum courseType;
	CourseAudienceTypeEnum audienceType;
	String? coursewareToken;
	String? teacherName;
	CourseViewRangeEnum viewRange;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	List<String>? userGroupCodes;
	double price;
	List<String>? courseVideoCodes;
	List<StudentInfoDTO>? assistants;
	List<StudentInfoDTO>? experts;
	bool isAgentCourse;
	List<String>? courseAlbumCodes;
	bool isStick;
	int sort;
	List<String>? courseMaterialCodes;
	List<CourseExaminationDTO>? bindExams;
	CourseAppearTypeEnum courseAppearType;
	List<StudentInfoDTO>? students;
	int playCount;

	CourseMigratoryInfo({
		this.isDelete = false,
		this.code,
		this.name,
		this.courseIntro,
		this.teacherCode,
		this.poster,
		this.status = CourseStatusEnum.Unknown,
		this.startTime,
		this.duration = 0,
		this.deadline,
		this.actualStartTime,
		this.actualEndTime,
		this.courseToken,
		this.creatorCode,
		this.organizationCode,
		this.courseType = CourseTypeEnum.Unknown,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		this.coursewareToken,
		this.teacherName,
		this.viewRange = CourseViewRangeEnum.All,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.userGroupCodes,
		this.price = 0,
		this.courseVideoCodes,
		this.assistants,
		this.experts,
		this.isAgentCourse = false,
		this.courseAlbumCodes,
		this.isStick = false,
		this.sort = 0,
		this.courseMaterialCodes,
		this.bindExams,
		this.courseAppearType = CourseAppearTypeEnum.Unknown,
		this.students,
		this.playCount = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CourseMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return CourseMigratoryInfo( 
			isDelete: map['IsDelete'],
			code: map['Code'],
			name: map['Name'],
			courseIntro: map['CourseIntro'],
			teacherCode: map['TeacherCode'],
			poster: map['Poster'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			duration: map['Duration'],
			deadline: map['Deadline'] != null ? DateTime.parse(map['Deadline']) : null,
			actualStartTime: map['ActualStartTime'] != null ? DateTime.parse(map['ActualStartTime']) : null,
			actualEndTime: map['ActualEndTime'] != null ? DateTime.parse(map['ActualEndTime']) : null,
			courseToken: map['CourseToken'],
			creatorCode: map['CreatorCode'],
			organizationCode: map['OrganizationCode'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			coursewareToken: map['CoursewareToken'],
			teacherName: map['TeacherName'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			userGroupCodes: map['UserGroupCodes']?.cast<String>().toList(),
			price: double.parse(map['Price'].toString()),
			courseVideoCodes: map['CourseVideoCodes']?.cast<String>().toList(),
			assistants: map['Assistants'] != null ? (map['Assistants'] as List).map((e)=>StudentInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			experts: map['Experts'] != null ? (map['Experts'] as List).map((e)=>StudentInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isAgentCourse: map['IsAgentCourse'],
			courseAlbumCodes: map['CourseAlbumCodes']?.cast<String>().toList(),
			isStick: map['IsStick'],
			sort: map['Sort'],
			courseMaterialCodes: map['CourseMaterialCodes']?.cast<String>().toList(),
			bindExams: map['BindExams'] != null ? (map['BindExams'] as List).map((e)=>CourseExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseAppearType: CourseAppearTypeEnum.values.firstWhere((e) => e.index == map['CourseAppearType']),
			students: map['Students'] != null ? (map['Students'] as List).map((e)=>StudentInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			playCount: map['PlayCount'],
			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();
		map['IsDelete'] = isDelete;
		if (code != null)
			map['Code'] = code;
		if (name != null)
			map['Name'] = name;
		if (courseIntro != null)
			map['CourseIntro'] = courseIntro;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (poster != null)
			map['Poster'] = poster;
		map['Status'] = status.index;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		map['Duration'] = duration;
		if (deadline != null)
			map['Deadline'] = JsonRpcUtils.dateFormat(deadline!);
		if (actualStartTime != null)
			map['ActualStartTime'] = JsonRpcUtils.dateFormat(actualStartTime!);
		if (actualEndTime != null)
			map['ActualEndTime'] = JsonRpcUtils.dateFormat(actualEndTime!);
		if (courseToken != null)
			map['CourseToken'] = courseToken;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		map['CourseType'] = courseType.index;
		map['AudienceType'] = audienceType.index;
		if (coursewareToken != null)
			map['CoursewareToken'] = coursewareToken;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		map['ViewRange'] = viewRange.index;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		if (userGroupCodes != null)
			map['UserGroupCodes'] = userGroupCodes;
		map['Price'] = price;
		if (courseVideoCodes != null)
			map['CourseVideoCodes'] = courseVideoCodes;
		if (assistants != null)
			map['Assistants'] = assistants;
		if (experts != null)
			map['Experts'] = experts;
		map['IsAgentCourse'] = isAgentCourse;
		if (courseAlbumCodes != null)
			map['CourseAlbumCodes'] = courseAlbumCodes;
		map['IsStick'] = isStick;
		map['Sort'] = sort;
		if (courseMaterialCodes != null)
			map['CourseMaterialCodes'] = courseMaterialCodes;
		if (bindExams != null)
			map['BindExams'] = bindExams;
		map['CourseAppearType'] = courseAppearType.index;
		if (students != null)
			map['Students'] = students;
		map['PlayCount'] = playCount;
		return map;
	}
}

class VideoMigratoryInfo extends BaseDTO{
	bool isDelete;
	String? code;
	String? name;
	String? videoToken;
	String? vodFileId;
	String? poster;
	int duration;
	double videoSize;
	String? creatorCode;
	String? creatorName;
	UploadFileTypeEnum fodderType;
	bool isPublic;
	CourseViewRangeEnum viewRange;
	int playCount;
	String? srcFileToken;

	VideoMigratoryInfo({
		this.isDelete = false,
		this.code,
		this.name,
		this.videoToken,
		this.vodFileId,
		this.poster,
		this.duration = 0,
		this.videoSize = 0,
		this.creatorCode,
		this.creatorName,
		this.fodderType = UploadFileTypeEnum.Unknown,
		this.isPublic = false,
		this.viewRange = CourseViewRangeEnum.All,
		this.playCount = 0,
		this.srcFileToken,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory VideoMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return VideoMigratoryInfo( 
			isDelete: map['IsDelete'],
			code: map['Code'],
			name: map['Name'],
			videoToken: map['VideoToken'],
			vodFileId: map['VodFileId'],
			poster: map['Poster'],
			duration: map['Duration'],
			videoSize: double.parse(map['VideoSize'].toString()),
			creatorCode: map['CreatorCode'],
			creatorName: map['CreatorName'],
			fodderType: UploadFileTypeEnum.values.firstWhere((e) => e.index == map['FodderType']),
			isPublic: map['IsPublic'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			playCount: map['PlayCount'],
			srcFileToken: map['SrcFileToken'],
			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();
		map['IsDelete'] = isDelete;
		if (code != null)
			map['Code'] = code;
		if (name != null)
			map['Name'] = name;
		if (videoToken != null)
			map['VideoToken'] = videoToken;
		if (vodFileId != null)
			map['VodFileId'] = vodFileId;
		if (poster != null)
			map['Poster'] = poster;
		map['Duration'] = duration;
		map['VideoSize'] = videoSize;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (creatorName != null)
			map['CreatorName'] = creatorName;
		map['FodderType'] = fodderType.index;
		map['IsPublic'] = isPublic;
		map['ViewRange'] = viewRange.index;
		map['PlayCount'] = playCount;
		if (srcFileToken != null)
			map['SrcFileToken'] = srcFileToken;
		return map;
	}
}

class ExaminationPaperDTO {
	String? code;
	String? name;
	double totalScore;
	List<QuestionDetailDTO>? questionList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	DateTime? createTime;
	DateTime? updateTime;

	ExaminationPaperDTO({
		this.code,
		this.name,
		this.totalScore = 0,
		this.questionList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.createTime,
		this.updateTime,
	});

	factory ExaminationPaperDTO.fromJson(Map<String, dynamic> map) {
		return ExaminationPaperDTO( 
			code: map['Code'],
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>QuestionDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		map['TotalScore'] = totalScore;
		if (questionList != null) {
			map['QuestionList'] = questionList;
		}
		if (caseLabelCodes != null) {
			map['CaseLabelCodes'] = caseLabelCodes;
		}
		if (courseLabelCodes != null) {
			map['CourseLabelCodes'] = courseLabelCodes;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (updateTime != null) {
			map['UpdateTime'] = JsonRpcUtils.dateFormat(updateTime!);
		}
		return map;
	}
}

class ExaminationQuestionDTO extends BaseDTO{
	bool isDelete;
	String? code;
	String? stem;
	QuestionTypeEnum questionType;
	List<QuestionOptionDTO>? questionOptionList;
	List<QuestionFileDTO>? fileList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	bool trueOrFalse;

	ExaminationQuestionDTO({
		this.isDelete = false,
		this.code,
		this.stem,
		this.questionType = QuestionTypeEnum.Judge,
		this.questionOptionList,
		this.fileList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.trueOrFalse = false,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ExaminationQuestionDTO.fromJson(Map<String, dynamic> map) {
		return ExaminationQuestionDTO( 
			isDelete: map['IsDelete'],
			code: map['Code'],
			stem: map['Stem'],
			questionType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['QuestionType']),
			questionOptionList: map['QuestionOptionList'] != null ? (map['QuestionOptionList'] as List).map((e)=>QuestionOptionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileList: map['FileList'] != null ? (map['FileList'] as List).map((e)=>QuestionFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			trueOrFalse: map['TrueOrFalse'],
			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();
		map['IsDelete'] = isDelete;
		if (code != null)
			map['Code'] = code;
		if (stem != null)
			map['Stem'] = stem;
		map['QuestionType'] = questionType.index;
		if (questionOptionList != null)
			map['QuestionOptionList'] = questionOptionList;
		if (fileList != null)
			map['FileList'] = fileList;
		if (caseLabelCodes != null)
			map['CaseLabelCodes'] = caseLabelCodes;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		map['TrueOrFalse'] = trueOrFalse;
		return map;
	}
}

enum RelevanceTypeEnum {
	Course,
}

class StudentExaminationDTO extends BaseStudentExaminationDTO{
	bool isDelete;
	RelevanceTypeEnum relevanceType;
	String? relevanceCode;
	List<ExaminationAnswerDTO>? studentAnswers;
	int submitCount;

	StudentExaminationDTO({
		this.isDelete = false,
		this.relevanceType = RelevanceTypeEnum.Course,
		this.relevanceCode,
		this.studentAnswers,
		this.submitCount = 0,
		String? code,
		String? examinationCode,
		String? studentCode,
		String? studentName,
		double totalScore = 0,
	}) : super(
			code: code,
			examinationCode: examinationCode,
			studentCode: studentCode,
			studentName: studentName,
			totalScore: totalScore,
		);

	factory StudentExaminationDTO.fromJson(Map<String, dynamic> map) {
		return StudentExaminationDTO( 
			isDelete: map['IsDelete'],
			relevanceType: RelevanceTypeEnum.values.firstWhere((e) => e.index == map['RelevanceType']),
			relevanceCode: map['RelevanceCode'],
			studentAnswers: map['StudentAnswers'] != null ? (map['StudentAnswers'] as List).map((e)=>ExaminationAnswerDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			submitCount: map['SubmitCount'],
			code: map['Code'],
			examinationCode: map['ExaminationCode'],
			studentCode: map['StudentCode'],
			studentName: map['StudentName'],
			totalScore: double.parse(map['TotalScore'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsDelete'] = isDelete;
		map['RelevanceType'] = relevanceType.index;
		if (relevanceCode != null)
			map['RelevanceCode'] = relevanceCode;
		if (studentAnswers != null)
			map['StudentAnswers'] = studentAnswers;
		map['SubmitCount'] = submitCount;
		return map;
	}
}

class ExamMigratoryInfo extends ExaminationPaperDTO{
	bool isDelete;
	List<ExaminationQuestionDTO>? examinationQuestions;
	List<StudentExaminationDTO>? studentExamination;

	ExamMigratoryInfo({
		this.isDelete = false,
		this.examinationQuestions,
		this.studentExamination,
		String? code,
		String? name,
		double totalScore = 0,
		List<QuestionDetailDTO>? questionList,
		List<String>? caseLabelCodes,
		List<String>? courseLabelCodes,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			name: name,
			totalScore: totalScore,
			questionList: questionList,
			caseLabelCodes: caseLabelCodes,
			courseLabelCodes: courseLabelCodes,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ExamMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return ExamMigratoryInfo( 
			isDelete: map['IsDelete'],
			examinationQuestions: map['ExaminationQuestions'] != null ? (map['ExaminationQuestions'] as List).map((e)=>ExaminationQuestionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			studentExamination: map['StudentExamination'] != null ? (map['StudentExamination'] as List).map((e)=>StudentExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			code: map['Code'],
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>QuestionDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			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();
		map['IsDelete'] = isDelete;
		if (examinationQuestions != null)
			map['ExaminationQuestions'] = examinationQuestions;
		if (studentExamination != null)
			map['StudentExamination'] = studentExamination;
		return map;
	}
}

class BatchInsertCourseRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<CourseMigratoryInfo>? courseMigratorys;
	List<VideoMigratoryInfo>? videoMigratorys;
	List<ExamMigratoryInfo>? examMigratorys;
	List<RemoteExaminationDTO>? remoteExaminationMigratorys;

	BatchInsertCourseRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.courseMigratorys,
		this.videoMigratorys,
		this.examMigratorys,
		this.remoteExaminationMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertCourseRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertCourseRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			courseMigratorys: map['CourseMigratorys'] != null ? (map['CourseMigratorys'] as List).map((e)=>CourseMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			videoMigratorys: map['VideoMigratorys'] != null ? (map['VideoMigratorys'] as List).map((e)=>VideoMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			examMigratorys: map['ExamMigratorys'] != null ? (map['ExamMigratorys'] as List).map((e)=>ExamMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			remoteExaminationMigratorys: map['RemoteExaminationMigratorys'] != null ? (map['RemoteExaminationMigratorys'] as List).map((e)=>RemoteExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (courseMigratorys != null)
			map['CourseMigratorys'] = courseMigratorys;
		if (videoMigratorys != null)
			map['VideoMigratorys'] = videoMigratorys;
		if (examMigratorys != null)
			map['ExamMigratorys'] = examMigratorys;
		if (remoteExaminationMigratorys != null)
			map['RemoteExaminationMigratorys'] = remoteExaminationMigratorys;
		return map;
	}
}

enum DiagnosisModuleEnum {
	LiverLesionDetect,
	ThyroidLesionDetect,
	CarotidPlaqueDetect,
	BreastLesionDetectBIRADS,
}

class DeviceMigratoryInfo extends DeviceInfoDTO{
	bool isDelete;
	List<DiagnosisModuleEnum>? diagnosisModule;

	DeviceMigratoryInfo({
		this.isDelete = false,
		this.diagnosisModule,
		String? deviceCode,
		String? serialNumber,
		String? password,
		String? name,
		String? description,
		String? deviceModel,
		String? deviceType,
		String? headPicUrl,
		String? deviceSoftwareVersion,
		String? sDKSoftwareVersion,
		String? organizationCode,
		String? departmentCode,
		String? shortCode,
		bool isAutoShared = false,
		bool isEncryptedShow = false,
		DateTime? lastLoginTime,
		String? systemVersion,
		String? cPUModel,
		String? systemLanguage,
		List<String>? diagnosisModules,
		List<String>? reportPosterCodes,
		bool mergedChannel = false,
		int mergedVideoOutputWidth = 0,
		int mergedVideoOutputHeight = 0,
		List<VideoDeviceDTO>? videoDeviceInfos,
		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
		bool liveOpened = false,
		bool supportRtc = false,
		String? displayName,
		SonopostVersionEnum sonopostVersion = SonopostVersionEnum.Sonopost,
		List<DataItemDTO>? deviceAttributes,
		bool isOnline = false,
		bool isActive = false,
		List<DictionaryLanguageConfigDTO>? languageConfigs,
		String? upgradeVersionCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			deviceCode: deviceCode,
			serialNumber: serialNumber,
			password: password,
			name: name,
			description: description,
			deviceModel: deviceModel,
			deviceType: deviceType,
			headPicUrl: headPicUrl,
			deviceSoftwareVersion: deviceSoftwareVersion,
			sDKSoftwareVersion: sDKSoftwareVersion,
			organizationCode: organizationCode,
			departmentCode: departmentCode,
			shortCode: shortCode,
			isAutoShared: isAutoShared,
			isEncryptedShow: isEncryptedShow,
			lastLoginTime: lastLoginTime,
			systemVersion: systemVersion,
			cPUModel: cPUModel,
			systemLanguage: systemLanguage,
			diagnosisModules: diagnosisModules,
			reportPosterCodes: reportPosterCodes,
			mergedChannel: mergedChannel,
			mergedVideoOutputWidth: mergedVideoOutputWidth,
			mergedVideoOutputHeight: mergedVideoOutputHeight,
			videoDeviceInfos: videoDeviceInfos,
			downloadModeSetting: downloadModeSetting,
			liveOpened: liveOpened,
			supportRtc: supportRtc,
			displayName: displayName,
			sonopostVersion: sonopostVersion,
			deviceAttributes: deviceAttributes,
			isOnline: isOnline,
			isActive: isActive,
			languageConfigs: languageConfigs,
			upgradeVersionCode: upgradeVersionCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory DeviceMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return DeviceMigratoryInfo( 
			isDelete: map['IsDelete'],
			diagnosisModule: map['DiagnosisModule'] != null ? (map['DiagnosisModule'] as List).map((e)=>DiagnosisModuleEnum.values.firstWhere((i) => i.index == e)).toList() : null,
			deviceCode: map['DeviceCode'],
			serialNumber: map['SerialNumber'],
			password: map['Password'],
			name: map['Name'],
			description: map['Description'],
			deviceModel: map['DeviceModel'],
			deviceType: map['DeviceType'],
			headPicUrl: map['HeadPicUrl'],
			deviceSoftwareVersion: map['DeviceSoftwareVersion'],
			sDKSoftwareVersion: map['SDKSoftwareVersion'],
			organizationCode: map['OrganizationCode'],
			departmentCode: map['DepartmentCode'],
			shortCode: map['ShortCode'],
			isAutoShared: map['IsAutoShared'],
			isEncryptedShow: map['IsEncryptedShow'],
			lastLoginTime: map['LastLoginTime'] != null ? DateTime.parse(map['LastLoginTime']) : null,
			systemVersion: map['SystemVersion'],
			cPUModel: map['CPUModel'],
			systemLanguage: map['SystemLanguage'],
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			reportPosterCodes: map['ReportPosterCodes']?.cast<String>().toList(),
			mergedChannel: map['MergedChannel'],
			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
			liveOpened: map['LiveOpened'],
			supportRtc: map['SupportRtc'],
			displayName: map['DisplayName'],
			sonopostVersion: SonopostVersionEnum.values.firstWhere((e) => e.index == map['SonopostVersion']),
			deviceAttributes: map['DeviceAttributes'] != null ? (map['DeviceAttributes'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isOnline: map['IsOnline'],
			isActive: map['IsActive'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>DictionaryLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			upgradeVersionCode: map['UpgradeVersionCode'],
			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();
		map['IsDelete'] = isDelete;
		if (diagnosisModule != null)
			map['DiagnosisModule'] = diagnosisModule;
		return map;
	}
}

class BatchInsertDeviceRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<DeviceMigratoryInfo>? deviceMigratorys;

	BatchInsertDeviceRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.deviceMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertDeviceRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertDeviceRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			deviceMigratorys: map['DeviceMigratorys'] != null ? (map['DeviceMigratorys'] as List).map((e)=>DeviceMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (deviceMigratorys != null)
			map['DeviceMigratorys'] = deviceMigratorys;
		return map;
	}
}

class OrganizationMigratoryInfo extends OrganizationDTO{
	bool isDelete;
	List<DiagnosisModuleEnum>? diagnosisModule;
	String? regionName;
	String? defaultTemplateId;
	List<String>? reportTemplateIds;

	OrganizationMigratoryInfo({
		this.isDelete = false,
		this.diagnosisModule,
		this.regionName,
		this.defaultTemplateId,
		this.reportTemplateIds,
		String? description,
		String? rootCode,
		OrganizationTypeEnum organizationType = OrganizationTypeEnum.Corporation,
		List<String>? authorityGroups,
		String? nautica,
		OrganizationStateEnum state = OrganizationStateEnum.WaitAudit,
		List<String>? directors,
		List<String>? assignedAdmins,
		String? patientSettingJson,
		String? examSettingJson,
		String? consultationSettingJson,
		String? patientSettingVersion,
		String? examSettingVersion,
		String? consultationSettingVersion,
		String? parentOrganizationName,
		String? regionCode,
		String? rootRegionCode,
		String? parentCode,
		String? logoUrl,
		OrganizationPatientTypeEnum patientType = OrganizationPatientTypeEnum.Person,
		bool isinvented = false,
		List<SettingDTOClass>? settings,
		List<String>? diagnosisModules,
		bool isEncryptedShow = false,
		double referralLimitHours = 0,
		List<String>? referralOrganizationCodes,
		List<ReferralOrganizationDTO>? referralOrganizations,
		String? defaultThesaurusCode,
		String? defaultReportTemplateCode,
		bool emergencyNeedFill = false,
		String? emergencySettingVersion,
		String? emergencySettingJson,
		String? organizationCode,
		String? organizationName,
		String? shortCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			description: description,
			rootCode: rootCode,
			organizationType: organizationType,
			authorityGroups: authorityGroups,
			nautica: nautica,
			state: state,
			directors: directors,
			assignedAdmins: assignedAdmins,
			patientSettingJson: patientSettingJson,
			examSettingJson: examSettingJson,
			consultationSettingJson: consultationSettingJson,
			patientSettingVersion: patientSettingVersion,
			examSettingVersion: examSettingVersion,
			consultationSettingVersion: consultationSettingVersion,
			parentOrganizationName: parentOrganizationName,
			regionCode: regionCode,
			rootRegionCode: rootRegionCode,
			parentCode: parentCode,
			logoUrl: logoUrl,
			patientType: patientType,
			isinvented: isinvented,
			settings: settings,
			diagnosisModules: diagnosisModules,
			isEncryptedShow: isEncryptedShow,
			referralLimitHours: referralLimitHours,
			referralOrganizationCodes: referralOrganizationCodes,
			referralOrganizations: referralOrganizations,
			defaultThesaurusCode: defaultThesaurusCode,
			defaultReportTemplateCode: defaultReportTemplateCode,
			emergencyNeedFill: emergencyNeedFill,
			emergencySettingVersion: emergencySettingVersion,
			emergencySettingJson: emergencySettingJson,
			organizationCode: organizationCode,
			organizationName: organizationName,
			shortCode: shortCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory OrganizationMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return OrganizationMigratoryInfo( 
			isDelete: map['IsDelete'],
			diagnosisModule: map['DiagnosisModule'] != null ? (map['DiagnosisModule'] as List).map((e)=>DiagnosisModuleEnum.values.firstWhere((i) => i.index == e)).toList() : null,
			regionName: map['RegionName'],
			defaultTemplateId: map['DefaultTemplateId'],
			reportTemplateIds: map['ReportTemplateIds']?.cast<String>().toList(),
			description: map['Description'],
			rootCode: map['RootCode'],
			organizationType: OrganizationTypeEnum.values.firstWhere((e) => e.index == map['OrganizationType']),
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			nautica: map['Nautica'],
			state: OrganizationStateEnum.values.firstWhere((e) => e.index == map['State']),
			directors: map['Directors']?.cast<String>().toList(),
			assignedAdmins: map['AssignedAdmins']?.cast<String>().toList(),
			patientSettingJson: map['PatientSettingJson'],
			examSettingJson: map['ExamSettingJson'],
			consultationSettingJson: map['ConsultationSettingJson'],
			patientSettingVersion: map['PatientSettingVersion'],
			examSettingVersion: map['ExamSettingVersion'],
			consultationSettingVersion: map['ConsultationSettingVersion'],
			parentOrganizationName: map['ParentOrganizationName'],
			regionCode: map['RegionCode'],
			rootRegionCode: map['RootRegionCode'],
			parentCode: map['ParentCode'],
			logoUrl: map['LogoUrl'],
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
			isinvented: map['Isinvented'],
			settings: map['Settings'] != null ? (map['Settings'] as List).map((e)=>SettingDTOClass.fromJson(e as Map<String,dynamic>)).toList() : null,
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			isEncryptedShow: map['IsEncryptedShow'],
			referralLimitHours: double.parse(map['ReferralLimitHours'].toString()),
			referralOrganizationCodes: map['ReferralOrganizationCodes']?.cast<String>().toList(),
			referralOrganizations: map['ReferralOrganizations'] != null ? (map['ReferralOrganizations'] as List).map((e)=>ReferralOrganizationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			defaultThesaurusCode: map['DefaultThesaurusCode'],
			defaultReportTemplateCode: map['DefaultReportTemplateCode'],
			emergencyNeedFill: map['EmergencyNeedFill'],
			emergencySettingVersion: map['EmergencySettingVersion'],
			emergencySettingJson: map['EmergencySettingJson'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			shortCode: map['ShortCode'],
			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();
		map['IsDelete'] = isDelete;
		if (diagnosisModule != null)
			map['DiagnosisModule'] = diagnosisModule;
		if (regionName != null)
			map['RegionName'] = regionName;
		if (defaultTemplateId != null)
			map['DefaultTemplateId'] = defaultTemplateId;
		if (reportTemplateIds != null)
			map['ReportTemplateIds'] = reportTemplateIds;
		return map;
	}
}

class BatchInsertOrganizationRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<OrganizationMigratoryInfo>? organizationMigratorys;

	BatchInsertOrganizationRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.organizationMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertOrganizationRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertOrganizationRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			organizationMigratorys: map['OrganizationMigratorys'] != null ? (map['OrganizationMigratorys'] as List).map((e)=>OrganizationMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (organizationMigratorys != null)
			map['OrganizationMigratorys'] = organizationMigratorys;
		return map;
	}
}

class MedicalConsortiumDetail {
	String? name;
	String? code;
	OrganizationPatientTypeEnum patientType;

	MedicalConsortiumDetail({
		this.name,
		this.code,
		this.patientType = OrganizationPatientTypeEnum.Person,
	});

	factory MedicalConsortiumDetail.fromJson(Map<String, dynamic> map) {
		return MedicalConsortiumDetail( 
			name: map['Name'],
			code: map['Code'],
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (code != null) {
			map['Code'] = code;
		}
		map['PatientType'] = patientType.index;
		return map;
	}
}

class BatchInsertMedicalConsortiumRequest {
	List<MedicalConsortiumDetail>? medicalConsortiumDetails;

	BatchInsertMedicalConsortiumRequest({
		this.medicalConsortiumDetails,
	});

	factory BatchInsertMedicalConsortiumRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertMedicalConsortiumRequest( 
			medicalConsortiumDetails: map['MedicalConsortiumDetails'] != null ? (map['MedicalConsortiumDetails'] as List).map((e)=>MedicalConsortiumDetail.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (medicalConsortiumDetails != null) {
			map['MedicalConsortiumDetails'] = medicalConsortiumDetails;
		}
		return map;
	}
}

enum ReportPosterTypeEnum {
	Default,
	BJAid,
}

enum ReportFormatEnum {
	Json,
	Xml,
	Text,
}

class PosterConfigMigratoryInfo {
	String? code;
	DateTime? createTime;
	DateTime? updateTime;
	bool isDelete;
	String? receiverName;
	String? contact;
	String? phone;
	String? targetUrl;
	String? template;
	ReportPosterTypeEnum posterType;
	ReportFormatEnum reportFormat;
	int postTimeout;

	PosterConfigMigratoryInfo({
		this.code,
		this.createTime,
		this.updateTime,
		this.isDelete = false,
		this.receiverName,
		this.contact,
		this.phone,
		this.targetUrl,
		this.template,
		this.posterType = ReportPosterTypeEnum.Default,
		this.reportFormat = ReportFormatEnum.Json,
		this.postTimeout = 0,
	});

	factory PosterConfigMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return PosterConfigMigratoryInfo( 
			code: map['Code'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
			isDelete: map['IsDelete'],
			receiverName: map['ReceiverName'],
			contact: map['Contact'],
			phone: map['Phone'],
			targetUrl: map['TargetUrl'],
			template: map['Template'],
			posterType: ReportPosterTypeEnum.values.firstWhere((e) => e.index == map['PosterType']),
			reportFormat: ReportFormatEnum.values.firstWhere((e) => e.index == map['ReportFormat']),
			postTimeout: map['PostTimeout'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (updateTime != null) {
			map['UpdateTime'] = JsonRpcUtils.dateFormat(updateTime!);
		}
		map['IsDelete'] = isDelete;
		if (receiverName != null) {
			map['ReceiverName'] = receiverName;
		}
		if (contact != null) {
			map['Contact'] = contact;
		}
		if (phone != null) {
			map['Phone'] = phone;
		}
		if (targetUrl != null) {
			map['TargetUrl'] = targetUrl;
		}
		if (template != null) {
			map['Template'] = template;
		}
		map['PosterType'] = posterType.index;
		map['ReportFormat'] = reportFormat.index;
		map['PostTimeout'] = postTimeout;
		return map;
	}
}

class BatchInsertPosterConfigRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<PosterConfigMigratoryInfo>? posterConfigMigratorys;

	BatchInsertPosterConfigRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.posterConfigMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertPosterConfigRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertPosterConfigRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			posterConfigMigratorys: map['PosterConfigMigratorys'] != null ? (map['PosterConfigMigratorys'] as List).map((e)=>PosterConfigMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (posterConfigMigratorys != null)
			map['PosterConfigMigratorys'] = posterConfigMigratorys;
		return map;
	}
}

class ReportTemplateMigratoryInfo extends ReportTemplateDTO{
	bool isDelete;
	DateTime? createTime;
	DateTime? updateTime;

	ReportTemplateMigratoryInfo({
		this.isDelete = false,
		this.createTime,
		this.updateTime,
		String? reportTemplateCode,
		String? reportTemplateName,
		ReportTemplateStatusTypeEnum reportTemplateStateType = ReportTemplateStatusTypeEnum.Unpublished,
		ReportTemplateTypeEnum reportTemplateType = ReportTemplateTypeEnum.Default,
		ReportTemplateUsageTypeEnum reportTemplateUsageType = ReportTemplateUsageTypeEnum.People,
		String? organizationCode,
		String? personalCode,
		String? organizationName,
		String? personalName,
		String? reportTemplateJson,
		String? referenceReportTemplateCode,
		bool isDefault = false,
		bool isUserDefault = false,
		String? reportDatasJson,
		List<ReportPreviewDTO>? templatePreviewList,
		List<String>? templatePreviewUrlList,
		String? languageCode,
	}) : super(
			reportTemplateCode: reportTemplateCode,
			reportTemplateName: reportTemplateName,
			reportTemplateStateType: reportTemplateStateType,
			reportTemplateType: reportTemplateType,
			reportTemplateUsageType: reportTemplateUsageType,
			organizationCode: organizationCode,
			personalCode: personalCode,
			organizationName: organizationName,
			personalName: personalName,
			reportTemplateJson: reportTemplateJson,
			referenceReportTemplateCode: referenceReportTemplateCode,
			isDefault: isDefault,
			isUserDefault: isUserDefault,
			reportDatasJson: reportDatasJson,
			templatePreviewList: templatePreviewList,
			templatePreviewUrlList: templatePreviewUrlList,
			languageCode: languageCode,
		);

	factory ReportTemplateMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return ReportTemplateMigratoryInfo( 
			isDelete: map['IsDelete'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
			reportTemplateCode: map['ReportTemplateCode'],
			reportTemplateName: map['ReportTemplateName'],
			reportTemplateStateType: ReportTemplateStatusTypeEnum.values.firstWhere((e) => e.index == map['ReportTemplateStateType']),
			reportTemplateType: ReportTemplateTypeEnum.values.firstWhere((e) => e.index == map['ReportTemplateType']),
			reportTemplateUsageType: ReportTemplateUsageTypeEnum.values.firstWhere((e) => e.index == map['ReportTemplateUsageType']),
			organizationCode: map['OrganizationCode'],
			personalCode: map['PersonalCode'],
			organizationName: map['OrganizationName'],
			personalName: map['PersonalName'],
			reportTemplateJson: map['ReportTemplateJson'],
			referenceReportTemplateCode: map['ReferenceReportTemplateCode'],
			isDefault: map['IsDefault'],
			isUserDefault: map['IsUserDefault'],
			reportDatasJson: map['ReportDatasJson'],
			templatePreviewList: map['TemplatePreviewList'] != null ? (map['TemplatePreviewList'] as List).map((e)=>ReportPreviewDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			templatePreviewUrlList: map['TemplatePreviewUrlList']?.cast<String>().toList(),
			languageCode: map['LanguageCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsDelete'] = isDelete;
		if (createTime != null)
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		if (updateTime != null)
			map['UpdateTime'] = JsonRpcUtils.dateFormat(updateTime!);
		return map;
	}
}

class BatchInsertReportTemplateRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<ReportTemplateMigratoryInfo>? reportTemplateMigratorys;

	BatchInsertReportTemplateRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.reportTemplateMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertReportTemplateRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertReportTemplateRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			reportTemplateMigratorys: map['ReportTemplateMigratorys'] != null ? (map['ReportTemplateMigratorys'] as List).map((e)=>ReportTemplateMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (reportTemplateMigratorys != null)
			map['ReportTemplateMigratorys'] = reportTemplateMigratorys;
		return map;
	}
}

class ReportLabelMigratoryInfo extends ReportLabelDTO{
	bool isDelete;

	ReportLabelMigratoryInfo({
		this.isDelete = false,
		String? reportLabelCode,
		String? labelName,
		String? languageCode,
		ReportLabelUsageTypeEnum usageType = ReportLabelUsageTypeEnum.People,
		List<String>? labelItems,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			reportLabelCode: reportLabelCode,
			labelName: labelName,
			languageCode: languageCode,
			usageType: usageType,
			labelItems: labelItems,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ReportLabelMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return ReportLabelMigratoryInfo( 
			isDelete: map['IsDelete'],
			reportLabelCode: map['ReportLabelCode'],
			labelName: map['LabelName'],
			languageCode: map['LanguageCode'],
			usageType: ReportLabelUsageTypeEnum.values.firstWhere((e) => e.index == map['UsageType']),
			labelItems: map['LabelItems']?.cast<String>().toList(),
			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();
		map['IsDelete'] = isDelete;
		return map;
	}
}

class BatchInsertReportLabelRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<ReportLabelMigratoryInfo>? reportLabelData;

	BatchInsertReportLabelRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.reportLabelData,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertReportLabelRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertReportLabelRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			reportLabelData: map['ReportLabelData'] != null ? (map['ReportLabelData'] as List).map((e)=>ReportLabelMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (reportLabelData != null)
			map['ReportLabelData'] = reportLabelData;
		return map;
	}
}

class OrganizationDefaultTemplate {
	String? organizationCode;
	String? defaultTemplateId;
	List<String>? reportTemplateIds;
	List<String>? userCodes;

	OrganizationDefaultTemplate({
		this.organizationCode,
		this.defaultTemplateId,
		this.reportTemplateIds,
		this.userCodes,
	});

	factory OrganizationDefaultTemplate.fromJson(Map<String, dynamic> map) {
		return OrganizationDefaultTemplate( 
			organizationCode: map['OrganizationCode'],
			defaultTemplateId: map['DefaultTemplateId'],
			reportTemplateIds: map['ReportTemplateIds']?.cast<String>().toList(),
			userCodes: map['UserCodes']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (defaultTemplateId != null) {
			map['DefaultTemplateId'] = defaultTemplateId;
		}
		if (reportTemplateIds != null) {
			map['ReportTemplateIds'] = reportTemplateIds;
		}
		if (userCodes != null) {
			map['UserCodes'] = userCodes;
		}
		return map;
	}
}

class BatchModifyReportTemplateRequest extends TokenRequest{
	List<ReportTemplateMigratoryInfo>? reportTemplateMigratorys;
	List<OrganizationDefaultTemplate>? organizationDefaultTemplates;

	BatchModifyReportTemplateRequest({
		this.reportTemplateMigratorys,
		this.organizationDefaultTemplates,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchModifyReportTemplateRequest.fromJson(Map<String, dynamic> map) {
		return BatchModifyReportTemplateRequest( 
			reportTemplateMigratorys: map['ReportTemplateMigratorys'] != null ? (map['ReportTemplateMigratorys'] as List).map((e)=>ReportTemplateMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			organizationDefaultTemplates: map['OrganizationDefaultTemplates'] != null ? (map['OrganizationDefaultTemplates'] as List).map((e)=>OrganizationDefaultTemplate.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportTemplateMigratorys != null)
			map['ReportTemplateMigratorys'] = reportTemplateMigratorys;
		if (organizationDefaultTemplates != null)
			map['OrganizationDefaultTemplates'] = organizationDefaultTemplates;
		return map;
	}
}

class UserGroupMigratoryInfo extends BaseDTO{
	bool isDelete;
	String? code;
	String? name;
	int maxPeople;
	String? creatorCode;
	List<StudentInfoDTO>? students;
	String? shortCode;
	bool isAgent;
	bool isOldPlatformData;
	String? description;

	UserGroupMigratoryInfo({
		this.isDelete = false,
		this.code,
		this.name,
		this.maxPeople = 0,
		this.creatorCode,
		this.students,
		this.shortCode,
		this.isAgent = false,
		this.isOldPlatformData = false,
		this.description,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UserGroupMigratoryInfo.fromJson(Map<String, dynamic> map) {
		return UserGroupMigratoryInfo( 
			isDelete: map['IsDelete'],
			code: map['Code'],
			name: map['Name'],
			maxPeople: map['MaxPeople'],
			creatorCode: map['CreatorCode'],
			students: map['Students'] != null ? (map['Students'] as List).map((e)=>StudentInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			shortCode: map['ShortCode'],
			isAgent: map['IsAgent'],
			isOldPlatformData: map['IsOldPlatformData'],
			description: map['Description'],
			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();
		map['IsDelete'] = isDelete;
		if (code != null)
			map['Code'] = code;
		if (name != null)
			map['Name'] = name;
		map['MaxPeople'] = maxPeople;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (students != null)
			map['Students'] = students;
		if (shortCode != null)
			map['ShortCode'] = shortCode;
		map['IsAgent'] = isAgent;
		map['IsOldPlatformData'] = isOldPlatformData;
		if (description != null)
			map['Description'] = description;
		return map;
	}
}

class BatchInsertUserGroupRequest extends TokenRequest{
	SyncDBEnum syncType;
	List<UserGroupMigratoryInfo>? userGroupMigratorys;

	BatchInsertUserGroupRequest({
		this.syncType = SyncDBEnum.Migrate,
		this.userGroupMigratorys,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchInsertUserGroupRequest.fromJson(Map<String, dynamic> map) {
		return BatchInsertUserGroupRequest( 
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			userGroupMigratorys: map['UserGroupMigratorys'] != null ? (map['UserGroupMigratorys'] as List).map((e)=>UserGroupMigratoryInfo.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SyncType'] = syncType.index;
		if (userGroupMigratorys != null)
			map['UserGroupMigratorys'] = userGroupMigratorys;
		return map;
	}
}

class BatchModifyRecordReportDataRequest extends TokenRequest{
	List<String>? recordCodes;
	bool isExistPropertyIsUserReport;
	int isUserReport;

	BatchModifyRecordReportDataRequest({
		this.recordCodes,
		this.isExistPropertyIsUserReport = false,
		this.isUserReport = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory BatchModifyRecordReportDataRequest.fromJson(Map<String, dynamic> map) {
		return BatchModifyRecordReportDataRequest( 
			recordCodes: map['RecordCodes']?.cast<String>().toList(),
			isExistPropertyIsUserReport: map['IsExistPropertyIsUserReport'],
			isUserReport: map['IsUserReport'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (recordCodes != null)
			map['RecordCodes'] = recordCodes;
		map['IsExistPropertyIsUserReport'] = isExistPropertyIsUserReport;
		map['IsUserReport'] = isUserReport;
		return map;
	}
}

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']?.cast<String>().toList(),
			removeDeviceCodes: map['RemoveDeviceCodes']?.cast<String>().toList(),
			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;

	ConfirmIdentityApplyRequest({
		this.identityApplyCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ConfirmIdentityApplyRequest.fromJson(Map<String, dynamic> map) {
		return ConfirmIdentityApplyRequest( 
			identityApplyCode: map['IdentityApplyCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (identityApplyCode != null)
			map['IdentityApplyCode'] = identityApplyCode;
		return map;
	}
}

class CreateThirdPartyTokenRequest extends TokenRequest{
	String? code;

	CreateThirdPartyTokenRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory CreateThirdPartyTokenRequest.fromJson(Map<String, dynamic> map) {
		return CreateThirdPartyTokenRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class DeleteAdminFeatureRequest extends TokenRequest{
	String? adminFeatureCode;

	DeleteAdminFeatureRequest({
		this.adminFeatureCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteAdminFeatureRequest.fromJson(Map<String, dynamic> map) {
		return DeleteAdminFeatureRequest( 
			adminFeatureCode: map['AdminFeatureCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminFeatureCode != null)
			map['AdminFeatureCode'] = adminFeatureCode;
		return map;
	}
}

class DeleteAdminRoleRequest extends TokenRequest{
	String? adminRoleCode;

	DeleteAdminRoleRequest({
		this.adminRoleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteAdminRoleRequest.fromJson(Map<String, dynamic> map) {
		return DeleteAdminRoleRequest( 
			adminRoleCode: map['AdminRoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminRoleCode != null)
			map['AdminRoleCode'] = adminRoleCode;
		return map;
	}
}

class DeleteDeviceRequest2 extends TokenRequest{
	String? deviceCode;

	DeleteDeviceRequest2({
		this.deviceCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteDeviceRequest2.fromJson(Map<String, dynamic> map) {
		return DeleteDeviceRequest2( 
			deviceCode: map['DeviceCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		return map;
	}
}

class DeleteLogsRequest extends TokenRequest{
	int daysAgo;
	String? requestServerHost;

	DeleteLogsRequest({
		this.daysAgo = 0,
		this.requestServerHost,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteLogsRequest.fromJson(Map<String, dynamic> map) {
		return DeleteLogsRequest( 
			daysAgo: map['DaysAgo'],
			requestServerHost: map['RequestServerHost'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['DaysAgo'] = daysAgo;
		if (requestServerHost != null)
			map['RequestServerHost'] = requestServerHost;
		return map;
	}
}

class QueryClearLogsRequest extends DeleteLogsRequest{
	List<int>? dayAgoList;

	QueryClearLogsRequest({
		this.dayAgoList,
		int daysAgo = 0,
		String? requestServerHost,
		String? token,
	}) : super(
			daysAgo: daysAgo,
			requestServerHost: requestServerHost,
			token: token,
		);

	factory QueryClearLogsRequest.fromJson(Map<String, dynamic> map) {
		return QueryClearLogsRequest( 
			dayAgoList: map['DayAgoList']?.cast<int>().toList(),
			daysAgo: map['DaysAgo'],
			requestServerHost: map['RequestServerHost'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (dayAgoList != null)
			map['DayAgoList'] = dayAgoList;
		return map;
	}
}

class DeleteRoleRequest extends TokenRequest{
	String? roleCode;

	DeleteRoleRequest({
		this.roleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteRoleRequest.fromJson(Map<String, dynamic> map) {
		return DeleteRoleRequest( 
			roleCode: map['RoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (roleCode != null)
			map['RoleCode'] = roleCode;
		return map;
	}
}

class DeleteThesaurusRequest extends TokenRequest{
	String? thesaurusCode;
	String? userCode;
	String? organizationCode;

	DeleteThesaurusRequest({
		this.thesaurusCode,
		this.userCode,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteThesaurusRequest.fromJson(Map<String, dynamic> map) {
		return DeleteThesaurusRequest( 
			thesaurusCode: map['ThesaurusCode'],
			userCode: map['UserCode'],
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		if (userCode != null)
			map['UserCode'] = userCode;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class DeleteThirdPartyInfoRequest extends TokenRequest{
	String? code;

	DeleteThirdPartyInfoRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteThirdPartyInfoRequest.fromJson(Map<String, dynamic> map) {
		return DeleteThirdPartyInfoRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class DeleteUserFeatureRequest extends TokenRequest{
	String? userFeatureCode;

	DeleteUserFeatureRequest({
		this.userFeatureCode,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteUserFeatureRequest.fromJson(Map<String, dynamic> map) {
		return DeleteUserFeatureRequest( 
			userFeatureCode: map['UserFeatureCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userFeatureCode != null)
			map['UserFeatureCode'] = userFeatureCode;
		return map;
	}
}

enum DistributedServerTypeEnum {
	Official,
	Private,
}

class IPAddressInfoDTO {
	String? startIp;
	String? endIp;
	int longStartIP;
	int longEndIP;

	IPAddressInfoDTO({
		this.startIp,
		this.endIp,
		this.longStartIP = 0,
		this.longEndIP = 0,
	});

	factory IPAddressInfoDTO.fromJson(Map<String, dynamic> map) {
		return IPAddressInfoDTO( 
			startIp: map['StartIp'],
			endIp: map['EndIp'],
			longStartIP: map['LongStartIP'],
			longEndIP: map['LongEndIP'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (startIp != null) {
			map['StartIp'] = startIp;
		}
		if (endIp != null) {
			map['EndIp'] = endIp;
		}
		map['LongStartIP'] = longStartIP;
		map['LongEndIP'] = longEndIP;
		return map;
	}
}

class DistributedServerInfoRequest extends TokenRequest{
	String? code;
	List<String>? codes;
	bool isMaster;
	String? name;
	String? description;
	bool enable;
	DistributedServerTypeEnum serverType;
	String? serverUrl;
	String? lat;
	String? lng;
	List<IPAddressInfoDTO>? assignClientIPList;
	int rTCStartingRoomId;
	String? shareCodePrefix;
	String? defaultStorageNode;
	String? storageServerConfig;
	String? lANHost;

	DistributedServerInfoRequest({
		this.code,
		this.codes,
		this.isMaster = false,
		this.name,
		this.description,
		this.enable = false,
		this.serverType = DistributedServerTypeEnum.Official,
		this.serverUrl,
		this.lat,
		this.lng,
		this.assignClientIPList,
		this.rTCStartingRoomId = 0,
		this.shareCodePrefix,
		this.defaultStorageNode,
		this.storageServerConfig,
		this.lANHost,
		String? token,
	}) : super(
			token: token,
		);

	factory DistributedServerInfoRequest.fromJson(Map<String, dynamic> map) {
		return DistributedServerInfoRequest( 
			code: map['Code'],
			codes: map['Codes']?.cast<String>().toList(),
			isMaster: map['IsMaster'],
			name: map['Name'],
			description: map['Description'],
			enable: map['Enable'],
			serverType: DistributedServerTypeEnum.values.firstWhere((e) => e.index == map['ServerType']),
			serverUrl: map['ServerUrl'],
			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'],
			defaultStorageNode: map['DefaultStorageNode'],
			storageServerConfig: map['StorageServerConfig'],
			lANHost: map['LANHost'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (codes != null)
			map['Codes'] = codes;
		map['IsMaster'] = isMaster;
		if (name != null)
			map['Name'] = name;
		if (description != null)
			map['Description'] = description;
		map['Enable'] = enable;
		map['ServerType'] = serverType.index;
		if (serverUrl != null)
			map['ServerUrl'] = serverUrl;
		if (lat != null)
			map['Lat'] = lat;
		if (lng != null)
			map['Lng'] = lng;
		if (assignClientIPList != null)
			map['AssignClientIPList'] = assignClientIPList;
		map['RTCStartingRoomId'] = rTCStartingRoomId;
		if (shareCodePrefix != null)
			map['ShareCodePrefix'] = shareCodePrefix;
		if (defaultStorageNode != null)
			map['DefaultStorageNode'] = defaultStorageNode;
		if (storageServerConfig != null)
			map['StorageServerConfig'] = storageServerConfig;
		if (lANHost != null)
			map['LANHost'] = lANHost;
		return map;
	}
}

class SaveDistributedServerIpRequest extends TokenRequest{
	String? startIp;
	String? endIp;
	String? code;

	SaveDistributedServerIpRequest({
		this.startIp,
		this.endIp,
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveDistributedServerIpRequest.fromJson(Map<String, dynamic> map) {
		return SaveDistributedServerIpRequest( 
			startIp: map['StartIp'],
			endIp: map['EndIp'],
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (startIp != null)
			map['StartIp'] = startIp;
		if (endIp != null)
			map['EndIp'] = endIp;
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class GetDistributedServerIpListRequest extends PageRequest{
	String? code;
	String? keyword;

	GetDistributedServerIpListRequest({
		this.code,
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDistributedServerIpListRequest.fromJson(Map<String, dynamic> map) {
		return GetDistributedServerIpListRequest( 
			code: map['Code'],
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindAdminByCodeRequest extends TokenRequest{
	String? adminCode;

	FindAdminByCodeRequest({
		this.adminCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindAdminByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindAdminByCodeRequest( 
			adminCode: map['AdminCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminCode != null)
			map['AdminCode'] = adminCode;
		return map;
	}
}

class FindAdminRoleByCodeRequest extends TokenRequest{
	String? adminRoleCode;

	FindAdminRoleByCodeRequest({
		this.adminRoleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindAdminRoleByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindAdminRoleByCodeRequest( 
			adminRoleCode: map['AdminRoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminRoleCode != null)
			map['AdminRoleCode'] = adminRoleCode;
		return map;
	}
}

class FindAdminStatisticRecordsRequest extends TokenRequest{
	String? languageCode;

	FindAdminStatisticRecordsRequest({
		this.languageCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindAdminStatisticRecordsRequest.fromJson(Map<String, dynamic> map) {
		return FindAdminStatisticRecordsRequest( 
			languageCode: map['LanguageCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		return map;
	}
}

class FindCMSStatisticRequest extends TokenRequest{
	String? clientId;

	FindCMSStatisticRequest({
		this.clientId,
		String? token,
	}) : super(
			token: token,
		);

	factory FindCMSStatisticRequest.fromJson(Map<String, dynamic> map) {
		return FindCMSStatisticRequest( 
			clientId: map['ClientId'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (clientId != null)
			map['ClientId'] = clientId;
		return map;
	}
}

class FindCMSTemplateByUserRequest extends TokenRequest{
	String? clientId;

	FindCMSTemplateByUserRequest({
		this.clientId,
		String? token,
	}) : super(
			token: token,
		);

	factory FindCMSTemplateByUserRequest.fromJson(Map<String, dynamic> map) {
		return FindCMSTemplateByUserRequest( 
			clientId: map['ClientId'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (clientId != null)
			map['ClientId'] = clientId;
		return map;
	}
}

class FindCMSTemplateDetailRequest extends TokenRequest{
	String? cMSTemplateCode;

	FindCMSTemplateDetailRequest({
		this.cMSTemplateCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindCMSTemplateDetailRequest.fromJson(Map<String, dynamic> map) {
		return FindCMSTemplateDetailRequest( 
			cMSTemplateCode: map['CMSTemplateCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (cMSTemplateCode != null)
			map['CMSTemplateCode'] = cMSTemplateCode;
		return map;
	}
}

class FindCMSTemplatePageRequest extends PageRequest{
	String? searchKey;

	FindCMSTemplatePageRequest({
		this.searchKey,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindCMSTemplatePageRequest.fromJson(Map<String, dynamic> map) {
		return FindCMSTemplatePageRequest( 
			searchKey: map['SearchKey'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (searchKey != null)
			map['SearchKey'] = searchKey;
		return map;
	}
}

class FindContentConfigRequest extends TokenRequest{
	int type;
	String? parentCode;

	FindContentConfigRequest({
		this.type = 0,
		this.parentCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindContentConfigRequest.fromJson(Map<String, dynamic> map) {
		return FindContentConfigRequest( 
			type: map['Type'],
			parentCode: map['ParentCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Type'] = type;
		if (parentCode != null)
			map['ParentCode'] = parentCode;
		return map;
	}
}

class FindDeviceDiagnosisModulesRequest2 extends TokenRequest{
	String? deviceCode;

	FindDeviceDiagnosisModulesRequest2({
		this.deviceCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindDeviceDiagnosisModulesRequest2.fromJson(Map<String, dynamic> map) {
		return FindDeviceDiagnosisModulesRequest2( 
			deviceCode: map['DeviceCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		return map;
	}
}

class FindDevicePagesRequest extends PageRequest{
	String? keyword;
	List<String>? deviceCodes;

	FindDevicePagesRequest({
		this.keyword,
		this.deviceCodes,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindDevicePagesRequest.fromJson(Map<String, dynamic> map) {
		return FindDevicePagesRequest( 
			keyword: map['Keyword'],
			deviceCodes: map['DeviceCodes']?.cast<String>().toList(),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (deviceCodes != null)
			map['DeviceCodes'] = deviceCodes;
		return map;
	}
}

class FindDiagnosisModuleByPageRequest extends PageRequest{

	FindDiagnosisModuleByPageRequest({
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindDiagnosisModuleByPageRequest.fromJson(Map<String, dynamic> map) {
		return FindDiagnosisModuleByPageRequest( 
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class FindGradingProtectionConfigByPageRequest extends PageRequest{
	String? keyword;

	FindGradingProtectionConfigByPageRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindGradingProtectionConfigByPageRequest.fromJson(Map<String, dynamic> map) {
		return FindGradingProtectionConfigByPageRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindOrganizationDiagnosisModulesRequest extends TokenRequest{
	String? organizationCode;

	FindOrganizationDiagnosisModulesRequest({
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindOrganizationDiagnosisModulesRequest.fromJson(Map<String, dynamic> map) {
		return FindOrganizationDiagnosisModulesRequest( 
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class FindOrganizationPagesRequest extends PageRequest{
	String? keyword;
	List<String>? organizationCodes;

	FindOrganizationPagesRequest({
		this.keyword,
		this.organizationCodes,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindOrganizationPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindOrganizationPagesRequest( 
			keyword: map['Keyword'],
			organizationCodes: map['OrganizationCodes']?.cast<String>().toList(),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (organizationCodes != null)
			map['OrganizationCodes'] = organizationCodes;
		return map;
	}
}

class FindProjectPagesRequest extends PageRequest{
	String? keyword;

	FindProjectPagesRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindProjectPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindProjectPagesRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindProjectRequest extends TokenRequest{
	String? code;

	FindProjectRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory FindProjectRequest.fromJson(Map<String, dynamic> map) {
		return FindProjectRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class DeleteProjectRequest extends TokenRequest{
	String? code;

	DeleteProjectRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteProjectRequest.fromJson(Map<String, dynamic> map) {
		return DeleteProjectRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

enum ProjectDataTypeEnum {
	Organization,
	User,
	Device,
	Patient,
	RemoteRecord,
	Remedical,
	Consultation,
	Report,
}

enum ProjectPushStatusEnum {
	NotSend,
	Success,
	Failed,
}

class FindProjectPushRecordPagesRequest extends PageRequest{
	String? keyword;
	String? projectName;
	ProjectDataTypeEnum? dataType;
	ProjectPushStatusEnum? pushStatus;

	FindProjectPushRecordPagesRequest({
		this.keyword,
		this.projectName,
		this.dataType,
		this.pushStatus,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindProjectPushRecordPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindProjectPushRecordPagesRequest( 
			keyword: map['Keyword'],
			projectName: map['ProjectName'],
			dataType: map['DataType'] != null ? ProjectDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']) : null,
			pushStatus: map['PushStatus'] != null ? ProjectPushStatusEnum.values.firstWhere((e) => e.index == map['PushStatus']) : null,
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (projectName != null)
			map['ProjectName'] = projectName;
		if (dataType != null)
			map['DataType'] = dataType;
		if (pushStatus != null)
			map['PushStatus'] = pushStatus;
		return map;
	}
}

class FindProjectPushRecordRequest extends TokenRequest{
	String? code;

	FindProjectPushRecordRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory FindProjectPushRecordRequest.fromJson(Map<String, dynamic> map) {
		return FindProjectPushRecordRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class DeleteProjectPushRecordRequest extends TokenRequest{
	String? code;

	DeleteProjectPushRecordRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory DeleteProjectPushRecordRequest.fromJson(Map<String, dynamic> map) {
		return DeleteProjectPushRecordRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class ReSendProjectPushRecordRequest extends TokenRequest{
	List<String>? codes;

	ReSendProjectPushRecordRequest({
		this.codes,
		String? token,
	}) : super(
			token: token,
		);

	factory ReSendProjectPushRecordRequest.fromJson(Map<String, dynamic> map) {
		return ReSendProjectPushRecordRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		return map;
	}
}

class FindReferralRecordSettingRequest extends TokenRequest{

	FindReferralRecordSettingRequest({
		String? token,
	}) : super(
			token: token,
		);

	factory FindReferralRecordSettingRequest.fromJson(Map<String, dynamic> map) {
		return FindReferralRecordSettingRequest( 
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class FindRelatedDeviceCodesRequest extends TokenRequest{
	String? reportPosterCode;

	FindRelatedDeviceCodesRequest({
		this.reportPosterCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindRelatedDeviceCodesRequest.fromJson(Map<String, dynamic> map) {
		return FindRelatedDeviceCodesRequest( 
			reportPosterCode: map['ReportPosterCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		return map;
	}
}

class FindReportLabelByCodeRequest extends TokenRequest{
	String? reportLabelCode;

	FindReportLabelByCodeRequest({
		this.reportLabelCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindReportLabelByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindReportLabelByCodeRequest( 
			reportLabelCode: map['ReportLabelCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportLabelCode != null)
			map['ReportLabelCode'] = reportLabelCode;
		return map;
	}
}

class FindReportLabelByPageRequest extends PageRequest{
	String? keyword;

	FindReportLabelByPageRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindReportLabelByPageRequest.fromJson(Map<String, dynamic> map) {
		return FindReportLabelByPageRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindReportPosterByCodeRequest extends TokenRequest{
	String? reportPosterCode;

	FindReportPosterByCodeRequest({
		this.reportPosterCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindReportPosterByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindReportPosterByCodeRequest( 
			reportPosterCode: map['ReportPosterCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		return map;
	}
}

class FindReportPosterByPageRequest extends PageRequest{
	String? keyword;

	FindReportPosterByPageRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindReportPosterByPageRequest.fromJson(Map<String, dynamic> map) {
		return FindReportPosterByPageRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindReportPreviewUrlRequest extends TokenRequest{
	String? reportCode;
	String? languageCode;

	FindReportPreviewUrlRequest({
		this.reportCode,
		this.languageCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindReportPreviewUrlRequest.fromJson(Map<String, dynamic> map) {
		return FindReportPreviewUrlRequest( 
			reportCode: map['ReportCode'],
			languageCode: map['LanguageCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportCode != null)
			map['ReportCode'] = reportCode;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		return map;
	}
}

enum PushDataStateEnum {
	UnDo,
	Successful,
	Failed,
	All,
}

class FindReportPushRecordsByPageRequest extends PageRequest{
	String? keyword;
	PushDataStateEnum queryState;

	FindReportPushRecordsByPageRequest({
		this.keyword,
		this.queryState = PushDataStateEnum.UnDo,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindReportPushRecordsByPageRequest.fromJson(Map<String, dynamic> map) {
		return FindReportPushRecordsByPageRequest( 
			keyword: map['Keyword'],
			queryState: PushDataStateEnum.values.firstWhere((e) => e.index == map['QueryState']),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		map['QueryState'] = queryState.index;
		return map;
	}
}

class FindReportShareConentRequest extends TokenRequest{
	String? shortCode;

	FindReportShareConentRequest({
		this.shortCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindReportShareConentRequest.fromJson(Map<String, dynamic> map) {
		return FindReportShareConentRequest( 
			shortCode: map['ShortCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (shortCode != null)
			map['ShortCode'] = shortCode;
		return map;
	}
}

class FindReportTemplateUserPagesRequest extends PageRequest{
	String? reportTemplateCode;
	String? keyword;

	FindReportTemplateUserPagesRequest({
		this.reportTemplateCode,
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindReportTemplateUserPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindReportTemplateUserPagesRequest( 
			reportTemplateCode: map['ReportTemplateCode'],
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportTemplateCode != null)
			map['ReportTemplateCode'] = reportTemplateCode;
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindRoleByCodeRequest extends TokenRequest{
	String? roleCode;

	FindRoleByCodeRequest({
		this.roleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindRoleByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindRoleByCodeRequest( 
			roleCode: map['RoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (roleCode != null)
			map['RoleCode'] = roleCode;
		return map;
	}
}

class FindThesaurusPagesRequest extends PageRequest{
	String? keyword;
	ThesaurusTypeEnum? thesaurusType;
	ThesaurusStatusTypeEnum? thesaurusStateType;

	FindThesaurusPagesRequest({
		this.keyword,
		this.thesaurusType,
		this.thesaurusStateType,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindThesaurusPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindThesaurusPagesRequest( 
			keyword: map['Keyword'],
			thesaurusType: map['ThesaurusType'] != null ? ThesaurusTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusType']) : null,
			thesaurusStateType: map['ThesaurusStateType'] != null ? ThesaurusStatusTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusStateType']) : null,
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (thesaurusType != null)
			map['ThesaurusType'] = thesaurusType;
		if (thesaurusStateType != null)
			map['ThesaurusStateType'] = thesaurusStateType;
		return map;
	}
}

class FindThesaurusUserPagesRequest extends PageRequest{
	String? thesaurusCode;
	String? keyword;

	FindThesaurusUserPagesRequest({
		this.thesaurusCode,
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindThesaurusUserPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindThesaurusUserPagesRequest( 
			thesaurusCode: map['ThesaurusCode'],
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindThirdPartyInfoByCodeRequest extends TokenRequest{
	String? code;

	FindThirdPartyInfoByCodeRequest({
		this.code,
		String? token,
	}) : super(
			token: token,
		);

	factory FindThirdPartyInfoByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindThirdPartyInfoByCodeRequest( 
			code: map['Code'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class FindUserByCodeRequest extends TokenRequest{
	String? userCode;

	FindUserByCodeRequest({
		this.userCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindUserByCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindUserByCodeRequest( 
			userCode: map['UserCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		return map;
	}
}

class FindUserGroupPagesRequest extends PageRequest{
	String? keyword;

	FindUserGroupPagesRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindUserGroupPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindUserGroupPagesRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class FindUserGroupRequest extends PageRequest{
	String? userGroupCode;

	FindUserGroupRequest({
		this.userGroupCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindUserGroupRequest.fromJson(Map<String, dynamic> map) {
		return FindUserGroupRequest( 
			userGroupCode: map['UserGroupCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userGroupCode != null)
			map['UserGroupCode'] = userGroupCode;
		return map;
	}
}

class FindUserPagesRequest extends PageRequest{
	String? keyword;
	List<String>? userCodes;

	FindUserPagesRequest({
		this.keyword,
		this.userCodes,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindUserPagesRequest.fromJson(Map<String, dynamic> map) {
		return FindUserPagesRequest( 
			keyword: map['Keyword'],
			userCodes: map['UserCodes']?.cast<String>().toList(),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (userCodes != null)
			map['UserCodes'] = userCodes;
		return map;
	}
}

class GetAdminPagesRequest extends PageRequest{
	String? queryType;
	String? keyWord;
	String? roleCode;
	bool isShowSuperRoleCode;
	String? fatherCode;
	String? languageCode;

	GetAdminPagesRequest({
		this.queryType,
		this.keyWord,
		this.roleCode,
		this.isShowSuperRoleCode = false,
		this.fatherCode,
		this.languageCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetAdminPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetAdminPagesRequest( 
			queryType: map['QueryType'],
			keyWord: map['KeyWord'],
			roleCode: map['RoleCode'],
			isShowSuperRoleCode: map['IsShowSuperRoleCode'],
			fatherCode: map['FatherCode'],
			languageCode: map['LanguageCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (queryType != null)
			map['QueryType'] = queryType;
		if (keyWord != null)
			map['KeyWord'] = keyWord;
		if (roleCode != null)
			map['RoleCode'] = roleCode;
		map['IsShowSuperRoleCode'] = isShowSuperRoleCode;
		if (fatherCode != null)
			map['FatherCode'] = fatherCode;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		return map;
	}
}

class GetAdminRolePagesRequest extends PageRequest{
	String? roleName;

	GetAdminRolePagesRequest({
		this.roleName,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetAdminRolePagesRequest.fromJson(Map<String, dynamic> map) {
		return GetAdminRolePagesRequest( 
			roleName: map['RoleName'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (roleName != null)
			map['RoleName'] = roleName;
		return map;
	}
}

class GetDeviceModelSelectRequest extends TokenRequest{
	String? parentCode;

	GetDeviceModelSelectRequest({
		this.parentCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetDeviceModelSelectRequest.fromJson(Map<String, dynamic> map) {
		return GetDeviceModelSelectRequest( 
			parentCode: map['ParentCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (parentCode != null)
			map['ParentCode'] = parentCode;
		return map;
	}
}

class GetDeviceOutputConfigRequest extends TokenRequest{
	DeviceVideoOutputTypeEnum deviceVideoOutputType;

	GetDeviceOutputConfigRequest({
		this.deviceVideoOutputType = DeviceVideoOutputTypeEnum.MergedVideo,
		String? token,
	}) : super(
			token: token,
		);

	factory GetDeviceOutputConfigRequest.fromJson(Map<String, dynamic> map) {
		return GetDeviceOutputConfigRequest( 
			deviceVideoOutputType: DeviceVideoOutputTypeEnum.values.firstWhere((e) => e.index == map['DeviceVideoOutputType']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['DeviceVideoOutputType'] = deviceVideoOutputType.index;
		return map;
	}
}

class GetDeviceBrandModelPageRequest extends PageRequest{
	String? keyword;

	GetDeviceBrandModelPageRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDeviceBrandModelPageRequest.fromJson(Map<String, dynamic> map) {
		return GetDeviceBrandModelPageRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class DeleteBrandModelOutputConfigRequest {
	List<String>? brandModelCodes;

	DeleteBrandModelOutputConfigRequest({
		this.brandModelCodes,
	});

	factory DeleteBrandModelOutputConfigRequest.fromJson(Map<String, dynamic> map) {
		return DeleteBrandModelOutputConfigRequest( 
			brandModelCodes: map['BrandModelCodes']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (brandModelCodes != null) {
			map['BrandModelCodes'] = brandModelCodes;
		}
		return map;
	}
}

class GetDevicePagesRequest extends PageRequest{
	String? queryType;
	String? keyword;
	List<String>? hospitals;
	String? adminName;
	String? userName;

	GetDevicePagesRequest({
		this.queryType,
		this.keyword,
		this.hospitals,
		this.adminName,
		this.userName,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDevicePagesRequest.fromJson(Map<String, dynamic> map) {
		return GetDevicePagesRequest( 
			queryType: map['QueryType'],
			keyword: map['Keyword'],
			hospitals: map['Hospitals']?.cast<String>().toList(),
			adminName: map['AdminName'],
			userName: map['UserName'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (queryType != null)
			map['QueryType'] = queryType;
		if (keyword != null)
			map['Keyword'] = keyword;
		if (hospitals != null)
			map['Hospitals'] = hospitals;
		if (adminName != null)
			map['AdminName'] = adminName;
		if (userName != null)
			map['UserName'] = userName;
		return map;
	}
}

class FindDeviceInfoByDeviceTypeRequest {
	String? deviceTypeCode;

	FindDeviceInfoByDeviceTypeRequest({
		this.deviceTypeCode,
	});

	factory FindDeviceInfoByDeviceTypeRequest.fromJson(Map<String, dynamic> map) {
		return FindDeviceInfoByDeviceTypeRequest( 
			deviceTypeCode: map['DeviceTypeCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (deviceTypeCode != null) {
			map['DeviceTypeCode'] = deviceTypeCode;
		}
		return map;
	}
}

class GetDeviceTypePagesRequest extends PageRequest{
	String? keyword;
	DictionaryTypeEnum dictionaryType;

	GetDeviceTypePagesRequest({
		this.keyword,
		this.dictionaryType = DictionaryTypeEnum.DeviceModel,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDeviceTypePagesRequest.fromJson(Map<String, dynamic> map) {
		return GetDeviceTypePagesRequest( 
			keyword: map['Keyword'],
			dictionaryType: DictionaryTypeEnum.values.firstWhere((e) => e.index == map['DictionaryType']),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		map['DictionaryType'] = dictionaryType.index;
		return map;
	}
}

class GetDeviceUserPagesRequest extends PageRequest{
	List<String>? deviceCodes;
	String? queryType;
	String? keyword;
	int type;

	GetDeviceUserPagesRequest({
		this.deviceCodes,
		this.queryType,
		this.keyword,
		this.type = 0,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDeviceUserPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetDeviceUserPagesRequest( 
			deviceCodes: map['DeviceCodes']?.cast<String>().toList(),
			queryType: map['QueryType'],
			keyword: map['Keyword'],
			type: map['Type'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCodes != null)
			map['DeviceCodes'] = deviceCodes;
		if (queryType != null)
			map['QueryType'] = queryType;
		if (keyword != null)
			map['Keyword'] = keyword;
		map['Type'] = type;
		return map;
	}
}

class GetDistributedServerRequest extends PageRequest{
	String? keyword;

	GetDistributedServerRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetDistributedServerRequest.fromJson(Map<String, dynamic> map) {
		return GetDistributedServerRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class GetLogPagesRequest extends PageRequest{
	String? level;
	String? keyWord;
	String? exclude;
	DateTime? startTime;
	DateTime? endTime;
	String? requestServerHost;

	GetLogPagesRequest({
		this.level,
		this.keyWord,
		this.exclude,
		this.startTime,
		this.endTime,
		this.requestServerHost,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetLogPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetLogPagesRequest( 
			level: map['Level'],
			keyWord: map['KeyWord'],
			exclude: map['Exclude'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			requestServerHost: map['RequestServerHost'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (level != null)
			map['Level'] = level;
		if (keyWord != null)
			map['KeyWord'] = keyWord;
		if (exclude != null)
			map['Exclude'] = exclude;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		if (endTime != null)
			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
		if (requestServerHost != null)
			map['RequestServerHost'] = requestServerHost;
		return map;
	}
}

class GetOrganizationCustomSettingRequest extends TokenRequest{
	String? langugeKey;
	String? settingModule;
	String? organizationCode;

	GetOrganizationCustomSettingRequest({
		this.langugeKey,
		this.settingModule,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetOrganizationCustomSettingRequest.fromJson(Map<String, dynamic> map) {
		return GetOrganizationCustomSettingRequest( 
			langugeKey: map['LangugeKey'],
			settingModule: map['SettingModule'],
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (langugeKey != null)
			map['LangugeKey'] = langugeKey;
		if (settingModule != null)
			map['SettingModule'] = settingModule;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class GetOrganizationPagesRequest extends PageRequest{
	String? queryType;
	String? keyword;
	String? state;
	String? isinvented;

	GetOrganizationPagesRequest({
		this.queryType,
		this.keyword,
		this.state,
		this.isinvented,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetOrganizationPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetOrganizationPagesRequest( 
			queryType: map['QueryType'],
			keyword: map['Keyword'],
			state: map['State'],
			isinvented: map['Isinvented'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (queryType != null)
			map['QueryType'] = queryType;
		if (keyword != null)
			map['Keyword'] = keyword;
		if (state != null)
			map['State'] = state;
		if (isinvented != null)
			map['Isinvented'] = isinvented;
		return map;
	}
}

class GetOrganizationRequest2 extends TokenRequest{
	String? organizationCode;
	String? languageCode;

	GetOrganizationRequest2({
		this.organizationCode,
		this.languageCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetOrganizationRequest2.fromJson(Map<String, dynamic> map) {
		return GetOrganizationRequest2( 
			organizationCode: map['OrganizationCode'],
			languageCode: map['LanguageCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		return map;
	}
}

class GetOrganizationSettingRequest extends TokenRequest{
	OrganizationSettingTypeEnum settingType;
	String? organizationCode;

	GetOrganizationSettingRequest({
		this.settingType = OrganizationSettingTypeEnum.Patient,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetOrganizationSettingRequest.fromJson(Map<String, dynamic> map) {
		return GetOrganizationSettingRequest( 
			settingType: OrganizationSettingTypeEnum.values.firstWhere((e) => e.index == map['SettingType']),
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SettingType'] = settingType.index;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class GetOrganizationUserPagesRequest extends PageRequest{
	String? organizationCode;
	String? queryType;
	String? keyword;

	GetOrganizationUserPagesRequest({
		this.organizationCode,
		this.queryType,
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetOrganizationUserPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetOrganizationUserPagesRequest( 
			organizationCode: map['OrganizationCode'],
			queryType: map['QueryType'],
			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 (queryType != null)
			map['QueryType'] = queryType;
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class GetPayUrlRequest extends PageRequest{
	String? shortCode;

	GetPayUrlRequest({
		this.shortCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetPayUrlRequest.fromJson(Map<String, dynamic> map) {
		return GetPayUrlRequest( 
			shortCode: map['ShortCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (shortCode != null)
			map['ShortCode'] = shortCode;
		return map;
	}
}

class GetPayUrlResult {
	String? payUrl;

	GetPayUrlResult({
		this.payUrl,
	});

	factory GetPayUrlResult.fromJson(Map<String, dynamic> map) {
		return GetPayUrlResult( 
			payUrl: map['PayUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (payUrl != null) {
			map['PayUrl'] = payUrl;
		}
		return map;
	}
}

class GetRolePagesRequest extends PageRequest{
	String? roleName;

	GetRolePagesRequest({
		this.roleName,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetRolePagesRequest.fromJson(Map<String, dynamic> map) {
		return GetRolePagesRequest( 
			roleName: map['RoleName'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (roleName != null)
			map['RoleName'] = roleName;
		return map;
	}
}

class GetRoleSelectListRequest extends TokenRequest{
	String? languageCode;

	GetRoleSelectListRequest({
		this.languageCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetRoleSelectListRequest.fromJson(Map<String, dynamic> map) {
		return GetRoleSelectListRequest( 
			languageCode: map['LanguageCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		return map;
	}
}

class GetSelectOrganizationPageRequest extends PageRequest{
	String? keyword;

	GetSelectOrganizationPageRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetSelectOrganizationPageRequest.fromJson(Map<String, dynamic> map) {
		return GetSelectOrganizationPageRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class GetShareExamUrlRequest {
	String? requestUrl;
	String? languageCode;
	String? host;

	GetShareExamUrlRequest({
		this.requestUrl,
		this.languageCode,
		this.host,
	});

	factory GetShareExamUrlRequest.fromJson(Map<String, dynamic> map) {
		return GetShareExamUrlRequest( 
			requestUrl: map['RequestUrl'],
			languageCode: map['LanguageCode'],
			host: map['Host'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (requestUrl != null) {
			map['RequestUrl'] = requestUrl;
		}
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		if (host != null) {
			map['Host'] = host;
		}
		return map;
	}
}

class GetShareImagesUrlRequest {
	String? recordCode;
	String? languageCode;
	String? host;
	int cols;

	GetShareImagesUrlRequest({
		this.recordCode,
		this.languageCode,
		this.host,
		this.cols = 0,
	});

	factory GetShareImagesUrlRequest.fromJson(Map<String, dynamic> map) {
		return GetShareImagesUrlRequest( 
			recordCode: map['RecordCode'],
			languageCode: map['LanguageCode'],
			host: map['Host'],
			cols: map['Cols'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (recordCode != null) {
			map['RecordCode'] = recordCode;
		}
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		if (host != null) {
			map['Host'] = host;
		}
		map['Cols'] = cols;
		return map;
	}
}

class GetThesaurusItemRequest extends TokenRequest{
	String? thesaurusCode;
	String? thesaurusItemCode;

	GetThesaurusItemRequest({
		this.thesaurusCode,
		this.thesaurusItemCode,
		String? token,
	}) : super(
			token: token,
		);

	factory GetThesaurusItemRequest.fromJson(Map<String, dynamic> map) {
		return GetThesaurusItemRequest( 
			thesaurusCode: map['ThesaurusCode'],
			thesaurusItemCode: map['ThesaurusItemCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		if (thesaurusItemCode != null)
			map['ThesaurusItemCode'] = thesaurusItemCode;
		return map;
	}
}

class GetThirdPartyInfoPagesRequest extends PageRequest{
	String? name;
	String? isValid;

	GetThirdPartyInfoPagesRequest({
		this.name,
		this.isValid,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory GetThirdPartyInfoPagesRequest.fromJson(Map<String, dynamic> map) {
		return GetThirdPartyInfoPagesRequest( 
			name: map['Name'],
			isValid: map['IsValid'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (name != null)
			map['Name'] = name;
		if (isValid != null)
			map['IsValid'] = isValid;
		return map;
	}
}

class GetUpgradeBusinessDataRequest extends TokenRequest{
	int category;

	GetUpgradeBusinessDataRequest({
		this.category = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory GetUpgradeBusinessDataRequest.fromJson(Map<String, dynamic> map) {
		return GetUpgradeBusinessDataRequest( 
			category: map['Category'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Category'] = category;
		return map;
	}
}

class GetFeatureListRequest extends TokenRequest{
	String? language;
	bool isAssistant;

	GetFeatureListRequest({
		this.language,
		this.isAssistant = false,
		String? token,
	}) : super(
			token: token,
		);

	factory GetFeatureListRequest.fromJson(Map<String, dynamic> map) {
		return GetFeatureListRequest( 
			language: map['Language'],
			isAssistant: map['IsAssistant'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (language != null)
			map['Language'] = language;
		map['IsAssistant'] = isAssistant;
		return map;
	}
}

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;
	AccountType accountType;

	ImitateLoginRequest({
		this.account,
		this.password,
		this.accountType = AccountType.Admin,
	});

	factory ImitateLoginRequest.fromJson(Map<String, dynamic> map) {
		return ImitateLoginRequest( 
			account: map['Account'],
			password: map['Password'],
			accountType: AccountType.values.firstWhere((e) => e.index == map['AccountType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (account != null) {
			map['Account'] = account;
		}
		if (password != null) {
			map['Password'] = password;
		}
		map['AccountType'] = accountType.index;
		return map;
	}
}

class ImitateLoginResult {
	String? clientId;

	ImitateLoginResult({
		this.clientId,
	});

	factory ImitateLoginResult.fromJson(Map<String, dynamic> map) {
		return ImitateLoginResult( 
			clientId: map['ClientId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (clientId != null) {
			map['ClientId'] = clientId;
		}
		return map;
	}
}

class ImportThesaurusRequest {
	String? thesaurusName;
	String? json;
	ThesaurusUsageTypeEnum thesaurusUsageType;
	String? languageCode;

	ImportThesaurusRequest({
		this.thesaurusName,
		this.json,
		this.thesaurusUsageType = ThesaurusUsageTypeEnum.People,
		this.languageCode,
	});

	factory ImportThesaurusRequest.fromJson(Map<String, dynamic> map) {
		return ImportThesaurusRequest( 
			thesaurusName: map['ThesaurusName'],
			json: map['Json'],
			thesaurusUsageType: ThesaurusUsageTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusUsageType']),
			languageCode: map['LanguageCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (thesaurusName != null) {
			map['ThesaurusName'] = thesaurusName;
		}
		if (json != null) {
			map['Json'] = json;
		}
		map['ThesaurusUsageType'] = thesaurusUsageType.index;
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		return map;
	}
}

class LoginRequest {
	String? adminName;
	String? password;

	LoginRequest({
		this.adminName,
		this.password,
	});

	factory LoginRequest.fromJson(Map<String, dynamic> map) {
		return LoginRequest( 
			adminName: map['AdminName'],
			password: map['Password'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (adminName != null) {
			map['AdminName'] = adminName;
		}
		if (password != null) {
			map['Password'] = password;
		}
		return map;
	}
}

enum ProductStatusEnum {
	SoldOut,
	Putaway,
}

enum ProductTypeEnum {
	Course,
	Other,
}

class ManageCreateProductRequest extends TokenRequest{
	String? name;
	String? headImage;
	double price;
	ProductStatusEnum status;
	ProductTypeEnum productType;
	String? belongerCode;
	String? relationInfo;

	ManageCreateProductRequest({
		this.name,
		this.headImage,
		this.price = 0,
		this.status = ProductStatusEnum.SoldOut,
		this.productType = ProductTypeEnum.Course,
		this.belongerCode,
		this.relationInfo,
		String? token,
	}) : super(
			token: token,
		);

	factory ManageCreateProductRequest.fromJson(Map<String, dynamic> map) {
		return ManageCreateProductRequest( 
			name: map['Name'],
			headImage: map['HeadImage'],
			price: double.parse(map['Price'].toString()),
			status: ProductStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			productType: ProductTypeEnum.values.firstWhere((e) => e.index == map['ProductType']),
			belongerCode: map['BelongerCode'],
			relationInfo: map['RelationInfo'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (name != null)
			map['Name'] = name;
		if (headImage != null)
			map['HeadImage'] = headImage;
		map['Price'] = price;
		map['Status'] = status.index;
		map['ProductType'] = productType.index;
		if (belongerCode != null)
			map['BelongerCode'] = belongerCode;
		if (relationInfo != null)
			map['RelationInfo'] = relationInfo;
		return map;
	}
}

class ManageGetOrderDetailRequest extends TokenRequest{
	String? orderCode;

	ManageGetOrderDetailRequest({
		this.orderCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ManageGetOrderDetailRequest.fromJson(Map<String, dynamic> map) {
		return ManageGetOrderDetailRequest( 
			orderCode: map['OrderCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (orderCode != null)
			map['OrderCode'] = orderCode;
		return map;
	}
}

class ManageGetOrderPagesRequest extends PageRequest{
	String? keyWord;

	ManageGetOrderPagesRequest({
		this.keyWord,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory ManageGetOrderPagesRequest.fromJson(Map<String, dynamic> map) {
		return ManageGetOrderPagesRequest( 
			keyWord: map['KeyWord'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyWord != null)
			map['KeyWord'] = keyWord;
		return map;
	}
}

class ManageGetPaymentRecordsRequest extends PageRequest{
	String? keyword;

	ManageGetPaymentRecordsRequest({
		this.keyword,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory ManageGetPaymentRecordsRequest.fromJson(Map<String, dynamic> map) {
		return ManageGetPaymentRecordsRequest( 
			keyword: map['Keyword'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		return map;
	}
}

class ManageUpdateProductRequest extends TokenRequest{
	String? code;
	String? name;
	String? headImage;
	double price;
	ProductStatusEnum status;
	ProductTypeEnum productType;
	String? belongerCode;
	String? relationInfo;

	ManageUpdateProductRequest({
		this.code,
		this.name,
		this.headImage,
		this.price = 0,
		this.status = ProductStatusEnum.SoldOut,
		this.productType = ProductTypeEnum.Course,
		this.belongerCode,
		this.relationInfo,
		String? token,
	}) : super(
			token: token,
		);

	factory ManageUpdateProductRequest.fromJson(Map<String, dynamic> map) {
		return ManageUpdateProductRequest( 
			code: map['Code'],
			name: map['Name'],
			headImage: map['HeadImage'],
			price: double.parse(map['Price'].toString()),
			status: ProductStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			productType: ProductTypeEnum.values.firstWhere((e) => e.index == map['ProductType']),
			belongerCode: map['BelongerCode'],
			relationInfo: map['RelationInfo'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (name != null)
			map['Name'] = name;
		if (headImage != null)
			map['HeadImage'] = headImage;
		map['Price'] = price;
		map['Status'] = status.index;
		map['ProductType'] = productType.index;
		if (belongerCode != null)
			map['BelongerCode'] = belongerCode;
		if (relationInfo != null)
			map['RelationInfo'] = relationInfo;
		return map;
	}
}

class BaseFeatureInfoDTO extends BaseDTO{
	String? featureCode;
	String? featureName;
	String? fatherCode;
	String? uniqueCode;
	List<BaseFeatureLanguageConfigDTO>? languageConfigs;

	BaseFeatureInfoDTO({
		this.featureCode,
		this.featureName,
		this.fatherCode,
		this.uniqueCode,
		this.languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory BaseFeatureInfoDTO.fromJson(Map<String, dynamic> map) {
		return BaseFeatureInfoDTO( 
			featureCode: map['FeatureCode'],
			featureName: map['FeatureName'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (featureCode != null)
			map['FeatureCode'] = featureCode;
		if (featureName != null)
			map['FeatureName'] = featureName;
		if (fatherCode != null)
			map['FatherCode'] = fatherCode;
		if (uniqueCode != null)
			map['UniqueCode'] = uniqueCode;
		if (languageConfigs != null)
			map['LanguageConfigs'] = languageConfigs;
		return map;
	}
}

class AdminFeatureInfoDTO extends BaseFeatureInfoDTO{

	AdminFeatureInfoDTO({
		String? featureCode,
		String? featureName,
		String? fatherCode,
		String? uniqueCode,
		List<BaseFeatureLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			featureCode: featureCode,
			featureName: featureName,
			fatherCode: fatherCode,
			uniqueCode: uniqueCode,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminFeatureInfoDTO.fromJson(Map<String, dynamic> map) {
		return AdminFeatureInfoDTO( 
			featureCode: map['FeatureCode'],
			featureName: map['FeatureName'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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();
		return map;
	}
}

class ModifyAdminFeatureRequest extends AdminFeatureInfoDTO{
	String? token;

	ModifyAdminFeatureRequest({
		this.token,
		String? featureCode,
		String? featureName,
		String? fatherCode,
		String? uniqueCode,
		List<BaseFeatureLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			featureCode: featureCode,
			featureName: featureName,
			fatherCode: fatherCode,
			uniqueCode: uniqueCode,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyAdminFeatureRequest.fromJson(Map<String, dynamic> map) {
		return ModifyAdminFeatureRequest( 
			token: map['Token'],
			featureCode: map['FeatureCode'],
			featureName: map['FeatureName'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

class ModifyAdminPasswordRequest extends TokenRequest{
	String? adminCode;
	String? oldPassword;
	String? newPassword;

	ModifyAdminPasswordRequest({
		this.adminCode,
		this.oldPassword,
		this.newPassword,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyAdminPasswordRequest.fromJson(Map<String, dynamic> map) {
		return ModifyAdminPasswordRequest( 
			adminCode: map['AdminCode'],
			oldPassword: map['OldPassword'],
			newPassword: map['NewPassword'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminCode != null)
			map['AdminCode'] = adminCode;
		if (oldPassword != null)
			map['OldPassword'] = oldPassword;
		if (newPassword != null)
			map['NewPassword'] = newPassword;
		return map;
	}
}

class ModifyAdminRequest extends AdminInfoDTO{
	String? token;

	ModifyAdminRequest({
		this.token,
		String? adminCode,
		String? fatherCode,
		String? adminName,
		String? fullName,
		String? secretPassword,
		String? headImageToken,
		String? licenseKey,
		String? lastIP,
		String? phone,
		String? email,
		List<String>? roleCodes,
		LoginLockInfoDTO? loginLockInfo,
		DateTime? passwordUpdateTime,
		List<String>? passwordRecords,
		List<ClearLogOperateDTO>? clearLogOperateList,
		List<String>? assignedOrganizations,
		String? bindUserCode,
		String? bindUserName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminCode: adminCode,
			fatherCode: fatherCode,
			adminName: adminName,
			fullName: fullName,
			secretPassword: secretPassword,
			headImageToken: headImageToken,
			licenseKey: licenseKey,
			lastIP: lastIP,
			phone: phone,
			email: email,
			roleCodes: roleCodes,
			loginLockInfo: loginLockInfo,
			passwordUpdateTime: passwordUpdateTime,
			passwordRecords: passwordRecords,
			clearLogOperateList: clearLogOperateList,
			assignedOrganizations: assignedOrganizations,
			bindUserCode: bindUserCode,
			bindUserName: bindUserName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyAdminRequest.fromJson(Map<String, dynamic> map) {
		return ModifyAdminRequest( 
			token: map['Token'],
			adminCode: map['AdminCode'],
			fatherCode: map['FatherCode'],
			adminName: map['AdminName'],
			fullName: map['FullName'],
			secretPassword: map['SecretPassword'],
			headImageToken: map['HeadImageToken'],
			licenseKey: map['LicenseKey'],
			lastIP: map['LastIP'],
			phone: map['Phone'],
			email: map['Email'],
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			passwordUpdateTime: map['PasswordUpdateTime'] != null ? DateTime.parse(map['PasswordUpdateTime']) : null,
			passwordRecords: map['PasswordRecords']?.cast<String>().toList(),
			clearLogOperateList: map['ClearLogOperateList'] != null ? (map['ClearLogOperateList'] as List).map((e)=>ClearLogOperateDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			assignedOrganizations: map['AssignedOrganizations']?.cast<String>().toList(),
			bindUserCode: map['BindUserCode'],
			bindUserName: map['BindUserName'],
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

class AdminRoleDTO extends BaseRoleDTO{
	String? adminGroupCode;
	int adminNum;

	AdminRoleDTO({
		this.adminGroupCode,
		this.adminNum = 0,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminRoleDTO.fromJson(Map<String, dynamic> map) {
		return AdminRoleDTO( 
			adminGroupCode: map['AdminGroupCode'],
			adminNum: map['AdminNum'],
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (adminGroupCode != null)
			map['AdminGroupCode'] = adminGroupCode;
		map['AdminNum'] = adminNum;
		return map;
	}
}

class ModifyAdminRoleInfoRequest extends AdminRoleDTO{
	String? token;
	List<String>? featuresCodeList;

	ModifyAdminRoleInfoRequest({
		this.token,
		this.featuresCodeList,
		String? adminGroupCode,
		int adminNum = 0,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminGroupCode: adminGroupCode,
			adminNum: adminNum,
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyAdminRoleInfoRequest.fromJson(Map<String, dynamic> map) {
		return ModifyAdminRoleInfoRequest( 
			token: map['Token'],
			featuresCodeList: map['FeaturesCodeList']?.cast<String>().toList(),
			adminGroupCode: map['AdminGroupCode'],
			adminNum: map['AdminNum'],
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (token != null)
			map['Token'] = token;
		if (featuresCodeList != null)
			map['FeaturesCodeList'] = featuresCodeList;
		return map;
	}
}

class ModifyAdminsRolesRequest {
	String? token;
	List<String>? adminCodes;
	List<String>? adminRoleCodes;

	ModifyAdminsRolesRequest({
		this.token,
		this.adminCodes,
		this.adminRoleCodes,
	});

	factory ModifyAdminsRolesRequest.fromJson(Map<String, dynamic> map) {
		return ModifyAdminsRolesRequest( 
			token: map['Token'],
			adminCodes: map['AdminCodes']?.cast<String>().toList(),
			adminRoleCodes: map['AdminRoleCodes']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (token != null) {
			map['Token'] = token;
		}
		if (adminCodes != null) {
			map['AdminCodes'] = adminCodes;
		}
		if (adminRoleCodes != null) {
			map['AdminRoleCodes'] = adminRoleCodes;
		}
		return map;
	}
}

class ModifyDeviceRequest2 extends DeviceInfoDTO{
	String? token;

	ModifyDeviceRequest2({
		this.token,
		String? deviceCode,
		String? serialNumber,
		String? password,
		String? name,
		String? description,
		String? deviceModel,
		String? deviceType,
		String? headPicUrl,
		String? deviceSoftwareVersion,
		String? sDKSoftwareVersion,
		String? organizationCode,
		String? departmentCode,
		String? shortCode,
		bool isAutoShared = false,
		bool isEncryptedShow = false,
		DateTime? lastLoginTime,
		String? systemVersion,
		String? cPUModel,
		String? systemLanguage,
		List<String>? diagnosisModules,
		List<String>? reportPosterCodes,
		bool mergedChannel = false,
		int mergedVideoOutputWidth = 0,
		int mergedVideoOutputHeight = 0,
		List<VideoDeviceDTO>? videoDeviceInfos,
		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
		bool liveOpened = false,
		bool supportRtc = false,
		String? displayName,
		SonopostVersionEnum sonopostVersion = SonopostVersionEnum.Sonopost,
		List<DataItemDTO>? deviceAttributes,
		bool isOnline = false,
		bool isActive = false,
		List<DictionaryLanguageConfigDTO>? languageConfigs,
		String? upgradeVersionCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			deviceCode: deviceCode,
			serialNumber: serialNumber,
			password: password,
			name: name,
			description: description,
			deviceModel: deviceModel,
			deviceType: deviceType,
			headPicUrl: headPicUrl,
			deviceSoftwareVersion: deviceSoftwareVersion,
			sDKSoftwareVersion: sDKSoftwareVersion,
			organizationCode: organizationCode,
			departmentCode: departmentCode,
			shortCode: shortCode,
			isAutoShared: isAutoShared,
			isEncryptedShow: isEncryptedShow,
			lastLoginTime: lastLoginTime,
			systemVersion: systemVersion,
			cPUModel: cPUModel,
			systemLanguage: systemLanguage,
			diagnosisModules: diagnosisModules,
			reportPosterCodes: reportPosterCodes,
			mergedChannel: mergedChannel,
			mergedVideoOutputWidth: mergedVideoOutputWidth,
			mergedVideoOutputHeight: mergedVideoOutputHeight,
			videoDeviceInfos: videoDeviceInfos,
			downloadModeSetting: downloadModeSetting,
			liveOpened: liveOpened,
			supportRtc: supportRtc,
			displayName: displayName,
			sonopostVersion: sonopostVersion,
			deviceAttributes: deviceAttributes,
			isOnline: isOnline,
			isActive: isActive,
			languageConfigs: languageConfigs,
			upgradeVersionCode: upgradeVersionCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyDeviceRequest2.fromJson(Map<String, dynamic> map) {
		return ModifyDeviceRequest2( 
			token: map['Token'],
			deviceCode: map['DeviceCode'],
			serialNumber: map['SerialNumber'],
			password: map['Password'],
			name: map['Name'],
			description: map['Description'],
			deviceModel: map['DeviceModel'],
			deviceType: map['DeviceType'],
			headPicUrl: map['HeadPicUrl'],
			deviceSoftwareVersion: map['DeviceSoftwareVersion'],
			sDKSoftwareVersion: map['SDKSoftwareVersion'],
			organizationCode: map['OrganizationCode'],
			departmentCode: map['DepartmentCode'],
			shortCode: map['ShortCode'],
			isAutoShared: map['IsAutoShared'],
			isEncryptedShow: map['IsEncryptedShow'],
			lastLoginTime: map['LastLoginTime'] != null ? DateTime.parse(map['LastLoginTime']) : null,
			systemVersion: map['SystemVersion'],
			cPUModel: map['CPUModel'],
			systemLanguage: map['SystemLanguage'],
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			reportPosterCodes: map['ReportPosterCodes']?.cast<String>().toList(),
			mergedChannel: map['MergedChannel'],
			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
			liveOpened: map['LiveOpened'],
			supportRtc: map['SupportRtc'],
			displayName: map['DisplayName'],
			sonopostVersion: SonopostVersionEnum.values.firstWhere((e) => e.index == map['SonopostVersion']),
			deviceAttributes: map['DeviceAttributes'] != null ? (map['DeviceAttributes'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isOnline: map['IsOnline'],
			isActive: map['IsActive'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>DictionaryLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			upgradeVersionCode: map['UpgradeVersionCode'],
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

class ModifyDeviceDownloadModeRequest extends TokenRequest{
	String? deviceCode;
	DownloadModeSettingEnum downloadModeSetting;

	ModifyDeviceDownloadModeRequest({
		this.deviceCode,
		this.downloadModeSetting = DownloadModeSettingEnum.Auto,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDeviceDownloadModeRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDeviceDownloadModeRequest( 
			deviceCode: map['DeviceCode'],
			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		map['DownloadModeSetting'] = downloadModeSetting.index;
		return map;
	}
}

class ModifyDeviceMergedVideoSizeRequest extends TokenRequest{
	String? deviceCode;
	bool mergedChannel;
	int mergedVideoOutputWidth;
	int mergedVideoOutputHeight;
	List<VideoDeviceDTO>? videoDeviceInfos;

	ModifyDeviceMergedVideoSizeRequest({
		this.deviceCode,
		this.mergedChannel = false,
		this.mergedVideoOutputWidth = 0,
		this.mergedVideoOutputHeight = 0,
		this.videoDeviceInfos,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDeviceMergedVideoSizeRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDeviceMergedVideoSizeRequest( 
			deviceCode: map['DeviceCode'],
			mergedChannel: map['MergedChannel'],
			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		map['MergedChannel'] = mergedChannel;
		map['MergedVideoOutputWidth'] = mergedVideoOutputWidth;
		map['MergedVideoOutputHeight'] = mergedVideoOutputHeight;
		if (videoDeviceInfos != null)
			map['VideoDeviceInfos'] = videoDeviceInfos;
		return map;
	}
}

class ModifyDevicePasswordRequest extends TokenRequest{
	String? deviceCode;
	String? password;

	ModifyDevicePasswordRequest({
		this.deviceCode,
		this.password,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDevicePasswordRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDevicePasswordRequest( 
			deviceCode: map['DeviceCode'],
			password: map['Password'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		if (password != null)
			map['Password'] = password;
		return map;
	}
}

class ModifyDeviceTypeRequest extends TokenRequest{
	String? value;
	String? dictionaryCode;
	List<DictionaryLanguageConfigDTO>? languageConfigs;
	DictionaryTypeEnum dictionaryType;

	ModifyDeviceTypeRequest({
		this.value,
		this.dictionaryCode,
		this.languageConfigs,
		this.dictionaryType = DictionaryTypeEnum.DeviceModel,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDeviceTypeRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDeviceTypeRequest( 
			value: map['Value'],
			dictionaryCode: map['DictionaryCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>DictionaryLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			dictionaryType: DictionaryTypeEnum.values.firstWhere((e) => e.index == map['DictionaryType']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (value != null)
			map['Value'] = value;
		if (dictionaryCode != null)
			map['DictionaryCode'] = dictionaryCode;
		if (languageConfigs != null)
			map['LanguageConfigs'] = languageConfigs;
		map['DictionaryType'] = dictionaryType.index;
		return map;
	}
}

class DeleteDeviceTypeRequest {
	String? deviceTypeCode;

	DeleteDeviceTypeRequest({
		this.deviceTypeCode,
	});

	factory DeleteDeviceTypeRequest.fromJson(Map<String, dynamic> map) {
		return DeleteDeviceTypeRequest( 
			deviceTypeCode: map['DeviceTypeCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (deviceTypeCode != null) {
			map['DeviceTypeCode'] = deviceTypeCode;
		}
		return map;
	}
}

class ModifyDiagnosisModuleEnableStateRequest extends TokenRequest{
	List<String>? diagnosisModules;
	bool enabled;

	ModifyDiagnosisModuleEnableStateRequest({
		this.diagnosisModules,
		this.enabled = false,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDiagnosisModuleEnableStateRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDiagnosisModuleEnableStateRequest( 
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			enabled: map['Enabled'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (diagnosisModules != null)
			map['DiagnosisModules'] = diagnosisModules;
		map['Enabled'] = enabled;
		return map;
	}
}

class ModifyDiagnosisModulesRequest extends TokenRequest{
	List<String>? diagnosisModules;

	ModifyDiagnosisModulesRequest({
		this.diagnosisModules,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyDiagnosisModulesRequest.fromJson(Map<String, dynamic> map) {
		return ModifyDiagnosisModulesRequest( 
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (diagnosisModules != null)
			map['DiagnosisModules'] = diagnosisModules;
		return map;
	}
}

class ModifyOrganizationCustomSettingRequest extends TokenRequest{
	String? langugeKey;
	String? settingModule;
	String? settingJson;
	String? organizationCode;

	ModifyOrganizationCustomSettingRequest({
		this.langugeKey,
		this.settingModule,
		this.settingJson,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyOrganizationCustomSettingRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationCustomSettingRequest( 
			langugeKey: map['LangugeKey'],
			settingModule: map['SettingModule'],
			settingJson: map['SettingJson'],
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (langugeKey != null)
			map['LangugeKey'] = langugeKey;
		if (settingModule != null)
			map['SettingModule'] = settingModule;
		if (settingJson != null)
			map['SettingJson'] = settingJson;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class ModifyOrganizationDiagnosisModulesRequest extends TokenRequest{
	String? organizationCode;
	List<String>? diagnosisModules;

	ModifyOrganizationDiagnosisModulesRequest({
		this.organizationCode,
		this.diagnosisModules,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyOrganizationDiagnosisModulesRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationDiagnosisModulesRequest( 
			organizationCode: map['OrganizationCode'],
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (diagnosisModules != null)
			map['DiagnosisModules'] = diagnosisModules;
		return map;
	}
}

class ModifyOrganizationDirectorsRequest extends TokenRequest{
	String? organizationCode;
	List<String>? directors;

	ModifyOrganizationDirectorsRequest({
		this.organizationCode,
		this.directors,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyOrganizationDirectorsRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationDirectorsRequest( 
			organizationCode: map['OrganizationCode'],
			directors: map['Directors']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (directors != null)
			map['Directors'] = directors;
		return map;
	}
}

class ModifyOrganizationRequest extends OrganizationDTO{
	String? token;

	ModifyOrganizationRequest({
		this.token,
		String? description,
		String? rootCode,
		OrganizationTypeEnum organizationType = OrganizationTypeEnum.Corporation,
		List<String>? authorityGroups,
		String? nautica,
		OrganizationStateEnum state = OrganizationStateEnum.WaitAudit,
		List<String>? directors,
		List<String>? assignedAdmins,
		String? patientSettingJson,
		String? examSettingJson,
		String? consultationSettingJson,
		String? patientSettingVersion,
		String? examSettingVersion,
		String? consultationSettingVersion,
		String? parentOrganizationName,
		String? regionCode,
		String? rootRegionCode,
		String? parentCode,
		String? logoUrl,
		OrganizationPatientTypeEnum patientType = OrganizationPatientTypeEnum.Person,
		bool isinvented = false,
		List<SettingDTOClass>? settings,
		List<String>? diagnosisModules,
		bool isEncryptedShow = false,
		double referralLimitHours = 0,
		List<String>? referralOrganizationCodes,
		List<ReferralOrganizationDTO>? referralOrganizations,
		String? defaultThesaurusCode,
		String? defaultReportTemplateCode,
		bool emergencyNeedFill = false,
		String? emergencySettingVersion,
		String? emergencySettingJson,
		String? organizationCode,
		String? organizationName,
		String? shortCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			description: description,
			rootCode: rootCode,
			organizationType: organizationType,
			authorityGroups: authorityGroups,
			nautica: nautica,
			state: state,
			directors: directors,
			assignedAdmins: assignedAdmins,
			patientSettingJson: patientSettingJson,
			examSettingJson: examSettingJson,
			consultationSettingJson: consultationSettingJson,
			patientSettingVersion: patientSettingVersion,
			examSettingVersion: examSettingVersion,
			consultationSettingVersion: consultationSettingVersion,
			parentOrganizationName: parentOrganizationName,
			regionCode: regionCode,
			rootRegionCode: rootRegionCode,
			parentCode: parentCode,
			logoUrl: logoUrl,
			patientType: patientType,
			isinvented: isinvented,
			settings: settings,
			diagnosisModules: diagnosisModules,
			isEncryptedShow: isEncryptedShow,
			referralLimitHours: referralLimitHours,
			referralOrganizationCodes: referralOrganizationCodes,
			referralOrganizations: referralOrganizations,
			defaultThesaurusCode: defaultThesaurusCode,
			defaultReportTemplateCode: defaultReportTemplateCode,
			emergencyNeedFill: emergencyNeedFill,
			emergencySettingVersion: emergencySettingVersion,
			emergencySettingJson: emergencySettingJson,
			organizationCode: organizationCode,
			organizationName: organizationName,
			shortCode: shortCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyOrganizationRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationRequest( 
			token: map['Token'],
			description: map['Description'],
			rootCode: map['RootCode'],
			organizationType: OrganizationTypeEnum.values.firstWhere((e) => e.index == map['OrganizationType']),
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			nautica: map['Nautica'],
			state: OrganizationStateEnum.values.firstWhere((e) => e.index == map['State']),
			directors: map['Directors']?.cast<String>().toList(),
			assignedAdmins: map['AssignedAdmins']?.cast<String>().toList(),
			patientSettingJson: map['PatientSettingJson'],
			examSettingJson: map['ExamSettingJson'],
			consultationSettingJson: map['ConsultationSettingJson'],
			patientSettingVersion: map['PatientSettingVersion'],
			examSettingVersion: map['ExamSettingVersion'],
			consultationSettingVersion: map['ConsultationSettingVersion'],
			parentOrganizationName: map['ParentOrganizationName'],
			regionCode: map['RegionCode'],
			rootRegionCode: map['RootRegionCode'],
			parentCode: map['ParentCode'],
			logoUrl: map['LogoUrl'],
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
			isinvented: map['Isinvented'],
			settings: map['Settings'] != null ? (map['Settings'] as List).map((e)=>SettingDTOClass.fromJson(e as Map<String,dynamic>)).toList() : null,
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			isEncryptedShow: map['IsEncryptedShow'],
			referralLimitHours: double.parse(map['ReferralLimitHours'].toString()),
			referralOrganizationCodes: map['ReferralOrganizationCodes']?.cast<String>().toList(),
			referralOrganizations: map['ReferralOrganizations'] != null ? (map['ReferralOrganizations'] as List).map((e)=>ReferralOrganizationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			defaultThesaurusCode: map['DefaultThesaurusCode'],
			defaultReportTemplateCode: map['DefaultReportTemplateCode'],
			emergencyNeedFill: map['EmergencyNeedFill'],
			emergencySettingVersion: map['EmergencySettingVersion'],
			emergencySettingJson: map['EmergencySettingJson'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			shortCode: map['ShortCode'],
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

class ModifyOrganizationSettingRequest extends TokenRequest{
	OrganizationSettingTypeEnum settingType;
	String? settingJson;
	String? organizationCode;
	String? cMSTemplateCode;

	ModifyOrganizationSettingRequest({
		this.settingType = OrganizationSettingTypeEnum.Patient,
		this.settingJson,
		this.organizationCode,
		this.cMSTemplateCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyOrganizationSettingRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationSettingRequest( 
			settingType: OrganizationSettingTypeEnum.values.firstWhere((e) => e.index == map['SettingType']),
			settingJson: map['SettingJson'],
			organizationCode: map['OrganizationCode'],
			cMSTemplateCode: map['CMSTemplateCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SettingType'] = settingType.index;
		if (settingJson != null)
			map['SettingJson'] = settingJson;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (cMSTemplateCode != null)
			map['CMSTemplateCode'] = cMSTemplateCode;
		return map;
	}
}

class ConsultationBaseInfoItem {
	String? name;
	bool isDefult;
	bool isShow;
	bool required;

	ConsultationBaseInfoItem({
		this.name,
		this.isDefult = false,
		this.isShow = false,
		this.required = false,
	});

	factory ConsultationBaseInfoItem.fromJson(Map<String, dynamic> map) {
		return ConsultationBaseInfoItem( 
			name: map['Name'],
			isDefult: map['IsDefult'],
			isShow: map['IsShow'],
			required: map['Required'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		map['IsDefult'] = isDefult;
		map['IsShow'] = isShow;
		map['Required'] = required;
		return map;
	}
}

class ModifycConsultationBaseInfoSettingRequest extends TokenRequest{
	List<ConsultationBaseInfoItem>? consultationBaseInfoList;
	String? organizationCode;

	ModifycConsultationBaseInfoSettingRequest({
		this.consultationBaseInfoList,
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifycConsultationBaseInfoSettingRequest.fromJson(Map<String, dynamic> map) {
		return ModifycConsultationBaseInfoSettingRequest( 
			consultationBaseInfoList: map['ConsultationBaseInfoList'] != null ? (map['ConsultationBaseInfoList'] as List).map((e)=>ConsultationBaseInfoItem.fromJson(e as Map<String,dynamic>)).toList() : null,
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (consultationBaseInfoList != null)
			map['ConsultationBaseInfoList'] = consultationBaseInfoList;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class ModifyOrganizationStateRequest extends TokenRequest{
	String? organizationCode;
	OrganizationStateEnum state;

	ModifyOrganizationStateRequest({
		this.organizationCode,
		this.state = OrganizationStateEnum.WaitAudit,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyOrganizationStateRequest.fromJson(Map<String, dynamic> map) {
		return ModifyOrganizationStateRequest( 
			organizationCode: map['OrganizationCode'],
			state: OrganizationStateEnum.values.firstWhere((e) => e.index == map['State']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		map['State'] = state.index;
		return map;
	}
}

class ModifyReferralRecordSettingRequest extends TokenRequest{
	double limitHours;

	ModifyReferralRecordSettingRequest({
		this.limitHours = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyReferralRecordSettingRequest.fromJson(Map<String, dynamic> map) {
		return ModifyReferralRecordSettingRequest( 
			limitHours: double.parse(map['LimitHours'].toString()),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['LimitHours'] = limitHours;
		return map;
	}
}

class ModifyReportPosterDevicesRequest extends TokenRequest{
	String? reportPosterCode;
	List<String>? deviceIds;

	ModifyReportPosterDevicesRequest({
		this.reportPosterCode,
		this.deviceIds,
		String? token,
	}) : super(
			token: token,
		);

	factory ModifyReportPosterDevicesRequest.fromJson(Map<String, dynamic> map) {
		return ModifyReportPosterDevicesRequest( 
			reportPosterCode: map['ReportPosterCode'],
			deviceIds: map['DeviceIds']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		if (deviceIds != null)
			map['DeviceIds'] = deviceIds;
		return map;
	}
}

class ModifyRoleInfoRequest extends RoleDTO{
	String? token;
	List<String>? featuresCodeList;

	ModifyRoleInfoRequest({
		this.token,
		this.featuresCodeList,
		RoleShowTypeEnum roleShowType = RoleShowTypeEnum.NotShow,
		String? iConUrl,
		String? colorStart,
		String? colorEnd,
		RoleQualificationEnum roleQualification = RoleQualificationEnum.NoNeed,
		String? userGroupCode,
		RoleShowTypeEnum fieldShowType = RoleShowTypeEnum.NotShow,
		List<String>? fieldList,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			roleShowType: roleShowType,
			iConUrl: iConUrl,
			colorStart: colorStart,
			colorEnd: colorEnd,
			roleQualification: roleQualification,
			userGroupCode: userGroupCode,
			fieldShowType: fieldShowType,
			fieldList: fieldList,
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyRoleInfoRequest.fromJson(Map<String, dynamic> map) {
		return ModifyRoleInfoRequest( 
			token: map['Token'],
			featuresCodeList: map['FeaturesCodeList']?.cast<String>().toList(),
			roleShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['RoleShowType']),
			iConUrl: map['IConUrl'],
			colorStart: map['ColorStart'],
			colorEnd: map['ColorEnd'],
			roleQualification: RoleQualificationEnum.values.firstWhere((e) => e.index == map['RoleQualification']),
			userGroupCode: map['UserGroupCode'],
			fieldShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['FieldShowType']),
			fieldList: map['FieldList']?.cast<String>().toList(),
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (token != null)
			map['Token'] = token;
		if (featuresCodeList != null)
			map['FeaturesCodeList'] = featuresCodeList;
		return map;
	}
}

class SaveUserFeatureInfoRequest extends ModifyRoleInfoRequest{
	String? userCode;

	SaveUserFeatureInfoRequest({
		this.userCode,
		String? token,
		List<String>? featuresCodeList,
		RoleShowTypeEnum roleShowType = RoleShowTypeEnum.NotShow,
		String? iConUrl,
		String? colorStart,
		String? colorEnd,
		RoleQualificationEnum roleQualification = RoleQualificationEnum.NoNeed,
		String? userGroupCode,
		RoleShowTypeEnum fieldShowType = RoleShowTypeEnum.NotShow,
		List<String>? fieldList,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			token: token,
			featuresCodeList: featuresCodeList,
			roleShowType: roleShowType,
			iConUrl: iConUrl,
			colorStart: colorStart,
			colorEnd: colorEnd,
			roleQualification: roleQualification,
			userGroupCode: userGroupCode,
			fieldShowType: fieldShowType,
			fieldList: fieldList,
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory SaveUserFeatureInfoRequest.fromJson(Map<String, dynamic> map) {
		return SaveUserFeatureInfoRequest( 
			userCode: map['UserCode'],
			token: map['Token'],
			featuresCodeList: map['FeaturesCodeList']?.cast<String>().toList(),
			roleShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['RoleShowType']),
			iConUrl: map['IConUrl'],
			colorStart: map['ColorStart'],
			colorEnd: map['ColorEnd'],
			roleQualification: RoleQualificationEnum.values.firstWhere((e) => e.index == map['RoleQualification']),
			userGroupCode: map['UserGroupCode'],
			fieldShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['FieldShowType']),
			fieldList: map['FieldList']?.cast<String>().toList(),
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (userCode != null)
			map['UserCode'] = userCode;
		return map;
	}
}

class ThirdPartyInfoDTO extends BaseDTO{
	String? code;
	String? name;
	String? contactPersonName;
	String? contactPhone;
	List<String>? allowedInterfaces;
	bool isValid;
	String? token;

	ThirdPartyInfoDTO({
		this.code,
		this.name,
		this.contactPersonName,
		this.contactPhone,
		this.allowedInterfaces,
		this.isValid = false,
		this.token,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ThirdPartyInfoDTO.fromJson(Map<String, dynamic> map) {
		return ThirdPartyInfoDTO( 
			code: map['Code'],
			name: map['Name'],
			contactPersonName: map['ContactPersonName'],
			contactPhone: map['ContactPhone'],
			allowedInterfaces: map['AllowedInterfaces']?.cast<String>().toList(),
			isValid: map['IsValid'],
			token: map['Token'],
			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 (name != null)
			map['Name'] = name;
		if (contactPersonName != null)
			map['ContactPersonName'] = contactPersonName;
		if (contactPhone != null)
			map['ContactPhone'] = contactPhone;
		if (allowedInterfaces != null)
			map['AllowedInterfaces'] = allowedInterfaces;
		map['IsValid'] = isValid;
		if (token != null)
			map['Token'] = token;
		return map;
	}
}

class ModifyThirdPartyInfoRequest extends ThirdPartyInfoDTO{

	ModifyThirdPartyInfoRequest({
		String? token,
		String? code,
		String? name,
		String? contactPersonName,
		String? contactPhone,
		List<String>? allowedInterfaces,
		bool isValid = false,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			name: name,
			contactPersonName: contactPersonName,
			contactPhone: contactPhone,
			allowedInterfaces: allowedInterfaces,
			isValid: isValid,
			token: token,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyThirdPartyInfoRequest.fromJson(Map<String, dynamic> map) {
		return ModifyThirdPartyInfoRequest( 
			token: map['Token'],
			code: map['Code'],
			name: map['Name'],
			contactPersonName: map['ContactPersonName'],
			contactPhone: map['ContactPhone'],
			allowedInterfaces: map['AllowedInterfaces']?.cast<String>().toList(),
			isValid: map['IsValid'],
			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();
		return map;
	}
}

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']?.cast<String>().toList(),
			organizationCodes: map['OrganizationCodes']?.cast<String>().toList(),
			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']?.cast<String>().toList(),
			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({
		String? featureCode,
		String? featureName,
		String? fatherCode,
		String? uniqueCode,
		List<BaseFeatureLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			featureCode: featureCode,
			featureName: featureName,
			fatherCode: fatherCode,
			uniqueCode: uniqueCode,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UserFeatureInfoDTO.fromJson(Map<String, dynamic> map) {
		return UserFeatureInfoDTO( 
			featureCode: map['FeatureCode'],
			featureName: map['FeatureName'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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();
		return map;
	}
}

class ModifyUserFeatureRequest extends UserFeatureInfoDTO{
	String? token;

	ModifyUserFeatureRequest({
		this.token,
		String? featureCode,
		String? featureName,
		String? fatherCode,
		String? uniqueCode,
		List<BaseFeatureLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			featureCode: featureCode,
			featureName: featureName,
			fatherCode: fatherCode,
			uniqueCode: uniqueCode,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyUserFeatureRequest.fromJson(Map<String, dynamic> map) {
		return ModifyUserFeatureRequest( 
			token: map['Token'],
			featureCode: map['FeatureCode'],
			featureName: map['FeatureName'],
			fatherCode: map['FatherCode'],
			uniqueCode: map['UniqueCode'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>BaseFeatureLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

enum ManagementUserInfoStateEnum {
	Nonactivated,
	Activated,
	Locked,
}

class ManageUserInfoDTO extends UserDTO{
	String? roleName;
	String? hospitalName;
	String? identityApplyCode;
	List<String>? identityCard;
	List<String>? licenseCard;
	String? identityApplyRoleCode;
	String? identityApplyRoleName;
	ManagementUserInfoStateEnum managementUserState;

	ManageUserInfoDTO({
		this.roleName,
		String? departmentName,
		this.hospitalName,
		this.identityApplyCode,
		this.identityCard,
		this.licenseCard,
		this.identityApplyRoleCode,
		this.identityApplyRoleName,
		bool isBatchExportDiagnoseData = false,
		List<String>? fieldList,
		this.managementUserState = ManagementUserInfoStateEnum.Nonactivated,
		String? nickName,
		String? organizationCode,
		String? organizationName,
		String? departmentCode,
		String? departmentShortCode,
		String? rootOrganizationCode,
		String? rootOrganizationName,
		List<String>? authorityGroups,
		List<String>? bindDevices,
		List<String>? bindDeviceOrganizations,
		String? lastIP,
		int logintimes = 0,
		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
		List<String>? roleCodes,
		List<String>? rankCodes,
		List<String>? positionCodes,
		ApplyStateEnum applyState = ApplyStateEnum.NotApply,
		String? rankName,
		String? positionName,
		bool isDirector = false,
		List<String>? deletePatientCodes,
		String? bindAssistantUserCode,
		String? bindAssistantDoctorUserCode,
		LoginLockInfoDTO? loginLockInfo,
		String? signature,
		String? language,
		bool enableReportLabel = false,
		List<AssociatedInfoDTO>? associatedInfos,
		String? commonPlatformUserId,
		String? bindEmergencyDeviceCode,
		String? bindEmergencyExpertCode,
		List<String>? dashboardOrgCodes,
		String? organizationShortCode,
		String? rootOrganizationShortCode,
		bool isOldAgent = false,
		List<String>? userFeatureCodes,
		String? openId,
		String? phone,
		String? email,
		String? userCode,
		String? userName,
		String? fullName,
		String? headImageUrl,
		String? displayName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			nickName: nickName,
			organizationCode: organizationCode,
			organizationName: organizationName,
			departmentCode: departmentCode,
			departmentName: departmentName,
			departmentShortCode: departmentShortCode,
			rootOrganizationCode: rootOrganizationCode,
			rootOrganizationName: rootOrganizationName,
			authorityGroups: authorityGroups,
			bindDevices: bindDevices,
			bindDeviceOrganizations: bindDeviceOrganizations,
			lastIP: lastIP,
			logintimes: logintimes,
			userState: userState,
			roleCodes: roleCodes,
			rankCodes: rankCodes,
			positionCodes: positionCodes,
			applyState: applyState,
			rankName: rankName,
			positionName: positionName,
			isDirector: isDirector,
			fieldList: fieldList,
			deletePatientCodes: deletePatientCodes,
			isBatchExportDiagnoseData: isBatchExportDiagnoseData,
			bindAssistantUserCode: bindAssistantUserCode,
			bindAssistantDoctorUserCode: bindAssistantDoctorUserCode,
			loginLockInfo: loginLockInfo,
			signature: signature,
			language: language,
			enableReportLabel: enableReportLabel,
			associatedInfos: associatedInfos,
			commonPlatformUserId: commonPlatformUserId,
			bindEmergencyDeviceCode: bindEmergencyDeviceCode,
			bindEmergencyExpertCode: bindEmergencyExpertCode,
			dashboardOrgCodes: dashboardOrgCodes,
			organizationShortCode: organizationShortCode,
			rootOrganizationShortCode: rootOrganizationShortCode,
			isOldAgent: isOldAgent,
			userFeatureCodes: userFeatureCodes,
			openId: openId,
			phone: phone,
			email: email,
			userCode: userCode,
			userName: userName,
			fullName: fullName,
			headImageUrl: headImageUrl,
			displayName: displayName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageUserInfoDTO.fromJson(Map<String, dynamic> map) {
		return ManageUserInfoDTO( 
			roleName: map['RoleName'],
			departmentName: map['DepartmentName'],
			hospitalName: map['HospitalName'],
			identityApplyCode: map['IdentityApplyCode'],
			identityCard: map['IdentityCard']?.cast<String>().toList(),
			licenseCard: map['LicenseCard']?.cast<String>().toList(),
			identityApplyRoleCode: map['IdentityApplyRoleCode'],
			identityApplyRoleName: map['IdentityApplyRoleName'],
			isBatchExportDiagnoseData: map['IsBatchExportDiagnoseData'],
			fieldList: map['FieldList']?.cast<String>().toList(),
			managementUserState: ManagementUserInfoStateEnum.values.firstWhere((e) => e.index == map['ManagementUserState']),
			nickName: map['NickName'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			departmentCode: map['DepartmentCode'],
			departmentShortCode: map['DepartmentShortCode'],
			rootOrganizationCode: map['RootOrganizationCode'],
			rootOrganizationName: map['RootOrganizationName'],
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			bindDevices: map['BindDevices']?.cast<String>().toList(),
			bindDeviceOrganizations: map['BindDeviceOrganizations']?.cast<String>().toList(),
			lastIP: map['LastIP'],
			logintimes: map['Logintimes'],
			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			rankCodes: map['RankCodes']?.cast<String>().toList(),
			positionCodes: map['PositionCodes']?.cast<String>().toList(),
			applyState: ApplyStateEnum.values.firstWhere((e) => e.index == map['ApplyState']),
			rankName: map['RankName'],
			positionName: map['PositionName'],
			isDirector: map['IsDirector'],
			deletePatientCodes: map['DeletePatientCodes']?.cast<String>().toList(),
			bindAssistantUserCode: map['BindAssistantUserCode'],
			bindAssistantDoctorUserCode: map['BindAssistantDoctorUserCode'],
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			signature: map['Signature'],
			language: map['Language'],
			enableReportLabel: map['EnableReportLabel'],
			associatedInfos: map['AssociatedInfos'] != null ? (map['AssociatedInfos'] as List).map((e)=>AssociatedInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			commonPlatformUserId: map['CommonPlatformUserId'],
			bindEmergencyDeviceCode: map['BindEmergencyDeviceCode'],
			bindEmergencyExpertCode: map['BindEmergencyExpertCode'],
			dashboardOrgCodes: map['DashboardOrgCodes']?.cast<String>().toList(),
			organizationShortCode: map['OrganizationShortCode'],
			rootOrganizationShortCode: map['RootOrganizationShortCode'],
			isOldAgent: map['IsOldAgent'],
			userFeatureCodes: map['UserFeatureCodes']?.cast<String>().toList(),
			openId: map['OpenId'],
			phone: map['Phone'],
			email: map['Email'],
			userCode: map['UserCode'],
			userName: map['UserName'],
			fullName: map['FullName'],
			headImageUrl: map['HeadImageUrl'],
			displayName: map['DisplayName'],
			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 (roleName != null)
			map['RoleName'] = roleName;
		if (hospitalName != null)
			map['HospitalName'] = hospitalName;
		if (identityApplyCode != null)
			map['IdentityApplyCode'] = identityApplyCode;
		if (identityCard != null)
			map['IdentityCard'] = identityCard;
		if (licenseCard != null)
			map['LicenseCard'] = licenseCard;
		if (identityApplyRoleCode != null)
			map['IdentityApplyRoleCode'] = identityApplyRoleCode;
		if (identityApplyRoleName != null)
			map['IdentityApplyRoleName'] = identityApplyRoleName;
		map['ManagementUserState'] = managementUserState.index;
		return map;
	}
}

class ModifyUserRequest extends ManageUserInfoDTO{
	String? token;

	ModifyUserRequest({
		this.token,
		String? roleName,
		String? departmentName,
		String? hospitalName,
		String? identityApplyCode,
		List<String>? identityCard,
		List<String>? licenseCard,
		String? identityApplyRoleCode,
		String? identityApplyRoleName,
		bool isBatchExportDiagnoseData = false,
		List<String>? fieldList,
		ManagementUserInfoStateEnum managementUserState = ManagementUserInfoStateEnum.Nonactivated,
		String? nickName,
		String? organizationCode,
		String? organizationName,
		String? departmentCode,
		String? departmentShortCode,
		String? rootOrganizationCode,
		String? rootOrganizationName,
		List<String>? authorityGroups,
		List<String>? bindDevices,
		List<String>? bindDeviceOrganizations,
		String? lastIP,
		int logintimes = 0,
		UserInfoStateEnum userState = UserInfoStateEnum.Nonactivated,
		List<String>? roleCodes,
		List<String>? rankCodes,
		List<String>? positionCodes,
		ApplyStateEnum applyState = ApplyStateEnum.NotApply,
		String? rankName,
		String? positionName,
		bool isDirector = false,
		List<String>? deletePatientCodes,
		String? bindAssistantUserCode,
		String? bindAssistantDoctorUserCode,
		LoginLockInfoDTO? loginLockInfo,
		String? signature,
		String? language,
		bool enableReportLabel = false,
		List<AssociatedInfoDTO>? associatedInfos,
		String? commonPlatformUserId,
		String? bindEmergencyDeviceCode,
		String? bindEmergencyExpertCode,
		List<String>? dashboardOrgCodes,
		String? organizationShortCode,
		String? rootOrganizationShortCode,
		bool isOldAgent = false,
		List<String>? userFeatureCodes,
		String? openId,
		String? phone,
		String? email,
		String? userCode,
		String? userName,
		String? fullName,
		String? headImageUrl,
		String? displayName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			roleName: roleName,
			departmentName: departmentName,
			hospitalName: hospitalName,
			identityApplyCode: identityApplyCode,
			identityCard: identityCard,
			licenseCard: licenseCard,
			identityApplyRoleCode: identityApplyRoleCode,
			identityApplyRoleName: identityApplyRoleName,
			isBatchExportDiagnoseData: isBatchExportDiagnoseData,
			fieldList: fieldList,
			managementUserState: managementUserState,
			nickName: nickName,
			organizationCode: organizationCode,
			organizationName: organizationName,
			departmentCode: departmentCode,
			departmentShortCode: departmentShortCode,
			rootOrganizationCode: rootOrganizationCode,
			rootOrganizationName: rootOrganizationName,
			authorityGroups: authorityGroups,
			bindDevices: bindDevices,
			bindDeviceOrganizations: bindDeviceOrganizations,
			lastIP: lastIP,
			logintimes: logintimes,
			userState: userState,
			roleCodes: roleCodes,
			rankCodes: rankCodes,
			positionCodes: positionCodes,
			applyState: applyState,
			rankName: rankName,
			positionName: positionName,
			isDirector: isDirector,
			deletePatientCodes: deletePatientCodes,
			bindAssistantUserCode: bindAssistantUserCode,
			bindAssistantDoctorUserCode: bindAssistantDoctorUserCode,
			loginLockInfo: loginLockInfo,
			signature: signature,
			language: language,
			enableReportLabel: enableReportLabel,
			associatedInfos: associatedInfos,
			commonPlatformUserId: commonPlatformUserId,
			bindEmergencyDeviceCode: bindEmergencyDeviceCode,
			bindEmergencyExpertCode: bindEmergencyExpertCode,
			dashboardOrgCodes: dashboardOrgCodes,
			organizationShortCode: organizationShortCode,
			rootOrganizationShortCode: rootOrganizationShortCode,
			isOldAgent: isOldAgent,
			userFeatureCodes: userFeatureCodes,
			openId: openId,
			phone: phone,
			email: email,
			userCode: userCode,
			userName: userName,
			fullName: fullName,
			headImageUrl: headImageUrl,
			displayName: displayName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ModifyUserRequest.fromJson(Map<String, dynamic> map) {
		return ModifyUserRequest( 
			token: map['Token'],
			roleName: map['RoleName'],
			departmentName: map['DepartmentName'],
			hospitalName: map['HospitalName'],
			identityApplyCode: map['IdentityApplyCode'],
			identityCard: map['IdentityCard']?.cast<String>().toList(),
			licenseCard: map['LicenseCard']?.cast<String>().toList(),
			identityApplyRoleCode: map['IdentityApplyRoleCode'],
			identityApplyRoleName: map['IdentityApplyRoleName'],
			isBatchExportDiagnoseData: map['IsBatchExportDiagnoseData'],
			fieldList: map['FieldList']?.cast<String>().toList(),
			managementUserState: ManagementUserInfoStateEnum.values.firstWhere((e) => e.index == map['ManagementUserState']),
			nickName: map['NickName'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			departmentCode: map['DepartmentCode'],
			departmentShortCode: map['DepartmentShortCode'],
			rootOrganizationCode: map['RootOrganizationCode'],
			rootOrganizationName: map['RootOrganizationName'],
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			bindDevices: map['BindDevices']?.cast<String>().toList(),
			bindDeviceOrganizations: map['BindDeviceOrganizations']?.cast<String>().toList(),
			lastIP: map['LastIP'],
			logintimes: map['Logintimes'],
			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			rankCodes: map['RankCodes']?.cast<String>().toList(),
			positionCodes: map['PositionCodes']?.cast<String>().toList(),
			applyState: ApplyStateEnum.values.firstWhere((e) => e.index == map['ApplyState']),
			rankName: map['RankName'],
			positionName: map['PositionName'],
			isDirector: map['IsDirector'],
			deletePatientCodes: map['DeletePatientCodes']?.cast<String>().toList(),
			bindAssistantUserCode: map['BindAssistantUserCode'],
			bindAssistantDoctorUserCode: map['BindAssistantDoctorUserCode'],
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			signature: map['Signature'],
			language: map['Language'],
			enableReportLabel: map['EnableReportLabel'],
			associatedInfos: map['AssociatedInfos'] != null ? (map['AssociatedInfos'] as List).map((e)=>AssociatedInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			commonPlatformUserId: map['CommonPlatformUserId'],
			bindEmergencyDeviceCode: map['BindEmergencyDeviceCode'],
			bindEmergencyExpertCode: map['BindEmergencyExpertCode'],
			dashboardOrgCodes: map['DashboardOrgCodes']?.cast<String>().toList(),
			organizationShortCode: map['OrganizationShortCode'],
			rootOrganizationShortCode: map['RootOrganizationShortCode'],
			isOldAgent: map['IsOldAgent'],
			userFeatureCodes: map['UserFeatureCodes']?.cast<String>().toList(),
			openId: map['OpenId'],
			phone: map['Phone'],
			email: map['Email'],
			userCode: map['UserCode'],
			userName: map['UserName'],
			fullName: map['FullName'],
			headImageUrl: map['HeadImageUrl'],
			displayName: map['DisplayName'],
			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 (token != null)
			map['Token'] = token;
		return map;
	}
}

class PublishReportTemplateRequest extends TokenRequest{
	String? reportTemplateCode;

	PublishReportTemplateRequest({
		this.reportTemplateCode,
		String? token,
	}) : super(
			token: token,
		);

	factory PublishReportTemplateRequest.fromJson(Map<String, dynamic> map) {
		return PublishReportTemplateRequest( 
			reportTemplateCode: map['ReportTemplateCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportTemplateCode != null)
			map['ReportTemplateCode'] = reportTemplateCode;
		return map;
	}
}

class PublishThesaurusRequest extends TokenRequest{
	String? thesaurusCode;

	PublishThesaurusRequest({
		this.thesaurusCode,
		String? token,
	}) : super(
			token: token,
		);

	factory PublishThesaurusRequest.fromJson(Map<String, dynamic> map) {
		return PublishThesaurusRequest( 
			thesaurusCode: map['ThesaurusCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		return map;
	}
}

class QueryAnnouncementPageRequest extends PageRequest{
	AnnouncementTypeEnum announcementType;
	AnnouncementStatusEnum announcementStatus;
	String? keyword;
	DateTime? startTime;
	DateTime? endTime;
	int queryType;

	QueryAnnouncementPageRequest({
		this.announcementType = AnnouncementTypeEnum.Broadcast,
		this.announcementStatus = AnnouncementStatusEnum.Released,
		this.keyword,
		this.startTime,
		this.endTime,
		this.queryType = 0,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryAnnouncementPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryAnnouncementPageRequest( 
			announcementType: AnnouncementTypeEnum.values.firstWhere((e) => e.index == map['AnnouncementType']),
			announcementStatus: AnnouncementStatusEnum.values.firstWhere((e) => e.index == map['AnnouncementStatus']),
			keyword: map['Keyword'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			queryType: map['QueryType'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['AnnouncementType'] = announcementType.index;
		map['AnnouncementStatus'] = announcementStatus.index;
		if (keyword != null)
			map['Keyword'] = keyword;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		if (endTime != null)
			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
		map['QueryType'] = queryType;
		return map;
	}
}

class QueryCourseLabelPageRequest extends PageRequest{
	String? name;
	String? languageCode;
	LabelTypeEnum type;
	String? parentCode;

	QueryCourseLabelPageRequest({
		this.name,
		this.languageCode,
		this.type = LabelTypeEnum.Unknown,
		this.parentCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryCourseLabelPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryCourseLabelPageRequest( 
			name: map['Name'],
			languageCode: map['LanguageCode'],
			type: LabelTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			parentCode: map['ParentCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (name != null)
			map['Name'] = name;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		map['Type'] = type.index;
		if (parentCode != null)
			map['ParentCode'] = parentCode;
		return map;
	}
}

class QueryDeviceInfoByPageRequest extends PageRequest{
	String? keyword;
	String? deviceType;
	bool isConnect;
	bool isActive;

	QueryDeviceInfoByPageRequest({
		this.keyword,
		this.deviceType,
		this.isConnect = false,
		this.isActive = false,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryDeviceInfoByPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryDeviceInfoByPageRequest( 
			keyword: map['Keyword'],
			deviceType: map['DeviceType'],
			isConnect: map['IsConnect'],
			isActive: map['IsActive'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (deviceType != null)
			map['DeviceType'] = deviceType;
		map['IsConnect'] = isConnect;
		map['IsActive'] = isActive;
		return map;
	}
}

class QueryDeviceReportByPageRequest extends PageRequest{
	String? keyword;
	DateTime? startTime;
	DateTime? endTime;
	String? deviceCode;

	QueryDeviceReportByPageRequest({
		this.keyword,
		this.startTime,
		this.endTime,
		this.deviceCode,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryDeviceReportByPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryDeviceReportByPageRequest( 
			keyword: map['Keyword'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			deviceCode: map['DeviceCode'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		if (endTime != null)
			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		return map;
	}
}

class QueryDeviceModelBindNumRequest extends TokenRequest{
	String? deviceModelCode;

	QueryDeviceModelBindNumRequest({
		this.deviceModelCode,
		String? token,
	}) : super(
			token: token,
		);

	factory QueryDeviceModelBindNumRequest.fromJson(Map<String, dynamic> map) {
		return QueryDeviceModelBindNumRequest( 
			deviceModelCode: map['DeviceModelCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceModelCode != null)
			map['DeviceModelCode'] = deviceModelCode;
		return map;
	}
}

enum DeviceBaseVersionBinTypeEnum {
	Unknow,
	Control,
	Motor,
	UI,
}

class QueryDeviceVersionByPageRequest extends PageRequest{
	String? keyword;
	int queryIOTDeviceVersionType;
	DeviceBaseVersionBinTypeEnum type;

	QueryDeviceVersionByPageRequest({
		this.keyword,
		this.queryIOTDeviceVersionType = 0,
		this.type = DeviceBaseVersionBinTypeEnum.Unknow,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryDeviceVersionByPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryDeviceVersionByPageRequest( 
			keyword: map['Keyword'],
			queryIOTDeviceVersionType: map['QueryIOTDeviceVersionType'],
			type: DeviceBaseVersionBinTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		map['QueryIOTDeviceVersionType'] = queryIOTDeviceVersionType;
		map['Type'] = type.index;
		return map;
	}
}

enum IOTDeviceVersionTypeEnum {
	Unknow,
	BaseVersion,
	DevelopVersion,
	ReleaseVersion,
}

class IOTDeviceVersionDTO extends BaseDTO{
	String? code;
	String? deviceType;
	IOTDeviceVersionTypeEnum iOTDeviceVersionType;
	DeviceBaseVersionBinTypeEnum type;
	String? versionNo;
	int versionCode;
	String? fileToken;
	List<IOTDeviceVersionDTO>? childDeviceVersions;
	String? fileBuildNum;
	int baseVersionType;

	IOTDeviceVersionDTO({
		this.code,
		this.deviceType,
		this.iOTDeviceVersionType = IOTDeviceVersionTypeEnum.Unknow,
		this.type = DeviceBaseVersionBinTypeEnum.Unknow,
		this.versionNo,
		this.versionCode = 0,
		this.fileToken,
		this.childDeviceVersions,
		this.fileBuildNum,
		this.baseVersionType = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory IOTDeviceVersionDTO.fromJson(Map<String, dynamic> map) {
		return IOTDeviceVersionDTO( 
			code: map['Code'],
			deviceType: map['DeviceType'],
			iOTDeviceVersionType: IOTDeviceVersionTypeEnum.values.firstWhere((e) => e.index == map['IOTDeviceVersionType']),
			type: DeviceBaseVersionBinTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			versionNo: map['VersionNo'],
			versionCode: map['VersionCode'],
			fileToken: map['FileToken'],
			childDeviceVersions: map['ChildDeviceVersions'] != null ? (map['ChildDeviceVersions'] as List).map((e)=>IOTDeviceVersionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileBuildNum: map['FileBuildNum'],
			baseVersionType: map['BaseVersionType'],
			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 (deviceType != null)
			map['DeviceType'] = deviceType;
		map['IOTDeviceVersionType'] = iOTDeviceVersionType.index;
		map['Type'] = type.index;
		if (versionNo != null)
			map['VersionNo'] = versionNo;
		map['VersionCode'] = versionCode;
		if (fileToken != null)
			map['FileToken'] = fileToken;
		if (childDeviceVersions != null)
			map['ChildDeviceVersions'] = childDeviceVersions;
		if (fileBuildNum != null)
			map['FileBuildNum'] = fileBuildNum;
		map['BaseVersionType'] = baseVersionType;
		return map;
	}
}

class AddIOTDeviceVersionRequest extends IOTDeviceVersionDTO{

	AddIOTDeviceVersionRequest({
		String? code,
		String? deviceType,
		IOTDeviceVersionTypeEnum iOTDeviceVersionType = IOTDeviceVersionTypeEnum.Unknow,
		DeviceBaseVersionBinTypeEnum type = DeviceBaseVersionBinTypeEnum.Unknow,
		String? versionNo,
		int versionCode = 0,
		String? fileToken,
		List<IOTDeviceVersionDTO>? childDeviceVersions,
		String? fileBuildNum,
		int baseVersionType = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			deviceType: deviceType,
			iOTDeviceVersionType: iOTDeviceVersionType,
			type: type,
			versionNo: versionNo,
			versionCode: versionCode,
			fileToken: fileToken,
			childDeviceVersions: childDeviceVersions,
			fileBuildNum: fileBuildNum,
			baseVersionType: baseVersionType,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AddIOTDeviceVersionRequest.fromJson(Map<String, dynamic> map) {
		return AddIOTDeviceVersionRequest( 
			code: map['Code'],
			deviceType: map['DeviceType'],
			iOTDeviceVersionType: IOTDeviceVersionTypeEnum.values.firstWhere((e) => e.index == map['IOTDeviceVersionType']),
			type: DeviceBaseVersionBinTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			versionNo: map['VersionNo'],
			versionCode: map['VersionCode'],
			fileToken: map['FileToken'],
			childDeviceVersions: map['ChildDeviceVersions'] != null ? (map['ChildDeviceVersions'] as List).map((e)=>IOTDeviceVersionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileBuildNum: map['FileBuildNum'],
			baseVersionType: map['BaseVersionType'],
			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();
		return map;
	}
}

class UpdateIOTDeviceVersionRequest extends IOTDeviceVersionDTO{

	UpdateIOTDeviceVersionRequest({
		String? code,
		String? deviceType,
		IOTDeviceVersionTypeEnum iOTDeviceVersionType = IOTDeviceVersionTypeEnum.Unknow,
		DeviceBaseVersionBinTypeEnum type = DeviceBaseVersionBinTypeEnum.Unknow,
		String? versionNo,
		int versionCode = 0,
		String? fileToken,
		List<IOTDeviceVersionDTO>? childDeviceVersions,
		String? fileBuildNum,
		int baseVersionType = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			deviceType: deviceType,
			iOTDeviceVersionType: iOTDeviceVersionType,
			type: type,
			versionNo: versionNo,
			versionCode: versionCode,
			fileToken: fileToken,
			childDeviceVersions: childDeviceVersions,
			fileBuildNum: fileBuildNum,
			baseVersionType: baseVersionType,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UpdateIOTDeviceVersionRequest.fromJson(Map<String, dynamic> map) {
		return UpdateIOTDeviceVersionRequest( 
			code: map['Code'],
			deviceType: map['DeviceType'],
			iOTDeviceVersionType: IOTDeviceVersionTypeEnum.values.firstWhere((e) => e.index == map['IOTDeviceVersionType']),
			type: DeviceBaseVersionBinTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			versionNo: map['VersionNo'],
			versionCode: map['VersionCode'],
			fileToken: map['FileToken'],
			childDeviceVersions: map['ChildDeviceVersions'] != null ? (map['ChildDeviceVersions'] as List).map((e)=>IOTDeviceVersionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileBuildNum: map['FileBuildNum'],
			baseVersionType: map['BaseVersionType'],
			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();
		return map;
	}
}

class QueryIOTDeviceVersionRequest {
	String? code;
	IOTDeviceVersionTypeEnum iOTDeviceVersionType;
	DeviceBaseVersionBinTypeEnum type;
	String? versionNo;

	QueryIOTDeviceVersionRequest({
		this.code,
		this.iOTDeviceVersionType = IOTDeviceVersionTypeEnum.Unknow,
		this.type = DeviceBaseVersionBinTypeEnum.Unknow,
		this.versionNo,
	});

	factory QueryIOTDeviceVersionRequest.fromJson(Map<String, dynamic> map) {
		return QueryIOTDeviceVersionRequest( 
			code: map['Code'],
			iOTDeviceVersionType: IOTDeviceVersionTypeEnum.values.firstWhere((e) => e.index == map['IOTDeviceVersionType']),
			type: DeviceBaseVersionBinTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			versionNo: map['VersionNo'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		map['IOTDeviceVersionType'] = iOTDeviceVersionType.index;
		map['Type'] = type.index;
		if (versionNo != null) {
			map['VersionNo'] = versionNo;
		}
		return map;
	}
}

class QueryRoleAdminNumRequest extends TokenRequest{
	String? adminRoleCode;

	QueryRoleAdminNumRequest({
		this.adminRoleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory QueryRoleAdminNumRequest.fromJson(Map<String, dynamic> map) {
		return QueryRoleAdminNumRequest( 
			adminRoleCode: map['AdminRoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminRoleCode != null)
			map['AdminRoleCode'] = adminRoleCode;
		return map;
	}
}

class QueryRoleUserNumRequest extends TokenRequest{
	String? roleCode;

	QueryRoleUserNumRequest({
		this.roleCode,
		String? token,
	}) : super(
			token: token,
		);

	factory QueryRoleUserNumRequest.fromJson(Map<String, dynamic> map) {
		return QueryRoleUserNumRequest( 
			roleCode: map['RoleCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (roleCode != null)
			map['RoleCode'] = roleCode;
		return map;
	}
}

class QuerySystemConfigRequest extends TokenRequest{
	String? code;
	String? configKey;

	QuerySystemConfigRequest({
		this.code,
		this.configKey,
		String? token,
	}) : super(
			token: token,
		);

	factory QuerySystemConfigRequest.fromJson(Map<String, dynamic> map) {
		return QuerySystemConfigRequest( 
			code: map['Code'],
			configKey: map['ConfigKey'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (configKey != null)
			map['ConfigKey'] = configKey;
		return map;
	}
}

class RejectIdentityApplyRequest extends TokenRequest{
	String? identityApplyCode;
	String? rejectReason;

	RejectIdentityApplyRequest({
		this.identityApplyCode,
		this.rejectReason,
		String? token,
	}) : super(
			token: token,
		);

	factory RejectIdentityApplyRequest.fromJson(Map<String, dynamic> map) {
		return RejectIdentityApplyRequest( 
			identityApplyCode: map['IdentityApplyCode'],
			rejectReason: map['RejectReason'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (identityApplyCode != null)
			map['IdentityApplyCode'] = identityApplyCode;
		if (rejectReason != null)
			map['RejectReason'] = rejectReason;
		return map;
	}
}

class RemoveAdminRequest extends TokenRequest{
	String? adminCode;

	RemoveAdminRequest({
		this.adminCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveAdminRequest.fromJson(Map<String, dynamic> map) {
		return RemoveAdminRequest( 
			adminCode: map['AdminCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminCode != null)
			map['AdminCode'] = adminCode;
		return map;
	}
}

class RemoveOrganizationRequest2 extends TokenRequest{
	String? organizationCode;

	RemoveOrganizationRequest2({
		this.organizationCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveOrganizationRequest2.fromJson(Map<String, dynamic> map) {
		return RemoveOrganizationRequest2( 
			organizationCode: map['OrganizationCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		return map;
	}
}

class RemoveReportLabelRequest extends TokenRequest{
	String? reportLabelCode;

	RemoveReportLabelRequest({
		this.reportLabelCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveReportLabelRequest.fromJson(Map<String, dynamic> map) {
		return RemoveReportLabelRequest( 
			reportLabelCode: map['ReportLabelCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportLabelCode != null)
			map['ReportLabelCode'] = reportLabelCode;
		return map;
	}
}

class RemoveReportPosterRequest extends TokenRequest{
	String? reportPosterCode;

	RemoveReportPosterRequest({
		this.reportPosterCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveReportPosterRequest.fromJson(Map<String, dynamic> map) {
		return RemoveReportPosterRequest( 
			reportPosterCode: map['ReportPosterCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		return map;
	}
}

class RemoveUserRequest2 extends TokenRequest{
	String? userCode;

	RemoveUserRequest2({
		this.userCode,
		String? token,
	}) : super(
			token: token,
		);

	factory RemoveUserRequest2.fromJson(Map<String, dynamic> map) {
		return RemoveUserRequest2( 
			userCode: map['UserCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		return map;
	}
}

class UnlockAccountRequest extends TokenRequest{
	String? userCode;

	UnlockAccountRequest({
		this.userCode,
		String? token,
	}) : super(
			token: token,
		);

	factory UnlockAccountRequest.fromJson(Map<String, dynamic> map) {
		return UnlockAccountRequest( 
			userCode: map['UserCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		return map;
	}
}

class UserFeatureInfoRequest extends GetFeatureListRequest{
	String? userCode;

	UserFeatureInfoRequest({
		this.userCode,
		String? language,
		bool isAssistant = false,
		String? token,
	}) : super(
			language: language,
			isAssistant: isAssistant,
			token: token,
		);

	factory UserFeatureInfoRequest.fromJson(Map<String, dynamic> map) {
		return UserFeatureInfoRequest( 
			userCode: map['UserCode'],
			language: map['Language'],
			isAssistant: map['IsAssistant'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		return map;
	}
}

class ResetAdminPasswordRequest extends TokenRequest{
	String? adminCode;
	String? passWord;

	ResetAdminPasswordRequest({
		this.adminCode,
		this.passWord,
		String? token,
	}) : super(
			token: token,
		);

	factory ResetAdminPasswordRequest.fromJson(Map<String, dynamic> map) {
		return ResetAdminPasswordRequest( 
			adminCode: map['AdminCode'],
			passWord: map['PassWord'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (adminCode != null)
			map['AdminCode'] = adminCode;
		if (passWord != null)
			map['PassWord'] = passWord;
		return map;
	}
}

class ResetUserPasswordRequest extends TokenRequest{
	String? userCode;
	String? passWord;

	ResetUserPasswordRequest({
		this.userCode,
		this.passWord,
		String? token,
	}) : super(
			token: token,
		);

	factory ResetUserPasswordRequest.fromJson(Map<String, dynamic> map) {
		return ResetUserPasswordRequest( 
			userCode: map['UserCode'],
			passWord: map['PassWord'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		if (passWord != null)
			map['PassWord'] = passWord;
		return map;
	}
}

class RetryPushReportRecordsRequest extends TokenRequest{
	List<String>? codes;

	RetryPushReportRecordsRequest({
		this.codes,
		String? token,
	}) : super(
			token: token,
		);

	factory RetryPushReportRecordsRequest.fromJson(Map<String, dynamic> map) {
		return RetryPushReportRecordsRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		return map;
	}
}

class SaveCMSTemplateDetailRequest extends TokenRequest{
	String? cMSTemplateCode;
	String? cMSTemplateName;
	CMSTemplateStatusTypeEnum cMSTemplateStateType;
	String? cMSTemplateJson;
	bool isDefault;
	String? cMSBgColor;
	String? cMSBgImg;
	bool isShowTop;
	String? cMSBorderColor;
	int cMSBorderShadow;

	SaveCMSTemplateDetailRequest({
		this.cMSTemplateCode,
		this.cMSTemplateName,
		this.cMSTemplateStateType = CMSTemplateStatusTypeEnum.UnPublished,
		this.cMSTemplateJson,
		this.isDefault = false,
		this.cMSBgColor,
		this.cMSBgImg,
		this.isShowTop = false,
		this.cMSBorderColor,
		this.cMSBorderShadow = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveCMSTemplateDetailRequest.fromJson(Map<String, dynamic> map) {
		return SaveCMSTemplateDetailRequest( 
			cMSTemplateCode: map['CMSTemplateCode'],
			cMSTemplateName: map['CMSTemplateName'],
			cMSTemplateStateType: CMSTemplateStatusTypeEnum.values.firstWhere((e) => e.index == map['CMSTemplateStateType']),
			cMSTemplateJson: map['CMSTemplateJson'],
			isDefault: map['IsDefault'],
			cMSBgColor: map['CMSBgColor'],
			cMSBgImg: map['CMSBgImg'],
			isShowTop: map['IsShowTop'],
			cMSBorderColor: map['CMSBorderColor'],
			cMSBorderShadow: map['CMSBorderShadow'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (cMSTemplateCode != null)
			map['CMSTemplateCode'] = cMSTemplateCode;
		if (cMSTemplateName != null)
			map['CMSTemplateName'] = cMSTemplateName;
		map['CMSTemplateStateType'] = cMSTemplateStateType.index;
		if (cMSTemplateJson != null)
			map['CMSTemplateJson'] = cMSTemplateJson;
		map['IsDefault'] = isDefault;
		if (cMSBgColor != null)
			map['CMSBgColor'] = cMSBgColor;
		if (cMSBgImg != null)
			map['CMSBgImg'] = cMSBgImg;
		map['IsShowTop'] = isShowTop;
		if (cMSBorderColor != null)
			map['CMSBorderColor'] = cMSBorderColor;
		map['CMSBorderShadow'] = cMSBorderShadow;
		return map;
	}
}

class SaveOrgTemplateDataRequest extends TokenRequest{
	String? organizationCode;
	String? defaultThesaurusCode;
	String? defaultReportTemplateCode;

	SaveOrgTemplateDataRequest({
		this.organizationCode,
		this.defaultThesaurusCode,
		this.defaultReportTemplateCode,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveOrgTemplateDataRequest.fromJson(Map<String, dynamic> map) {
		return SaveOrgTemplateDataRequest( 
			organizationCode: map['OrganizationCode'],
			defaultThesaurusCode: map['DefaultThesaurusCode'],
			defaultReportTemplateCode: map['DefaultReportTemplateCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (defaultThesaurusCode != null)
			map['DefaultThesaurusCode'] = defaultThesaurusCode;
		if (defaultReportTemplateCode != null)
			map['DefaultReportTemplateCode'] = defaultReportTemplateCode;
		return map;
	}
}

class SaveReportLabelRequest extends TokenRequest{
	String? reportLabelCode;
	String? labelName;
	String? languageCode;
	ReportLabelUsageTypeEnum usageType;
	List<String>? labelItems;

	SaveReportLabelRequest({
		this.reportLabelCode,
		this.labelName,
		this.languageCode,
		this.usageType = ReportLabelUsageTypeEnum.People,
		this.labelItems,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveReportLabelRequest.fromJson(Map<String, dynamic> map) {
		return SaveReportLabelRequest( 
			reportLabelCode: map['ReportLabelCode'],
			labelName: map['LabelName'],
			languageCode: map['LanguageCode'],
			usageType: ReportLabelUsageTypeEnum.values.firstWhere((e) => e.index == map['UsageType']),
			labelItems: map['LabelItems']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportLabelCode != null)
			map['ReportLabelCode'] = reportLabelCode;
		if (labelName != null)
			map['LabelName'] = labelName;
		if (languageCode != null)
			map['LanguageCode'] = languageCode;
		map['UsageType'] = usageType.index;
		if (labelItems != null)
			map['LabelItems'] = labelItems;
		return map;
	}
}

class SaveReportPosterRequest extends TokenRequest{
	String? reportPosterCode;
	String? receiverName;
	String? contact;
	String? phone;
	String? targetUrl;
	String? template;
	ReportPosterTypeEnum posterType;
	ReportFormatEnum reportFormat;
	int postTimeout;

	SaveReportPosterRequest({
		this.reportPosterCode,
		this.receiverName,
		this.contact,
		this.phone,
		this.targetUrl,
		this.template,
		this.posterType = ReportPosterTypeEnum.Default,
		this.reportFormat = ReportFormatEnum.Json,
		this.postTimeout = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory SaveReportPosterRequest.fromJson(Map<String, dynamic> map) {
		return SaveReportPosterRequest( 
			reportPosterCode: map['ReportPosterCode'],
			receiverName: map['ReceiverName'],
			contact: map['Contact'],
			phone: map['Phone'],
			targetUrl: map['TargetUrl'],
			template: map['Template'],
			posterType: ReportPosterTypeEnum.values.firstWhere((e) => e.index == map['PosterType']),
			reportFormat: ReportFormatEnum.values.firstWhere((e) => e.index == map['ReportFormat']),
			postTimeout: map['PostTimeout'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		if (receiverName != null)
			map['ReceiverName'] = receiverName;
		if (contact != null)
			map['Contact'] = contact;
		if (phone != null)
			map['Phone'] = phone;
		if (targetUrl != null)
			map['TargetUrl'] = targetUrl;
		if (template != null)
			map['Template'] = template;
		map['PosterType'] = posterType.index;
		map['ReportFormat'] = reportFormat.index;
		map['PostTimeout'] = postTimeout;
		return map;
	}
}

class SaveThesaurusRequest extends ThesaurusDTO{
	String? token;

	SaveThesaurusRequest({
		this.token,
		String? thesaurusCode,
		String? thesaurusName,
		ThesaurusStatusTypeEnum thesaurusStateType = ThesaurusStatusTypeEnum.Unpublished,
		ThesaurusTypeEnum thesaurusType = ThesaurusTypeEnum.Default,
		ThesaurusUsageTypeEnum thesaurusUsageType = ThesaurusUsageTypeEnum.People,
		String? organizationCode,
		String? personalCode,
		String? organizationName,
		String? personalName,
		String? referenceThesaurusCode,
		bool isDefault = false,
		bool isUserDefault = false,
		String? languageCode,
	}) : super(
			thesaurusCode: thesaurusCode,
			thesaurusName: thesaurusName,
			thesaurusStateType: thesaurusStateType,
			thesaurusType: thesaurusType,
			thesaurusUsageType: thesaurusUsageType,
			organizationCode: organizationCode,
			personalCode: personalCode,
			organizationName: organizationName,
			personalName: personalName,
			referenceThesaurusCode: referenceThesaurusCode,
			isDefault: isDefault,
			isUserDefault: isUserDefault,
			languageCode: languageCode,
		);

	factory SaveThesaurusRequest.fromJson(Map<String, dynamic> map) {
		return SaveThesaurusRequest( 
			token: map['Token'],
			thesaurusCode: map['ThesaurusCode'],
			thesaurusName: map['ThesaurusName'],
			thesaurusStateType: ThesaurusStatusTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusStateType']),
			thesaurusType: ThesaurusTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusType']),
			thesaurusUsageType: ThesaurusUsageTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusUsageType']),
			organizationCode: map['OrganizationCode'],
			personalCode: map['PersonalCode'],
			organizationName: map['OrganizationName'],
			personalName: map['PersonalName'],
			referenceThesaurusCode: map['ReferenceThesaurusCode'],
			isDefault: map['IsDefault'],
			isUserDefault: map['IsUserDefault'],
			languageCode: map['LanguageCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (token != null)
			map['Token'] = token;
		return map;
	}
}

class SettingReloadRequest extends TokenRequest{
	String? settingKey;

	SettingReloadRequest({
		this.settingKey,
		String? token,
	}) : super(
			token: token,
		);

	factory SettingReloadRequest.fromJson(Map<String, dynamic> map) {
		return SettingReloadRequest( 
			settingKey: map['SettingKey'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (settingKey != null)
			map['SettingKey'] = settingKey;
		return map;
	}
}

class ShareDeviceRequest extends TokenRequest{
	List<String>? userCodeList;
	List<String>? deviceCodes;

	ShareDeviceRequest({
		this.userCodeList,
		this.deviceCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory ShareDeviceRequest.fromJson(Map<String, dynamic> map) {
		return ShareDeviceRequest( 
			userCodeList: map['UserCodeList']?.cast<String>().toList(),
			deviceCodes: map['DeviceCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCodeList != null)
			map['UserCodeList'] = userCodeList;
		if (deviceCodes != null)
			map['DeviceCodes'] = deviceCodes;
		return map;
	}
}

class ThesaurusItemRequest extends TokenRequest{
	String? thesaurusItemCode;
	ThesaurusItemTypeEnum thesaurusItemType;
	String? thesaurusItemName;
	String? parentItemCode;
	String? thesaurusCode;
	String? thesaurusItemDescription;
	String? thesaurusItemConclusion;

	ThesaurusItemRequest({
		this.thesaurusItemCode,
		this.thesaurusItemType = ThesaurusItemTypeEnum.Classification,
		this.thesaurusItemName,
		this.parentItemCode,
		this.thesaurusCode,
		this.thesaurusItemDescription,
		this.thesaurusItemConclusion,
		String? token,
	}) : super(
			token: token,
		);

	factory ThesaurusItemRequest.fromJson(Map<String, dynamic> map) {
		return ThesaurusItemRequest( 
			thesaurusItemCode: map['ThesaurusItemCode'],
			thesaurusItemType: ThesaurusItemTypeEnum.values.firstWhere((e) => e.index == map['ThesaurusItemType']),
			thesaurusItemName: map['ThesaurusItemName'],
			parentItemCode: map['ParentItemCode'],
			thesaurusCode: map['ThesaurusCode'],
			thesaurusItemDescription: map['ThesaurusItemDescription'],
			thesaurusItemConclusion: map['ThesaurusItemConclusion'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (thesaurusItemCode != null)
			map['ThesaurusItemCode'] = thesaurusItemCode;
		map['ThesaurusItemType'] = thesaurusItemType.index;
		if (thesaurusItemName != null)
			map['ThesaurusItemName'] = thesaurusItemName;
		if (parentItemCode != null)
			map['ParentItemCode'] = parentItemCode;
		if (thesaurusCode != null)
			map['ThesaurusCode'] = thesaurusCode;
		if (thesaurusItemDescription != null)
			map['ThesaurusItemDescription'] = thesaurusItemDescription;
		if (thesaurusItemConclusion != null)
			map['ThesaurusItemConclusion'] = thesaurusItemConclusion;
		return map;
	}
}

class UpdateDeviceDiagnosisModuleEnabledRequest extends TokenRequest{
	String? deviceCode;
	List<String>? diagnosisModules;

	UpdateDeviceDiagnosisModuleEnabledRequest({
		this.deviceCode,
		this.diagnosisModules,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateDeviceDiagnosisModuleEnabledRequest.fromJson(Map<String, dynamic> map) {
		return UpdateDeviceDiagnosisModuleEnabledRequest( 
			deviceCode: map['DeviceCode'],
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		if (diagnosisModules != null)
			map['DiagnosisModules'] = diagnosisModules;
		return map;
	}
}

class UpdateEmergencySettingRequest extends TokenRequest{
	String? organizationCode;
	bool emergencyNeedFill;
	String? emergencySettingVersion;
	String? emergencySettingJson;

	UpdateEmergencySettingRequest({
		this.organizationCode,
		this.emergencyNeedFill = false,
		this.emergencySettingVersion,
		this.emergencySettingJson,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateEmergencySettingRequest.fromJson(Map<String, dynamic> map) {
		return UpdateEmergencySettingRequest( 
			organizationCode: map['OrganizationCode'],
			emergencyNeedFill: map['EmergencyNeedFill'],
			emergencySettingVersion: map['EmergencySettingVersion'],
			emergencySettingJson: map['EmergencySettingJson'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		map['EmergencyNeedFill'] = emergencyNeedFill;
		if (emergencySettingVersion != null)
			map['EmergencySettingVersion'] = emergencySettingVersion;
		if (emergencySettingJson != null)
			map['EmergencySettingJson'] = emergencySettingJson;
		return map;
	}
}

enum GradingConfigTypeEnum {
	Switch,
	Text,
}

class UpdateGradingProtectionConfigEnableRequest extends TokenRequest{
	List<String>? codes;
	GradingConfigTypeEnum configType;
	String? value;

	UpdateGradingProtectionConfigEnableRequest({
		this.codes,
		this.configType = GradingConfigTypeEnum.Switch,
		this.value,
		String? token,
	}) : super(
			token: token,
		);

	factory UpdateGradingProtectionConfigEnableRequest.fromJson(Map<String, dynamic> map) {
		return UpdateGradingProtectionConfigEnableRequest( 
			codes: map['Codes']?.cast<String>().toList(),
			configType: GradingConfigTypeEnum.values.firstWhere((e) => e.index == map['ConfigType']),
			value: map['Value'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (codes != null)
			map['Codes'] = codes;
		map['ConfigType'] = configType.index;
		if (value != null)
			map['Value'] = value;
		return map;
	}
}

class FindCourseAlbumPageRequest extends PageRequest{
	String? keyword;
	StudentCourseStatusEnum queryStatus;
	List<String>? courseLabelCodes;
	String? teacherCode;
	String? teacherName;
	CourseViewRangeEnum viewRange;
	double price;

	FindCourseAlbumPageRequest({
		this.keyword,
		this.queryStatus = StudentCourseStatusEnum.All,
		this.courseLabelCodes,
		this.teacherCode,
		this.teacherName,
		this.viewRange = CourseViewRangeEnum.All,
		this.price = 0,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory FindCourseAlbumPageRequest.fromJson(Map<String, dynamic> map) {
		return FindCourseAlbumPageRequest( 
			keyword: map['Keyword'],
			queryStatus: StudentCourseStatusEnum.values.firstWhere((e) => e.index == map['QueryStatus']),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			teacherCode: map['TeacherCode'],
			teacherName: map['TeacherName'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			price: double.parse(map['Price'].toString()),
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (keyword != null)
			map['Keyword'] = keyword;
		map['QueryStatus'] = queryStatus.index;
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		map['ViewRange'] = viewRange.index;
		map['Price'] = price;
		return map;
	}
}

class CourseAlbumAddCourseCodesRequest extends TokenRequest{
	List<String>? courseCodes;

	CourseAlbumAddCourseCodesRequest({
		this.courseCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory CourseAlbumAddCourseCodesRequest.fromJson(Map<String, dynamic> map) {
		return CourseAlbumAddCourseCodesRequest( 
			courseCodes: map['CourseCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseCodes != null)
			map['CourseCodes'] = courseCodes;
		return map;
	}
}

class CourseAlbumAddCourseLabelCodesRequest extends TokenRequest{
	List<String>? courseLabelCodes;

	CourseAlbumAddCourseLabelCodesRequest({
		this.courseLabelCodes,
		String? token,
	}) : super(
			token: token,
		);

	factory CourseAlbumAddCourseLabelCodesRequest.fromJson(Map<String, dynamic> map) {
		return CourseAlbumAddCourseLabelCodesRequest( 
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseLabelCodes != null)
			map['CourseLabelCodes'] = courseLabelCodes;
		return map;
	}
}

class SignUpCourseAlbumRequest extends TokenRequest{
	String? courseAlbumCode;

	SignUpCourseAlbumRequest({
		this.courseAlbumCode,
		String? token,
	}) : super(
			token: token,
		);

	factory SignUpCourseAlbumRequest.fromJson(Map<String, dynamic> map) {
		return SignUpCourseAlbumRequest( 
			courseAlbumCode: map['CourseAlbumCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseAlbumCode != null)
			map['CourseAlbumCode'] = courseAlbumCode;
		return map;
	}
}

class BindCourseMaterialsRequest extends TokenRequest{
	String? courseCode;
	List<String>? materialCodes;
	int category;

	BindCourseMaterialsRequest({
		this.courseCode,
		this.materialCodes,
		this.category = 0,
		String? token,
	}) : super(
			token: token,
		);

	factory BindCourseMaterialsRequest.fromJson(Map<String, dynamic> map) {
		return BindCourseMaterialsRequest( 
			courseCode: map['CourseCode'],
			materialCodes: map['MaterialCodes']?.cast<String>().toList(),
			category: map['Category'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseCode != null)
			map['CourseCode'] = courseCode;
		if (materialCodes != null)
			map['MaterialCodes'] = materialCodes;
		map['Category'] = category;
		return map;
	}
}

class CourseMigrateBrowsedRecordRequest extends TokenRequest{
	List<CourseBrowsedRecordDTO>? courseBrowsedRecords;
	SyncDBEnum syncType;

	CourseMigrateBrowsedRecordRequest({
		this.courseBrowsedRecords,
		this.syncType = SyncDBEnum.Migrate,
		String? token,
	}) : super(
			token: token,
		);

	factory CourseMigrateBrowsedRecordRequest.fromJson(Map<String, dynamic> map) {
		return CourseMigrateBrowsedRecordRequest( 
			courseBrowsedRecords: map['CourseBrowsedRecords'] != null ? (map['CourseBrowsedRecords'] as List).map((e)=>CourseBrowsedRecordDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			syncType: SyncDBEnum.values.firstWhere((e) => e.index == map['SyncType']),
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseBrowsedRecords != null)
			map['CourseBrowsedRecords'] = courseBrowsedRecords;
		map['SyncType'] = syncType.index;
		return map;
	}
}

class QueryVideoFilesByPageRequest extends PageRequest{
	String? teacherCode;
	String? keyword;
	int category;

	QueryVideoFilesByPageRequest({
		this.teacherCode,
		this.keyword,
		this.category = 0,
		int pageIndex = 0,
		int pageSize = 0,
		String? token,
	}) : super(
			pageIndex: pageIndex,
			pageSize: pageSize,
			token: token,
		);

	factory QueryVideoFilesByPageRequest.fromJson(Map<String, dynamic> map) {
		return QueryVideoFilesByPageRequest( 
			teacherCode: map['TeacherCode'],
			keyword: map['Keyword'],
			category: map['Category'],
			pageIndex: map['PageIndex'],
			pageSize: map['PageSize'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (keyword != null)
			map['Keyword'] = keyword;
		map['Category'] = category;
		return map;
	}
}

class FindVideosByCourseCodeRequest extends TokenRequest{
	String? code;
	String? courseCode;

	FindVideosByCourseCodeRequest({
		this.code,
		this.courseCode,
		String? token,
	}) : super(
			token: token,
		);

	factory FindVideosByCourseCodeRequest.fromJson(Map<String, dynamic> map) {
		return FindVideosByCourseCodeRequest( 
			code: map['Code'],
			courseCode: map['CourseCode'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (courseCode != null)
			map['CourseCode'] = courseCode;
		return map;
	}
}

class GetReportDetailRequest extends AppletAPIBaseRequest{
	String? reportId;

	GetReportDetailRequest({
		this.reportId,
		String? openId,
	}) : super(
			openId: openId,
		);

	factory GetReportDetailRequest.fromJson(Map<String, dynamic> map) {
		return GetReportDetailRequest( 
			reportId: map['ReportId'],
			openId: map['OpenId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (reportId != null)
			map['ReportId'] = reportId;
		return map;
	}
}

class GetOpLogsByCodesFormMasterRequest {
	List<String>? codes;

	GetOpLogsByCodesFormMasterRequest({
		this.codes,
	});

	factory GetOpLogsByCodesFormMasterRequest.fromJson(Map<String, dynamic> map) {
		return GetOpLogsByCodesFormMasterRequest( 
			codes: map['Codes']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (codes != null) {
			map['Codes'] = codes;
		}
		return map;
	}
}

class GetOpLogsFormMasterRequest {
	int cursor;
	String? sourceUrl;

	GetOpLogsFormMasterRequest({
		this.cursor = 0,
		this.sourceUrl,
	});

	factory GetOpLogsFormMasterRequest.fromJson(Map<String, dynamic> map) {
		return GetOpLogsFormMasterRequest( 
			cursor: map['Cursor'],
			sourceUrl: map['SourceUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Cursor'] = cursor;
		if (sourceUrl != null) {
			map['SourceUrl'] = sourceUrl;
		}
		return map;
	}
}

enum MongoDBActionTypeEnum {
	InsertOne,
	InsertOneAsync,
	InsertMany,
	InsertManyAsync,
	DeleteOne,
	DeleteOneAsync,
	DeleteMany,
	DeleteManyAsync,
	FindOneAndDelete,
	FindOneAndDeleteAsync,
	ReplaceOne,
	ReplaceOneAsync,
	FindOneAndReplace,
	FindOneAndReplaceAsync,
	UpdateOne,
	UpdateOneAsync,
	UpdateMany,
	UpdateManyAsync,
	FindOneAndUpdate,
	FindOneAndUpdateAsync,
}

class OperationLogDTO2 {
	int id;
	String? collectionName;
	MongoDBActionTypeEnum actionType;
	String? bsonContent;
	String? filterContent;
	DateTime? createTime;
	String? code;
	String? sourceUrl;
	bool isSimple;

	OperationLogDTO2({
		this.id = 0,
		this.collectionName,
		this.actionType = MongoDBActionTypeEnum.InsertOne,
		this.bsonContent,
		this.filterContent,
		this.createTime,
		this.code,
		this.sourceUrl,
		this.isSimple = false,
	});

	factory OperationLogDTO2.fromJson(Map<String, dynamic> map) {
		return OperationLogDTO2( 
			id: map['Id'],
			collectionName: map['CollectionName'],
			actionType: MongoDBActionTypeEnum.values.firstWhere((e) => e.index == map['ActionType']),
			bsonContent: map['BsonContent'],
			filterContent: map['FilterContent'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			code: map['Code'],
			sourceUrl: map['SourceUrl'],
			isSimple: map['IsSimple'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Id'] = id;
		if (collectionName != null) {
			map['CollectionName'] = collectionName;
		}
		map['ActionType'] = actionType.index;
		if (bsonContent != null) {
			map['BsonContent'] = bsonContent;
		}
		if (filterContent != null) {
			map['FilterContent'] = filterContent;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (code != null) {
			map['Code'] = code;
		}
		if (sourceUrl != null) {
			map['SourceUrl'] = sourceUrl;
		}
		map['IsSimple'] = isSimple;
		return map;
	}
}

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']?.cast<String,String>(),
			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<OperationLogDTO2>? oplogs;

	SyncCompleteOpLogsRequest({
		this.oplogs,
	});

	factory SyncCompleteOpLogsRequest.fromJson(Map<String, dynamic> map) {
		return SyncCompleteOpLogsRequest( 
			oplogs: map['Oplogs'] != null ? (map['Oplogs'] as List).map((e)=>OperationLogDTO2.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (oplogs != null) {
			map['Oplogs'] = oplogs;
		}
		return map;
	}
}

class SyncOpLogToMasterRequest {
	String? collectionName;
	MongoDBActionTypeEnum actionType;
	String? bsonContent;
	String? filterContent;
	DateTime? createTime;
	String? sourceUrl;
	String? code;
	String? serverID;
	bool isSimple;

	SyncOpLogToMasterRequest({
		this.collectionName,
		this.actionType = MongoDBActionTypeEnum.InsertOne,
		this.bsonContent,
		this.filterContent,
		this.createTime,
		this.sourceUrl,
		this.code,
		this.serverID,
		this.isSimple = false,
	});

	factory SyncOpLogToMasterRequest.fromJson(Map<String, dynamic> map) {
		return SyncOpLogToMasterRequest( 
			collectionName: map['CollectionName'],
			actionType: MongoDBActionTypeEnum.values.firstWhere((e) => e.index == map['ActionType']),
			bsonContent: map['BsonContent'],
			filterContent: map['FilterContent'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			sourceUrl: map['SourceUrl'],
			code: map['Code'],
			serverID: map['ServerID'],
			isSimple: map['IsSimple'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (collectionName != null) {
			map['CollectionName'] = collectionName;
		}
		map['ActionType'] = actionType.index;
		if (bsonContent != null) {
			map['BsonContent'] = bsonContent;
		}
		if (filterContent != null) {
			map['FilterContent'] = filterContent;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (sourceUrl != null) {
			map['SourceUrl'] = sourceUrl;
		}
		if (code != null) {
			map['Code'] = code;
		}
		if (serverID != null) {
			map['ServerID'] = serverID;
		}
		map['IsSimple'] = isSimple;
		return map;
	}
}

class NotificationClientInfo {
	String? clientId;
	String? loginServerUrl;
	List<TokenDTO>? tokens;

	NotificationClientInfo({
		this.clientId,
		this.loginServerUrl,
		this.tokens,
	});

	factory NotificationClientInfo.fromJson(Map<String, dynamic> map) {
		return NotificationClientInfo( 
			clientId: map['ClientId'],
			loginServerUrl: map['LoginServerUrl'],
			tokens: map['Tokens'] != null ? (map['Tokens'] as List).map((e)=>TokenDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (clientId != null) {
			map['ClientId'] = clientId;
		}
		if (loginServerUrl != null) {
			map['LoginServerUrl'] = loginServerUrl;
		}
		if (tokens != null) {
			map['Tokens'] = tokens;
		}
		return map;
	}
}

class ChangeConsultationControllingStateRequest extends TokenRequest{
	String? deviceCode;
	String? userCode;
	bool isControllingParameter;

	ChangeConsultationControllingStateRequest({
		this.deviceCode,
		this.userCode,
		this.isControllingParameter = false,
		String? token,
	}) : super(
			token: token,
		);

	factory ChangeConsultationControllingStateRequest.fromJson(Map<String, dynamic> map) {
		return ChangeConsultationControllingStateRequest( 
			deviceCode: map['DeviceCode'],
			userCode: map['UserCode'],
			isControllingParameter: map['IsControllingParameter'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		if (userCode != null)
			map['UserCode'] = userCode;
		map['IsControllingParameter'] = isControllingParameter;
		return map;
	}
}

enum ConsultationMemeberAcceptStatus {
	Default,
	Accepted,
	Rejected,
}

enum LiveConsultationRoleEnum {
	Expert,
	General,
	OtherParticipant,
	AssistantDoctor,
	Assistant,
}

enum LiveConsultationRoomStatus {
	Default,
	Initiating,
	Cancelled,
	ConnectionTimeout,
	Connected,
	Closed,
}

enum VideoProtocol {
	Rtmp,
	Rtc,
}

class DeviceJoinLiveConsultationResult {
	String? consultationCode;
	String? deviceCode;
	int roomNo;
	int appId;
	String? deviceSign;
	List<LiveConsultationMember>? memberLiveDatas;
	List<InteractiveBoardDataDTO>? interactiveBoardDatas;

	DeviceJoinLiveConsultationResult({
		this.consultationCode,
		this.deviceCode,
		this.roomNo = 0,
		this.appId = 0,
		this.deviceSign,
		this.memberLiveDatas,
		this.interactiveBoardDatas,
	});

	factory DeviceJoinLiveConsultationResult.fromJson(Map<String, dynamic> map) {
		return DeviceJoinLiveConsultationResult( 
			consultationCode: map['ConsultationCode'],
			deviceCode: map['DeviceCode'],
			roomNo: map['RoomNo'],
			appId: map['AppId'],
			deviceSign: map['DeviceSign'],
			memberLiveDatas: map['MemberLiveDatas'] != null ? (map['MemberLiveDatas'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
			interactiveBoardDatas: map['InteractiveBoardDatas'] != null ? (map['InteractiveBoardDatas'] as List).map((e)=>InteractiveBoardDataDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (consultationCode != null) {
			map['ConsultationCode'] = consultationCode;
		}
		if (deviceCode != null) {
			map['DeviceCode'] = deviceCode;
		}
		map['RoomNo'] = roomNo;
		map['AppId'] = appId;
		if (deviceSign != null) {
			map['DeviceSign'] = deviceSign;
		}
		if (memberLiveDatas != null) {
			map['MemberLiveDatas'] = memberLiveDatas;
		}
		if (interactiveBoardDatas != null) {
			map['InteractiveBoardDatas'] = interactiveBoardDatas;
		}
		return map;
	}
}

class LiveConsultationRoomDTO {
	String? consultationCode;
	LiveConsultationMember? initiator;
	List<LiveConsultationMember>? members;
	List<LiveConsultationMember>? devices;
	LiveConsultationRoomStatus status;
	int roomNo;

	LiveConsultationRoomDTO({
		this.consultationCode,
		this.initiator,
		this.members,
		this.devices,
		this.status = LiveConsultationRoomStatus.Default,
		this.roomNo = 0,
	});

	factory LiveConsultationRoomDTO.fromJson(Map<String, dynamic> map) {
		return LiveConsultationRoomDTO( 
			consultationCode: map['ConsultationCode'],
			initiator: map['Initiator'] != null ? LiveConsultationMember.fromJson(map['Initiator']) : null,
			members: map['Members'] != null ? (map['Members'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
			devices: map['Devices'] != null ? (map['Devices'] as List).map((e)=>LiveConsultationMember.fromJson(e as Map<String,dynamic>)).toList() : null,
			status: LiveConsultationRoomStatus.values.firstWhere((e) => e.index == map['Status']),
			roomNo: map['RoomNo'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (consultationCode != null) {
			map['ConsultationCode'] = consultationCode;
		}
		if (initiator != null) {
			map['Initiator'] = initiator;
		}
		if (members != null) {
			map['Members'] = members;
		}
		if (devices != null) {
			map['Devices'] = devices;
		}
		map['Status'] = status.index;
		map['RoomNo'] = roomNo;
		return map;
	}
}

enum BoardTypeEnum {
	ReadOnly,
	Ink,
	Line,
	Erase,
}

class FindConsultationSettingRequest extends TokenRequest{
	String? version;

	FindConsultationSettingRequest({
		this.version,
		String? token,
	}) : super(
			token: token,
		);

	factory FindConsultationSettingRequest.fromJson(Map<String, dynamic> map) {
		return FindConsultationSettingRequest( 
			version: map['Version'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (version != null)
			map['Version'] = version;
		return map;
	}
}

class FindOrganizationBindExpertsRequest extends TokenRequest{

	FindOrganizationBindExpertsRequest({
		String? token,
	}) : super(
			token: token,
		);

	factory FindOrganizationBindExpertsRequest.fromJson(Map<String, dynamic> map) {
		return FindOrganizationBindExpertsRequest( 
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class GetEmergencyOrderRequest extends TokenRequest{
	String? emergencySerialNumber;

	GetEmergencyOrderRequest({
		this.emergencySerialNumber,
		String? token,
	}) : super(
			token: token,
		);

	factory GetEmergencyOrderRequest.fromJson(Map<String, dynamic> map) {
		return GetEmergencyOrderRequest( 
			emergencySerialNumber: map['EmergencySerialNumber'],
			token: map['Token'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (emergencySerialNumber != null)
			map['EmergencySerialNumber'] = emergencySerialNumber;
		return map;
	}
}

enum AgeUnitsEnum {
	Year,
	YearAndMonth,
	MonthAndWeek,
	WeekAndDay,
}

enum AnnounceTypeEnum {
	Broadcast,
	Maintain,
}

enum MessageCategoryEnum {
	Consultation,
	Diagnosis,
	Course,
}

enum UpgradeEnum {
	Windows,
	Android,
	SonoPost,
	Server,
	FISSDK,
}

enum ChannelDescriptionEnum {
	DeskChannel,
	TerminalChannel,
	CameraChannel,
	TerminalTestChannel,
	NoneChannel,
}

enum QueryCMSTemplateStatusTypeEnum {
	UnPublished,
	Published,
}

enum QueryCMSMessageStatusEnum {
	UnRead,
	Read,
}

enum CMSMessageStatusEnum {
	UnRead,
	Read,
}

enum StatisticsPlatformEnum {
	Management,
	CMS,
	Dashboard,
}

enum StatisticsBannerTypeEnum {
	PlatActivity,
	Devices,
	Download,
}

enum QueryStatisticsBannerTypeEnum {
	PlatActivity,
	Devices,
	Download,
}

enum CourseAvailabilityEnum {
	Public,
	Limited,
	Fee,
	Invitation,
	Meeting,
}

enum CustomLabelTypeEnum {
	Group,
	Label,
}

enum LogEventLevel {
	Verbose,
	Debug,
	Information,
	Warning,
	Error,
	Fatal,
}

enum DevicePatchTypeEnum {
	US,
	sonopost,
	FISSDK,
}

enum DiagnosisLabelEnum {
	BIRads1,
	Lipomyoma,
	BIRads2,
	BIRads3,
	BIRads4A,
	BIRads4B,
	BIRads4C,
	BIRads5,
	IntrahepaticHyperechoic,
	HHE,
	CYST,
	PossibleCancer,
	FattyLiver,
	DiffuseLesions,
	Cirrhosis,
	PCLD,
}

enum DiagnosisBreastLabelEnum {
	BIRads1,
	Lipomyoma,
	BIRads2,
	BIRads3,
	BIRads4A,
	BIRads4B,
	BIRads4C,
	BIRads5,
}

enum DiagnosisLiverLabelEnum {
	BIRads1,
	Hyperechoic,
	HHE,
	CYST,
	PossibleCancer,
	FattyLiver,
	DiffuseLesions,
	Cirrhosis,
	PCLD,
}

enum AIThyroidLabelEnum {
	TIRADS0,
	TIRADS2,
	TIRADS3,
	TIRADS4a,
	TIRADS4b,
	TIRADS4c,
	TIRADS5,
	DiffuseDisease,
}

enum DiseaseConclusion {
	NoConclusion,
	Positive,
	Negative,
}

enum ExaminationAvailabilityEnum {
	Public,
	Limited,
}

enum ExamTypeEnum {
	GeneralExam,
	AgentExam,
	Standardized,
}

enum FunctionalityStatusEnum {
	DemoMode,
	Activity,
}

enum GestationalAgeOriginEnum {
	GestationalAge,
	IVF,
	OospermForm,
	BBT,
	LMP,
}

enum GetUserListTypeEnum {
	FullName,
	Phone,
}

enum HeartbeatTypeEnum {
	ClientToken,
	TerminalToken,
	ThirdpartyToken,
	LiveState,
	RTCState,
}

enum IDCardRecognitionStatusEnum {
	placeHolder_0,
	SUCCESSED_All,
	SUCCESSED_PART,
	SUCCESSED_PART_NOADDRESS,
	placeHolder_4,
	placeHolder_5,
	placeHolder_6,
	placeHolder_7,
	placeHolder_8,
	placeHolder_9,
	placeHolder_10,
	SUCCESSED_MODEL,
}

enum ImageTypeEnum {
	placeHolder_0,
	Local,
	Ob,
	WorkSheet,
	Remote,
	DigitalSignature,
	AIDiagnosis,
}

enum LabConvertStateEnum {
	NotStarted,
	Running,
	Finish,
}

enum LabFileTypeEnum {
	Media,
	ZipFile,
}

enum LiveMemberStatusEnum {
	Default,
	Accepted,
	Rejected,
	Joined,
	Left,
}

enum LiveProtocolEnum {
	placeHolder_0,
	RTMP,
	RTC,
}

enum LiveRoomStatus {
	Default,
	Initiating,
	Cancelled,
	ConnectionTimeout,
	Connected,
	Closed,
}

enum LoginProcessorTypeEnum {
	Official,
	Wechat,
	Phone,
	Email,
	placeHolder_4,
	placeHolder_5,
	placeHolder_6,
	placeHolder_7,
	placeHolder_8,
	placeHolder_9,
	placeHolder_10,
	placeHolder_11,
	placeHolder_12,
	placeHolder_13,
	placeHolder_14,
	placeHolder_15,
	placeHolder_16,
	placeHolder_17,
	placeHolder_18,
	placeHolder_19,
	placeHolder_20,
	placeHolder_21,
	placeHolder_22,
	placeHolder_23,
	placeHolder_24,
	placeHolder_25,
	placeHolder_26,
	placeHolder_27,
	placeHolder_28,
	placeHolder_29,
	placeHolder_30,
	placeHolder_31,
	placeHolder_32,
	placeHolder_33,
	placeHolder_34,
	placeHolder_35,
	placeHolder_36,
	placeHolder_37,
	placeHolder_38,
	placeHolder_39,
	placeHolder_40,
	placeHolder_41,
	placeHolder_42,
	placeHolder_43,
	placeHolder_44,
	placeHolder_45,
	placeHolder_46,
	placeHolder_47,
	placeHolder_48,
	placeHolder_49,
	placeHolder_50,
	placeHolder_51,
	placeHolder_52,
	placeHolder_53,
	placeHolder_54,
	placeHolder_55,
	placeHolder_56,
	placeHolder_57,
	placeHolder_58,
	placeHolder_59,
	placeHolder_60,
	placeHolder_61,
	placeHolder_62,
	placeHolder_63,
	placeHolder_64,
	placeHolder_65,
	placeHolder_66,
	placeHolder_67,
	placeHolder_68,
	placeHolder_69,
	placeHolder_70,
	placeHolder_71,
	placeHolder_72,
	placeHolder_73,
	placeHolder_74,
	placeHolder_75,
	placeHolder_76,
	placeHolder_77,
	placeHolder_78,
	placeHolder_79,
	placeHolder_80,
	placeHolder_81,
	placeHolder_82,
	placeHolder_83,
	placeHolder_84,
	placeHolder_85,
	placeHolder_86,
	placeHolder_87,
	placeHolder_88,
	placeHolder_89,
	placeHolder_90,
	placeHolder_91,
	placeHolder_92,
	placeHolder_93,
	placeHolder_94,
	placeHolder_95,
	placeHolder_96,
	placeHolder_97,
	placeHolder_98,
	placeHolder_99,
	placeHolder_100,
	placeHolder_101,
	placeHolder_102,
	placeHolder_103,
	placeHolder_104,
	placeHolder_105,
	placeHolder_106,
	placeHolder_107,
	placeHolder_108,
	placeHolder_109,
	placeHolder_110,
	placeHolder_111,
	placeHolder_112,
	placeHolder_113,
	placeHolder_114,
	placeHolder_115,
	placeHolder_116,
	placeHolder_117,
	placeHolder_118,
	placeHolder_119,
	placeHolder_120,
	placeHolder_121,
	placeHolder_122,
	placeHolder_123,
	placeHolder_124,
	placeHolder_125,
	placeHolder_126,
	placeHolder_127,
	placeHolder_128,
	placeHolder_129,
	placeHolder_130,
	placeHolder_131,
	placeHolder_132,
	placeHolder_133,
	placeHolder_134,
	placeHolder_135,
	placeHolder_136,
	placeHolder_137,
	placeHolder_138,
	placeHolder_139,
	placeHolder_140,
	placeHolder_141,
	placeHolder_142,
	placeHolder_143,
	placeHolder_144,
	placeHolder_145,
	placeHolder_146,
	placeHolder_147,
	placeHolder_148,
	placeHolder_149,
	placeHolder_150,
	placeHolder_151,
	placeHolder_152,
	placeHolder_153,
	placeHolder_154,
	placeHolder_155,
	placeHolder_156,
	placeHolder_157,
	placeHolder_158,
	placeHolder_159,
	placeHolder_160,
	placeHolder_161,
	placeHolder_162,
	placeHolder_163,
	placeHolder_164,
	placeHolder_165,
	placeHolder_166,
	placeHolder_167,
	placeHolder_168,
	placeHolder_169,
	placeHolder_170,
	placeHolder_171,
	placeHolder_172,
	placeHolder_173,
	placeHolder_174,
	placeHolder_175,
	placeHolder_176,
	placeHolder_177,
	placeHolder_178,
	placeHolder_179,
	placeHolder_180,
	placeHolder_181,
	placeHolder_182,
	placeHolder_183,
	placeHolder_184,
	placeHolder_185,
	placeHolder_186,
	placeHolder_187,
	placeHolder_188,
	placeHolder_189,
	placeHolder_190,
	placeHolder_191,
	placeHolder_192,
	placeHolder_193,
	placeHolder_194,
	placeHolder_195,
	placeHolder_196,
	placeHolder_197,
	placeHolder_198,
	placeHolder_199,
	placeHolder_200,
	placeHolder_201,
	placeHolder_202,
	placeHolder_203,
	placeHolder_204,
	placeHolder_205,
	placeHolder_206,
	placeHolder_207,
	placeHolder_208,
	placeHolder_209,
	placeHolder_210,
	placeHolder_211,
	placeHolder_212,
	placeHolder_213,
	placeHolder_214,
	placeHolder_215,
	placeHolder_216,
	placeHolder_217,
	placeHolder_218,
	placeHolder_219,
	placeHolder_220,
	placeHolder_221,
	placeHolder_222,
	placeHolder_223,
	placeHolder_224,
	placeHolder_225,
	placeHolder_226,
	placeHolder_227,
	placeHolder_228,
	placeHolder_229,
	placeHolder_230,
	placeHolder_231,
	placeHolder_232,
	placeHolder_233,
	placeHolder_234,
	placeHolder_235,
	placeHolder_236,
	placeHolder_237,
	placeHolder_238,
	placeHolder_239,
	placeHolder_240,
	placeHolder_241,
	placeHolder_242,
	placeHolder_243,
	placeHolder_244,
	placeHolder_245,
	placeHolder_246,
	placeHolder_247,
	placeHolder_248,
	placeHolder_249,
	placeHolder_250,
	placeHolder_251,
	placeHolder_252,
	placeHolder_253,
	placeHolder_254,
	placeHolder_255,
	placeHolder_256,
	placeHolder_257,
	placeHolder_258,
	placeHolder_259,
	placeHolder_260,
	placeHolder_261,
	placeHolder_262,
	placeHolder_263,
	placeHolder_264,
	placeHolder_265,
	placeHolder_266,
	placeHolder_267,
	placeHolder_268,
	placeHolder_269,
	placeHolder_270,
	placeHolder_271,
	placeHolder_272,
	placeHolder_273,
	placeHolder_274,
	placeHolder_275,
	placeHolder_276,
	placeHolder_277,
	placeHolder_278,
	placeHolder_279,
	placeHolder_280,
	placeHolder_281,
	placeHolder_282,
	placeHolder_283,
	placeHolder_284,
	placeHolder_285,
	placeHolder_286,
	placeHolder_287,
	placeHolder_288,
	placeHolder_289,
	placeHolder_290,
	placeHolder_291,
	placeHolder_292,
	placeHolder_293,
	placeHolder_294,
	placeHolder_295,
	placeHolder_296,
	placeHolder_297,
	placeHolder_298,
	placeHolder_299,
	placeHolder_300,
	placeHolder_301,
	placeHolder_302,
	placeHolder_303,
	placeHolder_304,
	placeHolder_305,
	placeHolder_306,
	placeHolder_307,
	placeHolder_308,
	placeHolder_309,
	placeHolder_310,
	placeHolder_311,
	placeHolder_312,
	placeHolder_313,
	placeHolder_314,
	placeHolder_315,
	placeHolder_316,
	placeHolder_317,
	placeHolder_318,
	placeHolder_319,
	placeHolder_320,
	placeHolder_321,
	placeHolder_322,
	placeHolder_323,
	placeHolder_324,
	placeHolder_325,
	placeHolder_326,
	placeHolder_327,
	placeHolder_328,
	placeHolder_329,
	placeHolder_330,
	placeHolder_331,
	placeHolder_332,
	placeHolder_333,
	placeHolder_334,
	placeHolder_335,
	placeHolder_336,
	placeHolder_337,
	placeHolder_338,
	placeHolder_339,
	placeHolder_340,
	placeHolder_341,
	placeHolder_342,
	placeHolder_343,
	placeHolder_344,
	placeHolder_345,
	placeHolder_346,
	placeHolder_347,
	placeHolder_348,
	placeHolder_349,
	placeHolder_350,
	placeHolder_351,
	placeHolder_352,
	placeHolder_353,
	placeHolder_354,
	placeHolder_355,
	placeHolder_356,
	placeHolder_357,
	placeHolder_358,
	placeHolder_359,
	placeHolder_360,
	placeHolder_361,
	placeHolder_362,
	placeHolder_363,
	placeHolder_364,
	placeHolder_365,
	placeHolder_366,
	placeHolder_367,
	placeHolder_368,
	placeHolder_369,
	placeHolder_370,
	placeHolder_371,
	placeHolder_372,
	placeHolder_373,
	placeHolder_374,
	placeHolder_375,
	placeHolder_376,
	placeHolder_377,
	placeHolder_378,
	placeHolder_379,
	placeHolder_380,
	placeHolder_381,
	placeHolder_382,
	placeHolder_383,
	placeHolder_384,
	placeHolder_385,
	placeHolder_386,
	placeHolder_387,
	placeHolder_388,
	placeHolder_389,
	placeHolder_390,
	placeHolder_391,
	placeHolder_392,
	placeHolder_393,
	placeHolder_394,
	placeHolder_395,
	placeHolder_396,
	placeHolder_397,
	placeHolder_398,
	placeHolder_399,
	placeHolder_400,
	placeHolder_401,
	placeHolder_402,
	placeHolder_403,
	placeHolder_404,
	placeHolder_405,
	placeHolder_406,
	placeHolder_407,
	placeHolder_408,
	placeHolder_409,
	placeHolder_410,
	placeHolder_411,
	placeHolder_412,
	placeHolder_413,
	placeHolder_414,
	placeHolder_415,
	placeHolder_416,
	placeHolder_417,
	placeHolder_418,
	placeHolder_419,
	placeHolder_420,
	placeHolder_421,
	placeHolder_422,
	placeHolder_423,
	placeHolder_424,
	placeHolder_425,
	placeHolder_426,
	placeHolder_427,
	placeHolder_428,
	placeHolder_429,
	placeHolder_430,
	placeHolder_431,
	placeHolder_432,
	placeHolder_433,
	placeHolder_434,
	placeHolder_435,
	placeHolder_436,
	placeHolder_437,
	placeHolder_438,
	placeHolder_439,
	placeHolder_440,
	placeHolder_441,
	placeHolder_442,
	placeHolder_443,
	placeHolder_444,
	placeHolder_445,
	placeHolder_446,
	placeHolder_447,
	placeHolder_448,
	placeHolder_449,
	placeHolder_450,
	placeHolder_451,
	placeHolder_452,
	placeHolder_453,
	placeHolder_454,
	placeHolder_455,
	placeHolder_456,
	placeHolder_457,
	placeHolder_458,
	placeHolder_459,
	placeHolder_460,
	placeHolder_461,
	placeHolder_462,
	placeHolder_463,
	placeHolder_464,
	placeHolder_465,
	placeHolder_466,
	placeHolder_467,
	placeHolder_468,
	placeHolder_469,
	placeHolder_470,
	placeHolder_471,
	placeHolder_472,
	placeHolder_473,
	placeHolder_474,
	placeHolder_475,
	placeHolder_476,
	placeHolder_477,
	placeHolder_478,
	placeHolder_479,
	placeHolder_480,
	placeHolder_481,
	placeHolder_482,
	placeHolder_483,
	placeHolder_484,
	placeHolder_485,
	placeHolder_486,
	placeHolder_487,
	placeHolder_488,
	placeHolder_489,
	placeHolder_490,
	placeHolder_491,
	placeHolder_492,
	placeHolder_493,
	placeHolder_494,
	placeHolder_495,
	placeHolder_496,
	placeHolder_497,
	placeHolder_498,
	placeHolder_499,
	placeHolder_500,
	placeHolder_501,
	placeHolder_502,
	placeHolder_503,
	placeHolder_504,
	placeHolder_505,
	placeHolder_506,
	placeHolder_507,
	placeHolder_508,
	placeHolder_509,
	placeHolder_510,
	placeHolder_511,
	placeHolder_512,
	placeHolder_513,
	placeHolder_514,
	placeHolder_515,
	placeHolder_516,
	placeHolder_517,
	placeHolder_518,
	placeHolder_519,
	placeHolder_520,
	placeHolder_521,
	placeHolder_522,
	placeHolder_523,
	placeHolder_524,
	placeHolder_525,
	placeHolder_526,
	placeHolder_527,
	placeHolder_528,
	placeHolder_529,
	placeHolder_530,
	placeHolder_531,
	placeHolder_532,
	placeHolder_533,
	placeHolder_534,
	placeHolder_535,
	placeHolder_536,
	placeHolder_537,
	placeHolder_538,
	placeHolder_539,
	placeHolder_540,
	placeHolder_541,
	placeHolder_542,
	placeHolder_543,
	placeHolder_544,
	placeHolder_545,
	placeHolder_546,
	placeHolder_547,
	placeHolder_548,
	placeHolder_549,
	placeHolder_550,
	placeHolder_551,
	placeHolder_552,
	placeHolder_553,
	placeHolder_554,
	placeHolder_555,
	placeHolder_556,
	placeHolder_557,
	placeHolder_558,
	placeHolder_559,
	placeHolder_560,
	placeHolder_561,
	placeHolder_562,
	placeHolder_563,
	placeHolder_564,
	placeHolder_565,
	placeHolder_566,
	placeHolder_567,
	placeHolder_568,
	placeHolder_569,
	placeHolder_570,
	placeHolder_571,
	placeHolder_572,
	placeHolder_573,
	placeHolder_574,
	placeHolder_575,
	placeHolder_576,
	placeHolder_577,
	placeHolder_578,
	placeHolder_579,
	placeHolder_580,
	placeHolder_581,
	placeHolder_582,
	placeHolder_583,
	placeHolder_584,
	placeHolder_585,
	placeHolder_586,
	placeHolder_587,
	placeHolder_588,
	placeHolder_589,
	placeHolder_590,
	placeHolder_591,
	placeHolder_592,
	placeHolder_593,
	placeHolder_594,
	placeHolder_595,
	placeHolder_596,
	placeHolder_597,
	placeHolder_598,
	placeHolder_599,
	placeHolder_600,
	placeHolder_601,
	placeHolder_602,
	placeHolder_603,
	placeHolder_604,
	placeHolder_605,
	placeHolder_606,
	placeHolder_607,
	placeHolder_608,
	placeHolder_609,
	placeHolder_610,
	placeHolder_611,
	placeHolder_612,
	placeHolder_613,
	placeHolder_614,
	placeHolder_615,
	placeHolder_616,
	placeHolder_617,
	placeHolder_618,
	placeHolder_619,
	placeHolder_620,
	placeHolder_621,
	placeHolder_622,
	placeHolder_623,
	placeHolder_624,
	placeHolder_625,
	placeHolder_626,
	placeHolder_627,
	placeHolder_628,
	placeHolder_629,
	placeHolder_630,
	placeHolder_631,
	placeHolder_632,
	placeHolder_633,
	placeHolder_634,
	placeHolder_635,
	placeHolder_636,
	placeHolder_637,
	placeHolder_638,
	placeHolder_639,
	placeHolder_640,
	placeHolder_641,
	placeHolder_642,
	placeHolder_643,
	placeHolder_644,
	placeHolder_645,
	placeHolder_646,
	placeHolder_647,
	placeHolder_648,
	placeHolder_649,
	placeHolder_650,
	placeHolder_651,
	placeHolder_652,
	placeHolder_653,
	placeHolder_654,
	placeHolder_655,
	placeHolder_656,
	placeHolder_657,
	placeHolder_658,
	placeHolder_659,
	placeHolder_660,
	placeHolder_661,
	placeHolder_662,
	placeHolder_663,
	placeHolder_664,
	placeHolder_665,
	placeHolder_666,
	placeHolder_667,
	placeHolder_668,
	placeHolder_669,
	placeHolder_670,
	placeHolder_671,
	placeHolder_672,
	placeHolder_673,
	placeHolder_674,
	placeHolder_675,
	placeHolder_676,
	placeHolder_677,
	placeHolder_678,
	placeHolder_679,
	placeHolder_680,
	placeHolder_681,
	placeHolder_682,
	placeHolder_683,
	placeHolder_684,
	placeHolder_685,
	placeHolder_686,
	placeHolder_687,
	placeHolder_688,
	placeHolder_689,
	placeHolder_690,
	placeHolder_691,
	placeHolder_692,
	placeHolder_693,
	placeHolder_694,
	placeHolder_695,
	placeHolder_696,
	placeHolder_697,
	placeHolder_698,
	placeHolder_699,
	placeHolder_700,
	placeHolder_701,
	placeHolder_702,
	placeHolder_703,
	placeHolder_704,
	placeHolder_705,
	placeHolder_706,
	placeHolder_707,
	placeHolder_708,
	placeHolder_709,
	placeHolder_710,
	placeHolder_711,
	placeHolder_712,
	placeHolder_713,
	placeHolder_714,
	placeHolder_715,
	placeHolder_716,
	placeHolder_717,
	placeHolder_718,
	placeHolder_719,
	placeHolder_720,
	placeHolder_721,
	placeHolder_722,
	placeHolder_723,
	placeHolder_724,
	placeHolder_725,
	placeHolder_726,
	placeHolder_727,
	placeHolder_728,
	placeHolder_729,
	placeHolder_730,
	placeHolder_731,
	placeHolder_732,
	placeHolder_733,
	placeHolder_734,
	placeHolder_735,
	placeHolder_736,
	placeHolder_737,
	placeHolder_738,
	placeHolder_739,
	placeHolder_740,
	placeHolder_741,
	placeHolder_742,
	placeHolder_743,
	placeHolder_744,
	placeHolder_745,
	placeHolder_746,
	placeHolder_747,
	placeHolder_748,
	placeHolder_749,
	placeHolder_750,
	placeHolder_751,
	placeHolder_752,
	placeHolder_753,
	placeHolder_754,
	placeHolder_755,
	placeHolder_756,
	placeHolder_757,
	placeHolder_758,
	placeHolder_759,
	placeHolder_760,
	placeHolder_761,
	placeHolder_762,
	placeHolder_763,
	placeHolder_764,
	placeHolder_765,
	placeHolder_766,
	placeHolder_767,
	placeHolder_768,
	placeHolder_769,
	placeHolder_770,
	placeHolder_771,
	placeHolder_772,
	placeHolder_773,
	placeHolder_774,
	placeHolder_775,
	placeHolder_776,
	placeHolder_777,
	placeHolder_778,
	placeHolder_779,
	placeHolder_780,
	placeHolder_781,
	placeHolder_782,
	placeHolder_783,
	placeHolder_784,
	placeHolder_785,
	placeHolder_786,
	placeHolder_787,
	placeHolder_788,
	placeHolder_789,
	placeHolder_790,
	placeHolder_791,
	placeHolder_792,
	placeHolder_793,
	placeHolder_794,
	placeHolder_795,
	placeHolder_796,
	placeHolder_797,
	placeHolder_798,
	placeHolder_799,
	placeHolder_800,
	placeHolder_801,
	placeHolder_802,
	placeHolder_803,
	placeHolder_804,
	placeHolder_805,
	placeHolder_806,
	placeHolder_807,
	placeHolder_808,
	placeHolder_809,
	placeHolder_810,
	placeHolder_811,
	placeHolder_812,
	placeHolder_813,
	placeHolder_814,
	placeHolder_815,
	placeHolder_816,
	placeHolder_817,
	placeHolder_818,
	placeHolder_819,
	placeHolder_820,
	placeHolder_821,
	placeHolder_822,
	placeHolder_823,
	placeHolder_824,
	placeHolder_825,
	placeHolder_826,
	placeHolder_827,
	placeHolder_828,
	placeHolder_829,
	placeHolder_830,
	placeHolder_831,
	placeHolder_832,
	placeHolder_833,
	placeHolder_834,
	placeHolder_835,
	placeHolder_836,
	placeHolder_837,
	placeHolder_838,
	placeHolder_839,
	placeHolder_840,
	placeHolder_841,
	placeHolder_842,
	placeHolder_843,
	placeHolder_844,
	placeHolder_845,
	placeHolder_846,
	placeHolder_847,
	placeHolder_848,
	placeHolder_849,
	placeHolder_850,
	placeHolder_851,
	placeHolder_852,
	placeHolder_853,
	placeHolder_854,
	placeHolder_855,
	placeHolder_856,
	placeHolder_857,
	placeHolder_858,
	placeHolder_859,
	placeHolder_860,
	placeHolder_861,
	placeHolder_862,
	placeHolder_863,
	placeHolder_864,
	placeHolder_865,
	placeHolder_866,
	placeHolder_867,
	placeHolder_868,
	placeHolder_869,
	placeHolder_870,
	placeHolder_871,
	placeHolder_872,
	placeHolder_873,
	placeHolder_874,
	placeHolder_875,
	placeHolder_876,
	placeHolder_877,
	placeHolder_878,
	placeHolder_879,
	placeHolder_880,
	placeHolder_881,
	placeHolder_882,
	placeHolder_883,
	placeHolder_884,
	placeHolder_885,
	placeHolder_886,
	placeHolder_887,
	placeHolder_888,
	placeHolder_889,
	placeHolder_890,
	placeHolder_891,
	placeHolder_892,
	placeHolder_893,
	placeHolder_894,
	placeHolder_895,
	placeHolder_896,
	placeHolder_897,
	placeHolder_898,
	placeHolder_899,
	placeHolder_900,
	placeHolder_901,
	placeHolder_902,
	placeHolder_903,
	placeHolder_904,
	placeHolder_905,
	placeHolder_906,
	placeHolder_907,
	placeHolder_908,
	placeHolder_909,
	placeHolder_910,
	placeHolder_911,
	placeHolder_912,
	placeHolder_913,
	placeHolder_914,
	placeHolder_915,
	placeHolder_916,
	placeHolder_917,
	placeHolder_918,
	placeHolder_919,
	placeHolder_920,
	placeHolder_921,
	placeHolder_922,
	placeHolder_923,
	placeHolder_924,
	placeHolder_925,
	placeHolder_926,
	placeHolder_927,
	placeHolder_928,
	placeHolder_929,
	placeHolder_930,
	placeHolder_931,
	placeHolder_932,
	placeHolder_933,
	placeHolder_934,
	placeHolder_935,
	placeHolder_936,
	placeHolder_937,
	placeHolder_938,
	placeHolder_939,
	placeHolder_940,
	placeHolder_941,
	placeHolder_942,
	placeHolder_943,
	placeHolder_944,
	placeHolder_945,
	placeHolder_946,
	placeHolder_947,
	placeHolder_948,
	placeHolder_949,
	placeHolder_950,
	placeHolder_951,
	placeHolder_952,
	placeHolder_953,
	placeHolder_954,
	placeHolder_955,
	placeHolder_956,
	placeHolder_957,
	placeHolder_958,
	placeHolder_959,
	placeHolder_960,
	placeHolder_961,
	placeHolder_962,
	placeHolder_963,
	placeHolder_964,
	placeHolder_965,
	placeHolder_966,
	placeHolder_967,
	placeHolder_968,
	placeHolder_969,
	placeHolder_970,
	placeHolder_971,
	placeHolder_972,
	placeHolder_973,
	placeHolder_974,
	placeHolder_975,
	placeHolder_976,
	placeHolder_977,
	placeHolder_978,
	placeHolder_979,
	placeHolder_980,
	placeHolder_981,
	placeHolder_982,
	placeHolder_983,
	placeHolder_984,
	placeHolder_985,
	placeHolder_986,
	placeHolder_987,
	placeHolder_988,
	placeHolder_989,
	placeHolder_990,
	placeHolder_991,
	placeHolder_992,
	placeHolder_993,
	placeHolder_994,
	placeHolder_995,
	placeHolder_996,
	placeHolder_997,
	placeHolder_998,
	Unregistered,
}

enum MeasureImageRecordTypeEnum {
	ExportExcel,
	ShareImages,
}

enum AnimalGenderEnum {
	AnimalInfoNotFilled,
	AnimalInfoMale,
	AnimalInfoFemale,
}

enum ProjectPushTypeEnum {
	Default,
	YinChuan,
}

enum RegionGradeEnum {
	Country,
	Province,
	City,
	Area,
}

enum RemedicalApparatusTypeEnum {
	BreastOuterUpper,
	BreastInnerUpper,
	BreastOuterLower,
	BreastInnerLower,
	Lobe,
	LobeOfUnder,
	LobeOfInter,
	Thyroid,
	Abdomen,
}

enum RemedicalImageLocationTypeEnum {
	BreastImageLocation,
	LiverImageLocation,
	ThyroidImageLocation,
	PositionImageLocation,
}

enum RemedicalImagePositionTypeEnum {
	None,
	Left,
	Right,
	Middle,
}

enum ReportTemplateQueryTypeEnum {
	All,
	Personal,
	Organization,
}

enum TemplateQueryTypeEnum {
	ReportTemplate,
	Thesaurus,
}

enum SyncTypeEnum {
	Initiate,
	Accept,
	Reject,
	CancelInitiate,
	HeartRateJoin,
	NetworkErr,
	HeartRateLeave,
	Leave,
	Close,
	ChangeMuteState,
	ChangeVideoOpenState,
	InviteIn,
	CancelInviteIn,
	AcceptIn,
	RejectIn,
	ChangeConsultationStatus,
	Agree,
	Notification,
	EmergencyAccept,
	ChangeControllingParameter,
	SendInteractiveBoardData,
	ChangeRoom,
	SaveViewer,
	DeleteViewer,
	DeviceAcceptIn,
	SyncControllingParameter,
	ApplyRemoteConnect,
	AcceptRemoteConnect,
	RejectRemoteConnect,
	ApplyDisConnect,
	AcceptDisConnect,
	DeviceDisconnect,
	DeviceRemoteConnectHeartRate,
	UserRemoteConnectHeartRate,
	DeviceRemoteConnectOutline,
	UserRemoteConnectOutline,
	ConsultionRemoteConnect,
	ConsultionDisConnect,
	RestartDevice,
	AcceptDevice,
	SetShareInfo,
	LeaveDevice,
	RemoteMaintainData,
	ProbeApplication,
	DeviceReStartPusing,
	CloseDeviceLive,
	UploadData,
}

enum SyncServiceEnum {
	Live,
	LiveConsultation,
	Notification,
	ScanLogin,
	Device,
	RemoteConnect,
}

enum TemplateCategoryEnum {
	ReportTemplate,
	ThesaurusTemplate,
}

enum VideoPermissionsEnum {
	Public,
	Private,
	LinkToCourse,
	Fee,
	AdminAvailable,
	Standardized,
}

enum VideoImportanceEnum {
	Normal,
	Importance,
}

enum VideoLabelEnum {
	NoRecording,
	NoFastForward,
	TeachingDocument,
}

enum AccountType2 {
	User,
	Device,
}

enum BookingTypeEnum2 {
	Personal,
	Group,
}

enum BookingStatusEnum2 {
	UnSubmitted,
	Booked,
	Canceled,
}

enum DataPullingTypeEnum {
	Simple,
}

enum LogEventLevel2 {
	Verbose,
	Debug,
	Information,
	Warning,
	Error,
	Fatal,
}

enum IDCardRecognitionStatusEnum2 {
	placeHolder_0,
	SUCCESSED_All,
	SUCCESSED_PART,
	SUCCESSED_PART_NOADDRESS,
	placeHolder_4,
	placeHolder_5,
	placeHolder_6,
	placeHolder_7,
	placeHolder_8,
	placeHolder_9,
	placeHolder_10,
	SUCCESSED_MODEL,
}

enum LoginProcessorTypeEnum2 {
	Official,
	Wechat,
	Phone,
	Email,
	placeHolder_4,
	placeHolder_5,
	placeHolder_6,
	placeHolder_7,
	placeHolder_8,
	placeHolder_9,
	placeHolder_10,
	placeHolder_11,
	placeHolder_12,
	placeHolder_13,
	placeHolder_14,
	placeHolder_15,
	placeHolder_16,
	placeHolder_17,
	placeHolder_18,
	placeHolder_19,
	placeHolder_20,
	placeHolder_21,
	placeHolder_22,
	placeHolder_23,
	placeHolder_24,
	placeHolder_25,
	placeHolder_26,
	placeHolder_27,
	placeHolder_28,
	placeHolder_29,
	placeHolder_30,
	placeHolder_31,
	placeHolder_32,
	placeHolder_33,
	placeHolder_34,
	placeHolder_35,
	placeHolder_36,
	placeHolder_37,
	placeHolder_38,
	placeHolder_39,
	placeHolder_40,
	placeHolder_41,
	placeHolder_42,
	placeHolder_43,
	placeHolder_44,
	placeHolder_45,
	placeHolder_46,
	placeHolder_47,
	placeHolder_48,
	placeHolder_49,
	placeHolder_50,
	placeHolder_51,
	placeHolder_52,
	placeHolder_53,
	placeHolder_54,
	placeHolder_55,
	placeHolder_56,
	placeHolder_57,
	placeHolder_58,
	placeHolder_59,
	placeHolder_60,
	placeHolder_61,
	placeHolder_62,
	placeHolder_63,
	placeHolder_64,
	placeHolder_65,
	placeHolder_66,
	placeHolder_67,
	placeHolder_68,
	placeHolder_69,
	placeHolder_70,
	placeHolder_71,
	placeHolder_72,
	placeHolder_73,
	placeHolder_74,
	placeHolder_75,
	placeHolder_76,
	placeHolder_77,
	placeHolder_78,
	placeHolder_79,
	placeHolder_80,
	placeHolder_81,
	placeHolder_82,
	placeHolder_83,
	placeHolder_84,
	placeHolder_85,
	placeHolder_86,
	placeHolder_87,
	placeHolder_88,
	placeHolder_89,
	placeHolder_90,
	placeHolder_91,
	placeHolder_92,
	placeHolder_93,
	placeHolder_94,
	placeHolder_95,
	placeHolder_96,
	placeHolder_97,
	placeHolder_98,
	placeHolder_99,
	placeHolder_100,
	placeHolder_101,
	placeHolder_102,
	placeHolder_103,
	placeHolder_104,
	placeHolder_105,
	placeHolder_106,
	placeHolder_107,
	placeHolder_108,
	placeHolder_109,
	placeHolder_110,
	placeHolder_111,
	placeHolder_112,
	placeHolder_113,
	placeHolder_114,
	placeHolder_115,
	placeHolder_116,
	placeHolder_117,
	placeHolder_118,
	placeHolder_119,
	placeHolder_120,
	placeHolder_121,
	placeHolder_122,
	placeHolder_123,
	placeHolder_124,
	placeHolder_125,
	placeHolder_126,
	placeHolder_127,
	placeHolder_128,
	placeHolder_129,
	placeHolder_130,
	placeHolder_131,
	placeHolder_132,
	placeHolder_133,
	placeHolder_134,
	placeHolder_135,
	placeHolder_136,
	placeHolder_137,
	placeHolder_138,
	placeHolder_139,
	placeHolder_140,
	placeHolder_141,
	placeHolder_142,
	placeHolder_143,
	placeHolder_144,
	placeHolder_145,
	placeHolder_146,
	placeHolder_147,
	placeHolder_148,
	placeHolder_149,
	placeHolder_150,
	placeHolder_151,
	placeHolder_152,
	placeHolder_153,
	placeHolder_154,
	placeHolder_155,
	placeHolder_156,
	placeHolder_157,
	placeHolder_158,
	placeHolder_159,
	placeHolder_160,
	placeHolder_161,
	placeHolder_162,
	placeHolder_163,
	placeHolder_164,
	placeHolder_165,
	placeHolder_166,
	placeHolder_167,
	placeHolder_168,
	placeHolder_169,
	placeHolder_170,
	placeHolder_171,
	placeHolder_172,
	placeHolder_173,
	placeHolder_174,
	placeHolder_175,
	placeHolder_176,
	placeHolder_177,
	placeHolder_178,
	placeHolder_179,
	placeHolder_180,
	placeHolder_181,
	placeHolder_182,
	placeHolder_183,
	placeHolder_184,
	placeHolder_185,
	placeHolder_186,
	placeHolder_187,
	placeHolder_188,
	placeHolder_189,
	placeHolder_190,
	placeHolder_191,
	placeHolder_192,
	placeHolder_193,
	placeHolder_194,
	placeHolder_195,
	placeHolder_196,
	placeHolder_197,
	placeHolder_198,
	placeHolder_199,
	placeHolder_200,
	placeHolder_201,
	placeHolder_202,
	placeHolder_203,
	placeHolder_204,
	placeHolder_205,
	placeHolder_206,
	placeHolder_207,
	placeHolder_208,
	placeHolder_209,
	placeHolder_210,
	placeHolder_211,
	placeHolder_212,
	placeHolder_213,
	placeHolder_214,
	placeHolder_215,
	placeHolder_216,
	placeHolder_217,
	placeHolder_218,
	placeHolder_219,
	placeHolder_220,
	placeHolder_221,
	placeHolder_222,
	placeHolder_223,
	placeHolder_224,
	placeHolder_225,
	placeHolder_226,
	placeHolder_227,
	placeHolder_228,
	placeHolder_229,
	placeHolder_230,
	placeHolder_231,
	placeHolder_232,
	placeHolder_233,
	placeHolder_234,
	placeHolder_235,
	placeHolder_236,
	placeHolder_237,
	placeHolder_238,
	placeHolder_239,
	placeHolder_240,
	placeHolder_241,
	placeHolder_242,
	placeHolder_243,
	placeHolder_244,
	placeHolder_245,
	placeHolder_246,
	placeHolder_247,
	placeHolder_248,
	placeHolder_249,
	placeHolder_250,
	placeHolder_251,
	placeHolder_252,
	placeHolder_253,
	placeHolder_254,
	placeHolder_255,
	placeHolder_256,
	placeHolder_257,
	placeHolder_258,
	placeHolder_259,
	placeHolder_260,
	placeHolder_261,
	placeHolder_262,
	placeHolder_263,
	placeHolder_264,
	placeHolder_265,
	placeHolder_266,
	placeHolder_267,
	placeHolder_268,
	placeHolder_269,
	placeHolder_270,
	placeHolder_271,
	placeHolder_272,
	placeHolder_273,
	placeHolder_274,
	placeHolder_275,
	placeHolder_276,
	placeHolder_277,
	placeHolder_278,
	placeHolder_279,
	placeHolder_280,
	placeHolder_281,
	placeHolder_282,
	placeHolder_283,
	placeHolder_284,
	placeHolder_285,
	placeHolder_286,
	placeHolder_287,
	placeHolder_288,
	placeHolder_289,
	placeHolder_290,
	placeHolder_291,
	placeHolder_292,
	placeHolder_293,
	placeHolder_294,
	placeHolder_295,
	placeHolder_296,
	placeHolder_297,
	placeHolder_298,
	placeHolder_299,
	placeHolder_300,
	placeHolder_301,
	placeHolder_302,
	placeHolder_303,
	placeHolder_304,
	placeHolder_305,
	placeHolder_306,
	placeHolder_307,
	placeHolder_308,
	placeHolder_309,
	placeHolder_310,
	placeHolder_311,
	placeHolder_312,
	placeHolder_313,
	placeHolder_314,
	placeHolder_315,
	placeHolder_316,
	placeHolder_317,
	placeHolder_318,
	placeHolder_319,
	placeHolder_320,
	placeHolder_321,
	placeHolder_322,
	placeHolder_323,
	placeHolder_324,
	placeHolder_325,
	placeHolder_326,
	placeHolder_327,
	placeHolder_328,
	placeHolder_329,
	placeHolder_330,
	placeHolder_331,
	placeHolder_332,
	placeHolder_333,
	placeHolder_334,
	placeHolder_335,
	placeHolder_336,
	placeHolder_337,
	placeHolder_338,
	placeHolder_339,
	placeHolder_340,
	placeHolder_341,
	placeHolder_342,
	placeHolder_343,
	placeHolder_344,
	placeHolder_345,
	placeHolder_346,
	placeHolder_347,
	placeHolder_348,
	placeHolder_349,
	placeHolder_350,
	placeHolder_351,
	placeHolder_352,
	placeHolder_353,
	placeHolder_354,
	placeHolder_355,
	placeHolder_356,
	placeHolder_357,
	placeHolder_358,
	placeHolder_359,
	placeHolder_360,
	placeHolder_361,
	placeHolder_362,
	placeHolder_363,
	placeHolder_364,
	placeHolder_365,
	placeHolder_366,
	placeHolder_367,
	placeHolder_368,
	placeHolder_369,
	placeHolder_370,
	placeHolder_371,
	placeHolder_372,
	placeHolder_373,
	placeHolder_374,
	placeHolder_375,
	placeHolder_376,
	placeHolder_377,
	placeHolder_378,
	placeHolder_379,
	placeHolder_380,
	placeHolder_381,
	placeHolder_382,
	placeHolder_383,
	placeHolder_384,
	placeHolder_385,
	placeHolder_386,
	placeHolder_387,
	placeHolder_388,
	placeHolder_389,
	placeHolder_390,
	placeHolder_391,
	placeHolder_392,
	placeHolder_393,
	placeHolder_394,
	placeHolder_395,
	placeHolder_396,
	placeHolder_397,
	placeHolder_398,
	placeHolder_399,
	placeHolder_400,
	placeHolder_401,
	placeHolder_402,
	placeHolder_403,
	placeHolder_404,
	placeHolder_405,
	placeHolder_406,
	placeHolder_407,
	placeHolder_408,
	placeHolder_409,
	placeHolder_410,
	placeHolder_411,
	placeHolder_412,
	placeHolder_413,
	placeHolder_414,
	placeHolder_415,
	placeHolder_416,
	placeHolder_417,
	placeHolder_418,
	placeHolder_419,
	placeHolder_420,
	placeHolder_421,
	placeHolder_422,
	placeHolder_423,
	placeHolder_424,
	placeHolder_425,
	placeHolder_426,
	placeHolder_427,
	placeHolder_428,
	placeHolder_429,
	placeHolder_430,
	placeHolder_431,
	placeHolder_432,
	placeHolder_433,
	placeHolder_434,
	placeHolder_435,
	placeHolder_436,
	placeHolder_437,
	placeHolder_438,
	placeHolder_439,
	placeHolder_440,
	placeHolder_441,
	placeHolder_442,
	placeHolder_443,
	placeHolder_444,
	placeHolder_445,
	placeHolder_446,
	placeHolder_447,
	placeHolder_448,
	placeHolder_449,
	placeHolder_450,
	placeHolder_451,
	placeHolder_452,
	placeHolder_453,
	placeHolder_454,
	placeHolder_455,
	placeHolder_456,
	placeHolder_457,
	placeHolder_458,
	placeHolder_459,
	placeHolder_460,
	placeHolder_461,
	placeHolder_462,
	placeHolder_463,
	placeHolder_464,
	placeHolder_465,
	placeHolder_466,
	placeHolder_467,
	placeHolder_468,
	placeHolder_469,
	placeHolder_470,
	placeHolder_471,
	placeHolder_472,
	placeHolder_473,
	placeHolder_474,
	placeHolder_475,
	placeHolder_476,
	placeHolder_477,
	placeHolder_478,
	placeHolder_479,
	placeHolder_480,
	placeHolder_481,
	placeHolder_482,
	placeHolder_483,
	placeHolder_484,
	placeHolder_485,
	placeHolder_486,
	placeHolder_487,
	placeHolder_488,
	placeHolder_489,
	placeHolder_490,
	placeHolder_491,
	placeHolder_492,
	placeHolder_493,
	placeHolder_494,
	placeHolder_495,
	placeHolder_496,
	placeHolder_497,
	placeHolder_498,
	placeHolder_499,
	placeHolder_500,
	placeHolder_501,
	placeHolder_502,
	placeHolder_503,
	placeHolder_504,
	placeHolder_505,
	placeHolder_506,
	placeHolder_507,
	placeHolder_508,
	placeHolder_509,
	placeHolder_510,
	placeHolder_511,
	placeHolder_512,
	placeHolder_513,
	placeHolder_514,
	placeHolder_515,
	placeHolder_516,
	placeHolder_517,
	placeHolder_518,
	placeHolder_519,
	placeHolder_520,
	placeHolder_521,
	placeHolder_522,
	placeHolder_523,
	placeHolder_524,
	placeHolder_525,
	placeHolder_526,
	placeHolder_527,
	placeHolder_528,
	placeHolder_529,
	placeHolder_530,
	placeHolder_531,
	placeHolder_532,
	placeHolder_533,
	placeHolder_534,
	placeHolder_535,
	placeHolder_536,
	placeHolder_537,
	placeHolder_538,
	placeHolder_539,
	placeHolder_540,
	placeHolder_541,
	placeHolder_542,
	placeHolder_543,
	placeHolder_544,
	placeHolder_545,
	placeHolder_546,
	placeHolder_547,
	placeHolder_548,
	placeHolder_549,
	placeHolder_550,
	placeHolder_551,
	placeHolder_552,
	placeHolder_553,
	placeHolder_554,
	placeHolder_555,
	placeHolder_556,
	placeHolder_557,
	placeHolder_558,
	placeHolder_559,
	placeHolder_560,
	placeHolder_561,
	placeHolder_562,
	placeHolder_563,
	placeHolder_564,
	placeHolder_565,
	placeHolder_566,
	placeHolder_567,
	placeHolder_568,
	placeHolder_569,
	placeHolder_570,
	placeHolder_571,
	placeHolder_572,
	placeHolder_573,
	placeHolder_574,
	placeHolder_575,
	placeHolder_576,
	placeHolder_577,
	placeHolder_578,
	placeHolder_579,
	placeHolder_580,
	placeHolder_581,
	placeHolder_582,
	placeHolder_583,
	placeHolder_584,
	placeHolder_585,
	placeHolder_586,
	placeHolder_587,
	placeHolder_588,
	placeHolder_589,
	placeHolder_590,
	placeHolder_591,
	placeHolder_592,
	placeHolder_593,
	placeHolder_594,
	placeHolder_595,
	placeHolder_596,
	placeHolder_597,
	placeHolder_598,
	placeHolder_599,
	placeHolder_600,
	placeHolder_601,
	placeHolder_602,
	placeHolder_603,
	placeHolder_604,
	placeHolder_605,
	placeHolder_606,
	placeHolder_607,
	placeHolder_608,
	placeHolder_609,
	placeHolder_610,
	placeHolder_611,
	placeHolder_612,
	placeHolder_613,
	placeHolder_614,
	placeHolder_615,
	placeHolder_616,
	placeHolder_617,
	placeHolder_618,
	placeHolder_619,
	placeHolder_620,
	placeHolder_621,
	placeHolder_622,
	placeHolder_623,
	placeHolder_624,
	placeHolder_625,
	placeHolder_626,
	placeHolder_627,
	placeHolder_628,
	placeHolder_629,
	placeHolder_630,
	placeHolder_631,
	placeHolder_632,
	placeHolder_633,
	placeHolder_634,
	placeHolder_635,
	placeHolder_636,
	placeHolder_637,
	placeHolder_638,
	placeHolder_639,
	placeHolder_640,
	placeHolder_641,
	placeHolder_642,
	placeHolder_643,
	placeHolder_644,
	placeHolder_645,
	placeHolder_646,
	placeHolder_647,
	placeHolder_648,
	placeHolder_649,
	placeHolder_650,
	placeHolder_651,
	placeHolder_652,
	placeHolder_653,
	placeHolder_654,
	placeHolder_655,
	placeHolder_656,
	placeHolder_657,
	placeHolder_658,
	placeHolder_659,
	placeHolder_660,
	placeHolder_661,
	placeHolder_662,
	placeHolder_663,
	placeHolder_664,
	placeHolder_665,
	placeHolder_666,
	placeHolder_667,
	placeHolder_668,
	placeHolder_669,
	placeHolder_670,
	placeHolder_671,
	placeHolder_672,
	placeHolder_673,
	placeHolder_674,
	placeHolder_675,
	placeHolder_676,
	placeHolder_677,
	placeHolder_678,
	placeHolder_679,
	placeHolder_680,
	placeHolder_681,
	placeHolder_682,
	placeHolder_683,
	placeHolder_684,
	placeHolder_685,
	placeHolder_686,
	placeHolder_687,
	placeHolder_688,
	placeHolder_689,
	placeHolder_690,
	placeHolder_691,
	placeHolder_692,
	placeHolder_693,
	placeHolder_694,
	placeHolder_695,
	placeHolder_696,
	placeHolder_697,
	placeHolder_698,
	placeHolder_699,
	placeHolder_700,
	placeHolder_701,
	placeHolder_702,
	placeHolder_703,
	placeHolder_704,
	placeHolder_705,
	placeHolder_706,
	placeHolder_707,
	placeHolder_708,
	placeHolder_709,
	placeHolder_710,
	placeHolder_711,
	placeHolder_712,
	placeHolder_713,
	placeHolder_714,
	placeHolder_715,
	placeHolder_716,
	placeHolder_717,
	placeHolder_718,
	placeHolder_719,
	placeHolder_720,
	placeHolder_721,
	placeHolder_722,
	placeHolder_723,
	placeHolder_724,
	placeHolder_725,
	placeHolder_726,
	placeHolder_727,
	placeHolder_728,
	placeHolder_729,
	placeHolder_730,
	placeHolder_731,
	placeHolder_732,
	placeHolder_733,
	placeHolder_734,
	placeHolder_735,
	placeHolder_736,
	placeHolder_737,
	placeHolder_738,
	placeHolder_739,
	placeHolder_740,
	placeHolder_741,
	placeHolder_742,
	placeHolder_743,
	placeHolder_744,
	placeHolder_745,
	placeHolder_746,
	placeHolder_747,
	placeHolder_748,
	placeHolder_749,
	placeHolder_750,
	placeHolder_751,
	placeHolder_752,
	placeHolder_753,
	placeHolder_754,
	placeHolder_755,
	placeHolder_756,
	placeHolder_757,
	placeHolder_758,
	placeHolder_759,
	placeHolder_760,
	placeHolder_761,
	placeHolder_762,
	placeHolder_763,
	placeHolder_764,
	placeHolder_765,
	placeHolder_766,
	placeHolder_767,
	placeHolder_768,
	placeHolder_769,
	placeHolder_770,
	placeHolder_771,
	placeHolder_772,
	placeHolder_773,
	placeHolder_774,
	placeHolder_775,
	placeHolder_776,
	placeHolder_777,
	placeHolder_778,
	placeHolder_779,
	placeHolder_780,
	placeHolder_781,
	placeHolder_782,
	placeHolder_783,
	placeHolder_784,
	placeHolder_785,
	placeHolder_786,
	placeHolder_787,
	placeHolder_788,
	placeHolder_789,
	placeHolder_790,
	placeHolder_791,
	placeHolder_792,
	placeHolder_793,
	placeHolder_794,
	placeHolder_795,
	placeHolder_796,
	placeHolder_797,
	placeHolder_798,
	placeHolder_799,
	placeHolder_800,
	placeHolder_801,
	placeHolder_802,
	placeHolder_803,
	placeHolder_804,
	placeHolder_805,
	placeHolder_806,
	placeHolder_807,
	placeHolder_808,
	placeHolder_809,
	placeHolder_810,
	placeHolder_811,
	placeHolder_812,
	placeHolder_813,
	placeHolder_814,
	placeHolder_815,
	placeHolder_816,
	placeHolder_817,
	placeHolder_818,
	placeHolder_819,
	placeHolder_820,
	placeHolder_821,
	placeHolder_822,
	placeHolder_823,
	placeHolder_824,
	placeHolder_825,
	placeHolder_826,
	placeHolder_827,
	placeHolder_828,
	placeHolder_829,
	placeHolder_830,
	placeHolder_831,
	placeHolder_832,
	placeHolder_833,
	placeHolder_834,
	placeHolder_835,
	placeHolder_836,
	placeHolder_837,
	placeHolder_838,
	placeHolder_839,
	placeHolder_840,
	placeHolder_841,
	placeHolder_842,
	placeHolder_843,
	placeHolder_844,
	placeHolder_845,
	placeHolder_846,
	placeHolder_847,
	placeHolder_848,
	placeHolder_849,
	placeHolder_850,
	placeHolder_851,
	placeHolder_852,
	placeHolder_853,
	placeHolder_854,
	placeHolder_855,
	placeHolder_856,
	placeHolder_857,
	placeHolder_858,
	placeHolder_859,
	placeHolder_860,
	placeHolder_861,
	placeHolder_862,
	placeHolder_863,
	placeHolder_864,
	placeHolder_865,
	placeHolder_866,
	placeHolder_867,
	placeHolder_868,
	placeHolder_869,
	placeHolder_870,
	placeHolder_871,
	placeHolder_872,
	placeHolder_873,
	placeHolder_874,
	placeHolder_875,
	placeHolder_876,
	placeHolder_877,
	placeHolder_878,
	placeHolder_879,
	placeHolder_880,
	placeHolder_881,
	placeHolder_882,
	placeHolder_883,
	placeHolder_884,
	placeHolder_885,
	placeHolder_886,
	placeHolder_887,
	placeHolder_888,
	placeHolder_889,
	placeHolder_890,
	placeHolder_891,
	placeHolder_892,
	placeHolder_893,
	placeHolder_894,
	placeHolder_895,
	placeHolder_896,
	placeHolder_897,
	placeHolder_898,
	placeHolder_899,
	placeHolder_900,
	placeHolder_901,
	placeHolder_902,
	placeHolder_903,
	placeHolder_904,
	placeHolder_905,
	placeHolder_906,
	placeHolder_907,
	placeHolder_908,
	placeHolder_909,
	placeHolder_910,
	placeHolder_911,
	placeHolder_912,
	placeHolder_913,
	placeHolder_914,
	placeHolder_915,
	placeHolder_916,
	placeHolder_917,
	placeHolder_918,
	placeHolder_919,
	placeHolder_920,
	placeHolder_921,
	placeHolder_922,
	placeHolder_923,
	placeHolder_924,
	placeHolder_925,
	placeHolder_926,
	placeHolder_927,
	placeHolder_928,
	placeHolder_929,
	placeHolder_930,
	placeHolder_931,
	placeHolder_932,
	placeHolder_933,
	placeHolder_934,
	placeHolder_935,
	placeHolder_936,
	placeHolder_937,
	placeHolder_938,
	placeHolder_939,
	placeHolder_940,
	placeHolder_941,
	placeHolder_942,
	placeHolder_943,
	placeHolder_944,
	placeHolder_945,
	placeHolder_946,
	placeHolder_947,
	placeHolder_948,
	placeHolder_949,
	placeHolder_950,
	placeHolder_951,
	placeHolder_952,
	placeHolder_953,
	placeHolder_954,
	placeHolder_955,
	placeHolder_956,
	placeHolder_957,
	placeHolder_958,
	placeHolder_959,
	placeHolder_960,
	placeHolder_961,
	placeHolder_962,
	placeHolder_963,
	placeHolder_964,
	placeHolder_965,
	placeHolder_966,
	placeHolder_967,
	placeHolder_968,
	placeHolder_969,
	placeHolder_970,
	placeHolder_971,
	placeHolder_972,
	placeHolder_973,
	placeHolder_974,
	placeHolder_975,
	placeHolder_976,
	placeHolder_977,
	placeHolder_978,
	placeHolder_979,
	placeHolder_980,
	placeHolder_981,
	placeHolder_982,
	placeHolder_983,
	placeHolder_984,
	placeHolder_985,
	placeHolder_986,
	placeHolder_987,
	placeHolder_988,
	placeHolder_989,
	placeHolder_990,
	placeHolder_991,
	placeHolder_992,
	placeHolder_993,
	placeHolder_994,
	placeHolder_995,
	placeHolder_996,
	placeHolder_997,
	placeHolder_998,
	Unregistered,
}

enum ScanLoginSource2 {
	PC,
	Web,
	US,
}

enum CheckConfirmScanState2 {
	Wait,
	Success,
	Expire,
}

enum MenuTypeEnum {
	Default,
}

enum NotificationTypeEnum2 {
	Information,
	NewVersion,
}

enum OrganizationPatientTypeEnum2 {
	Person,
	Animals,
}

enum OrganizationTypeEnum2 {
	Corporation,
}

enum RegionLevelEnum {
	Township,
	LivingQuarter,
}

enum ReportSendTypeEnum {
	Simple,
}

enum StorageServerEnum2 {
	VCS,
	COS,
}

enum ValidatorTypeEnum {
	Create,
	Update,
	Remove,
}

enum WSConnectTypeEnum {
	Default,
	ConsultationSecondWindow,
	EducationSecondWindow,
	RemoteConnectSecondWindow,
	AppletAPI,
}

enum ASETypeEnum {
	Off,
	Max,
	Mean,
	Both,
}

enum StraightLineShapeEnum {
	StraightLine,
	HalfCircle,
	AutoPWVSlope,
}

enum DefinitionMeasureItemsEnum {
	Default,
	UserDefined,
}

enum DefinitionPriorityEnum {
	Notset,
	Root,
	Global,
	GlobalCategory,
	GlobalApp,
	FactoryDefault,
	OemDefault,
	UserDefined,
}

enum MeasureTypeUnitEnum {
	None,
	AreaUnit,
	VelocityUnit,
	TimeUnit,
}

enum UnExecuteAction {
	None,
	OneStep,
	AllSteps,
	GeometryOnly,
}

class PriorityPair {
	DefinitionPriorityEnum target;
	DefinitionPriorityEnum? base;

	PriorityPair({
		this.target = DefinitionPriorityEnum.Notset,
		this.base,
	});

	factory PriorityPair.fromJson(Map<String, dynamic> map) {
		return PriorityPair( 
			target: DefinitionPriorityEnum.values.firstWhere((e) => e.index == map['Target']),
			base: map['Base'] != null ? DefinitionPriorityEnum.values.firstWhere((e) => e.index == map['Base']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Target'] = target.index;
		if (base != null) {
			map['Base'] = base;
		}
		return map;
	}
}

class DefinitionPriorityEnumExtension {

	DefinitionPriorityEnumExtension();

	factory DefinitionPriorityEnumExtension.fromJson(Map<String, dynamic> map) {
		return DefinitionPriorityEnumExtension( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		return map;
	}
}

enum TracePeakType {
	Normal,
	OnePeak,
	TwoPeaks,
}

enum LineWeightType {
	NormalWeight,
	Thin,
}

enum IMTType {
	placeHolder_0,
	Post,
	Ant,
	Both,
}

enum MeasureSectionType {
	None,
	Root,
	Application,
	MeasureMode,
	Group,
	Folder,
	Item,
	Calculator,
	OutPut,
	Formular,
	Processor,
	TypeParams,
}

enum ModeTypeEnum {
	Undefined,
	Tissue,
	Flow,
	Doppler,
	TissueTM,
}

enum ResourceDefPriorityEnum {
	Root,
	placeHolder_1,
	placeHolder_2,
	placeHolder_3,
	placeHolder_4,
	placeHolder_5,
	placeHolder_6,
	placeHolder_7,
	placeHolder_8,
	placeHolder_9,
	placeHolder_10,
	placeHolder_11,
	placeHolder_12,
	placeHolder_13,
	placeHolder_14,
	placeHolder_15,
	placeHolder_16,
	placeHolder_17,
	placeHolder_18,
	placeHolder_19,
	placeHolder_20,
	placeHolder_21,
	placeHolder_22,
	placeHolder_23,
	placeHolder_24,
	placeHolder_25,
	placeHolder_26,
	placeHolder_27,
	placeHolder_28,
	placeHolder_29,
	placeHolder_30,
	placeHolder_31,
	placeHolder_32,
	placeHolder_33,
	placeHolder_34,
	placeHolder_35,
	placeHolder_36,
	placeHolder_37,
	placeHolder_38,
	placeHolder_39,
	FactoryDefault,
	placeHolder_41,
	placeHolder_42,
	placeHolder_43,
	placeHolder_44,
	PackageDefault,
	placeHolder_46,
	placeHolder_47,
	placeHolder_48,
	placeHolder_49,
	OemDefault,
	placeHolder_51,
	placeHolder_52,
	placeHolder_53,
	placeHolder_54,
	placeHolder_55,
	placeHolder_56,
	placeHolder_57,
	placeHolder_58,
	placeHolder_59,
	UserDefined,
}

enum QueryCourseSortEnum {
	StartTime,
	Recommended,
}

enum ArrowOrientation {
	Down,
	Left,
	Up,
	Right,
}

class DataItemDTO2 {
	String? key;
	String? value;

	DataItemDTO2({
		this.key,
		this.value,
	});

	factory DataItemDTO2.fromJson(Map<String, dynamic> map) {
		return DataItemDTO2( 
			key: map['Key'],
			value: map['Value'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (key != null) {
			map['Key'] = key;
		}
		if (value != null) {
			map['Value'] = value;
		}
		return map;
	}
}

class WaitDeleteLogBaseDTO {
	int daysAgoList;
	int waitDeleteLogCount;

	WaitDeleteLogBaseDTO({
		this.daysAgoList = 0,
		this.waitDeleteLogCount = 0,
	});

	factory WaitDeleteLogBaseDTO.fromJson(Map<String, dynamic> map) {
		return WaitDeleteLogBaseDTO( 
			daysAgoList: map['DaysAgoList'],
			waitDeleteLogCount: map['WaitDeleteLogCount'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DaysAgoList'] = daysAgoList;
		map['WaitDeleteLogCount'] = waitDeleteLogCount;
		return map;
	}
}

class WaitDeleteLogsDTO {
	List<WaitDeleteLogBaseDTO>? waitDeleteLogs;
	int daysAgo;
	String? requestServerHost;
	DateTime? lastClearTime;
	DateTime? lastClearOperateTime;

	WaitDeleteLogsDTO({
		this.waitDeleteLogs,
		this.daysAgo = 0,
		this.requestServerHost,
		this.lastClearTime,
		this.lastClearOperateTime,
	});

	factory WaitDeleteLogsDTO.fromJson(Map<String, dynamic> map) {
		return WaitDeleteLogsDTO( 
			waitDeleteLogs: map['WaitDeleteLogs'] != null ? (map['WaitDeleteLogs'] as List).map((e)=>WaitDeleteLogBaseDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			daysAgo: map['DaysAgo'],
			requestServerHost: map['RequestServerHost'],
			lastClearTime: map['LastClearTime'] != null ? DateTime.parse(map['LastClearTime']) : null,
			lastClearOperateTime: map['LastClearOperateTime'] != null ? DateTime.parse(map['LastClearOperateTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (waitDeleteLogs != null) {
			map['WaitDeleteLogs'] = waitDeleteLogs;
		}
		map['DaysAgo'] = daysAgo;
		if (requestServerHost != null) {
			map['RequestServerHost'] = requestServerHost;
		}
		if (lastClearTime != null) {
			map['LastClearTime'] = JsonRpcUtils.dateFormat(lastClearTime!);
		}
		if (lastClearOperateTime != null) {
			map['LastClearOperateTime'] = JsonRpcUtils.dateFormat(lastClearOperateTime!);
		}
		return map;
	}
}

class NotificationDTO2 extends BaseDTO{
	String? code;
	int notificationNo;
	String? version;
	List<String>? applicableEquipment;
	String? notificationContent;
	NotificationTypeEnum2 notificationType;

	NotificationDTO2({
		this.code,
		this.notificationNo = 0,
		this.version,
		this.applicableEquipment,
		this.notificationContent,
		this.notificationType = NotificationTypeEnum2.Information,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory NotificationDTO2.fromJson(Map<String, dynamic> map) {
		return NotificationDTO2( 
			code: map['Code'],
			notificationNo: map['NotificationNo'],
			version: map['Version'],
			applicableEquipment: map['ApplicableEquipment']?.cast<String>().toList(),
			notificationContent: map['NotificationContent'],
			notificationType: NotificationTypeEnum2.values.firstWhere((e) => e.index == map['NotificationType']),
			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;
		map['NotificationNo'] = notificationNo;
		if (version != null)
			map['Version'] = version;
		if (applicableEquipment != null)
			map['ApplicableEquipment'] = applicableEquipment;
		if (notificationContent != null)
			map['NotificationContent'] = notificationContent;
		map['NotificationType'] = notificationType.index;
		return map;
	}
}

class FilterNotificationDTO {
	bool hadNotification;
	PageCollection<NotificationDTO2>? notificationPageCollection;

	FilterNotificationDTO({
		this.hadNotification = false,
		this.notificationPageCollection,
	});

	factory FilterNotificationDTO.fromJson(Map<String, dynamic> map) {
		return FilterNotificationDTO( 
			hadNotification: map['HadNotification'],
			notificationPageCollection: map['NotificationPageCollection'] != null ? PageCollection<NotificationDTO2>.fromJson(map['NotificationPageCollection'] as Map<String,dynamic>) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['HadNotification'] = hadNotification;
		if (notificationPageCollection != null) {
			map['NotificationPageCollection'] = notificationPageCollection;
		}
		return map;
	}
}

class RecognitionPersonDTO2 {
	String? personId;
	String? faceId;
	double score;

	RecognitionPersonDTO2({
		this.personId,
		this.faceId,
		this.score = 0,
	});

	factory RecognitionPersonDTO2.fromJson(Map<String, dynamic> map) {
		return RecognitionPersonDTO2( 
			personId: map['PersonId'],
			faceId: map['FaceId'],
			score: double.parse(map['Score'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (personId != null) {
			map['PersonId'] = personId;
		}
		if (faceId != null) {
			map['FaceId'] = faceId;
		}
		map['Score'] = score;
		return map;
	}
}

class SearchPersonsResult2 {
	bool isSearchSuccess;
	String? errMessage;
	bool hasPerson;
	RecognitionPersonDTO2? personInfo;
	List<RecognitionPersonDTO2>? persons;

	SearchPersonsResult2({
		this.isSearchSuccess = false,
		this.errMessage,
		this.hasPerson = false,
		this.personInfo,
		this.persons,
	});

	factory SearchPersonsResult2.fromJson(Map<String, dynamic> map) {
		return SearchPersonsResult2( 
			isSearchSuccess: map['IsSearchSuccess'],
			errMessage: map['ErrMessage'],
			hasPerson: map['HasPerson'],
			personInfo: map['PersonInfo'] != null ? RecognitionPersonDTO2.fromJson(map['PersonInfo']) : null,
			persons: map['Persons'] != null ? (map['Persons'] as List).map((e)=>RecognitionPersonDTO2.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSearchSuccess'] = isSearchSuccess;
		if (errMessage != null) {
			map['ErrMessage'] = errMessage;
		}
		map['HasPerson'] = hasPerson;
		if (personInfo != null) {
			map['PersonInfo'] = personInfo;
		}
		if (persons != null) {
			map['Persons'] = persons;
		}
		return map;
	}
}

class IDCardInfoResult2 {
	String? name;
	String? idCardNo;
	String? gender;
	String? nation;
	String? birthDay;
	String? address;

	IDCardInfoResult2({
		this.name,
		this.idCardNo,
		this.gender,
		this.nation,
		this.birthDay,
		this.address,
	});

	factory IDCardInfoResult2.fromJson(Map<String, dynamic> map) {
		return IDCardInfoResult2( 
			name: map['Name'],
			idCardNo: map['IdCardNo'],
			gender: map['Gender'],
			nation: map['Nation'],
			birthDay: map['BirthDay'],
			address: map['Address'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (idCardNo != null) {
			map['IdCardNo'] = idCardNo;
		}
		if (gender != null) {
			map['Gender'] = gender;
		}
		if (nation != null) {
			map['Nation'] = nation;
		}
		if (birthDay != null) {
			map['BirthDay'] = birthDay;
		}
		if (address != null) {
			map['Address'] = address;
		}
		return map;
	}
}

class RecognitionResult2 {
	IDCardRecognitionStatusEnum2 statusCode;
	bool isSuccess;
	IDCardInfoResult2? iDCardData;

	RecognitionResult2({
		this.statusCode = IDCardRecognitionStatusEnum2.SUCCESSED_All,
		this.isSuccess = false,
		this.iDCardData,
	});

	factory RecognitionResult2.fromJson(Map<String, dynamic> map) {
		return RecognitionResult2( 
			statusCode: IDCardRecognitionStatusEnum2.values.firstWhere((e) => e.index == map['StatusCode']),
			isSuccess: map['IsSuccess'],
			iDCardData: map['IDCardData'] != null ? IDCardInfoResult2.fromJson(map['IDCardData']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['StatusCode'] = statusCode.index;
		map['IsSuccess'] = isSuccess;
		if (iDCardData != null) {
			map['IDCardData'] = iDCardData;
		}
		return map;
	}
}

class RegionItemDTO {
	String? c;
	String? g;
	String? f;
	String? n;

	RegionItemDTO({
		this.c,
		this.g,
		this.f,
		this.n,
	});

	factory RegionItemDTO.fromJson(Map<String, dynamic> map) {
		return RegionItemDTO( 
			c: map['c'],
			g: map['g'],
			f: map['f'],
			n: map['n'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (c != null) {
			map['c'] = c;
		}
		if (g != null) {
			map['g'] = g;
		}
		if (f != null) {
			map['f'] = f;
		}
		if (n != null) {
			map['n'] = n;
		}
		return map;
	}
}

class RegionDataDTO {
	String? lang;
	List<RegionItemDTO>? datas;

	RegionDataDTO({
		this.lang,
		this.datas,
	});

	factory RegionDataDTO.fromJson(Map<String, dynamic> map) {
		return RegionDataDTO( 
			lang: map['lang'],
			datas: map['datas'] != null ? (map['datas'] as List).map((e)=>RegionItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (lang != null) {
			map['lang'] = lang;
		}
		if (datas != null) {
			map['datas'] = datas;
		}
		return map;
	}
}

class ScheduleDTO extends ClientScheduleDTO2{
	List<String>? userCodes;
	String? code;

	ScheduleDTO({
		this.userCodes,
		this.code,
		String? title,
		TransactionStatusEnum2 status = TransactionStatusEnum2.Applied,
		ScheduleTypeEnum2 scheduleType = ScheduleTypeEnum2.Exercise,
		DateTime? startTime,
		DateTime? endTime,
		String? relevanceCode,
	}) : super(
			title: title,
			status: status,
			scheduleType: scheduleType,
			startTime: startTime,
			endTime: endTime,
			relevanceCode: relevanceCode,
		);

	factory ScheduleDTO.fromJson(Map<String, dynamic> map) {
		return ScheduleDTO( 
			userCodes: map['UserCodes']?.cast<String>().toList(),
			code: map['Code'],
			title: map['Title'],
			status: TransactionStatusEnum2.values.firstWhere((e) => e.index == map['Status']),
			scheduleType: ScheduleTypeEnum2.values.firstWhere((e) => e.index == map['ScheduleType']),
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			relevanceCode: map['RelevanceCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCodes != null)
			map['UserCodes'] = userCodes;
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class StorageServiceSettingDTO2 {
	String? authorization;
	String? contentType;
	String? storageUrl;

	StorageServiceSettingDTO2({
		this.authorization,
		this.contentType,
		this.storageUrl,
	});

	factory StorageServiceSettingDTO2.fromJson(Map<String, dynamic> map) {
		return StorageServiceSettingDTO2( 
			authorization: map['Authorization'],
			contentType: map['ContentType'],
			storageUrl: map['StorageUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (authorization != null) {
			map['Authorization'] = authorization;
		}
		if (contentType != null) {
			map['ContentType'] = contentType;
		}
		if (storageUrl != null) {
			map['StorageUrl'] = storageUrl;
		}
		return map;
	}
}

class UserScanInfo {
	String? scanCode;
	ScanLoginSource scanLoginSource;
	Platform platform;
	DateTime? createTime;
	DateTime? expireTime;
	String? installVersion;
	LoginResult? loginResult;

	UserScanInfo({
		this.scanCode,
		this.scanLoginSource = ScanLoginSource.PC,
		this.platform = Platform.Windows,
		this.createTime,
		this.expireTime,
		this.installVersion,
		this.loginResult,
	});

	factory UserScanInfo.fromJson(Map<String, dynamic> map) {
		return UserScanInfo( 
			scanCode: map['ScanCode'],
			scanLoginSource: ScanLoginSource.values.firstWhere((e) => e.index == map['ScanLoginSource']),
			platform: Platform.values.firstWhere((e) => e.index == map['Platform']),
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			expireTime: map['ExpireTime'] != null ? DateTime.parse(map['ExpireTime']) : null,
			installVersion: map['InstallVersion'],
			loginResult: map['LoginResult'] != null ? LoginResult.fromJson(map['LoginResult']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (scanCode != null) {
			map['ScanCode'] = scanCode;
		}
		map['ScanLoginSource'] = scanLoginSource.index;
		map['Platform'] = platform.index;
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (expireTime != null) {
			map['ExpireTime'] = JsonRpcUtils.dateFormat(expireTime!);
		}
		if (installVersion != null) {
			map['InstallVersion'] = installVersion;
		}
		if (loginResult != null) {
			map['LoginResult'] = loginResult;
		}
		return map;
	}
}

class ClearAssociatedWithAccountResult {
	bool isSuccess;
	AssociatedAccountResultEnum state;

	ClearAssociatedWithAccountResult({
		this.isSuccess = false,
		this.state = AssociatedAccountResultEnum.Success,
	});

	factory ClearAssociatedWithAccountResult.fromJson(Map<String, dynamic> map) {
		return ClearAssociatedWithAccountResult( 
			isSuccess: map['IsSuccess'],
			state: AssociatedAccountResultEnum.values.firstWhere((e) => e.index == map['State']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		map['State'] = state.index;
		return map;
	}
}

class UserCMSDTO {
	String? cMSData;

	UserCMSDTO({
		this.cMSData,
	});

	factory UserCMSDTO.fromJson(Map<String, dynamic> map) {
		return UserCMSDTO( 
			cMSData: map['CMSData'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (cMSData != null) {
			map['CMSData'] = cMSData;
		}
		return map;
	}
}

class UserPasswordDTO2 extends BaseDTO{
	String? userCode;
	String? userName;
	String? secretPassword;
	String? phone;
	String? email;
	String? nickName;
	String? fullName;
	String? headImageUrl;
	String? organizationCode;
	String? rootOrganizationCode;
	List<String>? authorityGroups;
	List<String>? bindDevices;
	List<String>? bindDeviceOrganizations;
	String? lastIP;
	int logintimes;
	UserInfoStateEnum userState;
	List<String>? roleCodes;
	List<String>? rankCodes;
	List<String>? positionCodes;
	ApplyStateEnum applyState;
	List<String>? fieldList;
	List<String>? deletePatientCodes;
	bool isBatchExportDiagnoseData;
	String? bindAssistantUserCode;
	String? bindAssistantDoctorUserCode;
	DateTime? passwordUpdateTime;
	List<String>? passwordRecords;
	String? signature;
	String? language;
	bool enableReportLabel;
	String? bindEmergencyDeviceCode;
	String? bindEmergencyExpertCode;
	bool isOldAgent;
	List<String>? userFeatureCodes;
	List<AssociatedInfoDTO>? associatedInfos;
	String? openId;

	UserPasswordDTO2({
		this.userCode,
		this.userName,
		this.secretPassword,
		this.phone,
		this.email,
		this.nickName,
		this.fullName,
		this.headImageUrl,
		this.organizationCode,
		this.rootOrganizationCode,
		this.authorityGroups,
		this.bindDevices,
		this.bindDeviceOrganizations,
		this.lastIP,
		this.logintimes = 0,
		this.userState = UserInfoStateEnum.Nonactivated,
		this.roleCodes,
		this.rankCodes,
		this.positionCodes,
		this.applyState = ApplyStateEnum.NotApply,
		this.fieldList,
		this.deletePatientCodes,
		this.isBatchExportDiagnoseData = false,
		this.bindAssistantUserCode,
		this.bindAssistantDoctorUserCode,
		this.passwordUpdateTime,
		this.passwordRecords,
		this.signature,
		this.language,
		this.enableReportLabel = false,
		this.bindEmergencyDeviceCode,
		this.bindEmergencyExpertCode,
		this.isOldAgent = false,
		this.userFeatureCodes,
		this.associatedInfos,
		this.openId,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UserPasswordDTO2.fromJson(Map<String, dynamic> map) {
		return UserPasswordDTO2( 
			userCode: map['UserCode'],
			userName: map['UserName'],
			secretPassword: map['SecretPassword'],
			phone: map['Phone'],
			email: map['Email'],
			nickName: map['NickName'],
			fullName: map['FullName'],
			headImageUrl: map['HeadImageUrl'],
			organizationCode: map['OrganizationCode'],
			rootOrganizationCode: map['RootOrganizationCode'],
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			bindDevices: map['BindDevices']?.cast<String>().toList(),
			bindDeviceOrganizations: map['BindDeviceOrganizations']?.cast<String>().toList(),
			lastIP: map['LastIP'],
			logintimes: map['Logintimes'],
			userState: UserInfoStateEnum.values.firstWhere((e) => e.index == map['UserState']),
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			rankCodes: map['RankCodes']?.cast<String>().toList(),
			positionCodes: map['PositionCodes']?.cast<String>().toList(),
			applyState: ApplyStateEnum.values.firstWhere((e) => e.index == map['ApplyState']),
			fieldList: map['FieldList']?.cast<String>().toList(),
			deletePatientCodes: map['DeletePatientCodes']?.cast<String>().toList(),
			isBatchExportDiagnoseData: map['IsBatchExportDiagnoseData'],
			bindAssistantUserCode: map['BindAssistantUserCode'],
			bindAssistantDoctorUserCode: map['BindAssistantDoctorUserCode'],
			passwordUpdateTime: map['PasswordUpdateTime'] != null ? DateTime.parse(map['PasswordUpdateTime']) : null,
			passwordRecords: map['PasswordRecords']?.cast<String>().toList(),
			signature: map['Signature'],
			language: map['Language'],
			enableReportLabel: map['EnableReportLabel'],
			bindEmergencyDeviceCode: map['BindEmergencyDeviceCode'],
			bindEmergencyExpertCode: map['BindEmergencyExpertCode'],
			isOldAgent: map['IsOldAgent'],
			userFeatureCodes: map['UserFeatureCodes']?.cast<String>().toList(),
			associatedInfos: map['AssociatedInfos'] != null ? (map['AssociatedInfos'] as List).map((e)=>AssociatedInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			openId: map['OpenId'],
			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 (userCode != null)
			map['UserCode'] = userCode;
		if (userName != null)
			map['UserName'] = userName;
		if (secretPassword != null)
			map['SecretPassword'] = secretPassword;
		if (phone != null)
			map['Phone'] = phone;
		if (email != null)
			map['Email'] = email;
		if (nickName != null)
			map['NickName'] = nickName;
		if (fullName != null)
			map['FullName'] = fullName;
		if (headImageUrl != null)
			map['HeadImageUrl'] = headImageUrl;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (rootOrganizationCode != null)
			map['RootOrganizationCode'] = rootOrganizationCode;
		if (authorityGroups != null)
			map['AuthorityGroups'] = authorityGroups;
		if (bindDevices != null)
			map['BindDevices'] = bindDevices;
		if (bindDeviceOrganizations != null)
			map['BindDeviceOrganizations'] = bindDeviceOrganizations;
		if (lastIP != null)
			map['LastIP'] = lastIP;
		map['Logintimes'] = logintimes;
		map['UserState'] = userState.index;
		if (roleCodes != null)
			map['RoleCodes'] = roleCodes;
		if (rankCodes != null)
			map['RankCodes'] = rankCodes;
		if (positionCodes != null)
			map['PositionCodes'] = positionCodes;
		map['ApplyState'] = applyState.index;
		if (fieldList != null)
			map['FieldList'] = fieldList;
		if (deletePatientCodes != null)
			map['DeletePatientCodes'] = deletePatientCodes;
		map['IsBatchExportDiagnoseData'] = isBatchExportDiagnoseData;
		if (bindAssistantUserCode != null)
			map['BindAssistantUserCode'] = bindAssistantUserCode;
		if (bindAssistantDoctorUserCode != null)
			map['BindAssistantDoctorUserCode'] = bindAssistantDoctorUserCode;
		if (passwordUpdateTime != null)
			map['PasswordUpdateTime'] = JsonRpcUtils.dateFormat(passwordUpdateTime!);
		if (passwordRecords != null)
			map['PasswordRecords'] = passwordRecords;
		if (signature != null)
			map['Signature'] = signature;
		if (language != null)
			map['Language'] = language;
		map['EnableReportLabel'] = enableReportLabel;
		if (bindEmergencyDeviceCode != null)
			map['BindEmergencyDeviceCode'] = bindEmergencyDeviceCode;
		if (bindEmergencyExpertCode != null)
			map['BindEmergencyExpertCode'] = bindEmergencyExpertCode;
		map['IsOldAgent'] = isOldAgent;
		if (userFeatureCodes != null)
			map['UserFeatureCodes'] = userFeatureCodes;
		if (associatedInfos != null)
			map['AssociatedInfos'] = associatedInfos;
		if (openId != null)
			map['OpenId'] = openId;
		return map;
	}
}

class UserTokenDTO {
	String? token;
	bool passwordExpired;

	UserTokenDTO({
		this.token,
		this.passwordExpired = false,
	});

	factory UserTokenDTO.fromJson(Map<String, dynamic> map) {
		return UserTokenDTO( 
			token: map['Token'],
			passwordExpired: map['PasswordExpired'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (token != null) {
			map['Token'] = token;
		}
		map['PasswordExpired'] = passwordExpired;
		return map;
	}
}

class UserAuthorityGroupDTO extends BaseDTO{
	String? userGroupCode;
	String? description;
	List<String>? adminCodes;
	List<String>? features;
	String? createAdmin;

	UserAuthorityGroupDTO({
		this.userGroupCode,
		this.description,
		this.adminCodes,
		this.features,
		this.createAdmin,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory UserAuthorityGroupDTO.fromJson(Map<String, dynamic> map) {
		return UserAuthorityGroupDTO( 
			userGroupCode: map['UserGroupCode'],
			description: map['Description'],
			adminCodes: map['AdminCodes']?.cast<String>().toList(),
			features: map['Features']?.cast<String>().toList(),
			createAdmin: map['CreateAdmin'],
			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 (userGroupCode != null)
			map['UserGroupCode'] = userGroupCode;
		if (description != null)
			map['Description'] = description;
		if (adminCodes != null)
			map['AdminCodes'] = adminCodes;
		if (features != null)
			map['Features'] = features;
		if (createAdmin != null)
			map['CreateAdmin'] = createAdmin;
		return map;
	}
}

class StorageInfoDTO extends BaseDTO{
	String? token;
	String? fileName;
	String? storageRoute;

	StorageInfoDTO({
		this.token,
		this.fileName,
		this.storageRoute,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory StorageInfoDTO.fromJson(Map<String, dynamic> map) {
		return StorageInfoDTO( 
			token: map['Token'],
			fileName: map['FileName'],
			storageRoute: map['StorageRoute'],
			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 (token != null)
			map['Token'] = token;
		if (fileName != null)
			map['FileName'] = fileName;
		if (storageRoute != null)
			map['StorageRoute'] = storageRoute;
		return map;
	}
}

class StatisticDTO2 extends BaseDTO{
	String? statisticCode;
	String? name;
	String? description;
	String? intervalSetting;
	bool enabled;
	String? handleClass;
	String? serverHost;

	StatisticDTO2({
		this.statisticCode,
		this.name,
		this.description,
		this.intervalSetting,
		this.enabled = false,
		this.handleClass,
		this.serverHost,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory StatisticDTO2.fromJson(Map<String, dynamic> map) {
		return StatisticDTO2( 
			statisticCode: map['StatisticCode'],
			name: map['Name'],
			description: map['Description'],
			intervalSetting: map['IntervalSetting'],
			enabled: map['Enabled'],
			handleClass: map['HandleClass'],
			serverHost: map['ServerHost'],
			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 (statisticCode != null)
			map['StatisticCode'] = statisticCode;
		if (name != null)
			map['Name'] = name;
		if (description != null)
			map['Description'] = description;
		if (intervalSetting != null)
			map['IntervalSetting'] = intervalSetting;
		map['Enabled'] = enabled;
		if (handleClass != null)
			map['HandleClass'] = handleClass;
		if (serverHost != null)
			map['ServerHost'] = serverHost;
		return map;
	}
}

class StatisticInfoDTO {
	List<String>? xAxisDatas;
	List<List<double>>? yAxisDatas;
	List<StatisticInfoDTO>? children;

	StatisticInfoDTO({
		this.xAxisDatas,
		this.yAxisDatas,
		this.children,
	});

	factory StatisticInfoDTO.fromJson(Map<String, dynamic> map) {
		return StatisticInfoDTO( 
			xAxisDatas: map['XAxisDatas']?.cast<String>().toList(),
			yAxisDatas: map['YAxisDatas']?.cast<List<double>>().toList(),
			children: map['Children'] != null ? (map['Children'] as List).map((e)=>StatisticInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (xAxisDatas != null) {
			map['XAxisDatas'] = xAxisDatas;
		}
		if (yAxisDatas != null) {
			map['YAxisDatas'] = yAxisDatas;
		}
		if (children != null) {
			map['Children'] = children;
		}
		return map;
	}
}

class StatisticRecordDTO extends BaseDTO{
	String? statisticRecordCode;
	String? statisticCode;
	String? statisticName;
	String? userCode;
	DateTime? lastestUpdateTime;
	DateTime? nextHandleTime;
	List<String>? xAxisDatas;
	List<List<double>>? yAxisDatas;
	List<StatisticInfoDTO>? children;

	StatisticRecordDTO({
		this.statisticRecordCode,
		this.statisticCode,
		this.statisticName,
		this.userCode,
		this.lastestUpdateTime,
		this.nextHandleTime,
		this.xAxisDatas,
		this.yAxisDatas,
		this.children,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory StatisticRecordDTO.fromJson(Map<String, dynamic> map) {
		return StatisticRecordDTO( 
			statisticRecordCode: map['StatisticRecordCode'],
			statisticCode: map['StatisticCode'],
			statisticName: map['StatisticName'],
			userCode: map['UserCode'],
			lastestUpdateTime: map['LastestUpdateTime'] != null ? DateTime.parse(map['LastestUpdateTime']) : null,
			nextHandleTime: map['NextHandleTime'] != null ? DateTime.parse(map['NextHandleTime']) : null,
			xAxisDatas: map['XAxisDatas']?.cast<String>().toList(),
			yAxisDatas: map['YAxisDatas']?.cast<List<double>>().toList(),
			children: map['Children'] != null ? (map['Children'] as List).map((e)=>StatisticInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (statisticRecordCode != null)
			map['StatisticRecordCode'] = statisticRecordCode;
		if (statisticCode != null)
			map['StatisticCode'] = statisticCode;
		if (statisticName != null)
			map['StatisticName'] = statisticName;
		if (userCode != null)
			map['UserCode'] = userCode;
		if (lastestUpdateTime != null)
			map['LastestUpdateTime'] = JsonRpcUtils.dateFormat(lastestUpdateTime!);
		if (nextHandleTime != null)
			map['NextHandleTime'] = JsonRpcUtils.dateFormat(nextHandleTime!);
		if (xAxisDatas != null)
			map['XAxisDatas'] = xAxisDatas;
		if (yAxisDatas != null)
			map['YAxisDatas'] = yAxisDatas;
		if (children != null)
			map['Children'] = children;
		return map;
	}
}

class ServerListResult extends BaseServerResult{
	bool isDistributed;
	List<ServerInfoDTO>? serverList;

	ServerListResult({
		this.isDistributed = false,
		this.serverList,
		int code = 0,
	}) : super(
			code: code,
		);

	factory ServerListResult.fromJson(Map<String, dynamic> map) {
		return ServerListResult( 
			isDistributed: map['IsDistributed'],
			serverList: map['ServerList'] != null ? (map['ServerList'] as List).map((e)=>ServerInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			code: map['Code'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsDistributed'] = isDistributed;
		if (serverList != null)
			map['ServerList'] = serverList;
		return map;
	}
}

class LoginSuccessResult extends BaseServerResult{

	LoginSuccessResult({
		int code = 0,
	}) : super(
			code: code,
		);

	factory LoginSuccessResult.fromJson(Map<String, dynamic> map) {
		return LoginSuccessResult( 
			code: map['Code'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class ScheduleDTO2 extends ClientScheduleDTO{
	List<String>? userCodes;
	String? code;

	ScheduleDTO2({
		this.userCodes,
		this.code,
		String? title,
		TransactionStatusEnum status = TransactionStatusEnum.Applied,
		ScheduleTypeEnum scheduleType = ScheduleTypeEnum.Consultation,
		DateTime? startTime,
		DateTime? endTime,
		String? relevanceCode,
	}) : super(
			title: title,
			status: status,
			scheduleType: scheduleType,
			startTime: startTime,
			endTime: endTime,
			relevanceCode: relevanceCode,
		);

	factory ScheduleDTO2.fromJson(Map<String, dynamic> map) {
		return ScheduleDTO2( 
			userCodes: map['UserCodes']?.cast<String>().toList(),
			code: map['Code'],
			title: map['Title'],
			status: TransactionStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			scheduleType: ScheduleTypeEnum.values.firstWhere((e) => e.index == map['ScheduleType']),
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			relevanceCode: map['RelevanceCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCodes != null)
			map['UserCodes'] = userCodes;
		if (code != null)
			map['Code'] = code;
		return map;
	}
}

class LiveMemberDTO {
	String? code;
	LiveMemberEnum memberType;
	String? name;
	String? headImageToken;
	LiveMemberStatus status;
	bool muteOpened;
	bool videoOpened;
	LiveDataDTO? liveData;
	bool isControllingParameter;
	DateTime? firstJoinTime;
	int sortLevel;
	List<VideoDeviceInfoDTO>? videoDeviceInfos;
	LoginSource loginSource;
	String? inviterCode;
	bool backgroundRole;
	bool isOldPlatform;
	bool supportRtc;

	LiveMemberDTO({
		this.code,
		this.memberType = LiveMemberEnum.User,
		this.name,
		this.headImageToken,
		this.status = LiveMemberStatus.Default,
		this.muteOpened = false,
		this.videoOpened = false,
		this.liveData,
		this.isControllingParameter = false,
		this.firstJoinTime,
		this.sortLevel = 0,
		this.videoDeviceInfos,
		this.loginSource = LoginSource.PC,
		this.inviterCode,
		this.backgroundRole = false,
		this.isOldPlatform = false,
		this.supportRtc = false,
	});

	factory LiveMemberDTO.fromJson(Map<String, dynamic> map) {
		return LiveMemberDTO( 
			code: map['Code'],
			memberType: LiveMemberEnum.values.firstWhere((e) => e.index == map['MemberType']),
			name: map['Name'],
			headImageToken: map['HeadImageToken'],
			status: LiveMemberStatus.values.firstWhere((e) => e.index == map['Status']),
			muteOpened: map['MuteOpened'],
			videoOpened: map['VideoOpened'],
			liveData: map['LiveData'] != null ? LiveDataDTO.fromJson(map['LiveData']) : null,
			isControllingParameter: map['IsControllingParameter'],
			firstJoinTime: map['FirstJoinTime'] != null ? DateTime.parse(map['FirstJoinTime']) : null,
			sortLevel: map['SortLevel'],
			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
			inviterCode: map['InviterCode'],
			backgroundRole: map['BackgroundRole'],
			isOldPlatform: map['IsOldPlatform'],
			supportRtc: map['SupportRtc'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		map['MemberType'] = memberType.index;
		if (name != null) {
			map['Name'] = name;
		}
		if (headImageToken != null) {
			map['HeadImageToken'] = headImageToken;
		}
		map['Status'] = status.index;
		map['MuteOpened'] = muteOpened;
		map['VideoOpened'] = videoOpened;
		if (liveData != null) {
			map['LiveData'] = liveData;
		}
		map['IsControllingParameter'] = isControllingParameter;
		if (firstJoinTime != null) {
			map['FirstJoinTime'] = JsonRpcUtils.dateFormat(firstJoinTime!);
		}
		map['SortLevel'] = sortLevel;
		if (videoDeviceInfos != null) {
			map['VideoDeviceInfos'] = videoDeviceInfos;
		}
		map['LoginSource'] = loginSource.index;
		if (inviterCode != null) {
			map['InviterCode'] = inviterCode;
		}
		map['BackgroundRole'] = backgroundRole;
		map['IsOldPlatform'] = isOldPlatform;
		map['SupportRtc'] = supportRtc;
		return map;
	}
}

class LiveViewerDTO {
	String? userCode;
	String? name;
	DateTime? lastReportTime;

	LiveViewerDTO({
		this.userCode,
		this.name,
		this.lastReportTime,
	});

	factory LiveViewerDTO.fromJson(Map<String, dynamic> map) {
		return LiveViewerDTO( 
			userCode: map['UserCode'],
			name: map['Name'],
			lastReportTime: map['LastReportTime'] != null ? DateTime.parse(map['LastReportTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (lastReportTime != null) {
			map['LastReportTime'] = JsonRpcUtils.dateFormat(lastReportTime!);
		}
		return map;
	}
}

class LiveRoomInfoDTO {
	String? roomId;
	int roomNo;
	String? msgQueueId;
	List<LiveMemberDTO>? members;
	List<LiveViewerDTO>? viewerInfos;
	LiveMemberDTO? initiator;
	List<LiveMemberDTO>? userInfos;
	List<LiveMemberDTO>? deviceInfos;
	List<LiveMemberDTO>? expertUserInfos;
	List<LiveMemberDTO>? assistantsInfos;
	LiveRoomStatus status;
	String? name;
	DateTime? liveTime;
	int liveStatus;
	List<InteractiveBoardDataDTO>? interactiveBoardDatas;

	LiveRoomInfoDTO({
		this.roomId,
		this.roomNo = 0,
		this.msgQueueId,
		this.members,
		this.viewerInfos,
		this.initiator,
		this.userInfos,
		this.deviceInfos,
		this.expertUserInfos,
		this.assistantsInfos,
		this.status = LiveRoomStatus.Default,
		this.name,
		this.liveTime,
		this.liveStatus = 0,
		this.interactiveBoardDatas,
	});

	factory LiveRoomInfoDTO.fromJson(Map<String, dynamic> map) {
		return LiveRoomInfoDTO( 
			roomId: map['RoomId'],
			roomNo: map['RoomNo'],
			msgQueueId: map['MsgQueueId'],
			members: map['Members'] != null ? (map['Members'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			viewerInfos: map['ViewerInfos'] != null ? (map['ViewerInfos'] as List).map((e)=>LiveViewerDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			initiator: map['Initiator'] != null ? LiveMemberDTO.fromJson(map['Initiator']) : null,
			userInfos: map['UserInfos'] != null ? (map['UserInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			deviceInfos: map['DeviceInfos'] != null ? (map['DeviceInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			expertUserInfos: map['ExpertUserInfos'] != null ? (map['ExpertUserInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			assistantsInfos: map['AssistantsInfos'] != null ? (map['AssistantsInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			status: LiveRoomStatus.values.firstWhere((e) => e.index == map['Status']),
			name: map['Name'],
			liveTime: map['LiveTime'] != null ? DateTime.parse(map['LiveTime']) : null,
			liveStatus: map['LiveStatus'],
			interactiveBoardDatas: map['InteractiveBoardDatas'] != null ? (map['InteractiveBoardDatas'] as List).map((e)=>InteractiveBoardDataDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (roomId != null) {
			map['RoomId'] = roomId;
		}
		map['RoomNo'] = roomNo;
		if (msgQueueId != null) {
			map['MsgQueueId'] = msgQueueId;
		}
		if (members != null) {
			map['Members'] = members;
		}
		if (viewerInfos != null) {
			map['ViewerInfos'] = viewerInfos;
		}
		if (initiator != null) {
			map['Initiator'] = initiator;
		}
		if (userInfos != null) {
			map['UserInfos'] = userInfos;
		}
		if (deviceInfos != null) {
			map['DeviceInfos'] = deviceInfos;
		}
		if (expertUserInfos != null) {
			map['ExpertUserInfos'] = expertUserInfos;
		}
		if (assistantsInfos != null) {
			map['AssistantsInfos'] = assistantsInfos;
		}
		map['Status'] = status.index;
		if (name != null) {
			map['Name'] = name;
		}
		if (liveTime != null) {
			map['LiveTime'] = JsonRpcUtils.dateFormat(liveTime!);
		}
		map['LiveStatus'] = liveStatus;
		if (interactiveBoardDatas != null) {
			map['InteractiveBoardDatas'] = interactiveBoardDatas;
		}
		return map;
	}
}

class RtcBoardDataDTO {
	String? userCode;
	String? boardData;
	DateTime? interactiveTime;

	RtcBoardDataDTO({
		this.userCode,
		this.boardData,
		this.interactiveTime,
	});

	factory RtcBoardDataDTO.fromJson(Map<String, dynamic> map) {
		return RtcBoardDataDTO( 
			userCode: map['UserCode'],
			boardData: map['BoardData'],
			interactiveTime: map['InteractiveTime'] != null ? DateTime.parse(map['InteractiveTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (boardData != null) {
			map['BoardData'] = boardData;
		}
		if (interactiveTime != null) {
			map['InteractiveTime'] = JsonRpcUtils.dateFormat(interactiveTime!);
		}
		return map;
	}
}

class RtcLiveDataDTO {
	String? pullUrl;

	RtcLiveDataDTO({
		this.pullUrl,
	});

	factory RtcLiveDataDTO.fromJson(Map<String, dynamic> map) {
		return RtcLiveDataDTO( 
			pullUrl: map['PullUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (pullUrl != null) {
			map['PullUrl'] = pullUrl;
		}
		return map;
	}
}

class RtcMemberDTO {
	String? id;
	String? name;
	String? avatarUrl;
	LiveMemberEnum memberType;
	LiveMemberStatus status;
	bool muteOpened;
	bool videoOpened;
	bool isInitiator;
	bool isControllingParameter;
	RtcLiveDataDTO? rtcLiveData;

	RtcMemberDTO({
		this.id,
		this.name,
		this.avatarUrl,
		this.memberType = LiveMemberEnum.User,
		this.status = LiveMemberStatus.Default,
		this.muteOpened = false,
		this.videoOpened = false,
		this.isInitiator = false,
		this.isControllingParameter = false,
		this.rtcLiveData,
	});

	factory RtcMemberDTO.fromJson(Map<String, dynamic> map) {
		return RtcMemberDTO( 
			id: map['Id'],
			name: map['Name'],
			avatarUrl: map['AvatarUrl'],
			memberType: LiveMemberEnum.values.firstWhere((e) => e.index == map['MemberType']),
			status: LiveMemberStatus.values.firstWhere((e) => e.index == map['Status']),
			muteOpened: map['MuteOpened'],
			videoOpened: map['VideoOpened'],
			isInitiator: map['IsInitiator'],
			isControllingParameter: map['IsControllingParameter'],
			rtcLiveData: map['RtcLiveData'] != null ? RtcLiveDataDTO.fromJson(map['RtcLiveData']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (avatarUrl != null) {
			map['AvatarUrl'] = avatarUrl;
		}
		map['MemberType'] = memberType.index;
		map['Status'] = status.index;
		map['MuteOpened'] = muteOpened;
		map['VideoOpened'] = videoOpened;
		map['IsInitiator'] = isInitiator;
		map['IsControllingParameter'] = isControllingParameter;
		if (rtcLiveData != null) {
			map['RtcLiveData'] = rtcLiveData;
		}
		return map;
	}
}

class RtcViewerDTO {
	String? userCode;
	DateTime? lastReportTime;

	RtcViewerDTO({
		this.userCode,
		this.lastReportTime,
	});

	factory RtcViewerDTO.fromJson(Map<String, dynamic> map) {
		return RtcViewerDTO( 
			userCode: map['UserCode'],
			lastReportTime: map['LastReportTime'] != null ? DateTime.parse(map['LastReportTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (lastReportTime != null) {
			map['LastReportTime'] = JsonRpcUtils.dateFormat(lastReportTime!);
		}
		return map;
	}
}

class RtcRoomDTO {
	String? liveRoomCode;
	String? name;
	String? initiateCode;
	int rtcRoomId;
	int sdkAppId;
	String? msgQueueId;
	LiveRoomStatus status;
	List<RtcMemberDTO>? members;
	List<RtcViewerDTO>? viewers;
	List<RtcBoardDataDTO>? interactiveBoardDatas;

	RtcRoomDTO({
		this.liveRoomCode,
		this.name,
		this.initiateCode,
		this.rtcRoomId = 0,
		this.sdkAppId = 0,
		this.msgQueueId,
		this.status = LiveRoomStatus.Default,
		this.members,
		this.viewers,
		this.interactiveBoardDatas,
	});

	factory RtcRoomDTO.fromJson(Map<String, dynamic> map) {
		return RtcRoomDTO( 
			liveRoomCode: map['LiveRoomCode'],
			name: map['Name'],
			initiateCode: map['InitiateCode'],
			rtcRoomId: map['RtcRoomId'],
			sdkAppId: map['SdkAppId'],
			msgQueueId: map['MsgQueueId'],
			status: LiveRoomStatus.values.firstWhere((e) => e.index == map['Status']),
			members: map['Members'] != null ? (map['Members'] as List).map((e)=>RtcMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			viewers: map['Viewers'] != null ? (map['Viewers'] as List).map((e)=>RtcViewerDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			interactiveBoardDatas: map['InteractiveBoardDatas'] != null ? (map['InteractiveBoardDatas'] as List).map((e)=>RtcBoardDataDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (liveRoomCode != null) {
			map['LiveRoomCode'] = liveRoomCode;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (initiateCode != null) {
			map['InitiateCode'] = initiateCode;
		}
		map['RtcRoomId'] = rtcRoomId;
		map['SdkAppId'] = sdkAppId;
		if (msgQueueId != null) {
			map['MsgQueueId'] = msgQueueId;
		}
		map['Status'] = status.index;
		if (members != null) {
			map['Members'] = members;
		}
		if (viewers != null) {
			map['Viewers'] = viewers;
		}
		if (interactiveBoardDatas != null) {
			map['InteractiveBoardDatas'] = interactiveBoardDatas;
		}
		return map;
	}
}

class ReportElementDTO {
	String? key;
	String? tagId;
	String? name;
	String? aILanguage;

	ReportElementDTO({
		this.key,
		this.tagId,
		this.name,
		this.aILanguage,
	});

	factory ReportElementDTO.fromJson(Map<String, dynamic> map) {
		return ReportElementDTO( 
			key: map['Key'],
			tagId: map['TagId'],
			name: map['Name'],
			aILanguage: map['AILanguage'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (key != null) {
			map['Key'] = key;
		}
		if (tagId != null) {
			map['TagId'] = tagId;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (aILanguage != null) {
			map['AILanguage'] = aILanguage;
		}
		return map;
	}
}

class ReportPosterDTO extends BaseDTO{
	String? reportPosterCode;
	String? receiverName;
	String? contact;
	String? phone;
	String? targetUrl;
	String? template;
	ReportPosterTypeEnum posterType;
	ReportFormatEnum reportFormat;
	int postTimeout;
	List<String>? deviceIds;

	ReportPosterDTO({
		this.reportPosterCode,
		this.receiverName,
		this.contact,
		this.phone,
		this.targetUrl,
		this.template,
		this.posterType = ReportPosterTypeEnum.Default,
		this.reportFormat = ReportFormatEnum.Json,
		this.postTimeout = 0,
		this.deviceIds,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ReportPosterDTO.fromJson(Map<String, dynamic> map) {
		return ReportPosterDTO( 
			reportPosterCode: map['ReportPosterCode'],
			receiverName: map['ReceiverName'],
			contact: map['Contact'],
			phone: map['Phone'],
			targetUrl: map['TargetUrl'],
			template: map['Template'],
			posterType: ReportPosterTypeEnum.values.firstWhere((e) => e.index == map['PosterType']),
			reportFormat: ReportFormatEnum.values.firstWhere((e) => e.index == map['ReportFormat']),
			postTimeout: map['PostTimeout'],
			deviceIds: map['DeviceIds']?.cast<String>().toList(),
			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 (reportPosterCode != null)
			map['ReportPosterCode'] = reportPosterCode;
		if (receiverName != null)
			map['ReceiverName'] = receiverName;
		if (contact != null)
			map['Contact'] = contact;
		if (phone != null)
			map['Phone'] = phone;
		if (targetUrl != null)
			map['TargetUrl'] = targetUrl;
		if (template != null)
			map['Template'] = template;
		map['PosterType'] = posterType.index;
		map['ReportFormat'] = reportFormat.index;
		map['PostTimeout'] = postTimeout;
		if (deviceIds != null)
			map['DeviceIds'] = deviceIds;
		return map;
	}
}

class ReportPushRecordDTO extends BaseDTO{
	String? pushRecordCode;
	String? patientId;
	String? patientName;
	String? poseterConfigId;
	PushDataStateEnum state;
	String? poseterConfigName;
	String? reportId;
	String? patientRecordId;
	String? pushResultToken;
	String? pushResponse;

	ReportPushRecordDTO({
		this.pushRecordCode,
		this.patientId,
		this.patientName,
		this.poseterConfigId,
		this.state = PushDataStateEnum.UnDo,
		this.poseterConfigName,
		this.reportId,
		this.patientRecordId,
		this.pushResultToken,
		this.pushResponse,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ReportPushRecordDTO.fromJson(Map<String, dynamic> map) {
		return ReportPushRecordDTO( 
			pushRecordCode: map['PushRecordCode'],
			patientId: map['PatientId'],
			patientName: map['PatientName'],
			poseterConfigId: map['PoseterConfigId'],
			state: PushDataStateEnum.values.firstWhere((e) => e.index == map['State']),
			poseterConfigName: map['PoseterConfigName'],
			reportId: map['ReportId'],
			patientRecordId: map['PatientRecordId'],
			pushResultToken: map['PushResultToken'],
			pushResponse: map['PushResponse'],
			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 (pushRecordCode != null)
			map['PushRecordCode'] = pushRecordCode;
		if (patientId != null)
			map['PatientId'] = patientId;
		if (patientName != null)
			map['PatientName'] = patientName;
		if (poseterConfigId != null)
			map['PoseterConfigId'] = poseterConfigId;
		map['State'] = state.index;
		if (poseterConfigName != null)
			map['PoseterConfigName'] = poseterConfigName;
		if (reportId != null)
			map['ReportId'] = reportId;
		if (patientRecordId != null)
			map['PatientRecordId'] = patientRecordId;
		if (pushResultToken != null)
			map['PushResultToken'] = pushResultToken;
		if (pushResponse != null)
			map['PushResponse'] = pushResponse;
		return map;
	}
}

class RegionItemDTO2 {
	String? c;
	String? g;
	String? f;
	String? n;

	RegionItemDTO2({
		this.c,
		this.g,
		this.f,
		this.n,
	});

	factory RegionItemDTO2.fromJson(Map<String, dynamic> map) {
		return RegionItemDTO2( 
			c: map['c'],
			g: map['g'],
			f: map['f'],
			n: map['n'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (c != null) {
			map['c'] = c;
		}
		if (g != null) {
			map['g'] = g;
		}
		if (f != null) {
			map['f'] = f;
		}
		if (n != null) {
			map['n'] = n;
		}
		return map;
	}
}

class RegionDataDTO2 {
	String? lang;
	List<RegionItemDTO2>? datas;

	RegionDataDTO2({
		this.lang,
		this.datas,
	});

	factory RegionDataDTO2.fromJson(Map<String, dynamic> map) {
		return RegionDataDTO2( 
			lang: map['lang'],
			datas: map['datas'] != null ? (map['datas'] as List).map((e)=>RegionItemDTO2.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (lang != null) {
			map['lang'] = lang;
		}
		if (datas != null) {
			map['datas'] = datas;
		}
		return map;
	}
}

class ReferralRecordSettingDTO extends BaseDTO{
	String? referralRecordSettingCode;
	double limitHours;

	ReferralRecordSettingDTO({
		this.referralRecordSettingCode,
		this.limitHours = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ReferralRecordSettingDTO.fromJson(Map<String, dynamic> map) {
		return ReferralRecordSettingDTO( 
			referralRecordSettingCode: map['ReferralRecordSettingCode'],
			limitHours: double.parse(map['LimitHours'].toString()),
			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 (referralRecordSettingCode != null)
			map['ReferralRecordSettingCode'] = referralRecordSettingCode;
		map['LimitHours'] = limitHours;
		return map;
	}
}

class ProjectOrganizationDTO {
	String? organizationName;
	String? organizationCode;
	String? thirdCode;

	ProjectOrganizationDTO({
		this.organizationName,
		this.organizationCode,
		this.thirdCode,
	});

	factory ProjectOrganizationDTO.fromJson(Map<String, dynamic> map) {
		return ProjectOrganizationDTO( 
			organizationName: map['OrganizationName'],
			organizationCode: map['OrganizationCode'],
			thirdCode: map['ThirdCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (organizationName != null) {
			map['OrganizationName'] = organizationName;
		}
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (thirdCode != null) {
			map['ThirdCode'] = thirdCode;
		}
		return map;
	}
}

class ProjectPosterDTO {
	ProjectDataTypeEnum dataType;
	String? apiUrl;
	int timeoutSeconds;
	String? pushHeaders;
	String? pushTemplate;

	ProjectPosterDTO({
		this.dataType = ProjectDataTypeEnum.Organization,
		this.apiUrl,
		this.timeoutSeconds = 0,
		this.pushHeaders,
		this.pushTemplate,
	});

	factory ProjectPosterDTO.fromJson(Map<String, dynamic> map) {
		return ProjectPosterDTO( 
			dataType: ProjectDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
			apiUrl: map['ApiUrl'],
			timeoutSeconds: map['TimeoutSeconds'],
			pushHeaders: map['PushHeaders'],
			pushTemplate: map['PushTemplate'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DataType'] = dataType.index;
		if (apiUrl != null) {
			map['ApiUrl'] = apiUrl;
		}
		map['TimeoutSeconds'] = timeoutSeconds;
		if (pushHeaders != null) {
			map['PushHeaders'] = pushHeaders;
		}
		if (pushTemplate != null) {
			map['PushTemplate'] = pushTemplate;
		}
		return map;
	}
}

class ProjectInfoDTO extends BaseDTO{
	String? code;
	String? name;
	ProjectPushTypeEnum pushType;
	bool isChinaMainland;
	String? contactName;
	String? contactPhone;
	List<ProjectOrganizationDTO>? organizationInfos;
	List<ProjectPosterDTO>? posterInfos;

	ProjectInfoDTO({
		this.code,
		this.name,
		this.pushType = ProjectPushTypeEnum.Default,
		this.isChinaMainland = false,
		this.contactName,
		this.contactPhone,
		this.organizationInfos,
		this.posterInfos,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ProjectInfoDTO.fromJson(Map<String, dynamic> map) {
		return ProjectInfoDTO( 
			code: map['Code'],
			name: map['Name'],
			pushType: ProjectPushTypeEnum.values.firstWhere((e) => e.index == map['PushType']),
			isChinaMainland: map['IsChinaMainland'],
			contactName: map['ContactName'],
			contactPhone: map['ContactPhone'],
			organizationInfos: map['OrganizationInfos'] != null ? (map['OrganizationInfos'] as List).map((e)=>ProjectOrganizationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			posterInfos: map['PosterInfos'] != null ? (map['PosterInfos'] as List).map((e)=>ProjectPosterDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (name != null)
			map['Name'] = name;
		map['PushType'] = pushType.index;
		map['IsChinaMainland'] = isChinaMainland;
		if (contactName != null)
			map['ContactName'] = contactName;
		if (contactPhone != null)
			map['ContactPhone'] = contactPhone;
		if (organizationInfos != null)
			map['OrganizationInfos'] = organizationInfos;
		if (posterInfos != null)
			map['PosterInfos'] = posterInfos;
		return map;
	}
}

class ProjectPushRecordDTO extends BaseDTO{
	String? code;
	String? projectCode;
	String? projectName;
	ProjectPushTypeEnum pushType;
	bool isChinaMainland;
	bool isDistributeHandle;
	ProjectDataTypeEnum dataType;
	String? apiUrl;
	int timeoutSeconds;
	String? pushHeaders;
	String? pushTemplate;
	String? dataName;
	String? dataCode;
	List<DataItemDTO>? relationDatas;
	ProjectPushStatusEnum pushStatus;
	DateTime? pushTime;
	String? pushDatas;
	String? resultContent;

	ProjectPushRecordDTO({
		this.code,
		this.projectCode,
		this.projectName,
		this.pushType = ProjectPushTypeEnum.Default,
		this.isChinaMainland = false,
		this.isDistributeHandle = false,
		this.dataType = ProjectDataTypeEnum.Organization,
		this.apiUrl,
		this.timeoutSeconds = 0,
		this.pushHeaders,
		this.pushTemplate,
		this.dataName,
		this.dataCode,
		this.relationDatas,
		this.pushStatus = ProjectPushStatusEnum.NotSend,
		this.pushTime,
		this.pushDatas,
		this.resultContent,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ProjectPushRecordDTO.fromJson(Map<String, dynamic> map) {
		return ProjectPushRecordDTO( 
			code: map['Code'],
			projectCode: map['ProjectCode'],
			projectName: map['ProjectName'],
			pushType: ProjectPushTypeEnum.values.firstWhere((e) => e.index == map['PushType']),
			isChinaMainland: map['IsChinaMainland'],
			isDistributeHandle: map['IsDistributeHandle'],
			dataType: ProjectDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
			apiUrl: map['ApiUrl'],
			timeoutSeconds: map['TimeoutSeconds'],
			pushHeaders: map['PushHeaders'],
			pushTemplate: map['PushTemplate'],
			dataName: map['DataName'],
			dataCode: map['DataCode'],
			relationDatas: map['RelationDatas'] != null ? (map['RelationDatas'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			pushStatus: ProjectPushStatusEnum.values.firstWhere((e) => e.index == map['PushStatus']),
			pushTime: map['PushTime'] != null ? DateTime.parse(map['PushTime']) : null,
			pushDatas: map['PushDatas'],
			resultContent: map['ResultContent'],
			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 (projectCode != null)
			map['ProjectCode'] = projectCode;
		if (projectName != null)
			map['ProjectName'] = projectName;
		map['PushType'] = pushType.index;
		map['IsChinaMainland'] = isChinaMainland;
		map['IsDistributeHandle'] = isDistributeHandle;
		map['DataType'] = dataType.index;
		if (apiUrl != null)
			map['ApiUrl'] = apiUrl;
		map['TimeoutSeconds'] = timeoutSeconds;
		if (pushHeaders != null)
			map['PushHeaders'] = pushHeaders;
		if (pushTemplate != null)
			map['PushTemplate'] = pushTemplate;
		if (dataName != null)
			map['DataName'] = dataName;
		if (dataCode != null)
			map['DataCode'] = dataCode;
		if (relationDatas != null)
			map['RelationDatas'] = relationDatas;
		map['PushStatus'] = pushStatus.index;
		if (pushTime != null)
			map['PushTime'] = JsonRpcUtils.dateFormat(pushTime!);
		if (pushDatas != null)
			map['PushDatas'] = pushDatas;
		if (resultContent != null)
			map['ResultContent'] = resultContent;
		return map;
	}
}

class CreatePaymentRecordResultDTO {
	String? paymentRecordCode;

	CreatePaymentRecordResultDTO({
		this.paymentRecordCode,
	});

	factory CreatePaymentRecordResultDTO.fromJson(Map<String, dynamic> map) {
		return CreatePaymentRecordResultDTO( 
			paymentRecordCode: map['PaymentRecordCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (paymentRecordCode != null) {
			map['PaymentRecordCode'] = paymentRecordCode;
		}
		return map;
	}
}

class CreateProductDTO extends BaseDTO{
	String? productCode;

	CreateProductDTO({
		this.productCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CreateProductDTO.fromJson(Map<String, dynamic> map) {
		return CreateProductDTO( 
			productCode: map['ProductCode'],
			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 (productCode != null)
			map['ProductCode'] = productCode;
		return map;
	}
}

class PaymentRecordDTO extends BaseDTO{
	String? orderCode;
	double payAmount;
	DateTime? payTime;
	PayStatusEnum payStatus;
	PayTypeEnum payType;
	String? payReqContent;
	String? payResContent;

	PaymentRecordDTO({
		this.orderCode,
		this.payAmount = 0,
		this.payTime,
		this.payStatus = PayStatusEnum.NoPay,
		this.payType = PayTypeEnum.Alipay_PAGE,
		this.payReqContent,
		this.payResContent,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory PaymentRecordDTO.fromJson(Map<String, dynamic> map) {
		return PaymentRecordDTO( 
			orderCode: map['OrderCode'],
			payAmount: double.parse(map['PayAmount'].toString()),
			payTime: map['PayTime'] != null ? DateTime.parse(map['PayTime']) : null,
			payStatus: PayStatusEnum.values.firstWhere((e) => e.index == map['PayStatus']),
			payType: PayTypeEnum.values.firstWhere((e) => e.index == map['PayType']),
			payReqContent: map['PayReqContent'],
			payResContent: map['PayResContent'],
			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 (orderCode != null)
			map['OrderCode'] = orderCode;
		map['PayAmount'] = payAmount;
		if (payTime != null)
			map['PayTime'] = JsonRpcUtils.dateFormat(payTime!);
		map['PayStatus'] = payStatus.index;
		map['PayType'] = payType.index;
		if (payReqContent != null)
			map['PayReqContent'] = payReqContent;
		if (payResContent != null)
			map['PayResContent'] = payResContent;
		return map;
	}
}

class ProductDetailDTO extends BaseDTO{
	String? code;
	String? name;
	String? headImage;
	double price;
	ProductStatusEnum status;
	ProductTypeEnum productType;
	String? belongerCode;
	String? relationInfo;

	ProductDetailDTO({
		this.code,
		this.name,
		this.headImage,
		this.price = 0,
		this.status = ProductStatusEnum.SoldOut,
		this.productType = ProductTypeEnum.Course,
		this.belongerCode,
		this.relationInfo,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ProductDetailDTO.fromJson(Map<String, dynamic> map) {
		return ProductDetailDTO( 
			code: map['Code'],
			name: map['Name'],
			headImage: map['HeadImage'],
			price: double.parse(map['Price'].toString()),
			status: ProductStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			productType: ProductTypeEnum.values.firstWhere((e) => e.index == map['ProductType']),
			belongerCode: map['BelongerCode'],
			relationInfo: map['RelationInfo'],
			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 (name != null)
			map['Name'] = name;
		if (headImage != null)
			map['HeadImage'] = headImage;
		map['Price'] = price;
		map['Status'] = status.index;
		map['ProductType'] = productType.index;
		if (belongerCode != null)
			map['BelongerCode'] = belongerCode;
		if (relationInfo != null)
			map['RelationInfo'] = relationInfo;
		return map;
	}
}

class UpdateOrderResultDTO {
	bool isSuccess;

	UpdateOrderResultDTO({
		this.isSuccess = false,
	});

	factory UpdateOrderResultDTO.fromJson(Map<String, dynamic> map) {
		return UpdateOrderResultDTO( 
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		return map;
	}
}

class UpdatePaymentRecordResultDTO {
	bool isSuccess;

	UpdatePaymentRecordResultDTO({
		this.isSuccess = false,
	});

	factory UpdatePaymentRecordResultDTO.fromJson(Map<String, dynamic> map) {
		return UpdatePaymentRecordResultDTO( 
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		return map;
	}
}

class UpdateProductDTO {
	bool isSuccess;

	UpdateProductDTO({
		this.isSuccess = false,
	});

	factory UpdateProductDTO.fromJson(Map<String, dynamic> map) {
		return UpdateProductDTO( 
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['IsSuccess'] = isSuccess;
		return map;
	}
}

class StatisticDetailSettingDTO {
	String? cMSTemplateCode;

	StatisticDetailSettingDTO({
		this.cMSTemplateCode,
	});

	factory StatisticDetailSettingDTO.fromJson(Map<String, dynamic> map) {
		return StatisticDetailSettingDTO( 
			cMSTemplateCode: map['CMSTemplateCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (cMSTemplateCode != null) {
			map['CMSTemplateCode'] = cMSTemplateCode;
		}
		return map;
	}
}

class ClientInfoDTO {
	String? clientId;
	String? name;
	bool isReaded;
	DateTime? deliveryTime;
	DateTime? readTime;

	ClientInfoDTO({
		this.clientId,
		this.name,
		this.isReaded = false,
		this.deliveryTime,
		this.readTime,
	});

	factory ClientInfoDTO.fromJson(Map<String, dynamic> map) {
		return ClientInfoDTO( 
			clientId: map['ClientId'],
			name: map['Name'],
			isReaded: map['IsReaded'],
			deliveryTime: map['DeliveryTime'] != null ? DateTime.parse(map['DeliveryTime']) : null,
			readTime: map['ReadTime'] != null ? DateTime.parse(map['ReadTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (clientId != null) {
			map['ClientId'] = clientId;
		}
		if (name != null) {
			map['Name'] = name;
		}
		map['IsReaded'] = isReaded;
		if (deliveryTime != null) {
			map['DeliveryTime'] = JsonRpcUtils.dateFormat(deliveryTime!);
		}
		if (readTime != null) {
			map['ReadTime'] = JsonRpcUtils.dateFormat(readTime!);
		}
		return map;
	}
}

class MessageInfoDTO extends BaseDTO{
	String? code;
	NotificationTypeEnum notificationType;
	String? content;
	String? serverHost;
	DateTime? notifyTime;
	ApplicantTypeEnum receiverType;
	TransactionTypeEnum transactionType;
	String? relevanceCode;
	List<ClientInfoDTO>? clientInfos;

	MessageInfoDTO({
		this.code,
		this.notificationType = NotificationTypeEnum.Unknown,
		this.content,
		this.serverHost,
		this.notifyTime,
		this.receiverType = ApplicantTypeEnum.Client,
		this.transactionType = TransactionTypeEnum.Consultion,
		this.relevanceCode,
		this.clientInfos,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory MessageInfoDTO.fromJson(Map<String, dynamic> map) {
		return MessageInfoDTO( 
			code: map['Code'],
			notificationType: NotificationTypeEnum.values.firstWhere((e) => e.index == map['NotificationType']),
			content: map['Content'],
			serverHost: map['ServerHost'],
			notifyTime: map['NotifyTime'] != null ? DateTime.parse(map['NotifyTime']) : null,
			receiverType: ApplicantTypeEnum.values.firstWhere((e) => e.index == map['ReceiverType']),
			transactionType: TransactionTypeEnum.values.firstWhere((e) => e.index == map['TransactionType']),
			relevanceCode: map['RelevanceCode'],
			clientInfos: map['ClientInfos'] != null ? (map['ClientInfos'] as List).map((e)=>ClientInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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;
		map['NotificationType'] = notificationType.index;
		if (content != null)
			map['Content'] = content;
		if (serverHost != null)
			map['ServerHost'] = serverHost;
		if (notifyTime != null)
			map['NotifyTime'] = JsonRpcUtils.dateFormat(notifyTime!);
		map['ReceiverType'] = receiverType.index;
		map['TransactionType'] = transactionType.index;
		if (relevanceCode != null)
			map['RelevanceCode'] = relevanceCode;
		if (clientInfos != null)
			map['ClientInfos'] = clientInfos;
		return map;
	}
}

class OutputUnitDTO {
	int unit;

	OutputUnitDTO({
		this.unit = 0,
	});

	factory OutputUnitDTO.fromJson(Map<String, dynamic> map) {
		return OutputUnitDTO( 
			unit: map['Unit'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Unit'] = unit;
		return map;
	}
}

class FormularMetaDTO {
	String? name;

	FormularMetaDTO({
		this.name,
	});

	factory FormularMetaDTO.fromJson(Map<String, dynamic> map) {
		return FormularMetaDTO( 
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class MeasuredValueDTO {
	String? typeName;
	String? name;
	String? description;
	bool worksheetAffinity;
	String? briefDescription;
	String? value;
	Unit unit;
	Unit targetUnit;

	MeasuredValueDTO({
		this.typeName,
		this.name,
		this.description,
		this.worksheetAffinity = false,
		this.briefDescription,
		this.value,
		this.unit = Unit.None,
		this.targetUnit = Unit.None,
	});

	factory MeasuredValueDTO.fromJson(Map<String, dynamic> map) {
		return MeasuredValueDTO( 
			typeName: map['TypeName'],
			name: map['Name'],
			description: map['Description'],
			worksheetAffinity: map['WorksheetAffinity'],
			briefDescription: map['BriefDescription'],
			value: map['Value'],
			unit: Unit.values.firstWhere((e) => e.index == map['Unit']),
			targetUnit: Unit.values.firstWhere((e) => e.index == map['TargetUnit']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (typeName != null) {
			map['TypeName'] = typeName;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (description != null) {
			map['Description'] = description;
		}
		map['WorksheetAffinity'] = worksheetAffinity;
		if (briefDescription != null) {
			map['BriefDescription'] = briefDescription;
		}
		if (value != null) {
			map['Value'] = value;
		}
		map['Unit'] = unit.index;
		map['TargetUnit'] = targetUnit.index;
		return map;
	}
}

class MeasuredFeatureDTO {
	String? typeName;
	String? creator;
	String? guid;
	bool showChildFeatures;
	DateTime? timeStamp;
	bool isAutoCalculated;
	List<MeasuredValueDTO>? values;
	List<MeasuredFeatureDTO>? childFeatures;

	MeasuredFeatureDTO({
		this.typeName,
		this.creator,
		this.guid,
		this.showChildFeatures = false,
		this.timeStamp,
		this.isAutoCalculated = false,
		this.values,
		this.childFeatures,
	});

	factory MeasuredFeatureDTO.fromJson(Map<String, dynamic> map) {
		return MeasuredFeatureDTO( 
			typeName: map['TypeName'],
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (typeName != null) {
			map['TypeName'] = typeName;
		}
		if (creator != null) {
			map['Creator'] = creator;
		}
		if (guid != null) {
			map['Guid'] = guid;
		}
		map['ShowChildFeatures'] = showChildFeatures;
		if (timeStamp != null) {
			map['TimeStamp'] = JsonRpcUtils.dateFormat(timeStamp!);
		}
		map['IsAutoCalculated'] = isAutoCalculated;
		if (values != null) {
			map['Values'] = values;
		}
		if (childFeatures != null) {
			map['ChildFeatures'] = childFeatures;
		}
		return map;
	}
}

class MeasureExportRecordDTO {
	String? code;
	String? languageCode;
	String? recordCode;
	List<MeasureExportDetailDTO>? remedicalMeasuredInfos;
	String? exportFileToken;
	DateTime? createTime;
	DateTime? updateTime;
	MeasureImageRecordTypeEnum recordType;
	bool isCompleted;

	MeasureExportRecordDTO({
		this.code,
		this.languageCode,
		this.recordCode,
		this.remedicalMeasuredInfos,
		this.exportFileToken,
		this.createTime,
		this.updateTime,
		this.recordType = MeasureImageRecordTypeEnum.ExportExcel,
		this.isCompleted = false,
	});

	factory MeasureExportRecordDTO.fromJson(Map<String, dynamic> map) {
		return MeasureExportRecordDTO( 
			code: map['Code'],
			languageCode: map['LanguageCode'],
			recordCode: map['RecordCode'],
			remedicalMeasuredInfos: map['RemedicalMeasuredInfos'] != null ? (map['RemedicalMeasuredInfos'] as List).map((e)=>MeasureExportDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			exportFileToken: map['ExportFileToken'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
			recordType: MeasureImageRecordTypeEnum.values.firstWhere((e) => e.index == map['RecordType']),
			isCompleted: map['IsCompleted'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		if (recordCode != null) {
			map['RecordCode'] = recordCode;
		}
		if (remedicalMeasuredInfos != null) {
			map['RemedicalMeasuredInfos'] = remedicalMeasuredInfos;
		}
		if (exportFileToken != null) {
			map['ExportFileToken'] = exportFileToken;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (updateTime != null) {
			map['UpdateTime'] = JsonRpcUtils.dateFormat(updateTime!);
		}
		map['RecordType'] = recordType.index;
		map['IsCompleted'] = isCompleted;
		return map;
	}
}

class MeasureItemDTO {
	String? name;
	String? description;
	String? briefAnnotation;
	String? typeName;

	MeasureItemDTO({
		this.name,
		this.description,
		this.briefAnnotation,
		this.typeName,
	});

	factory MeasureItemDTO.fromJson(Map<String, dynamic> map) {
		return MeasureItemDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (description != null) {
			map['Description'] = description;
		}
		if (briefAnnotation != null) {
			map['BriefAnnotation'] = briefAnnotation;
		}
		if (typeName != null) {
			map['TypeName'] = typeName;
		}
		return map;
	}
}

class MeasureResultExcelDTO {
	String? number;
	String? measureItem;
	String? measureResult;

	MeasureResultExcelDTO({
		this.number,
		this.measureItem,
		this.measureResult,
	});

	factory MeasureResultExcelDTO.fromJson(Map<String, dynamic> map) {
		return MeasureResultExcelDTO( 
			number: map['Number'],
			measureItem: map['MeasureItem'],
			measureResult: map['MeasureResult'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (number != null) {
			map['Number'] = number;
		}
		if (measureItem != null) {
			map['MeasureItem'] = measureItem;
		}
		if (measureResult != null) {
			map['MeasureResult'] = measureResult;
		}
		return map;
	}
}

class MultiMethodItemDTO extends MeasureItemDTO{

	MultiMethodItemDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory MultiMethodItemDTO.fromJson(Map<String, dynamic> map) {
		return MultiMethodItemDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class UserDefinedMeasureApplicationDTO {
	String? version;
	String? id;
	String? categoryName;
	List<UserDefinedMeasureModeDTO>? modes;

	UserDefinedMeasureApplicationDTO({
		this.version,
		this.id,
		this.categoryName,
		this.modes,
	});

	factory UserDefinedMeasureApplicationDTO.fromJson(Map<String, dynamic> map) {
		return UserDefinedMeasureApplicationDTO( 
			version: map['Version'],
			id: map['Id'],
			categoryName: map['CategoryName'],
			modes: map['Modes'] != null ? (map['Modes'] as List).map((e)=>UserDefinedMeasureModeDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (version != null) {
			map['Version'] = version;
		}
		if (id != null) {
			map['Id'] = id;
		}
		if (categoryName != null) {
			map['CategoryName'] = categoryName;
		}
		if (modes != null) {
			map['Modes'] = modes;
		}
		return map;
	}
}

class UserDefinedCommentDataDTO {
	String? version;
	String? languageCode;
	String? categoryName;
	String? applicationName;
	List<CommentItemDTO>? commentItems;

	UserDefinedCommentDataDTO({
		this.version,
		this.languageCode,
		this.categoryName,
		this.applicationName,
		this.commentItems,
	});

	factory UserDefinedCommentDataDTO.fromJson(Map<String, dynamic> map) {
		return UserDefinedCommentDataDTO( 
			version: map['Version'],
			languageCode: map['LanguageCode'],
			categoryName: map['CategoryName'],
			applicationName: map['ApplicationName'],
			commentItems: map['CommentItems'] != null ? (map['CommentItems'] as List).map((e)=>CommentItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (version != null) {
			map['Version'] = version;
		}
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		if (categoryName != null) {
			map['CategoryName'] = categoryName;
		}
		if (applicationName != null) {
			map['ApplicationName'] = applicationName;
		}
		if (commentItems != null) {
			map['CommentItems'] = commentItems;
		}
		return map;
	}
}

class UserDefinedMeasureInfoDTO {
	String? userId;
	Map<String,String>? systemSettings;
	List<UserDefinedMeasureApplicationDTO>? measureApplications;
	List<UserDefinedCommentDataDTO>? commentItems;

	UserDefinedMeasureInfoDTO({
		this.userId,
		this.systemSettings,
		this.measureApplications,
		this.commentItems,
	});

	factory UserDefinedMeasureInfoDTO.fromJson(Map<String, dynamic> map) {
		return UserDefinedMeasureInfoDTO( 
			userId: map['UserId'],
			systemSettings: map['SystemSettings']?.cast<String,String>(),
			measureApplications: map['MeasureApplications'] != null ? (map['MeasureApplications'] as List).map((e)=>UserDefinedMeasureApplicationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			commentItems: map['CommentItems'] != null ? (map['CommentItems'] as List).map((e)=>UserDefinedCommentDataDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userId != null) {
			map['UserId'] = userId;
		}
		if (systemSettings != null) {
			map['SystemSettings'] = systemSettings;
		}
		if (measureApplications != null) {
			map['MeasureApplications'] = measureApplications;
		}
		if (commentItems != null) {
			map['CommentItems'] = commentItems;
		}
		return map;
	}
}

class AbRatioDTO extends MultiMethodItemDTO{

	AbRatioDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory AbRatioDTO.fromJson(Map<String, dynamic> map) {
		return AbRatioDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class AngleDTO extends MeasureItemDTO{

	AngleDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory AngleDTO.fromJson(Map<String, dynamic> map) {
		return AngleDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class AreaPerimeterDTO extends MultiMethodItemDTO{

	AreaPerimeterDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory AreaPerimeterDTO.fromJson(Map<String, dynamic> map) {
		return AreaPerimeterDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class CircleDTO extends MeasureItemDTO{

	CircleDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory CircleDTO.fromJson(Map<String, dynamic> map) {
		return CircleDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class CurveLengthDTO extends MultiMethodItemDTO{

	CurveLengthDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory CurveLengthDTO.fromJson(Map<String, dynamic> map) {
		return CurveLengthDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class EllipseDTO extends MeasureItemDTO{

	EllipseDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory EllipseDTO.fromJson(Map<String, dynamic> map) {
		return EllipseDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class LocationDTO extends MeasureItemDTO{

	LocationDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory LocationDTO.fromJson(Map<String, dynamic> map) {
		return LocationDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class LWHStraightLineDTO extends MeasureItemDTO{

	LWHStraightLineDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory LWHStraightLineDTO.fromJson(Map<String, dynamic> map) {
		return LWHStraightLineDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class PolylineDTO extends MeasureItemDTO{

	PolylineDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory PolylineDTO.fromJson(Map<String, dynamic> map) {
		return PolylineDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class RectDTO extends MeasureItemDTO{

	RectDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory RectDTO.fromJson(Map<String, dynamic> map) {
		return RectDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class StenosisDTO extends MultiMethodItemDTO{

	StenosisDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory StenosisDTO.fromJson(Map<String, dynamic> map) {
		return StenosisDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class StraightLineDTO extends MeasureItemDTO{

	StraightLineDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory StraightLineDTO.fromJson(Map<String, dynamic> map) {
		return StraightLineDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class VolumeDTO extends MultiMethodItemDTO{

	VolumeDTO({
		String? name,
		String? description,
		String? briefAnnotation,
		String? typeName,
	}) : super(
			name: name,
			description: description,
			briefAnnotation: briefAnnotation,
			typeName: typeName,
		);

	factory VolumeDTO.fromJson(Map<String, dynamic> map) {
		return VolumeDTO( 
			name: map['Name'],
			description: map['Description'],
			briefAnnotation: map['BriefAnnotation'],
			typeName: map['TypeName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class CardiacAxisFeatureDTO extends MeasuredFeatureDTO{
	String? logicalName;
	String? logicalMode;

	CardiacAxisFeatureDTO({
		String? typeName,
		this.logicalName,
		this.logicalMode,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory CardiacAxisFeatureDTO.fromJson(Map<String, dynamic> map) {
		return CardiacAxisFeatureDTO( 
			typeName: map['TypeName'],
			logicalName: map['LogicalName'],
			logicalMode: map['LogicalMode'],
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (logicalName != null)
			map['LogicalName'] = logicalName;
		if (logicalMode != null)
			map['LogicalMode'] = logicalMode;
		return map;
	}
}

class CustomCalculatorFeatureDTO extends MeasuredFeatureDTO{
	String? logicalName;
	String? logicalMode;

	CustomCalculatorFeatureDTO({
		String? typeName,
		this.logicalName,
		this.logicalMode,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory CustomCalculatorFeatureDTO.fromJson(Map<String, dynamic> map) {
		return CustomCalculatorFeatureDTO( 
			typeName: map['TypeName'],
			logicalName: map['LogicalName'],
			logicalMode: map['LogicalMode'],
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (logicalName != null)
			map['LogicalName'] = logicalName;
		if (logicalMode != null)
			map['LogicalMode'] = logicalMode;
		return map;
	}
}

class GeometryFeatureDTO extends MeasuredFeatureDTO{
	bool isVisible;
	String? annotation;
	String? briefAnnotation;
	Unit xUnit;
	Unit yUnit;
	bool showAnnotation;
	bool showCalliper;
	List<PointDTO>? points;

	GeometryFeatureDTO({
		this.isVisible = false,
		this.annotation,
		this.briefAnnotation,
		this.xUnit = Unit.None,
		this.yUnit = Unit.None,
		this.showAnnotation = false,
		this.showCalliper = false,
		this.points,
		String? typeName,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory GeometryFeatureDTO.fromJson(Map<String, dynamic> map) {
		return GeometryFeatureDTO( 
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			typeName: map['TypeName'],
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsVisible'] = isVisible;
		if (annotation != null)
			map['Annotation'] = annotation;
		if (briefAnnotation != null)
			map['BriefAnnotation'] = briefAnnotation;
		map['XUnit'] = xUnit.index;
		map['YUnit'] = yUnit.index;
		map['ShowAnnotation'] = showAnnotation;
		map['ShowCalliper'] = showCalliper;
		if (points != null)
			map['Points'] = points;
		return map;
	}
}

class CardiacCycleDTO {
	int index;
	PointDTO? systoleStart;
	PointDTO? diastoleEnd;
	PointDTO? peakSystolic;
	PointDTO? minimumAbsoluteVelocity;

	CardiacCycleDTO({
		this.index = 0,
		this.systoleStart,
		this.diastoleEnd,
		this.peakSystolic,
		this.minimumAbsoluteVelocity,
	});

	factory CardiacCycleDTO.fromJson(Map<String, dynamic> map) {
		return CardiacCycleDTO( 
			index: map['Index'],
			systoleStart: map['SystoleStart'] != null ? PointDTO.fromJson(map['SystoleStart']) : null,
			diastoleEnd: map['DiastoleEnd'] != null ? PointDTO.fromJson(map['DiastoleEnd']) : null,
			peakSystolic: map['PeakSystolic'] != null ? PointDTO.fromJson(map['PeakSystolic']) : null,
			minimumAbsoluteVelocity: map['MinimumAbsoluteVelocity'] != null ? PointDTO.fromJson(map['MinimumAbsoluteVelocity']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Index'] = index;
		if (systoleStart != null) {
			map['SystoleStart'] = systoleStart;
		}
		if (diastoleEnd != null) {
			map['DiastoleEnd'] = diastoleEnd;
		}
		if (peakSystolic != null) {
			map['PeakSystolic'] = peakSystolic;
		}
		if (minimumAbsoluteVelocity != null) {
			map['MinimumAbsoluteVelocity'] = minimumAbsoluteVelocity;
		}
		return map;
	}
}

class GrowthPercentileDTO {
	int oBTableCategory;
	String? tableAuthor;
	String? measureItem;
	int gAinDays;
	int status;
	double value;
	double tableDataLimitation;
	double zScoreValue;
	int zScoreStatus;

	GrowthPercentileDTO({
		this.oBTableCategory = 0,
		this.tableAuthor,
		this.measureItem,
		this.gAinDays = 0,
		this.status = 0,
		this.value = 0,
		this.tableDataLimitation = 0,
		this.zScoreValue = 0,
		this.zScoreStatus = 0,
	});

	factory GrowthPercentileDTO.fromJson(Map<String, dynamic> map) {
		return GrowthPercentileDTO( 
			oBTableCategory: map['OBTableCategory'],
			tableAuthor: map['TableAuthor'],
			measureItem: map['MeasureItem'],
			gAinDays: map['GAinDays'],
			status: map['Status'],
			value: double.parse(map['Value'].toString()),
			tableDataLimitation: double.parse(map['TableDataLimitation'].toString()),
			zScoreValue: double.parse(map['ZScoreValue'].toString()),
			zScoreStatus: map['ZScoreStatus'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['OBTableCategory'] = oBTableCategory;
		if (tableAuthor != null) {
			map['TableAuthor'] = tableAuthor;
		}
		if (measureItem != null) {
			map['MeasureItem'] = measureItem;
		}
		map['GAinDays'] = gAinDays;
		map['Status'] = status;
		map['Value'] = value;
		map['TableDataLimitation'] = tableDataLimitation;
		map['ZScoreValue'] = zScoreValue;
		map['ZScoreStatus'] = zScoreStatus;
		return map;
	}
}

class GrowthAgeDTO {
	int oBTableCategory;
	String? tableAuthor;
	String? measureItem;
	int days;
	int status;
	int minDays;
	int maxDays;

	GrowthAgeDTO({
		this.oBTableCategory = 0,
		this.tableAuthor,
		this.measureItem,
		this.days = 0,
		this.status = 0,
		this.minDays = 0,
		this.maxDays = 0,
	});

	factory GrowthAgeDTO.fromJson(Map<String, dynamic> map) {
		return GrowthAgeDTO( 
			oBTableCategory: map['OBTableCategory'],
			tableAuthor: map['TableAuthor'],
			measureItem: map['MeasureItem'],
			days: map['Days'],
			status: map['Status'],
			minDays: map['MinDays'],
			maxDays: map['MaxDays'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['OBTableCategory'] = oBTableCategory;
		if (tableAuthor != null) {
			map['TableAuthor'] = tableAuthor;
		}
		if (measureItem != null) {
			map['MeasureItem'] = measureItem;
		}
		map['Days'] = days;
		map['Status'] = status;
		map['MinDays'] = minDays;
		map['MaxDays'] = maxDays;
		return map;
	}
}

class FetalGrowthIndexDTO {
	GrowthPercentileDTO? percentile;
	GrowthAgeDTO? growthAge;
	DateTime? estimateDueDate;

	FetalGrowthIndexDTO({
		this.percentile,
		this.growthAge,
		this.estimateDueDate,
	});

	factory FetalGrowthIndexDTO.fromJson(Map<String, dynamic> map) {
		return FetalGrowthIndexDTO( 
			percentile: map['Percentile'] != null ? GrowthPercentileDTO.fromJson(map['Percentile']) : null,
			growthAge: map['GrowthAge'] != null ? GrowthAgeDTO.fromJson(map['GrowthAge']) : null,
			estimateDueDate: map['EstimateDueDate'] != null ? DateTime.parse(map['EstimateDueDate']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (percentile != null) {
			map['Percentile'] = percentile;
		}
		if (growthAge != null) {
			map['GrowthAge'] = growthAge;
		}
		if (estimateDueDate != null) {
			map['EstimateDueDate'] = JsonRpcUtils.dateFormat(estimateDueDate!);
		}
		return map;
	}
}

class FloatValueDTO extends MeasuredValueDTO{
	FetalGrowthIndexDTO? fetalGrowthIndex;
	String? typeName;
	String? name;
	String? description;
	bool worksheetAffinity;
	String? briefDescription;
	String? value;
	Unit unit;
	Unit targetUnit;

	FloatValueDTO({
		this.fetalGrowthIndex,
		this.typeName,
		this.name,
		this.description,
		this.worksheetAffinity = false,
		this.briefDescription,
		this.value,
		this.unit = Unit.None,
		this.targetUnit = Unit.None,
	});

	factory FloatValueDTO.fromJson(Map<String, dynamic> map) {
		return FloatValueDTO( 
			fetalGrowthIndex: map['FetalGrowthIndex'] != null ? FetalGrowthIndexDTO.fromJson(map['FetalGrowthIndex']) : null,
			typeName: map['TypeName'],
			name: map['Name'],
			description: map['Description'],
			worksheetAffinity: map['WorksheetAffinity'],
			briefDescription: map['BriefDescription'],
			value: map['Value'],
			unit: Unit.values.firstWhere((e) => e.index == map['Unit']),
			targetUnit: Unit.values.firstWhere((e) => e.index == map['TargetUnit']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class DopplerTraceFeatureDTO extends GeometryFeatureDTO{
	int avgHeartCycle;
	ASETypeEnum traceType;
	List<PointDTO>? maxTraceLine;
	List<CardiacCycleDTO>? cardiacCycles;
	List<FloatValueDTO>? autoMeasureValues;

	DopplerTraceFeatureDTO({
		String? typeName,
		this.avgHeartCycle = 0,
		this.traceType = ASETypeEnum.Off,
		this.maxTraceLine,
		this.cardiacCycles,
		this.autoMeasureValues,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory DopplerTraceFeatureDTO.fromJson(Map<String, dynamic> map) {
		return DopplerTraceFeatureDTO( 
			typeName: map['TypeName'],
			avgHeartCycle: map['AvgHeartCycle'],
			traceType: ASETypeEnum.values.firstWhere((e) => e.index == map['TraceType']),
			maxTraceLine: map['MaxTraceLine'] != null ? (map['MaxTraceLine'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			cardiacCycles: map['CardiacCycles'] != null ? (map['CardiacCycles'] as List).map((e)=>CardiacCycleDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			autoMeasureValues: map['AutoMeasureValues'] != null ? (map['AutoMeasureValues'] as List).map((e)=>FloatValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['AvgHeartCycle'] = avgHeartCycle;
		map['TraceType'] = traceType.index;
		if (maxTraceLine != null)
			map['MaxTraceLine'] = maxTraceLine;
		if (cardiacCycles != null)
			map['CardiacCycles'] = cardiacCycles;
		if (autoMeasureValues != null)
			map['AutoMeasureValues'] = autoMeasureValues;
		return map;
	}
}

class EllipseFeatureDTO extends GeometryFeatureDTO{
	double angle;

	EllipseFeatureDTO({
		String? typeName,
		this.angle = 0,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory EllipseFeatureDTO.fromJson(Map<String, dynamic> map) {
		return EllipseFeatureDTO( 
			typeName: map['TypeName'],
			angle: double.parse(map['Angle'].toString()),
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Angle'] = angle;
		return map;
	}
}

class AutoMeasureGeometryDTO {
	int index;
	List<PointDTO>? points;

	AutoMeasureGeometryDTO({
		this.index = 0,
		this.points,
	});

	factory AutoMeasureGeometryDTO.fromJson(Map<String, dynamic> map) {
		return AutoMeasureGeometryDTO( 
			index: map['Index'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Index'] = index;
		if (points != null) {
			map['Points'] = points;
		}
		return map;
	}
}

class FollicleShapeFeatureDTO extends GeometryFeatureDTO{
	List<AutoMeasureGeometryDTO>? geometries;

	FollicleShapeFeatureDTO({
		String? typeName,
		this.geometries,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory FollicleShapeFeatureDTO.fromJson(Map<String, dynamic> map) {
		return FollicleShapeFeatureDTO( 
			typeName: map['TypeName'],
			geometries: map['Geometries'] != null ? (map['Geometries'] as List).map((e)=>AutoMeasureGeometryDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (geometries != null)
			map['Geometries'] = geometries;
		return map;
	}
}

class LocationFeatureDTO extends GeometryFeatureDTO{

	LocationFeatureDTO({
		String? typeName,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory LocationFeatureDTO.fromJson(Map<String, dynamic> map) {
		return LocationFeatureDTO( 
			typeName: map['TypeName'],
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class RayFeatureDTO extends LocationFeatureDTO{
	bool isReverse;
	double angle;

	RayFeatureDTO({
		String? typeName,
		this.isReverse = false,
		this.angle = 0,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory RayFeatureDTO.fromJson(Map<String, dynamic> map) {
		return RayFeatureDTO( 
			typeName: map['TypeName'],
			isReverse: map['IsReverse'],
			angle: double.parse(map['Angle'].toString()),
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsReverse'] = isReverse;
		map['Angle'] = angle;
		return map;
	}
}

class ManualTraceFeatureDTO extends GeometryFeatureDTO{

	ManualTraceFeatureDTO({
		String? typeName,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory ManualTraceFeatureDTO.fromJson(Map<String, dynamic> map) {
		return ManualTraceFeatureDTO( 
			typeName: map['TypeName'],
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class PolyLineFeatureDTO extends MeasuredFeatureDTO{
	bool isClosed;
	double splineTension;

	PolyLineFeatureDTO({
		String? typeName,
		this.isClosed = false,
		this.splineTension = 0,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory PolyLineFeatureDTO.fromJson(Map<String, dynamic> map) {
		return PolyLineFeatureDTO( 
			typeName: map['TypeName'],
			isClosed: map['IsClosed'],
			splineTension: double.parse(map['SplineTension'].toString()),
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsClosed'] = isClosed;
		map['SplineTension'] = splineTension;
		return map;
	}
}

class TraceLineFeatureDTO extends PolyLineFeatureDTO{

	TraceLineFeatureDTO({
		String? typeName,
		bool isClosed = false,
		double splineTension = 0,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			isClosed: isClosed,
			splineTension: splineTension,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory TraceLineFeatureDTO.fromJson(Map<String, dynamic> map) {
		return TraceLineFeatureDTO( 
			typeName: map['TypeName'],
			isClosed: map['IsClosed'],
			splineTension: double.parse(map['SplineTension'].toString()),
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class SimpsonPathFeatureDTO extends TraceLineFeatureDTO{
	PointDTO? centerLineMovablePoint;

	SimpsonPathFeatureDTO({
		String? typeName,
		this.centerLineMovablePoint,
		bool isClosed = false,
		double splineTension = 0,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			isClosed: isClosed,
			splineTension: splineTension,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory SimpsonPathFeatureDTO.fromJson(Map<String, dynamic> map) {
		return SimpsonPathFeatureDTO( 
			typeName: map['TypeName'],
			centerLineMovablePoint: map['CenterLineMovablePoint'] != null ? PointDTO.fromJson(map['CenterLineMovablePoint']) : null,
			isClosed: map['IsClosed'],
			splineTension: double.parse(map['SplineTension'].toString()),
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (centerLineMovablePoint != null)
			map['CenterLineMovablePoint'] = centerLineMovablePoint;
		return map;
	}
}

class RectFeatureDTO extends GeometryFeatureDTO{
	bool showRootFeature;
	List<MeasuredFeatureDTO>? autoLines;

	RectFeatureDTO({
		String? typeName,
		this.showRootFeature = false,
		this.autoLines,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory RectFeatureDTO.fromJson(Map<String, dynamic> map) {
		return RectFeatureDTO( 
			typeName: map['TypeName'],
			showRootFeature: map['ShowRootFeature'],
			autoLines: map['AutoLines'] != null ? (map['AutoLines'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['ShowRootFeature'] = showRootFeature;
		if (autoLines != null)
			map['AutoLines'] = autoLines;
		return map;
	}
}

class FollicleRectFeatureDTO extends RectFeatureDTO{

	FollicleRectFeatureDTO({
		String? typeName,
		bool showRootFeature = false,
		List<MeasuredFeatureDTO>? autoLines,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			typeName: typeName,
			showRootFeature: showRootFeature,
			autoLines: autoLines,
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory FollicleRectFeatureDTO.fromJson(Map<String, dynamic> map) {
		return FollicleRectFeatureDTO( 
			typeName: map['TypeName'],
			showRootFeature: map['ShowRootFeature'],
			autoLines: map['AutoLines'] != null ? (map['AutoLines'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class StraightLineFeatureDTO extends GeometryFeatureDTO{
	StraightLineShapeEnum shapeType;
	bool useDashLine;

	StraightLineFeatureDTO({
		String? typeName,
		this.shapeType = StraightLineShapeEnum.StraightLine,
		this.useDashLine = false,
		bool isVisible = false,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory StraightLineFeatureDTO.fromJson(Map<String, dynamic> map) {
		return StraightLineFeatureDTO( 
			typeName: map['TypeName'],
			shapeType: StraightLineShapeEnum.values.firstWhere((e) => e.index == map['ShapeType']),
			useDashLine: map['UseDashLine'],
			isVisible: map['IsVisible'],
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['ShapeType'] = shapeType.index;
		map['UseDashLine'] = useDashLine;
		return map;
	}
}

class VasPlaqueSplitterFeatureDTO extends GeometryFeatureDTO{
	int maxZoneCount;
	int currentZoneCount;
	int angle;
	List<PointDTO>? splitterLinesPoints;

	VasPlaqueSplitterFeatureDTO({
		String? typeName,
		this.maxZoneCount = 0,
		this.currentZoneCount = 0,
		this.angle = 0,
		bool isVisible = false,
		this.splitterLinesPoints,
		String? annotation,
		String? briefAnnotation,
		Unit xUnit = Unit.None,
		Unit yUnit = Unit.None,
		bool showAnnotation = false,
		bool showCalliper = false,
		List<PointDTO>? points,
		String? creator,
		String? guid,
		bool showChildFeatures = false,
		DateTime? timeStamp,
		bool isAutoCalculated = false,
		List<MeasuredValueDTO>? values,
		List<MeasuredFeatureDTO>? childFeatures,
	}) : super(
			isVisible: isVisible,
			annotation: annotation,
			briefAnnotation: briefAnnotation,
			xUnit: xUnit,
			yUnit: yUnit,
			showAnnotation: showAnnotation,
			showCalliper: showCalliper,
			points: points,
			typeName: typeName,
			creator: creator,
			guid: guid,
			showChildFeatures: showChildFeatures,
			timeStamp: timeStamp,
			isAutoCalculated: isAutoCalculated,
			values: values,
			childFeatures: childFeatures,
		);

	factory VasPlaqueSplitterFeatureDTO.fromJson(Map<String, dynamic> map) {
		return VasPlaqueSplitterFeatureDTO( 
			typeName: map['TypeName'],
			maxZoneCount: map['MaxZoneCount'],
			currentZoneCount: map['CurrentZoneCount'],
			angle: map['Angle'],
			isVisible: map['IsVisible'],
			splitterLinesPoints: map['SplitterLinesPoints'] != null ? (map['SplitterLinesPoints'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			annotation: map['Annotation'],
			briefAnnotation: map['BriefAnnotation'],
			xUnit: Unit.values.firstWhere((e) => e.index == map['XUnit']),
			yUnit: Unit.values.firstWhere((e) => e.index == map['YUnit']),
			showAnnotation: map['ShowAnnotation'],
			showCalliper: map['ShowCalliper'],
			points: map['Points'] != null ? (map['Points'] as List).map((e)=>PointDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			creator: map['Creator'],
			guid: map['Guid'],
			showChildFeatures: map['ShowChildFeatures'],
			timeStamp: map['TimeStamp'] != null ? DateTime.parse(map['TimeStamp']) : null,
			isAutoCalculated: map['IsAutoCalculated'],
			values: map['Values'] != null ? (map['Values'] as List).map((e)=>MeasuredValueDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			childFeatures: map['ChildFeatures'] != null ? (map['ChildFeatures'] as List).map((e)=>MeasuredFeatureDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['MaxZoneCount'] = maxZoneCount;
		map['CurrentZoneCount'] = currentZoneCount;
		map['Angle'] = angle;
		if (splitterLinesPoints != null)
			map['SplitterLinesPoints'] = splitterLinesPoints;
		return map;
	}
}

class GrowthNormalRangeDTO {
	String? typeName;
	String? tableAuthor;
	String? measureItem;
	int gAinDays;
	int status;
	double value;
	double minValue;
	double maxValue;
	Unit valueUnit;
	Unit targetUnit;

	GrowthNormalRangeDTO({
		this.typeName,
		this.tableAuthor,
		this.measureItem,
		this.gAinDays = 0,
		this.status = 0,
		this.value = 0,
		this.minValue = 0,
		this.maxValue = 0,
		this.valueUnit = Unit.None,
		this.targetUnit = Unit.None,
	});

	factory GrowthNormalRangeDTO.fromJson(Map<String, dynamic> map) {
		return GrowthNormalRangeDTO( 
			typeName: map['TypeName'],
			tableAuthor: map['TableAuthor'],
			measureItem: map['MeasureItem'],
			gAinDays: map['GAinDays'],
			status: map['Status'],
			value: double.parse(map['Value'].toString()),
			minValue: double.parse(map['MinValue'].toString()),
			maxValue: double.parse(map['MaxValue'].toString()),
			valueUnit: Unit.values.firstWhere((e) => e.index == map['ValueUnit']),
			targetUnit: Unit.values.firstWhere((e) => e.index == map['TargetUnit']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (typeName != null) {
			map['TypeName'] = typeName;
		}
		if (tableAuthor != null) {
			map['TableAuthor'] = tableAuthor;
		}
		if (measureItem != null) {
			map['MeasureItem'] = measureItem;
		}
		map['GAinDays'] = gAinDays;
		map['Status'] = status;
		map['Value'] = value;
		map['MinValue'] = minValue;
		map['MaxValue'] = maxValue;
		map['ValueUnit'] = valueUnit.index;
		map['TargetUnit'] = targetUnit.index;
		return map;
	}
}

class EFWRepresentationDTO extends FloatValueDTO{

	EFWRepresentationDTO({
		FetalGrowthIndexDTO? fetalGrowthIndex,
		String? typeName,
		String? name,
		String? description,
		bool worksheetAffinity = false,
		String? briefDescription,
		String? value,
		Unit unit = Unit.None,
		Unit targetUnit = Unit.None,
	}) : super(
			fetalGrowthIndex: fetalGrowthIndex,
			typeName: typeName,
			name: name,
			description: description,
			worksheetAffinity: worksheetAffinity,
			briefDescription: briefDescription,
			value: value,
			unit: unit,
			targetUnit: targetUnit,
		);

	factory EFWRepresentationDTO.fromJson(Map<String, dynamic> map) {
		return EFWRepresentationDTO( 
			fetalGrowthIndex: map['FetalGrowthIndex'] != null ? FetalGrowthIndexDTO.fromJson(map['FetalGrowthIndex']) : null,
			typeName: map['TypeName'],
			name: map['Name'],
			description: map['Description'],
			worksheetAffinity: map['WorksheetAffinity'],
			briefDescription: map['BriefDescription'],
			value: map['Value'],
			unit: Unit.values.firstWhere((e) => e.index == map['Unit']),
			targetUnit: Unit.values.firstWhere((e) => e.index == map['TargetUnit']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class AdminExtendInfoDTO extends AdminInfoDTO{
	List<String>? roleNames;
	String? defaultRoleCode;
	String? defaultRoleName;
	bool isLocked;

	AdminExtendInfoDTO({
		this.roleNames,
		this.defaultRoleCode,
		this.defaultRoleName,
		this.isLocked = false,
		String? adminCode,
		String? fatherCode,
		String? adminName,
		String? fullName,
		String? secretPassword,
		String? headImageToken,
		String? licenseKey,
		String? lastIP,
		String? phone,
		String? email,
		List<String>? roleCodes,
		LoginLockInfoDTO? loginLockInfo,
		DateTime? passwordUpdateTime,
		List<String>? passwordRecords,
		List<ClearLogOperateDTO>? clearLogOperateList,
		List<String>? assignedOrganizations,
		String? bindUserCode,
		String? bindUserName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminCode: adminCode,
			fatherCode: fatherCode,
			adminName: adminName,
			fullName: fullName,
			secretPassword: secretPassword,
			headImageToken: headImageToken,
			licenseKey: licenseKey,
			lastIP: lastIP,
			phone: phone,
			email: email,
			roleCodes: roleCodes,
			loginLockInfo: loginLockInfo,
			passwordUpdateTime: passwordUpdateTime,
			passwordRecords: passwordRecords,
			clearLogOperateList: clearLogOperateList,
			assignedOrganizations: assignedOrganizations,
			bindUserCode: bindUserCode,
			bindUserName: bindUserName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminExtendInfoDTO.fromJson(Map<String, dynamic> map) {
		return AdminExtendInfoDTO( 
			roleNames: map['RoleNames']?.cast<String>().toList(),
			defaultRoleCode: map['DefaultRoleCode'],
			defaultRoleName: map['DefaultRoleName'],
			isLocked: map['IsLocked'],
			adminCode: map['AdminCode'],
			fatherCode: map['FatherCode'],
			adminName: map['AdminName'],
			fullName: map['FullName'],
			secretPassword: map['SecretPassword'],
			headImageToken: map['HeadImageToken'],
			licenseKey: map['LicenseKey'],
			lastIP: map['LastIP'],
			phone: map['Phone'],
			email: map['Email'],
			roleCodes: map['RoleCodes']?.cast<String>().toList(),
			loginLockInfo: map['LoginLockInfo'] != null ? LoginLockInfoDTO.fromJson(map['LoginLockInfo']) : null,
			passwordUpdateTime: map['PasswordUpdateTime'] != null ? DateTime.parse(map['PasswordUpdateTime']) : null,
			passwordRecords: map['PasswordRecords']?.cast<String>().toList(),
			clearLogOperateList: map['ClearLogOperateList'] != null ? (map['ClearLogOperateList'] as List).map((e)=>ClearLogOperateDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			assignedOrganizations: map['AssignedOrganizations']?.cast<String>().toList(),
			bindUserCode: map['BindUserCode'],
			bindUserName: map['BindUserName'],
			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 (roleNames != null)
			map['RoleNames'] = roleNames;
		if (defaultRoleCode != null)
			map['DefaultRoleCode'] = defaultRoleCode;
		if (defaultRoleName != null)
			map['DefaultRoleName'] = defaultRoleName;
		map['IsLocked'] = isLocked;
		return map;
	}
}

class AdminLoginResult {
	LoginStateEnum loginState;
	String? token;
	int? lockRemainingTimes;
	bool isDistributedServer;
	bool passwordExpired;
	String? adminName;
	bool isEducationService;

	AdminLoginResult({
		this.loginState = LoginStateEnum.Succeed,
		this.token,
		this.lockRemainingTimes,
		this.isDistributedServer = false,
		this.passwordExpired = false,
		this.adminName,
		this.isEducationService = false,
	});

	factory AdminLoginResult.fromJson(Map<String, dynamic> map) {
		return AdminLoginResult( 
			loginState: LoginStateEnum.values.firstWhere((e) => e.index == map['LoginState']),
			token: map['Token'],
			lockRemainingTimes: map['LockRemainingTimes'],
			isDistributedServer: map['IsDistributedServer'],
			passwordExpired: map['PasswordExpired'],
			adminName: map['AdminName'],
			isEducationService: map['IsEducationService'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['LoginState'] = loginState.index;
		if (token != null) {
			map['Token'] = token;
		}
		if (lockRemainingTimes != null) {
			map['LockRemainingTimes'] = lockRemainingTimes;
		}
		map['IsDistributedServer'] = isDistributedServer;
		map['PasswordExpired'] = passwordExpired;
		if (adminName != null) {
			map['AdminName'] = adminName;
		}
		map['IsEducationService'] = isEducationService;
		return map;
	}
}

class WaitDeleteLogBaseDTO2 {
	int daysAgo;
	int percentage;

	WaitDeleteLogBaseDTO2({
		this.daysAgo = 0,
		this.percentage = 0,
	});

	factory WaitDeleteLogBaseDTO2.fromJson(Map<String, dynamic> map) {
		return WaitDeleteLogBaseDTO2( 
			daysAgo: map['DaysAgo'],
			percentage: map['Percentage'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DaysAgo'] = daysAgo;
		map['Percentage'] = percentage;
		return map;
	}
}

class WaitDeleteLogsDTO2 {
	List<WaitDeleteLogBaseDTO2>? waitDeleteLogs;
	int daysAgo;
	bool isLockClear;
	String? requestServerHost;
	DateTime? lastClearTime;
	DateTime? lastClearOperateTime;

	WaitDeleteLogsDTO2({
		this.waitDeleteLogs,
		this.daysAgo = 0,
		this.isLockClear = false,
		this.requestServerHost,
		this.lastClearTime,
		this.lastClearOperateTime,
	});

	factory WaitDeleteLogsDTO2.fromJson(Map<String, dynamic> map) {
		return WaitDeleteLogsDTO2( 
			waitDeleteLogs: map['WaitDeleteLogs'] != null ? (map['WaitDeleteLogs'] as List).map((e)=>WaitDeleteLogBaseDTO2.fromJson(e as Map<String,dynamic>)).toList() : null,
			daysAgo: map['DaysAgo'],
			isLockClear: map['IsLockClear'],
			requestServerHost: map['RequestServerHost'],
			lastClearTime: map['LastClearTime'] != null ? DateTime.parse(map['LastClearTime']) : null,
			lastClearOperateTime: map['LastClearOperateTime'] != null ? DateTime.parse(map['LastClearOperateTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (waitDeleteLogs != null) {
			map['WaitDeleteLogs'] = waitDeleteLogs;
		}
		map['DaysAgo'] = daysAgo;
		map['IsLockClear'] = isLockClear;
		if (requestServerHost != null) {
			map['RequestServerHost'] = requestServerHost;
		}
		if (lastClearTime != null) {
			map['LastClearTime'] = JsonRpcUtils.dateFormat(lastClearTime!);
		}
		if (lastClearOperateTime != null) {
			map['LastClearOperateTime'] = JsonRpcUtils.dateFormat(lastClearOperateTime!);
		}
		return map;
	}
}

class ManageAdminFeatureInfoDTO {
	List<String>? featureCodeList;

	ManageAdminFeatureInfoDTO({
		this.featureCodeList,
	});

	factory ManageAdminFeatureInfoDTO.fromJson(Map<String, dynamic> map) {
		return ManageAdminFeatureInfoDTO( 
			featureCodeList: map['FeatureCodeList']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (featureCodeList != null) {
			map['FeatureCodeList'] = featureCodeList;
		}
		return map;
	}
}

class FeatureDetail {
	String? id;

	FeatureDetail({
		this.id,
	});

	factory FeatureDetail.fromJson(Map<String, dynamic> map) {
		return FeatureDetail( 
			id: map['Id'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		return map;
	}
}

class ManageAdminRoleInfoDTO extends AdminRoleDTO{
	List<FeatureDetail>? featureList;

	ManageAdminRoleInfoDTO({
		this.featureList,
		String? adminGroupCode,
		int adminNum = 0,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminGroupCode: adminGroupCode,
			adminNum: adminNum,
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageAdminRoleInfoDTO.fromJson(Map<String, dynamic> map) {
		return ManageAdminRoleInfoDTO( 
			featureList: map['FeatureList'] != null ? (map['FeatureList'] as List).map((e)=>FeatureDetail.fromJson(e as Map<String,dynamic>)).toList() : null,
			adminGroupCode: map['AdminGroupCode'],
			adminNum: map['AdminNum'],
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (featureList != null)
			map['FeatureList'] = featureList;
		return map;
	}
}

class ManageCreateProductDTO extends CreateProductDTO{

	ManageCreateProductDTO({
		String? productCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			productCode: productCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageCreateProductDTO.fromJson(Map<String, dynamic> map) {
		return ManageCreateProductDTO( 
			productCode: map['ProductCode'],
			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();
		return map;
	}
}

class ManageDeviceInfoDTO extends DeviceInfoDTO{
	String? hospitalName;
	String? departmentName;
	String? directorName;
	String? adminName;
	String? shareUserNum;
	String? deviceModelName;

	ManageDeviceInfoDTO({
		this.hospitalName,
		this.departmentName,
		this.directorName,
		this.adminName,
		this.shareUserNum,
		this.deviceModelName,
		List<DictionaryLanguageConfigDTO>? languageConfigs,
		String? deviceCode,
		String? serialNumber,
		String? password,
		String? name,
		String? description,
		String? deviceModel,
		String? deviceType,
		String? headPicUrl,
		String? deviceSoftwareVersion,
		String? sDKSoftwareVersion,
		String? organizationCode,
		String? departmentCode,
		String? shortCode,
		bool isAutoShared = false,
		bool isEncryptedShow = false,
		DateTime? lastLoginTime,
		String? systemVersion,
		String? cPUModel,
		String? systemLanguage,
		List<String>? diagnosisModules,
		List<String>? reportPosterCodes,
		bool mergedChannel = false,
		int mergedVideoOutputWidth = 0,
		int mergedVideoOutputHeight = 0,
		List<VideoDeviceDTO>? videoDeviceInfos,
		DownloadModeSettingEnum downloadModeSetting = DownloadModeSettingEnum.Auto,
		bool liveOpened = false,
		bool supportRtc = false,
		String? displayName,
		SonopostVersionEnum sonopostVersion = SonopostVersionEnum.Sonopost,
		List<DataItemDTO>? deviceAttributes,
		bool isOnline = false,
		bool isActive = false,
		String? upgradeVersionCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			deviceCode: deviceCode,
			serialNumber: serialNumber,
			password: password,
			name: name,
			description: description,
			deviceModel: deviceModel,
			deviceType: deviceType,
			headPicUrl: headPicUrl,
			deviceSoftwareVersion: deviceSoftwareVersion,
			sDKSoftwareVersion: sDKSoftwareVersion,
			organizationCode: organizationCode,
			departmentCode: departmentCode,
			shortCode: shortCode,
			isAutoShared: isAutoShared,
			isEncryptedShow: isEncryptedShow,
			lastLoginTime: lastLoginTime,
			systemVersion: systemVersion,
			cPUModel: cPUModel,
			systemLanguage: systemLanguage,
			diagnosisModules: diagnosisModules,
			reportPosterCodes: reportPosterCodes,
			mergedChannel: mergedChannel,
			mergedVideoOutputWidth: mergedVideoOutputWidth,
			mergedVideoOutputHeight: mergedVideoOutputHeight,
			videoDeviceInfos: videoDeviceInfos,
			downloadModeSetting: downloadModeSetting,
			liveOpened: liveOpened,
			supportRtc: supportRtc,
			displayName: displayName,
			sonopostVersion: sonopostVersion,
			deviceAttributes: deviceAttributes,
			isOnline: isOnline,
			isActive: isActive,
			languageConfigs: languageConfigs,
			upgradeVersionCode: upgradeVersionCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageDeviceInfoDTO.fromJson(Map<String, dynamic> map) {
		return ManageDeviceInfoDTO( 
			hospitalName: map['HospitalName'],
			departmentName: map['DepartmentName'],
			directorName: map['DirectorName'],
			adminName: map['AdminName'],
			shareUserNum: map['ShareUserNum'],
			deviceModelName: map['DeviceModelName'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>DictionaryLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			deviceCode: map['DeviceCode'],
			serialNumber: map['SerialNumber'],
			password: map['Password'],
			name: map['Name'],
			description: map['Description'],
			deviceModel: map['DeviceModel'],
			deviceType: map['DeviceType'],
			headPicUrl: map['HeadPicUrl'],
			deviceSoftwareVersion: map['DeviceSoftwareVersion'],
			sDKSoftwareVersion: map['SDKSoftwareVersion'],
			organizationCode: map['OrganizationCode'],
			departmentCode: map['DepartmentCode'],
			shortCode: map['ShortCode'],
			isAutoShared: map['IsAutoShared'],
			isEncryptedShow: map['IsEncryptedShow'],
			lastLoginTime: map['LastLoginTime'] != null ? DateTime.parse(map['LastLoginTime']) : null,
			systemVersion: map['SystemVersion'],
			cPUModel: map['CPUModel'],
			systemLanguage: map['SystemLanguage'],
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			reportPosterCodes: map['ReportPosterCodes']?.cast<String>().toList(),
			mergedChannel: map['MergedChannel'],
			mergedVideoOutputWidth: map['MergedVideoOutputWidth'],
			mergedVideoOutputHeight: map['MergedVideoOutputHeight'],
			videoDeviceInfos: map['VideoDeviceInfos'] != null ? (map['VideoDeviceInfos'] as List).map((e)=>VideoDeviceDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			downloadModeSetting: DownloadModeSettingEnum.values.firstWhere((e) => e.index == map['DownloadModeSetting']),
			liveOpened: map['LiveOpened'],
			supportRtc: map['SupportRtc'],
			displayName: map['DisplayName'],
			sonopostVersion: SonopostVersionEnum.values.firstWhere((e) => e.index == map['SonopostVersion']),
			deviceAttributes: map['DeviceAttributes'] != null ? (map['DeviceAttributes'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			isOnline: map['IsOnline'],
			isActive: map['IsActive'],
			upgradeVersionCode: map['UpgradeVersionCode'],
			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 (hospitalName != null)
			map['HospitalName'] = hospitalName;
		if (departmentName != null)
			map['DepartmentName'] = departmentName;
		if (directorName != null)
			map['DirectorName'] = directorName;
		if (adminName != null)
			map['AdminName'] = adminName;
		if (shareUserNum != null)
			map['ShareUserNum'] = shareUserNum;
		if (deviceModelName != null)
			map['DeviceModelName'] = deviceModelName;
		return map;
	}
}

class ManageDeviceTypeDTO {
	String? dictionaryCode;
	String? value;
	List<DictionaryLanguageConfigDTO>? languageConfigs;
	DictionaryTypeEnum dictionaryType;

	ManageDeviceTypeDTO({
		this.dictionaryCode,
		this.value,
		this.languageConfigs,
		this.dictionaryType = DictionaryTypeEnum.DeviceModel,
	});

	factory ManageDeviceTypeDTO.fromJson(Map<String, dynamic> map) {
		return ManageDeviceTypeDTO( 
			dictionaryCode: map['DictionaryCode'],
			value: map['Value'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>DictionaryLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			dictionaryType: DictionaryTypeEnum.values.firstWhere((e) => e.index == map['DictionaryType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (dictionaryCode != null) {
			map['DictionaryCode'] = dictionaryCode;
		}
		if (value != null) {
			map['Value'] = value;
		}
		if (languageConfigs != null) {
			map['LanguageConfigs'] = languageConfigs;
		}
		map['DictionaryType'] = dictionaryType.index;
		return map;
	}
}

class ManageDeviceUserDTO {
	String? userCode;
	String? userName;
	String? phone;
	String? email;
	String? nickName;
	String? fullName;
	String? hospitalName;

	ManageDeviceUserDTO({
		this.userCode,
		this.userName,
		this.phone,
		this.email,
		this.nickName,
		this.fullName,
		this.hospitalName,
	});

	factory ManageDeviceUserDTO.fromJson(Map<String, dynamic> map) {
		return ManageDeviceUserDTO( 
			userCode: map['UserCode'],
			userName: map['UserName'],
			phone: map['Phone'],
			email: map['Email'],
			nickName: map['NickName'],
			fullName: map['FullName'],
			hospitalName: map['HospitalName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (userName != null) {
			map['UserName'] = userName;
		}
		if (phone != null) {
			map['Phone'] = phone;
		}
		if (email != null) {
			map['Email'] = email;
		}
		if (nickName != null) {
			map['NickName'] = nickName;
		}
		if (fullName != null) {
			map['FullName'] = fullName;
		}
		if (hospitalName != null) {
			map['HospitalName'] = hospitalName;
		}
		return map;
	}
}

class ManageOrderDetailDTO extends OrderDetailDTO{

	ManageOrderDetailDTO({
		String? code,
		String? orderUserName,
		String? orderUserCode,
		String? productCode,
		String? tPORderCode,
		String? orderTitle,
		OrderTypeEnum orderType = OrderTypeEnum.General,
		double orderAmount = 0,
		DateTime? payTime,
		PayStatusEnum payStatus = PayStatusEnum.NoPay,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			code: code,
			orderUserName: orderUserName,
			orderUserCode: orderUserCode,
			productCode: productCode,
			tPORderCode: tPORderCode,
			orderTitle: orderTitle,
			orderType: orderType,
			orderAmount: orderAmount,
			payTime: payTime,
			payStatus: payStatus,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageOrderDetailDTO.fromJson(Map<String, dynamic> map) {
		return ManageOrderDetailDTO( 
			code: map['Code'],
			orderUserName: map['OrderUserName'],
			orderUserCode: map['OrderUserCode'],
			productCode: map['ProductCode'],
			tPORderCode: map['TPORderCode'],
			orderTitle: map['OrderTitle'],
			orderType: OrderTypeEnum.values.firstWhere((e) => e.index == map['OrderType']),
			orderAmount: double.parse(map['OrderAmount'].toString()),
			payTime: map['PayTime'] != null ? DateTime.parse(map['PayTime']) : null,
			payStatus: PayStatusEnum.values.firstWhere((e) => e.index == map['PayStatus']),
			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();
		return map;
	}
}

class ManageOrganizationDTO extends OrganizationDTO{
	String? countryName;
	String? provinceName;
	String? cityName;
	String? countryCode;
	String? provinceCode;
	String? cityCode;
	String? directorName;
	String? adminFullName;

	ManageOrganizationDTO({
		this.countryName,
		this.provinceName,
		this.cityName,
		this.countryCode,
		this.provinceCode,
		this.cityCode,
		this.directorName,
		this.adminFullName,
		String? description,
		String? rootCode,
		OrganizationTypeEnum organizationType = OrganizationTypeEnum.Corporation,
		List<String>? authorityGroups,
		String? nautica,
		OrganizationStateEnum state = OrganizationStateEnum.WaitAudit,
		List<String>? directors,
		List<String>? assignedAdmins,
		String? patientSettingJson,
		String? examSettingJson,
		String? consultationSettingJson,
		String? patientSettingVersion,
		String? examSettingVersion,
		String? consultationSettingVersion,
		String? parentOrganizationName,
		String? regionCode,
		String? rootRegionCode,
		String? parentCode,
		String? logoUrl,
		OrganizationPatientTypeEnum patientType = OrganizationPatientTypeEnum.Person,
		bool isinvented = false,
		List<SettingDTOClass>? settings,
		List<String>? diagnosisModules,
		bool isEncryptedShow = false,
		double referralLimitHours = 0,
		List<String>? referralOrganizationCodes,
		List<ReferralOrganizationDTO>? referralOrganizations,
		String? defaultThesaurusCode,
		String? defaultReportTemplateCode,
		bool emergencyNeedFill = false,
		String? emergencySettingVersion,
		String? emergencySettingJson,
		String? organizationCode,
		String? organizationName,
		String? shortCode,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			description: description,
			rootCode: rootCode,
			organizationType: organizationType,
			authorityGroups: authorityGroups,
			nautica: nautica,
			state: state,
			directors: directors,
			assignedAdmins: assignedAdmins,
			patientSettingJson: patientSettingJson,
			examSettingJson: examSettingJson,
			consultationSettingJson: consultationSettingJson,
			patientSettingVersion: patientSettingVersion,
			examSettingVersion: examSettingVersion,
			consultationSettingVersion: consultationSettingVersion,
			parentOrganizationName: parentOrganizationName,
			regionCode: regionCode,
			rootRegionCode: rootRegionCode,
			parentCode: parentCode,
			logoUrl: logoUrl,
			patientType: patientType,
			isinvented: isinvented,
			settings: settings,
			diagnosisModules: diagnosisModules,
			isEncryptedShow: isEncryptedShow,
			referralLimitHours: referralLimitHours,
			referralOrganizationCodes: referralOrganizationCodes,
			referralOrganizations: referralOrganizations,
			defaultThesaurusCode: defaultThesaurusCode,
			defaultReportTemplateCode: defaultReportTemplateCode,
			emergencyNeedFill: emergencyNeedFill,
			emergencySettingVersion: emergencySettingVersion,
			emergencySettingJson: emergencySettingJson,
			organizationCode: organizationCode,
			organizationName: organizationName,
			shortCode: shortCode,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageOrganizationDTO.fromJson(Map<String, dynamic> map) {
		return ManageOrganizationDTO( 
			countryName: map['CountryName'],
			provinceName: map['ProvinceName'],
			cityName: map['CityName'],
			countryCode: map['CountryCode'],
			provinceCode: map['ProvinceCode'],
			cityCode: map['CityCode'],
			directorName: map['DirectorName'],
			adminFullName: map['AdminFullName'],
			description: map['Description'],
			rootCode: map['RootCode'],
			organizationType: OrganizationTypeEnum.values.firstWhere((e) => e.index == map['OrganizationType']),
			authorityGroups: map['AuthorityGroups']?.cast<String>().toList(),
			nautica: map['Nautica'],
			state: OrganizationStateEnum.values.firstWhere((e) => e.index == map['State']),
			directors: map['Directors']?.cast<String>().toList(),
			assignedAdmins: map['AssignedAdmins']?.cast<String>().toList(),
			patientSettingJson: map['PatientSettingJson'],
			examSettingJson: map['ExamSettingJson'],
			consultationSettingJson: map['ConsultationSettingJson'],
			patientSettingVersion: map['PatientSettingVersion'],
			examSettingVersion: map['ExamSettingVersion'],
			consultationSettingVersion: map['ConsultationSettingVersion'],
			parentOrganizationName: map['ParentOrganizationName'],
			regionCode: map['RegionCode'],
			rootRegionCode: map['RootRegionCode'],
			parentCode: map['ParentCode'],
			logoUrl: map['LogoUrl'],
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
			isinvented: map['Isinvented'],
			settings: map['Settings'] != null ? (map['Settings'] as List).map((e)=>SettingDTOClass.fromJson(e as Map<String,dynamic>)).toList() : null,
			diagnosisModules: map['DiagnosisModules']?.cast<String>().toList(),
			isEncryptedShow: map['IsEncryptedShow'],
			referralLimitHours: double.parse(map['ReferralLimitHours'].toString()),
			referralOrganizationCodes: map['ReferralOrganizationCodes']?.cast<String>().toList(),
			referralOrganizations: map['ReferralOrganizations'] != null ? (map['ReferralOrganizations'] as List).map((e)=>ReferralOrganizationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			defaultThesaurusCode: map['DefaultThesaurusCode'],
			defaultReportTemplateCode: map['DefaultReportTemplateCode'],
			emergencyNeedFill: map['EmergencyNeedFill'],
			emergencySettingVersion: map['EmergencySettingVersion'],
			emergencySettingJson: map['EmergencySettingJson'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			shortCode: map['ShortCode'],
			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 (countryName != null)
			map['CountryName'] = countryName;
		if (provinceName != null)
			map['ProvinceName'] = provinceName;
		if (cityName != null)
			map['CityName'] = cityName;
		if (countryCode != null)
			map['CountryCode'] = countryCode;
		if (provinceCode != null)
			map['ProvinceCode'] = provinceCode;
		if (cityCode != null)
			map['CityCode'] = cityCode;
		if (directorName != null)
			map['DirectorName'] = directorName;
		if (adminFullName != null)
			map['AdminFullName'] = adminFullName;
		return map;
	}
}

class ManageOrganizationUserDTO {
	String? userCode;
	String? userName;
	String? phone;
	String? email;
	String? nickName;
	String? fullName;
	String? hospitalName;

	ManageOrganizationUserDTO({
		this.userCode,
		this.userName,
		this.phone,
		this.email,
		this.nickName,
		this.fullName,
		this.hospitalName,
	});

	factory ManageOrganizationUserDTO.fromJson(Map<String, dynamic> map) {
		return ManageOrganizationUserDTO( 
			userCode: map['UserCode'],
			userName: map['UserName'],
			phone: map['Phone'],
			email: map['Email'],
			nickName: map['NickName'],
			fullName: map['FullName'],
			hospitalName: map['HospitalName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (userName != null) {
			map['UserName'] = userName;
		}
		if (phone != null) {
			map['Phone'] = phone;
		}
		if (email != null) {
			map['Email'] = email;
		}
		if (nickName != null) {
			map['NickName'] = nickName;
		}
		if (fullName != null) {
			map['FullName'] = fullName;
		}
		if (hospitalName != null) {
			map['HospitalName'] = hospitalName;
		}
		return map;
	}
}

class ManagePaymentRecordDTO extends PaymentRecordDTO{

	ManagePaymentRecordDTO({
		String? orderCode,
		double payAmount = 0,
		DateTime? payTime,
		PayStatusEnum payStatus = PayStatusEnum.NoPay,
		PayTypeEnum payType = PayTypeEnum.Alipay_PAGE,
		String? payReqContent,
		String? payResContent,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			orderCode: orderCode,
			payAmount: payAmount,
			payTime: payTime,
			payStatus: payStatus,
			payType: payType,
			payReqContent: payReqContent,
			payResContent: payResContent,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManagePaymentRecordDTO.fromJson(Map<String, dynamic> map) {
		return ManagePaymentRecordDTO( 
			orderCode: map['OrderCode'],
			payAmount: double.parse(map['PayAmount'].toString()),
			payTime: map['PayTime'] != null ? DateTime.parse(map['PayTime']) : null,
			payStatus: PayStatusEnum.values.firstWhere((e) => e.index == map['PayStatus']),
			payType: PayTypeEnum.values.firstWhere((e) => e.index == map['PayType']),
			payReqContent: map['PayReqContent'],
			payResContent: map['PayResContent'],
			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();
		return map;
	}
}

class ManageRoleInfoDTO extends RoleDTO{
	List<FeatureDetail>? featureList;

	ManageRoleInfoDTO({
		this.featureList,
		RoleShowTypeEnum roleShowType = RoleShowTypeEnum.NotShow,
		String? iConUrl,
		String? colorStart,
		String? colorEnd,
		RoleQualificationEnum roleQualification = RoleQualificationEnum.NoNeed,
		String? userGroupCode,
		RoleShowTypeEnum fieldShowType = RoleShowTypeEnum.NotShow,
		List<String>? fieldList,
		String? roleCode,
		String? roleName,
		String? description,
		List<UserRoleLanguageConfigDTO>? languageConfigs,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			roleShowType: roleShowType,
			iConUrl: iConUrl,
			colorStart: colorStart,
			colorEnd: colorEnd,
			roleQualification: roleQualification,
			userGroupCode: userGroupCode,
			fieldShowType: fieldShowType,
			fieldList: fieldList,
			roleCode: roleCode,
			roleName: roleName,
			description: description,
			languageConfigs: languageConfigs,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ManageRoleInfoDTO.fromJson(Map<String, dynamic> map) {
		return ManageRoleInfoDTO( 
			featureList: map['FeatureList'] != null ? (map['FeatureList'] as List).map((e)=>FeatureDetail.fromJson(e as Map<String,dynamic>)).toList() : null,
			roleShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['RoleShowType']),
			iConUrl: map['IConUrl'],
			colorStart: map['ColorStart'],
			colorEnd: map['ColorEnd'],
			roleQualification: RoleQualificationEnum.values.firstWhere((e) => e.index == map['RoleQualification']),
			userGroupCode: map['UserGroupCode'],
			fieldShowType: RoleShowTypeEnum.values.firstWhere((e) => e.index == map['FieldShowType']),
			fieldList: map['FieldList']?.cast<String>().toList(),
			roleCode: map['RoleCode'],
			roleName: map['RoleName'],
			description: map['Description'],
			languageConfigs: map['LanguageConfigs'] != null ? (map['LanguageConfigs'] as List).map((e)=>UserRoleLanguageConfigDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (featureList != null)
			map['FeatureList'] = featureList;
		return map;
	}
}

class BaseThesaurusItemBaseDTO<T> {
	String? id;
	String? label;
	String? fatherCode;
	String? thesaurusItemDescription;
	String? thesaurusItemConclusion;
	ThesaurusItemTypeEnum type;
	List<T>? children;
	bool isExistThesaurusItem;

	BaseThesaurusItemBaseDTO({
		this.id,
		this.label,
		this.fatherCode,
		this.thesaurusItemDescription,
		this.thesaurusItemConclusion,
		this.type = ThesaurusItemTypeEnum.Classification,
		this.children,
		this.isExistThesaurusItem = false,
	});

	factory BaseThesaurusItemBaseDTO.fromJson(Map<String, dynamic> map) {
		List<T> childrenList = [];
		if (map['Children'] != null) {
			childrenList.addAll(
					(map['Children'] as List).map((e) => FJsonConvert.fromJson<T>(e)!));
		}
		return BaseThesaurusItemBaseDTO( 
			id: map['Id'],
			label: map['Label'],
			fatherCode: map['FatherCode'],
			thesaurusItemDescription: map['ThesaurusItemDescription'],
			thesaurusItemConclusion: map['ThesaurusItemConclusion'],
			type: ThesaurusItemTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			children: childrenList,
			isExistThesaurusItem: map['IsExistThesaurusItem'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		if (label != null) {
			map['Label'] = label;
		}
		if (fatherCode != null) {
			map['FatherCode'] = fatherCode;
		}
		if (thesaurusItemDescription != null) {
			map['ThesaurusItemDescription'] = thesaurusItemDescription;
		}
		if (thesaurusItemConclusion != null) {
			map['ThesaurusItemConclusion'] = thesaurusItemConclusion;
		}
		map['Type'] = type.index;
		if (children != null) {
			map['Children'] = children;
		}
		map['IsExistThesaurusItem'] = isExistThesaurusItem;
		return map;
	}
}

class ManageThesaurusItemDTO extends BaseThesaurusItemBaseDTO<ManageThesaurusItemDTO>{

	ManageThesaurusItemDTO(
	);

	factory ManageThesaurusItemDTO.fromJson(Map<String, dynamic> map) {
		return ManageThesaurusItemDTO( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class ManageUpdateProductDTO extends UpdateProductDTO{

	ManageUpdateProductDTO({
		bool isSuccess = false,
	}) : super(
			isSuccess: isSuccess,
		);

	factory ManageUpdateProductDTO.fromJson(Map<String, dynamic> map) {
		return ManageUpdateProductDTO( 
			isSuccess: map['IsSuccess'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class OnlineTokenDTO extends TokenDTO{
	String? ipAddress;

	OnlineTokenDTO({
		this.ipAddress,
		int version = 0,
		String? code,
		AccountType accountType = AccountType.Admin,
		String? accountName,
		Platform platform = Platform.Windows,
		LoginSource loginSource = LoginSource.PC,
		String? clientId,
		String? loginServer,
		DateTime? createTime,
		DateTime? expiration,
		int ipValue = 0,
		bool isOnline = false,
		String? installVersion,
		bool isOldPlatform = false,
		ProxyTypeEnum proxyType = ProxyTypeEnum.Old,
	}) : super(
			version: version,
			code: code,
			accountType: accountType,
			accountName: accountName,
			platform: platform,
			loginSource: loginSource,
			clientId: clientId,
			loginServer: loginServer,
			createTime: createTime,
			expiration: expiration,
			ipValue: ipValue,
			isOnline: isOnline,
			installVersion: installVersion,
			isOldPlatform: isOldPlatform,
			proxyType: proxyType,
		);

	factory OnlineTokenDTO.fromJson(Map<String, dynamic> map) {
		return OnlineTokenDTO( 
			ipAddress: map['IpAddress'],
			version: map['Version'],
			code: map['Code'],
			accountType: AccountType.values.firstWhere((e) => e.index == map['AccountType']),
			accountName: map['AccountName'],
			platform: Platform.values.firstWhere((e) => e.index == map['Platform']),
			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
			clientId: map['ClientId'],
			loginServer: map['LoginServer'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			expiration: map['Expiration'] != null ? DateTime.parse(map['Expiration']) : null,
			ipValue: map['IpValue'],
			isOnline: map['IsOnline'],
			installVersion: map['InstallVersion'],
			isOldPlatform: map['IsOldPlatform'],
			proxyType: ProxyTypeEnum.values.firstWhere((e) => e.index == map['ProxyType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (ipAddress != null)
			map['IpAddress'] = ipAddress;
		return map;
	}
}

class SelectParentItemDTO extends SelectItemDTO{
	String? parentCode;

	SelectParentItemDTO({
		this.parentCode,
		String? key,
		String? value,
		String? language,
	}) : super(
			key: key,
			value: value,
			language: language,
		);

	factory SelectParentItemDTO.fromJson(Map<String, dynamic> map) {
		return SelectParentItemDTO( 
			parentCode: map['ParentCode'],
			key: map['Key'],
			value: map['Value'],
			language: map['Language'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (parentCode != null)
			map['ParentCode'] = parentCode;
		return map;
	}
}

class SystemConfigDTO extends BaseDTO{
	String? code;
	String? configKey;
	String? configContent;
	String? configPageControls;

	SystemConfigDTO({
		this.code,
		this.configKey,
		this.configContent,
		this.configPageControls,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory SystemConfigDTO.fromJson(Map<String, dynamic> map) {
		return SystemConfigDTO( 
			code: map['Code'],
			configKey: map['ConfigKey'],
			configContent: map['ConfigContent'],
			configPageControls: map['ConfigPageControls'],
			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 (configKey != null)
			map['ConfigKey'] = configKey;
		if (configContent != null)
			map['ConfigContent'] = configContent;
		if (configPageControls != null)
			map['ConfigPageControls'] = configPageControls;
		return map;
	}
}

class LiveBoardDataDTO {
	String? userCode;
	String? boardData;
	DateTime? interactiveTime;

	LiveBoardDataDTO({
		this.userCode,
		this.boardData,
		this.interactiveTime,
	});

	factory LiveBoardDataDTO.fromJson(Map<String, dynamic> map) {
		return LiveBoardDataDTO( 
			userCode: map['UserCode'],
			boardData: map['BoardData'],
			interactiveTime: map['InteractiveTime'] != null ? DateTime.parse(map['InteractiveTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (boardData != null) {
			map['BoardData'] = boardData;
		}
		if (interactiveTime != null) {
			map['InteractiveTime'] = JsonRpcUtils.dateFormat(interactiveTime!);
		}
		return map;
	}
}

class LiveMemberStatusDTO {
	String? code;
	String? liveRoomCode;
	LiveMemberStatus status;
	UserStatusEnum userStatusType;
	String? loginServerUrl;
	LoginSource loginSource;

	LiveMemberStatusDTO({
		this.code,
		this.liveRoomCode,
		this.status = LiveMemberStatus.Default,
		this.userStatusType = UserStatusEnum.NotOnline,
		this.loginServerUrl,
		this.loginSource = LoginSource.PC,
	});

	factory LiveMemberStatusDTO.fromJson(Map<String, dynamic> map) {
		return LiveMemberStatusDTO( 
			code: map['Code'],
			liveRoomCode: map['LiveRoomCode'],
			status: LiveMemberStatus.values.firstWhere((e) => e.index == map['Status']),
			userStatusType: UserStatusEnum.values.firstWhere((e) => e.index == map['UserStatusType']),
			loginServerUrl: map['LoginServerUrl'],
			loginSource: LoginSource.values.firstWhere((e) => e.index == map['LoginSource']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (liveRoomCode != null) {
			map['LiveRoomCode'] = liveRoomCode;
		}
		map['Status'] = status.index;
		map['UserStatusType'] = userStatusType.index;
		if (loginServerUrl != null) {
			map['LoginServerUrl'] = loginServerUrl;
		}
		map['LoginSource'] = loginSource.index;
		return map;
	}
}

class LiveRoomDTO {
	String? liveRoomCode;
	String? name;
	String? relatedCode;
	String? initiatorCode;
	int rtcRoomId;
	int sdkAppId;
	BusinessModuleEnum businessModule;
	LiveRoomStatus status;
	List<LiveMemberDTO>? deviceInfos;
	List<LiveMemberDTO>? userInfos;
	List<LiveViewerDTO>? viewerInfos;
	ShareInfoDTO? shareInfo;

	LiveRoomDTO({
		this.liveRoomCode,
		this.name,
		this.relatedCode,
		this.initiatorCode,
		this.rtcRoomId = 0,
		this.sdkAppId = 0,
		this.businessModule = BusinessModuleEnum.RemoteDiagnosis,
		this.status = LiveRoomStatus.Default,
		this.deviceInfos,
		this.userInfos,
		this.viewerInfos,
		this.shareInfo,
	});

	factory LiveRoomDTO.fromJson(Map<String, dynamic> map) {
		return LiveRoomDTO( 
			liveRoomCode: map['LiveRoomCode'],
			name: map['Name'],
			relatedCode: map['RelatedCode'],
			initiatorCode: map['InitiatorCode'],
			rtcRoomId: map['RtcRoomId'],
			sdkAppId: map['SdkAppId'],
			businessModule: BusinessModuleEnum.values.firstWhere((e) => e.index == map['BusinessModule']),
			status: LiveRoomStatus.values.firstWhere((e) => e.index == map['Status']),
			deviceInfos: map['DeviceInfos'] != null ? (map['DeviceInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			userInfos: map['UserInfos'] != null ? (map['UserInfos'] as List).map((e)=>LiveMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			viewerInfos: map['ViewerInfos'] != null ? (map['ViewerInfos'] as List).map((e)=>LiveViewerDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			shareInfo: map['ShareInfo'] != null ? ShareInfoDTO.fromJson(map['ShareInfo']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (liveRoomCode != null) {
			map['LiveRoomCode'] = liveRoomCode;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (relatedCode != null) {
			map['RelatedCode'] = relatedCode;
		}
		if (initiatorCode != null) {
			map['InitiatorCode'] = initiatorCode;
		}
		map['RtcRoomId'] = rtcRoomId;
		map['SdkAppId'] = sdkAppId;
		map['BusinessModule'] = businessModule.index;
		map['Status'] = status.index;
		if (deviceInfos != null) {
			map['DeviceInfos'] = deviceInfos;
		}
		if (userInfos != null) {
			map['UserInfos'] = userInfos;
		}
		if (viewerInfos != null) {
			map['ViewerInfos'] = viewerInfos;
		}
		if (shareInfo != null) {
			map['ShareInfo'] = shareInfo;
		}
		return map;
	}
}

class DownloadFileInfoDTO {
	List<FileUploadInfoDTO>? fileUploadInfos;
	String? folderCode;
	String? fileName;

	DownloadFileInfoDTO({
		this.fileUploadInfos,
		this.folderCode,
		this.fileName,
	});

	factory DownloadFileInfoDTO.fromJson(Map<String, dynamic> map) {
		return DownloadFileInfoDTO( 
			fileUploadInfos: map['FileUploadInfos'] != null ? (map['FileUploadInfos'] as List).map((e)=>FileUploadInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			folderCode: map['FolderCode'],
			fileName: map['FileName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (fileUploadInfos != null) {
			map['FileUploadInfos'] = fileUploadInfos;
		}
		if (folderCode != null) {
			map['FolderCode'] = folderCode;
		}
		if (fileName != null) {
			map['FileName'] = fileName;
		}
		return map;
	}
}

class ConvertFileInfoDTO {
	String? recordCode;
	String? filePath;
	String? folderCode;
	UploadFileTypeEnum fileType;

	ConvertFileInfoDTO({
		this.recordCode,
		this.filePath,
		this.folderCode,
		this.fileType = UploadFileTypeEnum.Unknown,
	});

	factory ConvertFileInfoDTO.fromJson(Map<String, dynamic> map) {
		return ConvertFileInfoDTO( 
			recordCode: map['RecordCode'],
			filePath: map['FilePath'],
			folderCode: map['FolderCode'],
			fileType: UploadFileTypeEnum.values.firstWhere((e) => e.index == map['FileType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (recordCode != null) {
			map['RecordCode'] = recordCode;
		}
		if (filePath != null) {
			map['FilePath'] = filePath;
		}
		if (folderCode != null) {
			map['FolderCode'] = folderCode;
		}
		map['FileType'] = fileType.index;
		return map;
	}
}

class LabConvertStateDTO {
	String? code;
	String? creatorCode;
	String? recordCode;
	bool isTemplate;
	DateTime? lastExecuteTime;
	int errorCount;
	List<DownloadFileInfoDTO>? downloadErrorFiles;
	List<ConvertFileInfoDTO>? convertErrorFiles;

	LabConvertStateDTO({
		this.code,
		this.creatorCode,
		this.recordCode,
		this.isTemplate = false,
		this.lastExecuteTime,
		this.errorCount = 0,
		this.downloadErrorFiles,
		this.convertErrorFiles,
	});

	factory LabConvertStateDTO.fromJson(Map<String, dynamic> map) {
		return LabConvertStateDTO( 
			code: map['Code'],
			creatorCode: map['CreatorCode'],
			recordCode: map['RecordCode'],
			isTemplate: map['IsTemplate'],
			lastExecuteTime: map['LastExecuteTime'] != null ? DateTime.parse(map['LastExecuteTime']) : null,
			errorCount: map['ErrorCount'],
			downloadErrorFiles: map['DownloadErrorFiles'] != null ? (map['DownloadErrorFiles'] as List).map((e)=>DownloadFileInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			convertErrorFiles: map['ConvertErrorFiles'] != null ? (map['ConvertErrorFiles'] as List).map((e)=>ConvertFileInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (creatorCode != null) {
			map['CreatorCode'] = creatorCode;
		}
		if (recordCode != null) {
			map['RecordCode'] = recordCode;
		}
		map['IsTemplate'] = isTemplate;
		if (lastExecuteTime != null) {
			map['LastExecuteTime'] = JsonRpcUtils.dateFormat(lastExecuteTime!);
		}
		map['ErrorCount'] = errorCount;
		if (downloadErrorFiles != null) {
			map['DownloadErrorFiles'] = downloadErrorFiles;
		}
		if (convertErrorFiles != null) {
			map['ConvertErrorFiles'] = convertErrorFiles;
		}
		return map;
	}
}

class GradingProtectionConfigDTO {
	String? code;
	String? name;
	int configType;
	String? value;

	GradingProtectionConfigDTO({
		this.code,
		this.name,
		this.configType = 0,
		this.value,
	});

	factory GradingProtectionConfigDTO.fromJson(Map<String, dynamic> map) {
		return GradingProtectionConfigDTO( 
			code: map['Code'],
			name: map['Name'],
			configType: map['ConfigType'],
			value: map['Value'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		map['ConfigType'] = configType;
		if (value != null) {
			map['Value'] = value;
		}
		return map;
	}
}

class DistributedServerInfoDTO extends BaseDTO{
	String? serverCode;
	bool isMaster;
	String? name;
	String? description;
	bool enable;
	DistributedServerTypeEnum serverType;
	String? serverUrl;
	String? lat;
	String? lng;
	List<IPAddressInfoDTO>? assignClientIPList;
	int rTCStartingRoomId;
	String? shareCodePrefix;
	String? defaultStorageNode;
	String? storageServerConfig;
	String? lANHost;

	DistributedServerInfoDTO({
		this.serverCode,
		this.isMaster = false,
		this.name,
		this.description,
		this.enable = false,
		this.serverType = DistributedServerTypeEnum.Official,
		this.serverUrl,
		this.lat,
		this.lng,
		this.assignClientIPList,
		this.rTCStartingRoomId = 0,
		this.shareCodePrefix,
		this.defaultStorageNode,
		this.storageServerConfig,
		this.lANHost,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory DistributedServerInfoDTO.fromJson(Map<String, dynamic> map) {
		return DistributedServerInfoDTO( 
			serverCode: map['ServerCode'],
			isMaster: map['IsMaster'],
			name: map['Name'],
			description: map['Description'],
			enable: map['Enable'],
			serverType: DistributedServerTypeEnum.values.firstWhere((e) => e.index == map['ServerType']),
			serverUrl: map['ServerUrl'],
			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'],
			defaultStorageNode: map['DefaultStorageNode'],
			storageServerConfig: map['StorageServerConfig'],
			lANHost: map['LANHost'],
			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 (serverCode != null)
			map['ServerCode'] = serverCode;
		map['IsMaster'] = isMaster;
		if (name != null)
			map['Name'] = name;
		if (description != null)
			map['Description'] = description;
		map['Enable'] = enable;
		map['ServerType'] = serverType.index;
		if (serverUrl != null)
			map['ServerUrl'] = serverUrl;
		if (lat != null)
			map['Lat'] = lat;
		if (lng != null)
			map['Lng'] = lng;
		if (assignClientIPList != null)
			map['AssignClientIPList'] = assignClientIPList;
		map['RTCStartingRoomId'] = rTCStartingRoomId;
		if (shareCodePrefix != null)
			map['ShareCodePrefix'] = shareCodePrefix;
		if (defaultStorageNode != null)
			map['DefaultStorageNode'] = defaultStorageNode;
		if (storageServerConfig != null)
			map['StorageServerConfig'] = storageServerConfig;
		if (lANHost != null)
			map['LANHost'] = lANHost;
		return map;
	}
}

class DiagnosisResultDTO {
	int index;
	String? diagnosisResult;

	DiagnosisResultDTO({
		this.index = 0,
		this.diagnosisResult,
	});

	factory DiagnosisResultDTO.fromJson(Map<String, dynamic> map) {
		return DiagnosisResultDTO( 
			index: map['Index'],
			diagnosisResult: map['DiagnosisResult'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Index'] = index;
		if (diagnosisResult != null) {
			map['DiagnosisResult'] = diagnosisResult;
		}
		return map;
	}
}

class DeviceOutputConfigDTO {
	String? code;
	String? name;
	DeviceVideoOutputTypeEnum deviceVideoOutputType;
	int videoWidth;
	int videoHeight;

	DeviceOutputConfigDTO({
		this.code,
		this.name,
		this.deviceVideoOutputType = DeviceVideoOutputTypeEnum.MergedVideo,
		this.videoWidth = 0,
		this.videoHeight = 0,
	});

	factory DeviceOutputConfigDTO.fromJson(Map<String, dynamic> map) {
		return DeviceOutputConfigDTO( 
			code: map['Code'],
			name: map['Name'],
			deviceVideoOutputType: DeviceVideoOutputTypeEnum.values.firstWhere((e) => e.index == map['DeviceVideoOutputType']),
			videoWidth: map['VideoWidth'],
			videoHeight: map['VideoHeight'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		map['DeviceVideoOutputType'] = deviceVideoOutputType.index;
		map['VideoWidth'] = videoWidth;
		map['VideoHeight'] = videoHeight;
		return map;
	}
}

class ResolutionDTO {
	String? shortCode;
	int videoWidth;
	int videoHeight;

	ResolutionDTO({
		this.shortCode,
		this.videoWidth = 0,
		this.videoHeight = 0,
	});

	factory ResolutionDTO.fromJson(Map<String, dynamic> map) {
		return ResolutionDTO( 
			shortCode: map['ShortCode'],
			videoWidth: map['VideoWidth'],
			videoHeight: map['VideoHeight'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (shortCode != null) {
			map['ShortCode'] = shortCode;
		}
		map['VideoWidth'] = videoWidth;
		map['VideoHeight'] = videoHeight;
		return map;
	}
}

class BrandModelDetailDTO {
	String? code;
	String? brand;
	String? model;
	List<ResolutionDTO>? resolutions;

	BrandModelDetailDTO({
		this.code,
		this.brand,
		this.model,
		this.resolutions,
	});

	factory BrandModelDetailDTO.fromJson(Map<String, dynamic> map) {
		return BrandModelDetailDTO( 
			code: map['Code'],
			brand: map['Brand'],
			model: map['Model'],
			resolutions: map['Resolutions'] != null ? (map['Resolutions'] as List).map((e)=>ResolutionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (brand != null) {
			map['Brand'] = brand;
		}
		if (model != null) {
			map['Model'] = model;
		}
		if (resolutions != null) {
			map['Resolutions'] = resolutions;
		}
		return map;
	}
}

class DeviceLiveShareInfoDTO {
	String? deviceCode;
	String? shareUserCode;
	String? shareUserName;
	DateTime? shareTime;

	DeviceLiveShareInfoDTO({
		this.deviceCode,
		this.shareUserCode,
		this.shareUserName,
		this.shareTime,
	});

	factory DeviceLiveShareInfoDTO.fromJson(Map<String, dynamic> map) {
		return DeviceLiveShareInfoDTO( 
			deviceCode: map['DeviceCode'],
			shareUserCode: map['ShareUserCode'],
			shareUserName: map['ShareUserName'],
			shareTime: map['ShareTime'] != null ? DateTime.parse(map['ShareTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (deviceCode != null) {
			map['DeviceCode'] = deviceCode;
		}
		if (shareUserCode != null) {
			map['ShareUserCode'] = shareUserCode;
		}
		if (shareUserName != null) {
			map['ShareUserName'] = shareUserName;
		}
		if (shareTime != null) {
			map['ShareTime'] = JsonRpcUtils.dateFormat(shareTime!);
		}
		return map;
	}
}

class DeviceReportDTO extends BaseDTO{
	String? code;
	String? deviceType;
	ReportType reportType;
	String? deviceCode;
	ModeType mode;
	DateTime? timestamp;
	bool? isReport;
	List<DataItemDTO>? reportAttributes;

	DeviceReportDTO({
		this.code,
		this.deviceType,
		this.reportType = ReportType.Day,
		this.deviceCode,
		this.mode = ModeType.CPAP,
		this.timestamp,
		this.isReport,
		this.reportAttributes,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory DeviceReportDTO.fromJson(Map<String, dynamic> map) {
		return DeviceReportDTO( 
			code: map['Code'],
			deviceType: map['DeviceType'],
			reportType: ReportType.values.firstWhere((e) => e.index == map['ReportType']),
			deviceCode: map['DeviceCode'],
			mode: ModeType.values.firstWhere((e) => e.index == map['Mode']),
			timestamp: map['Timestamp'] != null ? DateTime.parse(map['Timestamp']) : null,
			isReport: map['IsReport'],
			reportAttributes: map['ReportAttributes'] != null ? (map['ReportAttributes'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (deviceType != null)
			map['DeviceType'] = deviceType;
		map['ReportType'] = reportType.index;
		if (deviceCode != null)
			map['DeviceCode'] = deviceCode;
		map['Mode'] = mode.index;
		if (timestamp != null)
			map['Timestamp'] = JsonRpcUtils.dateFormat(timestamp!);
		if (isReport != null)
			map['IsReport'] = isReport;
		if (reportAttributes != null)
			map['ReportAttributes'] = reportAttributes;
		return map;
	}
}

class NameItemSettingInfoDTO {
	String? name;
	String? key;

	NameItemSettingInfoDTO({
		this.name,
		this.key,
	});

	factory NameItemSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return NameItemSettingInfoDTO( 
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (key != null) {
			map['Key'] = key;
		}
		return map;
	}
}

class GroupSettingInfoDTO extends NameItemSettingInfoDTO{
	List<NameItemSettingInfoDTO>? items;

	GroupSettingInfoDTO({
		this.items,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory GroupSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return GroupSettingInfoDTO( 
			items: map['Items'] != null ? (map['Items'] as List).map((e)=>NameItemSettingInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (items != null)
			map['Items'] = items;
		return map;
	}
}

class ListPageSettingInfoDTO extends NameItemSettingInfoDTO{
	List<GroupSettingInfoDTO>? groups;

	ListPageSettingInfoDTO({
		this.groups,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory ListPageSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return ListPageSettingInfoDTO( 
			groups: map['Groups'] != null ? (map['Groups'] as List).map((e)=>GroupSettingInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (groups != null)
			map['Groups'] = groups;
		return map;
	}
}

class SystemSettingInfoDTO {
	String? selectedListPageKey;
	String? selectedGroupKey;
	List<ListPageSettingInfoDTO>? listPages;
	String? applyLicenseResult;

	SystemSettingInfoDTO({
		this.selectedListPageKey,
		this.selectedGroupKey,
		this.listPages,
		this.applyLicenseResult,
	});

	factory SystemSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return SystemSettingInfoDTO( 
			selectedListPageKey: map['SelectedListPageKey'],
			selectedGroupKey: map['SelectedGroupKey'],
			listPages: map['ListPages'] != null ? (map['ListPages'] as List).map((e)=>ListPageSettingInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			applyLicenseResult: map['ApplyLicenseResult'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (selectedListPageKey != null) {
			map['SelectedListPageKey'] = selectedListPageKey;
		}
		if (selectedGroupKey != null) {
			map['SelectedGroupKey'] = selectedGroupKey;
		}
		if (listPages != null) {
			map['ListPages'] = listPages;
		}
		if (applyLicenseResult != null) {
			map['ApplyLicenseResult'] = applyLicenseResult;
		}
		return map;
	}
}

class CommandSettingInfoDTO extends NameItemSettingInfoDTO{
	String? commandDescription;

	CommandSettingInfoDTO({
		this.commandDescription,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory CommandSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return CommandSettingInfoDTO( 
			commandDescription: map['CommandDescription'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (commandDescription != null)
			map['CommandDescription'] = commandDescription;
		return map;
	}
}

class ExtendCommandSettingInfoDTO extends CommandSettingInfoDTO{
	String? additionalDescription;
	String? value;

	ExtendCommandSettingInfoDTO({
		this.additionalDescription,
		this.value,
		String? commandDescription,
		String? name,
		String? key,
	}) : super(
			commandDescription: commandDescription,
			name: name,
			key: key,
		);

	factory ExtendCommandSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return ExtendCommandSettingInfoDTO( 
			additionalDescription: map['AdditionalDescription'],
			value: map['Value'],
			commandDescription: map['CommandDescription'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (additionalDescription != null)
			map['AdditionalDescription'] = additionalDescription;
		if (value != null)
			map['Value'] = value;
		return map;
	}
}

class CommandResultInfoDTO extends NameItemSettingInfoDTO{
	String? result;

	CommandResultInfoDTO({
		this.result,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory CommandResultInfoDTO.fromJson(Map<String, dynamic> map) {
		return CommandResultInfoDTO( 
			result: map['Result'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (result != null)
			map['Result'] = result;
		return map;
	}
}

class FeatureItemInfoDTO extends NameItemSettingInfoDTO{
	String? details;
	String? status;

	FeatureItemInfoDTO({
		this.details,
		this.status,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory FeatureItemInfoDTO.fromJson(Map<String, dynamic> map) {
		return FeatureItemInfoDTO( 
			details: map['Details'],
			status: map['Status'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (details != null)
			map['Details'] = details;
		if (status != null)
			map['Status'] = status;
		return map;
	}
}

class ApplyLicenseInfoDTO extends NameItemSettingInfoDTO{
	String? applyLicenseDescription;

	ApplyLicenseInfoDTO({
		this.applyLicenseDescription,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory ApplyLicenseInfoDTO.fromJson(Map<String, dynamic> map) {
		return ApplyLicenseInfoDTO( 
			applyLicenseDescription: map['ApplyLicenseDescription'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (applyLicenseDescription != null)
			map['ApplyLicenseDescription'] = applyLicenseDescription;
		return map;
	}
}

class BoolParameterInfoDTO extends NameItemSettingInfoDTO{
	bool value;

	BoolParameterInfoDTO({
		this.value = false,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory BoolParameterInfoDTO.fromJson(Map<String, dynamic> map) {
		return BoolParameterInfoDTO( 
			value: map['Value'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['Value'] = value;
		return map;
	}
}

class StringParameterInfoDTO extends NameItemSettingInfoDTO{
	String? value;

	StringParameterInfoDTO({
		this.value,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory StringParameterInfoDTO.fromJson(Map<String, dynamic> map) {
		return StringParameterInfoDTO( 
			value: map['Value'],
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (value != null)
			map['Value'] = value;
		return map;
	}
}

class ChoiceParameterInfoDTO extends NameItemSettingInfoDTO{
	String? value;
	List<String>? items;

	ChoiceParameterInfoDTO({
		this.value,
		this.items,
		String? name,
		String? key,
	}) : super(
			name: name,
			key: key,
		);

	factory ChoiceParameterInfoDTO.fromJson(Map<String, dynamic> map) {
		return ChoiceParameterInfoDTO( 
			value: map['Value'],
			items: map['Items']?.cast<String>().toList(),
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (value != null)
			map['Value'] = value;
		if (items != null)
			map['Items'] = items;
		return map;
	}
}

class CommandResultPageSettingInfoDTO extends ListPageSettingInfoDTO{
	String? result;

	CommandResultPageSettingInfoDTO({
		this.result,
		List<GroupSettingInfoDTO>? groups,
		String? name,
		String? key,
	}) : super(
			groups: groups,
			name: name,
			key: key,
		);

	factory CommandResultPageSettingInfoDTO.fromJson(Map<String, dynamic> map) {
		return CommandResultPageSettingInfoDTO( 
			result: map['Result'],
			groups: map['Groups'] != null ? (map['Groups'] as List).map((e)=>GroupSettingInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			name: map['Name'],
			key: map['Key'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (result != null)
			map['Result'] = result;
		return map;
	}
}

class AdminView {
	String? code;
	String? name;

	AdminView({
		this.code,
		this.name,
	});

	factory AdminView.fromJson(Map<String, dynamic> map) {
		return AdminView( 
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class BaseInfoView {
	String? code;
	String? name;

	BaseInfoView({
		this.code,
		this.name,
	});

	factory BaseInfoView.fromJson(Map<String, dynamic> map) {
		return BaseInfoView( 
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class CaseLabelView {
	String? code;
	String? name;

	CaseLabelView({
		this.code,
		this.name,
	});

	factory CaseLabelView.fromJson(Map<String, dynamic> map) {
		return CaseLabelView( 
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class ChannelDataView {
	String? channelId;
	String? downLoadUrl;
	String? upLoadUrl;
	ChannelDescriptionEnum description;
	String? httpUrl;
	String? hlsUrl;

	ChannelDataView({
		this.channelId,
		this.downLoadUrl,
		this.upLoadUrl,
		this.description = ChannelDescriptionEnum.DeskChannel,
		this.httpUrl,
		this.hlsUrl,
	});

	factory ChannelDataView.fromJson(Map<String, dynamic> map) {
		return ChannelDataView( 
			channelId: map['ChannelId'],
			downLoadUrl: map['DownLoadUrl'],
			upLoadUrl: map['UpLoadUrl'],
			description: ChannelDescriptionEnum.values.firstWhere((e) => e.index == map['Description']),
			httpUrl: map['HttpUrl'],
			hlsUrl: map['HlsUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (channelId != null) {
			map['ChannelId'] = channelId;
		}
		if (downLoadUrl != null) {
			map['DownLoadUrl'] = downLoadUrl;
		}
		if (upLoadUrl != null) {
			map['UpLoadUrl'] = upLoadUrl;
		}
		map['Description'] = description.index;
		if (httpUrl != null) {
			map['HttpUrl'] = httpUrl;
		}
		if (hlsUrl != null) {
			map['HlsUrl'] = hlsUrl;
		}
		return map;
	}
}

class ClassView {
	String? code;
	String? name;

	ClassView({
		this.code,
		this.name,
	});

	factory ClassView.fromJson(Map<String, dynamic> map) {
		return ClassView( 
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class CommentView {
	String? userCode;
	String? userName;
	double score;
	String? description;

	CommentView({
		this.userCode,
		this.userName,
		this.score = 0,
		this.description,
	});

	factory CommentView.fromJson(Map<String, dynamic> map) {
		return CommentView( 
			userCode: map['UserCode'],
			userName: map['UserName'],
			score: double.parse(map['Score'].toString()),
			description: map['Description'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userCode != null) {
			map['UserCode'] = userCode;
		}
		if (userName != null) {
			map['UserName'] = userName;
		}
		map['Score'] = score;
		if (description != null) {
			map['Description'] = description;
		}
		return map;
	}
}

class UserView {
	String? code;
	String? name;
	String? organizationCode;
	String? organizationName;

	UserView({
		this.code,
		this.name,
		this.organizationCode,
		this.organizationName,
	});

	factory UserView.fromJson(Map<String, dynamic> map) {
		return UserView( 
			code: map['Code'],
			name: map['Name'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (organizationName != null) {
			map['OrganizationName'] = organizationName;
		}
		return map;
	}
}

class StudentView extends UserView{
	bool isNoSpeaking;
	bool isAssistant;
	List<int>? smallHeadImage;
	bool isPay;
	StudentCourseStatusEnum signCourseStatus;

	StudentView({
		this.isNoSpeaking = false,
		this.isAssistant = false,
		this.smallHeadImage,
		this.isPay = false,
		this.signCourseStatus = StudentCourseStatusEnum.All,
		String? code,
		String? name,
		String? organizationCode,
		String? organizationName,
	}) : super(
			code: code,
			name: name,
			organizationCode: organizationCode,
			organizationName: organizationName,
		);

	factory StudentView.fromJson(Map<String, dynamic> map) {
		final smallHeadImageData = map['SmallHeadImage'];
		return StudentView( 
			isNoSpeaking: map['IsNoSpeaking'],
			isAssistant: map['IsAssistant'],
			smallHeadImage: smallHeadImageData != null ? (smallHeadImageData as List).map((e) => e as int).toList(): null,
			isPay: map['IsPay'],
			signCourseStatus: StudentCourseStatusEnum.values.firstWhere((e) => e.index == map['SignCourseStatus']),
			code: map['Code'],
			name: map['Name'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['IsNoSpeaking'] = isNoSpeaking;
		map['IsAssistant'] = isAssistant;
		if (smallHeadImage != null)
			map['SmallHeadImage'] = smallHeadImage;
		map['IsPay'] = isPay;
		map['SignCourseStatus'] = signCourseStatus.index;
		return map;
	}
}

class CourseAlbumView extends BaseDTO{
	String? code;
	String? name;
	String? teacherCode;
	String? teacherName;
	List<BaseInfoView>? courseInfos;
	String? cover;
	String? introduction;
	List<CourseLabelDTO>? courseLabels;
	CourseViewRangeEnum viewRange;
	double price;
	List<StudentView>? students;
	int sort;
	bool isStick;

	CourseAlbumView({
		this.code,
		this.name,
		this.teacherCode,
		this.teacherName,
		this.courseInfos,
		this.cover,
		this.introduction,
		this.courseLabels,
		this.viewRange = CourseViewRangeEnum.All,
		this.price = 0,
		this.students,
		this.sort = 0,
		this.isStick = false,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CourseAlbumView.fromJson(Map<String, dynamic> map) {
		return CourseAlbumView( 
			code: map['Code'],
			name: map['Name'],
			teacherCode: map['TeacherCode'],
			teacherName: map['TeacherName'],
			courseInfos: map['CourseInfos'] != null ? (map['CourseInfos'] as List).map((e)=>BaseInfoView.fromJson(e as Map<String,dynamic>)).toList() : null,
			cover: map['Cover'],
			introduction: map['Introduction'],
			courseLabels: map['CourseLabels'] != null ? (map['CourseLabels'] as List).map((e)=>CourseLabelDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			price: double.parse(map['Price'].toString()),
			students: map['Students'] != null ? (map['Students'] as List).map((e)=>StudentView.fromJson(e as Map<String,dynamic>)).toList() : null,
			sort: map['Sort'],
			isStick: map['IsStick'],
			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 (name != null)
			map['Name'] = name;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		if (courseInfos != null)
			map['CourseInfos'] = courseInfos;
		if (cover != null)
			map['Cover'] = cover;
		if (introduction != null)
			map['Introduction'] = introduction;
		if (courseLabels != null)
			map['CourseLabels'] = courseLabels;
		map['ViewRange'] = viewRange.index;
		map['Price'] = price;
		if (students != null)
			map['Students'] = students;
		map['Sort'] = sort;
		map['IsStick'] = isStick;
		return map;
	}
}

class LabelLanguageConfigView {
	String? name;
	String? languageCode;

	LabelLanguageConfigView({
		this.name,
		this.languageCode,
	});

	factory LabelLanguageConfigView.fromJson(Map<String, dynamic> map) {
		return LabelLanguageConfigView( 
			name: map['Name'],
			languageCode: map['LanguageCode'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (languageCode != null) {
			map['LanguageCode'] = languageCode;
		}
		return map;
	}
}

class CourseLabelView {
	OrganizationPatientTypeEnum useObjectType;
	List<LabelLanguageConfigView>? labelLanguageConfigs;
	LabelTypeEnum type;
	List<CourseLabelView>? childLabels;

	CourseLabelView({
		this.useObjectType = OrganizationPatientTypeEnum.Person,
		this.labelLanguageConfigs,
		this.type = LabelTypeEnum.Unknown,
		this.childLabels,
	});

	factory CourseLabelView.fromJson(Map<String, dynamic> map) {
		return CourseLabelView( 
			useObjectType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['UseObjectType']),
			labelLanguageConfigs: map['LabelLanguageConfigs'] != null ? (map['LabelLanguageConfigs'] as List).map((e)=>LabelLanguageConfigView.fromJson(e as Map<String,dynamic>)).toList() : null,
			type: LabelTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			childLabels: map['ChildLabels'] != null ? (map['ChildLabels'] as List).map((e)=>CourseLabelView.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['UseObjectType'] = useObjectType.index;
		if (labelLanguageConfigs != null) {
			map['LabelLanguageConfigs'] = labelLanguageConfigs;
		}
		map['Type'] = type.index;
		if (childLabels != null) {
			map['ChildLabels'] = childLabels;
		}
		return map;
	}
}

class CustomerLabelView {
	String? code;
	String? name;

	CustomerLabelView({
		this.code,
		this.name,
	});

	factory CustomerLabelView.fromJson(Map<String, dynamic> map) {
		return CustomerLabelView( 
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class DeviceView {
	String? code;
	String? name;
	String? description;
	String? uniqueCode;
	String? organizationCode;
	String? organizationName;
	String? deviceType;
	String? deviceModel;

	DeviceView({
		this.code,
		this.name,
		this.description,
		this.uniqueCode,
		this.organizationCode,
		this.organizationName,
		this.deviceType,
		this.deviceModel,
	});

	factory DeviceView.fromJson(Map<String, dynamic> map) {
		return DeviceView( 
			code: map['Code'],
			name: map['Name'],
			description: map['Description'],
			uniqueCode: map['UniqueCode'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			deviceType: map['DeviceType'],
			deviceModel: map['DeviceModel'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (description != null) {
			map['Description'] = description;
		}
		if (uniqueCode != null) {
			map['UniqueCode'] = uniqueCode;
		}
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (organizationName != null) {
			map['OrganizationName'] = organizationName;
		}
		if (deviceType != null) {
			map['DeviceType'] = deviceType;
		}
		if (deviceModel != null) {
			map['DeviceModel'] = deviceModel;
		}
		return map;
	}
}

class DiagnosisView {
	DiagnosisOrganEnum organ;
	DiagnosisConclusionEnum diagnosisStatus;

	DiagnosisView({
		this.organ = DiagnosisOrganEnum.Null,
		this.diagnosisStatus = DiagnosisConclusionEnum.NotRequired,
	});

	factory DiagnosisView.fromJson(Map<String, dynamic> map) {
		return DiagnosisView( 
			organ: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['Organ']),
			diagnosisStatus: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisStatus']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Organ'] = organ.index;
		map['DiagnosisStatus'] = diagnosisStatus.index;
		return map;
	}
}

class ExamQuestionView {
	String? code;
	String? stem;
	QuestionTypeEnum questionType;
	List<QuestionOptionDTO>? questionOptionList;
	List<QuestionFileDTO>? fileList;
	List<String>? caseLabelCodes;
	List<String>? courseLabelCodes;
	bool trueOrFalse;
	double score;

	ExamQuestionView({
		this.code,
		this.stem,
		this.questionType = QuestionTypeEnum.Judge,
		this.questionOptionList,
		this.fileList,
		this.caseLabelCodes,
		this.courseLabelCodes,
		this.trueOrFalse = false,
		this.score = 0,
	});

	factory ExamQuestionView.fromJson(Map<String, dynamic> map) {
		return ExamQuestionView( 
			code: map['Code'],
			stem: map['Stem'],
			questionType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['QuestionType']),
			questionOptionList: map['QuestionOptionList'] != null ? (map['QuestionOptionList'] as List).map((e)=>QuestionOptionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileList: map['FileList'] != null ? (map['FileList'] as List).map((e)=>QuestionFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabelCodes: map['CaseLabelCodes']?.cast<String>().toList(),
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			trueOrFalse: map['TrueOrFalse'],
			score: double.parse(map['Score'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (stem != null) {
			map['Stem'] = stem;
		}
		map['QuestionType'] = questionType.index;
		if (questionOptionList != null) {
			map['QuestionOptionList'] = questionOptionList;
		}
		if (fileList != null) {
			map['FileList'] = fileList;
		}
		if (caseLabelCodes != null) {
			map['CaseLabelCodes'] = caseLabelCodes;
		}
		if (courseLabelCodes != null) {
			map['CourseLabelCodes'] = courseLabelCodes;
		}
		map['TrueOrFalse'] = trueOrFalse;
		map['Score'] = score;
		return map;
	}
}

class ICollection<T> {
	int count;
	bool isReadOnly;

	ICollection({
		this.count = 0,
		this.isReadOnly = false,
	});

	factory ICollection.fromJson(Map<String, dynamic> map) {
		return ICollection( 
			count: map['Count'],
			isReadOnly: map['IsReadOnly'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Count'] = count;
		map['IsReadOnly'] = isReadOnly;
		return map;
	}
}

class LearnerView {
	String? code;
	LearnerStatusEnum learnerStatus;

	LearnerView({
		this.code,
		this.learnerStatus = LearnerStatusEnum.Unknown,
	});

	factory LearnerView.fromJson(Map<String, dynamic> map) {
		return LearnerView( 
			code: map['Code'],
			learnerStatus: LearnerStatusEnum.values.firstWhere((e) => e.index == map['LearnerStatus']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		map['LearnerStatus'] = learnerStatus.index;
		return map;
	}
}

class GroupView {
	String? code;
	String? name;
	String? shortCode;
	int maxPeople;
	List<LearnerView>? students;

	GroupView({
		this.code,
		this.name,
		this.shortCode,
		this.maxPeople = 0,
		this.students,
	});

	factory GroupView.fromJson(Map<String, dynamic> map) {
		return GroupView( 
			code: map['Code'],
			name: map['Name'],
			shortCode: map['ShortCode'],
			maxPeople: map['MaxPeople'],
			students: map['Students'] != null ? (map['Students'] as List).map((e)=>LearnerView.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (shortCode != null) {
			map['ShortCode'] = shortCode;
		}
		map['MaxPeople'] = maxPeople;
		if (students != null) {
			map['Students'] = students;
		}
		return map;
	}
}

class ExamVideoView {
	String? id;
	String? videoName;
	DateTime? createTime;
	String? posterToken;
	int duration;
	int size;
	String? description;
	String? url;

	ExamVideoView({
		this.id,
		this.videoName,
		this.createTime,
		this.posterToken,
		this.duration = 0,
		this.size = 0,
		this.description,
		this.url,
	});

	factory ExamVideoView.fromJson(Map<String, dynamic> map) {
		return ExamVideoView( 
			id: map['Id'],
			videoName: map['VideoName'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			posterToken: map['PosterToken'],
			duration: map['Duration'],
			size: map['Size'],
			description: map['Description'],
			url: map['Url'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		if (videoName != null) {
			map['VideoName'] = videoName;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (posterToken != null) {
			map['PosterToken'] = posterToken;
		}
		map['Duration'] = duration;
		map['Size'] = size;
		if (description != null) {
			map['Description'] = description;
		}
		if (url != null) {
			map['Url'] = url;
		}
		return map;
	}
}

class MyExamAnswerView {
	String? subjectId;
	List<String>? answers;

	MyExamAnswerView({
		this.subjectId,
		this.answers,
	});

	factory MyExamAnswerView.fromJson(Map<String, dynamic> map) {
		return MyExamAnswerView( 
			subjectId: map['SubjectId'],
			answers: map['Answers']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (subjectId != null) {
			map['SubjectId'] = subjectId;
		}
		if (answers != null) {
			map['Answers'] = answers;
		}
		return map;
	}
}

class ExamScoreView {
	double totalScore;
	int correctCount;
	int submitCount;
	int maxScore;
	List<MyExamAnswerView>? myExamAnswers;

	ExamScoreView({
		this.totalScore = 0,
		this.correctCount = 0,
		this.submitCount = 0,
		this.maxScore = 0,
		this.myExamAnswers,
	});

	factory ExamScoreView.fromJson(Map<String, dynamic> map) {
		return ExamScoreView( 
			totalScore: double.parse(map['TotalScore'].toString()),
			correctCount: map['CorrectCount'],
			submitCount: map['SubmitCount'],
			maxScore: map['MaxScore'],
			myExamAnswers: map['MyExamAnswers'] != null ? (map['MyExamAnswers'] as List).map((e)=>MyExamAnswerView.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['TotalScore'] = totalScore;
		map['CorrectCount'] = correctCount;
		map['SubmitCount'] = submitCount;
		map['MaxScore'] = maxScore;
		if (myExamAnswers != null) {
			map['MyExamAnswers'] = myExamAnswers;
		}
		return map;
	}
}

class VideoInfoView {
	String? videoToken;
	String? videoImageToken;

	VideoInfoView({
		this.videoToken,
		this.videoImageToken,
	});

	factory VideoInfoView.fromJson(Map<String, dynamic> map) {
		return VideoInfoView( 
			videoToken: map['VideoToken'],
			videoImageToken: map['VideoImageToken'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (videoToken != null) {
			map['VideoToken'] = videoToken;
		}
		if (videoImageToken != null) {
			map['VideoImageToken'] = videoImageToken;
		}
		return map;
	}
}

class SubjectItemView {
	String? content;
	int index;
	bool isAnswer;

	SubjectItemView({
		this.content,
		this.index = 0,
		this.isAnswer = false,
	});

	factory SubjectItemView.fromJson(Map<String, dynamic> map) {
		return SubjectItemView( 
			content: map['Content'],
			index: map['Index'],
			isAnswer: map['IsAnswer'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (content != null) {
			map['Content'] = content;
		}
		map['Index'] = index;
		map['IsAnswer'] = isAnswer;
		return map;
	}
}

class SubjectInfoView {
	String? id;
	String? subject;
	List<String>? images;
	List<VideoInfoView>? videos;
	double score;
	int index;
	QuestionTypeEnum subjectType;
	List<SubjectItemView>? items;

	SubjectInfoView({
		this.id,
		this.subject,
		this.images,
		this.videos,
		this.score = 0,
		this.index = 0,
		this.subjectType = QuestionTypeEnum.Judge,
		this.items,
	});

	factory SubjectInfoView.fromJson(Map<String, dynamic> map) {
		return SubjectInfoView( 
			id: map['Id'],
			subject: map['Subject'],
			images: map['Images']?.cast<String>().toList(),
			videos: map['Videos'] != null ? (map['Videos'] as List).map((e)=>VideoInfoView.fromJson(e as Map<String,dynamic>)).toList() : null,
			score: double.parse(map['Score'].toString()),
			index: map['Index'],
			subjectType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['SubjectType']),
			items: map['Items'] != null ? (map['Items'] as List).map((e)=>SubjectItemView.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (id != null) {
			map['Id'] = id;
		}
		if (subject != null) {
			map['Subject'] = subject;
		}
		if (images != null) {
			map['Images'] = images;
		}
		if (videos != null) {
			map['Videos'] = videos;
		}
		map['Score'] = score;
		map['Index'] = index;
		map['SubjectType'] = subjectType.index;
		if (items != null) {
			map['Items'] = items;
		}
		return map;
	}
}

class ExamTemplateView {
	String? code;
	List<SubjectInfoView>? subjects;
	bool isDeleted;
	String? name;

	ExamTemplateView({
		this.code,
		this.subjects,
		this.isDeleted = false,
		this.name,
	});

	factory ExamTemplateView.fromJson(Map<String, dynamic> map) {
		return ExamTemplateView( 
			code: map['Code'],
			subjects: map['Subjects'] != null ? (map['Subjects'] as List).map((e)=>SubjectInfoView.fromJson(e as Map<String,dynamic>)).toList() : null,
			isDeleted: map['IsDeleted'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (subjects != null) {
			map['Subjects'] = subjects;
		}
		map['IsDeleted'] = isDeleted;
		if (name != null) {
			map['Name'] = name;
		}
		return map;
	}
}

class ExamPaperDTO extends BaseDTO{
	String? code;
	String? name;
	double totalScore;
	List<ExamQuestionView>? questionList;
	List<CourseLabelDTO>? caseLabels;
	List<CourseLabelDTO>? courseLabels;
	List<StudentExaminationDTO>? studentExaminationInfos;
	String? description;
	DateTime? starTime;
	DateTime? endTime;
	int limitCount;
	String? result;
	ICollection<UserView>? examiners;
	ICollection<GroupView>? examinerUserGroups;
	ExaminationAvailabilityEnum examinationAvailability;
	ICollection<ClassView>? classes;
	String? creatorId;
	String? creatorName;
	ExamTypeEnum examType;
	bool hasPassScore;
	double passScore;
	List<ExamVideoView>? examVideoInfos;
	List<ExamScoreView>? examScoreInfos;
	ExamTemplateView? examTemplate;
	bool isDisplayAnswer;

	ExamPaperDTO({
		this.code,
		this.name,
		this.totalScore = 0,
		this.questionList,
		this.caseLabels,
		this.courseLabels,
		this.studentExaminationInfos,
		this.description,
		this.starTime,
		this.endTime,
		this.limitCount = 0,
		this.result,
		this.examiners,
		this.examinerUserGroups,
		this.examinationAvailability = ExaminationAvailabilityEnum.Public,
		this.classes,
		this.creatorId,
		this.creatorName,
		this.examType = ExamTypeEnum.GeneralExam,
		this.hasPassScore = false,
		this.passScore = 0,
		this.examVideoInfos,
		this.examScoreInfos,
		this.examTemplate,
		this.isDisplayAnswer = false,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ExamPaperDTO.fromJson(Map<String, dynamic> map) {
		return ExamPaperDTO( 
			code: map['Code'],
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>ExamQuestionView.fromJson(e as Map<String,dynamic>)).toList() : null,
			caseLabels: map['CaseLabels'] != null ? (map['CaseLabels'] as List).map((e)=>CourseLabelDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseLabels: map['CourseLabels'] != null ? (map['CourseLabels'] as List).map((e)=>CourseLabelDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			studentExaminationInfos: map['StudentExaminationInfos'] != null ? (map['StudentExaminationInfos'] as List).map((e)=>StudentExaminationDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			description: map['Description'],
			starTime: map['StarTime'] != null ? DateTime.parse(map['StarTime']) : null,
			endTime: map['EndTime'] != null ? DateTime.parse(map['EndTime']) : null,
			limitCount: map['LimitCount'],
			result: map['Result'],
			examinationAvailability: ExaminationAvailabilityEnum.values.firstWhere((e) => e.index == map['ExaminationAvailability']),
			creatorId: map['CreatorId'],
			creatorName: map['CreatorName'],
			examType: ExamTypeEnum.values.firstWhere((e) => e.index == map['ExamType']),
			hasPassScore: map['HasPassScore'],
			passScore: double.parse(map['PassScore'].toString()),
			examVideoInfos: map['ExamVideoInfos'] != null ? (map['ExamVideoInfos'] as List).map((e)=>ExamVideoView.fromJson(e as Map<String,dynamic>)).toList() : null,
			examScoreInfos: map['ExamScoreInfos'] != null ? (map['ExamScoreInfos'] as List).map((e)=>ExamScoreView.fromJson(e as Map<String,dynamic>)).toList() : null,
			examTemplate: map['ExamTemplate'] != null ? ExamTemplateView.fromJson(map['ExamTemplate']) : null,
			isDisplayAnswer: map['IsDisplayAnswer'],
			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 (name != null)
			map['Name'] = name;
		map['TotalScore'] = totalScore;
		if (questionList != null)
			map['QuestionList'] = questionList;
		if (caseLabels != null)
			map['CaseLabels'] = caseLabels;
		if (courseLabels != null)
			map['CourseLabels'] = courseLabels;
		if (studentExaminationInfos != null)
			map['StudentExaminationInfos'] = studentExaminationInfos;
		if (description != null)
			map['Description'] = description;
		if (starTime != null)
			map['StarTime'] = JsonRpcUtils.dateFormat(starTime!);
		if (endTime != null)
			map['EndTime'] = JsonRpcUtils.dateFormat(endTime!);
		map['LimitCount'] = limitCount;
		if (result != null)
			map['Result'] = result;
		if (examiners != null)
			map['Examiners'] = examiners;
		if (examinerUserGroups != null)
			map['ExaminerUserGroups'] = examinerUserGroups;
		map['ExaminationAvailability'] = examinationAvailability.index;
		if (classes != null)
			map['Classes'] = classes;
		if (creatorId != null)
			map['CreatorId'] = creatorId;
		if (creatorName != null)
			map['CreatorName'] = creatorName;
		map['ExamType'] = examType.index;
		map['HasPassScore'] = hasPassScore;
		map['PassScore'] = passScore;
		if (examVideoInfos != null)
			map['ExamVideoInfos'] = examVideoInfos;
		if (examScoreInfos != null)
			map['ExamScoreInfos'] = examScoreInfos;
		if (examTemplate != null)
			map['ExamTemplate'] = examTemplate;
		map['IsDisplayAnswer'] = isDisplayAnswer;
		return map;
	}
}

class FileDiagnosisResultDTO extends BaseDTO{
	String? code;
	String? remedicalCode;
	DiagnosisConclusionEnum diagnosisConclusion;
	String? diagnosisResult;
	List<DiagnosisOrganEnum>? diagnosisOrgans;
	MeasuredResultsDTO? measuredResult;
	ScanImageDTO? commentResult;
	CarotidResultDTO? carotidResult;
	BusinessTypeEnum businessType;

	FileDiagnosisResultDTO({
		this.code,
		this.remedicalCode,
		this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
		this.diagnosisResult,
		this.diagnosisOrgans,
		this.measuredResult,
		this.commentResult,
		this.carotidResult,
		this.businessType = BusinessTypeEnum.RemoteDiagnosis,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory FileDiagnosisResultDTO.fromJson(Map<String, dynamic> map) {
		return FileDiagnosisResultDTO( 
			code: map['Code'],
			remedicalCode: map['RemedicalCode'],
			diagnosisConclusion: DiagnosisConclusionEnum.values.firstWhere((e) => e.index == map['DiagnosisConclusion']),
			diagnosisResult: map['DiagnosisResult'],
			diagnosisOrgans: map['DiagnosisOrgans'] != null ? (map['DiagnosisOrgans'] as List).map((e)=>DiagnosisOrganEnum.values.firstWhere((i) => i.index == e)).toList() : null,
			measuredResult: map['MeasuredResult'] != null ? MeasuredResultsDTO.fromJson(map['MeasuredResult']) : null,
			commentResult: map['CommentResult'] != null ? ScanImageDTO.fromJson(map['CommentResult']) : null,
			carotidResult: map['CarotidResult'] != null ? CarotidResultDTO.fromJson(map['CarotidResult']) : null,
			businessType: BusinessTypeEnum.values.firstWhere((e) => e.index == map['BusinessType']),
			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 (remedicalCode != null)
			map['RemedicalCode'] = remedicalCode;
		map['DiagnosisConclusion'] = diagnosisConclusion.index;
		if (diagnosisResult != null)
			map['DiagnosisResult'] = diagnosisResult;
		if (diagnosisOrgans != null)
			map['DiagnosisOrgans'] = diagnosisOrgans;
		if (measuredResult != null)
			map['MeasuredResult'] = measuredResult;
		if (commentResult != null)
			map['CommentResult'] = commentResult;
		if (carotidResult != null)
			map['CarotidResult'] = carotidResult;
		map['BusinessType'] = businessType.index;
		return map;
	}
}

class FileView {
	RemedicalFileDataTypeEnum dataType;
	String? originalUrl;
	String? cdnUrl;
	int fileSize;
	String? fileName;
	String? previewUrl;
	String? converUrl;

	FileView({
		this.dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
		this.originalUrl,
		this.cdnUrl,
		this.fileSize = 0,
		this.fileName,
		this.previewUrl,
		this.converUrl,
	});

	factory FileView.fromJson(Map<String, dynamic> map) {
		return FileView( 
			dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
			originalUrl: map['OriginalUrl'],
			cdnUrl: map['CdnUrl'],
			fileSize: map['FileSize'],
			fileName: map['FileName'],
			previewUrl: map['PreviewUrl'],
			converUrl: map['ConverUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['DataType'] = dataType.index;
		if (originalUrl != null) {
			map['OriginalUrl'] = originalUrl;
		}
		if (cdnUrl != null) {
			map['CdnUrl'] = cdnUrl;
		}
		map['FileSize'] = fileSize;
		if (fileName != null) {
			map['FileName'] = fileName;
		}
		if (previewUrl != null) {
			map['PreviewUrl'] = previewUrl;
		}
		if (converUrl != null) {
			map['ConverUrl'] = converUrl;
		}
		return map;
	}
}

class ImageLocationView {
	String? group;
	String? position;
	String? quadrant;

	ImageLocationView({
		this.group,
		this.position,
		this.quadrant,
	});

	factory ImageLocationView.fromJson(Map<String, dynamic> map) {
		return ImageLocationView( 
			group: map['Group'],
			position: map['Position'],
			quadrant: map['Quadrant'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (group != null) {
			map['Group'] = group;
		}
		if (position != null) {
			map['Position'] = position;
		}
		if (quadrant != null) {
			map['Quadrant'] = quadrant;
		}
		return map;
	}
}

class RemoteDiagnosisFileView extends FileView{
	String? code;
	String? application;
	ImageLocationView? imageLocationInfo;
	List<CommentView>? commentInfos;

	RemoteDiagnosisFileView({
		this.code,
		this.application,
		this.imageLocationInfo,
		this.commentInfos,
		RemedicalFileDataTypeEnum dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
		String? originalUrl,
		String? cdnUrl,
		int fileSize = 0,
		String? fileName,
		String? previewUrl,
		String? converUrl,
	}) : super(
			dataType: dataType,
			originalUrl: originalUrl,
			cdnUrl: cdnUrl,
			fileSize: fileSize,
			fileName: fileName,
			previewUrl: previewUrl,
			converUrl: converUrl,
		);

	factory RemoteDiagnosisFileView.fromJson(Map<String, dynamic> map) {
		return RemoteDiagnosisFileView( 
			code: map['Code'],
			application: map['Application'],
			imageLocationInfo: map['ImageLocationInfo'] != null ? ImageLocationView.fromJson(map['ImageLocationInfo']) : null,
			commentInfos: map['CommentInfos'] != null ? (map['CommentInfos'] as List).map((e)=>CommentView.fromJson(e as Map<String,dynamic>)).toList() : null,
			dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
			originalUrl: map['OriginalUrl'],
			cdnUrl: map['CdnUrl'],
			fileSize: map['FileSize'],
			fileName: map['FileName'],
			previewUrl: map['PreviewUrl'],
			converUrl: map['ConverUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (code != null)
			map['Code'] = code;
		if (application != null)
			map['Application'] = application;
		if (imageLocationInfo != null)
			map['ImageLocationInfo'] = imageLocationInfo;
		if (commentInfos != null)
			map['CommentInfos'] = commentInfos;
		return map;
	}
}

class LiveConsultationFileView extends FileView{
	String? userCode;
	String? userName;
	String? type;
	ConsultationFileTypeEnum consultationFileType;
	String? remedicalCode;
	String? remedicalMeasureCode;

	LiveConsultationFileView({
		this.userCode,
		this.userName,
		this.type,
		this.consultationFileType = ConsultationFileTypeEnum.Screenshot,
		this.remedicalCode,
		this.remedicalMeasureCode,
		RemedicalFileDataTypeEnum dataType = RemedicalFileDataTypeEnum.VinnoVidSingle,
		String? originalUrl,
		String? cdnUrl,
		int fileSize = 0,
		String? fileName,
		String? previewUrl,
		String? converUrl,
	}) : super(
			dataType: dataType,
			originalUrl: originalUrl,
			cdnUrl: cdnUrl,
			fileSize: fileSize,
			fileName: fileName,
			previewUrl: previewUrl,
			converUrl: converUrl,
		);

	factory LiveConsultationFileView.fromJson(Map<String, dynamic> map) {
		return LiveConsultationFileView( 
			userCode: map['UserCode'],
			userName: map['UserName'],
			type: map['Type'],
			consultationFileType: ConsultationFileTypeEnum.values.firstWhere((e) => e.index == map['ConsultationFileType']),
			remedicalCode: map['RemedicalCode'],
			remedicalMeasureCode: map['RemedicalMeasureCode'],
			dataType: RemedicalFileDataTypeEnum.values.firstWhere((e) => e.index == map['DataType']),
			originalUrl: map['OriginalUrl'],
			cdnUrl: map['CdnUrl'],
			fileSize: map['FileSize'],
			fileName: map['FileName'],
			previewUrl: map['PreviewUrl'],
			converUrl: map['ConverUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		if (userName != null)
			map['UserName'] = userName;
		if (type != null)
			map['Type'] = type;
		map['ConsultationFileType'] = consultationFileType.index;
		if (remedicalCode != null)
			map['RemedicalCode'] = remedicalCode;
		if (remedicalMeasureCode != null)
			map['RemedicalMeasureCode'] = remedicalMeasureCode;
		return map;
	}
}

class PatientView {
	String? code;
	String? name;
	String? identityCardId;
	String? mobile;
	String? gender;
	String? age;
	String? pastHistory;
	String? diagnosis;

	PatientView({
		this.code,
		this.name,
		this.identityCardId,
		this.mobile,
		this.gender,
		this.age,
		this.pastHistory,
		this.diagnosis,
	});

	factory PatientView.fromJson(Map<String, dynamic> map) {
		return PatientView( 
			code: map['Code'],
			name: map['Name'],
			identityCardId: map['IdentityCardId'],
			mobile: map['Mobile'],
			gender: map['Gender'],
			age: map['Age'],
			pastHistory: map['PastHistory'],
			diagnosis: map['Diagnosis'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (identityCardId != null) {
			map['IdentityCardId'] = identityCardId;
		}
		if (mobile != null) {
			map['Mobile'] = mobile;
		}
		if (gender != null) {
			map['Gender'] = gender;
		}
		if (age != null) {
			map['Age'] = age;
		}
		if (pastHistory != null) {
			map['PastHistory'] = pastHistory;
		}
		if (diagnosis != null) {
			map['Diagnosis'] = diagnosis;
		}
		return map;
	}
}

class OrganizationView {
	String? code;
	String? name;
	String? departmentCode;
	String? departmentName;
	String? description;
	String? logoUrl;
	String? countryCode;
	String? countryName;
	String? provinceCode;
	String? provinceName;
	String? cityCode;
	String? cityName;

	OrganizationView({
		this.code,
		this.name,
		this.departmentCode,
		this.departmentName,
		this.description,
		this.logoUrl,
		this.countryCode,
		this.countryName,
		this.provinceCode,
		this.provinceName,
		this.cityCode,
		this.cityName,
	});

	factory OrganizationView.fromJson(Map<String, dynamic> map) {
		return OrganizationView( 
			code: map['Code'],
			name: map['Name'],
			departmentCode: map['DepartmentCode'],
			departmentName: map['DepartmentName'],
			description: map['Description'],
			logoUrl: map['LogoUrl'],
			countryCode: map['CountryCode'],
			countryName: map['CountryName'],
			provinceCode: map['ProvinceCode'],
			provinceName: map['ProvinceName'],
			cityCode: map['CityCode'],
			cityName: map['CityName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (departmentCode != null) {
			map['DepartmentCode'] = departmentCode;
		}
		if (departmentName != null) {
			map['DepartmentName'] = departmentName;
		}
		if (description != null) {
			map['Description'] = description;
		}
		if (logoUrl != null) {
			map['LogoUrl'] = logoUrl;
		}
		if (countryCode != null) {
			map['CountryCode'] = countryCode;
		}
		if (countryName != null) {
			map['CountryName'] = countryName;
		}
		if (provinceCode != null) {
			map['ProvinceCode'] = provinceCode;
		}
		if (provinceName != null) {
			map['ProvinceName'] = provinceName;
		}
		if (cityCode != null) {
			map['CityCode'] = cityCode;
		}
		if (cityName != null) {
			map['CityName'] = cityName;
		}
		return map;
	}
}

class ReportConclusionView {
	String? reportId;
	String? diseaseName;
	DiseaseConclusion diseaseConclusion;

	ReportConclusionView({
		this.reportId,
		this.diseaseName,
		this.diseaseConclusion = DiseaseConclusion.NoConclusion,
	});

	factory ReportConclusionView.fromJson(Map<String, dynamic> map) {
		return ReportConclusionView( 
			reportId: map['ReportId'],
			diseaseName: map['DiseaseName'],
			diseaseConclusion: DiseaseConclusion.values.firstWhere((e) => e.index == map['DiseaseConclusion']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (reportId != null) {
			map['ReportId'] = reportId;
		}
		if (diseaseName != null) {
			map['DiseaseName'] = diseaseName;
		}
		map['DiseaseConclusion'] = diseaseConclusion.index;
		return map;
	}
}

class LiveConsultationDTO extends BaseDTO{
	String? code;
	UserView? doctorInfo;
	UserView? expertInfo;
	PatientView? patientInfo;
	OrganizationView? primaryHosptial;
	OrganizationView? centralHospital;
	DeviceView? deviceInfo;
	String? checkPoint;
	ConsultationState state;
	String? consultationNumber;
	String? queuingNumber;
	QualityType qualityType;
	FollowUpVisitStatusEnum followUpVisitStatus;
	bool isNeedFollowUpVisit;
	EvaluateGradeEnum evaluateGrade;
	ICollection<LiveConsultationFileView>? fileInfos;
	ICollection<ReportConclusionView>? reportConclusionInfos;
	List<DataItemDTO>? patientDatas;
	OrganizationPatientTypeEnum patientType;
	List<String>? scanPositions;
	String? scanUserCode;
	String? scanUserName;
	String? operateUserCode;
	String? operateUserName;
	DateTime? consultationTime;
	DateTime? consultationTimeEnd;
	TransactionStatusEnum consultationStatus;
	String? rejectReason;
	String? location;
	List<ConsultationMemberDTO>? consultationMembers;
	String? description;
	List<ConsultationReminderDTO>? consultationReminders;
	String? approverCode;
	ConsultationReportMode reportMode;
	String? diseases;
	String? primaryDiagnosis;
	String? initiatorCode;
	bool isEmergency;
	String? emergencyCode;
	SyncEvaluatesRequest? evaluates;
	List<SyncFollowUpVisitRequest>? syncFollowUpVisitList;

	LiveConsultationDTO({
		this.code,
		this.doctorInfo,
		this.expertInfo,
		this.patientInfo,
		this.primaryHosptial,
		this.centralHospital,
		this.deviceInfo,
		this.checkPoint,
		this.state = ConsultationState.Unhandled,
		this.consultationNumber,
		this.queuingNumber,
		this.qualityType = QualityType.None,
		this.followUpVisitStatus = FollowUpVisitStatusEnum.Unknown,
		this.isNeedFollowUpVisit = false,
		this.evaluateGrade = EvaluateGradeEnum.UnSet,
		this.fileInfos,
		this.reportConclusionInfos,
		this.patientDatas,
		this.patientType = OrganizationPatientTypeEnum.Person,
		this.scanPositions,
		this.scanUserCode,
		this.scanUserName,
		this.operateUserCode,
		this.operateUserName,
		this.consultationTime,
		this.consultationTimeEnd,
		this.consultationStatus = TransactionStatusEnum.Applied,
		this.rejectReason,
		this.location,
		this.consultationMembers,
		this.description,
		this.consultationReminders,
		this.approverCode,
		this.reportMode = ConsultationReportMode.ExpertReport,
		this.diseases,
		this.primaryDiagnosis,
		this.initiatorCode,
		this.isEmergency = false,
		this.emergencyCode,
		this.evaluates,
		this.syncFollowUpVisitList,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory LiveConsultationDTO.fromJson(Map<String, dynamic> map) {
		return LiveConsultationDTO( 
			code: map['Code'],
			doctorInfo: map['DoctorInfo'] != null ? UserView.fromJson(map['DoctorInfo']) : null,
			expertInfo: map['ExpertInfo'] != null ? UserView.fromJson(map['ExpertInfo']) : null,
			patientInfo: map['PatientInfo'] != null ? PatientView.fromJson(map['PatientInfo']) : null,
			primaryHosptial: map['PrimaryHosptial'] != null ? OrganizationView.fromJson(map['PrimaryHosptial']) : null,
			centralHospital: map['CentralHospital'] != null ? OrganizationView.fromJson(map['CentralHospital']) : null,
			deviceInfo: map['DeviceInfo'] != null ? DeviceView.fromJson(map['DeviceInfo']) : null,
			checkPoint: map['CheckPoint'],
			state: ConsultationState.values.firstWhere((e) => e.index == map['State']),
			consultationNumber: map['ConsultationNumber'],
			queuingNumber: map['QueuingNumber'],
			qualityType: QualityType.values.firstWhere((e) => e.index == map['QualityType']),
			followUpVisitStatus: FollowUpVisitStatusEnum.values.firstWhere((e) => e.index == map['FollowUpVisitStatus']),
			isNeedFollowUpVisit: map['IsNeedFollowUpVisit'],
			evaluateGrade: EvaluateGradeEnum.values.firstWhere((e) => e.index == map['EvaluateGrade']),
			patientDatas: map['PatientDatas'] != null ? (map['PatientDatas'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			patientType: OrganizationPatientTypeEnum.values.firstWhere((e) => e.index == map['PatientType']),
			scanPositions: map['ScanPositions']?.cast<String>().toList(),
			scanUserCode: map['ScanUserCode'],
			scanUserName: map['ScanUserName'],
			operateUserCode: map['OperateUserCode'],
			operateUserName: map['OperateUserName'],
			consultationTime: map['ConsultationTime'] != null ? DateTime.parse(map['ConsultationTime']) : null,
			consultationTimeEnd: map['ConsultationTimeEnd'] != null ? DateTime.parse(map['ConsultationTimeEnd']) : null,
			consultationStatus: TransactionStatusEnum.values.firstWhere((e) => e.index == map['ConsultationStatus']),
			rejectReason: map['RejectReason'],
			location: map['Location'],
			consultationMembers: map['ConsultationMembers'] != null ? (map['ConsultationMembers'] as List).map((e)=>ConsultationMemberDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			description: map['Description'],
			consultationReminders: map['ConsultationReminders'] != null ? (map['ConsultationReminders'] as List).map((e)=>ConsultationReminderDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			approverCode: map['ApproverCode'],
			reportMode: ConsultationReportMode.values.firstWhere((e) => e.index == map['ReportMode']),
			diseases: map['Diseases'],
			primaryDiagnosis: map['PrimaryDiagnosis'],
			initiatorCode: map['InitiatorCode'],
			isEmergency: map['IsEmergency'],
			emergencyCode: map['EmergencyCode'],
			evaluates: map['Evaluates'] != null ? SyncEvaluatesRequest.fromJson(map['Evaluates']) : null,
			syncFollowUpVisitList: map['SyncFollowUpVisitList'] != null ? (map['SyncFollowUpVisitList'] as List).map((e)=>SyncFollowUpVisitRequest.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (doctorInfo != null)
			map['DoctorInfo'] = doctorInfo;
		if (expertInfo != null)
			map['ExpertInfo'] = expertInfo;
		if (patientInfo != null)
			map['PatientInfo'] = patientInfo;
		if (primaryHosptial != null)
			map['PrimaryHosptial'] = primaryHosptial;
		if (centralHospital != null)
			map['CentralHospital'] = centralHospital;
		if (deviceInfo != null)
			map['DeviceInfo'] = deviceInfo;
		if (checkPoint != null)
			map['CheckPoint'] = checkPoint;
		map['State'] = state.index;
		if (consultationNumber != null)
			map['ConsultationNumber'] = consultationNumber;
		if (queuingNumber != null)
			map['QueuingNumber'] = queuingNumber;
		map['QualityType'] = qualityType.index;
		map['FollowUpVisitStatus'] = followUpVisitStatus.index;
		map['IsNeedFollowUpVisit'] = isNeedFollowUpVisit;
		map['EvaluateGrade'] = evaluateGrade.index;
		if (fileInfos != null)
			map['FileInfos'] = fileInfos;
		if (reportConclusionInfos != null)
			map['ReportConclusionInfos'] = reportConclusionInfos;
		if (patientDatas != null)
			map['PatientDatas'] = patientDatas;
		map['PatientType'] = patientType.index;
		if (scanPositions != null)
			map['ScanPositions'] = scanPositions;
		if (scanUserCode != null)
			map['ScanUserCode'] = scanUserCode;
		if (scanUserName != null)
			map['ScanUserName'] = scanUserName;
		if (operateUserCode != null)
			map['OperateUserCode'] = operateUserCode;
		if (operateUserName != null)
			map['OperateUserName'] = operateUserName;
		if (consultationTime != null)
			map['ConsultationTime'] = JsonRpcUtils.dateFormat(consultationTime!);
		if (consultationTimeEnd != null)
			map['ConsultationTimeEnd'] = JsonRpcUtils.dateFormat(consultationTimeEnd!);
		map['ConsultationStatus'] = consultationStatus.index;
		if (rejectReason != null)
			map['RejectReason'] = rejectReason;
		if (location != null)
			map['Location'] = location;
		if (consultationMembers != null)
			map['ConsultationMembers'] = consultationMembers;
		if (description != null)
			map['Description'] = description;
		if (consultationReminders != null)
			map['ConsultationReminders'] = consultationReminders;
		if (approverCode != null)
			map['ApproverCode'] = approverCode;
		map['ReportMode'] = reportMode.index;
		if (diseases != null)
			map['Diseases'] = diseases;
		if (primaryDiagnosis != null)
			map['PrimaryDiagnosis'] = primaryDiagnosis;
		if (initiatorCode != null)
			map['InitiatorCode'] = initiatorCode;
		map['IsEmergency'] = isEmergency;
		if (emergencyCode != null)
			map['EmergencyCode'] = emergencyCode;
		if (evaluates != null)
			map['Evaluates'] = evaluates;
		if (syncFollowUpVisitList != null)
			map['SyncFollowUpVisitList'] = syncFollowUpVisitList;
		return map;
	}
}

class SignStudentView {
	String? studentCode;
	String? studentName;
	CourseAppearTypeEnum courseAppearType;
	bool isPay;
	StudentCourseStatusEnum signCourseStatus;
	bool isNoSpeaking;
	bool isAssistant;
	List<int>? smallHeadImage;

	SignStudentView({
		this.studentCode,
		this.studentName,
		this.courseAppearType = CourseAppearTypeEnum.Unknown,
		this.isPay = false,
		this.signCourseStatus = StudentCourseStatusEnum.All,
		this.isNoSpeaking = false,
		this.isAssistant = false,
		this.smallHeadImage,
	});

	factory SignStudentView.fromJson(Map<String, dynamic> map) {
		final smallHeadImageData = map['SmallHeadImage'];
		return SignStudentView( 
			studentCode: map['StudentCode'],
			studentName: map['StudentName'],
			courseAppearType: CourseAppearTypeEnum.values.firstWhere((e) => e.index == map['CourseAppearType']),
			isPay: map['IsPay'],
			signCourseStatus: StudentCourseStatusEnum.values.firstWhere((e) => e.index == map['SignCourseStatus']),
			isNoSpeaking: map['IsNoSpeaking'],
			isAssistant: map['IsAssistant'],
			smallHeadImage: smallHeadImageData != null ? (smallHeadImageData as List).map((e) => e as int).toList(): null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (studentCode != null) {
			map['StudentCode'] = studentCode;
		}
		if (studentName != null) {
			map['StudentName'] = studentName;
		}
		map['CourseAppearType'] = courseAppearType.index;
		map['IsPay'] = isPay;
		map['SignCourseStatus'] = signCourseStatus.index;
		map['IsNoSpeaking'] = isNoSpeaking;
		map['IsAssistant'] = isAssistant;
		if (smallHeadImage != null) {
			map['SmallHeadImage'] = smallHeadImage;
		}
		return map;
	}
}

class CourseExaminationQuestionView {
	String? code;
	String? stem;
	QuestionTypeEnum questionType;
	List<QuestionOptionDTO>? questionOptionList;
	List<QuestionFileDTO>? fileList;
	bool trueOrFalse;
	double score;

	CourseExaminationQuestionView({
		this.code,
		this.stem,
		this.questionType = QuestionTypeEnum.Judge,
		this.questionOptionList,
		this.fileList,
		this.trueOrFalse = false,
		this.score = 0,
	});

	factory CourseExaminationQuestionView.fromJson(Map<String, dynamic> map) {
		return CourseExaminationQuestionView( 
			code: map['Code'],
			stem: map['Stem'],
			questionType: QuestionTypeEnum.values.firstWhere((e) => e.index == map['QuestionType']),
			questionOptionList: map['QuestionOptionList'] != null ? (map['QuestionOptionList'] as List).map((e)=>QuestionOptionDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			fileList: map['FileList'] != null ? (map['FileList'] as List).map((e)=>QuestionFileDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			trueOrFalse: map['TrueOrFalse'],
			score: double.parse(map['Score'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (stem != null) {
			map['Stem'] = stem;
		}
		map['QuestionType'] = questionType.index;
		if (questionOptionList != null) {
			map['QuestionOptionList'] = questionOptionList;
		}
		if (fileList != null) {
			map['FileList'] = fileList;
		}
		map['TrueOrFalse'] = trueOrFalse;
		map['Score'] = score;
		return map;
	}
}

class CourseExaminationView {
	String? code;
	String? name;
	double totalScore;
	List<CourseExaminationQuestionView>? questionList;
	int submitLimitCount;
	bool isRelease;
	CourseExaminationTypeEnum examinationType;
	DateTime? startTime;
	int examDuration;
	double passingScore;

	CourseExaminationView({
		this.code,
		this.name,
		this.totalScore = 0,
		this.questionList,
		this.submitLimitCount = 0,
		this.isRelease = false,
		this.examinationType = CourseExaminationTypeEnum.Practice,
		this.startTime,
		this.examDuration = 0,
		this.passingScore = 0,
	});

	factory CourseExaminationView.fromJson(Map<String, dynamic> map) {
		return CourseExaminationView( 
			code: map['Code'],
			name: map['Name'],
			totalScore: double.parse(map['TotalScore'].toString()),
			questionList: map['QuestionList'] != null ? (map['QuestionList'] as List).map((e)=>CourseExaminationQuestionView.fromJson(e as Map<String,dynamic>)).toList() : null,
			submitLimitCount: map['SubmitLimitCount'],
			isRelease: map['IsRelease'],
			examinationType: CourseExaminationTypeEnum.values.firstWhere((e) => e.index == map['ExaminationType']),
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			examDuration: map['ExamDuration'],
			passingScore: double.parse(map['PassingScore'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		map['TotalScore'] = totalScore;
		if (questionList != null) {
			map['QuestionList'] = questionList;
		}
		map['SubmitLimitCount'] = submitLimitCount;
		map['IsRelease'] = isRelease;
		map['ExaminationType'] = examinationType.index;
		if (startTime != null) {
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		}
		map['ExamDuration'] = examDuration;
		map['PassingScore'] = passingScore;
		return map;
	}
}

class OnlineTrainingDTO extends BaseDTO{
	String? code;
	String? name;
	String? teacherCode;
	String? teacherName;
	int duration;
	CourseStatusEnum status;
	CourseViewRangeEnum viewRange;
	double price;
	String? courseIntro;
	CourseAudienceTypeEnum audienceType;
	String? poster;
	String? creatorCode;
	String? organizationCode;
	DateTime? startTime;
	DateTime? deadline;
	DateTime? actualStartTime;
	DateTime? actualEndTime;
	List<CourseLabelView>? caseLabelInfos;
	String? courseToken;
	String? coursewareToken;
	List<GroupView>? userGroupInfos;
	CourseTypeEnum courseType;
	List<SignStudentView>? students;
	List<SignStudentView>? assistants;
	List<SignStudentView>? experts;
	List<CourseLabelView>? courseLabelInfos;
	bool isAgentCourse;
	bool isStick;
	int sort;
	List<CourseExaminationView>? bindExams;
	List<String>? courseVideoCodes;
	CourseAppearTypeEnum courseAppearType;
	List<String>? courseAlbumCodes;
	int playCount;
	List<String>? courseMaterialCodes;
	ApplyStateEnum applyState;
	String? conversationId;
	ICollection<ChannelDataView>? channelDatas;
	AdminView? createAdmin;
	ICollection<AdminView>? owners;
	bool teacherOnlineState;
	bool startCourseInAdvance;
	List<UserView>? assistantInfos;
	List<UserView>? guestInfos;
	String? credentialCode;
	String? courseNotice;
	List<UserView>? meetingMemberInfos;

	OnlineTrainingDTO({
		this.code,
		this.name,
		this.teacherCode,
		this.teacherName,
		this.duration = 0,
		this.status = CourseStatusEnum.Unknown,
		this.viewRange = CourseViewRangeEnum.All,
		this.price = 0,
		this.courseIntro,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		this.poster,
		this.creatorCode,
		this.organizationCode,
		this.startTime,
		this.deadline,
		this.actualStartTime,
		this.actualEndTime,
		this.caseLabelInfos,
		this.courseToken,
		this.coursewareToken,
		this.userGroupInfos,
		this.courseType = CourseTypeEnum.Unknown,
		this.students,
		this.assistants,
		this.experts,
		this.courseLabelInfos,
		this.isAgentCourse = false,
		this.isStick = false,
		this.sort = 0,
		this.bindExams,
		this.courseVideoCodes,
		this.courseAppearType = CourseAppearTypeEnum.Unknown,
		this.courseAlbumCodes,
		this.playCount = 0,
		this.courseMaterialCodes,
		this.applyState = ApplyStateEnum.NotApply,
		this.conversationId,
		this.channelDatas,
		this.createAdmin,
		this.owners,
		this.teacherOnlineState = false,
		this.startCourseInAdvance = false,
		this.assistantInfos,
		this.guestInfos,
		this.credentialCode,
		this.courseNotice,
		this.meetingMemberInfos,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory OnlineTrainingDTO.fromJson(Map<String, dynamic> map) {
		return OnlineTrainingDTO( 
			code: map['Code'],
			name: map['Name'],
			teacherCode: map['TeacherCode'],
			teacherName: map['TeacherName'],
			duration: map['Duration'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			price: double.parse(map['Price'].toString()),
			courseIntro: map['CourseIntro'],
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			poster: map['Poster'],
			creatorCode: map['CreatorCode'],
			organizationCode: map['OrganizationCode'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			deadline: map['Deadline'] != null ? DateTime.parse(map['Deadline']) : null,
			actualStartTime: map['ActualStartTime'] != null ? DateTime.parse(map['ActualStartTime']) : null,
			actualEndTime: map['ActualEndTime'] != null ? DateTime.parse(map['ActualEndTime']) : null,
			caseLabelInfos: map['CaseLabelInfos'] != null ? (map['CaseLabelInfos'] as List).map((e)=>CourseLabelView.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseToken: map['CourseToken'],
			coursewareToken: map['CoursewareToken'],
			userGroupInfos: map['UserGroupInfos'] != null ? (map['UserGroupInfos'] as List).map((e)=>GroupView.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			students: map['Students'] != null ? (map['Students'] as List).map((e)=>SignStudentView.fromJson(e as Map<String,dynamic>)).toList() : null,
			assistants: map['Assistants'] != null ? (map['Assistants'] as List).map((e)=>SignStudentView.fromJson(e as Map<String,dynamic>)).toList() : null,
			experts: map['Experts'] != null ? (map['Experts'] as List).map((e)=>SignStudentView.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseLabelInfos: map['CourseLabelInfos'] != null ? (map['CourseLabelInfos'] as List).map((e)=>CourseLabelView.fromJson(e as Map<String,dynamic>)).toList() : null,
			isAgentCourse: map['IsAgentCourse'],
			isStick: map['IsStick'],
			sort: map['Sort'],
			bindExams: map['BindExams'] != null ? (map['BindExams'] as List).map((e)=>CourseExaminationView.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseVideoCodes: map['CourseVideoCodes']?.cast<String>().toList(),
			courseAppearType: CourseAppearTypeEnum.values.firstWhere((e) => e.index == map['CourseAppearType']),
			courseAlbumCodes: map['CourseAlbumCodes']?.cast<String>().toList(),
			playCount: map['PlayCount'],
			courseMaterialCodes: map['CourseMaterialCodes']?.cast<String>().toList(),
			applyState: ApplyStateEnum.values.firstWhere((e) => e.index == map['ApplyState']),
			conversationId: map['ConversationId'],
			createAdmin: map['CreateAdmin'] != null ? AdminView.fromJson(map['CreateAdmin']) : null,
			teacherOnlineState: map['TeacherOnlineState'],
			startCourseInAdvance: map['StartCourseInAdvance'],
			assistantInfos: map['AssistantInfos'] != null ? (map['AssistantInfos'] as List).map((e)=>UserView.fromJson(e as Map<String,dynamic>)).toList() : null,
			guestInfos: map['GuestInfos'] != null ? (map['GuestInfos'] as List).map((e)=>UserView.fromJson(e as Map<String,dynamic>)).toList() : null,
			credentialCode: map['CredentialCode'],
			courseNotice: map['CourseNotice'],
			meetingMemberInfos: map['MeetingMemberInfos'] != null ? (map['MeetingMemberInfos'] as List).map((e)=>UserView.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (name != null)
			map['Name'] = name;
		if (teacherCode != null)
			map['TeacherCode'] = teacherCode;
		if (teacherName != null)
			map['TeacherName'] = teacherName;
		map['Duration'] = duration;
		map['Status'] = status.index;
		map['ViewRange'] = viewRange.index;
		map['Price'] = price;
		if (courseIntro != null)
			map['CourseIntro'] = courseIntro;
		map['AudienceType'] = audienceType.index;
		if (poster != null)
			map['Poster'] = poster;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (startTime != null)
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		if (deadline != null)
			map['Deadline'] = JsonRpcUtils.dateFormat(deadline!);
		if (actualStartTime != null)
			map['ActualStartTime'] = JsonRpcUtils.dateFormat(actualStartTime!);
		if (actualEndTime != null)
			map['ActualEndTime'] = JsonRpcUtils.dateFormat(actualEndTime!);
		if (caseLabelInfos != null)
			map['CaseLabelInfos'] = caseLabelInfos;
		if (courseToken != null)
			map['CourseToken'] = courseToken;
		if (coursewareToken != null)
			map['CoursewareToken'] = coursewareToken;
		if (userGroupInfos != null)
			map['UserGroupInfos'] = userGroupInfos;
		map['CourseType'] = courseType.index;
		if (students != null)
			map['Students'] = students;
		if (assistants != null)
			map['Assistants'] = assistants;
		if (experts != null)
			map['Experts'] = experts;
		if (courseLabelInfos != null)
			map['CourseLabelInfos'] = courseLabelInfos;
		map['IsAgentCourse'] = isAgentCourse;
		map['IsStick'] = isStick;
		map['Sort'] = sort;
		if (bindExams != null)
			map['BindExams'] = bindExams;
		if (courseVideoCodes != null)
			map['CourseVideoCodes'] = courseVideoCodes;
		map['CourseAppearType'] = courseAppearType.index;
		if (courseAlbumCodes != null)
			map['CourseAlbumCodes'] = courseAlbumCodes;
		map['PlayCount'] = playCount;
		if (courseMaterialCodes != null)
			map['CourseMaterialCodes'] = courseMaterialCodes;
		map['ApplyState'] = applyState.index;
		if (conversationId != null)
			map['ConversationId'] = conversationId;
		if (channelDatas != null)
			map['ChannelDatas'] = channelDatas;
		if (createAdmin != null)
			map['CreateAdmin'] = createAdmin;
		if (owners != null)
			map['Owners'] = owners;
		map['TeacherOnlineState'] = teacherOnlineState;
		map['StartCourseInAdvance'] = startCourseInAdvance;
		if (assistantInfos != null)
			map['AssistantInfos'] = assistantInfos;
		if (guestInfos != null)
			map['GuestInfos'] = guestInfos;
		if (credentialCode != null)
			map['CredentialCode'] = credentialCode;
		if (courseNotice != null)
			map['CourseNotice'] = courseNotice;
		if (meetingMemberInfos != null)
			map['MeetingMemberInfos'] = meetingMemberInfos;
		return map;
	}
}

class OnlineVideoDTO extends BaseDTO{
	String? code;
	String? name;
	String? creatorCode;
	String? creatorName;
	UploadFileTypeEnum fodderType;
	bool isPublic;
	CourseViewRangeEnum viewRange;
	String? videoToken;
	String? vodFileId;
	String? poster;
	int duration;
	double videoSize;
	int playCount;
	String? srcFileToken;
	String? description;
	VideoImportanceEnum importance;
	VideoPermissionsEnum permissions;
	List<UserView>? users;
	List<GroupView>? userGroups;
	List<ClassView>? classInfos;
	List<OnlineTrainingDTO>? courses;
	List<VideoLabelEnum>? labels;
	String? teachingDocumentName;
	String? teachingDocument;
	int realBrowsedCount;
	int baseBrowsedCount;
	List<UserView>? finishedUsers;

	OnlineVideoDTO({
		this.code,
		this.name,
		this.creatorCode,
		this.creatorName,
		this.fodderType = UploadFileTypeEnum.Unknown,
		this.isPublic = false,
		this.viewRange = CourseViewRangeEnum.All,
		this.videoToken,
		this.vodFileId,
		this.poster,
		this.duration = 0,
		this.videoSize = 0,
		this.playCount = 0,
		this.srcFileToken,
		this.description,
		this.importance = VideoImportanceEnum.Normal,
		this.permissions = VideoPermissionsEnum.Public,
		this.users,
		this.userGroups,
		this.classInfos,
		this.courses,
		this.labels,
		this.teachingDocumentName,
		this.teachingDocument,
		this.realBrowsedCount = 0,
		this.baseBrowsedCount = 0,
		this.finishedUsers,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory OnlineVideoDTO.fromJson(Map<String, dynamic> map) {
		return OnlineVideoDTO( 
			code: map['Code'],
			name: map['Name'],
			creatorCode: map['CreatorCode'],
			creatorName: map['CreatorName'],
			fodderType: UploadFileTypeEnum.values.firstWhere((e) => e.index == map['FodderType']),
			isPublic: map['IsPublic'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			videoToken: map['VideoToken'],
			vodFileId: map['VodFileId'],
			poster: map['Poster'],
			duration: map['Duration'],
			videoSize: double.parse(map['VideoSize'].toString()),
			playCount: map['PlayCount'],
			srcFileToken: map['SrcFileToken'],
			description: map['Description'],
			importance: VideoImportanceEnum.values.firstWhere((e) => e.index == map['Importance']),
			permissions: VideoPermissionsEnum.values.firstWhere((e) => e.index == map['Permissions']),
			users: map['Users'] != null ? (map['Users'] as List).map((e)=>UserView.fromJson(e as Map<String,dynamic>)).toList() : null,
			userGroups: map['UserGroups'] != null ? (map['UserGroups'] as List).map((e)=>GroupView.fromJson(e as Map<String,dynamic>)).toList() : null,
			classInfos: map['ClassInfos'] != null ? (map['ClassInfos'] as List).map((e)=>ClassView.fromJson(e as Map<String,dynamic>)).toList() : null,
			courses: map['Courses'] != null ? (map['Courses'] as List).map((e)=>OnlineTrainingDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			labels: map['Labels'] != null ? (map['Labels'] as List).map((e)=>VideoLabelEnum.values.firstWhere((i) => i.index == e)).toList() : null,
			teachingDocumentName: map['TeachingDocumentName'],
			teachingDocument: map['TeachingDocument'],
			realBrowsedCount: map['RealBrowsedCount'],
			baseBrowsedCount: map['BaseBrowsedCount'],
			finishedUsers: map['FinishedUsers'] != null ? (map['FinishedUsers'] as List).map((e)=>UserView.fromJson(e as Map<String,dynamic>)).toList() : null,
			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 (name != null)
			map['Name'] = name;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (creatorName != null)
			map['CreatorName'] = creatorName;
		map['FodderType'] = fodderType.index;
		map['IsPublic'] = isPublic;
		map['ViewRange'] = viewRange.index;
		if (videoToken != null)
			map['VideoToken'] = videoToken;
		if (vodFileId != null)
			map['VodFileId'] = vodFileId;
		if (poster != null)
			map['Poster'] = poster;
		map['Duration'] = duration;
		map['VideoSize'] = videoSize;
		map['PlayCount'] = playCount;
		if (srcFileToken != null)
			map['SrcFileToken'] = srcFileToken;
		if (description != null)
			map['Description'] = description;
		map['Importance'] = importance.index;
		map['Permissions'] = permissions.index;
		if (users != null)
			map['Users'] = users;
		if (userGroups != null)
			map['UserGroups'] = userGroups;
		if (classInfos != null)
			map['ClassInfos'] = classInfos;
		if (courses != null)
			map['Courses'] = courses;
		if (labels != null)
			map['Labels'] = labels;
		if (teachingDocumentName != null)
			map['TeachingDocumentName'] = teachingDocumentName;
		if (teachingDocument != null)
			map['TeachingDocument'] = teachingDocument;
		map['RealBrowsedCount'] = realBrowsedCount;
		map['BaseBrowsedCount'] = baseBrowsedCount;
		if (finishedUsers != null)
			map['FinishedUsers'] = finishedUsers;
		return map;
	}
}

class QualifiedView {
	QualifiedState qualifiedState;
	QualityType qualityType;

	QualifiedView({
		this.qualifiedState = QualifiedState.UnSet,
		this.qualityType = QualityType.None,
	});

	factory QualifiedView.fromJson(Map<String, dynamic> map) {
		return QualifiedView( 
			qualifiedState: QualifiedState.values.firstWhere((e) => e.index == map['QualifiedState']),
			qualityType: QualityType.values.firstWhere((e) => e.index == map['QualityType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['QualifiedState'] = qualifiedState.index;
		map['QualityType'] = qualityType.index;
		return map;
	}
}

class ScreenshotView {
	String? createUserCode;
	String? createUserName;
	String? prelDiagnosis;
	String? examDoctor;

	ScreenshotView({
		this.createUserCode,
		this.createUserName,
		this.prelDiagnosis,
		this.examDoctor,
	});

	factory ScreenshotView.fromJson(Map<String, dynamic> map) {
		return ScreenshotView( 
			createUserCode: map['CreateUserCode'],
			createUserName: map['CreateUserName'],
			prelDiagnosis: map['PrelDiagnosis'],
			examDoctor: map['ExamDoctor'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (createUserCode != null) {
			map['CreateUserCode'] = createUserCode;
		}
		if (createUserName != null) {
			map['CreateUserName'] = createUserName;
		}
		if (prelDiagnosis != null) {
			map['PrelDiagnosis'] = prelDiagnosis;
		}
		if (examDoctor != null) {
			map['ExamDoctor'] = examDoctor;
		}
		return map;
	}
}

class RemoteDiagnosisDTO extends BaseDTO{
	String? code;
	String? examId;
	OrganizationView? organizationInfo;
	DeviceView? deviceInfo;
	PatientView? patientInfo;
	ScreenshotView? screenshotInfo;
	QualifiedView? qualifiedInfo;
	List<DiagnosisView>? diagnosisInfos;
	List<String>? shareUserCodes;
	String? customDoctor;
	String? customOrganzation;
	String? equipmentSN;
	List<RemoteDiagnosisFileView>? fileInfos;
	List<String>? completedUsers;
	RecordStatusEnum recordStatus;
	String? creatorCode;
	String? tags;
	RecordCreateTypeEnum createType;
	List<DataItemDTO>? patientDataInfo;
	List<PatientInfoExt>? patientInfoExtList;
	String? patientType;
	List<String>? readUsers;
	List<String>? associatedExamCodes;

	RemoteDiagnosisDTO({
		this.code,
		this.examId,
		this.organizationInfo,
		this.deviceInfo,
		this.patientInfo,
		this.screenshotInfo,
		this.qualifiedInfo,
		this.diagnosisInfos,
		this.shareUserCodes,
		this.customDoctor,
		this.customOrganzation,
		this.equipmentSN,
		this.fileInfos,
		this.completedUsers,
		this.recordStatus = RecordStatusEnum.NotScanned,
		this.creatorCode,
		this.tags,
		this.createType = RecordCreateTypeEnum.Reservation,
		this.patientDataInfo,
		this.patientInfoExtList,
		this.patientType,
		this.readUsers,
		this.associatedExamCodes,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory RemoteDiagnosisDTO.fromJson(Map<String, dynamic> map) {
		return RemoteDiagnosisDTO( 
			code: map['Code'],
			examId: map['ExamId'],
			organizationInfo: map['OrganizationInfo'] != null ? OrganizationView.fromJson(map['OrganizationInfo']) : null,
			deviceInfo: map['DeviceInfo'] != null ? DeviceView.fromJson(map['DeviceInfo']) : null,
			patientInfo: map['PatientInfo'] != null ? PatientView.fromJson(map['PatientInfo']) : null,
			screenshotInfo: map['ScreenshotInfo'] != null ? ScreenshotView.fromJson(map['ScreenshotInfo']) : null,
			qualifiedInfo: map['QualifiedInfo'] != null ? QualifiedView.fromJson(map['QualifiedInfo']) : null,
			diagnosisInfos: map['DiagnosisInfos'] != null ? (map['DiagnosisInfos'] as List).map((e)=>DiagnosisView.fromJson(e as Map<String,dynamic>)).toList() : null,
			shareUserCodes: map['ShareUserCodes']?.cast<String>().toList(),
			customDoctor: map['CustomDoctor'],
			customOrganzation: map['CustomOrganzation'],
			equipmentSN: map['EquipmentSN'],
			fileInfos: map['FileInfos'] != null ? (map['FileInfos'] as List).map((e)=>RemoteDiagnosisFileView.fromJson(e as Map<String,dynamic>)).toList() : null,
			completedUsers: map['CompletedUsers']?.cast<String>().toList(),
			recordStatus: RecordStatusEnum.values.firstWhere((e) => e.index == map['RecordStatus']),
			creatorCode: map['CreatorCode'],
			tags: map['Tags'],
			createType: RecordCreateTypeEnum.values.firstWhere((e) => e.index == map['CreateType']),
			patientDataInfo: map['PatientDataInfo'] != null ? (map['PatientDataInfo'] as List).map((e)=>DataItemDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			patientInfoExtList: map['PatientInfoExtList'] != null ? (map['PatientInfoExtList'] as List).map((e)=>PatientInfoExt.fromJson(e as Map<String,dynamic>)).toList() : null,
			patientType: map['PatientType'],
			readUsers: map['ReadUsers']?.cast<String>().toList(),
			associatedExamCodes: map['AssociatedExamCodes']?.cast<String>().toList(),
			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 (examId != null)
			map['ExamId'] = examId;
		if (organizationInfo != null)
			map['OrganizationInfo'] = organizationInfo;
		if (deviceInfo != null)
			map['DeviceInfo'] = deviceInfo;
		if (patientInfo != null)
			map['PatientInfo'] = patientInfo;
		if (screenshotInfo != null)
			map['ScreenshotInfo'] = screenshotInfo;
		if (qualifiedInfo != null)
			map['QualifiedInfo'] = qualifiedInfo;
		if (diagnosisInfos != null)
			map['DiagnosisInfos'] = diagnosisInfos;
		if (shareUserCodes != null)
			map['ShareUserCodes'] = shareUserCodes;
		if (customDoctor != null)
			map['CustomDoctor'] = customDoctor;
		if (customOrganzation != null)
			map['CustomOrganzation'] = customOrganzation;
		if (equipmentSN != null)
			map['EquipmentSN'] = equipmentSN;
		if (fileInfos != null)
			map['FileInfos'] = fileInfos;
		if (completedUsers != null)
			map['CompletedUsers'] = completedUsers;
		map['RecordStatus'] = recordStatus.index;
		if (creatorCode != null)
			map['CreatorCode'] = creatorCode;
		if (tags != null)
			map['Tags'] = tags;
		map['CreateType'] = createType.index;
		if (patientDataInfo != null)
			map['PatientDataInfo'] = patientDataInfo;
		if (patientInfoExtList != null)
			map['PatientInfoExtList'] = patientInfoExtList;
		if (patientType != null)
			map['PatientType'] = patientType;
		if (readUsers != null)
			map['ReadUsers'] = readUsers;
		if (associatedExamCodes != null)
			map['AssociatedExamCodes'] = associatedExamCodes;
		return map;
	}
}

class ReportImageInfo2 {
	String? name;
	ImageTypeEnum type;
	String? examDataId;

	ReportImageInfo2({
		this.name,
		this.type = ImageTypeEnum.Local,
		this.examDataId,
	});

	factory ReportImageInfo2.fromJson(Map<String, dynamic> map) {
		return ReportImageInfo2( 
			name: map['Name'],
			type: ImageTypeEnum.values.firstWhere((e) => e.index == map['Type']),
			examDataId: map['ExamDataId'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		map['Type'] = type.index;
		if (examDataId != null) {
			map['ExamDataId'] = examDataId;
		}
		return map;
	}
}

class CustomLabelView {
	String? name;
	String? code;
	String? description;
	String? fatherCode;
	CustomLabelTypeEnum labelType;
	bool isShow;
	List<String>? userIds;

	CustomLabelView({
		this.name,
		this.code,
		this.description,
		this.fatherCode,
		this.labelType = CustomLabelTypeEnum.Group,
		this.isShow = false,
		this.userIds,
	});

	factory CustomLabelView.fromJson(Map<String, dynamic> map) {
		return CustomLabelView( 
			name: map['Name'],
			code: map['Code'],
			description: map['Description'],
			fatherCode: map['FatherCode'],
			labelType: CustomLabelTypeEnum.values.firstWhere((e) => e.index == map['LabelType']),
			isShow: map['IsShow'],
			userIds: map['UserIds']?.cast<String>().toList(),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (name != null) {
			map['Name'] = name;
		}
		if (code != null) {
			map['Code'] = code;
		}
		if (description != null) {
			map['Description'] = description;
		}
		if (fatherCode != null) {
			map['FatherCode'] = fatherCode;
		}
		map['LabelType'] = labelType.index;
		map['IsShow'] = isShow;
		if (userIds != null) {
			map['UserIds'] = userIds;
		}
		return map;
	}
}

class QualityControlScoreItemView {
	int sort;
	double score;

	QualityControlScoreItemView({
		this.sort = 0,
		this.score = 0,
	});

	factory QualityControlScoreItemView.fromJson(Map<String, dynamic> map) {
		return QualityControlScoreItemView( 
			sort: map['Sort'],
			score: double.parse(map['Score'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['Sort'] = sort;
		map['Score'] = score;
		return map;
	}
}

class QualityControlDataView {
	String? controlPersonId;
	String? controlPersonName;
	String? opinion;
	double score;
	List<QualityControlScoreItemView>? scoreItems;
	DateTime? controlTime;

	QualityControlDataView({
		this.controlPersonId,
		this.controlPersonName,
		this.opinion,
		this.score = 0,
		this.scoreItems,
		this.controlTime,
	});

	factory QualityControlDataView.fromJson(Map<String, dynamic> map) {
		return QualityControlDataView( 
			controlPersonId: map['ControlPersonId'],
			controlPersonName: map['ControlPersonName'],
			opinion: map['Opinion'],
			score: double.parse(map['Score'].toString()),
			scoreItems: map['ScoreItems'] != null ? (map['ScoreItems'] as List).map((e)=>QualityControlScoreItemView.fromJson(e as Map<String,dynamic>)).toList() : null,
			controlTime: map['ControlTime'] != null ? DateTime.parse(map['ControlTime']) : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (controlPersonId != null) {
			map['ControlPersonId'] = controlPersonId;
		}
		if (controlPersonName != null) {
			map['ControlPersonName'] = controlPersonName;
		}
		if (opinion != null) {
			map['Opinion'] = opinion;
		}
		map['Score'] = score;
		if (scoreItems != null) {
			map['ScoreItems'] = scoreItems;
		}
		if (controlTime != null) {
			map['ControlTime'] = JsonRpcUtils.dateFormat(controlTime!);
		}
		return map;
	}
}

class ReportInfoResultDTO extends BaseDTO{
	String? code;
	String? organizationCode;
	String? organizationName;
	String? recordCode;
	String? reportUserCode;
	String? reportUserName;
	DeviceView? deviceInfo;
	String? patientCode;
	String? patientId;
	String? reportTemplateJson;
	String? reportDatasJson;
	String? patientName;
	List<String>? reportLabels;
	List<String>? platformLabels;
	List<String>? diagnosisLabels;
	DiagnosisOrganEnum reportOrgan;
	List<ReportPreviewDTO>? reportPreviewList;
	String? referralRecordCode;
	ReportTypeEnum reportType;
	String? elementCollectionJson;
	String? measureElementCollectionJson;
	String? patientPerfPhysician;
	String? patientRefPhysician;
	ICollection<ReportImageInfo2>? previewImages;
	ICollection<CustomLabelView>? customLabels;
	QualifiedState qualifiedState;
	QualityType qualityType;
	String? reportPreviewPdf;
	ICollection<QualityControlDataView>? qualityControlDatas;

	ReportInfoResultDTO({
		this.code,
		this.organizationCode,
		this.organizationName,
		this.recordCode,
		this.reportUserCode,
		this.reportUserName,
		this.deviceInfo,
		this.patientCode,
		this.patientId,
		this.reportTemplateJson,
		this.reportDatasJson,
		this.patientName,
		this.reportLabels,
		this.platformLabels,
		this.diagnosisLabels,
		this.reportOrgan = DiagnosisOrganEnum.Null,
		this.reportPreviewList,
		this.referralRecordCode,
		this.reportType = ReportTypeEnum.RemoteDiagnosis,
		this.elementCollectionJson,
		this.measureElementCollectionJson,
		this.patientPerfPhysician,
		this.patientRefPhysician,
		this.previewImages,
		this.customLabels,
		this.qualifiedState = QualifiedState.UnSet,
		this.qualityType = QualityType.None,
		this.reportPreviewPdf,
		this.qualityControlDatas,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ReportInfoResultDTO.fromJson(Map<String, dynamic> map) {
		return ReportInfoResultDTO( 
			code: map['Code'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			recordCode: map['RecordCode'],
			reportUserCode: map['ReportUserCode'],
			reportUserName: map['ReportUserName'],
			deviceInfo: map['DeviceInfo'] != null ? DeviceView.fromJson(map['DeviceInfo']) : null,
			patientCode: map['PatientCode'],
			patientId: map['PatientId'],
			reportTemplateJson: map['ReportTemplateJson'],
			reportDatasJson: map['ReportDatasJson'],
			patientName: map['PatientName'],
			reportLabels: map['ReportLabels']?.cast<String>().toList(),
			platformLabels: map['PlatformLabels']?.cast<String>().toList(),
			diagnosisLabels: map['DiagnosisLabels']?.cast<String>().toList(),
			reportOrgan: DiagnosisOrganEnum.values.firstWhere((e) => e.index == map['ReportOrgan']),
			reportPreviewList: map['ReportPreviewList'] != null ? (map['ReportPreviewList'] as List).map((e)=>ReportPreviewDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			referralRecordCode: map['ReferralRecordCode'],
			reportType: ReportTypeEnum.values.firstWhere((e) => e.index == map['ReportType']),
			elementCollectionJson: map['ElementCollectionJson'],
			measureElementCollectionJson: map['MeasureElementCollectionJson'],
			patientPerfPhysician: map['PatientPerfPhysician'],
			patientRefPhysician: map['PatientRefPhysician'],
			qualifiedState: QualifiedState.values.firstWhere((e) => e.index == map['QualifiedState']),
			qualityType: QualityType.values.firstWhere((e) => e.index == map['QualityType']),
			reportPreviewPdf: map['ReportPreviewPdf'],
			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 (organizationCode != null)
			map['OrganizationCode'] = organizationCode;
		if (organizationName != null)
			map['OrganizationName'] = organizationName;
		if (recordCode != null)
			map['RecordCode'] = recordCode;
		if (reportUserCode != null)
			map['ReportUserCode'] = reportUserCode;
		if (reportUserName != null)
			map['ReportUserName'] = reportUserName;
		if (deviceInfo != null)
			map['DeviceInfo'] = deviceInfo;
		if (patientCode != null)
			map['PatientCode'] = patientCode;
		if (patientId != null)
			map['PatientId'] = patientId;
		if (reportTemplateJson != null)
			map['ReportTemplateJson'] = reportTemplateJson;
		if (reportDatasJson != null)
			map['ReportDatasJson'] = reportDatasJson;
		if (patientName != null)
			map['PatientName'] = patientName;
		if (reportLabels != null)
			map['ReportLabels'] = reportLabels;
		if (platformLabels != null)
			map['PlatformLabels'] = platformLabels;
		if (diagnosisLabels != null)
			map['DiagnosisLabels'] = diagnosisLabels;
		map['ReportOrgan'] = reportOrgan.index;
		if (reportPreviewList != null)
			map['ReportPreviewList'] = reportPreviewList;
		if (referralRecordCode != null)
			map['ReferralRecordCode'] = referralRecordCode;
		map['ReportType'] = reportType.index;
		if (elementCollectionJson != null)
			map['ElementCollectionJson'] = elementCollectionJson;
		if (measureElementCollectionJson != null)
			map['MeasureElementCollectionJson'] = measureElementCollectionJson;
		if (patientPerfPhysician != null)
			map['PatientPerfPhysician'] = patientPerfPhysician;
		if (patientRefPhysician != null)
			map['PatientRefPhysician'] = patientRefPhysician;
		if (previewImages != null)
			map['PreviewImages'] = previewImages;
		if (customLabels != null)
			map['CustomLabels'] = customLabels;
		map['QualifiedState'] = qualifiedState.index;
		map['QualityType'] = qualityType.index;
		if (reportPreviewPdf != null)
			map['ReportPreviewPdf'] = reportPreviewPdf;
		if (qualityControlDatas != null)
			map['QualityControlDatas'] = qualityControlDatas;
		return map;
	}
}

class TeacherView extends UserView{
	String? introduction;
	List<int>? smallAvatar;

	TeacherView({
		this.introduction,
		this.smallAvatar,
		String? code,
		String? name,
		String? organizationCode,
		String? organizationName,
	}) : super(
			code: code,
			name: name,
			organizationCode: organizationCode,
			organizationName: organizationName,
		);

	factory TeacherView.fromJson(Map<String, dynamic> map) {
		final smallAvatarData = map['SmallAvatar'];
		return TeacherView( 
			introduction: map['Introduction'],
			smallAvatar: smallAvatarData != null ? (smallAvatarData as List).map((e) => e as int).toList(): null,
			code: map['Code'],
			name: map['Name'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (introduction != null)
			map['Introduction'] = introduction;
		if (smallAvatar != null)
			map['SmallAvatar'] = smallAvatar;
		return map;
	}
}

class AudienceView extends UserView{
	int totalMinutes;
	List<GroupView>? groupInfos;

	AudienceView({
		this.totalMinutes = 0,
		this.groupInfos,
		String? code,
		String? name,
		String? organizationCode,
		String? organizationName,
	}) : super(
			code: code,
			name: name,
			organizationCode: organizationCode,
			organizationName: organizationName,
		);

	factory AudienceView.fromJson(Map<String, dynamic> map) {
		return AudienceView( 
			totalMinutes: map['TotalMinutes'],
			groupInfos: map['GroupInfos'] != null ? (map['GroupInfos'] as List).map((e)=>GroupView.fromJson(e as Map<String,dynamic>)).toList() : null,
			code: map['Code'],
			name: map['Name'],
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['TotalMinutes'] = totalMinutes;
		if (groupInfos != null)
			map['GroupInfos'] = groupInfos;
		return map;
	}
}

class CourseAlbumDetailDTO extends CourseAlbumDTO{
	List<CourseInfoDetailDTO>? courseInfos;
	int studentCount;

	CourseAlbumDetailDTO({
		this.courseInfos,
		this.studentCount = 0,
		String? cover,
		List<String>? courseCodes,
		String? introduction,
		List<String>? courseLabelCodes,
		String? teacherCode,
		String? teacherName,
		CourseViewRangeEnum viewRange = CourseViewRangeEnum.All,
		double price = 0,
		DateTime? createTime,
		DateTime? updateTime,
		int sort = 0,
		bool isStick = false,
		String? languageCode,
		String? code,
		String? name,
	}) : super(
			cover: cover,
			courseCodes: courseCodes,
			introduction: introduction,
			courseLabelCodes: courseLabelCodes,
			teacherCode: teacherCode,
			teacherName: teacherName,
			viewRange: viewRange,
			price: price,
			createTime: createTime,
			updateTime: updateTime,
			sort: sort,
			isStick: isStick,
			languageCode: languageCode,
			code: code,
			name: name,
		);

	factory CourseAlbumDetailDTO.fromJson(Map<String, dynamic> map) {
		return CourseAlbumDetailDTO( 
			courseInfos: map['CourseInfos'] != null ? (map['CourseInfos'] as List).map((e)=>CourseInfoDetailDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			studentCount: map['StudentCount'],
			cover: map['Cover'],
			courseCodes: map['CourseCodes']?.cast<String>().toList(),
			introduction: map['Introduction'],
			courseLabelCodes: map['CourseLabelCodes']?.cast<String>().toList(),
			teacherCode: map['TeacherCode'],
			teacherName: map['TeacherName'],
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			price: double.parse(map['Price'].toString()),
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			updateTime: map['UpdateTime'] != null ? DateTime.parse(map['UpdateTime']) : null,
			sort: map['Sort'],
			isStick: map['IsStick'],
			languageCode: map['LanguageCode'],
			code: map['Code'],
			name: map['Name'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (courseInfos != null)
			map['CourseInfos'] = courseInfos;
		map['StudentCount'] = studentCount;
		return map;
	}
}

class BaseCoursePageDTO {
	String? code;
	String? name;
	String? cover;
	DateTime? startTime;
	DateTime? createTime;
	int playCount;
	CourseStatusEnum status;
	String? teacherName;
	CourseTypeEnum courseType;
	CourseAudienceTypeEnum audienceType;
	int duration;
	double price;
	List<BaseUserGroupDTO>? userGroupList;
	List<BaseCourseAlbumDTO>? courseAlbumList;

	BaseCoursePageDTO({
		this.code,
		this.name,
		this.cover,
		this.startTime,
		this.createTime,
		this.playCount = 0,
		this.status = CourseStatusEnum.Unknown,
		this.teacherName,
		this.courseType = CourseTypeEnum.Unknown,
		this.audienceType = CourseAudienceTypeEnum.Unknown,
		this.duration = 0,
		this.price = 0,
		this.userGroupList,
		this.courseAlbumList,
	});

	factory BaseCoursePageDTO.fromJson(Map<String, dynamic> map) {
		return BaseCoursePageDTO( 
			code: map['Code'],
			name: map['Name'],
			cover: map['Cover'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			playCount: map['PlayCount'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			teacherName: map['TeacherName'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			duration: map['Duration'],
			price: double.parse(map['Price'].toString()),
			userGroupList: map['UserGroupList'] != null ? (map['UserGroupList'] as List).map((e)=>BaseUserGroupDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseAlbumList: map['CourseAlbumList'] != null ? (map['CourseAlbumList'] as List).map((e)=>BaseCourseAlbumDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (cover != null) {
			map['Cover'] = cover;
		}
		if (startTime != null) {
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		map['PlayCount'] = playCount;
		map['Status'] = status.index;
		if (teacherName != null) {
			map['TeacherName'] = teacherName;
		}
		map['CourseType'] = courseType.index;
		map['AudienceType'] = audienceType.index;
		map['Duration'] = duration;
		map['Price'] = price;
		if (userGroupList != null) {
			map['UserGroupList'] = userGroupList;
		}
		if (courseAlbumList != null) {
			map['CourseAlbumList'] = courseAlbumList;
		}
		return map;
	}
}

class CoursePageDTO extends BaseCoursePageDTO{

	CoursePageDTO({
		String? code,
		String? name,
		String? cover,
		DateTime? startTime,
		DateTime? createTime,
		int playCount = 0,
		CourseStatusEnum status = CourseStatusEnum.Unknown,
		String? teacherName,
		CourseTypeEnum courseType = CourseTypeEnum.Unknown,
		CourseAudienceTypeEnum audienceType = CourseAudienceTypeEnum.Unknown,
		int duration = 0,
		double price = 0,
		List<BaseUserGroupDTO>? userGroupList,
		List<BaseCourseAlbumDTO>? courseAlbumList,
	}) : super(
			code: code,
			name: name,
			cover: cover,
			startTime: startTime,
			createTime: createTime,
			playCount: playCount,
			status: status,
			teacherName: teacherName,
			courseType: courseType,
			audienceType: audienceType,
			duration: duration,
			price: price,
			userGroupList: userGroupList,
			courseAlbumList: courseAlbumList,
		);

	factory CoursePageDTO.fromJson(Map<String, dynamic> map) {
		return CoursePageDTO( 
			code: map['Code'],
			name: map['Name'],
			cover: map['Cover'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			playCount: map['PlayCount'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			teacherName: map['TeacherName'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			duration: map['Duration'],
			price: double.parse(map['Price'].toString()),
			userGroupList: map['UserGroupList'] != null ? (map['UserGroupList'] as List).map((e)=>BaseUserGroupDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseAlbumList: map['CourseAlbumList'] != null ? (map['CourseAlbumList'] as List).map((e)=>BaseCourseAlbumDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class MyCoursePageDTO {
	String? code;
	String? courseOrAlbumCode;
	CourseAppearTypeEnum courseAppearType;
	CourseTypeEnum courseType;
	String? name;
	String? teacherName;
	List<String>? courseLabelNames;
	bool isPay;
	DateTime? createTime;
	CourseStatusEnum status;
	CourseViewRangeEnum viewRange;
	DateTime? startTime;
	int playCount;

	MyCoursePageDTO({
		this.code,
		this.courseOrAlbumCode,
		this.courseAppearType = CourseAppearTypeEnum.Unknown,
		this.courseType = CourseTypeEnum.Unknown,
		this.name,
		this.teacherName,
		this.courseLabelNames,
		this.isPay = false,
		this.createTime,
		this.status = CourseStatusEnum.Unknown,
		this.viewRange = CourseViewRangeEnum.All,
		this.startTime,
		this.playCount = 0,
	});

	factory MyCoursePageDTO.fromJson(Map<String, dynamic> map) {
		return MyCoursePageDTO( 
			code: map['Code'],
			courseOrAlbumCode: map['CourseOrAlbumCode'],
			courseAppearType: CourseAppearTypeEnum.values.firstWhere((e) => e.index == map['CourseAppearType']),
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			name: map['Name'],
			teacherName: map['TeacherName'],
			courseLabelNames: map['CourseLabelNames']?.cast<String>().toList(),
			isPay: map['IsPay'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			viewRange: CourseViewRangeEnum.values.firstWhere((e) => e.index == map['ViewRange']),
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			playCount: map['PlayCount'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (code != null) {
			map['Code'] = code;
		}
		if (courseOrAlbumCode != null) {
			map['CourseOrAlbumCode'] = courseOrAlbumCode;
		}
		map['CourseAppearType'] = courseAppearType.index;
		map['CourseType'] = courseType.index;
		if (name != null) {
			map['Name'] = name;
		}
		if (teacherName != null) {
			map['TeacherName'] = teacherName;
		}
		if (courseLabelNames != null) {
			map['CourseLabelNames'] = courseLabelNames;
		}
		map['IsPay'] = isPay;
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		map['Status'] = status.index;
		map['ViewRange'] = viewRange.index;
		if (startTime != null) {
			map['StartTime'] = JsonRpcUtils.dateFormat(startTime!);
		}
		map['PlayCount'] = playCount;
		return map;
	}
}

class StudentInCoursePageDTO extends BaseCoursePageDTO{
	StudentCourseStatusEnum signCourseStatus;
	bool isPay;

	StudentInCoursePageDTO({
		this.signCourseStatus = StudentCourseStatusEnum.All,
		this.isPay = false,
		String? code,
		String? name,
		String? cover,
		DateTime? startTime,
		DateTime? createTime,
		int playCount = 0,
		CourseStatusEnum status = CourseStatusEnum.Unknown,
		String? teacherName,
		CourseTypeEnum courseType = CourseTypeEnum.Unknown,
		CourseAudienceTypeEnum audienceType = CourseAudienceTypeEnum.Unknown,
		int duration = 0,
		double price = 0,
		List<BaseUserGroupDTO>? userGroupList,
		List<BaseCourseAlbumDTO>? courseAlbumList,
	}) : super(
			code: code,
			name: name,
			cover: cover,
			startTime: startTime,
			createTime: createTime,
			playCount: playCount,
			status: status,
			teacherName: teacherName,
			courseType: courseType,
			audienceType: audienceType,
			duration: duration,
			price: price,
			userGroupList: userGroupList,
			courseAlbumList: courseAlbumList,
		);

	factory StudentInCoursePageDTO.fromJson(Map<String, dynamic> map) {
		return StudentInCoursePageDTO( 
			signCourseStatus: StudentCourseStatusEnum.values.firstWhere((e) => e.index == map['SignCourseStatus']),
			isPay: map['IsPay'],
			code: map['Code'],
			name: map['Name'],
			cover: map['Cover'],
			startTime: map['StartTime'] != null ? DateTime.parse(map['StartTime']) : null,
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			playCount: map['PlayCount'],
			status: CourseStatusEnum.values.firstWhere((e) => e.index == map['Status']),
			teacherName: map['TeacherName'],
			courseType: CourseTypeEnum.values.firstWhere((e) => e.index == map['CourseType']),
			audienceType: CourseAudienceTypeEnum.values.firstWhere((e) => e.index == map['AudienceType']),
			duration: map['Duration'],
			price: double.parse(map['Price'].toString()),
			userGroupList: map['UserGroupList'] != null ? (map['UserGroupList'] as List).map((e)=>BaseUserGroupDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			courseAlbumList: map['CourseAlbumList'] != null ? (map['CourseAlbumList'] as List).map((e)=>BaseCourseAlbumDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		map['SignCourseStatus'] = signCourseStatus.index;
		map['IsPay'] = isPay;
		return map;
	}
}

class SignStudentDTO {
	String? studentCode;
	String? courseOrAlbumCode;
	CourseAppearTypeEnum courseAppearType;
	bool isPay;
	StudentCourseStatusEnum signCourseStatus;

	SignStudentDTO({
		this.studentCode,
		this.courseOrAlbumCode,
		this.courseAppearType = CourseAppearTypeEnum.Unknown,
		this.isPay = false,
		this.signCourseStatus = StudentCourseStatusEnum.All,
	});

	factory SignStudentDTO.fromJson(Map<String, dynamic> map) {
		return SignStudentDTO( 
			studentCode: map['StudentCode'],
			courseOrAlbumCode: map['CourseOrAlbumCode'],
			courseAppearType: CourseAppearTypeEnum.values.firstWhere((e) => e.index == map['CourseAppearType']),
			isPay: map['IsPay'],
			signCourseStatus: StudentCourseStatusEnum.values.firstWhere((e) => e.index == map['SignCourseStatus']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (studentCode != null) {
			map['StudentCode'] = studentCode;
		}
		if (courseOrAlbumCode != null) {
			map['CourseOrAlbumCode'] = courseOrAlbumCode;
		}
		map['CourseAppearType'] = courseAppearType.index;
		map['IsPay'] = isPay;
		map['SignCourseStatus'] = signCourseStatus.index;
		return map;
	}
}

class BoardPointDTO {
	double x;
	double y;

	BoardPointDTO({
		this.x = 0,
		this.y = 0,
	});

	factory BoardPointDTO.fromJson(Map<String, dynamic> map) {
		return BoardPointDTO( 
			x: double.parse(map['X'].toString()),
			y: double.parse(map['Y'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['X'] = x;
		map['Y'] = y;
		return map;
	}
}

class ConsultationExpertDTO extends UserBaseDTO{

	ConsultationExpertDTO({
		String? phone,
		String? email,
		String? userCode,
		String? userName,
		String? fullName,
		String? headImageUrl,
		String? displayName,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			phone: phone,
			email: email,
			userCode: userCode,
			userName: userName,
			fullName: fullName,
			headImageUrl: headImageUrl,
			displayName: displayName,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory ConsultationExpertDTO.fromJson(Map<String, dynamic> map) {
		return ConsultationExpertDTO( 
			phone: map['Phone'],
			email: map['Email'],
			userCode: map['UserCode'],
			userName: map['UserName'],
			fullName: map['FullName'],
			headImageUrl: map['HeadImageUrl'],
			displayName: map['DisplayName'],
			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();
		return map;
	}
}

class AdminStatisticRecordDTO extends BaseDTO{
	String? adminStatisticRecordCode;
	String? adminStatisticCode;
	String? adminStatisticName;
	String? adminCode;
	String? serverHost;
	DateTime? lastestUpdateTime;
	DateTime? nextHandleTime;
	List<String>? xAxisDatas;
	List<List<double>>? yAxisDatas;
	List<StatisticInfoDTO>? children;
	String? statisticJsonData;
	StatisticsPlatformEnum statisticsPlatform;

	AdminStatisticRecordDTO({
		this.adminStatisticRecordCode,
		this.adminStatisticCode,
		this.adminStatisticName,
		this.adminCode,
		this.serverHost,
		this.lastestUpdateTime,
		this.nextHandleTime,
		this.xAxisDatas,
		this.yAxisDatas,
		this.children,
		this.statisticJsonData,
		this.statisticsPlatform = StatisticsPlatformEnum.Management,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminStatisticRecordDTO.fromJson(Map<String, dynamic> map) {
		return AdminStatisticRecordDTO( 
			adminStatisticRecordCode: map['AdminStatisticRecordCode'],
			adminStatisticCode: map['AdminStatisticCode'],
			adminStatisticName: map['AdminStatisticName'],
			adminCode: map['AdminCode'],
			serverHost: map['ServerHost'],
			lastestUpdateTime: map['LastestUpdateTime'] != null ? DateTime.parse(map['LastestUpdateTime']) : null,
			nextHandleTime: map['NextHandleTime'] != null ? DateTime.parse(map['NextHandleTime']) : null,
			xAxisDatas: map['XAxisDatas']?.cast<String>().toList(),
			yAxisDatas: map['YAxisDatas']?.cast<List<double>>().toList(),
			children: map['Children'] != null ? (map['Children'] as List).map((e)=>StatisticInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			statisticJsonData: map['StatisticJsonData'],
			statisticsPlatform: StatisticsPlatformEnum.values.firstWhere((e) => e.index == map['StatisticsPlatform']),
			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 (adminStatisticRecordCode != null)
			map['AdminStatisticRecordCode'] = adminStatisticRecordCode;
		if (adminStatisticCode != null)
			map['AdminStatisticCode'] = adminStatisticCode;
		if (adminStatisticName != null)
			map['AdminStatisticName'] = adminStatisticName;
		if (adminCode != null)
			map['AdminCode'] = adminCode;
		if (serverHost != null)
			map['ServerHost'] = serverHost;
		if (lastestUpdateTime != null)
			map['LastestUpdateTime'] = JsonRpcUtils.dateFormat(lastestUpdateTime!);
		if (nextHandleTime != null)
			map['NextHandleTime'] = JsonRpcUtils.dateFormat(nextHandleTime!);
		if (xAxisDatas != null)
			map['XAxisDatas'] = xAxisDatas;
		if (yAxisDatas != null)
			map['YAxisDatas'] = yAxisDatas;
		if (children != null)
			map['Children'] = children;
		if (statisticJsonData != null)
			map['StatisticJsonData'] = statisticJsonData;
		map['StatisticsPlatform'] = statisticsPlatform.index;
		return map;
	}
}

class CMSStatisticRecordDTO extends AdminStatisticRecordDTO{

	CMSStatisticRecordDTO({
		String? statisticJsonData,
		String? adminStatisticRecordCode,
		String? adminStatisticCode,
		String? adminStatisticName,
		String? adminCode,
		String? serverHost,
		DateTime? lastestUpdateTime,
		DateTime? nextHandleTime,
		List<String>? xAxisDatas,
		List<List<double>>? yAxisDatas,
		List<StatisticInfoDTO>? children,
		StatisticsPlatformEnum statisticsPlatform = StatisticsPlatformEnum.Management,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			adminStatisticRecordCode: adminStatisticRecordCode,
			adminStatisticCode: adminStatisticCode,
			adminStatisticName: adminStatisticName,
			adminCode: adminCode,
			serverHost: serverHost,
			lastestUpdateTime: lastestUpdateTime,
			nextHandleTime: nextHandleTime,
			xAxisDatas: xAxisDatas,
			yAxisDatas: yAxisDatas,
			children: children,
			statisticJsonData: statisticJsonData,
			statisticsPlatform: statisticsPlatform,
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CMSStatisticRecordDTO.fromJson(Map<String, dynamic> map) {
		return CMSStatisticRecordDTO( 
			statisticJsonData: map['StatisticJsonData'],
			adminStatisticRecordCode: map['AdminStatisticRecordCode'],
			adminStatisticCode: map['AdminStatisticCode'],
			adminStatisticName: map['AdminStatisticName'],
			adminCode: map['AdminCode'],
			serverHost: map['ServerHost'],
			lastestUpdateTime: map['LastestUpdateTime'] != null ? DateTime.parse(map['LastestUpdateTime']) : null,
			nextHandleTime: map['NextHandleTime'] != null ? DateTime.parse(map['NextHandleTime']) : null,
			xAxisDatas: map['XAxisDatas']?.cast<String>().toList(),
			yAxisDatas: map['YAxisDatas']?.cast<List<double>>().toList(),
			children: map['Children'] != null ? (map['Children'] as List).map((e)=>StatisticInfoDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
			statisticsPlatform: StatisticsPlatformEnum.values.firstWhere((e) => e.index == map['StatisticsPlatform']),
			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();
		return map;
	}
}

class CMSTemplateDTO extends BaseDTO{
	String? cMSTemplateCode;
	String? cMSTemplateName;
	CMSTemplateStatusTypeEnum cMSTemplateStateType;
	String? cMSTemplateJson;
	bool isDefault;
	List<String>? organizationCodes;
	String? cMSBgColor;
	String? cMSBgImg;
	bool isShowTop;
	String? cMSBorderColor;
	int cMSBorderShadow;

	CMSTemplateDTO({
		this.cMSTemplateCode,
		this.cMSTemplateName,
		this.cMSTemplateStateType = CMSTemplateStatusTypeEnum.UnPublished,
		this.cMSTemplateJson,
		this.isDefault = false,
		this.organizationCodes,
		this.cMSBgColor,
		this.cMSBgImg,
		this.isShowTop = false,
		this.cMSBorderColor,
		this.cMSBorderShadow = 0,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory CMSTemplateDTO.fromJson(Map<String, dynamic> map) {
		return CMSTemplateDTO( 
			cMSTemplateCode: map['CMSTemplateCode'],
			cMSTemplateName: map['CMSTemplateName'],
			cMSTemplateStateType: CMSTemplateStatusTypeEnum.values.firstWhere((e) => e.index == map['CMSTemplateStateType']),
			cMSTemplateJson: map['CMSTemplateJson'],
			isDefault: map['IsDefault'],
			organizationCodes: map['OrganizationCodes']?.cast<String>().toList(),
			cMSBgColor: map['CMSBgColor'],
			cMSBgImg: map['CMSBgImg'],
			isShowTop: map['IsShowTop'],
			cMSBorderColor: map['CMSBorderColor'],
			cMSBorderShadow: map['CMSBorderShadow'],
			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 (cMSTemplateCode != null)
			map['CMSTemplateCode'] = cMSTemplateCode;
		if (cMSTemplateName != null)
			map['CMSTemplateName'] = cMSTemplateName;
		map['CMSTemplateStateType'] = cMSTemplateStateType.index;
		if (cMSTemplateJson != null)
			map['CMSTemplateJson'] = cMSTemplateJson;
		map['IsDefault'] = isDefault;
		if (organizationCodes != null)
			map['OrganizationCodes'] = organizationCodes;
		if (cMSBgColor != null)
			map['CMSBgColor'] = cMSBgColor;
		if (cMSBgImg != null)
			map['CMSBgImg'] = cMSBgImg;
		map['IsShowTop'] = isShowTop;
		if (cMSBorderColor != null)
			map['CMSBorderColor'] = cMSBorderColor;
		map['CMSBorderShadow'] = cMSBorderShadow;
		return map;
	}
}

class StatisticAnnouncesDTO {
	AnnouncementTypeEnum announcementType;
	DateTime? contentTime;
	String? content;
	CMSMessageStatusEnum status;

	StatisticAnnouncesDTO({
		this.announcementType = AnnouncementTypeEnum.Broadcast,
		this.contentTime,
		this.content,
		this.status = CMSMessageStatusEnum.UnRead,
	});

	factory StatisticAnnouncesDTO.fromJson(Map<String, dynamic> map) {
		return StatisticAnnouncesDTO( 
			announcementType: AnnouncementTypeEnum.values.firstWhere((e) => e.index == map['AnnouncementType']),
			contentTime: map['ContentTime'] != null ? DateTime.parse(map['ContentTime']) : null,
			content: map['Content'],
			status: CMSMessageStatusEnum.values.firstWhere((e) => e.index == map['Status']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['AnnouncementType'] = announcementType.index;
		if (contentTime != null) {
			map['ContentTime'] = JsonRpcUtils.dateFormat(contentTime!);
		}
		if (content != null) {
			map['Content'] = content;
		}
		map['Status'] = status.index;
		return map;
	}
}

class StatisticDevicesDTO {
	String? imgUrl;
	String? name;
	String? transferUrl;

	StatisticDevicesDTO({
		this.imgUrl,
		this.name,
		this.transferUrl,
	});

	factory StatisticDevicesDTO.fromJson(Map<String, dynamic> map) {
		return StatisticDevicesDTO( 
			imgUrl: map['ImgUrl'],
			name: map['Name'],
			transferUrl: map['TransferUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (imgUrl != null) {
			map['ImgUrl'] = imgUrl;
		}
		if (name != null) {
			map['Name'] = name;
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		return map;
	}
}

class StatisticDiagnosisDataDTO {
	String? organizationCode;
	DateTime? createTime;
	int totalCount;
	BusinessModuleEnum businessType;

	StatisticDiagnosisDataDTO({
		this.organizationCode,
		this.createTime,
		this.totalCount = 0,
		this.businessType = BusinessModuleEnum.RemoteDiagnosis,
	});

	factory StatisticDiagnosisDataDTO.fromJson(Map<String, dynamic> map) {
		return StatisticDiagnosisDataDTO( 
			organizationCode: map['OrganizationCode'],
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			totalCount: map['TotalCount'],
			businessType: BusinessModuleEnum.values.firstWhere((e) => e.index == map['BusinessType']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		map['TotalCount'] = totalCount;
		map['BusinessType'] = businessType.index;
		return map;
	}
}

class StatisticDownloadDTO {
	String? imgUrl;
	String? transferUrl;

	StatisticDownloadDTO({
		this.imgUrl,
		this.transferUrl,
	});

	factory StatisticDownloadDTO.fromJson(Map<String, dynamic> map) {
		return StatisticDownloadDTO( 
			imgUrl: map['ImgUrl'],
			transferUrl: map['TransferUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (imgUrl != null) {
			map['ImgUrl'] = imgUrl;
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		return map;
	}
}

class StatisticMessagesDTO {
	String? content;
	DateTime? time;
	String? transferUrl;
	CMSMessageStatusEnum status;

	StatisticMessagesDTO({
		this.content,
		this.time,
		this.transferUrl,
		this.status = CMSMessageStatusEnum.UnRead,
	});

	factory StatisticMessagesDTO.fromJson(Map<String, dynamic> map) {
		return StatisticMessagesDTO( 
			content: map['Content'],
			time: map['Time'] != null ? DateTime.parse(map['Time']) : null,
			transferUrl: map['TransferUrl'],
			status: CMSMessageStatusEnum.values.firstWhere((e) => e.index == map['Status']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (content != null) {
			map['Content'] = content;
		}
		if (time != null) {
			map['Time'] = JsonRpcUtils.dateFormat(time!);
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		map['Status'] = status.index;
		return map;
	}
}

class StatisticMessageInfoDTO extends StatisticMessagesDTO{
	String? userCode;
	String? messageCode;

	StatisticMessageInfoDTO({
		this.userCode,
		this.messageCode,
		String? content,
		DateTime? time,
		String? transferUrl,
		CMSMessageStatusEnum status = CMSMessageStatusEnum.UnRead,
	}) : super(
			content: content,
			time: time,
			transferUrl: transferUrl,
			status: status,
		);

	factory StatisticMessageInfoDTO.fromJson(Map<String, dynamic> map) {
		return StatisticMessageInfoDTO( 
			userCode: map['UserCode'],
			messageCode: map['MessageCode'],
			content: map['Content'],
			time: map['Time'] != null ? DateTime.parse(map['Time']) : null,
			transferUrl: map['TransferUrl'],
			status: CMSMessageStatusEnum.values.firstWhere((e) => e.index == map['Status']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		if (userCode != null)
			map['UserCode'] = userCode;
		if (messageCode != null)
			map['MessageCode'] = messageCode;
		return map;
	}
}

class StatisticMyPendingDTO {
	String? title;
	double rate;

	StatisticMyPendingDTO({
		this.title,
		this.rate = 0,
	});

	factory StatisticMyPendingDTO.fromJson(Map<String, dynamic> map) {
		return StatisticMyPendingDTO( 
			title: map['Title'],
			rate: double.parse(map['Rate'].toString()),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (title != null) {
			map['Title'] = title;
		}
		map['Rate'] = rate;
		return map;
	}
}

class StatisticMyStandingDTO {
	String? title;
	int data;
	String? unit;
	String? transferUrl;

	StatisticMyStandingDTO({
		this.title,
		this.data = 0,
		this.unit,
		this.transferUrl,
	});

	factory StatisticMyStandingDTO.fromJson(Map<String, dynamic> map) {
		return StatisticMyStandingDTO( 
			title: map['Title'],
			data: map['Data'],
			unit: map['Unit'],
			transferUrl: map['TransferUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (title != null) {
			map['Title'] = title;
		}
		map['Data'] = data;
		if (unit != null) {
			map['Unit'] = unit;
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		return map;
	}
}

class StatisticPlatActivityDTO {
	String? imgUrl;
	String? transferUrl;

	StatisticPlatActivityDTO({
		this.imgUrl,
		this.transferUrl,
	});

	factory StatisticPlatActivityDTO.fromJson(Map<String, dynamic> map) {
		return StatisticPlatActivityDTO( 
			imgUrl: map['ImgUrl'],
			transferUrl: map['TransferUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (imgUrl != null) {
			map['ImgUrl'] = imgUrl;
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		return map;
	}
}

class StatisticRealtimeDataDTO {
	DateTime? createTime;
	String? organizationCode;
	String? organizationName;
	String? doctorCode;
	String? doctorName;
	RecordStatusEnum status;

	StatisticRealtimeDataDTO({
		this.createTime,
		this.organizationCode,
		this.organizationName,
		this.doctorCode,
		this.doctorName,
		this.status = RecordStatusEnum.NotScanned,
	});

	factory StatisticRealtimeDataDTO.fromJson(Map<String, dynamic> map) {
		return StatisticRealtimeDataDTO( 
			createTime: map['CreateTime'] != null ? DateTime.parse(map['CreateTime']) : null,
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			doctorCode: map['DoctorCode'],
			doctorName: map['DoctorName'],
			status: RecordStatusEnum.values.firstWhere((e) => e.index == map['Status']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (createTime != null) {
			map['CreateTime'] = JsonRpcUtils.dateFormat(createTime!);
		}
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (organizationName != null) {
			map['OrganizationName'] = organizationName;
		}
		if (doctorCode != null) {
			map['DoctorCode'] = doctorCode;
		}
		if (doctorName != null) {
			map['DoctorName'] = doctorName;
		}
		map['Status'] = status.index;
		return map;
	}
}

class StatisticSubmittedReportsDTO {
	String? organizationCode;
	String? organizationName;
	int totalCount;

	StatisticSubmittedReportsDTO({
		this.organizationCode,
		this.organizationName,
		this.totalCount = 0,
	});

	factory StatisticSubmittedReportsDTO.fromJson(Map<String, dynamic> map) {
		return StatisticSubmittedReportsDTO( 
			organizationCode: map['OrganizationCode'],
			organizationName: map['OrganizationName'],
			totalCount: map['TotalCount'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (organizationCode != null) {
			map['OrganizationCode'] = organizationCode;
		}
		if (organizationName != null) {
			map['OrganizationName'] = organizationName;
		}
		map['TotalCount'] = totalCount;
		return map;
	}
}

class StatisticUpdateCourseDTO {
	String? title;
	String? teacher;
	String? thumbnail;
	String? transferUrl;

	StatisticUpdateCourseDTO({
		this.title,
		this.teacher,
		this.thumbnail,
		this.transferUrl,
	});

	factory StatisticUpdateCourseDTO.fromJson(Map<String, dynamic> map) {
		return StatisticUpdateCourseDTO( 
			title: map['Title'],
			teacher: map['Teacher'],
			thumbnail: map['Thumbnail'],
			transferUrl: map['TransferUrl'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (title != null) {
			map['Title'] = title;
		}
		if (teacher != null) {
			map['Teacher'] = teacher;
		}
		if (thumbnail != null) {
			map['Thumbnail'] = thumbnail;
		}
		if (transferUrl != null) {
			map['TransferUrl'] = transferUrl;
		}
		return map;
	}
}

class BaseFeatureItemDTO extends BaseFeatureItemBaseDTO<BaseFeatureItemDTO>{

	BaseFeatureItemDTO(
	);

	factory BaseFeatureItemDTO.fromJson(Map<String, dynamic> map) {
		return BaseFeatureItemDTO( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class ArrowCommentItemDTO {
	ArrowOrientation arrowOrientation;
	String? text;

	ArrowCommentItemDTO({
		this.arrowOrientation = ArrowOrientation.Down,
		this.text,
	});

	factory ArrowCommentItemDTO.fromJson(Map<String, dynamic> map) {
		return ArrowCommentItemDTO( 
			arrowOrientation: ArrowOrientation.values.firstWhere((e) => e.index == map['ArrowOrientation']),
			text: map['Text'],
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		map['ArrowOrientation'] = arrowOrientation.index;
		if (text != null) {
			map['Text'] = text;
		}
		return map;
	}
}

class UserDefinedCommentsDTO {
	String? userId;
	List<UserDefinedCommentDataDTO>? commentItems;

	UserDefinedCommentsDTO({
		this.userId,
		this.commentItems,
	});

	factory UserDefinedCommentsDTO.fromJson(Map<String, dynamic> map) {
		return UserDefinedCommentsDTO( 
			userId: map['UserId'],
			commentItems: map['CommentItems'] != null ? (map['CommentItems'] as List).map((e)=>UserDefinedCommentDataDTO.fromJson(e as Map<String,dynamic>)).toList() : null,
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (userId != null) {
			map['UserId'] = userId;
		}
		if (commentItems != null) {
			map['CommentItems'] = commentItems;
		}
		return map;
	}
}

class FunctionalityInfo {
	String? functionalityName;
	FunctionalityStatusEnum functionalityStatus;

	FunctionalityInfo({
		this.functionalityName,
		this.functionalityStatus = FunctionalityStatusEnum.DemoMode,
	});

	factory FunctionalityInfo.fromJson(Map<String, dynamic> map) {
		return FunctionalityInfo( 
			functionalityName: map['FunctionalityName'],
			functionalityStatus: FunctionalityStatusEnum.values.firstWhere((e) => e.index == map['FunctionalityStatus']),
		);
	}

	Map<String, dynamic> toJson() {
		final map = Map<String, dynamic>();
		if (functionalityName != null) {
			map['FunctionalityName'] = functionalityName;
		}
		map['FunctionalityStatus'] = functionalityStatus.index;
		return map;
	}
}

class AdminStatisticDTO extends BaseDTO{
	String? adminStatisticCode;
	String? name;
	String? description;
	String? intervalSetting;
	bool enabled;
	String? handleClass;
	String? serverHost;

	AdminStatisticDTO({
		this.adminStatisticCode,
		this.name,
		this.description,
		this.intervalSetting,
		this.enabled = false,
		this.handleClass,
		this.serverHost,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminStatisticDTO.fromJson(Map<String, dynamic> map) {
		return AdminStatisticDTO( 
			adminStatisticCode: map['AdminStatisticCode'],
			name: map['Name'],
			description: map['Description'],
			intervalSetting: map['IntervalSetting'],
			enabled: map['Enabled'],
			handleClass: map['HandleClass'],
			serverHost: map['ServerHost'],
			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 (adminStatisticCode != null)
			map['AdminStatisticCode'] = adminStatisticCode;
		if (name != null)
			map['Name'] = name;
		if (description != null)
			map['Description'] = description;
		if (intervalSetting != null)
			map['IntervalSetting'] = intervalSetting;
		map['Enabled'] = enabled;
		if (handleClass != null)
			map['HandleClass'] = handleClass;
		if (serverHost != null)
			map['ServerHost'] = serverHost;
		return map;
	}
}

class AdminFeatureItemDTO extends BaseFeatureItemBaseDTO<AdminFeatureItemDTO>{

	AdminFeatureItemDTO(
	);

	factory AdminFeatureItemDTO.fromJson(Map<String, dynamic> map) {
		return AdminFeatureItemDTO( 
		);
	}

	Map<String, dynamic> toJson() {
		final map = super.toJson();
		return map;
	}
}

class AdminAuthorityGroupDTO extends BaseDTO{
	String? adminGroupCode;
	String? description;
	List<String>? adminCodes;
	List<String>? features;
	String? createAdmin;

	AdminAuthorityGroupDTO({
		this.adminGroupCode,
		this.description,
		this.adminCodes,
		this.features,
		this.createAdmin,
		DateTime? createTime,
		DateTime? updateTime,
	}) : super(
			createTime: createTime,
			updateTime: updateTime,
		);

	factory AdminAuthorityGroupDTO.fromJson(Map<String, dynamic> map) {
		return AdminAuthorityGroupDTO( 
			adminGroupCode: map['AdminGroupCode'],
			description: map['Description'],
			adminCodes: map['AdminCodes']?.cast<String>().toList(),
			features: map['Features']?.cast<String>().toList(),
			createAdmin: map['CreateAdmin'],
			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 (adminGroupCode != null)
			map['AdminGroupCode'] = adminGroupCode;
		if (description != null)
			map['Description'] = description;
		if (adminCodes != null)
			map['AdminCodes'] = adminCodes;
		if (features != null)
			map['Features'] = features;
		if (createAdmin != null)
			map['CreateAdmin'] = createAdmin;
		return map;
	}
}