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.
401 lines
18 KiB
401 lines
18 KiB
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Dialog; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Utils.Utility; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Data; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Windows; |
|
using System.Xml; |
|
using UIShell.OSGi; |
|
|
|
namespace Kingo.Plugin.MapView.Views.AppMenuView |
|
{ |
|
/// <summary> |
|
/// 设置工作目录功能 的交互逻辑 |
|
/// </summary> |
|
public partial class UCSetWorkCatalog : BaseWindow |
|
{ |
|
IWorkCatalog _workCatalog = null; |
|
List<XZQCodeData> XZQCodeList = new List<XZQCodeData>(); |
|
//行政区代码集合 |
|
List<DataDicTionary> XZQCoderesult = new List<DataDicTionary>(); |
|
List<WorkCatalogPaths> _WorkCatalogPaths = new List<WorkCatalogPaths>(); |
|
/// <summary> |
|
/// 授权加密-区划代码 |
|
/// </summary> |
|
private static string getCodes = ""; |
|
public UCSetWorkCatalog() |
|
{ |
|
try |
|
{ |
|
InitializeComponent(); |
|
//行政区集合赋值 |
|
Box_XZQCode.ItemsSource = GetXZQDic(); |
|
_workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IWorkCatalog>(); |
|
if (_workCatalog != null && _workCatalog.SaveWorkSapcePath != null && !string.IsNullOrWhiteSpace(_workCatalog.SaveWorkSapcePath)) |
|
{ |
|
string[] dirColl = Directory.GetDirectories(_workCatalog.SaveWorkSapcePath); |
|
foreach (var dir in dirColl) |
|
{ |
|
string folderName = Path.GetFileName(dir); |
|
var XZQTemp = XZQCoderesult.FirstOrDefault<DataDicTionary>(x => x.NAME == folderName.Split('(')[0]); |
|
if (XZQTemp == null) continue; |
|
string itemType = string.Format("{0}({1})", folderName.Split('(')[0], XZQTemp.CODE);//作为工作目录次级目录文件夹 |
|
if (XZQCodeList.FirstOrDefault(f => f.Descriction == itemType && f.ItemType == itemType) != null) continue; |
|
XZQCodeList.Add(new XZQCodeData() { IsChecked = true, IsEnabled = false, Descriction = itemType, ItemType = itemType }); |
|
} |
|
lbTBList.ItemsSource = null; |
|
lbTBList.ItemsSource = XZQCodeList; |
|
} |
|
LoadXMLAttritue(_workCatalog.SaveWorkSapcePath, SysAppPath.GetRecentOpenProjectRecordConfigPath()); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("打开工作目录页面初始化时发生异常,异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 区划代码集(330110-余杭区) |
|
/// </summary> |
|
/// <returns></returns> |
|
public List<DataDicTionary> GetXZQDic() |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; |
|
if (File.Exists(systemPath)) |
|
{ |
|
string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); |
|
connStr = string.Format(connStr, systemPath); |
|
rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); |
|
string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ LIKE '" + getCodes + "%'"; |
|
DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); |
|
if (dt != null) |
|
{ |
|
XZQCoderesult = TBToList.ToList<DataDicTionary>(dt); |
|
foreach (var item in XZQCoderesult) |
|
{ |
|
item.DisplayName = item.CODE + "-" + item.NAME; |
|
if (dt.Rows.Count == 1) Box_XZQCode.DisplayMemberPath = item.DisplayName; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
return XZQCoderesult; |
|
} |
|
|
|
/// <summary> |
|
/// 行政区代码数据实体 |
|
/// </summary> |
|
public class XZQCodeData : INotifyPropertyChanged |
|
{ |
|
private bool _IsChecked; |
|
public bool IsChecked |
|
{ |
|
get { return _IsChecked; } |
|
set |
|
{ |
|
_IsChecked = value; |
|
RaisePropertyChanged("IsChecked"); |
|
} |
|
} |
|
public string ItemType { get; set; } |
|
public string Descriction { get; set; } |
|
public bool IsEnabled { get; set; } |
|
|
|
public event PropertyChangedEventHandler PropertyChanged; |
|
protected void RaisePropertyChanged(string propertyName) |
|
{ |
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 创建工作目录 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnExtract_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
_workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IWorkCatalog>(); |
|
if (_workCatalog != null) |
|
{ |
|
if (!_workCatalog.IsOpenView) _workCatalog.Open(); |
|
if (string.IsNullOrEmpty(btnSetWorkPath.Text.ToString())) return; |
|
//不存在该目录,则创建 |
|
if (!Directory.Exists(btnSetWorkPath.Text.ToString())) Directory.CreateDirectory(btnSetWorkPath.Text.ToString()); |
|
//设置工作目录模板 |
|
foreach (var xzqcode in XZQCodeList) |
|
{ |
|
if (xzqcode.IsChecked) |
|
{ |
|
DirectoryCopy(btnSetWorkPath.Text.ToString(), xzqcode.ItemType); |
|
} |
|
} |
|
//同一当前目录-加载/添加目录不需要加载工程 |
|
if (_workCatalog.SaveWorkSapcePath == btnSetWorkPath.Text.ToString()) |
|
_workCatalog.IsLoadProject = false; |
|
else |
|
_workCatalog.IsLoadProject = true; |
|
_workCatalog.SetWorksapce(btnSetWorkPath.Text.ToString()); |
|
this.Close(); |
|
ProjectInfo ProInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; |
|
if (ProInfo != null) |
|
{ |
|
if (ProInfo.ProjType == EnumProjType.BHTBTQ && Platform.Instance.SystemType != SystemTypeEnum.BGFWCG |
|
|| ProInfo.ProjType != EnumProjType.BHTBTQ && Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) |
|
{ |
|
ClearData(); |
|
LogAPI.Debug("工程类型与当前软件类型不匹配,将会导致功能不可用,请正确打开工程类型!"); |
|
KGIS.Framework.Utils.Helper.MessageHelper.ShowError("当前工程类型与当前软件类型不匹配,将会导致一些功能不可正常使用,请重新正确打开工程类型!"); |
|
return; |
|
} |
|
} |
|
|
|
if (ProInfo != null && ProInfo.ProjType == EnumProjType.BHTBTQ && Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) |
|
{ |
|
//添加作业区标注 |
|
PluginServiceInterface.Helper.MarkLabelLayerForZYQ.MarkLayer(); |
|
IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService<IUcZYQMagrHelper>(); |
|
if (ucZYQMagrHelper != null) |
|
{ |
|
ucZYQMagrHelper.UpdataData(); |
|
} |
|
|
|
IUcMulitMapControlHelper ucMulitMapControlHelper = BundleRuntime.Instance.GetFirstOrDefaultService<IUcMulitMapControlHelper>(); |
|
if (ucMulitMapControlHelper != null) |
|
{ |
|
ucMulitMapControlHelper.ClearData(); |
|
ucMulitMapControlHelper.SetLayer(); |
|
ucMulitMapControlHelper.MarkLabelLayer(); |
|
} |
|
} |
|
|
|
|
|
} |
|
else |
|
{ |
|
MessageHelper.Show("打开工作目录失败!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show("打开工作目录失败,请查看系统日志!"); |
|
LogAPI.Debug("打开工作目录时发生异常,异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
private void ClearData() |
|
{ |
|
MapsManager.Instance.MapService.getAxMapControl().ClearLayers(); |
|
if (Platform.Instance.SystemType == SystemTypeEnum.BGFWCG) |
|
{ |
|
IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService<IUcZYQMagrHelper>(); |
|
if (ucZYQMagrHelper != null) |
|
{ |
|
ucZYQMagrHelper.ClearData(); |
|
} |
|
IUcMulitMapControlHelper ucMulitMapControlHelper = BundleRuntime.Instance.GetFirstOrDefaultService<IUcMulitMapControlHelper>(); |
|
if (ucMulitMapControlHelper != null) |
|
{ |
|
ucMulitMapControlHelper.ClearData(); |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 取消 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnConfirm_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.Close(); |
|
} |
|
|
|
/// <summary> |
|
/// 选择工作目录 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnSelectedWorkCatalog_Click(object sender, RoutedEventArgs e) |
|
{ |
|
FolderBrowserDialog m_Dialog = new FolderBrowserDialog(); |
|
System.Windows.Forms.DialogResult result = m_Dialog.ShowDialog(); |
|
if (result == System.Windows.Forms.DialogResult.Cancel) |
|
{ |
|
btnSetWorkPath.SelectedIndex = 0; |
|
return; |
|
} |
|
_WorkCatalogPaths.Add(new WorkCatalogPaths { WorkCatalogPath = m_Dialog.SelectedPath.Trim(), UpdateTime = DateTime.Now, CODE = m_Dialog.SelectedPath.Trim(), DisplayName = m_Dialog.SelectedPath.Trim() }); |
|
btnSetWorkPath.ItemsSource = null; |
|
|
|
_WorkCatalogPaths = _WorkCatalogPaths.OrderByDescending(x => x.UpdateTime).ToList(); |
|
//string currPath = _workCatalog.SaveWorkSapcePath; |
|
btnSetWorkPath.ItemsSource = _WorkCatalogPaths; |
|
btnSetWorkPath.SelectedItem = _WorkCatalogPaths[0]; |
|
} |
|
|
|
/// <summary> |
|
/// 工作目录文件夹复制 |
|
/// </summary> |
|
/// <param name="xzqCode_Name">存放工程文件名</param> |
|
/// <param name="targetDirPath">被创建的目录</param> |
|
public void DirectoryCopy(string targetDirPath, string xzqCode_Name) |
|
{ |
|
try |
|
{ |
|
string targetDir = targetDirPath + "\\" + xzqCode_Name; |
|
//创建工程目录文件 |
|
if (!Directory.Exists(targetDir)) Directory.CreateDirectory(targetDir); |
|
if (NCSJ.IsChecked == true && !Directory.Exists(targetDir + "\\" + NCSJ.Content.ToString())) |
|
Directory.CreateDirectory(targetDir + "\\" + NCSJ.Content.ToString()); |
|
if (GCML.IsChecked == true && !Directory.Exists(targetDir + "\\" + GCML.Content.ToString())) |
|
Directory.CreateDirectory(targetDir + "\\" + GCML.Content.ToString()); |
|
if (CKSJ.IsChecked == true && !Directory.Exists(targetDir + "\\" + CKSJ.Content.ToString())) |
|
Directory.CreateDirectory(targetDir + "\\" + CKSJ.Content.ToString()); |
|
if (JZCG.IsChecked == true && !Directory.Exists(targetDir + "\\" + JZCG.Content.ToString())) |
|
Directory.CreateDirectory(targetDir + "\\" + JZCG.Content.ToString()); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("创建工程目录页面中,文件夹复制时失败,异常原因: " + ex.Message + " ; "); |
|
throw; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 添加行政区 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void AddXZQCode_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(Box_XZQCode.SelectedValue.ToTrim())) return; |
|
SelectXZQCodeData.ItemsSource = null; |
|
string dispalyName = XZQCoderesult.FirstOrDefault(x => x.CODE == Box_XZQCode.SelectedValue.ToTrim()).NAME; |
|
string itemType = string.Format("{0}({1})", dispalyName, Box_XZQCode.SelectedValue.ToTrim());//作为工作目录次级目录文件夹 |
|
XZQCodeList.Add(new XZQCodeData() { IsChecked = true, Descriction = itemType, ItemType = itemType }); |
|
lbTBList.ItemsSource = null; |
|
lbTBList.ItemsSource = XZQCodeList; |
|
//SelectXZQCodeData.ItemsSource = XZQCodeList; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("添加行政区发生错误:" + ex.Message); |
|
throw; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 加载工作目录集合 |
|
/// </summary> |
|
/// <param name="workcatalog"></param> |
|
/// <param name="sXmlPath"></param> |
|
private void LoadXMLAttritue(string workcatalog, string sXmlPath) |
|
{ |
|
XmlDocument doc = new XmlDocument(); |
|
XmlElement orderElement = null; |
|
XmlNodeList orderChildr = null; |
|
try |
|
{ |
|
//if (string.IsNullOrWhiteSpace(workcatalog) == true || string.IsNullOrWhiteSpace(workcatalog) == true) return; |
|
if (File.Exists(sXmlPath) == false) return; |
|
doc.Load(sXmlPath); |
|
orderElement = doc.DocumentElement;// 获取根节点 |
|
if (orderElement == null) return; |
|
if (orderElement.ChildNodes == null || orderElement.ChildNodes.Count <= 0) return; |
|
orderChildr = orderElement.ChildNodes; |
|
if (orderChildr == null || orderChildr.Count <= 0) return; |
|
_WorkCatalogPaths = new List<WorkCatalogPaths>(); |
|
foreach (XmlNode item in orderChildr) |
|
{ |
|
string path = item.Attributes["ProjectPath"].Value; |
|
if (string.IsNullOrWhiteSpace(path) || !Directory.Exists(path)) continue; |
|
_WorkCatalogPaths.Add(new WorkCatalogPaths { WorkCatalogPath = item.Attributes["ProjectPath"].Value, UpdateTime = Convert.ToDateTime(item.Attributes["LastOpenTime"].Value), CODE = item.Attributes["ProjectPath"].Value, DisplayName = item.Attributes["ProjectPath"].Value }); |
|
} |
|
if (_WorkCatalogPaths.Count > 0) |
|
{ |
|
_WorkCatalogPaths = _WorkCatalogPaths.OrderByDescending(x => x.UpdateTime).ToList(); |
|
//string currPath = _workCatalog.SaveWorkSapcePath; |
|
btnSetWorkPath.ItemsSource = _WorkCatalogPaths; |
|
btnSetWorkPath.SelectedItem = _WorkCatalogPaths[0]; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
return; |
|
} |
|
finally |
|
{ |
|
if (doc != null) doc = null; |
|
if (orderElement != null) orderElement = null; |
|
if (orderChildr != null && orderChildr.Count > 0) orderChildr = null; |
|
if (string.IsNullOrWhiteSpace(sXmlPath) == false) sXmlPath = ""; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 自动筛选实体类 |
|
/// </summary> |
|
public class WorkCatalogPaths |
|
{ |
|
public override string ToString() { return WorkCatalogPath; } |
|
/// <summary> |
|
/// 工作目录路径 |
|
/// </summary> |
|
public string WorkCatalogPath { get; set; } |
|
public string CODE { get; set; } |
|
public string DisplayName { get; set; } |
|
public DateTime UpdateTime { get; set; } |
|
} |
|
|
|
private void btnSetWorkPath_SelectedIndexChanged(object sender, RoutedEventArgs e) |
|
{ |
|
var item = btnSetWorkPath.SelectedItem; |
|
if (item is WorkCatalogPaths) |
|
{ |
|
string[] dirColl = Directory.GetDirectories((item as WorkCatalogPaths).WorkCatalogPath); |
|
XZQCodeList.Clear(); |
|
foreach (var dir in dirColl) |
|
{ |
|
string folderName = Path.GetFileName(dir); |
|
var XZQTemp = XZQCoderesult.FirstOrDefault<DataDicTionary>(x => x.NAME == folderName.Split('(')[0] && x.CODE == folderName.Split('(')[1].TrimEnd(')')); |
|
if (XZQTemp == null) continue; |
|
string itemType = string.Format("{0}({1})", folderName.Split('(')[0], XZQTemp.CODE);//作为工作目录次级目录文件夹 |
|
if (XZQCodeList.FirstOrDefault(f => f.Descriction == itemType && f.ItemType == itemType) != null) continue; |
|
XZQCodeList.Add(new XZQCodeData() { IsChecked = true, IsEnabled = false, Descriction = itemType, ItemType = itemType }); |
|
} |
|
lbTBList.ItemsSource = null; |
|
lbTBList.ItemsSource = XZQCodeList; |
|
} |
|
|
|
} |
|
} |
|
}
|
|
|