Ejemplo n.º 1
0
        /// <summary>
        /// 油水井距范围内影响因素
        /// </summary>
        /// <param name="path">读取影响因素文件路径</param>
        /// <param name="strJHLocation">目标井</param>
        /// <param name="dbjhLocation">目标连通井</param>
        /// <param name="fipoilAverage">剩余储量</param>
        /// <param name="presAverage">平均压力</param>
        /// <param name="soilAverage">平均含油饱和度</param>
        /// <param name="permxAverage">平均渗透率</param>
        /// <param name="presDiff">注采压差</param>


        public InfFactorModel InfluencingFactors(WellModel strJHLocation, WellModel dbjhLocation, List <decimal> lstPressure, List <decimal> lstSoil, List <decimal> lstFipoil /*, List<decimal> lstKX, List<decimal> lstDCXS, List<decimal> lstPORO*/)
        {
            InfFactorModel ifm = new InfFactorModel();

            decimal fipoilTotal = 0, presTotal = 0, soilTotal = 0, kxTotal = 0, dcxsTotal = 0, poroTotal = 0;

            List <WellModel> lstSpacingRange = SpacingRange(strJHLocation, dbjhLocation);

            int index = 0;

            for (int i = 0; i < lstSpacingRange.Count; i++)
            {
                index        = (lstSpacingRange[i].k - 1) * 152 * 223 + ((lstSpacingRange[i].y - 1) * 223 + lstSpacingRange[i].x) - 1;
                soilTotal   += lstSoil[index];
                presTotal   += lstPressure[index];
                fipoilTotal += lstFipoil[index];
                //kxTotal += lstKX[index];
                //dcxsTotal += lstDCXS[index];
                //poroTotal += lstPORO[index];
            }
            ifm.jhy           = strJHLocation.jh;
            ifm.jhs           = dbjhLocation.jh;
            ifm.k             = strJHLocation.k;
            ifm.presAverage   = presTotal / lstSpacingRange.Count;
            ifm.fipoilAverage = fipoilTotal / lstSpacingRange.Count;
            ifm.soilAverage   = soilTotal / lstSpacingRange.Count;
            //ifm.wellSpacing = WellSpacing(strJHLocation, dbjhLocation);
            //ifm.kxAverage = kxTotal / lstSpacingRange.Count;
            //ifm.dcxsAverage = dcxsTotal / lstSpacingRange.Count;
            //ifm.poroAverage = poroTotal / lstSpacingRange.Count;

            int jhIndex = 0, dbjhIndex = 0;

            jhIndex   = (strJHLocation.k - 1) * 152 * 223 + ((strJHLocation.y - 1) * 223 + strJHLocation.x) - 1;
            dbjhIndex = (dbjhLocation.k - 1) * 152 * 223 + ((dbjhLocation.y - 1) * 223 + dbjhLocation.x) - 1;

            //ifm.yy = lstPressure[jhIndex];
            //ifm.sy = lstPressure[dbjhIndex];
            //ifm.presDiff = ifm.sy - ifm.yy;
            return(ifm);
        }
