using System; using System.Collections.Generic; using System.Text; using System.Data; using WorkData; using WorkData.Entity; using System.IO; using System.Linq; //using DQ.Construction.NewLook.Utility; using System.Text.RegularExpressions; using InterfaceWorkAreaData.LoadCurveData; namespace InterfaceWorkAreaData { class KepWorkAreaData : IWorkAreaData { eDataSourceType type { get; } internal KepWorkAreaData() { type = eDataSourceType.kep; } public bool isConn() { return true ; } public bool Conn(string ds) { dataSource = ds;// + "\\sys.db"; // "D:\\kev\\阳101井区20250521\\sys.db"; Config.ProjectPath = Path.GetDirectoryName(dataSource + "\\sys.db"); return true; } public string dataSource { get; set; } public List getWellsInfo() { List lstWellBase = DBHelp.Db.Queryable().ToList(); List results = new List(capacity: lstWellBase.Count); for (int i = 0; i < lstWellBase.Count; i++) { cWellBaseInfo winfo = new cWellBaseInfo(); winfo.id = lstWellBase[i].ID; winfo.strID = lstWellBase[i].Unique; winfo.WellName = lstWellBase[i].JH; winfo.WellCode = lstWellBase[i].JH; winfo.x = lstWellBase[i].X; winfo.y = lstWellBase[i].Y; winfo.BushingLevel = lstWellBase[i].BXHB; winfo.finishedDepth = lstWellBase[i].WZJS; winfo.xBottom = lstWellBase[i].X2; winfo.yBottom = lstWellBase[i].Y2; results.Add(winfo); } return results; } //public List getWellCurveNames(string wellname) //{ // List results = new List(); // return results; //} //public List getWellCurves(string wellname) //{ // List results = new List(); // return results; //} //public cWellCurve getWellCurve(string wellname, string curveName) //{ // cWellCurve results = new cWellCurve(); // return results; //} public List getWellDiscretes(string wellname) { List results = new List(); return results; } public List getWellDiscreteNames(string wellname) { List results = new List(); return results; } //public List getWellStratums(string wellname) //{ // List results = new List(); // return results; //} //public List getWellResults(string wellname) //{ // List results = new List(); // return results; //} public ResultDataInfo getCurvesData(string wellName, ref DataTable table) { ResultDataInfo result = new ResultDataInfo(); List lstWellCurve = DBHelp.Db.Queryable().Where(it => (it.JH == wellName)).ToList(); if(lstWellCurve.Count >0) { string filename =dataSource+ "\\"+ lstWellCurve[0].FilePath; result = LasHelper.LasFileToDataTable(ref table, filename, LasHelper.GetType(filename)?.BodyName, 0); } return result ; } public List getWellPerforations(string wellname) { List lstWellPerforations= DBHelp.Db.Queryable().Where(it => (it.JH == wellname)).ToList(); List results = new List(capacity: lstWellPerforations.Count); for(int i = 0; i< lstWellPerforations.Count; i++) { cPerforation tper = new cPerforation(); tper.id = lstWellPerforations[i].ID; tper.top = lstWellPerforations[i].DS; tper.bottom = lstWellPerforations[i].DS2; tper.layer = lstWellPerforations[i].CW; tper.perforationMethod = lstWellPerforations[i].SK; results.Add(tper); } return results; } public List getWellFaultPoints(string wellname) { List lstWellFaults = DBHelp.Db.Queryable().Where(it => (it.JH == wellname)).ToList(); List results = new List(capacity: lstWellFaults.Count); for(int i = 0; i < lstWellFaults.Count; i++) { cFaultPoint faultPt = new cFaultPoint(); faultPt.id = lstWellFaults[i].ID; faultPt.faultName = lstWellFaults[i].DCBH; faultPt.depth = lstWellFaults[i].DDSD; faultPt.faultTopLayer = lstWellFaults[i].DSDC; faultPt.faultBottomLayer = lstWellFaults[i].DSDC2; faultPt.compareWellTop = lstWellFaults[i].DBJDS; faultPt.compareWellBottom = lstWellFaults[i].DBJDS2; results.Add(faultPt); } return results; } public List getWellTrajectory(string wellname) { List lstwellDeflections = EntityHelp.GetWellDeflectionsByWellName(wellname);// DBHelp.Db.Queryable().Where(it => (it.JH == wellname)).ToList(); if(lstwellDeflections == null) { lstwellDeflections = new List(); } List results = new List(capacity: lstwellDeflections.Count); for (int i = 0; i < lstwellDeflections.Count; i++) { cWellTrackPoint trackPt = new cWellTrackPoint(); trackPt.id = lstwellDeflections[i].ID; trackPt.depth = lstwellDeflections[i].JS; trackPt.bevel = lstwellDeflections[i].JXJ; trackPt.azimuth = lstwellDeflections[i].FWJ; trackPt.depthV = lstwellDeflections[i].CS; trackPt.x = lstwellDeflections[i].X; trackPt.y = lstwellDeflections[i].Y; results.Add(trackPt); } return results; } public List getWellStratification() { List lstwellStrati = DBHelp.Db.Queryable().OrderBy(it=>it.Level).ToList(); List results = new List(capacity: lstwellStrati.Count); for(int i = 0; i< lstwellStrati.Count; i++) { cWellStratification wstrati = new cWellStratification(); wstrati.id = lstwellStrati[i].ID; wstrati.level = lstwellStrati[i].Level; if(lstwellStrati[i].Name != null) wstrati.name = lstwellStrati[i].Name; wstrati.parentId = lstwellStrati[i].ParentID; wstrati.code = lstwellStrati[i].Code; wstrati.order = lstwellStrati[i].Order; results.Add(wstrati); } return results; } public List getWellSandSets(string wellname) { List lstwellLayers = DBHelp.Db.Queryable().Where(it => (it.JH == wellname)).OrderBy(it=>it.SD).ToList(); List results = new List(capacity: lstwellLayers.Count); for(int i = 0; i< lstwellLayers.Count; i++) { if (lstwellLayers[i].DJSD == null && lstwellLayers[i].HD == null) continue; cWellSandSet sandset = new cWellSandSet(); sandset.id = lstwellLayers[i].ID; sandset.top = lstwellLayers[i].SD ?? 0; sandset.bottom = lstwellLayers[i].DJSD ?? 0; sandset.name = lstwellLayers[i].CW; sandset.result = lstwellLayers[i].JSJL ?? ""; results.Add(sandset); } return results; } public List getStratumDivisions() { List lstStratum = DBHelp.Db.Queryable().OrderBy(it => it.ID).ToList(); List < cStratumDivision > results = new List(capacity: lstStratum.Count); for(int i = 0; i< lstStratum.Count; i++) { cStratumDivision tstratum = new cStratumDivision(); tstratum.id = lstStratum[i].ID; tstratum.name = lstStratum[i].name; tstratum.code = lstStratum[i].code; tstratum.parentID = lstStratum[i].parentID; tstratum.classname = lstStratum[i].classname; tstratum.orderId = lstStratum[i].orderId; results.Add(tstratum); } return results; } public List getReservesLayers(string wellname) { List lstLayers = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstLayers.Count); for(int i = 0; i< lstLayers.Count; i++) { cWellReservesLayer tLayer = new cWellReservesLayer(); tLayer.id = lstLayers[i].ID; // tLayer.well = lstLayers[i].Well; tLayer.layer = lstLayers[i].Layer; tLayer.topSecondSandstone = lstLayers[i].TopSecondSandstone; tLayer.bottomSecondSandstone = lstLayers[i].BottomSecondSandstone; tLayer.topFirstSandstone = lstLayers[i].TopFirstSandstone; tLayer.bottomFirstSandstone = lstLayers[i].BottomFirstSandstone; tLayer.pureEffectiveTopEstimate = lstLayers[i].PureEffectiveTopEstimate; tLayer.pureEffectiveThicknessEstimate = lstLayers[i].PureEffectiveThicknessEstimate; tLayer.electricLogInterpretation = lstLayers[i].ElectricLogInterpretation; tLayer.facies = lstLayers[i].Facies??""; tLayer.subfacies = lstLayers[i].Subfacies??""; tLayer.viewEffectiveTop = lstLayers[i].ViewEffectiveTop; tLayer.viewEffectiveThickness = lstLayers[i].ViewEffectiveThickness; results.Add(tLayer); } return results; } public List getInnerLayers(string wellname) { List lstLayers = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstLayers.Count); for(int i = 0; i < lstLayers.Count; i++) { cWellInnerLayer tLayer = new cWellInnerLayer(); tLayer.id = lstLayers[i].ID; tLayer.top = lstLayers[i].top; tLayer.bottom = lstLayers[i].bottom; tLayer.thickness = lstLayers[i].thickness; tLayer.type = lstLayers[i].type; results.Add(tLayer); } return results; } public List getWellCycles(string wellname, int termType) //1= 长期旋回,2=中期旋回,3=短期旋回, { List results = new List(); if(termType == 1) { results = getCycleLongterm(wellname); } else if(termType == 2) { results = getCycleMediumterm(wellname); } else if(termType == 3) { results = getCycleShortterm(wellname); } return results; } List getCycleLongterm(string wellname) { List lstLayers = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstLayers.Count); for (int i = 0; i < lstLayers.Count; i++) { cWellCycle tLayer = new cWellCycle(); tLayer.id = lstLayers[i].ID; tLayer.top = lstLayers[i].top; tLayer.bottom = lstLayers[i].bottom; tLayer.type = lstLayers[i].type; results.Add(tLayer); } return results; } List getCycleShortterm(string wellname) { List lstLayers = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstLayers.Count); for (int i = 0; i < lstLayers.Count; i++) { cWellCycle tLayer = new cWellCycle(); tLayer.id = lstLayers[i].ID; tLayer.top = lstLayers[i].top; tLayer.bottom = lstLayers[i].bottom; tLayer.type = lstLayers[i].type; results.Add(tLayer); } return results; } List getCycleMediumterm(string wellname) { List lstLayers = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstLayers.Count); for (int i = 0; i < lstLayers.Count; i++) { cWellCycle tLayer = new cWellCycle(); tLayer.id = lstLayers[i].ID; tLayer.top = lstLayers[i].top; tLayer.bottom = lstLayers[i].bottom; tLayer.type = lstLayers[i].type; results.Add(tLayer); } return results; } public List getWellLithologys(string wellname) { List lstliths = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(capacity: lstliths.Count); for( int i = 0; i< lstliths.Count; i++) { cWellLithology tLith = new cWellLithology(); tLith.id = lstliths[i].ID; tLith.top = lstliths[i].top; tLith.bottom = lstliths[i].bottom; tLith.color = lstliths[i].color; tLith.oilcontent = lstliths[i].oilcontent; tLith.inclusions = lstliths[i].inclusions; tLith.structure = lstliths[i].structure; tLith.lithologyprefix = lstliths[i].lithologyprefix; tLith.lithology = lstliths[i].lithology; results.Add(tLith); } return results; } public List getWellCorings(string wellname) { List list = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(); for(int i = 0; i < list.Count; i++) { cWellCoring tCoring = new cWellCoring(); tCoring.id = list[i].ID; tCoring.top = list[i].top??0; tCoring.bottom = list[i].bottom ?? 0; tCoring.date = list[i].date ?? ""; tCoring.layer = list[i].layer ?? ""; tCoring.method = list[i].method ?? ""; tCoring.length = list[i].length ?? 0; tCoring.oilsaturatedlength = list[i].length ?? 0; tCoring.diameter = list[i].diameter ?? 0; tCoring.times = list[i].times ?? 0; tCoring.firstlayer = list[i].firstlayer ?? ""; tCoring.secondlayer = list[i].secondlayer ?? ""; tCoring.thridlayer = list[i].thirdlayer ?? ""; results.Add(tCoring); } return results; } public List getWellSideWallCorings(string wellname) { List list = DBHelp.Db.Queryable().Where(it => (it.Well == wellname)).ToList(); List results = new List(); for (int i = 0; i < list.Count; i++) { cWellSideWallCoring tCoring = new cWellSideWallCoring(); tCoring.id = list[i].ID; tCoring.top = list[i].top ?? 0; tCoring.oilcontent = list[i].oilcontent ?? ""; tCoring.lithology = list[i].lithology ?? ""; tCoring.lithologyprefix = list[i].lithologyprefix ?? ""; tCoring.number = list[i].number ?? 0; tCoring.color = list[i].color; tCoring.structure = list[i].structure; tCoring.inclusions = list[i].inclusions; tCoring.firstlayer = list[i].firstlayer ?? ""; tCoring.secondlayer = list[i].secondlayer ?? ""; tCoring.thridlayer = list[i].thirdlayer ?? ""; results.Add(tCoring); } return results; } public List getWellOilTests(string wellname) { List results = new List(); ListlstTest = DBHelp.Db.Queryable().Where(it => (it.JH == wellname)).ToList(); string topbot,tstr; for( int i = 0; i< lstTest.Count; i++) { cWellOilTest tTest = new cWellOilTest(); tTest.id = lstTest[i].ID; topbot = lstTest[i].SKJD; var matches = Regex.Matches(topbot, @"[\d.]+"); if (matches.Count == 2) { tTest.top = double.Parse(matches[0].Value); tTest.bottom = double.Parse(matches[1].Value); } else continue; tstr = lstTest[i].DaylyOil; if(double.TryParse(tstr, out double ddayoil)) { tTest.dayOil = ddayoil; } tstr = lstTest[i].DaylyWater; if (double.TryParse(tstr, out double ddayWater)) { tTest.dayWater = ddayWater; } tstr = lstTest[i].DaylyWater; if (double.TryParse(tstr, out double ddayGas)) { tTest.dayGas = ddayGas; } tstr = lstTest[i].AllOil; if (double.TryParse(tstr, out double dsumOil)) { tTest.sumOil = dsumOil; } tstr = lstTest[i].AllWater; if (double.TryParse(tstr, out double dsumWater)) { tTest.sumWater = dsumWater; } tstr = lstTest[i].AllGas; if (double.TryParse(tstr, out double dsumGas)) { tTest.sumGas = dsumGas; } tTest.verdict = lstTest[i].SYJL; tTest.layer = lstTest[i].CW; tTest.method = lstTest[i].SYHCS; tTest.staticMpa = lstTest[i].YlJy ?? 0; tTest.caseMpa = lstTest[i].YlTy??0; tTest.flowMpa = lstTest[i].YlLy??0; if (double.TryParse(lstTest[i].YYXZDensity, out double density)) { tTest.density = density; } else tTest.density = 0; if (double.TryParse(lstTest[i].YYXZViscosity, out double viscosity)) { tTest.viscosity = viscosity; } else tTest.viscosity = 0; tstr = lstTest[i].Date; matches = Regex.Matches(tstr, @"[\d.]+"); if (matches.Count == 2) { tTest.startTime = matches[0].Value; tTest.endTime = matches[1].Value; } if (double.TryParse(lstTest[i].WdJw, out double wdjw)) tTest.staticTemperature = wdjw; else tTest.staticTemperature = 0; tTest.thickness = lstTest[i].HD ?? 0; if (double.TryParse(lstTest[i].GzzdCSHCC, out double stroke)) { tTest.stroke = stroke; } else { tTest.stroke = 0; } results.Add(tTest); } return results; } } }