//
// Copyright (c) PlaceholderCompany. All rights reserved.
//
#define WELLPOLE_MODULE
using DevExpress.Mvvm.Native;
using DevExpress.Utils;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using DevExpress.XtraBars.Docking2010.Views.Tabbed;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;
using FlexenabledLic;
using GeoSigma.SigmaDrawerUtil;
using GeoSigma.UCDraw;
using GeoSigma.UCDraw.WellAndSection;
using GeoSigmaDrawLib;
using InterfaceWorkAreaData;
using IPCLib;
using Newtonsoft.Json;
using NPOI.HPSF;
using SigmaDrawerElement;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Xml;
using UCDraw;
using WellWorkDataUI;
using WorkData;
using WorkData.Entity;
namespace PcgDrawR
{
///
/// 软件主窗体.
///
public partial class FormMain : RibbonForm
{
///
/// Tab 页签最长长度
///
private const int TABMAXLENGTH = 10;
private readonly string fileLayout = Path.Combine(Application.StartupPath, "WellSectionlayout.xml");
private readonly string workspaceName1 = "MyLayout";
private readonly LicHelp licHelp;
// 启动参数
private readonly string startFile = string.Empty;
private readonly List lstArgs = new List();
private bool batchSetZColorFlag = false;
private Security security;
private bool isDQLogin = false;
private bool isLogin = false;
///
/// Gets or sets the z color width.
///
public double ZColorWidth { get; set; } = 25;
private RecentFileConfig recentConfig = null;
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32", EntryPoint = "FreeLibrary", SetLastError = true)]
private static extern bool FreeLibrary(IntPtr hModule);
public TabbedView tabbedView { get => tabbedView1; }
private static void ValidateDll(string dllName)
{
string dllPath = Path.Combine(Application.StartupPath, dllName);
IntPtr hModule = IntPtr.Zero;
try
{
hModule = LoadLibrary(dllPath);
if (hModule == IntPtr.Zero)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
finally
{
if (hModule != IntPtr.Zero)
{
FreeLibrary(hModule);
}
}
}
private string lastOpenProjectFile = string.Empty;
private string currentProjectFile = string.Empty;
string m_workAreaPath = "";
public static bool s_bOpenWorkArea = false;
public bool m_IsOpenWorkArea
{
set
{
//m_IsOpenWorkArea = value;
s_bOpenWorkArea = value;
}
get
{
return s_bOpenWorkArea;
}
}
///
///
/// Initializes a new instance of the class.
///
///
//public TcpManager m_KepServer;
// public PipeManager m_KepPipe;
//public string m_KepPipeId = "";
// public int m_KepPort = 0;
public MmfCommunication m_Mmf;
public string m_KepMmfId = "";
public bool m_bSlave = false; //是否作为子进程启动
string m_newWellName = "";
string m_newWellsSection = "";
private DevExpress.XtraBars.BarStaticItem CommnicationInfo;
private DevExpress.XtraBars.BarStaticItem dbInfo;
public FormMain()
{
InitializeComponent();
CommnicationInfo = new BarStaticItem();
CommnicationInfo.Id = 1001;
CommnicationInfo.Name = "Info1";
this.ribbonStatusBar1.ItemLinks.Add(this.CommnicationInfo, true);
CommnicationInfo.Caption = "状态:";
dbInfo = new BarStaticItem();
dbInfo.Id = 1002;
dbInfo.Name = "dbInfo";
this.ribbonStatusBar1.ItemLinks.Add(this.dbInfo, true);
dbInfo.Caption = "当前工区:";
//#if !DEBUG // 或更安全的方式
// if (!DesignMode)
//#endif
{
this.imageCollectionWellMapTree.Images.SetKeyName(0, "tableofcontent_32x32.png");
this.imageCollectionWellMapTree.Images.SetKeyName(1, "alignfloatingobjecttopleft_32x32.png");
this.imageCollectionWellMapTree.Images.SetKeyName(2, "article_32x32.png");
this.imageCollectionWellMapTree.Images.SetKeyName(3, "open_32x32.png");
}
// this.imageCollectionWellMapTree.ImageStream = ((DevExpress.Utils.ImageCollectionStreamer)(resources.GetObject("imageCollectionWellMapTree.ImageStream")));
btnNewWellSection.Enabled = false;
m_IsOpenWorkArea = false;
GeoSigmaWellPoleXY.ReadParamsFile();
this.wellDataTreeList.OnNewWellCreated += CreateNewWell;
this.WellMaptreeList.m_ParentForm = this;
tabbedView1.Ribbon = this.ribbonControl1;
tabbedView1.InvalidDocumentTypes.Add(
typeof(DevExpress.XtraBars.Docking.FloatForm));
licHelp = new LicHelp("KEPlatform");
// 属性面板关闭时,将主菜单开关闭“属性”按钮设置为 unchecked
dckPanelProperty.ClosedPanel += (sender, e) =>
{
btnViewProperty.Checked = false;
};
// 关闭图层时把对应属性改为 unchecked
dockPaneWellTableTree.ClosedPanel += (sender, e) =>
{
btnViewWorkArea.Checked = true;
dockPanelMapLib.Visibility = DockVisibility.Hidden;
};
dockPanelMapLib.ClosedPanel += (sender, e) =>
{
btnViewWorkArea.Checked = true;
dockPaneWellTableTree.Visibility = DockVisibility.Hidden;
};
// 关闭统计元素时把对应属性改为 unchecked
//dckPanelStatic.ClosedPanel += (sender, e) =>
//{
// btnViewStatic.Checked = false;
//};
ribbonControl1.OptionsMenuMinWidth = 0;
KeyPreview = true;
//m_workAreaPath = "D:\\kev\\20250330";
workAreaDb.Instance.Connected("", eDataSourceType.empty);
this.wellDataTreeList.ParentForm = this;
this.wellDataTreeList.tabbedView = this.tabbedView;
// Batteries.Init();
}
///
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control)
{
CurrentForm.SaveFile();
}
else if (e.KeyCode == Keys.O && e.Modifiers == Keys.Control)
{
btnFileOpen_ItemClick(this, null);
}
else if (e.KeyCode == Keys.N && e.Modifiers == Keys.Control)
{
btnFileNew_ItemClick(this, null);
}
}
///
/// Initializes a new instance of the class.
///
/// 参数 /ZC-按块显示散点Z值
public FormMain(string[] args)
: this()
{
//if (args.Length > 0)
//{
// this.startFile = args[0].Trim();
//}
bbtnMeshAntiAlias.Checked = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable;
ribbonControl1.OptionsMenuMinWidth = 0;
//string executablePath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
//string vtkPath = "vtk";
//string combinedPath = Path.Combine(executablePath, vtkPath);
//GeoSigmaLib.SetDllDirectory(combinedPath);
DrawerConfig.Instance.SetConfigValue("MultiView", "OnSynchronize", false);
string workAreaPath = "";
// m_KepPort = 0;
if (args.Length > 1)
{
lstArgs.Clear();
for (int i = 0; i < args.Length; i++)
{
lstArgs.Add(args[i]);
string[] tstrs = args[i].Split('=');
if(tstrs.Length == 2)
{
if (tstrs[0] == "workAreaPath")
{
workAreaPath = tstrs[1];
OpenWorkData(workAreaPath);
m_bSlave = true;
}
else if (tstrs[0] == "port")
{
//if(Int32.TryParse(tstrs[1],out m_KepPort))
//{
// m_bSlave = true;
//}
}
else if (tstrs[0] == "newWell")
{
m_newWellName = tstrs[1];
}
else if (tstrs[0] == "newWellsSection")
{
m_newWellsSection = tstrs[1];
}
else if (tstrs[0] == "PipeId")
{
//m_KepPipeId = tstrs[1];
//m_bSlave = true;
}
else if (tstrs[0] == "MemoryId")
{
m_KepMmfId = tstrs[1];
}
}
}
}
if(m_bSlave)
{
//ribbonPageWorkArea.ItemLinks.Add(barBtnItemNewWorkArea);
//ribbonPageWorkArea.ItemLinks.Add(barBtnItemOpenWorkArea);
ribbonPageWorkArea.ItemLinks.Remove(barBtnItemNewWorkArea);
ribbonPageWorkArea.ItemLinks.Remove(barBtnItemOpenWorkArea);
dockPaneWellTableTree.Visibility = DockVisibility.Hidden;
//panelContainer2.Controls.Remove(dockPaneWellTableTree);
//panelContainer1.Controls.Add(dockPaneWellTableTree);
//dockManager1.RootPanels.RemoveAt(0);
}
}
async void StartConnectKep()
{
try
{
//m_KepServer = new TcpManager { LocalIdentity = "WellPole" };
//m_KepServer.PacketReceived += OnPacketReceived;
//m_KepServer.Connected += OnConnected;
//m_KepServer.Disconnected += OnDisconnected;
//m_KepServer.ErrorOccurred += OnErrorOccurred;
//await m_KepServer.StartClientAsync("127.0.0.1", m_KepPort);
//m_KepPipe = new PipeManager(m_KepPipeId, false);
//m_KepPipe.MessageReceived += OnPipeMessageReceived;
//m_KepPipe.ConnectionStatusChanged += OnPipeStatusChanged;
//m_KepPipe.HeartbeatTimeout += OnPipeHeartbeatTimeout;
//m_KepPipe.StartAsync();
m_Mmf = new MmfCommunication(m_KepMmfId, false, "WellPole");
m_Mmf.DataReceived += OnMmfDataReceived;
m_Mmf.Connected += OnMmfConnected;
m_Mmf.Disconnected += OnMmfDisconnected;
m_Mmf.ErrorOccurred += OnMmfError;
await m_Mmf.StartAsync();
}
catch(Exception ex)
{
}
}
///
/// 当前激活的文档
///
private WellPoleUCDrawEdit CurrentForm
{
get
{
if (this.tabbedView1.ActiveDocument != null)
{
return tabbedView1.ActiveDocument.Control as WellPoleUCDrawEdit;
}
else if (this.tabbedView1.ActiveFloatDocument != null)
{
return tabbedView1.ActiveFloatDocument.Control as WellPoleUCDrawEdit;
}
return null;
}
}
///
/// DrawerGlobalConfig
///
public DrawerGlobalConfig DrawerGlobalConfig { get; set; } = DrawerGlobalConfig.Instance;
private FileDropHandler fileDroper;
///
/// Forms the main_ load.
///
/// The sender.
/// The e.
private async void FormMain_Load(object sender, EventArgs e)
{
try
{
if (Security.CurentLicenseInfo.IsNetServer == true)
{
this.isLogin = false;
await this.setLoginStatusAsync();
}
else
{
this.isLogin = true;
}
this.security = new Security();
this.security.LicenseInvalidateEvent += async (status, message) =>
{
this.isLogin = status == 1;
await this.setLoginStatusAsync();
};
this.security.CheckLicense(this); //ggff1974
}
catch
{
MessageBox.Show(" lic error 请联系服务人员!"); ////ggff1974
Application.Exit();
}
fileDroper = new FileDropHandler(this);
try
{
// Disable layout load animation effects
workspaceManager1.AllowTransitionAnimation = DevExpress.Utils.DefaultBoolean.False;
WorkspaceManager.SetSerializationEnabled(this.ribbonControl1, false);
// Load DevExpress controls' layouts from a file
if (workspaceManager1.LoadWorkspace(workspaceName1, fileLayout, true))
{
workspaceManager1.ApplyWorkspace(workspaceName1);
// this.dckPanelLayer.Text = "图层";
}
InitRecentConfig();
}
finally
{
this.licHelp.DoLogin();
}
CheckEnvironment();
}
private async Task setLoginStatusAsync()
{
bool isLoggedIn = this.isDQLogin && this.isLogin;
string tooltipText = isLoggedIn ? "已登录" : "未登录";
string resourceName = isLoggedIn
? "bsiLoginInfo.ImageOptions.SvgImage"
: "bsiLoginInfo.ImageOptions.DisabledSvgImage";
// 更新非资源依赖的UI部分
this.bsiLoginInfo.Enabled = true;
// ((ToolTipItem)this.bsiLoginInfo.SuperTip.Items[0]).Text = tooltipText; //ggff
// 异步加载资源
var resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
var svgImage = await Task.Run(() => resources.GetObject(resourceName));
// 回到UI线程更新图像(实际上await会自动回到UI线程)
this.bsiLoginInfo.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)svgImage;
}
///
/// Forms the main_ shown.
///
/// The sender.
/// The e.
private void FormMain_Shown(object sender, EventArgs e)
{
LoadStartFile();
//SplashScreenManager.CloseForm(true);
ribbonStatusBar1.Visible = true;
}
///
/// Inits the recent config.
///
private void InitRecentConfig()
{
recentConfig = new RecentFileConfig();
this.ResetOpenMenu();
}
///
/// 加载启动参数指定的文件async
///
private void LoadStartFile()
{
if (string.IsNullOrEmpty(this.startFile))
{
return;
}
string ext = Path.GetExtension(this.startFile);
if (this.lstArgs.Count > 0)
{
string strVtk = this.lstArgs.Find(it => { return it.ToUpper().StartsWith("/VTK"); });
if (ext == ".xyz" && !string.IsNullOrEmpty(strVtk))
{
//OpenVtkView();
return;
}
string strZC = this.lstArgs.Find(it => { return it.ToUpper().StartsWith("/ZC"); });
if (!string.IsNullOrEmpty(strZC))
{
int nSizeIndex = strZC.IndexOf(':');
if (nSizeIndex > 0)
{
ZColorWidth = Convert.ToInt32(strZC.Substring(nSizeIndex + 1));
}
//string ext = Path.GetExtension(this.startFile);
//if(ext == ".xyz")
//{
batchSetZColorFlag = true;
//}
OpenFile(this.startFile, true);
this.lstArgs.Clear();
}
}
else
{
OpenFile(this.startFile);
}
}
///
/// Forms the main_ form closed.
///
/// The sender.
/// The e.
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
{
//Save DevExpress controls' layouts to a file
workspaceManager1.CaptureWorkspace(workspaceName1, true);
workspaceManager1.SaveWorkspace(workspaceName1, fileLayout, true);
licHelp.LogOut();
}
///
/// 合并子窗体控件
///
/// ribbon控件
/// 事件参数
private void ribbonControl1_Merge(object sender, DevExpress.XtraBars.Ribbon.RibbonMergeEventArgs e)
{
//RibbonControl parentRRibbon = sender as RibbonControl;
RibbonControl childRibbon = e.MergedChild;
childRibbon.Dock = DockStyle.None;
if (childRibbon.Parent is WellPoleUCDrawEdit)
{
WellPoleUCDrawEdit child = childRibbon.Parent as WellPoleUCDrawEdit;
child.ViewGroupVisible = false;
child.MergePanels();
if (btnViewProperty.Checked != child.PropertyPanelVisible)
{
btnViewProperty.Checked = child.PropertyPanelVisible;
}
//if (btnViewWorkArea.Checked != child.PropertyPanelVisible)
//{
// btnViewWorkArea.Checked = child.PropertyPanelVisible;
//}
//if (btnViewStatic.Checked != child.StatisticPanelVisible)
//{
// btnViewStatic.Checked = child.StatisticPanelVisible;
//}
}
}
///
/// ribbons the control1_ un merge.
///
/// The sender.
/// The e.
private void ribbonControl1_UnMerge(object sender, RibbonMergeEventArgs e)
{
try
{
RibbonControl childRibbon = e.MergedChild;
if (childRibbon.Parent is WellPoleUCDrawEdit)
{
WellPoleUCDrawEdit child = childRibbon.Parent as WellPoleUCDrawEdit;
child.UnMergePanels();
}
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
}
}
///
/// ribbons the control1_ show customization menu.
///
/// The sender.
/// The e.
private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)
{
e.ShowCustomizationMenu = false;
}
///
/// 激活图件
///
/// 名称
private bool ActiveDoc(string fullFile)
{
BaseDocument frmDoc =
this.docManager.View.Documents.FirstOrDefault(it =>
{
if (it.Control is WellPoleUCDrawEdit child)
{
if (fullFile.Equals(child.FileFullName, StringComparison.CurrentCultureIgnoreCase))
{
return true;
}
}
return false;
});
if (frmDoc != null)
{
this.docManager.View.Controller.Activate(frmDoc);
return true;
}
return false;
}
///
/// 打开文件
///
/// 事件按钮
/// 事件参数
private void btnFileOpen_ItemClick(object sender, ItemClickEventArgs e)
{
string[] fileNames = DocHelper.SelectMutiFiles();
foreach (var item in fileNames)
{
if (!string.IsNullOrEmpty(item))
{
OpenFile(item);
}
}
}
private void TryRecoverFileWhenUnexpectedShutdown(WellPoleUCDrawEdit drawEdit, string filePath)
{
if (GeoSigmaXY.SigmaDocBackupExists(filePath))
{
var result = MessageBox.Show("检测到文件异常关闭,是否恢复?", "恢复选项"
, MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result == DialogResult.OK)
{
drawEdit.DrawerView.ViewControl.Drawer.RecoverMode = true;
}
}
}
public static XmlDocument SafeLoadXml(string filePath)
{
try
{
// 方法 1:优先让 XmlReader 自动处理(推荐)
var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var reader = XmlReader.Create(fs, new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Prohibit, // 安全起见禁用 DTD
IgnoreWhitespace = true
});
var doc = new XmlDocument();
doc.Load(reader);
return doc;
}
catch (XmlException ex)
{
// 如果自动检测失败,尝试 GB2312(备用方案)
try
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var sr = new StreamReader(filePath, Encoding.GetEncoding("GB2312"));
var doc = new XmlDocument();
doc.Load(sr);
return doc;
}
catch
{
throw new InvalidOperationException($"无法解析 XML 文件: {ex.Message}", ex);
}
}
return null;
}
///
/// 打开文件
///
/// 文件路径
/// 是否以方块方式显示散点数据
//private Task OpenFile(string strFile, bool setZColor = false)
public bool OpenFile(string strFile, bool bInMapLib = false, bool setZColor = false)
{
// 已存在的文件仅激活
if (this.ActiveDoc(strFile))
{
return true;
//return Task.FromResult(true);
}
try
{
bool bOpend = false;
GeoSigmaXY.eViewType tType = GeoSigmaXY.eViewType.plane;
try
{
XmlDocument xmldoc = SafeLoadXml(strFile);
// XmlDocument xmldoc = new XmlDocument();
// xmldoc.Load(strFile);
if (xmldoc != null)
{
XmlNode wellNode = xmldoc.SelectSingleNode("Pcg/WellColumn");
XmlNode wellSectionNode = xmldoc.SelectSingleNode("Pcg/CrossSection");
if (wellNode != null)
tType = GeoSigmaXY.eViewType.wellpole;
if (wellSectionNode != null)
tType = GeoSigmaXY.eViewType.wellsection;
}
}
catch
{
tType = GeoSigmaXY.eViewType.plane;
}
WellPoleUCDrawEdit drawerChild = new WellPoleUCDrawEdit(tType);
drawerChild.bMapLibDoc = bInMapLib;
drawerChild.OnSaveFileToWorkArea += this.SaveFileToWorkArea;
drawerChild.OpenNewFile += OnOpenNewFile;
if (batchSetZColorFlag)
{
drawerChild.BatchSetZColorFlag = batchSetZColorFlag;
batchSetZColorFlag = !batchSetZColorFlag;
}
// drawerChild.LayerPanel = this.dckPanelLayer;
drawerChild.PropertyPanel = this.dckPanelProperty; //属性面板替换
drawerChild.ElePropertyPanel = this.dockElePanel;
// drawerChild.CreateMapPanel = this.dcpCreateMap;
// drawerChild.StatisticPanel = this.dckPanelStatic;
drawerChild.DrawerStatusBar = this.ribbonControl1.StatusBar;
TryRecoverFileWhenUnexpectedShutdown(drawerChild, strFile);
splashScreenManager1.ShowWaitForm();
splashScreenManager1.SetWaitFormDescription("正在打开文件...");
this.SuspendLayout();
// drawerChild.ribbonMain.Visible = false;
drawerChild.ZColorWidth = this.ZColorWidth;
drawerChild.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable;
bOpend = drawerChild.OpenFile(strFile, setZColor, tType);
if (bOpend == false)
{
splashScreenManager1.CloseWaitForm();
// frmChild.Close();
MessageBox.Show($"打开文件{strFile}失败", "打开");
//return Task.FromResult(false);
return false;
}
var doc = this.tabbedView1.AddDocument(drawerChild);
// 标签页上显示短名称
doc.Caption = TabName(drawerChild.Text);
// 光标移动上去时显示全名
if (doc is Document document)
{
document.Tooltip = drawerChild.Text;
}
this.ribbonControl1.MergeRibbon(drawerChild.ribbonMain, false);
drawerChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) =>
{
SetRecent(fileName);
});
// drawerChild.DrawerView.ViewControl.Drawer.SetVtkMainMeshEvent += new SetVtkMainMeshHandler((filePath, pMesh) =>
//{
// SetVtkMainMesh(filePath, pMesh);
//});
// drawerChild.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler);
// drawerChild.CloseVtkEvent = new CloseVtkHandler(CloseVtkHandler);
SetRecent(strFile);
splashScreenManager1.CloseWaitForm();
#if DEBUG
this.TestEventHandler(drawerChild);
#endif
//return Task.FromResult(true);
// drawerChild.DrawerView.ViewControl.InitStratumDivisionData(); //ggff 先这样
return true;
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
//return Task.FromResult(false);
return false;
}
finally
{
this.ResumeLayout();
}
}
///
/// 获取 Tab 页显示名称,如果太长会被截断,防止一个标签页占非常长的位置
///
/// 要显示的目标名称
/// 最终会被显示的名称
private string TabName(string caption)
{
return caption.Length > TABMAXLENGTH ? caption.Substring(0, TABMAXLENGTH) : caption;
}
///
/// Tests the event handler.
///
/// The editor.
private void TestEventHandler(WellPoleUCDrawEdit editor)
{
editor.DrawerView.InsertCommonCommand("克隆到其它井组",
new EventHandler((obj, args) =>
{
SelectedElementsArgs selArgs = args as SelectedElementsArgs;
if (selArgs == null)
{ return; }
List elements = selArgs.Elements;
if (elements != null)
{
//editor.DrawerView.GetSelectedElements()[0];
foreach (DrawerElementProperty ele in elements)
{
//ele.Element
//strbContent.AppendLine(ele.Element.ToDfdString());
}
}
}), true, DrawElementType.ELEMENT_WELL_GROUP);
}
private int documentIndex = 0;
///
/// 新建文件
///
/// 按钮
/// 事件参数
private void btnFileNew_ItemClick(object sender, ItemClickEventArgs e)
{
CreateNewWell("");
}
///
/// Files the closed.
///
/// The sender.
/// The e.
private void FileClosed(object sender, EventArgs e)
{
if (sender is WellPoleUCDrawEdit child)
{
child.ShowStatisticResult -= ShowStatic;
}
}
///
/// 显示统计面板.
///
/// The sender.
/// The instance containing the event data.
private void ShowStatic(object sender, EventArgs e)
{
try
{
// this.dckPanelStatic.Visibility = DockVisibility.Visible;
}
finally
{
}
}
///
/// Sets the recent.
///
/// The file.
private void SetRecent(string file)
{
if (string.IsNullOrEmpty(file))
{
return;
}
if (this.recentConfig.AddTop(file) == false)
{
return;
}
ResetOpenMenu();
this.recentConfig.Save();
}
///
/// Resets the open menu.
///
private void ResetOpenMenu()
{
this.ppmOpen.ClearLinks();
for (int i = 0; i < this.recentConfig.Files.Count; i++)
{
string strFile = this.recentConfig.Files[i];
BarButtonItem item = new BarButtonItem();
item.Caption = strFile;
item.ImageOptions.Image = imgsMain.Images["fileNew"];
item.ItemClick += new ItemClickEventHandler(async (object sender, ItemClickEventArgs e) =>
{
OpenFile(strFile);
});
this.ppmOpen.AddItem(item);
}
}
///
/// 保存文件
///
/// 按钮
/// 事件参数
private void btnSaveMain_ItemClick(object sender, ItemClickEventArgs e)
{
if (CurrentForm == null)
{
return;
}
if (CurrentForm.SaveFile())
{
SetRecent(CurrentForm.FileFullName);
}
}
///
/// 另存为
///
/// 事件按钮
/// 事件参数
private void btnSaveAs_ItemClick(object sender, ItemClickEventArgs e)
{
if (CurrentForm == null)
{
return;
}
if (CurrentForm.SaveAs())
{
SetRecent(CurrentForm.FileFullName);
}
}
///
/// 符号管理
///
/// 按钮
/// 事件参数
private void btnSymbolManager_ItemClick(object sender, ItemClickEventArgs e)
{
DirectoryInfo symbolFilePath = Directory.GetParent(Application.StartupPath);
string symbolFile = Path.Combine(symbolFilePath.FullName, "Symbol");
if (CurrentForm == null)
{
SymbolLibInterface.SymbolHelp.ShowSymbolUI(null, symbolFile);
}
else
{
SymbolLibInterface.SymbolHelp.ShowSymbolUI(CurrentForm.DrawerView, symbolFile);
}
}
///
/// 选项按纽
///
/// 菜单项
/// 事件参数
private void btnSetting_Clicked(object sender, ItemClickEventArgs e)
{
//FormGlobalOptions formGlobal = new FormGlobalOptions();
FrmOptions formGlobal = new FrmOptions();
formGlobal.ShowDialog(this);
}
///
/// 图层面板
///
/// 菜单项
/// 事件参数
private void btnViewWorkArea_CheckedChanged(object sender, ItemClickEventArgs e)
{
try
{
if (btnViewWorkArea.Checked)
{
this.dockPaneWellTableTree.Visibility = DockVisibility.Hidden;
this.dockPanelMapLib.Visibility = DockVisibility.Hidden;
}
else
{
//if (!this.dockManager1.AutoHideContainers[0].Controls.Contains(dockPaneWellTableTree))
//{
// //this.dockManager1.AutoHideContainers[0].Controls.Add(dckPanelLayer);
// this.dockManager1.AddPanel(DockingStyle.Left, dockPaneWellTableTree);
//}
this.dockPaneWellTableTree.Visibility = DockVisibility.Visible;
this.dockPanelMapLib.Visibility = DockVisibility.Visible;
}
}
finally
{
}
}
///
/// 属性面板可见性设置
///
/// 菜单项
/// 事件参数
private void btnViewProperty_CheckedChanged(object sender, ItemClickEventArgs e)
{
//LayerPanelVIsible = btnViewProperty.Checked;
try
{
if (CurrentForm == null)
{
if (btnViewProperty.Checked)
{
this.dckPanelProperty.Visibility = DockVisibility.AutoHide;
}
else
{
this.dckPanelProperty.Visibility = DockVisibility.Visible;
this.dckPanelProperty.ParentPanel.ActiveChild = this.dckPanelProperty;
}
}
else
{
CurrentForm.PropertyPanelVisible = btnViewProperty.Checked;
}
}
catch
{
}
}
///
/// 统计面板
///
/// 菜单项
/// 事件参数
private void btnViewStatic_CheckedChanged(object sender, ItemClickEventArgs e)
{
//try
//{
// if (CurrentForm == null)
// {
// if (btnViewStatic.Checked)
// {
// this.dckPanelStatic.Visibility = DockVisibility.AutoHide;
// }
// else
// {
// this.dckPanelStatic.Visibility = DockVisibility.Visible;
// }
// }
// else
// {
// CurrentForm.StatisticPanelVisible = btnViewStatic.Checked;
// }
//}
//catch
//{
//}
}
///
/// 默认消除网格锯齿
///
/// 事件菜单
/// 事件参数
private void bbtnMeshAntiAlias_CheckedChanged(object sender, ItemClickEventArgs e)
{
Task.Run(() =>
{
DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable = bbtnMeshAntiAlias.Checked;
DrawerGlobalConfig.Instance.Save();
});
}
///
/// 拖放文件
///
/// 窗体
/// 事件参数
private void FormMain_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
for (int i = 0; i < filePaths.Length; i++)
{
// 数组中的每个元素都是一个文件或目录的完整路径
string path = filePaths[i];
if (File.Exists(path))
{
OpenFile(path, false);
}
}
}
}
///
/// 拖放进入事件
///
/// 窗体
/// 事件参数
private void FormMain_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
// 管理员模式处理文件拖放,不要删除,有作用
string[] filePaths = (string[])e.Data.GetData(typeof(string[]));
for (int i = 0; i < filePaths.Length; i++)
{
// 数组中的每个元素都是一个文件或目录的完整路径
string path = filePaths[i];
if (File.Exists(path))
{
OpenFile(path, false);
}
}
}
///
/// Gets the neighbor document.
///
/// The documents.
/// The document.
/// A BaseDocument.
protected BaseDocument GetNeighborDocument(BaseDocument[] documents, BaseDocument document)
{
int nLength = documents.Length;
if (nLength == 1)
{
return null;
}
int nIndex = System.Array.IndexOf(documents, document);
if (nIndex == nLength - 1)
{
return documents[nIndex - 1];
}
return documents[nIndex + 1];
}
private bool isCloseCanceled = false;
///
/// tabbeds the view1_ document closing.
///
/// The sender.
/// The e.
private void tabbedView1_DocumentClosing(object sender, DocumentCancelEventArgs e)
{
BaseDocument doc = e.Document as BaseDocument;
if (doc.Control is WellPoleUCDrawEdit child)
{
FormClosingEventArgs ea = new FormClosingEventArgs(CloseReason.MdiFormClosing, false);
child.UCDrawEdit_FormClosing(sender, ea);
isCloseCanceled = e.Cancel = ea.Cancel;
if (e.Cancel)
{
if (doc.IsActive)
{
this.ribbonControl1.MergeRibbon(child.ribbonMain, false);
}
}
else
{
child.SaveLayout();
}
}
}
///
/// 窗体关闭事件
///
/// 窗体
/// 事件参数
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
for (int i = 0; i < tabbedView1.Documents.Count; i++)
{
tabbedView1.Controller.Close(tabbedView1.Documents[i]);
if (isCloseCanceled == true)
{
e.Cancel = true;
break;
}
}
}
///
/// 关于.
///
/// The source of the event.
/// The instance containing the event data.
private void btnAbout_ItemClick(object sender, ItemClickEventArgs e)
{
FrmAbout frmAbout = new FrmAbout();
frmAbout.Show(this);
}
private void OnOpenNewFile(string filePath)
{
foreach (var doc in tabbedView1.Documents)
{
if (doc.Control is WellPoleUCDrawEdit ucDrawEdit && ucDrawEdit.FileFullName == filePath)
{
ucDrawEdit.OpenFile(filePath);
return;
}
}
OpenFile(filePath);
}
///
/// 检测运行环境
///
private void CheckEnvironment()
{
try
{
CheckBaseDependencies();
//CheckGriddingDependencies(); //ggff1974
//CheckMeshProcessDependencies(); //ggff1974
CheckMeshSymbolLibManagerDependencies();
}
catch (Exception ex)
{
MessageBox.Show($"运行错误(E003),{ex.Message}, 请联系服务人员!");
Application.Exit();
}
}
private void CheckBaseDependencies()
{
try
{
GeoSigmaLib.GeoSigmaLibInit();
}
catch
{
throw new DllNotFoundException("加载基础库失败");
}
}
private void CheckGriddingDependencies()
{
string[] griddingDependencies =
{
// 生成等值线,和 GridModel.exe 配合使用
"CurveModel.exe",
// 最小张力
"GridModel.exe",
// 最小曲率
"SurfaceGrid.exe",
// 快速网格化
"QuikGridCS.dll",
// 反距离加权
"ModelCreateIDW.dll",
// 自然临近
"NaturalNeighbor.dll",
};
foreach (string depend in griddingDependencies)
{
if (!File.Exists(Path.Combine(Application.StartupPath, depend)))
{
throw new FileNotFoundException($"依赖的 {depend} 文件未找到");
}
if (depend.EndsWith(".dll"))
{
ValidateDll(depend);
}
}
}
private void CheckMeshProcessDependencies()
{
string fileName = "MeshProcess.exe";
if (!File.Exists(Path.Combine(Application.StartupPath, fileName)))
{
throw new FileNotFoundException($"依赖的 {fileName} 文件未找到");
}
}
private void CheckMeshSymbolLibManagerDependencies()
{
string fileName = "SymbolLibManager.exe";
if (!File.Exists(Path.Combine(Application.StartupPath, fileName)))
{
throw new FileNotFoundException($"依赖的 {fileName} 文件未找到");
}
}
private void FormMain_MdiChildActivate(object sender, EventArgs e)
{
//string strText = this.Text;
}
private void barBtnItemOpenWorkArea_ItemClick(object sender, ItemClickEventArgs e)
{
//using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
//{
// folderDialog.Description = "选择目标目录";
// folderDialog.RootFolder = Environment.SpecialFolder.Desktop;
// // 如果文本框已有路径,设置为初始路径
// if (!string.IsNullOrEmpty(m_workAreaPath))
// {
// folderDialog.SelectedPath = m_workAreaPath;
// }
// if (folderDialog.ShowDialog() == DialogResult.OK)
// {
// m_workAreaPath = folderDialog.SelectedPath;
// workAreaDb.Instance.Connected(m_workAreaPath, eDataSourceType.kep);
// // workAreaDb.Instance.Connected("D:\\kev\\20250330", eDataSourceType.kep);
// // MessageBox.Show($"已选择目录: {folderDialog.SelectedPath}");
// }
//}
OpenFileDialog ofd = new OpenFileDialog() // XtraOpenFileDialog()
{
Filter = "项目文件(*.kep)|*.kep",
RestoreDirectory = false,
Multiselect = false,
InitialDirectory = WorkConfig.Data.LastProjDirectory,
};
if (ofd.ShowDialog() != DialogResult.OK)
{
return;
}
else
{
string filename = ofd.FileName;
this.OpenWorkData(ofd.FileName);
// this.wellDataTreeList.OpenWorkData(ofd.FileName);
}
//
}
private async Task OpenWorkData(string filename)
{
try
{
using (SplashHelper splash = SplashHelper.Create())
{
SplashHelper.SetCaption("正在打开项目");
this.lastOpenProjectFile = filename;
Config.ProjectPath = Path.GetDirectoryName(filename);
Config.ProjectName = Path.GetFileNameWithoutExtension(filename);
WorkConfig.Data.LastProjDirectory = Config.ProjectPath;
ConfigUtils.Load();
Dictionary> mapFunc = new Dictionary>();
bool isLoadOk = false;
try
{
this.wellDataTreeList.CloseAllData();
this.WellMaptreeList.CloseAllMaps();
this.Subscribe(() =>
{
DataHelp.Reset();
CalcDataHelp.Reset();
}, true);
DBHelp.ResetDB();
//更新套损数据
// DBHelp.NewDb.Updateable().SetColumns(x => new WellCasingDamage() { GROUP = "默认" }).Where(x => SqlFunc.IsNullOrEmpty(x.GROUP)).ExecuteCommand();
// 同步数据库定义
EntityHelp.SyncDatabase();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().AS(DBHelp.GetTableOriginName()).Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
DBHelp.Db.Queryable().Take(1).ToList();
////套损目录迁移
//string casingNewPath = FileHelp.GetDirCasingDamagePath("默认");
//string casingOldPath = FileHelp.GetDirCasingDamagePath(string.Empty);
//var files = Directory.GetFiles(casingOldPath);
//for (int i = 0; i < files.Length; i++)
//{
// File.Move(files[i], Path.Combine(casingNewPath, Path.GetFileName(files[i])));
//}
this.CheckDataBase();
// 同步井索引
DataHelp.SyncSearchWellName();
await DataHelp.LoadData();
await this.wellDataTreeList.OpenWorkData(filename);
isLoadOk = true;
m_IsOpenWorkArea = true;
barBtnItemStrataSystem.Enabled = m_IsOpenWorkArea;
btnStratumDivision.Enabled = m_IsOpenWorkArea;
btnNewWellSection.Enabled = m_IsOpenWorkArea;
dbInfo.Caption = Config.ProjectPath;
}
catch (Exception ex)
{
//Console.WriteLine($"打开工区异常:{ex.Message}");
//this.RepairDataBase();
//SplashHelper.SetCaption("正在打开项目");
MessageBox.Show("打开数据库错误,请检查工区是否正常");
m_IsOpenWorkArea = false;
barBtnItemStrataSystem.Enabled = m_IsOpenWorkArea;
btnStratumDivision.Enabled = m_IsOpenWorkArea;
btnNewWellSection.Enabled = m_IsOpenWorkArea;
return;
}
//if (!isLoadOk)
//{
// mapFunc.Add("DataHelp", () => DataHelp.LoadData());
// mapFunc.Add("数据管理", () => this.ctDataInstance.OpenWorkData(filename));
//}
// mapFunc.Add("数据成图", () => this.ctChartInstance.OpenWorkData(filename));
//mapFunc.Add("水平井", () => this.ctHorizontalWellInstance.OpenWorkDataAsync());
//mapFunc.Add("成果管理", () => this.ctResultInstance.OpenWorkData(filename));
//mapFunc.Add("构造识别", () => this.ctIdentifyInstance.OpenWorkData(filename));
//mapFunc.Add("统计分析", () => this.ctAnalysisInstance.OpenWorkData(filename));
//mapFunc.Add("开采评价", () => this.ctCompacityInstance.OpenWorkData());
////mapFunc.Add("储层预测", () => this.ctReservoirPrediction.OpenWorkData());
//mapFunc.Add("断层分析", () => this.ctFaultAnalyzeInstance.OpenWorkData());
//mapFunc.Add("储量分析", () => this.ctReservoirAnalyzeInstance.OpenWorkData());
//mapFunc.Add("套损井", () => this.ctCasingDamageInstance.OpenWorkData(filename));
//mapFunc.Add("三维", () => this.ctThreeDimension.OpenWorkData());
this.WellMaptreeList.OpenWorkArea(filename);
try
{
var lstTask = new List();
foreach (var kv in mapFunc)
{
try
{
lstTask.Add(kv.Value());
}
catch (Exception ex)
{
MessageBox.Show($"打开失败, 模块: '{kv.Key}', 错误: '{ex.Message}'!", "打开");
return;
}
}
await Task.WhenAll(lstTask.ToArray());
}
catch (NotSupportedException ex)
{
Reporter.WriteMsg(ex.Message);
MessageBox.Show("打开失败,可能是项目数据库结构已变更!", "打开");
}
string folderPath = Path.GetDirectoryName(filename);
m_workAreaPath = folderPath;
workAreaDb.Instance.Connected(m_workAreaPath, eDataSourceType.kep);
try
{
////追加版本
//this.WriteVersion(filename);
//WorkConfig.VisitProject(filename);
//WorkConfig.SaveData();
//this.ctHomeInstance.ReloadData();
//LayerCreate.ExePath = WorkConfig.Data.ExeDirectory;
//this.barStaticTips.Caption = $"当前项目: {filename}";
//this.SetUIEnabled(true);
////打开项目后,启用各模块功能
//foreach (TabFormPage item in this.tabFormControl.Pages)
//{
// item.Enabled = true;
//}
//this.ChangePage();
}
catch (Exception ex)
{
Trace.WriteLine(DateTime.Now + "OpenWorkData:" + ex.Message);
}
}
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
Reporter.WriteMsg(ex.Message);
MessageBox.Show("打开失败,可能是项目数据库结构已变更!", "打开");
}
}
private void barBtnItemNewWorkArea_ItemClick(object sender, ItemClickEventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog
{
Title = "新建项目",
AddExtension = true,
RestoreDirectory = false,
Filter = "项目文件(*.kep)|*.kep",
OverwritePrompt = true,
FileName = "新建项目",
// InitialDirectory = WorkConfig.Data.LastProjDirectory,
};
if (sfd.ShowDialog() != DialogResult.OK)
{
return;
}
// 确定项目路径
string strWorkDir = Path.Combine(Path.GetDirectoryName(sfd.FileName), Path.GetFileNameWithoutExtension(sfd.FileName));
string strWorkFile = Path.Combine(strWorkDir, Path.GetFileName(sfd.FileName));
if (Directory.Exists(strWorkDir))
{
if (MessageBox.Show("选择目录已存在同名项目,确认是否继续创建项目?", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
{
return;
}
}
using (SplashHelper splash = SplashHelper.Create())
{
SplashHelper.SetCaption("正在创建项目");
if (!Directory.Exists(strWorkDir))
{
// 创建目录
Directory.CreateDirectory(strWorkDir);
}
Config.ProjectPath = strWorkDir;
// 初始化项目路径
string srcPath = Environment.CurrentDirectory + @"\WorkSpace\";
string destPath = Config.ProjectPath;
// 拷贝目录
Fk.Utils.WorkAreaDirectoryIO.CopyDirectory(srcPath, destPath);
// 测试codefirst
{
string file = Fk.Utils.WorkAreaDirectoryIO.CombinPath(Config.ProjectPath, "sys.db");
if (File.Exists(file))
{
File.Delete(file);
}
// 初始化数据库
DBHelp.ResetDB();
EntityHelp.InitDatabase();
}
WorkData.Entity.WorkArea wa = new WorkData.Entity.WorkArea();
string temp = strWorkFile.Substring(strWorkFile.LastIndexOf("\\") + 1);
wa.ID = 1;
wa.WORKNAME = temp.Substring(0, temp.Length - 4);
wa.PROJECTION = string.Empty;
DBHelp.NewDb.Insertable(wa).ExecuteCommand();
File.WriteAllText(strWorkFile, string.Empty);
// 打开项目
this.OpenWorkData(strWorkFile);
}
}
private void dckPanelLayer_Click(object sender, EventArgs e)
{
}
///
/// 检测树是否存在节点总数
///
private void CheckDataBase()
{
//List tableInfoValues = DBHelp.NewDb.Queryable().Take(1).ToList();
var lst = DBHelp.NewDb.Queryable().ToList();
var checkTreeTable = !lst.Any(x => x.NODE_NAME == "散点数据" && x.NODE_TYPE == 1);
bool isCreate = false;
try
{
var tableInfos = DBHelp.NewDb.DbMaintenance.GetTableInfoList(false);
foreach (var tb in tableInfos)
{
var dbColumns = DBHelp.NewDb.DbMaintenance.GetColumnInfosByTableName(tb.Name, false).ToList();
var entityType = EntityHelp.GetEntityTypeByName(tb.Name);
var properties = entityType.GetProperties();
foreach (var p in properties)
{
if (dbColumns.Any(x => x.DbColumnName == p.Name))
{
var col = dbColumns.FirstOrDefault(x => x.DbColumnName == p.Name);
SugarColumn attribute = p.GetCustomAttribute();
if (attribute != null && attribute.IsIgnore == false
&& col.IsPrimarykey == false && col.IsNullable != attribute.IsNullable)
{
isCreate = true;
break;
}
}
}
}
}
catch (Exception ex)
{
//用于字段类型及属性检查,未完
}
if (lst.Count() != 51 || checkTreeTable || isCreate)
{
EntityHelp.ClearSysDataTree();
EntityHelp.InitSysDataTree();
}
List notTables = new List() { DBHelp.GetTableName() };
List all_tableInfos = EntityHelp.GetTableInfos().Where(x => !notTables.Contains(x.TableName)).ToList();
List db_tableInfos = DBHelp.NewDb.Queryable().ToList().Where(x => !notTables.Contains(x.TableName)).ToList();
//查询未存在数据库得部分
var notInDbInfos = all_tableInfos.Where(x => !db_tableInfos.Any(c => c.ColumnName == x.ColumnName && c.ChineseName == x.ChineseName && c.TableName == x.TableName));
if (notInDbInfos != null && notInDbInfos.Count() > 0)
{
EntityHelp.InitTableInfo(notInDbInfos.Distinct().ToList());
}
//查询数据库多余部分
string[] notInTables = { "well_curve", "hori_well_fractur_parameter" }; //存在自定义列
var dbExccessInfos = db_tableInfos.Where(x => !notInTables.Contains(x.TableName) && !all_tableInfos.Any(c => c.ColumnName == x.ColumnName && c.ChineseName == x.ChineseName && c.TableName == x.TableName));
if (dbExccessInfos != null && dbExccessInfos.Count() > 0)
{
EntityHelp.DeleteTableInfo(dbExccessInfos.Distinct().ToList());
}
}
private void wellDataTreeList_CustomColumnDisplayText(object sender, DevExpress.XtraTreeList.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.AbsoluteIndex == 0 && e.Node?.Tag is WellDataTreeList.NodeData nd && nd.SubCount > 0)
{
e.DisplayText = $"{e.Value}({nd.SubCount})";
}
}
// 树控件双击查看数据
private void wellDataTreeList_MouseDown(object sender, MouseEventArgs e)
{
TreeList treelist = sender as TreeList;
TreeListHitInfo hitInfo = treelist.CalcHitInfo(e.Location);
if (hitInfo.Node == null || hitInfo.Node.Level < 1)
{
return;
}
if (e.Clicks == 2 && hitInfo.InRow && hitInfo.Node.Tag is WellDataTreeList.NodeData nd)
{
// 双击查看数据
if (hitInfo.Column.AbsoluteIndex == 0)
{
this.OpenNodeDataChart(hitInfo.Node);
}
}
}
// 树控件右键菜单弹出
private void wellDataTreeList_MouseUp(object sender, MouseEventArgs e)
{
this.wellDataTreeList.wellDataTreeList_MouseUp(sender, e);
}
public void OpenNodeDataChart(TreeListNode node)
{
if (node.Tag is WellDataTreeList.NodeData nd)
{
string strNodeName = nd.Data.DATANAME;
string strShowName = nd.Data.NODE_NAME;
string strExtend = nd.GeoLevel.HasValue ? nd.GeoLevel.ToString() : string.Empty;
// 目录节点
if (nd.Data.DATANAME != EntityHelp.GetTableDescriptionByName("well_base")) //"井基础")
{
if (nd.Data.NODE_TYPE == 0 || nd.Data.NODE_TYPE == 1)
{
return;
}
}
if (string.IsNullOrWhiteSpace(strNodeName))
{
return;
}
string wellName = "";
string strEnTable = "";
string strChsTable = "";
string strPERMS = nd.Data.PERMS;
if (nd.Parent != null)
{
strChsTable = EntityHelp.GetTableDescriptionByName(strPERMS);
strEnTable = strPERMS;
wellName = strNodeName;
}
else
{
strChsTable = strNodeName;// GetTableName(strNodeName);
strEnTable = this.wellDataTreeList.GetTableName(strNodeName);
}
string strcaption = "";
if (wellName != "")
{
strcaption = strChsTable + "-" + wellName;
}
else
{
strcaption = strChsTable;
}
for (int i = 0; i < this.tabbedView1.Documents.Count; i++)
{
BaseDocument baseDoc = tabbedView1.Documents[i];
if (baseDoc.Control is WellDataTableControl wellEditor)
{
if (wellEditor.Text == strcaption)
{
this.tabbedView1.ActivateDocument(baseDoc.Control);
return;
}
}
}
WellDataTableControl wellDataCtl = new WellDataTableControl();
wellDataCtl.wellName = wellName;
wellDataCtl.tableName = strEnTable;
wellDataCtl.chsTableName = strChsTable;
wellDataCtl.nodeType = nd.Data.NODE_TYPE;
wellDataCtl.Text = strcaption;
var doc = this.tabbedView1.AddDocument(wellDataCtl);
// 标签页上显示短名称
doc.Caption = wellDataCtl.Text;// TabName(wellDataCtl.Text); //ggff1974 显示文档全名称
// 光标移动上去时显示全名
if (doc is Document document)
{
document.Tooltip = wellDataCtl.Text;
}
if (strChsTable == EntityHelp.GetTableDescriptionByName("well_base") && wellName != "")
wellDataCtl.AddWellDataView(false); //基础表单井节点不修改数据
else
wellDataCtl.AddWellDataView(true);
this.ribbonControl1.MergeRibbon(wellDataCtl.ribbonMain, false);
}
}
public void CloseData(string tablename)
{
for (int i = 0; i < this.tabbedView1.Documents.Count; i++)
{
BaseDocument baseDoc = tabbedView1.Documents[i];
if (baseDoc.Control is WellDataTableControl wellEditor)
{
if (wellEditor.tableName == tablename)
{
this.tabbedView1.RemoveDocument(wellEditor);
return;
}
}
}
}
private void barGeoStr_ItemClick(object sender, ItemClickEventArgs e)
{
this.wellDataTreeList.ShowStratSystem();
}
private void GetStrataSystem_ItemClick(object sender, ItemClickEventArgs e)
{
this.wellDataTreeList.RunGetStrataSystem();
}
public void CreateNewWell(string wellname)
{
GeoSigma.UCDraw.WellAndSection.FrmNewWellPole dlgNewWell = new GeoSigma.UCDraw.WellAndSection.FrmNewWellPole() { StartPosition = FormStartPosition.CenterScreen };
dlgNewWell.preSetWellName = wellname;
if(m_IsOpenWorkArea)
{
dlgNewWell.wellNodeNames = WellMapTreeList.GetWellNodeFileNames("单井剖面");
}
if (dlgNewWell.ShowDialog(this) == DialogResult.Cancel)
{
return;
}
splashScreenManager1.ShowWaitForm();
splashScreenManager1.SetWaitFormDescription("正在新建井...");
this.SuspendLayout();
WellPoleUCDrawEdit frmChild = new WellPoleUCDrawEdit(GeoSigmaXY.eViewType.wellpole);
frmChild.DrawerView.ViewControl.mNewWellInfo.ratio = dlgNewWell.mRatio;
frmChild.DrawerView.ViewControl.mNewWellInfo.templateFilePath = dlgNewWell.mTemplatefileNamePath;
frmChild.DrawerView.ViewControl.mNewWellInfo.wellName = dlgNewWell.mwellInfo.WellName;
frmChild.DrawerView.ViewControl.mNewWellInfo.welltop = dlgNewWell.mTop;
frmChild.DrawerView.ViewControl.mNewWellInfo.wellbottom = dlgNewWell.mBottom;
frmChild.DrawerView.ViewControl.mNewWellInfo.tid = dlgNewWell.mwellInfo.id;
frmChild.OnSaveFileToWorkArea += this.SaveFileToWorkArea;
frmChild.OpenNewFile += OnOpenNewFile;
frmChild.PropertyPanel = this.dckPanelProperty; ////属性面板替换
frmChild.ElePropertyPanel = this.dockElePanel;
frmChild.DrawerStatusBar = this.ribbonControl1.StatusBar;
frmChild.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable;
frmChild.ZColorWidth = this.ZColorWidth;
documentIndex++;
string strFile = dlgNewWell.mFileName;//$"新建井_{frmChild.DrawerView.ViewControl.mNewWellInfo.wellName}{documentIndex}";
if (frmChild.CreateNewFile(strFile, GeoSigmaXY.eViewType.wellpole) == false)
{
documentIndex--;
splashScreenManager1.CloseWaitForm();
MessageBox.Show("创建失败");
this.ResumeLayout();
return;
}
frmChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) =>
{
SetRecent(fileName);
});
// 加载子窗体布局
frmChild.Show();
var doc = this.tabbedView1.AddDocument(frmChild);
doc.Caption = frmChild.Text;
//frmChild.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler);
this.ribbonControl1.MergeRibbon(frmChild.ribbonMain);
splashScreenManager1.CloseWaitForm();
this.ResumeLayout();
if (m_IsOpenWorkArea && this.wellDataTreeList != null)
{
this.WellMaptreeList.SaveFileToTreeNode("单井剖面", strFile+".pcg", frmChild);
}
}
private void WellMaptreeList_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.WellMaptreeList.wellMapTreeList_DbClick(sender, e);
}
private void WellMaptreeList_MouseUp(object sender, MouseEventArgs e)
{
this.WellMaptreeList.wellMapTreeList_MouseUp(sender, e);
}
private void WellMaptreeList_MouseDown(object sender, MouseEventArgs e)
{
TreeList maptreelist = sender as TreeList;
TreeListHitInfo hitInfo = maptreelist.CalcHitInfo(e.Location);
if (hitInfo.Node == null)
{
return;
}
if (e.Clicks == 2 && hitInfo.InRow && hitInfo.Node.Tag is NodeDataFile)
{
// 双击查看数据
this.WellMaptreeList.OpenNodeFile(hitInfo.Node);
}
}
public void SaveFileToWorkArea(string fileName, WellPoleUCDrawEdit wellViewDoc)
{
this.WellMaptreeList.SaveFileToWorkArea(fileName, wellViewDoc);
}
private void WellMaptreeList_DragDrop(object sender, DragEventArgs e)
{
this.WellMaptreeList.DragDropNode(sender, e);
}
private void WellMaptreeList_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.None; //e.Effect = DragDropEffects.Copy;
}
}
private void WellMaptreeList_DragOver(object sender, DragEventArgs e)
{
this.WellMaptreeList.DragDropOver(sender, e);
}
private void WellMaptreeList_CalcNodeDragImageIndex(object sender, CalcNodeDragImageIndexEventArgs e)
{
this.WellMaptreeList.MyCalcNodeDragImageIndex(sender, e);
}
private void btnStratumDivision_ItemClick(object sender, ItemClickEventArgs e)
{
if (workAreaDb.Instance.workData.isConn() == false)
return;
var dataDlg = new FrmWellDataEdit() { StartPosition = FormStartPosition.CenterScreen };
List stratums = workAreaDb.Instance.workData.getStratumDivisions();
string dataType = "StratumDivision";
string[] colsName = new string[5];
colsName[0] = "id";
colsName[1] = "name";
colsName[2] = "parentID";
colsName[3] = "classname";
colsName[4] = "orderID";
string[,] datas = new string[stratums.Count, 5];
int count = 0;
foreach (var sdata in stratums)
{
datas[count, 0] = sdata.id.ToString();
datas[count, 1] = sdata.name;
datas[count, 2] = sdata.parentID.ToString();
datas[count, 3] = sdata.classname;
datas[count, 4] = sdata.orderId.ToString();
count++;
}
string[] colsNameCH = new string[0];
GeoSigmaWellPoleXY.mWellTableInfos.GetTableColumnCHNames(dataType, colsName, ref colsNameCH);
dataDlg.SetData(colsName, colsNameCH, datas);
if (dataDlg.ShowDialog(this) == DialogResult.OK)
{
if (dataDlg.m_IsModified == true)
{
DBHelp.NewDb.Deleteable();
List newList = new List();
for (int i = 0; i < dataDlg.mDatas.Rows.Count; i++)
{
DataRow rw = dataDlg.mDatas.Rows[i];
StratumDivision sd = new StratumDivision();
sd.ID = Convert.ToInt32(rw[0].ToString());
sd.name = rw[1].ToString();
sd.parentID = Convert.ToInt32(rw[2].ToString());
sd.classname = rw[3].ToString();
sd.orderId = Convert.ToInt32(rw[4].ToString());
sd.code = "";
newList.Add(sd);
}
DBHelp.NewDb.BulkInsert(newList);
}
}
}
private void btnNewWellSection_ItemClick(object sender, ItemClickEventArgs e)
{
CreateNewWellSectionWithWells("");
}
public void CreateNewWellSectionWithWells(string newWellsName)
{
List wellsName = new List();
if(newWellsName != "")
{
wellsName = newWellsName.Split('|').ToList();
}
GeoSigma.UCDraw.WellAndSection.FrmNewWellSection dlgNew = new GeoSigma.UCDraw.WellAndSection.FrmNewWellSection() { StartPosition = FormStartPosition.CenterScreen };
if(wellsName.Count>0)
{
dlgNew.preSetWells = wellsName.ToList();
}
if (m_IsOpenWorkArea)
{
dlgNew.sectionNodeNames = WellMapTreeList.GetWellNodeFileNames("多井剖面");
}
if (dlgNew.ShowDialog(this) == DialogResult.Cancel)
{
return;
}
splashScreenManager1.ShowWaitForm();
splashScreenManager1.SetWaitFormDescription("正在新建...");
this.SuspendLayout();
createWellSection(dlgNew.retWellInfos, dlgNew.mTemplatefileNamePath, dlgNew.retLayers, dlgNew.m_fileName
, dlgNew.m_SelectLayersName, dlgNew.m_topExtent, dlgNew.m_bottomExtent);
splashScreenManager1.CloseWaitForm();
this.ResumeLayout();
}
public void createWellSection(List wells, string mTemplatefileNamePath, List linkTracks,string newfileName, ListselectLayerNames,double topExtent,double bottomExtent)
{
WellPoleUCDrawEdit frmChild = new WellPoleUCDrawEdit(GeoSigmaXY.eViewType.wellsection);
frmChild.OnSaveFileToWorkArea += this.SaveFileToWorkArea;
frmChild.OpenNewFile += OnOpenNewFile;
frmChild.PropertyPanel = this.dckPanelProperty; ////属性面板替换
frmChild.ElePropertyPanel = this.dockElePanel;
frmChild.DrawerStatusBar = this.ribbonControl1.StatusBar;
frmChild.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable;
frmChild.ZColorWidth = this.ZColorWidth;
documentIndex++;
//string tstr = wells[0].WellName + "+" + wells[wells.Count - 1].WellName;
//string strFile = $"新建连层剖面_{tstr}{documentIndex}";
string strFile = newfileName;
if (frmChild.CreateNewFile(strFile, GeoSigmaXY.eViewType.wellsection) == false)
{
documentIndex--;
splashScreenManager1.CloseWaitForm();
MessageBox.Show("创建失败");
this.ResumeLayout();
return;
}
frmChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) =>
{
SetRecent(fileName);
});
if (frmChild.DrawerView.ViewControl is WellSectionDrawViewer sectionView)
{
sectionView.createWellSection(wells, mTemplatefileNamePath, linkTracks,selectLayerNames, topExtent, bottomExtent);
frmChild.DrawerView.ToolViewAll();
}
frmChild.Show();
var doc = this.tabbedView1.AddDocument(frmChild);
doc.Caption = frmChild.Text;
//frmChild.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler);
this.ribbonControl1.MergeRibbon(frmChild.ribbonMain);
this.ResumeLayout();
if (m_IsOpenWorkArea && this.wellDataTreeList != null)
{
this.WellMaptreeList.SaveFileToTreeNode("多井剖面", strFile + ".pcg", frmChild);
}
}
private void RepairDataBase()
{
SplashHelper.SetCaption("正在处理兼容工区");
//关闭所有连接
int length = DBHelp.DbConns.Count;
for (int i = 0; i < length; i++)
{
DBHelp.DbConns[0].Close();
DBHelp.DbConns[0].Dispose();
DBHelp.DbConns.RemoveAt(0);
}
DBHelp.ResetDB();
//检测数据库文件
string fileName = "sys.db";
string file = IO.CombinPath(Config.ProjectPath, fileName);
string tmp_path = IO.CombinPath(Config.ProjectPath, "temp");
if (!Directory.Exists(tmp_path))
{
Directory.CreateDirectory(tmp_path);
}
string tmp_file = IO.CombinPath(tmp_path, fileName);
if (File.Exists(file))
{
string newFileName = $"{Path.GetFileNameWithoutExtension(fileName)}_{DateTime.Now:yyyyMMddHHmmss}_backup{Path.GetExtension(fileName)}";
try
{
if (File.Exists(tmp_file))
{
string newFilePath = Path.Combine(tmp_path, newFileName);
File.Move(tmp_file, newFilePath);
}
//复制临时数据库
File.Copy(file, tmp_file);
var tables = DBHelp.Db.DbMaintenance.GetTableInfoList(false);
//判断Table是否存在变化,无变化不删除,并且不导入数据
if (tables != null && tables.Count > 0)
{
foreach (var table in tables)
{
try
{
//string deleteSql = $"TRUNCATE TABLE {table.Name}";
//DBHelp.Db.Ado.ExecuteCommand(deleteSql);
string dropSql = $"DROP TABLE {table.Name}";
DBHelp.Db.Ado.ExecuteCommand(dropSql);
}
catch (Exception)
{
}
}
DBHelp.Db.Ado.ExecuteCommand("VACUUM");
}
SplashHelper.SetCaption("正在导入数据");
// 初始化数据库
EntityHelp.InitDatabase();
Type tIdentify = typeof(IIdentifierEntity);
Type tList = typeof(IList);
List must = new List()
{
typeof(InterpretLayer),
typeof(GeologicalStratification),
typeof(WellDocument),
typeof(WorkArea),
};
List list = EntityHelp.AllEntity
.Where(o => tIdentify.IsAssignableFrom(o.Type) || must.Contains(o.Type))
.ToList();
CustomSqlSugarClient localDb = DBHelp.NewDb;
CustomSqlSugarClient dynamicDb = DBHelp.DynamicDb(tmp_file);
MethodInfo miSqlQuery = dynamicDb.Ado.GetType()
.GetMethods()
.Where(o => o.Name == "SqlQuery")
.Where(o => tList.IsAssignableFrom(o.ReturnType))
.Where(o => o.GetParameters()[1].ParameterType == typeof(object)).FirstOrDefault();
MethodInfo miBulkInsert = localDb.GetType().GetMethod("BulkInsert");
string v_cjqx = DBHelp.GetTableName();
string v_yld = DBHelp.GetTableName();
int pageSize = 5000;
Stopwatch stopwatch = Stopwatch.StartNew();
ProgressCallbackThree progress = (name, percent, count) =>
{
if (!this.InvokeRequired && stopwatch.Elapsed.TotalMilliseconds >= 800)
{
stopwatch.Restart();
SplashHelper.SetDescriptionM("正在导入数据", $"总进度:{name},当前{percent}/{count}");
}
};
string title;
int p = 0;
try
{
int count = list.Count;
foreach (EntityInfo item in list)
{
p++;
title = $"{p}/{count}";
//读取一次总数
string sql = $"select * from {item.DbTableName}";
if (item.DbTableName == DBHelp.GetTableName())
{
sql += $" where tablename!='{v_cjqx}' and tablename!='{v_yld}'";
}
int dCount = 0;
try
{
dCount = dynamicDb.Ado.GetInt($"select count(*) from {item.DbTableName}"); //旧数据不一定存在
}
catch (Exception error)
{
Console.WriteLine(error.Message);
}
int pageIndex = 0; // 当前页数
progress(title, 0, dCount);
if (dCount == 0)
{
continue;
}
while (true)
{
string newSql = sql + $" LIMIT {pageSize} OFFSET {pageIndex * pageSize}";
IList listResult = miSqlQuery.MakeGenericMethod(item.Type).Invoke(dynamicDb.Ado, new object[] { newSql, null }) as IList;
Console.WriteLine(listResult.Count + "读取" + newSql);
if (listResult.Count > 0)
{
miBulkInsert.MakeGenericMethod(item.Type).Invoke(localDb, new object[] { listResult, null });
Console.WriteLine("写入" + newSql);
progress(title, pageSize * pageIndex, dCount);
}
else
{
break;
}
pageIndex++; // 前往下一页
}
}
}
catch (Exception ex)
{
//还原数据
MessageBox.Show(ex.Message);
return;
}
finally
{
stopwatch.Stop();
}
//处理分层兼容性
try
{
progress("导入分层数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
//储层兼容性
try
{
progress("导入砂岩数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
////复算-砂岩数据
//try
//{
// progress("导入砂岩数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入复算-砂岩数据异常:{ex.Message}");
//}
////劈分数据
//try
//{
// progress("导入劈分数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入劈分数据异常:{ex.Message}");
//}
////劈分详细数据
//try
//{
// progress("导入劈分详细数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入劈分详细数据异常:{ex.Message}");
//}
//// 油底水顶数据
//try
//{
// progress("导入油底水顶数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入油底水顶数据异常:{ex.Message}");
//}
//// 区块范围数据
//try
//{
// progress("导入区块范围数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入区块范围数据异常:{ex.Message}");
//}
//// 过渡带数据
//try
//{
// progress("导入过渡带数据", 0, 0);
// int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
// int new_count = localDb.Queryable().Count();
// if (new_count > 0 && old_count == 0)
// {
// localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"导入过渡带数据异常:{ex.Message}");
//}
try
{
progress("导入有效数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
try
{
progress("导入孔隙度数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
try
{
progress("导入渗透率数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
try
{
progress("导入饱和度数据", 0, 0);
int old_count = localDb.Queryable().AS(DBHelp.GetTableOriginName()).Count();
int new_count = localDb.Queryable().Count();
if (new_count > 0 && old_count == 0)
{
localDb.Queryable().IntoTable(DBHelp.GetTableOriginName());
}
}
catch (Exception)
{ }
//处理自定义涉及压裂段和测井曲线数据表
try
{
//处理压裂段
progress("导入压裂段数据", 0, 0);
string[] noColNames = { "JH", "XHID", "SYWZ1", "SYWZ2" };
var lst_yld = dynamicDb.Queryable().Where(x => x.TableName == v_yld).ToList();
List fracturParameters = lst_yld.AsParallel().GroupBy(data => new { data.RowGuid, data.RowID })
.Select(group => new HoriWellFracturParameter()
{
RowID = group.Key.RowID,
RowGuid = group.Key.RowGuid,
XHID = group.FirstOrDefault(x => x.ColumnName == "XHID").ColumnValue,
SYWZ1 = Convert.ToDouble(group.FirstOrDefault(x => x.ColumnName == "SYWZ1").ColumnValue),
SYWZ2 = Convert.ToDouble(group.FirstOrDefault(x => x.ColumnName == "SYWZ2").ColumnValue),
JH = group.FirstOrDefault(x => x.ColumnName == "JH").ColumnValue,
ColumnValue = JsonConvert.SerializeObject(group.Where(data => !noColNames.Contains(data.ColumnName)).ToDictionary(data => data.ColumnName, data => data.ColumnValue)),
}).ToList();
DBHelp.NewDb.BulkInsert(fracturParameters);
}
catch (Exception)
{ }
try
{
progress("导入测井曲线数据", 0, 0);
string[] noColNames = { "JH", "DEPTH" };
var lst_cjqx = dynamicDb.Queryable().Where(x => x.TableName == v_cjqx).ToList();
List wellCurves = lst_cjqx.AsParallel().GroupBy(data => new { data.RowGuid, data.RowID })
.Select(group => new WellCurve()
{
RowID = group.Key.RowID,
RowGuid = group.Key.RowGuid,
DEPTH = Convert.ToDouble(group.FirstOrDefault(x => x.ColumnName == "DEPTH").ColumnValue),
JH = group.FirstOrDefault(x => x.ColumnName == "JH").ColumnValue,
ColumnValue = JsonConvert.SerializeObject(group.Where(data => !noColNames.Contains(data.ColumnName)).ToDictionary(data => data.ColumnName, data => data.ColumnValue)),
}).ToList();
DBHelp.NewDb.BulkInsert(wellCurves);
}
catch (Exception)
{ }
// 同步数据库定义
EntityHelp.SyncDatabase();
// 处理井索引
DataHelp.SyncSearchWellName();
foreach (EntityInfo item in list)
{
DataHelp.UpdateSearchWellName(item.Type);
}
//处理工区信息
}
catch (Exception ex)
{
MessageBox.Show("数据迁移合并异常" + ex.Message);
}
}
else
{
MessageBox.Show("数据迁移合并异常,数据库不存在");
}
}
private void UpdateStatus(string msg)
{
if (InvokeRequired) { Invoke(new Action(() => UpdateStatus(msg))); return; }
{
Trace.WriteLine(msg);
}
}
private void OnErrorOccurred(string msg, Exception ex)
{
if (InvokeRequired) { Invoke(new Action(() => OnErrorOccurred(msg,ex))); return; }
UpdateStatus($"错误:{msg}");
}
private void OnDisconnected(string msg)
{
if (InvokeRequired) { Invoke(new Action(() => OnDisconnected(msg))); return; }
UpdateStatus($"断开:{msg}");
}
private void OnConnected()
{
if (InvokeRequired) { Invoke(new Action(OnConnected)); return; }
UpdateStatus("已连接到 A");
}
private void OnPacketReceived(HeartbeatPacket packet)
{
if (InvokeRequired)
{
Invoke(new Action(() => OnPacketReceived(packet)));
return;
}
//labelHeartbeat.Text = $"最后心跳:{DateTime.Now:HH:mm:ss} (Seq:{packet.SequenceId})";
if (!string.IsNullOrEmpty(packet.Payload))
{
//logBox.AppendText($"[A 数据] {packet.Payload}\n");
if (packet.Payload.Length == 0)
Trace.WriteLine("heart msg \r\n");
else
{
Trace.WriteLine(packet.Payload);
if(packet.Payload.StartsWith("newWell=", StringComparison.OrdinalIgnoreCase))
{
string[] strs = packet.Payload.Split('=');
if(strs.Length == 2)
{
CreateNewWell(strs[1]);
}
}
else if(packet.Payload.StartsWith("newWellsSection=", StringComparison.OrdinalIgnoreCase))
{
string[] strs = packet.Payload.Split('=');
if(strs.Length == 2)
{
CreateNewWellSectionWithWells(strs[1]);
}
}
}
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if(m_bSlave)
{
//m_KepServer.Dispose();
//m_KepPipe.Dispose();
if(m_Mmf != null)
m_Mmf.Dispose();
}
base.OnFormClosing(e);
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
//等主窗体已经启动了,再去创建文档,这样创建文档的对话框将做为主窗体的子窗体存在。
if (m_newWellName != "")
{
CreateNewWell(m_newWellName);
}
else if (m_newWellsSection != "")
{
CreateNewWellSectionWithWells(m_newWellsSection);
}
if (m_bSlave)
{
StartConnectKep();
}
}
//private void OnPipeMessageReceived(PipeMessage msg)
//{
// if (this.InvokeRequired) { this.Invoke(new Action(OnPipeMessageReceived), msg); return; }
// //listBoxLog.Items.Add($"[{msg.Timestamp}] {msg.Content}");
// Trace.WriteLine($"[{msg.Timestamp}] {msg.Content}");
// if (msg.Content.StartsWith("newWell=", StringComparison.OrdinalIgnoreCase))
// {
// string[] strs = msg.Content.Split('=');
// if (strs.Length == 2)
// {
// CreateNewWell(strs[1]);
// }
// }
// else if (msg.Content.StartsWith("newWellsSection=", StringComparison.OrdinalIgnoreCase))
// {
// string[] strs = msg.Content.Split('=');
// if (strs.Length == 2)
// {
// CreateNewWellSectionWithWells(strs[1]);
// }
// }
// CommnicationInfo.Caption = "KEP连接正常";// $"[{msg.Timestamp}] {msg.Content}";
//}
//private void OnPipeHeartbeatTimeout()
//{
// // 注意:这个事件可能在非 UI 线程触发
// if (this.InvokeRequired)
// {
// this.Invoke(new Action(OnPipeHeartbeatTimeout));
// return;
// }
// Trace.WriteLine("心跳超时 (服务端无响应");
// CommnicationInfo.Caption = "与KEP断开";
// // 这里 PipeManager 内部已经自动触发重连逻辑了
// // 你可以在这里记录日志或弹窗提示用户
//}
//private void OnPipeStatusChanged(bool connected)
//{
// if (this.InvokeRequired) { this.Invoke(new Action(OnPipeStatusChanged), connected); return; }
// if (connected)
// {
// Trace.WriteLine("已连接 (心跳正常)");
// CommnicationInfo.Caption = "已连接KEP";
// }
// else
// {
// Trace.WriteLine("断开 (重连中...)");
// CommnicationInfo.Caption = "断开)";
// }
//}
private void OnMmfDataReceived(string msg)
{
if (InvokeRequired) { Invoke(new Action(() => OnMmfDataReceived(msg))); return; }
if (msg.StartsWith("newWell=", StringComparison.OrdinalIgnoreCase))
{
string[] strs = msg.Split('=');
if (strs.Length == 2)
{
CreateNewWell(strs[1]);
}
}
else if (msg.StartsWith("newWellsSection=", StringComparison.OrdinalIgnoreCase))
{
string[] strs = msg.Split('=');
if (strs.Length == 2)
{
CreateNewWellSectionWithWells(strs[1]);
}
}
CommnicationInfo.Caption = "KEP连接正常";
}
private void OnMmfConnected()
{
if (InvokeRequired) { Invoke(new Action(OnMmfConnected)); return; }
CommnicationInfo.Caption = "连接KEP";
}
private void OnMmfDisconnected(string str)
{
if (InvokeRequired) { Invoke(new Action(() => OnMmfDisconnected(str))); return; }
CommnicationInfo.Caption = "断开KEP";
}
private void OnMmfError(string msg)
{
if (InvokeRequired) { Invoke(new Action(() => OnMmfError(msg))); return; }
CommnicationInfo.Caption = $"error:{msg}";
}
}
}