using DevExpress.Drawing.Internal.Interop; using DevExpress.Office.Utils; using DevExpress.XtraRichEdit.Model; using DevExpress.XtraScheduler.Drawing.Internal; using DevExpress.XtraTreeList.Data; using GeoSigma.SigmaDrawerElement; using GeoSigmaDrawLib; using InterfaceWorkAreaData; //using InterfaceWorkAreaData; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.SS.Formula.Functions; using SigmaDrawerElement; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Text; using WorkData; using WorkData.Entity; using static ScintillaNET.Style; namespace GeoSigma.UCDraw.WellAndSection { public class StringIntMapper { private readonly Dictionary _mappings; private readonly int _defaultValue; public StringIntMapper(int defaultValue = -1) { _mappings = new Dictionary(StringComparer.OrdinalIgnoreCase); _defaultValue = defaultValue; } public void AddMapping(string key, int value = -1) => _mappings[key] = value; public void AddMappings(IEnumerable> mappings) { foreach (var mapping in mappings) { _mappings[mapping.Key] = mapping.Value; } } public int this[string key] { get => _mappings.TryGetValue(key, out int value) ? value : _defaultValue; set => _mappings[key] = value; } public bool TryGetValue(string key, out int value) => _mappings.TryGetValue(key, out value); public bool UpdateMapping(string key, int newValue) { if (_mappings.ContainsKey(key)) { _mappings[key] = newValue; return true; } return false; } public bool HasKey(string key) { return _mappings.ContainsKey(key); } public IEnumerable Keys => _mappings.Keys; public IEnumerable Values => _mappings.Values; } class WellDataConvert { public static void getWellPerforationsJson(ref string jsonStr, List listPerforations) { jsonStr = ""; if (listPerforations.Count == 0) return; JObject json = new JObject(); json["dataType"] = "Shot"; JArray jCols = new JArray(); jCols.Add("name"); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("date"); // kep工区表中没有 jCols.Add("density"); //kep工区表中没有 jCols.Add("method"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < listPerforations.Count; k++) { JArray tdata = new JArray(); tdata.Add(listPerforations[k].layer); tdata.Add(listPerforations[k].top.ToString()); tdata.Add(listPerforations[k].bottom.ToString()); tdata.Add(""); tdata.Add(""); tdata.Add(listPerforations[k].perforationMethod); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellFaultPointsJson(ref string jsonStr, List listFaultPts) { jsonStr = ""; if (listFaultPts.Count == 0) return; JObject json = new JObject(); json["dataType"] = "FaultPoint"; JArray jCols = new JArray(); jCols.Add("depth"); jCols.Add("name"); jCols.Add("topLayer"); jCols.Add("bottomLayer"); jCols.Add("compareWell"); jCols.Add("compareWellTop"); jCols.Add("compareWellBottom"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < listFaultPts.Count; k++) { JArray tdata = new JArray(); tdata.Add(listFaultPts[k].depth.ToString()); tdata.Add(listFaultPts[k].faultName); tdata.Add(listFaultPts[k].faultTopLayer); tdata.Add(listFaultPts[k].faultBottomLayer); tdata.Add(""); tdata.Add(listFaultPts[k].compareWellTop.ToString()); tdata.Add(listFaultPts[k].compareWellBottom.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellTrajectoryJson(ref string jsonStr, List listTrackPts) { jsonStr = ""; if (listTrackPts.Count == 0) return; JObject json = new JObject(); json["dataType"] = "trajectory"; JArray jCols = new JArray(); jCols.Add("depth"); jCols.Add("bevel"); jCols.Add("azimuth"); jCols.Add("depthV"); jCols.Add("x"); jCols.Add("y"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < listTrackPts.Count; k++) { JArray tdata = new JArray(); tdata.Add(listTrackPts[k].depth.ToString()); tdata.Add(listTrackPts[k].bevel.ToString()); tdata.Add(listTrackPts[k].azimuth.ToString()); tdata.Add(listTrackPts[k].depthV.ToString()); tdata.Add(listTrackPts[k].x.ToString()); tdata.Add(listTrackPts[k].y.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellStratificationJson(ref string jsonStr, List listWellStrati) { jsonStr = ""; if (listWellStrati.Count == 0) return; JObject json = new JObject(); json["dataType"] = "wellStratification"; JArray jCols = new JArray(); jCols.Add("id"); jCols.Add("level"); jCols.Add("name"); jCols.Add("code"); jCols.Add("parentId"); jCols.Add("order"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < listWellStrati.Count; k++) { JArray tdata = new JArray(); tdata.Add(listWellStrati[k].id.ToString()); tdata.Add(listWellStrati[k].level.ToString()); tdata.Add(listWellStrati[k].name.ToString()); tdata.Add(listWellStrati[k].code.ToString()); tdata.Add(listWellStrati[k].parentId.ToString()); tdata.Add(listWellStrati[k].order.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellCurveValueForNewWell(DataTable curvesTable, GeoSigmaWellPoleXY wellGeo, UInt64 wellHandle, UInt64 trackHandle, string dataStrRef) { int depthid = 0; //认为深度是第一列 for (int j = 0; j < curvesTable.Columns.Count; j++) { if (curvesTable.Columns[j].ColumnName.ToUpper() == dataStrRef.ToUpper()) { JObject json = new JObject(); json["dataType"] = "Curve"; JArray jCols = new JArray(); jCols.Add("depth"); jCols.Add("value"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < curvesTable.Rows.Count; k++) { JArray tdata = new JArray(); tdata.Add(curvesTable.Rows[k][depthid]); tdata.Add(curvesTable.Rows[k][j]); jDatas.Add(tdata); } json["data"] = jDatas; string strJson = JsonConvert.SerializeObject(json); byte[] databytes = Encoding.UTF8.GetBytes(strJson); wellGeo.SetWellTrackDataJson(trackHandle, strJson); } } } public static void getWellSandSetsJson(ref string jsonStr, List lstWellSandSets) { jsonStr = ""; if (lstWellSandSets.Count == 0) return; JObject json = new JObject(); json["dataType"] = "SandSet"; JArray jCols = new JArray(); jCols.Add("id"); jCols.Add("name"); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("result"); jCols.Add("facies"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstWellSandSets.Count; k++) { JArray tdata = new JArray(); tdata.Add(lstWellSandSets[k].id.ToString()); tdata.Add(lstWellSandSets[k].name.ToString()); tdata.Add(lstWellSandSets[k].top.ToString()); tdata.Add(lstWellSandSets[k].bottom.ToString()); tdata.Add(lstWellSandSets[k].result.ToString()); tdata.Add(lstWellSandSets[k].facies.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getStratumDivisionJson(ref string jsonStr, List listStratums) { jsonStr = ""; if (listStratums.Count == 0) return; JObject json = new JObject(); json["dataType"] = "stratumDivision"; JArray jCols = new JArray(); jCols.Add("id"); jCols.Add("name"); jCols.Add("code"); jCols.Add("parentId"); jCols.Add("classname"); jCols.Add("orderId"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < listStratums.Count; k++) { JArray tdata = new JArray(); tdata.Add(listStratums[k].id.ToString()); tdata.Add(listStratums[k].name.ToString()); tdata.Add(listStratums[k].code.ToString()); tdata.Add(listStratums[k].parentID.ToString()); tdata.Add(listStratums[k].classname.ToString()); tdata.Add(listStratums[k].orderId.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getReservesLayerJson(ref string jsonStr, List lstReservesLayers) { jsonStr = ""; if (lstReservesLayers.Count == 0) return; JObject json = new JObject(); json["dataType"] = "ReservesLayer"; JArray jCols = new JArray(); // jCols.Add("well"); jCols.Add("layer"); jCols.Add("topSecondSandstone"); jCols.Add("bottomSecondSandstone"); jCols.Add("topFirstSandstone"); jCols.Add("bottomFirstSandstone"); jCols.Add("pureEffectiveTopEstimate"); jCols.Add("pureEffectiveThicknessEstimate"); jCols.Add("viewEffectiveTop"); jCols.Add("viewEffectiveThickness"); jCols.Add("electricLogInterpretation"); jCols.Add("facies"); jCols.Add("subfacies"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstReservesLayers.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(lstReservesLayers[k].layer); tdata.Add(lstReservesLayers[k].topSecondSandstone.ToString()); tdata.Add(lstReservesLayers[k].bottomSecondSandstone.ToString()); tdata.Add(lstReservesLayers[k].topFirstSandstone.ToString()); tdata.Add(lstReservesLayers[k].bottomFirstSandstone.ToString()); tdata.Add(lstReservesLayers[k].pureEffectiveTopEstimate.ToString()); tdata.Add(lstReservesLayers[k].pureEffectiveThicknessEstimate.ToString()); tdata.Add(lstReservesLayers[k].viewEffectiveTop.ToString()); tdata.Add(lstReservesLayers[k].viewEffectiveThickness.ToString()); tdata.Add(lstReservesLayers[k].electricLogInterpretation.ToString()); tdata.Add(lstReservesLayers[k].facies); tdata.Add(lstReservesLayers[k].subfacies); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getInnerLayersJson(ref string jsonStr, List lstInnerLayers) { jsonStr = ""; if (lstInnerLayers.Count == 0) return; JObject json = new JObject(); json["dataType"] = "InnerLayer"; JArray jCols = new JArray(); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("thickness"); jCols.Add("type"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstInnerLayers.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(lstInnerLayers[k].top.ToString()); tdata.Add(lstInnerLayers[k].bottom.ToString()); tdata.Add(lstInnerLayers[k].thickness.ToString()); tdata.Add(lstInnerLayers[k].type); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellLithologysJson(ref string jsonStr, List lstLithologys) { jsonStr = ""; if (lstLithologys.Count == 0) return; JObject json = new JObject(); json["dataType"] = "Lithology"; JArray jCols = new JArray(); // jCols.Add("well"); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("color"); jCols.Add("oilcontent"); jCols.Add("inclusions"); jCols.Add("structure"); jCols.Add("lithologyprefix"); jCols.Add("lithology"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstLithologys.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(lstLithologys[k].top.ToString()); tdata.Add(lstLithologys[k].bottom.ToString()); tdata.Add(lstLithologys[k].color); tdata.Add(lstLithologys[k].oilcontent); tdata.Add(lstLithologys[k].inclusions); tdata.Add(lstLithologys[k].structure); tdata.Add(lstLithologys[k].lithologyprefix); tdata.Add(lstLithologys[k].lithology); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellOilTestJson(ref string jsonStr, List lstOilTests) { jsonStr = ""; if (lstOilTests.Count == 0) return; JObject json = new JObject(); json["dataType"] = "OilTest"; JArray jCols = new JArray(); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("conclusion"); jCols.Add("daily_oil"); jCols.Add("daily_water"); jCols.Add("daily_gas"); jCols.Add("total_oil"); jCols.Add("total_gas"); jCols.Add("total_water"); jCols.Add("method"); jCols.Add("layer"); jCols.Add("staticMpa"); jCols.Add("caseMpa"); jCols.Add("flowMpa"); jCols.Add("density"); jCols.Add("viscosity"); jCols.Add("start"); jCols.Add("end"); jCols.Add("staticTemperature"); jCols.Add("thickness"); jCols.Add("stroke"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstOilTests.Count; k++) { JArray tdata = new JArray(); tdata.Add(lstOilTests[k].top.ToString()); tdata.Add(lstOilTests[k].bottom.ToString()); tdata.Add(lstOilTests[k].verdict); tdata.Add(lstOilTests[k].dayOil.ToString()); tdata.Add(lstOilTests[k].dayWater.ToString()); tdata.Add(lstOilTests[k].dayGas.ToString()); tdata.Add(lstOilTests[k].sumOil.ToString()); tdata.Add(lstOilTests[k].sumWater.ToString()); tdata.Add(lstOilTests[k].sumGas.ToString()); tdata.Add(lstOilTests[k].method); tdata.Add(lstOilTests[k].layer); tdata.Add(lstOilTests[k].staticMpa.ToString()); tdata.Add(lstOilTests[k].caseMpa.ToString()); tdata.Add(lstOilTests[k].flowMpa.ToString()); tdata.Add(lstOilTests[k].density.ToString()); //密度 tdata.Add(lstOilTests[k].viscosity.ToString()); //粘度 tdata.Add(lstOilTests[k].startTime); tdata.Add(lstOilTests[k].endTime); tdata.Add(lstOilTests[k].staticTemperature.ToString()); tdata.Add(lstOilTests[k].thickness.ToString()); tdata.Add(lstOilTests[k].stroke.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellCoringJson(ref string jsonStr,Listlist) { jsonStr = ""; if (list.Count == 0) return; JObject json = new JObject(); json["dataType"] = "Coring"; JArray jCols = new JArray(); // jCols.Add("well"); jCols.Add("name"); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("times"); jCols.Add("length"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < list.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(list[k].layer); tdata.Add(list[k].top.ToString()); tdata.Add(list[k].bottom.ToString()); tdata.Add(list[k].times.ToString()); tdata.Add(list[k].length.ToString()); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellSideWallCoringsJson(ref string jsonStr, List list) { jsonStr = ""; if (list.Count == 0) return; JObject json = new JObject(); json["dataType"] = "CoreWell"; JArray jCols = new JArray(); // jCols.Add("well"); jCols.Add("depth"); jCols.Add("lithology"); jCols.Add("oil_level"); jCols.Add("times"); jCols.Add("color"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < list.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(list[k].top.ToString()); tdata.Add(list[k].lithology); tdata.Add(list[k].oilcontent); tdata.Add(list[k].number.ToString()); tdata.Add(list[k].color); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getWellCyclesJson(ref string jsonStr, List lstCycles) { jsonStr = ""; if (lstCycles.Count == 0) return; JObject json = new JObject(); json["dataType"] = "Cycle"; JArray jCols = new JArray(); // jCols.Add("well"); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("type"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < lstCycles.Count; k++) { JArray tdata = new JArray(); // tdata.Add(lstReservesLayers[k].well); tdata.Add(lstCycles[k].top.ToString()); tdata.Add(lstCycles[k].bottom.ToString()); tdata.Add(lstCycles[k].type); jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); } public static void getDataJson(string wellName, string sourceId, ref string jsonStr) //通过数据表标识获得数据 { if (sourceId == "Shot") { List listPerforations = workAreaDb.Instance.workData.getWellPerforations(wellName); getWellPerforationsJson(ref jsonStr, listPerforations); } if (sourceId == "Lithology") { List lstLiths = workAreaDb.Instance.workData.getWellLithologys(wellName); getWellLithologysJson(ref jsonStr, lstLiths); } else if (sourceId == "OilTest") { List lstOilTest = workAreaDb.Instance.workData.getWellOilTests(wellName); getWellOilTestJson(ref jsonStr, lstOilTest); } else if (sourceId == "InnerLayer") { List lstInnerLayers = workAreaDb.Instance.workData.getInnerLayers(wellName); getInnerLayersJson(ref jsonStr, lstInnerLayers); } } public static bool setWellCycleDataToTrack(GeoSigmaWellPoleXY geoWell, string wellName, UInt64 cycleTrack, string cycleTableType) { bool b = false; int cycleId = 2; if (cycleTableType == WellObjectBaseInfo.CycleTableTypes[(int)(WellObjectBaseInfo.eCycleDataType.CycleLongterm)]) //"CycleLongterm") cycleId = 1; else if (cycleTableType == WellObjectBaseInfo.CycleTableTypes[(int)(WellObjectBaseInfo.eCycleDataType.CycleShortterm)]) cycleId = 3; List lstCycles = workAreaDb.Instance.workData.getWellCycles(wellName, cycleId); if (lstCycles.Count > 0) { string jsonStr = ""; WellDataConvert.getWellCyclesJson(ref jsonStr, lstCycles); b = geoWell.SetWellTrackDataJson(cycleTrack, jsonStr); } return b; } /// //目前 读取的井数据使用的是InterfaceWorkArea中的结构, // 写入井使用WorkData中的实体,注意区别 /// //enum eLithid {well, top , bottom, thickness, color , oilcontent , inclusions, lithologyprefix, structure, // lithology,firstlayer, secondlayer ,fourthlayer, fifthlayer}; public static bool getWellLithologyFromJson(string jh, string jsonStr, out List listWellLith) { string[] Cols = { "well", "top", "bottom", "thickness", "color", "oilcontent", "inclusions", "lithologyprefix", "structure", "lithology", "firstlayer", "secondlayer", "fourthlayer", "fifthlayer" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } listWellLith = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "Lithology") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; WellLithology wellLith = new WellLithology(); wellLith.ID = id; for (int j = 0; j < jCols.Count; j++) { wellLith.Well = jh; if (colMap["top"] > -1) { wellLith.top = Convert.ToDouble(jRec[colMap["top"]].ToString()); } if (colMap["bottom"] > -1) { wellLith.bottom = Convert.ToDouble(jRec[colMap["bottom"]].ToString()); } wellLith.thickness = wellLith.bottom - wellLith.top; if (colMap["color"] > -1) { wellLith.color = jRec[colMap["color"]].ToString(); } if (colMap["oilcontent"] > -1) { wellLith.oilcontent = jRec[colMap["oilcontent"]].ToString(); } if (colMap["inclusions"] > -1) { wellLith.inclusions = jRec[colMap["inclusions"]].ToString(); } if (colMap["lithologyprefix"] > -1) { wellLith.lithologyprefix = jRec[colMap["lithologyprefix"]].ToString(); } if (colMap["structure"] > -1) { wellLith.structure = jRec[colMap["structure"]].ToString(); } if (colMap["lithology"] > -1) { wellLith.lithology = jRec[colMap["lithology"]].ToString(); } if (colMap["firstlayer"] > -1) { wellLith.firstlayer = jRec[colMap["firstlayer"]].ToString(); } if (colMap["secondlayer"] > -1) { wellLith.secondlayer = jRec[colMap["secondlayer"]].ToString(); } if (colMap["thirdlayer"] > -1) { wellLith.thirdlayer = jRec[colMap["thirdlayer"]].ToString(); } if (colMap["fourthlayer"] > -1) { wellLith.fourthlayer = jRec[colMap["fourthlayer"]].ToString(); } if (colMap["fifthlayer"] > -1) { wellLith.fifthlayer = jRec[colMap["fifthlayer"]].ToString(); } if (colMap["lithologyname"] > -1) { wellLith.lithologyname = jRec[colMap["lithologyname"]].ToString(); } if (colMap["markerlayer"] > -1) { wellLith.markerlayer = jRec[colMap["markerlayer"]].ToString(); } } listWellLith.Add(wellLith); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellInnerLayerFromJson(string jh, string jsonStr, out List listWellInner) { string[] Cols = { "well", "top", "bottom", "thickness", "type" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } listWellInner = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "InnerLayer") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; WellInnerLayer welldata = new WellInnerLayer(); welldata.ID = id; for (int j = 0; j < jCols.Count; j++) { welldata.Well = jh; if (colMap["top"] > -1) { welldata.top = Convert.ToDouble(jRec[colMap["top"]].ToString()); } if (colMap["bottom"] > -1) { welldata.bottom = Convert.ToDouble(jRec[colMap["bottom"]].ToString()); } welldata.thickness = welldata.bottom - welldata.top; if (colMap["type"] > -1) { welldata.type = jRec[colMap["type"]].ToString(); } } listWellInner.Add(welldata); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellPerforationFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "JH", "DS", "DS2", "CW", "SK" }; //Dictionary colNameMap = new Dictionary { { "DS", "" }, }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "Shot") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (col == "name") colMap.UpdateMapping("CW", i); if (col == "top") colMap.UpdateMapping("DS", i); if (col == "bottom") colMap.UpdateMapping("DS2", i); if (col == "method") colMap.UpdateMapping("SK", i); } int id = DBHelp.Db.Queryable().Max("id") + 1; int xhid = DBHelp.Db.Queryable().Max("xhid") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; WellPerforation welldata = new WellPerforation(); welldata.ID = id; welldata.XHID = xhid; for (int j = 0; j < jCols.Count; j++) { welldata.JH = jh; if (colMap["DS"] > -1) { welldata.DS = Convert.ToDouble(jRec[colMap["DS"]].ToString()); } if (colMap["DS2"] > -1) { welldata.DS2 = Convert.ToDouble(jRec[colMap["DS2"]].ToString()); } if (colMap["CW"] > -1) { welldata.CW = jRec[colMap["CW"]].ToString(); } if (colMap["SK"] > -1) { welldata.SK = jRec[colMap["SK"]].ToString(); } } list.Add(welldata); id++; xhid++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static void getColNameAndDatasFromJson(string jsonStr, ref string dataType, ref string[] colName, ref string[,] strData) { //从json串中获得数据 JObject json = JObject.Parse(jsonStr); dataType = (string)json["dataType"]; JArray colNames = (JArray)json["columnName"]; colName = new string[colNames.Count()]; int ii = 0; foreach (string jitem in colNames) { //JObject j = (JObject)jitem; colName[ii] = jitem; // j.ToString(); ii++; } ii = 0; JArray datas = (JArray)json["data"]; strData = new string[datas.Count(), colNames.Count()]; foreach (var jitem in datas) { JArray jarr = (JArray)jitem; int jj = 0; foreach (string jstr in jarr) { strData[ii, jj] = jstr; // Encoding.Unicode.GetString(unicodebytes); // Encoding.UTF8.GetString(utf8byts); jj++; } ii++; } } public static bool getWellFaultsFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "JH", "DCBH", "DDSD", "DSDC", "DSDC2", "DBJDS", "DBJDS2" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } bool b = false; list = new List(); try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "FaultPoint") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (col == "name") colMap.UpdateMapping("DCBH", i); if (col == "depth") colMap.UpdateMapping("DDSD", i); if (col == "topLayer") colMap.UpdateMapping("DSDC", i); if (col == "bottomLayer") colMap.UpdateMapping("DSDC2", i); if (col == "compareWellTop") colMap.UpdateMapping("DBJDS", i); if (col == "compareWellBottom") colMap.UpdateMapping("DBJDS2", i); } int id = DBHelp.Db.Queryable().Max("id") + 1; int xhid = DBHelp.Db.Queryable().Max("XHID") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; WellBreakPoint welldata = new WellBreakPoint(); welldata.ID = id; welldata.XHID = id; for (int j = 0; j < jCols.Count; j++) { welldata.JH = jh; if (colMap["DCBH"] > -1) { welldata.DCBH = (jRec[colMap["DCBH"]].ToString()); } if (colMap["DDSD"] > -1) { welldata.DDSD = Convert.ToDouble(jRec[colMap["DDSD"]].ToString()); } if (colMap["DSDC"] > -1) { welldata.DSDC = jRec[colMap["DSDC"]].ToString(); } if (colMap["DSDC2"] > -1) { welldata.DSDC2 = jRec[colMap["DSDC2"]].ToString(); } if (colMap["DBJDS"] > -1) { welldata.DBJDS = Convert.ToDouble(jRec[colMap["DBJDS"]].ToString()); } if (colMap["DBJDS2"] > -1) { welldata.DBJDS2 = Convert.ToDouble(jRec[colMap["DBJDS2"]].ToString()); } } list.Add(welldata); id++; xhid++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellInterpretDrillLayerFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "JH", "CW", "SD", "DJSD", "JSJL" }; //Dictionary colNameMap = new Dictionary { { "DS", "" }, }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "SandSet") //砂层组对应 kep井分层 { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (col == "name") colMap.UpdateMapping("CW", i); if (col == "top") colMap.UpdateMapping("SD", i); if (col == "bottom") colMap.UpdateMapping("DJSD", i); if (col == "result") colMap.UpdateMapping("JSJL", i); } int id = DBHelp.Db.Queryable().Max("id") + 1; int xhid = DBHelp.Db.Queryable().Max("XHID") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; InterpretDrillWellLayered welldata = new InterpretDrillWellLayered(); welldata.ID = id; welldata.XHID = xhid; for (int j = 0; j < jCols.Count; j++) { welldata.JH = jh; if (colMap["SD"] > -1) { welldata.SD = Convert.ToDouble(jRec[colMap["SD"]].ToString()); } if (colMap["DJSD"] > -1) { welldata.DJSD = Convert.ToDouble(jRec[colMap["DJSD"]].ToString()); } if (colMap["CW"] > -1) { welldata.CW = jRec[colMap["CW"]].ToString(); } if (colMap["JSJL"] > -1) { welldata.JSJL = jRec[colMap["JSJL"]].ToString(); } welldata.HD = welldata.DJSD - welldata.SD; } list.Add(welldata); id++; xhid++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellReserversLayerFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "layer", "topSecondSandstone", "bottomSecondSandstone", "topFirstSandstone", "bottomFirstSandstone", "pureEffectiveTopEstimate","pureEffectiveThicknessEstimate","electricLogInterpretation","facies","subfacies"}; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "ReservesLayer") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; WellReservesLayer welldata = new WellReservesLayer(); welldata.ID = id; for (int j = 0; j < jCols.Count; j++) { welldata.Well = jh; if (colMap["layer"] > -1) { welldata.Layer = jRec[colMap["layer"]].ToString(); } if (colMap["topSecondSandstone"] > -1) { welldata.TopSecondSandstone = Convert.ToDouble(jRec[colMap["topSecondSandstone"]].ToString()); } if (colMap["bottomSecondSandstone"] > -1) { welldata.BottomSecondSandstone = Convert.ToDouble(jRec[colMap["bottomSecondSandstone"]].ToString()); } if (colMap["topFirstSandstone"] > -1) { welldata.TopFirstSandstone = Convert.ToDouble(jRec[colMap["topFirstSandstone"]].ToString()); } if (colMap["bottomFirstSandstone"] > -1) { welldata.BottomFirstSandstone = Convert.ToDouble(jRec[colMap["bottomFirstSandstone"]].ToString()); } if (colMap["pureEffectiveTopEstimate"] > -1) { welldata.PureEffectiveTopEstimate = Convert.ToDouble(jRec[colMap["pureEffectiveTopEstimate"]].ToString()); } if (colMap["pureEffectiveThicknessEstimate"] > -1) { welldata.PureEffectiveThicknessEstimate = Convert.ToDouble(jRec[colMap["pureEffectiveThicknessEstimate"]].ToString()); } if (colMap["electricLogInterpretation"] > -1) { welldata.ElectricLogInterpretation = jRec[colMap["electricLogInterpretation"]].ToString(); } if (colMap["facies"] > -1) { welldata.Facies = jRec[colMap["facies"]].ToString(); } if (colMap["subfacies"] > -1) { welldata.Subfacies = jRec[colMap["subfacies"]].ToString(); } } list.Add(welldata); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellLongCyClesJsonFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "Well", "top", "bottom", "type" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "Cycle") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; CycleLongterm welldata = new CycleLongterm(); welldata.ID = id; for (int j = 0; j < jCols.Count; j++) { welldata.Well = jh; if (colMap["top"] > -1) { welldata.top = Convert.ToDouble(jRec[colMap["top"]].ToString()); } if (colMap["bottom"] > -1) { welldata.bottom = Convert.ToDouble(jRec[colMap["bottom"]].ToString()); } if (colMap["type"] > -1) { welldata.type = jRec[colMap["type"]].ToString(); } } list.Add(welldata); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellMediumCyClesJsonFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "Well", "top", "bottom", "type" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "Cycle") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; CycleMediumterm welldata = new CycleMediumterm(); welldata.ID = id; for (int j = 0; j < jCols.Count; j++) { welldata.Well = jh; if (colMap["top"] > -1) { welldata.top = Convert.ToDouble(jRec[colMap["top"]].ToString()); } if (colMap["bottom"] > -1) { welldata.bottom = Convert.ToDouble(jRec[colMap["bottom"]].ToString()); } if (colMap["type"] > -1) { welldata.type = jRec[colMap["type"]].ToString(); } } list.Add(welldata); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static bool getWellShortCyClesJsonFromJson(string jh, string jsonStr, out List list) { string[] Cols = { "Well", "top", "bottom", "type" }; StringIntMapper colMap = new StringIntMapper(); for (int i = 0; i < Cols.Length; i++) { colMap.AddMapping(Cols[i]); } list = new List(); bool b = false; try { JObject json = JObject.Parse(jsonStr); bool bType = json.ContainsKey("dataType"); bool bhaveCols = json.ContainsKey("columnName"); bool bhaveData = json.ContainsKey("data"); if (bType && bhaveCols && bhaveData) { string typeName = json["dataType"].ToString(); if (typeName == "Cycle") { JArray jCols = (JArray)json["columnName"]; JArray jDatas = (JArray)json["data"]; for (int i = 0; i < jCols.Count; i++) { string col = jCols[i].ToString(); if (colMap.HasKey(col)) colMap.UpdateMapping(col, i); } int id = DBHelp.Db.Queryable().Max("id") + 1; for (int i = 0; i < jDatas.Count; i++) { JArray jRec = (JArray)jDatas[i]; CycleShortterm welldata = new CycleShortterm(); welldata.ID = id; for (int j = 0; j < jCols.Count; j++) { welldata.Well = jh; if (colMap["top"] > -1) { welldata.top = Convert.ToDouble(jRec[colMap["top"]].ToString()); } if (colMap["bottom"] > -1) { welldata.bottom = Convert.ToDouble(jRec[colMap["bottom"]].ToString()); } if (colMap["type"] > -1) { welldata.type = jRec[colMap["type"]].ToString(); } } list.Add(welldata); id++; } b = true; } } } catch (Exception ex) { b = false; } return b; } public static List GetRowsList( Expression> expression) { //ISugarQueryable query = DBHelp.NewDb.Queryable(); //query = query.Where(expression); //List list = new List(); //query.ForEach(x => //{ // list.Add(x); //}); //return list; return DBHelp.NewDb.Queryable() .Where(expression) .ToList(); } //public static List getColumnIDInDataset(DataItems dataitems) //{ // List idList = new List(); // List colInfos = DBHelp.GetEntityColumnInfo(typeof(T)); // for(int i = 0; i < dataitems.DataItem.Count; i++) // { // for (int jj = 0; jj < colInfos.Count; jj++) // { // if (dataitems.DataItem[i].RefColId == colInfos[jj].DbColumnName) // { // idList.Add(jj); // break; // } // } // } // return idList; //} public static List> ExtractToDictionaryList(List source,List columnNames) { var result = new List>(); foreach (var item in source) { var dict = new Dictionary(); foreach (var columnName in columnNames) { var property = typeof(T).GetProperty(columnName); if (property != null) { var value = property.GetValue(item); dict[columnName] = value ?? DBNull.Value; } } result.Add(dict); } return result; } public static bool setWellTableDataToTrack(GeoSigmaWellPoleXY geoWell, string wellName, UInt64 trackHandle, string tableId,string colName) { bool b = false; if (tableId == "" || colName=="") return b; List colNames = new List(); colNames.Add(colName); List> dataset = null; if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "TopSecondSandstone"); colNames.Insert(1, "BottomSecondSandstone"); dataset = ExtractToDictionaryList(listData, colNames); } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.JH == wellName); colNames.Insert(0, "DS"); colNames.Insert(1, "DS2"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.JH == wellName); colNames.Insert(0, "SD"); colNames.Insert(1, "DJSD"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (tableId == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } if (dataset.Count == 0) return b; JObject json = new JObject(); json["dataType"] = "Data"; JArray jCols = new JArray(); jCols.Add("top"); jCols.Add("bottom"); jCols.Add("name"); json["columnName"] = jCols; JArray jDatas = new JArray(); for (int k = 0; k < dataset.Count; k++) { JArray tdata = new JArray(); for (int h = 0; h < colNames.Count; h++) { if (dataset[k].TryGetValue(colNames[h], out object val)) { tdata.Add(val.ToString()); } else tdata.Add(""); } jDatas.Add(tdata); } json["data"] = jDatas; string jsonStr = ""; jsonStr = JsonConvert.SerializeObject(json); b = geoWell.SetWellTrackDataJson( trackHandle, jsonStr); return b; } public static bool setDataToWellCommonDataTrack(GeoSigmaWellPoleXY geoWell, string wellName, UInt64 commonDataTrack, string refTable, DataItems tdataItems) { bool b = false; if (refTable == "") return b; List colNames = new List(); for(int i =0; i < tdataItems.DataItem.Count; i++) { colNames.Add(tdataItems.DataItem[i].RefColId); } List> dataset = null; if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); if (tdataItems.DepthSegmentMode == "SecondTopBottom") { colNames.Insert(0, "TopSecondSandstone"); colNames.Insert(1, "BottomSecondSandstone"); } else if (tdataItems.DepthSegmentMode == "PureEffectiveTopBottom") { colNames.Insert(0, "PureEffectiveTopEstimate"); colNames.Insert(1, "PureEffectiveThicknessEstimate"); } else if (tdataItems.DepthSegmentMode == "ViewEffectiveTopBottom") { colNames.Insert(0, "ViewEffectiveTop"); colNames.Insert(1, "ViewEffectiveThickness"); } else { colNames.Insert(0, "TopFirstSandstone"); colNames.Insert(1, "BottomFirstSandstone"); } dataset = ExtractToDictionaryList(listData, colNames); if (tdataItems.DepthSegmentMode == "PureEffectiveTopBottom") { for(int i =0; i< dataset.Count; i++) { double dtop = 0; double dbottom = 0; if (dataset[i].TryGetValue("PureEffectiveTopEstimate", out object top) && dataset[i].TryGetValue("PureEffectiveThicknessEstimate", out object thick)) { if(double.TryParse(top.ToString(), out double top1)&& double.TryParse(thick.ToString(),out double thick1)) { dtop = top1; dbottom = top1 + thick1; dataset[i]["PureEffectiveThicknessEstimate"] = dbottom.ToString(); //计算出底深 } else {//无效顶底深,就赋值为0 dataset[i]["PureEffectiveTopEstimate"] = "0".ToString(); dataset[i]["PureEffectiveThicknessEstimate"] = "0".ToString(); } } else { dataset[i]["PureEffectiveTopEstimate"] = "0".ToString(); dataset[i]["PureEffectiveThicknessEstimate"] = "0".ToString(); } } } else if (tdataItems.DepthSegmentMode == "ViewEffectiveTopBottom") { for (int i = 0; i < dataset.Count; i++) { double dtop = 0; double dbottom = 0; if (dataset[i].TryGetValue("ViewEffectiveTop", out object top) && dataset[i].TryGetValue("ViewEffectiveThickness", out object thick)) { if (double.TryParse(top.ToString(), out double top1) && double.TryParse(thick.ToString(), out double thick1)) { dtop = top1; dbottom = top1 + thick1; dataset[i]["ViewEffectiveThickness"] = dbottom.ToString(); //计算出底深 } else {//无效顶底深,就赋值为0 dataset[i]["ViewEffectiveTop"] = "0".ToString(); dataset[i]["ViewEffectiveThickness"] = "0".ToString(); } } else { dataset[i]["ViewEffectiveTop"] = "0".ToString(); dataset[i]["ViewEffectiveThickness"] = "0".ToString(); } } } b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList( o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.JH == wellName); colNames.Insert(0, "DS"); colNames.Insert(1, "DS2"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.JH == wellName); colNames.Insert(0, "SD"); colNames.Insert(1, "DJSD"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } else if (refTable == DBHelp.GetTableName()) { List listData = GetRowsList(o => o.Well == wellName); colNames.Insert(0, "top"); colNames.Insert(1, "bottom"); dataset = ExtractToDictionaryList(listData, colNames); b = true; } if (dataset == null) return b; string jsonStr = ""; if (dataset.Count == 0) return b; JObject json = new JObject(); json["dataType"] = "CommonData"; JArray jCols = new JArray(); jCols.Add("top"); jCols.Add("bottom"); for(int i = 0; i < tdataItems.DataItem.Count; i++) { jCols.Add(tdataItems.DataItem[i].RefColId); } json["columnName"] = jCols; JArray jDatas = new JArray(); for(int k = 0; k< dataset.Count; k++) { JArray tdata = new JArray(); for (int h = 0; h < colNames.Count; h++) { if (dataset[k].TryGetValue(colNames[h], out object val)) { tdata.Add(val.ToString()); } else tdata.Add(""); } jDatas.Add(tdata); } json["data"] = jDatas; jsonStr = JsonConvert.SerializeObject(json); b = geoWell.SetWellTrackDataJson(commonDataTrack, jsonStr); return b; } } }