You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
12 KiB
362 lines
12 KiB
using ESRI.ArcGIS.Controls; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.ThreadManager; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using Kingo.PluginServiceInterface.Model; |
|
using Microsoft.Win32; |
|
using System; |
|
using System.IO; |
|
using System.Text; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Documents; |
|
|
|
namespace Kingo.Plugin.YJJK.View |
|
{ |
|
/// <summary> |
|
/// 执行数据导出用户控件 |
|
/// </summary> |
|
public partial class UCExecuteExport : UserControl, IWizardFrameworkExeState |
|
{ |
|
#region 私有成员 |
|
/// <summary> |
|
/// 数据导出 |
|
/// </summary> |
|
//private IDataOutput m_pDataPickUp; |
|
//private ThreadProgressCoreClass m_pThreadEventCoreClass = null; |
|
#endregion |
|
private IHookHelper _hookHelper { get; set; } |
|
#region 构造函数 |
|
public UCExecuteExport(IHookHelper hookHelper) |
|
{ |
|
InitializeComponent(); |
|
_hookHelper = hookHelper; |
|
} |
|
#endregion |
|
|
|
#region 实现向导接口属性 |
|
/// <summary> |
|
/// 向导步骤间的参数传递 |
|
/// </summary> |
|
public object Parameter |
|
{ |
|
get; |
|
set; |
|
} |
|
|
|
private string m_strDescription = ""; |
|
/// <summary> |
|
/// 描述 |
|
/// </summary> |
|
public string Description |
|
{ |
|
get { return m_strDescription; } |
|
set { m_strDescription = value; } |
|
} |
|
|
|
private string m_strCaption = "数据导出"; |
|
/// <summary> |
|
/// 标题 |
|
/// </summary> |
|
public string Caption |
|
{ |
|
get { return m_strCaption; } |
|
set { m_strCaption = value; } |
|
} |
|
|
|
private bool m_bIsFinalSuccess = true; |
|
/// <summary> |
|
/// 标识是否是最后一步 |
|
/// </summary> |
|
public bool IsFinalSuccess |
|
{ |
|
get { return m_bIsFinalSuccess; } |
|
set { m_bIsFinalSuccess = value; } |
|
} |
|
|
|
public bool IsSkip { get; set; } |
|
public Action<object> ExeStateCallBacK { get; set; } |
|
#endregion |
|
|
|
public void ExeGP(object obj) |
|
{ |
|
IDGParameter parm = obj as IDGParameter; |
|
if (parm.ExeDLTB) |
|
{ |
|
ProcesHelper.Instance.ExeGPForProces2(obj as IDGParameter); |
|
} |
|
parm.ExeDLTB = false; |
|
ProcesHelper.Instance.ExeGPForProces(obj as IDGParameter); |
|
} |
|
public void ExeGPComplat(object obj) |
|
{ |
|
this.Dispatcher.Invoke(() => |
|
{ |
|
IDGParameter parm = obj as IDGParameter; |
|
if (parm.ExtParam != null && parm.ExtParam.Count > 0) |
|
{ |
|
TextRange text = new TextRange(txtProcessLog.Document.ContentStart, txtProcessLog.Document.ContentEnd); |
|
if (!text.Text.Contains("失败")) |
|
{ |
|
foreach (var item in parm.ExtParam) |
|
{ |
|
if (item.IsSkip) continue; |
|
if (item.Execute()) |
|
{ |
|
txtProcessLog.AppendText($"\r\n {item.Caption} 执行完成。"); |
|
pgbProcess.Value++; |
|
} |
|
else |
|
{ |
|
txtProcessLog.AppendText($"\r\n {item.Caption} 执行失败。"); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
if (pgbProcess.Value == pgbProcess.Maximum) |
|
{ |
|
ExeStateCallBacK?.Invoke(ExeState.Success); |
|
MessageHelper.ShowTips($"执行完成。"); |
|
} |
|
else |
|
{ |
|
ExeStateCallBacK?.Invoke(ExeState.Fail); |
|
MessageHelper.ShowTips($"执行失败。"); |
|
} |
|
}); |
|
} |
|
#region 实现向导接口方法 |
|
/// <summary> |
|
/// 执行函数 |
|
/// </summary> |
|
/// <returns>成功返回true,失败返回false</returns> |
|
public bool Execute() |
|
{ |
|
try |
|
{ |
|
ExeStateCallBacK?.Invoke(ExeState.Start); |
|
txtProcessLog.Document.Blocks.Clear(); |
|
txtProcessLog.AppendText("开始执行:" + DateTime.Now.ToString()); |
|
if (Parameter is IDGParameter) |
|
{ |
|
IDGParameter parm = Parameter as IDGParameter; |
|
var count = 0; |
|
if (parm.ExeDLTB) |
|
count++; |
|
if (parm.ExeCJDCQ || parm.ExeXZQ || parm.ExeGDDB) |
|
count++; |
|
if (parm.ExeCZC) |
|
count++; |
|
if (parm.ExeZLHZ) |
|
count++; |
|
if (count > 0) |
|
{ |
|
pgbProcess.Maximum = parm.ExtParam.Count + count; |
|
ProcesHelper.Instance.ProgressHandle = (o) => |
|
{ |
|
this.Dispatcher.Invoke(() => |
|
{ |
|
//System.Windows.Forms.Application.DoEvents(); |
|
if (o.ToString().Contains("地类图斑数据提取完成")) |
|
{ |
|
//(_hookHelper.Hook as IMapControlDefault).ActiveView.Refresh(); |
|
MapsManager.Instance.MapService.getAxMapControl().ActiveView.Refresh(); |
|
} |
|
if (o.ToString().Contains("提取完成")) |
|
pgbProcess.Value++; |
|
if (o.ToString().Contains("Log:") || o.ToString().Contains("Err:") || o.ToString().Contains("Msg:")) |
|
txtProcessLog.AppendText($"\r\n {o.ToString()}"); |
|
}); |
|
}; |
|
ThreadManager.Instance.QueueUserWorkItem(new System.Threading.WaitCallback(ExeGP), parm, new System.Threading.WaitCallback(ExeGPComplat)); |
|
} |
|
else |
|
{ |
|
pgbProcess.Maximum = parm.ExtParam.Count; |
|
if (parm.ExtParam.Count > 0) |
|
ExeGPComplat(parm); |
|
else |
|
{ |
|
MessageHelper.ShowTips($"执行失败,未选择执行步骤。"); |
|
return false; |
|
} |
|
} |
|
} |
|
//DataOutputClass pPickUp = m_pDataPickUp as DataOutputClass; |
|
//if (pPickUp != null) |
|
//{ |
|
// pPickUp.ObsImportDataLogEntity = new System.Collections.ObjectModel.ObservableCollection<ImportDataLogEntity>(); |
|
//} |
|
//if (m_pThreadEventCoreClass == null) |
|
//{ |
|
// m_pThreadEventCoreClass = new ThreadProgressCoreClass(m_pDataPickUp as IThreadProgress, pgbProcess, txtProcessLog); |
|
// string strLog = "DataOutputLog_" + DateTime.Now.ToString("yyyyMMddHHmmss"); |
|
// m_pThreadEventCoreClass.OutputTempLogName = strLog; |
|
//} |
|
//try |
|
//{ |
|
// IAoInitialize aoinitialize = new AoInitializeClass(); |
|
// aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB); |
|
// m_pDataPickUp.OutputData(); |
|
return true; |
|
//} |
|
//catch (Exception ex) |
|
//{ |
|
// LogAPI.Debug(ex); |
|
// m_pThreadEventCoreClass.m_threadProgress_ProgressEnd("数据导出失败!" ); |
|
// return false; |
|
//} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
ExeStateCallBacK?.Invoke(ExeState.Fail); |
|
throw; |
|
} |
|
} |
|
/// <summary> |
|
/// 初始化函数 |
|
/// </summary> |
|
public void Intializing() |
|
{ |
|
try |
|
{ |
|
//m_pDataPickUp = (IDataOutput)Parameter; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 验证函数,验证参数输入参数是否正确 |
|
/// </summary> |
|
/// <returns></returns> |
|
public bool Validating() |
|
{ |
|
return true; |
|
} |
|
|
|
/// <summary> |
|
/// 上一步 |
|
/// </summary> |
|
public void Back() |
|
{ |
|
|
|
} |
|
#endregion |
|
|
|
#region 控件事件 |
|
private void bbiSave_Click(object sender, RoutedEventArgs e) |
|
{ |
|
CSaveLogToFile c = new CSaveLogToFile(); |
|
c.SaveToTxt(txtProcessLog); |
|
} |
|
|
|
private void bbiClear_Click(object sender, RoutedEventArgs e) |
|
{ |
|
txtProcessLog.Document.Blocks.Clear(); |
|
} |
|
private void UserControl_Unloaded(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
//CGeometryOperator pCop = new CGeometryOperator(); |
|
//pCop.DeleteAllElement(m_pDataPickUp.MapControl.ActiveView); |
|
} |
|
catch |
|
{ } |
|
} |
|
|
|
public void Intializing(bool IsSkip = false) |
|
{ |
|
//throw new NotImplementedException(); |
|
} |
|
#endregion |
|
|
|
private void txtProcessLog_TextChanged(object sender, TextChangedEventArgs e) |
|
{ |
|
//this.txtProcessLog.AppendText(""); |
|
//TextRange a = new TextRange(txtProcessLog.Document.ContentStart, txtProcessLog.Document.ContentEnd); |
|
} |
|
} |
|
|
|
|
|
public class CSaveLogToFile |
|
{ |
|
/// <summary> |
|
/// 保存成文本文件 |
|
/// </summary> |
|
/// <param name="txtLog">日志文本框</param> |
|
public void SaveToTxt(RichTextBox txtLog) |
|
{ |
|
TextRange a = new TextRange(txtLog.Document.ContentStart, txtLog.Document.ContentEnd); |
|
string strLog = a.Text; |
|
if (strLog.Length == 0) |
|
{ |
|
MessageHelper.Show("文本框中的内容为空!"); |
|
return; |
|
} |
|
|
|
try |
|
{ |
|
SaveFileDialog saveFileDialog = new SaveFileDialog(); |
|
saveFileDialog.Filter = "文本文件(*.txt)|*.txt"; |
|
if (saveFileDialog.ShowDialog() == true) |
|
{ |
|
//使用“另存为”对话框中输入的文件名实例化StreamWriter对象 |
|
StreamWriter sw = new StreamWriter(saveFileDialog.FileName, true, Encoding.GetEncoding("GB2312")); |
|
//向创建的文件中写入内容 |
|
sw.WriteLine(strLog); |
|
//关闭当前文件写入流 |
|
sw.Close(); |
|
MessageHelper.Show("保存成功!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("保存失败!"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 保存成文本文件 |
|
/// </summary> |
|
/// <param name="txtLog">日志文本框</param> |
|
public void SaveToTxt(TextBox txtLog) |
|
{ |
|
string strLog = txtLog.Text; |
|
if (strLog.Length == 0) |
|
{ |
|
MessageHelper.Show("文本框中的内容为空!"); |
|
return; |
|
} |
|
|
|
try |
|
{ |
|
SaveFileDialog saveFileDialog = new SaveFileDialog(); |
|
saveFileDialog.Filter = "文本文件(*.txt)|*.txt"; |
|
if (saveFileDialog.ShowDialog() == true) |
|
{ |
|
//使用“另存为”对话框中输入的文件名实例化StreamWriter对象 |
|
StreamWriter sw = new StreamWriter(saveFileDialog.FileName, true, Encoding.GetEncoding("GB2312")); |
|
//向创建的文件中写入内容 |
|
sw.WriteLine(strLog); |
|
//关闭当前文件写入流 |
|
sw.Close(); |
|
MessageHelper.Show("保存成功!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("保存失败!"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
} |
|
}
|
|
|