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; } } }