using KGIS.Framework.Maps;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using Kingo.PluginServiceInterface;
using Kingo.PluginServiceInterface.Helper;
using KUI.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using EncryptionHelper = Kingo.PluginServiceInterface.EncryptionHelper;
namespace Kingo.Plugin.General.View
{
///
/// UCDecompressionDB.xaml 的交互逻辑
///
public partial class UCDecompressionDB : BaseWindow
{
private List ListFiles { get; set; }
public UCDecompressionDB()
{
InitializeComponent();
ListFiles = new List();
}
///
/// 解压
///
///
///
private void BtnDecompression_Click(object sender, RoutedEventArgs e)
{
try
{
if (ListFiles == null || ListFiles.Count <= 0)
{
MessageHelper.ShowTips("请添加需要解压的任务包!");
return;
}
if (gridPaths.SelectedItems == null || gridPaths.SelectedItems.Count <= 0)
{
MessageHelper.Show("请勾选需要解压的数据!");
return;
}
if (string.IsNullOrWhiteSpace(btnSavePath.Text))
{
MessageHelper.ShowTips("请选择保存路径!");
return;
}
ProjectInfo projectInfo = (MapsManager.Instance.CurrProjectInfo as ProjectInfo);
string dogKey = EncryptionHelper.GetDogKey(1, projectInfo.CODE);
if (string.IsNullOrWhiteSpace(dogKey))
{
MessageHelper.ShowTips("请插入加密狗!");
return;
}
this.ShowLoading("开始解压......", 0, 0);
//KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("开始解压......");
if (!System.IO.Directory.Exists(this.btnSavePath.Text))
{
System.IO.Directory.CreateDirectory(this.btnSavePath.Text);
}
//string tempPath = KGIS.Framework.Utils.SysAppPath.GetTempPath();
//try
//{
// System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(tempPath);
// directoryInfo.Delete(true);
// System.IO.Directory.CreateDirectory(tempPath);
//}
//catch
//{
//}
int wkid = -1;
if (projectInfo.GetCurentProjectedCoordinate() != null)
{
wkid = projectInfo.GetCurentProjectedCoordinate().FactoryCode;
}
if (wkid <= 0)
{
GaussCalculateLibrary.CoordinateReferenceMapping coordinateReferenceMapping = GaussCalculateLibrary.CoordinateHelper.ListCoordinateReference.FirstOrDefault(x => (projectInfo.ZYJD > x.MinX && projectInfo.ZYJD < x.MaxX) || x.Central_Meridian.Equals(projectInfo.ZYJD));
if (coordinateReferenceMapping != null)
{
wkid = coordinateReferenceMapping.WKID;
}
}
int i = 0;
foreach (DBFile item in gridPaths.SelectedItems)
{
try
{
i++;
this.UpdateMsg($"进度[{i}/{gridPaths.SelectedItems.Count}]" + System.IO.Path.GetFileName(item.FilePath) + "......");
//KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar($"进度[{i}/{gridPaths.SelectedItems.Count}]" + System.IO.Path.GetFileName(item.FilePath) + "......");
string fileNameWithExtension = System.IO.Path.GetFileName(item.FilePath);
string fileName = fileNameWithExtension.Substring(0, fileNameWithExtension.IndexOf("."));
string savePath = System.IO.Path.Combine(this.btnSavePath.Text, fileName + "_解压");
if (!System.IO.Directory.Exists(savePath))
{
System.IO.Directory.CreateDirectory(savePath);
}
string saveGDB = System.IO.Path.Combine(savePath, fileName + ".gdb");
DecompressionDB decompressionDB = new DecompressionDB();
if (System.IO.Path.GetExtension(item.FilePath).Equals(".ysrw", StringComparison.CurrentCultureIgnoreCase) || System.IO.Path.GetExtension(item.FilePath).Equals(".jkrw", StringComparison.CurrentCultureIgnoreCase))
{
string tempDB = System.IO.Path.Combine(savePath, fileName + ".db");
System.IO.File.Copy(item.FilePath, tempDB, true);
decompressionDB.DBToGDB(tempDB, saveGDB, wkid, dogKey);
//将解压解密后的db包修改后缀,变为预审任务包或建库任务包
string tempTaskPackage = System.IO.Path.Combine(savePath, fileName + System.IO.Path.GetExtension(item.FilePath));
System.IO.File.Copy(tempDB, tempTaskPackage, true);
}
else
{
decompressionDB.BGFWToGDB(item.FilePath, saveGDB, dogKey, wkid);
}
}
catch (Exception ex)
{
this.CloseLoading();
//KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar();
MessageHelper.ShowError(item.FilePath + "解压失败:" + ex.Message);
}
}
this.CloseLoading();
//KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar();
if (MessageHelper.ShowYesNoAndTips("执行完成,是否查看结果?") == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start("explorer.exe", this.btnSavePath.Text);
}
this.Close();
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug("解压异常:" + ex.Message);
this.CloseLoading();
//KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar();
MessageHelper.ShowError("解压异常:" + ex.Message);
}
finally
{
this.CloseLoading();
//KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar();
}
}
///
/// 选择保存路径
///
///
///
private void BtnSavePath_DefaultButtonClick(object sender, RoutedEventArgs e)
{
FolderBrowserDialog folderBrowserDialog = null;
try
{
folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.ShowNewFolderButton = true;
DialogResult dialogResult = folderBrowserDialog.ShowDialog();
if (dialogResult != System.Windows.Forms.DialogResult.OK)
{
this.btnSavePath.Text = string.Empty;
return;
}
this.btnSavePath.Text = folderBrowserDialog.SelectedPath;
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug("选择保存路径异常:" + ex.Message);
KGIS.Framework.Utils.Helper.MessageHelper.ShowError("选择保存路径异常:" + ex.Message);
}
finally
{
if (folderBrowserDialog != null)
{
folderBrowserDialog.Dispose();
}
}
}
///
/// 选择文件夹
///
///
///
private void BtnSelectFolder_Click(object sender, RoutedEventArgs e)
{
FolderBrowserDialog folderBrowserDialog = null;
try
{
folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.ShowNewFolderButton = false;
ProjectInfo projectInfo = (MapsManager.Instance.CurrProjectInfo as ProjectInfo);
if (projectInfo != null && !string.IsNullOrWhiteSpace(projectInfo.TaskPath))
{
folderBrowserDialog.SelectedPath = projectInfo.TaskPath;
}
if (folderBrowserDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
return;
}
System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(folderBrowserDialog.SelectedPath);
System.IO.FileInfo[] files = directoryInfo.GetFiles("*.ysrw", System.IO.SearchOption.AllDirectories);
foreach (var item in files)
{
if (ListFiles.FirstOrDefault(x => x.FilePath.Equals(item.FullName)) != null || System.IO.Path.GetDirectoryName(item.FullName).EndsWith("_work", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
ListFiles.Add(new DBFile() { FilePath = item.FullName });
}
files = directoryInfo.GetFiles("*.jkrw", System.IO.SearchOption.AllDirectories);
foreach (var item in files)
{
if (ListFiles.FirstOrDefault(x => x.FilePath.Equals(item.FullName)) != null || System.IO.Path.GetDirectoryName(item.FullName).EndsWith("_work", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
ListFiles.Add(new DBFile() { FilePath = item.FullName });
}
files = directoryInfo.GetFiles("*.bgfw", System.IO.SearchOption.AllDirectories);
foreach (var item in files)
{
if (ListFiles.FirstOrDefault(x => x.FilePath.Equals(item.FullName)) != null || System.IO.Path.GetDirectoryName(item.FullName).EndsWith("_work", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
ListFiles.Add(new DBFile() { FilePath = item.FullName });
}
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug("选择文件夹异常:" + ex.Message);
KGIS.Framework.Utils.Helper.MessageHelper.ShowError("选择文件夹异常:" + ex.Message);
}
finally
{
gridPaths.ItemsSource = null;
gridPaths.ItemsSource = ListFiles;
if (folderBrowserDialog != null)
{
folderBrowserDialog.Dispose();
}
}
}
///
/// 选择文件
///
///
///
private void BtnSelectFiles_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = null;
try
{
openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择任务包文件";
openFileDialog.Filter = "预处理任务包(*.ysrw)|*.ysrw|单图斑建库任务包(*.jkrw)|*.jkrw|变更范围(*.bgfw)|*.bgfw";
ProjectInfo projectInfo = (MapsManager.Instance.CurrProjectInfo as ProjectInfo);
if (projectInfo != null && !string.IsNullOrWhiteSpace(projectInfo.TaskPath))
{
openFileDialog.InitialDirectory = projectInfo.TaskPath;
}
openFileDialog.RestoreDirectory = true;
openFileDialog.Multiselect = true;
//打开文件对话框选择的文件
if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
return;
}
foreach (var item in openFileDialog.FileNames)
{
if (ListFiles.FirstOrDefault(x => x.FilePath.Equals(item)) != null)
{
continue;
}
ListFiles.Add(new DBFile() { FilePath = item });
}
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug("选择文件异常:" + ex.Message);
KGIS.Framework.Utils.Helper.MessageHelper.ShowError("选择文件异常:" + ex.Message);
}
finally
{
gridPaths.ItemsSource = null;
gridPaths.ItemsSource = ListFiles;
if (openFileDialog != null)
{
openFileDialog.Dispose();
}
}
}
private void BtnClear_Click(object sender, RoutedEventArgs e)
{
try
{
ListFiles.Clear();
gridPaths.ItemsSource = null;
gridPaths.ItemsSource = ListFiles;
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug(ex);
}
}
private void BtnDelete_Click(object sender, RoutedEventArgs e)
{
try
{
if (gridPaths.SelectedItems == null || gridPaths.SelectedItems.Count <= 0)
{
return;
}
foreach (var item in gridPaths.SelectedItems)
{
if (ListFiles.Contains(item))
{
ListFiles.Remove(item as DBFile);
}
}
gridPaths.ItemsSource = null;
gridPaths.ItemsSource = ListFiles;
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug(ex);
}
}
}
public class DBFile
{
public string FilePath { get; set; }
}
}