public static void Generate() { var value = RefineryAssays.Parse(File.ReadAllText(@"D:\XML\3.Oil_Name_define.XML")); var keys = value.RefineryAssay.PlantDataGroups.PlantDataGroup.Properties.Property .Select(o => new { o.Name, PropertyKey = o.PropertyKey.Value, PropertyName = o.PropertyName.Value }) .ToList(); var all = map.Split("\r\n".ToArray(), StringSplitOptions.RemoveEmptyEntries) .Select(o => o.Split('\t')) .Where(o => o.Length >= 3) .Where(o => string.IsNullOrEmpty(o[0]) == false && string.IsNullOrEmpty(o[2]) == false) .ToList(); var ls = new List <RefineryAssaysMapItem>(); foreach (var a in all) { var name = a[0]; var key = keys.FirstOrDefault(o => string.Compare(o.Name, name, true) == 0); if (key == null) { key = keys.FirstOrDefault(o => o.Name.StartsWith(name, StringComparison.OrdinalIgnoreCase)); } if (key == null) { continue; } var m = new RefineryAssaysMapItem() { key = key.PropertyKey, name = key.Name, property_name = key.PropertyName, ripp_code = a[2], expr = a.Length == 3 || string.IsNullOrWhiteSpace(a[3]) ? null : a[3]?.Trim() }; ls.Add(m); } var json = JsonConvert.SerializeObject(ls, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); }
/// <summary> /// 转换 /// </summary> /// <param name="oil"></param> /// <returns></returns> public static RefineryAssays ConvertFrom(OilInfoBEntity oil) { var r = new RefineryAssays(); if (oil == null) { return(r); } var maps = Newtonsoft.Json.JsonConvert.DeserializeObject <RefineryAssaysMapItem[]>(File.ReadAllText("RefineryAssaysMaps.json")); #region 原油信息 var name = $"{oil.crudeIndex} - {oil.englishName ?? oil.crudeName}"; r.RefineryAssay = new RefineryAssaysRefineryAssay() { Name = name, RefineryAssayName = name, SourceType = oil.sourceRef, AssociatedFluidPackage = "Basis-1", PlantDataGroups = new RefineryAssaysRefineryAssayPlantDataGroups() { PlantDataGroup = new RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroup() { Name = "Plant Data Group-1", PlantDataGroupName = "Plant Data Group-1" }, } }; var ps = new List <RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupPropertiesProperty>(); foreach (var p in maps) { var tr = oil.OilTableRows.FirstOrDefault(o => o.itemCode == p.ripp_code); if (tr == null) { continue; } var index = oil.OilTableRows.IndexOf(tr); var d = oil.OilDatas[index]; ps.Add(new RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupPropertiesProperty() { Name = p.name, PropertyName = p.property_name, PropertyKey = p.key, PropertyQualifierValue = p.GetValue(d.calData), }); } var plant = r.RefineryAssay.PlantDataGroups.PlantDataGroup; plant.Properties = ps; #endregion 原油信息 #region 切割曲线 OilDataSearchColAccess oilDataColAccess = new OilDataSearchColAccess(); List <OilDataSearchColEntity> OilDataCols = oilDataColAccess.Get("1=1"); OilDataSearchRowAccess oilDataRowAccess = new OilDataSearchRowAccess(); List <OilDataSearchRowEntity> OilDataRows = oilDataRowAccess.Get("1=1"); OilDataSearchAccess oilDataSearchAccess = new OilDataSearchAccess(); List <OilDataSearchEntity> allDatas = oilDataSearchAccess.Get("oilInfoID = " + oil.ID).ToList(); var cuts = new List <RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupCutsCut>(); BuildCut("石脑油", "15-140", "Naph"); BuildCut("煤油", "140-240", "Kero"); BuildCut("柴油", "240-350", "Disel"); BuildCut("蜡油", "350-540", "VGO"); BuildCut("渣油", ">540", "Reside"); //构造切割曲线 void BuildCut(string name1, string name2, string type) { var Cols = OilDataCols.Where(o => o.OilTableName.Contains(name1) && o.OilTableName.Contains(name2)).OrderBy(o => o.itemOrder).ToList(); if (Cols.Count == 0) { return; } var Rows = OilDataRows.Where(o => o.OilDataColID == Cols[0].ID).OrderBy(o => o.OilTableRow.itemOrder).ToList(); if (Rows.Count == 0) { return; } var TableRows = new List <OilTableRowEntity>(); for (int i = 0; i < Rows.Count; i++) { OilTableRowEntity oilTableRow = OilTableRowBll._OilTableRow.Where(o => o.ID == Rows[i].OilTableRowID).FirstOrDefault(); TableRows.Add(oilTableRow); } for (int i = 0; i < Cols.Count; i++) { var Data = allDatas.Where(o => o.oilTableColID == Cols[i].OilTableColID).ToList(); if (Data?.Any() != true) { continue; } var cut = new RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupCutsCut() { CutName = type, Name = type, CutType = 0, }; var ps2 = new List <RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupCutsCutPropertiesProperty>(); foreach (var p in maps) { var tr = Data.FirstOrDefault(o => o.OilTableRow.itemCode == p.ripp_code); if (tr == null) { continue; } ps2.Add(new RefineryAssaysRefineryAssayPlantDataGroupsPlantDataGroupCutsCutPropertiesProperty() { Name = p.name, PropertyName = p.property_name, InputValue = p.GetValue(tr.calData) }); } cut.Properties = ps2; cuts.Add(cut); } } if (cuts.Any() == true) { plant.Cuts = cuts; } #endregion 切割曲线 return(r); }