Ejemplo n.º 2
0
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            splashScreenManager1.ShowWaitForm();
            splashScreenManager1.SetWaitFormCaption("正在处理数据");
            splashScreenManager1.SetWaitFormDescription("请稍后...");

            //FileStream fs = new FileStream(txtResultPath.Text, FileMode.Append);
            //StreamWriter sw = new StreamWriter(fs);
            //sw.WriteLine("油井 层位 产液 含水 水井 注水 井距 注采压差  平均圧力 平均含油饱和度 平均储量 平均渗透率 平均地层系数");

            ReadFilesDAL.ReadFiles(txtFAPath.Text);
            FactorsAnalysisDAL fad    = new FactorsAnalysisDAL();
            DataTable          dtLtjh = ExcelToDataTableUtil.ExcelToDataTable(txtLTKPath.Text);

            for (int i = 0; i < dtLtjh.Rows.Count; i++)
            {
                DataRow[] drJHY = dtOil.Select("JHY = '" + dtLtjh.Rows[i]["JHY"] + "' AND DATE = '" + strDate + "'");
                if (drJHY.Count() > 0)
                {
                    foreach (DataRow dr in drJHY)
                    {
                        //DataTable dtLtjhy = dtLtjh.Select("JHS = '" + dtLtjh.Rows[i]["JHS"] + "'").CopyToDataTable();

                        //DataRow[] drJHS = dtWater.Select("JHS = '" + dtLtjh.Rows[i]["JHS"] + "' AND K = " + dr["K"] + " AND DATE = '" + strDate + "'");
                        DataRow[] drJHS = dtWater.Select("JHS = '" + dtLtjh.Rows[i]["JHS"] + "' AND DATE = '" + strDate + "'");
                        if (drJHS.Count() > 0)
                        {
                            //for (int j = 0; j < dtLtjhy.Rows.Count; j++)
                            //{
                            //DataRow[] drOthrJHY = dtOil.Select("JHY = '" + dtLtjhy.Rows[j]["JHY"] + "' AND K = " + dr["K"] + " AND DATE = '" + strDate + "'");
                            //if (drOthrJHY.Count() > 0)
                            //{
                            //foreach (DataRow drOthr in drOthrJHY)
                            //{

                            WellModel jhy = new WellModel();
                            //jhy.x = Convert.ToInt32(drOthr["X"]);
                            //jhy.y = Convert.ToInt32(drOthr["Y"]);
                            //jhy.k = Convert.ToInt32(drOthr["K"]);
                            //DataRow[] drMNCYE = dtOil.Select("JHY = '" + drOthr["JHY"] + "' AND DATE = '" + strDate + "' AND K = " + dr["k"]);
                            jhy.x     = Convert.ToInt32(dr["X"]);
                            jhy.y     = Convert.ToInt32(dr["Y"]);
                            jhy.k     = Convert.ToInt32(dr["K"]);
                            jhy.mncye = Convert.ToDouble(dr["MNCYE"]);
                            WellModel jhs = new WellModel();
                            jhs.x = Convert.ToInt32(drJHS[0]["X"]);
                            jhs.y = Convert.ToInt32(drJHS[0]["Y"]);
                            //jhs.k = Convert.ToInt32(drJHS[0]["K"]);
                            jhs.k = Convert.ToInt32(dr["K"]);
                            //DataRow[] drMNCS = dtWater.Select("JHS = '" + dtLtjh.Rows[i]["JHS"] + "' AND DATE = '" + strDate + "' AND K = " + dr["k"]);
                            InfFactorModel ifm = new InfFactorModel();

                            ifm = fad.InfluencingFactors(jhy, jhs, ReadFilesDAL.lstPressure, ReadFilesDAL.lstSoil, ReadFilesDAL.lstFipoil, ReadFilesDAL.lstKX, ReadFilesDAL.lstDCXS, ReadFilesDAL.lstPORO);

                            DataRow drResult = dtResult.NewRow();
                            //drResult["序号"] = i + 1;
                            drResult["油井"] = dr["JHY"];
                            drResult["层位"] = dr["k"];
                            drResult["产液"] = dr["MNCYE"];
                            drResult["含水"] = dr["HS"];
                            drResult["水井"] = drJHS[0]["JHS"];
                            //drResult["注入量"] = drMNCS[0]["MNCS"];
                            drResult["井距"]      = ifm.wellSpacing;
                            drResult["注采压差"]    = ifm.presDiff;
                            drResult["平均圧力"]    = ifm.presAverage;
                            drResult["平均含油饱和度"] = ifm.soilAverage;
                            drResult["平均剩余储量"]  = ifm.fipoilAverage;
                            drResult["平均渗透率"]   = ifm.kxAverage;
                            drResult["平均地层系数"]  = ifm.dcxsAverage;
                            drResult["平均孔隙度"]   = ifm.poroAverage;
                            dtResult.Rows.Add(drResult);
                            //    }
                            //}
                            //}
                        }
                    }
                }
                //sw.WriteLine("---------------------------------------------------------------------");
            }
            gridResult.DataSource = dtResult;

            DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();
            gridResult.ExportToXls(txtResultPath.Text);

            //sw.Close();
            //fs.Close();
            splashScreenManager1.CloseWaitForm();

            DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Ejemplo n.º 3
