| | |
| | | using ErrorAnalysis.Repository; |
| | | using ErrorAnalysis.Repository.Entity; |
| | | using ErrorAnalysis.Service; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System.Windows.Forms; |
| | | using static System.Windows.Forms.VisualStyles.VisualStyleElement.Menu; |
| | | |
| | | namespace ErrorAnalysis.UI |
| | |
| | | { |
| | | private string? _connectionString; |
| | | private List<COModelTable> _models; |
| | | private COModelTable? _curModel; |
| | | private Dictionary<string, string> _filters; |
| | | private COModelTable _model; |
| | | |
| | | public FrmMain() |
| | | { |
| | | InitializeComponent(); |
| | | } |
| | | private void btnGetAllPipe_Click(object sender, EventArgs e) |
| | | { |
| | | var modelRepository = new COModelRepository(_connectionString); |
| | | var models = modelRepository.GetCOModels(); |
| | | } |
| | | |
| | | |
| | | |
| | | private void rdoMode_CheckedChanged(object sender, EventArgs e) |
| | | { |
| | |
| | | pbLoadDB.Show(); |
| | | pbLoadDB.Value = 0; |
| | | txtDataPath.Text = fileDlg.FileName; |
| | | txtToolType.Text = fileDlg.SafeFileName.Replace("DB.db", "").Replace("Mcnp", ""); |
| | | txtToolType.Text = fileDlg.SafeFileName.Substring(0, fileDlg.SafeFileName.IndexOf("Mcnp")); |
| | | _connectionString = $"Data Source={fileDlg.FileName};"; |
| | | var modelRepository = new COModelRepository(_connectionString); |
| | | pbLoadDB.Value = 50; |
| | | _filters = new Dictionary<string, string>(); |
| | | Task.Run(() => |
| | | { |
| | | _models = modelRepository.GetCOModels(); |
| | |
| | | } |
| | | } |
| | | |
| | | private void btnAnalysis_Click(object sender, EventArgs e) |
| | | { |
| | | var curModels = GetFilterResult(); |
| | | if (curModels == null || curModels.Count == 0) |
| | | { |
| | | MessageBox.Show("Please enter info!"); |
| | | return; |
| | | } |
| | | |
| | | if (!double.TryParse(nudPorosity.Value.ToString(), out double porosity) || nudPorosity.Value < 5) |
| | | { |
| | | MessageBox.Show("Please enter a reasonable porosity"); |
| | | return; |
| | | } |
| | | |
| | | if (!double.TryParse(nudSw.Value.ToString(), out double sw)) |
| | | { |
| | | MessageBox.Show("Please enter a reasonable water saturation!"); |
| | | return; |
| | | } |
| | | |
| | | if (!double.TryParse(nudDepth.Value.ToString(), out double depth) || nudDepth.Value <= 0) |
| | | { |
| | | MessageBox.Show("Please enter a reasonable depth"); |
| | | return; |
| | | } |
| | | |
| | | if (cmbLithology.SelectedIndex == -1) |
| | | { |
| | | MessageBox.Show("Please select a lithology"); |
| | | return; |
| | | } |
| | | |
| | | if (curModels.Count == 1) |
| | | _model = curModels[0]; |
| | | _model = curModels.FirstOrDefault(m => m.GravelFillPercent == nudGravelFIllPercent.Value.ToString()); |
| | | if (_model == null) |
| | | { |
| | | |
| | | } |
| | | if (rdoLockSpeed.Checked) |
| | | { |
| | | if (!double.TryParse(nudSpeed.Value.ToString(), out double speed) || nudSpeed.Value <= 0) |
| | | { |
| | | MessageBox.Show("Please enter a reasonable speed"); |
| | | return; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | if (!int.TryParse(nudPass.Value.ToString(), out int pass) || nudPass.Value <= 1) |
| | | { |
| | | MessageBox.Show("Please enter a reasonable pass"); |
| | | return; |
| | | } |
| | | |
| | | } |
| | | } |
| | | private void FrmMain_Load(object sender, EventArgs e) |
| | | { |
| | | cmbSpeedUnit.SelectedIndex = 0; |
| | | cmbTargetLoggingIntervalUnit.SelectedIndex = 0; |
| | | } |
| | | |
| | | private void InitInputControl() |
| | |
| | | } |
| | | } |
| | | |
| | | private void btnSelectBore_Click(object sender, EventArgs e) |
| | | { |
| | | if (string.IsNullOrEmpty(_connectionString)) |
| | | { |
| | | MessageBox.Show("Please choose data source first!"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | private void borehole_cmb_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | var control = (sender as ComboBox); |
| | | var property = control.Tag.ToString(); |
| | | |
| | | var filterVal = control.Text == "none" ? "0" : control.Text; |
| | | |
| | | if (_filters.ContainsKey(property)) |
| | | _filters[property] = filterVal; |
| | | else |
| | | _filters.Add(property, filterVal); |
| | | |
| | | var parentControl = control.Parent; |
| | | var allCmb = parentControl.Controls.OfType<Control>().Where(c => c is ComboBox).Select(c => c as ComboBox).ToList(); |
| | | if (control.Name == "cmbBit") |
| | | switch (control.Name) |
| | | { |
| | | foreach (var item in allCmb) |
| | | { |
| | | if (item.Name != "cmbBit") |
| | | { |
| | | item.Items.Clear(); |
| | | } |
| | | } |
| | | } |
| | | else if (control.Name.Contains("OD")) |
| | | { |
| | | allCmb.FirstOrDefault(a => a.Name == control.Name.Replace("OD", "ID")).Items.Clear(); |
| | | } |
| | | else if (control.Name == "cmbCasingID") |
| | | { |
| | | case "cmbBit": |
| | | cmbCasingOD.Items.Clear(); |
| | | goto case "cmbCasingOD"; |
| | | case "cmbCasingOD": |
| | | cmbCasingID.Items.Clear(); |
| | | goto case "cmbCasingID"; |
| | | case "cmbCasingID": |
| | | cmbScreenOD.Items.Clear(); |
| | | goto case "cmbScreenOD"; |
| | | case "cmbScreenOD": |
| | | cmbScreenID.Items.Clear(); |
| | | goto case "cmbScreenID"; |
| | | case "cmbScreenID": |
| | | cmbTubeOD.Items.Clear(); |
| | | goto case "cmbTubeOD"; |
| | | case "cmbTubeOD": |
| | | cmbTubeID.Items.Clear(); |
| | | break; |
| | | case "cmbTubeID": |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | var selectedCmbs = allCmb.Where(c => c.SelectedIndex != -1).ToList(); |
| | | var unSelectedCmbs = allCmb.Where(c => c.SelectedIndex == -1).ToList(); |
| | | var selectedModels = _models; |
| | | var modelType = _models[0].GetType(); |
| | | |
| | | foreach (var cmb in selectedCmbs) |
| | | { |
| | | selectedModels = selectedModels.Where(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString() == cmb.Text).ToList(); |
| | | } |
| | | var unSelectedCmbs = allCmb.Where(c => c.SelectedIndex == -1).ToList(); |
| | | var curModels = GetFilterResult(); |
| | | var modelType = typeof(COModelTable); |
| | | |
| | | foreach (var cmb in unSelectedCmbs) |
| | | { |
| | | cmb.Items.Clear(); |
| | | cmb.Enabled = true; |
| | | var currentItems = selectedModels.Where(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString() != "0").Select(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString()).Distinct().ToArray(); |
| | | var currentItems = curModels.Select(c => modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString() == "0" ? "none" : modelType.GetProperty(cmb.Tag.ToString()).GetValue(c).ToString()).Distinct().ToArray(); |
| | | if (currentItems.Length == 0) |
| | | cmb.Enabled = false; |
| | | |
| | | |
| | | cmb.Items.AddRange(currentItems); |
| | | if (currentItems.Length == 1) |
| | | cmb.Text = currentItems[0]; |
| | | } |
| | | |
| | | if (selectedModels.Count == 1) |
| | | { |
| | | _curModel = selectedModels[0]; |
| | | LinkageModelProperty(); |
| | | } |
| | | |
| | | private void holdUp_cmb_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | var control = (sender as ComboBox); |
| | | |
| | | var parentControl = control.Parent; |
| | | |
| | | var property = control.Tag.ToString(); |
| | | var filterVal = control.Text == "water" ? "0" : control.Text == "oil" ? "100" : control.Text == "gas" ? "200" : "999"; |
| | | if (_filters.ContainsKey(property)) |
| | | _filters[property] = filterVal; |
| | | else |
| | | _filters.Add(property, filterVal); |
| | | |
| | | var curModels = GetFilterResult(); |
| | | |
| | | var allCmb = parentControl.Controls.OfType<Control>().Where(c => c is ComboBox).Select(c => c as ComboBox).ToList(); |
| | | |
| | | var modelType = typeof(COModelTable); |
| | | |
| | | //foreach (var cmb in allCmb) |
| | | //{ |
| | | // if (cmb.Name != control.Name) |
| | | // { |
| | | // var curItems = cmb.Items.OfType<string>().ToList(); |
| | | // var cmbProperty = modelType.GetProperty(cmb.Tag.ToString()); |
| | | // var curFluids = curModels.Select(x => cmbProperty.GetValue(x).ToString() == "0" ? "water" : cmbProperty.GetValue(x).ToString() == "100" ? "oil" : cmbProperty.GetValue(x).ToString() == "200" ? "gas" : "none").Distinct().ToArray(); |
| | | // var minusFluids = curItems.Where(i => !curFluids.Contains(i)).ToArray(); |
| | | // foreach (var item in minusFluids) |
| | | // cmb.Items.Remove(item); |
| | | // var addFluids = curFluids.Where(i => !curItems.Contains(i)).ToArray(); |
| | | // cmb.Items.AddRange(addFluids); |
| | | |
| | | // } |
| | | //} |
| | | |
| | | var lithology = curModels.Select(x => x.Lithology).Distinct().ToArray(); |
| | | var curLithology = cmbLithology.Text; |
| | | cmbLithology.Items.Clear(); |
| | | cmbLithology.Items.AddRange(lithology); |
| | | cmbLithology.Text = curLithology; |
| | | |
| | | if (lithology.Length == 1) |
| | | cmbLithology.Text = lithology[0]; |
| | | } |
| | | |
| | | private void LinkageModelProperty() |
| | | { |
| | | var curModels = GetFilterResult(); |
| | | if (curModels.Count == 0) |
| | | return; |
| | | |
| | | var gravelFills = curModels.Select(x => x.GravelFillPercent).Distinct().ToArray(); |
| | | if (gravelFills.Length == 1) |
| | | nudGravelFIllPercent.Value = Convert.ToDecimal(gravelFills[0]); |
| | | |
| | | var cementBonds = curModels.Select(x => x.CementBond).Distinct().ToArray(); |
| | | if (cementBonds.Length == 1) |
| | | nudCementBond.Value = Convert.ToDecimal(cementBonds[0]); |
| | | |
| | | var bhSalinities = curModels.Select(x => x.BHSalinity).Distinct().ToArray(); |
| | | if (bhSalinities.Length == 1) |
| | | nudBHSalinity.Value = Convert.ToDecimal(bhSalinities[0]); |
| | | |
| | | var oilDensities = curModels.Select(x => x.OilDensity).Distinct().ToArray(); |
| | | if (oilDensities.Length == 1) |
| | | nudOilDensity.Value = Convert.ToDecimal(oilDensities[0]); |
| | | |
| | | var reservoirSalinities = curModels.Select(x => x.ReservoirSalinity).Distinct().ToArray(); |
| | | if (reservoirSalinities.Length == 1) |
| | | nudReservoirSalinity.Value = Convert.ToDecimal(reservoirSalinities[0]); |
| | | |
| | | var vshs = curModels.Select(x => x.VSH).Distinct().ToArray(); |
| | | if (vshs.Length == 1) |
| | | nudVSH.Value = Convert.ToDecimal(vshs[0]); |
| | | |
| | | |
| | | var casingFulids = curModels.Select(x => x.CasingFluid == "0" ? "water" : x.CasingFluid == "100" ? "oil" : x.CasingFluid == "200" ? "gas" : "none").Distinct().ToArray(); |
| | | if (casingFulids.Length == 1 && casingFulids[0] == "999") |
| | | { |
| | | cmbCasingHoldUp.Items.Clear(); |
| | | cmbCasingHoldUp.Enabled = false; |
| | | nudCasingHoldUp.Enabled = false; |
| | | } |
| | | else |
| | | { |
| | | cmbCasingHoldUp.Enabled = true; |
| | | nudCasingHoldUp.Enabled = true; |
| | | |
| | | cmbCasingHoldUp.Items.Clear(); |
| | | cmbCasingHoldUp.Items.AddRange(casingFulids); |
| | | } |
| | | |
| | | var screenFulids = curModels.Select(x => x.ScreenFluid == "0" ? "water" : x.ScreenFluid == "100" ? "oil" : x.ScreenFluid == "200" ? "gas" : "none").Distinct().ToArray(); |
| | | if (screenFulids.Length == 1 && screenFulids[0] == "none") |
| | | { |
| | | cmbScreenHoldUp.Items.Clear(); |
| | | cmbScreenHoldUp.Enabled = false; |
| | | nudScreenHoldUp.Enabled = false; |
| | | } |
| | | else |
| | | { |
| | | cmbScreenHoldUp.Enabled = true; |
| | | nudScreenHoldUp.Enabled = true; |
| | | cmbScreenHoldUp.Items.Clear(); |
| | | cmbScreenHoldUp.Items.AddRange(screenFulids); |
| | | } |
| | | |
| | | var tubeFluids = curModels.Select(x => x.TubeFluid == "0" ? "water" : x.TubeFluid == "100" ? "oil" : x.TubeFluid == "200" ? "gas" : "none").Distinct().ToArray(); |
| | | if (tubeFluids.Length == 1 && tubeFluids[0] == "none") |
| | | { |
| | | |
| | | cmbTubeHoldUp.Items.Clear(); |
| | | cmbTubeHoldUp.Enabled = false; |
| | | nudTubeHoldUp.Enabled = false; |
| | | } |
| | | else |
| | | { |
| | | cmbTubeHoldUp.Enabled = true; |
| | | nudTubeHoldUp.Enabled = true; |
| | | |
| | | cmbTubeHoldUp.Items.Clear(); |
| | | cmbTubeHoldUp.Items.AddRange(tubeFluids); |
| | | } |
| | | |
| | | var lithology = curModels.Select(x => x.Lithology).Distinct().ToArray(); |
| | | var curLithology = cmbLithology.Text; |
| | | cmbLithology.Items.Clear(); |
| | | cmbLithology.Items.AddRange(lithology); |
| | | cmbLithology.Text = curLithology; |
| | | |
| | | if (lithology.Length == 1) |
| | | cmbLithology.Text = lithology[0]; |
| | | } |
| | | |
| | | private List<COModelTable> GetFilterResult() |
| | | { |
| | | var type = typeof(COModelTable); |
| | | var result = _models; |
| | | foreach (var filter in _filters) |
| | | result = result.Where(c => type.GetProperty(filter.Key).GetValue(c).ToString() == filter.Value).ToList(); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | private void cmbLithology_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | var control = (sender as ComboBox); |
| | | var property = control.Tag.ToString(); |
| | | |
| | | var filterVal = control.Text == "none" ? "0" : control.Text; |
| | | |
| | | if (_filters.ContainsKey(property)) |
| | | _filters[property] = filterVal; |
| | | else |
| | | _filters.Add(property, filterVal); |
| | | } |
| | | } |
| | | } |