580b3b8d-cc02-4a68-8fbd-d1ec374a25f2 true D0001-sql-11.sdt.local jazz dev master Prod true AWSSDK.DynamoDBv2 AWSSDK.S3 Newtonsoft.Json Amazon.DynamoDBv2.DataModel Amazon.DynamoDBv2 Amazon.DynamoDBv2.DocumentModel Amazon.DynamoDBv2.Model public static Dictionary> Versions = new Dictionary>(); void Main() { Versions = (from v in CaseTypeFamilyVersions select v) .ToDictionary(v => v.CaseTypeFamilyVersionID, t => new Tuple(t.StartDate, t.EndDate)); var aprdrg = (from aprDto in CaseTypeFamilyMappingAPRDRGs join ctfDto in CaseTypeFamilies on aprDto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID select new AllCaseTypeFamily( ctfDto.CaseTypeFamilyID, ctfDto.CaseTypeFamilyGUID, ctfDto.Name, ctfDto.CaseTypeFamilyGlobalID, aprDto.APRDRGCode, aprDto.CaseTypeFamilyVersionID)).ToList(); var msdrg = (from icd10Dto in CaseTypeFamilyMappingICD10s join ctfDto in CaseTypeFamilies on icd10Dto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID select new AllCaseTypeFamily( ctfDto.CaseTypeFamilyID, ctfDto.CaseTypeFamilyGUID, ctfDto.Name, ctfDto.CaseTypeFamilyGlobalID, icd10Dto.SkipICD, icd10Dto.ICD10Code, icd10Dto.MSDRGCode, icd10Dto.CaseTypeFamilyVersionID)).ToList(); var cpt = (from cptDto in CaseTypeFamilyMappingCPTs join ctfDto in CaseTypeFamilies on cptDto.CaseTypeFamilyID equals ctfDto.CaseTypeFamilyID select new AllCaseTypeFamily( ctfDto.CaseTypeFamilyID, ctfDto.CaseTypeFamilyGUID, ctfDto.Name, ctfDto.CaseTypeFamilyGlobalID, cptDto.CaseTypeFamilyVersionID, cptDto.CPTCode)).ToList(); //cpt.Dump(nameof(cpt)); var allCaseTypeFamily = aprdrg.Union(msdrg).Union(cpt) .OrderBy(x => x.CaseTypeFamilyID) .ThenByDescending(x => x.CaseTypeFamilyVersionID); var globalCaseTypeFamily = allCaseTypeFamily .GroupBy(ctf => new { ctf.CaseTypeFamilyID, ctf.CaseTypeFamilyGUID, ctf.Name, ctf.CaseTypeFamilyGlobalID, ctf.CaseTypeFamilyVersionID }, (g, d) => new GlobalCaseTypeFamily( g.CaseTypeFamilyID, g.CaseTypeFamilyGUID, g.Name, g.CaseTypeFamilyGlobalID, g.CaseTypeFamilyVersionID, d.First().StartDate, d.First().EndDate, d.Where(x => !string.IsNullOrEmpty(x.APRDRGCode)).Select(x => x.APRDRGCode), d.Where(x => !string.IsNullOrEmpty(x.CPTCode)).Select(x => x.CPTCode), d .Where(x => (string.IsNullOrEmpty(x.APRDRGCode) || string.IsNullOrEmpty(x.CPTCode)) && !x.SkipICD) .Select(x => new ICD10Code(x.ICD10Code, x.MSDRGCode)), d .Where(x => (string.IsNullOrEmpty(x.APRDRGCode) || string.IsNullOrEmpty(x.CPTCode)) && x.SkipICD) .Select(x => new ICD10Code(x.ICD10Code, x.MSDRGCode)) )); globalCaseTypeFamily.Dump(); /* try { var config = new AmazonDynamoDBConfig { ServiceURL = "http://localhost:8000" }; var client = new AmazonDynamoDBClient(config); var context = new DynamoDBContext(client); DeleteTable(client, nameof(GlobalCaseTypeFamily)); CreateTableGlobalCaseTypeFamily(client); var table = Amazon.DynamoDBv2.DocumentModel.Table.LoadTable(client, nameof(GlobalCaseTypeFamily)); globalCaseTypeFamily.ToList() .ForEach(ctf => { table.PutItem(Document.FromJson(JsonConvert.SerializeObject(ctf))); }); } catch (Exception ex) { ex.Dump(); throw; } */ //var result = JsonConvert.SerializeObject(globalCaseTypeFamily); //result.Dump(nameof(globalCaseTypeFamily)); // Util.WriteCsv(result, @"D:\CaseTypeFamily.csv"); //System.IO.File.WriteAllText(@"D:\CaseTypeFamily.json", JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented)); } private static void CreateTableGlobalCaseTypeFamily(AmazonDynamoDBClient client) { string tableName = nameof(GlobalCaseTypeFamily); var response = client.CreateTable(new CreateTableRequest { TableName = tableName, AttributeDefinitions = new List() { new AttributeDefinition { AttributeName = "PartitionKey", AttributeType = "S" }, new AttributeDefinition { AttributeName = "CaseTypeFamilyID", AttributeType = "N" }, new AttributeDefinition { AttributeName = "CaseTypeFamilyGUID", AttributeType = "S" }, new AttributeDefinition { AttributeName = "Name", AttributeType = "S" }, new AttributeDefinition { AttributeName = "CaseTypeFamilyGlobalID", AttributeType = "S" } }, KeySchema = new List() { new KeySchemaElement() { AttributeName = "PartitionKey", KeyType = "HASH" }, new KeySchemaElement { AttributeName = "CaseTypeFamilyID", KeyType = "RANGE" } } }); WaitTillTableCreated(client, tableName, response); } #region AWS DynamoDB Helpers private static void DeleteTable(AmazonDynamoDBClient client, string tableName) { try { var deleteTableResponse = client.DeleteTable(new DeleteTableRequest() { TableName = tableName }); WaitTillTableDeleted(client, tableName, deleteTableResponse); } catch (ResourceNotFoundException) { // There is no such table. } } private static void WaitTillTableCreated(AmazonDynamoDBClient client, string tableName, CreateTableResponse response) { var tableDescription = response.TableDescription; string status = tableDescription.TableStatus; Console.WriteLine(tableName + " - " + status); // Let us wait until table is created. Call DescribeTable. while (status != "ACTIVE") { System.Threading.Thread.Sleep(5000); // Wait 5 seconds. try { var res = client.DescribeTable(new DescribeTableRequest { TableName = tableName }); Console.WriteLine("Table name: {0}, status: {1}", res.Table.TableName, res.Table.TableStatus); status = res.Table.TableStatus; } // Try-catch to handle potential eventual-consistency issue. catch (ResourceNotFoundException) { } } } private static void WaitTillTableDeleted(AmazonDynamoDBClient client, string tableName, DeleteTableResponse response) { var tableDescription = response.TableDescription; string status = tableDescription.TableStatus; Console.WriteLine(tableName + " - " + status); // Let us wait until table is created. Call DescribeTable try { while (status == "DELETING") { System.Threading.Thread.Sleep(5000); // wait 5 seconds var res = client.DescribeTable(new DescribeTableRequest { TableName = tableName }); Console.WriteLine("Table name: {0}, status: {1}", res.Table.TableName, res.Table.TableStatus); status = res.Table.TableStatus; } } catch (ResourceNotFoundException) { // Table deleted. } } #endregion public class ICD10Code { [DynamoDBProperty] public string ICD10_Code { get; set; } [DynamoDBProperty] public string MSDRGCode { get; set; } public ICD10Code() { ICD10_Code = string.Empty; MSDRGCode = string.Empty; } public ICD10Code(string icd10code, string msdrgcode) { ICD10_Code = icd10code; MSDRGCode = msdrgcode; } } [DynamoDBTable("GlobalCaseTypeFamily")] public class GlobalCaseTypeFamily { [DynamoDBHashKey] public string PartitionKey => $"{CaseTypeFamilyVersionID}|{CaseTypeFamilyID}"; [DynamoDBProperty] public int CaseTypeFamilyID { get; set; } [DynamoDBProperty] public Guid CaseTypeFamilyGUID { get; set; } [DynamoDBProperty] public string Name { get; set; } [DynamoDBProperty] public string CaseTypeFamilyGlobalID { get; set; } [DynamoDBProperty] public int CaseTypeFamilyVersionID { get; set; } [DynamoDBProperty] public DateTime StartDate { get; set; } [DynamoDBProperty] public DateTime EndDate { get; set; } [DynamoDBProperty] public List APRDRGCodes { get; set; } [DynamoDBProperty] public List CPTCodes { get; set; } [DynamoDBProperty] public List ICD10Codes { get; set; } [DynamoDBProperty] public List SkipICD10Codes { get; set; } public GlobalCaseTypeFamily() { CaseTypeFamilyID = -1; CaseTypeFamilyGUID = Guid.Empty; Name = string.Empty; CaseTypeFamilyGlobalID = string.Empty; CaseTypeFamilyVersionID = -1; StartDate = DateTime.MinValue; EndDate = DateTime.MaxValue; APRDRGCodes = new List(); CPTCodes = new List(); } public GlobalCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID, DateTime startDate, DateTime endDate) { CaseTypeFamilyID = caseTypeFamilyID; CaseTypeFamilyGUID = caseTypeFamilyGuid; Name = name; CaseTypeFamilyGlobalID = caseTypeFamilyGlobalID; CaseTypeFamilyVersionID = caseTypeFamilyVersionID; StartDate = startDate; EndDate = endDate; } public GlobalCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID, DateTime startDate, DateTime endDate, IEnumerable aprdrgcodes, IEnumerable cptcodes, IEnumerable icd10codes, IEnumerable skipicd10codes) : this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID, startDate, endDate) { APRDRGCodes = aprdrgcodes.ToList(); CPTCodes = cptcodes.ToList(); ICD10Codes = icd10codes.ToList(); SkipICD10Codes = skipicd10codes.ToList(); } } public class AllCaseTypeFamily { public int CaseTypeFamilyID { get; set; } public Guid CaseTypeFamilyGUID { get; set; } public string Name { get; set; } public string CaseTypeFamilyGlobalID { get; set; } public string APRDRGCode { get; set; } public bool SkipICD { get; set; } public string ICD10Code { get; set; } public string MSDRGCode { get; set; } public string CPTCode { get; set; } public int CaseTypeFamilyVersionID { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public AllCaseTypeFamily() { CaseTypeFamilyID = -1; CaseTypeFamilyGUID = Guid.Empty; Name = string.Empty; CaseTypeFamilyGlobalID = string.Empty; APRDRGCode = string.Empty; SkipICD = false; ICD10Code = string.Empty; MSDRGCode = string.Empty; CPTCode = string.Empty; CaseTypeFamilyVersionID = -1; StartDate = DateTime.MinValue; EndDate = DateTime.MaxValue; } public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID) : this() { CaseTypeFamilyID = caseTypeFamilyID; CaseTypeFamilyGUID = caseTypeFamilyGuid; Name = name; CaseTypeFamilyGlobalID = caseTypeFamilyGlobalID; } public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID) : this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID) { CaseTypeFamilyVersionID = caseTypeFamilyVersionID; if (Versions.ContainsKey(caseTypeFamilyVersionID)) { StartDate = UserQuery.Versions[caseTypeFamilyVersionID].Item1; EndDate = UserQuery.Versions[caseTypeFamilyVersionID].Item2; } } public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, string aprdrgCode, int caseTypeFamilyVersionID) : this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID) { APRDRGCode = aprdrgCode; } public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, bool skipICD, string icd10Code, string msdrgCode, int caseTypeFamilyVersionID) : this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID) { SkipICD = skipICD; ICD10Code = icd10Code; MSDRGCode = msdrgCode; } public AllCaseTypeFamily(int caseTypeFamilyID, Guid caseTypeFamilyGuid, string name, string caseTypeFamilyGlobalID, int caseTypeFamilyVersionID, string cptCode) : this(caseTypeFamilyID, caseTypeFamilyGuid, name, caseTypeFamilyGlobalID, caseTypeFamilyVersionID) { CPTCode = cptCode; } }