0
        private void GetLTOilJH(WellModel jhs, string strDate, string sjjhs)
        {
            if (jhs.jh != null)
            {
                DataTable dtLtjhy = cdu.SelectDatabase("select * from ltk where jh = '" + sjjhs + "'");
                if (dtLtjhy.Rows.Count > 0)
                {
                    int dbjs = Convert.ToInt32(dtLtjhy.Rows[0]["dbjs"]);
                    for (int j = 1; j <= dbjs; j++)
                    {
                        DataTable dtIsYJ = cdu.SelectDatabase("select * from yjjh where jh = '" + dtLtjhy.Rows[0]["dbjh" + j] + "'");
                        if (dtIsYJ.Rows.Count > 0)
                        {
                            // DataTable dtSMYJH = ConnDatabaseUtil.SelectDBF("select * from 井号 where 实际井号 = '" + dtLtjhy.Rows[0]["dbjh" + j] + "'");
                            DataTable dtSMYJH = cdu.SelectDatabase("select * from dyjh where sjjh = '" + dtLtjhy.Rows[0]["dbjh" + j] + "'");
                            if (dtSMYJH.Rows.Count > 0)
                            {
                                WellModel Othrjhy = ld.GetSingleLocation(dtSMYJH.Rows[0]["smjh"].ToString(), jhs.k);
                                if (Othrjhy.jh != null)
                                {
                                    InfFactorModel ifm = new InfFactorModel();

                                    ifm = fad.InfluencingFactors(Othrjhy, jhs, ReadFilesDAL.lstPressure, ReadFilesDAL.lstSoil, ReadFilesDAL.lstFipoil /*, ReadFilesDAL.lstKX, ReadFilesDAL.lstDCXS, ReadFilesDAL.lstPORO*/);

                                    DataRow drResult = dtResult.NewRow();

                                    //DataTable dtSJ = cdu.SelectDatabase("select * from sj where jh = '" + jhs.jh + "' and ny = '" + strDate + "' and k = " + jhs.k);
                                    //if (dtSJ.Rows.Count > 0)
                                    //{
                                    //    drResult["注入量"] = dtSJ.Rows[0]["rzsl"];
                                    //    drResult["水bhp"] = dtSJ.Rows[0]["bhp"];
                                    //}
                                    //DataTable dtYJ = cdu.SelectDatabase("select * from yj where jh = '" + Othrjhy.jh + "' and ny = '" + strDate + "' and k = " + Othrjhy.k);
                                    //if (dtYJ.Rows.Count > 0)
                                    //{
                                    //    drResult["产液"] = dtYJ.Rows[0]["rcyl1"];
                                    //    drResult["含水"] = dtYJ.Rows[0]["HS"];
                                    //    drResult["产油"] = Convert.ToDouble(dtYJ.Rows[0]["rcyl1"]) * (1 - Convert.ToDouble(dtYJ.Rows[0]["HS"]));
                                    //    drResult["油bhp"] = dtYJ.Rows[0]["bhp"];
                                    //}
                                    drResult["日期"]      = strDate;
                                    drResult["油井"]      = ifm.jhy;
                                    drResult["层位"]      = ifm.k;
                                    drResult["水井"]      = ifm.jhs;
                                    drResult["平均圧力"]    = ifm.presAverage;
                                    drResult["平均含油饱和度"] = ifm.soilAverage;
                                    drResult["平均剩余储量"]  = ifm.fipoilAverage;
                                    dtResult.Rows.Add(drResult);
                                }
                            }
                        }
                    }
                }
                else
                {
                    for (int k = 1; k <= connNumber; k++)
                    {
                        string strColumnOilName = "DBJH" + k;
                        dtLtjhy = cdu.SelectDatabase("select * from LTK where " + strColumnOilName + " = '" + sjjhs + "'");
                        foreach (DataRow drLtjhy in dtLtjhy.Rows)
                        {
                            DataTable dtIsYJ = cdu.SelectDatabase("select * from yjjh where jh = '" + drLtjhy["jh"] + "'");
                            if (dtIsYJ.Rows.Count > 0)
                            {
                                //DataTable dtSMYJH = ConnDatabaseUtil.SelectDBF("select * from 井号 where 实际井号 = '" + drLtjhy["jh"] + "'");
                                DataTable dtSMYJH = cdu.SelectDatabase("select * from dyjh where sjjh = '" + drLtjhy["jh"] + "'");
                                if (dtSMYJH.Rows.Count > 0)
                                {
                                    WellModel Othrjhy = ld.GetSingleLocation(dtSMYJH.Rows[0]["smjh"].ToString(), jhs.k);
                                    if (Othrjhy.jh != null)
                                    {
                                        InfFactorModel ifm = new InfFactorModel();

                                        ifm = fad.InfluencingFactors(Othrjhy, jhs, ReadFilesDAL.lstPressure, ReadFilesDAL.lstSoil, ReadFilesDAL.lstFipoil /*, ReadFilesDAL.lstKX, ReadFilesDAL.lstDCXS, ReadFilesDAL.lstPORO*/);

                                        DataRow drResult = dtResult.NewRow();
                                        //DataTable dtSJ = cdu.SelectDatabase("select * from sj where jh = '" + jhs.jh + "' and ny = '" + strDate + "' and k = " + jhs.k);
                                        //if (dtSJ.Rows.Count > 0)
                                        //{
                                        //    drResult["注入量"] = dtSJ.Rows[0]["rzsl"];
                                        //    drResult["水bhp"] = dtSJ.Rows[0]["bhp"];
                                        //}
                                        //DataTable dtYJ = cdu.SelectDatabase("select * from yj where jh = '" + Othrjhy.jh + "' and ny = '" + strDate + "' and k = " + Othrjhy.k);
                                        //if (dtYJ.Rows.Count > 0)
                                        //{
                                        //    drResult["产液"] = dtYJ.Rows[0]["rcyl1"];
                                        //    drResult["含水"] = dtYJ.Rows[0]["HS"];
                                        //    drResult["产油"] = Convert.ToDouble(dtYJ.Rows[0]["rcyl1"]) * (1 - Convert.ToDouble(dtYJ.Rows[0]["HS"]));
                                        //    drResult["油bhp"] = dtYJ.Rows[0]["bhp"];
                                        //}

                                        drResult["日期"]      = strDate;
                                        drResult["油井"]      = ifm.jhy;
                                        drResult["层位"]      = ifm.k;
                                        drResult["水井"]      = ifm.jhs;
                                        drResult["平均圧力"]    = ifm.presAverage;
                                        drResult["平均含油饱和度"] = ifm.soilAverage;
                                        drResult["平均剩余储量"]  = ifm.fipoilAverage;
                                        dtResult.Rows.Add(drResult);
                                    }
                                }
                            }
                        }
                    }
                }
                GC.Collect();
            }
        }