using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Framework.AE; using KGIS.Framework.AE.ExtensionMethod; using KGIS.Framework.AE.GPHelper; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.OpenData.Control; using KGIS.Framework.OpenData.Filter; using KGIS.Framework.OpenData.InterFace; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using KGIS.Framework.Utils.Interface; using Kingo.Plugin.General.Helper; using Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Helper; using Kingo.PluginServiceInterface.Model; using KUI.Windows; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading; using System.Windows; using System.Xml; using IRDBHelper = KGIS.Framework.DBOperator.IRDBHelper; namespace Kingo.Plugin.General.ViewDTBJK { /// /// UCJKResultExport.xaml 的交互逻辑 /// public partial class UCJKResultExport : BaseWindow { public IHookHelper hookHelper { get; set; } private ProjectInfo ProjectInfo { get; set; } public string BID { get; set; } public UCJKResultExport(bool taskMultExport = false) { InitializeComponent(); if (taskMultExport) { this.btnCheck.Visibility = Visibility.Collapsed; this.btnExport.Visibility = Visibility.Collapsed; this.btnExportRW.Visibility = Visibility.Visible; this.btnImportCG.Visibility = Visibility.Visible; } else { this.btnCheck.Visibility = Visibility.Visible; this.btnExport.Visibility = Visibility.Visible; this.btnExportRW.Visibility = Visibility.Collapsed; this.btnImportCG.Visibility = Visibility.Collapsed; } } public void BindData() { ProjectInfo = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (ProjectInfo == null) { return; } if (ProjectInfo.ListTaskPackage == null || ProjectInfo.ListTaskPackage.Count == 0) { MessageHelper.Show("请先使用“任务加载”功能加载建库任务包!"); return; } List lstPackages = new List(); foreach (var item in ProjectInfo.ListTaskPackage) { IRDBHelper rdbHelper = null; try { if (!string.IsNullOrWhiteSpace(BID) && !item.BID.Equals(BID)) { continue; } string dbPath = string.Empty; if (!string.IsNullOrWhiteSpace(item.PackageTempPath) && System.IO.File.Exists(item.PackageTempPath)) { dbPath = item.PackageTempPath; } else { LogAPI.Debug(item.PackageName + "任务包未初始化!"); continue; } rdbHelper = RDBFactory.CreateDbHelper($"{dbPath}{(KGIS.Framework.Maps.MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); DataTable dataTable = rdbHelper.ExecuteDatatable("wyrw", $"select '{item.PackageName}' as PackageName,'{item.BID}' AS BID,TBBSM,ZT,(case when FWY==1 then '是' else '否' end) as FWY,(CASE WHEN XBTB==1 then '是' else '否' end) as XBTB,WYBZ,'{dbPath}' as PackagePath,sfsb from wyrw", true); if (dataTable == null || dataTable.Rows.Count <= 0) { continue; } List lst = KGIS.Framework.Utils.Utility.TBToList.ToList(dataTable); if (lst == null || lst.Count <= 0) { continue; } lstPackages.AddRange(lst); } catch (Exception ex) { MessageHelper.ShowError(item.PackageName + "加载失败:" + ex.Message); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } gridPackage.ItemsSource = lstPackages; } private string fileName { get; set; } private USBFlashDiskHelper uSBFlashDiskHelper { get; set; } /// /// 导出的成果包路径 /// private string ResultFileName { get; set; } /// /// 导出的成果签章 /// private string SignFileName { get; set; } private void BtnExport_Click(object sender, RoutedEventArgs e) { IRDBHelper rdbHelperDB = null; try { if (string.IsNullOrWhiteSpace(EncryptionHelper.GetDogKey(1, this.ProjectInfo.CODE))) { MessageHelper.ShowError("请插入加密狗!"); return; } if (ProjectInfo == null) { MessageHelper.ShowError("未检测到打开工程!"); return; } if (this.gridPackage.SelectedItems.Count <= 0) { MessageHelper.ShowTips("请选择需要导出的数据!"); return; } List listExport = new List(); string openPath = System.IO.Path.Combine(ProjectInfo.TaskPath, "已输出"); string mergePath = string.Empty; string signFileName = string.Empty; switch (Platform.Instance.SystemType) { case SystemTypeEnum.DTBJK: #region 导出建库任务包 foreach (ExportEntity item in this.gridPackage.SelectedItems) { if (listExport.FirstOrDefault(x => x.TBBSM.Equals(item.TBBSM)) != null) { MessageHelper.Show(item.TBBSM + "存在多个,单次输出只能选择单个" + item.TBBSM + "任务图斑!"); return; } rdbHelperDB = RDBFactory.CreateDbHelper($"{item.PackagePath}{(KGIS.Framework.Maps.MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); DataTable dt = rdbHelperDB.ExecuteDatatable("DTBDLTBGXGC", $"SELECT * FROM DTBDLTBGXGC T WHERE t.tbbsm='{item.TBBSM}' and (t.EGeometry is NULL or t.EGeometry='')", true); if (dt.Rows.Count > 0) { MessageHelper.Show(item.TBBSM + "数据异常,请重新填写变更范围属性!"); return; } if (item.ZT.Equals("已完成") || item.ZT.Equals("已输出")) { listExport.Add(item); } } if (listExport.Count <= 0) { MessageHelper.ShowTips("请选择状态为“已完成”的外业任务图斑输出!"); return; } System.Windows.Forms.DialogResult dialogResult = MessageHelper.ShowYesNoAndTips($"共选择{listExport.Count}个可输出图斑,是否继续?"); if (dialogResult != System.Windows.Forms.DialogResult.Yes) { return; } if (!System.IO.Directory.Exists(openPath)) { System.IO.Directory.CreateDirectory(openPath); } DataTable dataTable = rdbHelperDB.ExecuteDatatable("result", string.Format("select sjly from wyrw where tbbsm = '{0}'", listExport[0].TBBSM), true); if (dataTable != null && dataTable.Rows.Count > 0 && dataTable.Rows[0]["sjly"].ToString().ToUpper() == "1") { mergePath = DTBDBLoadHelper.MergeDB(listExport, true); } else { mergePath = DTBDBLoadHelper.MergeDB(listExport); } this.ShowLoading("正在导出数据……", 0, 0); //KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("正在导出数据……"); DTBDBLoadHelper.ExportDB(mergePath, openPath); foreach (var item in listExport) { try { rdbHelperDB = RDBFactory.CreateDbHelper($"{item.PackagePath}{(KGIS.Framework.Maps.MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); //已上传状态 bool ZTIsUploaded = DTBDBLoadHelper.JudgeZTIsUploaded(rdbHelperDB, item.TBBSM); DataTable dt = rdbHelperDB.ExecuteDatatable("DTBDLTBGXGC", $"select bsm from DTBDLTBGXGC where bghtbbsm in (select bsm from DTBDLTBGX where tbbsm ='{item.TBBSM}')", true); if (item.FWY != "是" && dt.Rows.Count == 0) { MessageHelper.Show(item.TBBSM + "数据异常,未检测到更新过程层属性!"); return; } if (!ZTIsUploaded) rdbHelperDB.ExecuteNonQueryWithException($"update wyrw set zt='已输出' where tbbsm ='{item.TBBSM}'", CommandType.Text); } catch (Exception ex) { LogAPI.Debug("导出更新外业任务图斑状态为“已输出”异常:" + ex.Message); } finally { if (rdbHelperDB != null) rdbHelperDB.DisConnect(); } } #endregion break; case SystemTypeEnum.WYZS: #region 导出质检审核 foreach (ExportEntity item in this.gridPackage.SelectedItems) { if (listExport.FirstOrDefault(x => x.TBBSM.Equals(item.TBBSM)) != null) { MessageHelper.Show(item.TBBSM + "存在多个,单次输出只能选择单个" + item.TBBSM + "任务图斑!"); return; } if ((item.ZT.Equals("质检错误") || item.ZT.Equals("审核不通过") || (item.ZT.Equals("未审核")) && item.FWY != "是")) { continue; } listExport.Add(item); } if (listExport.Count <= 0) { MessageHelper.ShowTips("请选择需要输出的审核通过的图斑!"); return; } else { if (MessageHelper.ShowYesNoCancelAndTips($"状态为“已完成”或标记“返外业”的仅有{listExport.Count}个图斑,是否继续导出?") != System.Windows.Forms.DialogResult.Yes) { return; } } this.ShowLoading("正在导出数据……", 0, 0); //KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("正在导出数据......"); if (!System.IO.Directory.Exists(openPath)) { System.IO.Directory.CreateDirectory(openPath); } mergePath = DTBDBLoadHelper.MergeDB(listExport); ResultFileName = DTBDBLoadHelper.ExportDB(mergePath, openPath, ref signFileName); this.SignFileName = signFileName; foreach (var item in listExport) { try { rdbHelperDB = RDBFactory.CreateDbHelper($"{item.PackagePath}{(KGIS.Framework.Maps.MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); //已上传状态 bool ZTIsUploaded = DTBDBLoadHelper.JudgeZTIsUploaded(rdbHelperDB, item.TBBSM); if (!ZTIsUploaded) rdbHelperDB.ExecuteNonQueryWithException($"update wyrw set zt='已输出' where tbbsm ='{item.TBBSM}'", CommandType.Text); } catch (Exception ex) { LogAPI.Debug("导出更新外业任务图斑状态为“已输出”异常:" + ex.Message); } finally { if (rdbHelperDB != null) rdbHelperDB.DisConnect(); } } #endregion break; default: break; } this.BindData(); this.CloseLoading(); //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (!string.IsNullOrWhiteSpace(openPath) && System.IO.Directory.Exists(openPath)) { //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (MessageHelper.ShowYesNoAndTips($"导出完成,是否查看结果?") == System.Windows.Forms.DialogResult.Yes) System.Diagnostics.Process.Start("explorer.exe", openPath); } else { //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); MessageHelper.Show($"导出成功!"); } Platform.Instance.SendMsg(new NotifyMsgPackage() { MsgType = "AfterLoadRefreshTreeData" }); this.Close(); } catch (Exception ex) { this.CloseLoading(); //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); MessageHelper.ShowError("成果输出异常:" + ex.Message); LogAPI.Debug("成果输出异常:" + ex.Message); LogAPI.Debug("成果输出异常:" + ex.StackTrace); } finally { this.CloseLoading(); //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); } } private void SyncUSBTask(string path) { try { if (string.IsNullOrWhiteSpace(fileName) || !System.IO.File.Exists(fileName) || !System.IO.Directory.Exists(path)) { return; } string savePath = System.IO.Path.Combine(path, KGIS.Framework.Utils.SysConfigsOprator.GetAppsetingValueByKey("UsbFolderName"), "4-审核任务"); KGIS.Framework.Platform.Helper.ProgressHelper.SetProcessMsg($"正在输出成果到:{savePath}......"); if (!System.IO.Directory.Exists(savePath)) { System.IO.Directory.CreateDirectory(savePath); } System.IO.File.Copy(fileName, System.IO.Path.Combine(savePath, System.IO.Path.GetFileName(fileName))); KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (System.IO.Directory.Exists(savePath)) { if (MessageHelper.ShowYesNoAndTips("导出成功,是否查看结果?") == System.Windows.Forms.DialogResult.Yes) { System.Diagnostics.Process.Start("explorer.exe", savePath); } } else { MessageHelper.Show("导出成功!"); } } catch (Exception ex) { KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); MessageHelper.ShowError("输出成果拷贝移动存储异常:" + ex.Message); } finally { fileName = string.Empty; KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); } } /// /// 导出返回外业Excel /// private int ExportFWYExcel(string wyOuputPath) { try { string state = "返外业"; List listPackage = new List(); foreach (ExportEntity item in this.gridPackage.SelectedItems) { listPackage.Add(item); } if (listPackage.Where(x => x.ZT.Equals(state)).Count() <= 0) { //MessageHelper.ShowTips("当前数据中没有状态为“" + state + "”的任务包,无法导出返外业数据!"); return 0; } foreach (ExportEntity item in listPackage) { if (!item.ZT.Equals(state)) { this.gridPackage.SelectedItems.Remove(item); } } DevExpress.XtraPrinting.XlsxExportOptions options = new DevExpress.XtraPrinting.XlsxExportOptions(); options.SheetName = state; viewPackage.ExportToXlsx(System.IO.Path.Combine(wyOuputPath, "返外业_" + this.gridPackage.SelectedItems.Count + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"), options); foreach (ExportEntity item in this.gridPackage.SelectedItems) { //item.State = "外业中"; UpdateState(item, "外业中"); } return this.gridPackage.SelectedItems.Count; } catch (Exception ex) { throw ex; } } /// /// 更新状态 /// private void UpdateState(ExportEntity exportEntity, string state) { IRDBHelper rdbHelper = null; try { if (exportEntity == null) { return; } rdbHelper = RDBFactory.CreateDbHelper(exportEntity.PackagePath, DatabaseType.SQLite); //已上传状态 bool ZTIsUploaded = DTBDBLoadHelper.JudgeZTIsUploaded(rdbHelper, exportEntity.TBBSM); string excuteSQL = $"UPDATE WYRW SET ZT='{state}',WYBZ='{exportEntity.WYBZ}' WHERE TBBSM='{exportEntity.TBBSM}'"; if (!ZTIsUploaded) excuteSQL = $"UPDATE WYRW SET WYBZ='{exportEntity.WYBZ}' WHERE TBBSM='{exportEntity.TBBSM}'"; rdbHelper.ExecuteNonQueryWithException(excuteSQL, CommandType.Text); } catch (Exception ex) { MessageHelper.ShowError($"标记任务图斑状态为“{state}”异常:" + ex.Message); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } private void BtnRefresh_Click(object sender, RoutedEventArgs e) { try { BindData(); } catch (Exception ex) { MessageHelper.ShowError("刷新失败:" + ex.Message); LogAPI.Debug("刷新失败" + ex); } } /// /// 导出批量任务 /// /// /// private void BtnExportRW_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = null; try { ProjectInfo = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (ProjectInfo == null) { MessageHelper.ShowError("未检测到打开建库工程!"); return; } if (this.gridPackage.SelectedItems.Count <= 0) { MessageHelper.Show("请选择需要导出的建库任务包!"); return; } List listExport = new List(); foreach (ExportEntity item in this.gridPackage.SelectedItems) { /* 修改人:杨元芝 * 修改时间:2023-01-10 * 修改说明:湖南项目要求导出时,“未完成”,“已完成”,“已输出”这三个状态都可以输出GDB文件 */ if (!SysConfigsOprator.GetAppsetingValueByKey("ArearName").Equals("43")) { if (item.ZT.Equals("已输出")) { continue; } } if (listExport.FirstOrDefault(x => x.TBBSM.Equals(item.TBBSM)) != null) { MessageHelper.Show(item.TBBSM + "存在多个,单次输出只能选择单个" + item.TBBSM + "任务图斑!"); return; } listExport.Add(item); } if (listExport.Count <= 0) { MessageHelper.ShowTips("请选择状态非“已输出”的数据!"); return; } System.Windows.Forms.DialogResult dialogResult = MessageHelper.ShowYesNoAndTips($"共选择{listExport.Count}个图斑,是否确认输出?"); if (dialogResult != System.Windows.Forms.DialogResult.Yes) { return; } folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); dialogResult = folderBrowserDialog.ShowDialog(); if (dialogResult != System.Windows.Forms.DialogResult.OK) { return; } this.ShowLoading("正在导出批量任务...", 0, 0); //KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("正在导出批量任务..."); int wkid = ProjectInfo.GetCurentProjectedCoordinate().FactoryCode; if (wkid <= 0) { KGIS.Framework.AE.GaussCalculate.CoordinateReferenceMapping coordinateReferenceMapping = KGIS.Framework.AE.GaussCalculate.CoordinateHelper.ListCoordinateReference.FirstOrDefault(x => (ProjectInfo.ZYJD > x.MinX && ProjectInfo.ZYJD < x.MaxX) || x.Central_Meridian.Equals(ProjectInfo.ZYJD)); if (coordinateReferenceMapping != null) { wkid = coordinateReferenceMapping.WKID; } } string gdbPath = System.IO.Path.Combine(folderBrowserDialog.SelectedPath, "JKRW_" + listExport.Count + "个_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".gdb"); DecompressionDB decompressionDB = new DecompressionDB(); decompressionDB.MultDBToGDB(listExport, gdbPath, wkid, EncryptionHelper.GetDogKey(1, ProjectInfo.CODE)); this.CloseLoading(); if (System.IO.Directory.Exists(gdbPath)) { //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (MessageHelper.ShowYesNoAndTips("导出成功,是否查看结果?") == System.Windows.Forms.DialogResult.Yes) { System.Diagnostics.Process.Start("explorer.exe", folderBrowserDialog.SelectedPath); } } else { //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); MessageHelper.Show("导出成功!"); } this.Close(); } catch (Exception ex) { this.CloseLoading(); MessageHelper.ShowError(ex.Message); } finally { this.CloseLoading(); if (folderBrowserDialog != null) { folderBrowserDialog.Dispose(); } } } private void ImportFjgxData(ISpatialDataObject distObj, System.Windows.Forms.DialogResult dialogResult, Dictionary dicPath) { bool b = false; //是否清空已有附件关系数据 DataTable pTable = new DataTable(); IDataset pDataset = (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open() as IDataset; if (pDataset is ITable) { dialogResult = MessageHelper.ShowYesNoCancelAndTips("导入前是否清空已有附件关系数据?选择“Yes”则清空,选择“No”则追加,选择“Cancel”终止导入"); if (dialogResult == System.Windows.Forms.DialogResult.Cancel) { MessageHelper.Show("终止导入!"); return; } if (dialogResult == System.Windows.Forms.DialogResult.Yes) { b = true; } this.ShowLoading("正在导入附件关系数据...", 0, 0); //KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("正在导入附件关系数据..."); ITable table = pDataset as ITable; for (int j = 0; j < table.Fields.FieldCount; j++) { pTable.Columns.Add(table.Fields.get_Field(j).Name); } ICursor pCursor = table.Search(null, false); IRow pRow = pCursor.NextRow(); while (pRow != null) { DataRow dRow = pTable.NewRow(); string[] strRow = new string[pRow.Fields.FieldCount]; for (int i = 0; i < pRow.Fields.FieldCount; i++) { strRow[i] = pRow.get_Value(i).ToString(); } dRow.ItemArray = strRow; pTable.Rows.Add(dRow); pRow = pCursor.NextRow(); } } if (pTable.Rows.Count > 0) { IRDBHelper rdbHelper = null; foreach (var item in dicPath) { try { rdbHelper = RDBFactory.CreateDbHelper(item.Value, DatabaseType.SQLite); rdbHelper.BeginTransaction(); StringBuilder strSql = new StringBuilder(); if (b) { strSql.Append("DELETE FROM FJGX"); rdbHelper.ExecuteNonQuery(strSql.ToString(), CommandType.Text); strSql.Clear(); } strSql.Append("INSERT INTO FJGX (BSM,WYTBBSM,FJARG,TBBSM) VALUES "); for (var n = 0; n < pTable.Rows.Count; n++) { if (pTable.Rows[n]["BSM"] == null || string.IsNullOrEmpty(pTable.Rows[n]["BSM"].ToString())) { MessageHelper.Show("附件关系 BSM 不能为空。"); return; } if (pTable.Rows[n]["WYTBBSM"] == null || string.IsNullOrEmpty(pTable.Rows[n]["WYTBBSM"].ToString())) { MessageHelper.Show("附件关系 WYTBBSM 不能为空。"); return; } if (pTable.Rows[n]["FJARG"] == null || string.IsNullOrEmpty(pTable.Rows[n]["FJARG"].ToString())) { MessageHelper.Show("附件关系 FJARG 不能为空。"); return; } if (pTable.Rows[n]["TBBSM"] == null || string.IsNullOrEmpty(pTable.Rows[n]["TBBSM"].ToString())) { MessageHelper.Show("附件关系 TBBSM 不能为空。"); return; } strSql.Append(string.Format("('{0}','{1}','{2}','{3}'),", pTable.Rows[n]["BSM"].ToString(), pTable.Rows[n]["WYTBBSM"].ToString(), pTable.Rows[n]["FJARG"].ToString(), pTable.Rows[n]["TBBSM"].ToString())); } int i = rdbHelper.ExecuteNonQuery(strSql.ToString().TrimEnd(','), CommandType.Text); rdbHelper.Commit(); this.CloseLoading(); MessageHelper.Show("附件关系数据导入完成。"); return; } catch (Exception ee) { this.CloseLoading(); MessageHelper.Show("附件关系数据导入失败。"); rdbHelper.Rollback(); throw ee; } finally { this.CloseLoading(); if (rdbHelper != null) { rdbHelper.DisConnect(); } } } } else { this.CloseLoading(); MessageHelper.Show("未检测到附件关系数据。"); return; } this.CloseLoading(); } private void BtnImportCG_Click(object sender, RoutedEventArgs e) { IFeatureClass featureClass = null; IFeatureClassAPI wyrwFeatureClassAPI = null; try { ProjectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (ProjectInfo == null) { MessageHelper.ShowError("未检测到打开建库工程!"); return; } if (ProjectInfo.ListTaskPackage == null || ProjectInfo.ListTaskPackage.Count == 0) { MessageHelper.Show("请先使用“任务加载”功能加载建库任务包!"); return; } if (this.gridPackage.SelectedItems == null || this.gridPackage.SelectedItems.Count <= 0) { MessageHelper.Show("请从列表中勾选需要导入的图斑!"); return; } List lstPackages = new List(); foreach (ExportEntity item in this.gridPackage.SelectedItems) { lstPackages.Add(item); } Dictionary dicPath = new Dictionary(); foreach (ExportEntity item in lstPackages) { if (dicPath.ContainsKey(item.TBBSM)) { continue; } if (!string.IsNullOrWhiteSpace(item.PackagePath) && System.IO.File.Exists(item.PackagePath)) { dicPath.Add(item.TBBSM, item.PackagePath); } else { LogAPI.Debug("未找到任务包:" + item.PackagePath); continue; } } if (dicPath.Count <= 0) { MessageHelper.ShowTips("所选任务包均未找到原始任务包路径!"); return; } OpenDataDialog pDialog = new OpenDataDialog(); ISpatialDataObjectFilter pOFilter; pOFilter = new FilterDatasetsAndLayers(); pDialog.AddFilter(pOFilter, true); pDialog.Title = "选择导入的数据"; pDialog.AllowMultiSelect = false; pDialog.RestoreLocation = true; pDialog.StartLocation = pDialog.FinalLocation; System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) { foreach (ISpatialDataObject distObj in pDialog.Selection) { if (distObj.DatasetType == esriDatasetType.esriDTFeatureClass) { featureClass = (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open() as IFeatureClass; } if (distObj.DatasetType == esriDatasetType.esriDTTable && SysConfigsOprator.GetAppsetingValueByKey("ArearName").Equals("43")) { ImportFjgxData(distObj, dialogResult, dicPath); return; } } } if (featureClass == null) { MessageHelper.Show("请选择矢量成果图层!"); return; } if ((featureClass as FeatureClass).Type == esriDatasetType.esriDTTable) { MessageHelper.Show("选择属性表!"); return; } if (featureClass.ShapeType != esriGeometryType.esriGeometryPolygon) { MessageHelper.Show("请选择面图层!"); return; } if (!(featureClass as FeatureClass).Name.Equals("DTBDLTBGX", StringComparison.CurrentCultureIgnoreCase)) { MessageHelper.Show("请选择单图斑地类图斑更新(DTBDLTBGX)图层!"); return; } dialogResult = MessageHelper.ShowYesNoCancelAndTips("导入前是否清空已有变更范围?选择“Yes”则清空,选择“No”则追加,选择“Cancel”终止导入"); if (dialogResult == System.Windows.Forms.DialogResult.Cancel) { MessageHelper.Show("终止导入!"); return; } bool isConvert = false; if (dialogResult == System.Windows.Forms.DialogResult.Yes) { isConvert = true; } this.ShowLoading("正在导入批量变更范围数据...", 0, 0); int wkid = ProjectInfo.GetCurentProjectedCoordinate().FactoryCode; if (wkid <= 0) { KGIS.Framework.AE.GaussCalculate.CoordinateReferenceMapping coordinateReferenceMapping = KGIS.Framework.AE.GaussCalculate.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 importCount = 0; this.UpdateMsg("正在对选择图层进行质检..."); CheckFeatureClass(featureClass, wkid, ref wyrwFeatureClassAPI); this.UpdateMsg("正在导入批量建库数据..."); string message = string.Empty; bool isShowSuccendForm = true; ImportFeatureClass(dicPath, featureClass, wyrwFeatureClassAPI.FeatureClass, ref importCount, ref message, ref isShowSuccendForm, isConvert); Platform.Instance.SendMsg(new NotifyMsgPackage() { MsgType = "AfterLoadRefreshTreeData" }); this.CloseLoading(); if (string.IsNullOrWhiteSpace(message)) { message = $"成功导入{importCount}个图斑!"; } else { message = $"成功导入{importCount}个图斑,ObjectID={message.TrimEnd(',')}的图斑面积小于50,不予导入!"; } if (isShowSuccendForm) MessageHelper.Show(message); this.Close(); } catch (Exception ex) { LogAPI.Debug(ex); this.CloseLoading(); MessageHelper.ShowError(ex.Message); } finally { this.CloseLoading(); if (wyrwFeatureClassAPI != null) { wyrwFeatureClassAPI.CloseFeatureClass(); } if (featureClass != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass); } } } /// /// 检查图层坐标参考、自相交 /// /// /// private void CheckFeatureClass(IFeatureClass featureClass, int wkid, ref IFeatureClassAPI wyrwFeatureClass) { KGIS.Framework.AE.WorkspaceAPI workspaceAPI = null; ITable table = null; ICursor cursor = null; IRow row = null; try { workspaceAPI = new WorkspaceAPI((featureClass as FeatureClass).Workspace); if (!workspaceAPI.ExistFeatureClass("wyrw")) { throw new Exception("所选图层所在数据库不存在WYRW(外业任务)图层,无法导入!"); } wyrwFeatureClass = workspaceAPI.OpenFeatureClass("wyrw"); if (!GeoDBAPI.SpatialReferenceCompareByWkid(wkid, (featureClass as IGeoDataset).SpatialReference)) { throw new Exception("选择矢量数据坐标参考与当前任务包不一致,无法导入!"); } if (wyrwFeatureClass.FeatureClass.FindField("BID") == -1) { throw new Exception("选择图层不存在BID字段,无法映射导入对应的任务包!"); } if (wyrwFeatureClass.FeatureClass.FindField("TBBSM") == -1) { throw new Exception("选择图层不存在TBBSM字段,无法映射导入对应的任务包!"); } #region 检查变更范围图层内是否存在重复BSM //IQueryFilter queryFilter = new QueryFilterClass() //{ // SubFields = "BSM", // PostfixClause = "ORDER BY BSM ASC" //}; //IFeatureCursor featureCursor = featureClass.Search(queryFilter, false); //IFeature feature = null; //string BSMValue = "-1"; //int BSMIndex = featureClass.FindField("BSM"); //while ((feature = featureCursor.NextFeature()) != null) //{ // if (BSMValue.Trim().Equals(feature.Value[BSMIndex].ToString())) // { // System.Runtime.InteropServices.Marshal.ReleaseComObject(feature); // System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); // throw new Exception("选择图层'DTBDLTBGX'存在重复BSM,请修改后再进行数据导入!"); // } // else // BSMValue = feature.Value[BSMIndex].ToString().Trim(); //} #endregion string OutFeatureClassPath = System.IO.Path.GetPathRoot(SysAppPath.GetTempPath()) + "UsersKingo"; if (System.IO.Directory.Exists(OutFeatureClassPath)) System.IO.Directory.Delete(OutFeatureClassPath, true); System.IO.Directory.CreateDirectory(OutFeatureClassPath); GPParamClass gPParamClass = new KGIS.Framework.AE.GPHelper.GPParamClass() { ListInFeatureClassPath = new List() { System.IO.Path.Combine((featureClass as FeatureClass).Workspace.PathName, (featureClass as FeatureClass).BrowseName) }, OutFeatureClassPath = System.IO.Path.Combine(OutFeatureClassPath, "Check" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 5)), IsGetOutPutFeature = true }; KGIS.Framework.AE.GPHelper.GeoprocessorHelper.CheckGeometry(gPParamClass, ref table); if (table != null) { cursor = table.Search(null, true); int fieldOIDIndex = table.FindField("FEATURE_ID"); int fieldProblemIndex = table.FindField("PROBLEM"); string message = string.Empty; while ((row = cursor.NextRow()) != null) { if (fieldOIDIndex > -1) { message += "OBJECTID=" + row.get_Value(fieldOIDIndex); } if (fieldProblemIndex > -1) { message += row.get_Value(fieldProblemIndex) + ";"; } } if (!string.IsNullOrWhiteSpace(message)) { LogAPI.Debug("图斑存在质检问题:" + message); //throw new Exception("图斑存在质检问题,问题图斑请查看日志信息,修改后重试!"); throw new Exception(message); } } this.UpdateMsg("正在对选择图层进行重叠检查..."); if (OverlapCheck(featureClass, (featureClass as IGeoDataset).SpatialReference as IProjectedCoordinateSystem)) { throw new Exception("所选图层面存在重叠,无法导入!"); } } catch (Exception ex) { throw ex; } finally { if (workspaceAPI != null) { workspaceAPI.CloseWorkspace(); } if (row != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(row); } if (table != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(table); } } } #region 检查图层内面是否重叠 /// /// 图层内面重叠检查 /// /// private bool OverlapCheck(IFeatureClass featureClassDLTB, IProjectedCoordinateSystem spatialReference) { IFeatureDataset featureDataset = null; IWorkspaceAPI workspaceAPI = null; IFeatureClassAPI featureClassAPI = null; try { string tempMdb = GetTempMDB(Guid.NewGuid().ToString().Replace("-", "") + ".mdb"); workspaceAPI = new WorkspaceAPI(tempMdb, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.MDBFile); featureDataset = CreateFeatureDataset(workspaceAPI.CurrentWorkspace, "TDBZSJJ", spatialReference); double tolerance = 0.0001; SetGeoDatasetSpatialReference(workspaceAPI.CurrentWorkspace, spatialReference, tolerance); //设置坐标参考精度XYUnits 为二万分之一 try { workspaceAPI.CurrentWorkspace.ExecuteSQL(string.Format("UPDATE GDB_SpatialRefs SET XYUnits = 20000 ,XYTolerance = {0}", tolerance)); } catch { } string featureClassName = (featureClassDLTB as FeatureClass).BrowseName; KGIS.Framework.AE.GPHelper.GeoprocessorHelper.FeatureClassToFeatureClass(featureClassDLTB, System.IO.Path.Combine(tempMdb, "TDBZSJJ"), featureClassName); featureClassAPI = workspaceAPI.OpenFeatureClass(featureClassName); // 创建拓扑规则 List lstRule = new List(); ITopologyRule topologyRule = new TopologyRuleClass(); topologyRule.TopologyRuleType = esriTopologyRuleType.esriTRTAreaNoOverlap;//面要素间无重叠 topologyRule.Name = "esriTRTAreaNoOverlap";//面要素间无重叠 topologyRule.OriginClassID = featureClassAPI.FeatureClass.FeatureClassID; topologyRule.AllOriginSubtypes = true; topologyRule.OriginSubtype = 1; lstRule.Add(topologyRule); return DataCheckTopologyHelper.CreateTopology(lstRule, workspaceAPI.CurrentWorkspace, new List() { featureClassName }); } catch (Exception ex) { throw ex; } finally { if (featureDataset != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(featureDataset); } if (featureClassAPI != null) { featureClassAPI.CloseFeatureClass(); } if (workspaceAPI != null) { workspaceAPI.CloseWorkspace(); } } } /// /// 获取临时TempMdb /// /// 返回路径字符串,末尾包括斜杠 public static string GetTempMDB(string tempMDBName = "") { string templetePath = SysAppPath.GetCurrentAppPath() + @"工作空间DTBJK\DatabaseTemplate\TempMDB.mdb"; if (!System.IO.File.Exists(templetePath)) { throw new Exception("未找到模板:" + templetePath); } string tempMDBPath = System.IO.Path.Combine(GetTempPath(), string.IsNullOrWhiteSpace(tempMDBName) ? "TempMDB.mdb" : tempMDBName); if (!System.IO.File.Exists(tempMDBPath)) { System.IO.File.Copy(templetePath, tempMDBPath, true); } return tempMDBPath; } /// /// 获取当前程序下的临时temp目录。支持BS和CS的程序,都是获取到app\Temp目录下,如果没有则创建该路径 /// /// 返回路径字符串,末尾包括斜杠 public static string GetTempPath() { string strPath = SysAppPath.GetCurrentAppPath(); strPath += @"Temp\"; if (System.IO.Directory.Exists(strPath) == false) { System.IO.Directory.CreateDirectory(strPath); } return strPath; } /// /// 给指定工作空间中的对象设置空间参考 /// /// 工作空间 /// 空间参考对象 /// 数据库容差 private void SetGeoDatasetSpatialReference(IWorkspace pWS, ISpatialReference pSR, double pTolerance) { try { //double a = 0; //double b = 0; //double c = 0; //double d = 0; //pSR.SetDomain(-100000000, 0, 0, 0); //pSR.GetDomain(out a, out b, out c, out d); if (pSR != null) { //ISpatialReferenceResolution toleranceResolution = pSR as ISpatialReferenceResolution; //toleranceResolution.set_XYResolution(true, 0.00005); ISpatialReferenceTolerance tolerance = pSR as ISpatialReferenceTolerance; if (tolerance != null) { tolerance.XYTolerance = pTolerance; tolerance.ZTolerance = pTolerance; tolerance.MTolerance = pTolerance; } } IEnumDataset pEnumDataset = pWS.Datasets[esriDatasetType.esriDTFeatureDataset]; IDataset ds = null; if (pEnumDataset != null) { while ((ds = pEnumDataset.Next()) != null) { if (ds is IGeoDataset) { if ((ds as IGeoDataset).SpatialReference != pSR) (ds as IGeoDatasetSchemaEdit).AlterSpatialReference(pSR); } } } pEnumDataset = pWS.Datasets[esriDatasetType.esriDTFeatureClass]; if (pEnumDataset == null) { return; } while ((ds = pEnumDataset.Next()) != null) { if (ds is IGeoDataset) { if ((ds as IGeoDataset).SpatialReference != pSR) (ds as IGeoDatasetSchemaEdit).AlterSpatialReference(pSR); } } //设置坐标参考精度XYUnits 为二万分之一 try { pWS.ExecuteSQL(string.Format("UPDATE GDB_SpatialRefs SET XYUnits = 20000 ,XYTolerance = {0}", pTolerance)); //pWS.ExecuteSQL("UPDATE GDB_SpatialRefs SET FalseX=0,FalseY=0,XYUnits=100000,FalseZ=0,ZUnits=0,FalseM=0,MUnits=0,XYTolerance=0.0001,ZTolerance=0,MTolerance=0"); } catch (Exception ex) { throw new Exception("设置坐标参考坐标精度和容差异常:" + ex.Message); } } catch (Exception ex) { throw ex; } } /// /// 创建要素数据集 /// /// /// /// /// private IFeatureDataset CreateFeatureDataset(IWorkspace workspace, string datasetName, IProjectedCoordinateSystem spatialReference) { try { IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; //确定是否支持高精度存储空间 Boolean supportsHighPrecision = false; IWorkspaceProperties workspaceProperties = (IWorkspaceProperties)workspace; IWorkspaceProperty workspaceProperty = workspaceProperties.get_Property (esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup, (int)esriWorkspacePropertyType.esriWorkspacePropSupportsHighPrecisionStorage); if (workspaceProperty.IsSupported) { supportsHighPrecision = Convert.ToBoolean(workspaceProperty.PropertyValue); } //设置投影精度 IControlPrecision2 controlPrecision = (IControlPrecision2)spatialReference; controlPrecision.IsHighPrecision = supportsHighPrecision; //设置容差 ISpatialReferenceResolution spatialRefResolution = (ISpatialReferenceResolution)spatialReference; spatialRefResolution.ConstructFromHorizon(); spatialRefResolution.SetDefaultXYResolution(); ISpatialReferenceTolerance spatialRefTolerance = (ISpatialReferenceTolerance)spatialReference; spatialRefTolerance.SetDefaultXYTolerance(); //创建要素集 IFeatureDataset featureDataset = featureWorkspace.CreateFeatureDataset(datasetName, spatialReference); return featureDataset; } catch (Exception ex) { throw ex; } } #endregion private void ImportFeatureClass(Dictionary dicPath, IFeatureClass featureClass, IFeatureClass wyrwFeatureClass, ref int importCount, ref string message, ref bool isShowSuccendForm, bool isConvert = false) { IFeatureCursor featureCursor = null; IFeature feature = null; try { List lstResult = new List(); List tempDic = GetAllDic(); //“地类编码”“种植属性代码”“图斑细化代码”“耕地类型”“扣除地类编码”中若涉及到小写的英文字母,在导入时直接转为相应大写英文字母 List checkField = new List() { "DLBM", "ZZSXDM", "TBXHDM", "GDLX", "KCDLBM", }; //判断值域 List checkValueField = new List() { "CZCSXM", "QSXZ", "GDPDJB", "GDDB", "DDTCDM" }; Dictionary fieldsValues = new Dictionary(); checkValueField.AddRange(checkField); string fields = "YSDM,TBYBH,TBBH,DLBM,DLMC,QSXZ,QSDWDM,QSDWMC,ZLDWDM,ZLDWMC,KCDLBM,KCXS,KCMJ,TBDLMJ,GDLX,GDPDJB,XZDWKD,TBXHDM,TBXHMC,ZZSXDM,ZZSXMC,GDDB,FRDBS,CZCSXM,SJNF,MSSM,HDMC,BZ,GXSJ,TBLX,DDTCBZ,DDTCMC,SFGX,WBGYY,SFJZ,QKSM,LJLX,DCJL,YWTBSM,SDMSSM,SFXML,XMLX,XMMC,XMBH,DKMC,LC,NF";//删除“JCBH” List lstDBString = new List(); foreach (var item in dicPath) { IRDBHelper rdbHelper = null; IFeature wyrwFeature = null; IFeatureCursor wyrwCursor = null; try { rdbHelper = RDBFactory.CreateDbHelper($"{item.Value}{(MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); if (!lstDBString.Contains(item.Value)) { //Helper.DBLoadHelper.CheckTableExist(rdbHelper); lstDBString.Add(item.Value); } rdbHelper.BeginTransaction(); IQueryFilter queryFilter = new QueryFilterClass() { WhereClause = $"TBBSM='{item.Key}'", }; wyrwCursor = wyrwFeatureClass.Search(queryFilter, true); int tbbsmIndex = wyrwFeatureClass.FindField("TBBSM"); while ((wyrwFeature = wyrwCursor.NextFeature()) != null) { object tbbsm = wyrwFeature.get_Value(tbbsmIndex); if (tbbsm == null || tbbsm is DBNull) { LogAPI.Debug($"ObjectID={wyrwFeature.OID}的外业任务图斑TBBSM为空,无法导入!"); continue; } if (isConvert) { rdbHelper.ExecuteNonQueryWithException($"delete from dtbdltbgx where tbbsm ='{tbbsm}'", CommandType.Text); } ISpatialFilter spatialFilter = new SpatialFilterClass() { Geometry = wyrwFeature.ShapeCopy, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = $"TBBSM='{tbbsm}'" }; string excuteSQL = "insert into dtbdltbgx(BSM, TBBSM, TBMJ, EGeometry, ZXDX, ZXDY, MAXX, MAXY, MINX, MINY, JKRY,{0})values({1})"; //string excuteSQL = "insert into dtbdltbgx(BSM, TBBSM, TBMJ, EGeometry, ZXDX, ZXDY, MAXX, MAXY, MINX, MINY, JKRY)values({0})"; featureCursor = featureClass.Search(spatialFilter, true); while ((feature = featureCursor.NextFeature()) != null) { double jcmj = (feature.ShapeCopy as ESRI.ArcGIS.Geometry.IPolygon).GetEllipseArea(); ESRI.ArcGIS.Geometry.IArea area = feature.ShapeCopy as ESRI.ArcGIS.Geometry.IArea; if (area.Area < 50) { message += feature.OID + ","; continue; } ESRI.ArcGIS.esriSystem.IClone clone = feature.ShapeCopy as ESRI.ArcGIS.esriSystem.IClone; IGeometry cloneGeometry = clone.Clone() as ESRI.ArcGIS.Geometry.IGeometry; string egeometry = DTBDBLoadHelper.ConverIGometryToJson(cloneGeometry); area = cloneGeometry as IArea; IEnvelope envelope = cloneGeometry.Envelope; string bsm = string.Empty; if (feature.get_Value(0) != null && !string.IsNullOrEmpty(feature.get_Value(0).ToString())) { bsm = feature.get_Value(0).ToString(); DataTable dataTable = rdbHelper.ExecuteDatatable("tempDtbdltbgx", $"select bsm from dtbdltbgx where bsm ='{bsm}'", true); if (dataTable != null && dataTable.Rows.Count > 0) { //LogAPI.Debug($"该任务包中已有此标识码{bsm}图斑,不允许导入!"); //MessageHelper.ShowTips($"该任务包中已有此标识码{bsm}图斑,不允许导入!"); //isShowSuccendForm = false; //if (rdbHelper != null) // rdbHelper.Rollback(); //return; bsm = Guid.NewGuid().ToString(); } } else { bsm = Guid.NewGuid().ToString(); } string valueString = $"'{bsm}','{tbbsm}',{jcmj},'{egeometry}',{area.Centroid.X},{area.Centroid.Y},{envelope.XMax},{envelope.YMax},{envelope.XMin},{envelope.YMin},'{ProjectInfo.UserName}'"; fieldsValues = new Dictionary(); foreach (var fieldName in fields.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { int fieldIndex = featureClass.Fields.FindField(fieldName); if (fieldIndex <= -1) { valueString += ",null"; continue; } IField field = feature.Fields.Field[fieldIndex]; object obj = feature.get_Value(fieldIndex); if (!(obj is DBNull) && !string.IsNullOrWhiteSpace(obj.ToString())) { //部分字段小写字母转大写 if (checkField.Contains(fieldName)) { obj = obj.ToString().ToUpper(); } //判断字典值是否在值域范围内 if (checkValueField.Contains(fieldName)) { try { string dicString = fieldName; switch (fieldName) { case "KCDLBM": dicString = "DLBM"; break; case "ZZSXDM": dicString = "ZZSX"; break; case "TBXHDM": dicString = "TBXHLX"; break; case "CZCSXM": dicString = "CZCSX"; break; } DicTypeEnum dicType = (DicTypeEnum)System.Enum.Parse(typeof(DicTypeEnum), dicString); List lstData = GetNoGroupDic(dicType, tempDic); if (lstData != null && lstData.FirstOrDefault(x => x.CODE.Equals(obj)) != null) { switch (fieldName) { case "DLBM": fieldsValues.Add("DLMC", lstData.FirstOrDefault(x => x.CODE.Equals(obj)).NAME); break; case "ZZSXDM": fieldsValues.Add("ZZSXMC", lstData.FirstOrDefault(x => x.CODE.Equals(obj)).NAME); break; case "TBXHDM": fieldsValues.Add("TBXHMC", lstData.FirstOrDefault(x => x.CODE.Equals(obj)).NAME); break; case "DDTCBZ": fieldsValues.Add("DDTCMC", lstData.FirstOrDefault(x => x.CODE.Equals(obj)).NAME); break; } } else { obj = null; } } catch (Exception ex) { LogAPI.Debug(fieldName + "判断是否在值域范围内异常:" + ex.Message); } } } if (fieldsValues.Keys.Contains(fieldName)) { valueString += ",'" + fieldsValues.FirstOrDefault(X => X.Key.Equals(fieldName)).Value + "'"; continue; } switch (field.Type) { case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeSingle: if (obj is DBNull || obj == null || string.IsNullOrWhiteSpace(obj.ToString())) { valueString += ",0"; } else { valueString += "," + int.Parse(obj.ToString()); } break; case esriFieldType.esriFieldTypeDouble: if (obj is DBNull || obj == null || string.IsNullOrWhiteSpace(obj.ToString())) { valueString += ",0"; } else { valueString += "," + double.Parse(obj.ToString()); } break; default: if (obj is DBNull || obj == null || string.IsNullOrWhiteSpace(obj.ToString())) { valueString += ",null"; } else { valueString += ",'" + obj.ToString().Trim() + "'"; } break; } } rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, fields, valueString), CommandType.Text); //rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, valueString), CommandType.Text); //保存更新过程数据 importCount++; } rdbHelper.Commit(); } } catch (Exception ex) { if (rdbHelper != null) rdbHelper.Rollback(); if (rdbHelper != null) rdbHelper.DisConnect(); LogAPI.Debug(ex.ToString()); throw ex; } finally { if (wyrwFeature != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(wyrwFeature); } if (wyrwCursor != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(wyrwCursor); } if (rdbHelper != null) { rdbHelper.DisConnect(); } } } } catch (Exception ex) { LogAPI.Debug(ex.ToString()); throw ex; } finally { if (feature != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(feature); } } } #region 获取工程下的字典 private List GetAllDic() { DataTable dt = null; List result = new List(); IRDBHelper rdbHelper = null; try { if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) != null) { string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath(); if (!string.IsNullOrWhiteSpace(dbPath)) { rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); string strSQL = "select * from Sys_DicDetail"; dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); if (dt != null) { result = KGIS.Framework.Utils.Utility.TBToList.ToList(dt).OrderBy(x => x.CODE).ToList(); result.ForEach(x => x.DisplayName = x.CODE + "-" + x.NAME); } } } } catch (Exception ex) { LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } if (dt != null) { dt.Clear(); dt.Dispose(); } } return result; } private List GetNoGroupDic(DicTypeEnum pDicType, List dicList = null) { List result = null; try { string s = GetDicTypeID(pDicType); if (string.IsNullOrWhiteSpace(s)) return result; List tempDic = dicList; if (dicList == null || dicList.Count == 0) tempDic = GetAllDic(); if (tempDic == null) return result; foreach (DataDicTionary item in tempDic) { if (item.OWNERDIC == s) { if (result == null) { result = new List(); result.Add(new DataDicTionary() { CODE = "", NAME = "", DisplayName = "" }); } result.Add(item); } } } catch (Exception ex) { throw ex; } return result; } private Dictionary DicTypes = new Dictionary(); public string GetDicTypeID(DicTypeEnum pDicType, bool GetNewDic = false) { string result = string.Empty; DataTable dtDicTypeID = null; try { if (dtDicTypeID == null || GetNewDic) { IRDBHelper rdbHelper = null; try { string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath(); if (string.IsNullOrWhiteSpace(dbPath)) { LogAPI.Debug("GetDicDataPath 获取失败"); } rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); string strSQL = "select ID,ALIASNAME from Sys_DicManage ";//WHERE ALIASNAME = '" + pDicType + "'"; dtDicTypeID = rdbHelper.ExecuteDatatable("DicType", strSQL, true); } catch (Exception ex) { LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } if (dtDicTypeID != null && dtDicTypeID.Rows.Count > 0) { foreach (DataRow item in dtDicTypeID.Rows) { if (item[0] != null && !(item[0] is DBNull)) { if (item[1].ToString() == pDicType.ToString()) result = item[0].ToString(); if (DicTypes.ContainsKey(item[0].ToString())) continue; DicTypes.Add(item[0].ToString(), item[1].ToString()); } } } return result; } catch (Exception ex) { throw ex; } finally { if (dtDicTypeID != null) { dtDicTypeID.Clear(); dtDicTypeID.Dispose(); } } return string.Empty; } #endregion /// /// 变更检查 /// /// /// private void BtnCheck_Click(object sender, RoutedEventArgs e) { try { if (ProjectInfo == null) { MessageHelper.ShowError("未检测到打开工程!"); return; } if (this.gridPackage.SelectedItems.Count <= 0) { MessageHelper.ShowTips("请选择需要导出的数据!"); return; } List listExport = new List(); foreach (ExportEntity item in this.gridPackage.SelectedItems) { if (listExport.FirstOrDefault(x => x.TBBSM.Equals(item.TBBSM)) != null) { MessageHelper.Show(item.TBBSM + "存在多个,单次输出只能选择单个" + item.TBBSM + "任务图斑!"); return; } listExport.Add(item); } if (listExport.Count <= 0) { MessageHelper.ShowTips("请选择需要质检的外业任务图斑!"); return; } this.ShowLoading($"正在进行变更检查【0/{listExport.Count}】......", 0, 0); List lstResult = new List(); int i = 1; foreach (var item in listExport) { this.UpdateMsg($"正在进行变更检查【{i++}/{listExport.Count}】......"); List results = DTBDBLoadHelper.DTBCheckPackage(item.TBBSM, item.PackagePath); lstResult.AddRange(results); } Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = lstResult, MsgType = "LoadCheckTBView" }); Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = lstResult, MsgType = "RefreshTreeNodeState" }); this.CloseLoading(); MessageHelper.Show("检查完成,共发现" + (lstResult == null ? 0 : lstResult.Count) + "个错误!"); } catch (Exception ex) { this.CloseLoading(); MessageHelper.ShowError("质检异常:" + ex.Message); MessageHelper.ShowError("质检异常:" + ex.StackTrace); } finally { this.CloseLoading(); } } } }