年度变更建库软件5.0版本
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.

2133 lines
107 KiB

6 months ago
using ESRI.ArcGIS.Geodatabase;
using ExcelDataReader;
using KGIS.Framework.AE;
using KGIS.Framework.AE.Enum;
using KGIS.Framework.DBOperator;
using KGIS.Framework.Maps;
using KGIS.Framework.Platform;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.ExtensionMethod;
using KGIS.Framework.Utils.Helper;
using KGIS.Framework.Utils.Model;
using KGIS.Framework.VCT.Entity;
using KGIS.Framework.VCT.Enums;
using KGIS.Framework.VCT.Helper;
using kingo.Plugin.BGResultManager.Helper;
using kingo.Plugin.BGResultManager.Interface;
using kingo.Plugin.BGResultManager.Utility.GDB;
using kingo.Plugin.BGResultManager.Utility.MDB;
using kingo.Plugin.BGResultManager.Utility.Metadata;
using Kingo.Plugin.BGResultManager.Utility;
using Kingo.PluginServiceInterface;
using KUI.Windows;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows;
using System.Xml;
namespace Kingo.Plugin.BGResultManager.ViewModel
{
public class ExportBGViewModel : ReactiveObject, IScreen
{
private string _OutDir;
public string OutDir
{
get { return _OutDir; }
set { this.RaiseAndSetIfChanged(ref _OutDir, value); }
}
private string _NCDataDir;
public string NCDataDir
{
get { return _NCDataDir; }
set
{
this.RaiseAndSetIfChanged(ref _NCDataDir, value);
}
}
private bool _hasPdt;
public bool HasPDT
{
get { return _hasPdt; }
set { this.RaiseAndSetIfChanged(ref _hasPdt, value); }
}
private bool _IsBL;//是否补充0至19位
public bool IsBL
{
get { return _IsBL; }
set { this.RaiseAndSetIfChanged(ref _IsBL, value); }
}
private System.Windows.Visibility _PDT_Visibility;
public System.Windows.Visibility PDT_Visibility
{
get { return _PDT_Visibility; }
set { this.RaiseAndSetIfChanged(ref _PDT_Visibility, value); }
}
private System.Windows.Visibility _BL_Visibility;
public System.Windows.Visibility BL_Visibility
{
get { return _BL_Visibility; }
set { this.RaiseAndSetIfChanged(ref _BL_Visibility, value); }
}
private System.Windows.Visibility _NCData_Visibility;
public System.Windows.Visibility NCData_Visibility
{
get { return _NCData_Visibility; }
set { this.RaiseAndSetIfChanged(ref _NCData_Visibility, value); }
}
private decimal _BGYear = Convert.ToDecimal(DateTime.Now.Year - 1 < 2019 ? 2019 : DateTime.Now.Month >= 10 ? DateTime.Now.Year : DateTime.Now.Year - 1);
public decimal BGYear
{
get { return _BGYear; }
set
{
this.RaiseAndSetIfChanged(ref _BGYear, value);
//Items = GetResultsCatalog();
//Items = GetResultsCatalogtemp(true);
if (Items != null)
{
new Thread((ThreadStart)delegate () { Items = GetResultsCatalogtemp(true, Items); }).Start();
}
}
}
private List<ResultsCatalog> _Items;
public List<ResultsCatalog> Items
{
get { return _Items; }
set
{ this.RaiseAndSetIfChanged(ref _Items, value); }
}
/// <summary>
/// 输出成果根目录
/// </summary>
public string OutDataRootDir { get; set; }
public RoutingState Router
{
get;
}
public ReactiveCommand<object> ExportClick { get; protected set; }
public ReactiveCommand<object> DeleteTemplateClick { get; protected set; }
public ReactiveCommand<object> CreateTemplateClick { get; protected set; }
public ReactiveCommand<object> SelectedTemplateClick { get; protected set; }
private List<string> _TemplateList;
public List<string> TemplateList
{
get { return _TemplateList; }
set { this.RaiseAndSetIfChanged(ref _TemplateList, value); }
}
private int _CurrentTemplateIndex;
public int CurrentTemplateIndex
{
get { return _CurrentTemplateIndex; }
set
{
this.RaiseAndSetIfChanged(ref _CurrentTemplateIndex, value);
ReadTemplateLayerInfo();
}
}
private List<BGVCTEntity> _LayerSource;
public List<BGVCTEntity> LayerSource
{
get { return _LayerSource; }
set { this.RaiseAndSetIfChanged(ref _LayerSource, value); }
}
private List<BGVCTEntity> _IncrementalUpdatingSource;
public List<BGVCTEntity> IncrementalUpdatingSource
{
get { return _IncrementalUpdatingSource; }
set { this.RaiseAndSetIfChanged(ref _IncrementalUpdatingSource, value); }
}
//private Dictionary<string, string> dicFeatureCode = null;
private BGVCTEntity GXVCTEntity = null;
private BGVCTEntity GXGCVCTEntity = null;
private Visibility _SelectTemplate;
public Visibility SelectTemplate
{
get { return _SelectTemplate; }
set { this.RaiseAndSetIfChanged(ref _SelectTemplate, value); }
}
private Visibility _IsResultsExport;
public Visibility IsResultsExport
{
get { return _IsResultsExport; }
set { this.RaiseAndSetIfChanged(ref _IsResultsExport, value); }
}
private string sBGCGDir = string.Empty;
public ExportBGViewModel()
{
HasPDT = false;
IsBL = false;
PDT_Visibility = Visibility.Collapsed;
BL_Visibility = Visibility.Collapsed;
IsResultsExport = Visibility.Collapsed;
SelectTemplate = Visibility.Visible;
NCData_Visibility = Visibility.Visible;
OutDir = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).BGResultPath;
sBGCGDir = Path.Combine((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir, "变更成果模板");
Items = GetResultsCatalogtemp(true);
Init();
#region 一键成果导出
ExportClick = ReactiveCommand.Create();
ExportClick.Subscribe(x =>
{
try
{
if (Items == null)
return;
#region 创建成果导出路径
if (!string.IsNullOrEmpty(OutDir))
{
string path = Path.Combine(OutDir, DateTime.Now.ToString("yyyyMMddHHmmssfff"));
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
OutDir = path;
}
#endregion
if (string.IsNullOrWhiteSpace(OutDir))
{
MessageHelper.ShowWarning("请选择输出目录!");
return;
}
if (string.IsNullOrWhiteSpace(NCDataDir))
{
//MessageHelper.ShowWarning("未选择建库成果路径,将取消汇总报表导出");
if (MessageHelper.ShowYesNoAndTips("年初报表数据未选择,将不会生成报表数据,是否继续执行?") != System.Windows.Forms.DialogResult.Yes)
{
return;
}
}
this.ShowLoading("正在导出...", 0, 0);
ExcelToDataTable();
OutDataRootDir = Items[0].Name;
CreateCatalogDir(Items);
if (Items[0] != null && Items[0].SubCatalog != null)
{
ResultsCatalog resultsCatalog = Items[0].SubCatalog.FirstOrDefault(a => a.Name == "基础数据包");
if (resultsCatalog == null)
MessageHelper.ShowWarning("未找到基础数据包!");
else
CopyBasePackage(resultsCatalog.Path);
}
this.CloseLoading();
MessageHelper.ShowTips("导出完成!");
}
catch (Exception ex)
{
this.CloseLoading();
MessageHelper.ShowError("导出失败:" + ex.Message);
LogAPI.Debug(ex);
}
});
#endregion
//#region 删除模板
//DeleteTemplateClick = ReactiveCommand.Create();
//DeleteTemplateClick.Subscribe(x =>
//{
// try
// {
// if (CurrentTemplateIndex != -1)
// {
// string templatePath = Path.Combine(SysAppPath.GetCurrentAppPath(), "工作空间", "模板", "变更成果模板");
// string vctPath_GX = Path.Combine(templatePath, TemplateList[CurrentTemplateIndex]);
// if (MessageHelper.ShowYesNoAndTips("是否删除当前模板?") == System.Windows.Forms.DialogResult.Yes)
// {
// if (Directory.Exists(vctPath_GX))
// {
// Directory.Delete(vctPath_GX, true);
// List<string> Lists = TemplateList.Copy();
// Lists.RemoveAt(CurrentTemplateIndex);
// TemplateList = Lists;
// CurrentTemplateIndex = TemplateList.Count - 1;
// }
// }
// }
// }
// catch (Exception ex)
// {
// MessageHelper.ShowError("删除模板失败!");
// LogAPI.Debug("删除变更成果模板时发生异常!异常信息如下:");
// LogAPI.Debug(ex);
// LogAPI.Debug("异常信息结束。");
// }
//});
//#endregion
#region 新建模板(页面上已注销此功能)
CreateTemplateClick = ReactiveCommand.Create();
CreateTemplateClick.Subscribe(x =>
{
View.FrmCreateVCTTemplate main = new View.FrmCreateVCTTemplate();
main.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
main.Closed += Main_Closed;
main.Show();
});
#endregion
#region 选择变更成果数据模板
SelectedTemplateClick = ReactiveCommand.Create();
SelectedTemplateClick.Subscribe(x =>
{
//if (CurrentTemplateIndex == -1)
//{
// MessageHelper.ShowTips("请选择或创建成果数据模板!");
// return;
//}
Create_Click();
IsResultsExport = Visibility.Visible;
SelectTemplate = Visibility.Collapsed;
});
#endregion
}
#region MyRegion
private void CopyBasePackage(string basePackagePath)
{
try
{
if (string.IsNullOrEmpty(NCDataDir) || string.IsNullOrEmpty(OutDir)) return;
//CopyFolder(NCDataDir, Path.Combine(OutDir, basePackagePath, "汇总表格"));
CopyFolder(NCDataDir, Path.Combine(OutDir, basePackagePath));
}
catch (Exception ex)
{
//LogAPI.Debug("复制汇总表格 异常:" + ex);
LogAPI.Debug("复制基础数据包 异常:" + ex);
}
}
private void CopyFolder(string sourceFolderPath, string destinationFolderPath)
{
if (!Directory.Exists(destinationFolderPath))
{
Directory.CreateDirectory(destinationFolderPath);
}
string[] files = Directory.GetFiles(sourceFolderPath);
foreach (string file in files)
{
string destinationFilePath = Path.Combine(destinationFolderPath, Path.GetFileName(file));
File.Copy(file, destinationFilePath, true);
}
string[] subFolders = Directory.GetDirectories(sourceFolderPath);
foreach (string subFolder in subFolders)
{
string destinationSubFolderPath = Path.Combine(destinationFolderPath, Path.GetFileName(subFolder));
CopyFolder(subFolder, destinationSubFolderPath);
}
}
private void Create_Click()
{
IWorkspaceAPI s_WsAPI = null;
try
{
string currentGDBPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ZLDatabase;
s_WsAPI = new WorkspaceAPI(currentGDBPath, WorkspaceTypeEnum.GDBFile);
List<BGVCTEntity> TableMappingList = new List<BGVCTEntity>();
string sDir = Path.Combine(sBGCGDir, "成果导出");
List<BGVCTEntity> list = GXVCTEntity.SubEntities.FindAll(x => x.IsChecked == true && (x.FeatureClassName.EndsWith("GX") || x.FeatureClassName == "GXZJ"));
list.AddRange((LayerSource as List<BGVCTEntity>)[0].SubEntities.FindAll(x => x.IsChecked == true));
if (list.Count > 0)
{
string sPath = Path.Combine(sDir, "VCTTemplate3ForBG.VCT");
FileStream fs = new FileStream(sPath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("GB18030"));
GenerateVCTHead(sw);
foreach (BGVCTEntity item in list)
{
TableMappingList.Add(item);
}
GenerateVCTFeatureCode(sw, list, s_WsAPI);
sw.WriteLine("TableStructureBegin");
foreach (BGVCTEntity entity in list)
{
IFeatureClassAPI fcSourceAPI = s_WsAPI.OpenFeatureClass(entity.FeatureClassName);
IFeatureClass fcSource = fcSourceAPI.FeatureClass;
IFields fields = fcSource.Fields;
int FieldCount = 0;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "Element" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
if (entity.FeatureClassName == "DLTBGX" && (field.Name == "XZQTZLX" || field.Name == "ONLYZLBG"))
{
continue;
}
FieldCount++;
}
sw.WriteLine(string.Format("{0},{1}", entity.FeatureClassName, FieldCount));
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "Element" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
if (entity.FeatureClassName == "DLTBGX" && (field.Name == "XZQTZLX" || field.Name == "ONLYZLBG"))
{
continue;
}
string strFieldType = GetVCTFieldType(field);
if (strFieldType == "Float")
{
sw.WriteLine(string.Format("{0},{1},{2},2", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
else
{
sw.WriteLine(string.Format("{0},{1},{2}", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
}
sw.WriteLine("0");
}
sw.Write("TableStructureEnd");
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
}
#region 一键成果导出的VCT中不包含PDTGX图层及其相关表结构信息 2020-7-29 沈超
list = GXVCTEntity.SubEntities.FindAll(x => x.IsChecked == true && x.FeatureClassName == "PDTGX");
if (list.Count > 0)//创建没有PDTGCX的VCT
{
list = GXVCTEntity.SubEntities.FindAll(x => x.IsChecked == true && (x.FeatureClassName.EndsWith("GX") || x.FeatureClassName == "GXZJ") && x.FeatureClassName != "PDTGX");
if (list.Count > 0)
{
string sPath = System.IO.Path.Combine(sDir, "VCTTemplate3ForBG_WithOutPDXGX.VCT");
FileStream fs = new FileStream(sPath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("GB18030"));
GenerateVCTHead(sw);
GenerateVCTFeatureCode(sw, list, s_WsAPI);
sw.WriteLine("TableStructureBegin");
foreach (BGVCTEntity entity in list)
{
IFeatureClassAPI fcSourceAPI = s_WsAPI.OpenFeatureClass(entity.FeatureClassName);
IFeatureClass fcSource = fcSourceAPI.FeatureClass;
IFields fields = fcSource.Fields;
int FieldCount = 0;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (entity.FeatureClassName == "DLTBGX" && field.Name.ToUpper() == "XHMARK")
{
continue;
}
else
{
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "Element" ||
field.Name.ToUpper() == "SHAPE" || field.Name.ToUpper() == "SHAPE_LENGTH" || field.Name.ToUpper() == "SHAPE_AREA" ||
field.Name == "BGTBOID")
{
continue;
}
FieldCount++;
}
}
sw.WriteLine(string.Format("{0},{1}", entity.FeatureClassName, FieldCount));
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (entity.FeatureClassName == "DLTBGX" && field.Name.ToUpper() == "XHMARK")
{
continue;
}
else
{
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "Element" ||
field.Name.ToUpper() == "SHAPE" || field.Name.ToUpper() == "SHAPE_LENGTH" || field.Name.ToUpper() == "SHAPE_AREA" ||
field.Name == "BGTBOID")
{
continue;
}
string strFieldType = GetVCTFieldType(field);
if (strFieldType == "Float")
{
sw.WriteLine(string.Format("{0},{1},{2},2", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
else
{
sw.WriteLine(string.Format("{0},{1},{2}", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
}
}
sw.WriteLine("0");
}
sw.Write("TableStructureEnd");
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
}
}
#endregion
list = GXVCTEntity.SubEntities.FindAll(x => x.IsChecked == true && x.FeatureClassName.EndsWith("GXGC"));
if (list.Count > 0)
{
string sPath = Path.Combine(sDir, "VCTTemplate3ForBG2.VCT");
FileStream fs = new FileStream(sPath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("GB18030"));
GenerateVCTHead(sw);
foreach (BGVCTEntity item in list)
{
TableMappingList.Add(item);
}
GenerateVCTFeatureCode(sw, list, s_WsAPI);
sw.WriteLine("TableStructureBegin");
foreach (BGVCTEntity entity in list)
{
IFeatureClassAPI fcSourceAPI = s_WsAPI.OpenFeatureClass(entity.FeatureClassName);
IFeatureClass fcSource = fcSourceAPI.FeatureClass;
IFields fields = fcSource.Fields;
int FieldCount = 0;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
if (entity.FeatureClassName == "DLTBGXGC" && (field.Name == "JCZT" || field.Name == "JCJG" || field.Name == "ONLYZLBG" || field.Name == "XMMC" || field.Name == "XMBH" || field.Name == "DKMC"))
{
continue;
}
FieldCount++;
}
sw.WriteLine(string.Format("{0},{1}", entity.FeatureClassName, FieldCount));
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
if (entity.FeatureClassName == "DLTBGXGC" && (field.Name == "JCZT" || field.Name == "JCJG" || field.Name == "ONLYZLBG" || field.Name == "XMMC" || field.Name == "XMBH" || field.Name == "DKMC"))
{
continue;
}
string strFieldType = GetVCTFieldType(field);
if (strFieldType == "Float")
{
sw.WriteLine(string.Format("{0},{1},{2},2", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
else
{
sw.WriteLine(string.Format("{0},{1},{2}", field.Name, strFieldType, field.Length <= 255 ? field.Length : 255));
}
}
sw.WriteLine("0");
}
sw.Write("TableStructureEnd");
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
}
string TMConfigPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "Configs", "BGCheckTableMappingConfig.xml");
CreateBGCheckTableMappingConfig(TMConfigPath, TableMappingList);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
MessageHelper.ShowError(ex.Message);
}
finally
{
if (s_WsAPI != null)
{
s_WsAPI.CloseWorkspace();
}
}
}
private void GenerateVCTHead(StreamWriter sw)
{
sw.WriteLine("HeadBegin");
sw.WriteLine("DataMark: LANDUSE-VCT");
sw.WriteLine("Version: 3.0");
sw.WriteLine("CoordinateSystemType:P");
sw.WriteLine("Dim:2");
sw.WriteLine("XAxisDirection:E");
sw.WriteLine("YAxisDirection:N");
sw.WriteLine("XYUnit:M");
sw.WriteLine("ZUnit:M");
sw.WriteLine("Spheroid:CGCS2000,6378137.0,298.257222101");
sw.WriteLine("PrimeMeridian:Greenwich");
sw.WriteLine("Projection:高斯-克吕格投影");
sw.WriteLine("Parameters:0,0,0,0,0,0");
sw.WriteLine("VerticalDatum:1985国家高程基准");
sw.WriteLine("TemporalReferenceSystem:北京时间");
sw.WriteLine("ExtentMin:0,0");
sw.WriteLine("ExtentMax:0,0");
sw.WriteLine("MapScale:5000");
sw.WriteLine("Offset:0,0");
sw.WriteLine("Date:201801");
sw.WriteLine("Separator:,");
sw.WriteLine("HeadEnd");
sw.WriteLine();
}
private void GenerateVCTFeatureCode(StreamWriter sw, List<BGVCTEntity> list, IWorkspaceAPI s_WsAPI)
{
sw.WriteLine("FeatureCodeBegin");
foreach (BGVCTEntity item in list)
{
string FCode = "";
if (dicFeatureCode.ContainsKey(item.FeatureClassName))
{
FCode = dicFeatureCode[item.FeatureClassName];
}
string strGeoType = GetVCTGeometryType(s_WsAPI.OpenFeatureClass(item.FeatureClassName).FeatureClass);
sw.WriteLine(string.Format("{0},{1},{2},{3}", FCode, item.Name, strGeoType, item.FeatureClassName));
}
sw.WriteLine("FeatureCodeEnd");
sw.WriteLine();
}
private string GetVCTGeometryType(IFeatureClass featureClass)
{
string strGType = "";
switch (featureClass.ShapeType)
{
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryNull:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint:
strGType = "Point";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine:
strGType = "Line";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryCircularArc:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEllipticArc:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBezier3Curve:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPath:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRing:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
strGType = "Polygon";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEnvelope:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryAny:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBag:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleStrip:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleFan:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRay:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometrySphere:
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangles:
break;
default:
break;
}
return strGType;
}
private void CreateBGCheckTableMappingConfig(string configFilePath, List<BGVCTEntity> list)
{
IWorkspaceAPI s_WsAPI = null;
try
{
//创建XmlDocument对象
XmlDocument xmlDoc = new XmlDocument();
//XML的声明<?xml version="1.0" encoding="UTF-8"?>
XmlDeclaration xmlSM = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
//追加xmldecl位置
xmlDoc.AppendChild(xmlSM);
//创建CheckTableMapping节点
XmlElement MainElement = xmlDoc.CreateElement("", "CheckTableMapping", "");
//追加CheckTableMapping的根节点位置
xmlDoc.AppendChild(MainElement);
string currentGDBPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ZLDatabase;
s_WsAPI = new WorkspaceAPI(currentGDBPath, WorkspaceTypeEnum.GDBFile);
foreach (BGVCTEntity entity in list)
{
IFeatureClassAPI fcSourceAPI = s_WsAPI.OpenFeatureClass(entity.FeatureClassName);
IFeatureClass fcSource = fcSourceAPI.FeatureClass;
FeatureClass fc = fcSource as FeatureClass;
XmlElement TableElement = xmlDoc.CreateElement("", "Table", "");
TableElement.SetAttribute("TableName", fc.Name);
TableElement.SetAttribute("Name", fcSource.AliasName);
TableElement.SetAttribute("Type", GetShapeTypeName(fcSource));
TableElement.SetAttribute("IsNecessary", "True");
TableElement.SetAttribute("YSDM", GetYSDMByLayerName(fc.Name));
IFields fields = fcSource.Fields;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "JCTBBSM" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
XmlElement FieldElement = xmlDoc.CreateElement("", "Column", "");
FieldElement.SetAttribute("Name", field.Name);
FieldElement.SetAttribute("AliasName", field.AliasName);
FieldElement.SetAttribute("AllowDBNull", field.IsNullable ? "True" : "False");
FieldElement.SetAttribute("DataType", GetFieldTypeName(field.Type));
if (field.Type == esriFieldType.esriFieldTypeString)
{
FieldElement.SetAttribute("MaxLength", field.Length.ToString());
}
if (field.Type == esriFieldType.esriFieldTypeSingle || field.Type == esriFieldType.esriFieldTypeDouble)
{
FieldElement.SetAttribute("Precision", field.Precision.ToString());
}
TableElement.AppendChild(FieldElement);
}
MainElement.AppendChild(TableElement);
}
xmlDoc.Save(configFilePath);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
finally
{
if (s_WsAPI != null)
{
s_WsAPI.CloseWorkspace();
}
}
}
public string GetShapeTypeName(IFeatureClass fc)
{
string strType = "";
switch (fc.ShapeType)
{
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
strType = "点";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine:
strType = "线";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
strType = "面";
break;
default:
if (fc.FeatureType == esriFeatureType.esriFTAnnotation)
{
strType = "注记";
}
else
{
strType = "其他";
}
break;
}
return strType;
}
private string GetYSDMByLayerName(string LayerName)
{
if (LayerName.EndsWith("GX"))
{
LayerName = LayerName.Replace("GX", "");
}
else if (LayerName.EndsWith("GXGC"))
{
LayerName = LayerName.Replace("GXGC", "");
}
KeyValuePair<string, string> kvp = YSDM.FirstOrDefault(x => x.Value == LayerName);
return kvp.Key;
}
private Dictionary<string, string> ysdm = null;
public Dictionary<string, string> YSDM
{
get
{
if (ysdm == null)
{
ysdm = new Dictionary<string, string>();
ysdm.Add("1000110000", "CLKZD");
ysdm.Add("1000110408", "JZKZD");
ysdm.Add("1000119000", "CLKZDZJ");
ysdm.Add("1000600100", "XZQ");
ysdm.Add("1000600200", "XZQJX");
ysdm.Add("1000609000", "XZQZJ");
ysdm.Add("1000600400", "CJDCQ");
ysdm.Add("1000600500", "CJDCQJX");
ysdm.Add("1000608000", "CJDCQZJ");
ysdm.Add("1000710000", "DGX");
ysdm.Add("1000720000", "GCZJD");
ysdm.Add("1000780000", "PDT");
ysdm.Add("2001010100", "DLTB");
ysdm.Add("2001010200", "DLTBZJ");
ysdm.Add("2006010100", "TDQSQ");
ysdm.Add("2006010200", "TDQSQZJ");
ysdm.Add("2006020100", "TDQSQJX");
ysdm.Add("2006020200", "TDQSQJXZJ");
ysdm.Add("2005010300", "YJJBNTTB");
ysdm.Add("2005010900", "YJJBNTTBZJ");
ysdm.Add("2099120100", "GCHZZGX");
ysdm.Add("2099010200", "LSYDZJ");
ysdm.Add("2099020100", "PZWJSTD");
ysdm.Add("2099020200", "PZWJSTBZJ");
ysdm.Add("2099030100", "CZCDYD");
ysdm.Add("2099030200", "CZCDYDZJ");
ysdm.Add("2099040100", "GDDB");
ysdm.Add("2099040200", "GDDBZJ");
ysdm.Add("2099050100", "ZYXMYD");
ysdm.Add("2099050200", "ZYXMYDZJ");
ysdm.Add("2099060100", "KFYQ");
ysdm.Add("2099060200", "KFYQZJ");
ysdm.Add("3001010000", "GJGY");
ysdm.Add("3001020000", "ZRBHQ");
ysdm.Add("3001030000", "SLGY");
ysdm.Add("3001040000", "FJMSQ");
ysdm.Add("3001050000", "DZGY");
ysdm.Add("3001060000", "ZRYCBHQ");
ysdm.Add("3001070000", "SDGY");
ysdm.Add("3001080000", "YYSSYD");
ysdm.Add("3001090000", "SCZZBHQ");
ysdm.Add("3001990000", "QTJZKFQ");
ysdm.Add("3001200000", "ZRBHQZJ");
ysdm.Add("3002010000", "CSKFBJ");
ysdm.Add("3002020000", "CSKFBJZJ");
ysdm.Add("2099110100", "WJMHD");
ysdm.Add("2099100100", "LMFW");
}
return ysdm;
}
}
private string GetFieldTypeName(esriFieldType fieldType)
{
string strTypeName = "";
switch (fieldType)
{
case esriFieldType.esriFieldTypeSmallInteger:
strTypeName = "Int";
break;
case esriFieldType.esriFieldTypeInteger:
strTypeName = "Int";
break;
case esriFieldType.esriFieldTypeSingle:
strTypeName = "Float";
break;
case esriFieldType.esriFieldTypeDouble:
strTypeName = "Double";
break;
case esriFieldType.esriFieldTypeString:
strTypeName = "String";
break;
case esriFieldType.esriFieldTypeDate:
strTypeName = "Date";
break;
case esriFieldType.esriFieldTypeOID:
strTypeName = "Int";
break;
case esriFieldType.esriFieldTypeGeometry:
break;
case esriFieldType.esriFieldTypeBlob:
break;
case esriFieldType.esriFieldTypeRaster:
break;
case esriFieldType.esriFieldTypeGUID:
break;
case esriFieldType.esriFieldTypeGlobalID:
break;
case esriFieldType.esriFieldTypeXML:
break;
default:
break;
}
return strTypeName;
}
#endregion
private static void CopyDirectInfo(string sourceDir, string toDir)
{
if (!Directory.Exists(sourceDir))
{
throw new ApplicationException("未找到文件:" + sourceDir);
}
if (!Directory.Exists(toDir))
{
Directory.CreateDirectory(toDir);
}
DirectoryInfo directInfo = new DirectoryInfo(sourceDir);
FileInfo[] filesInfos = directInfo.GetFiles();
foreach (FileInfo fileinfo in filesInfos)
{
string fileName = fileinfo.Name;
File.Copy(fileinfo.FullName, toDir + @"/" + fileName, true);
}
}
private void Main_Closed(object sender, EventArgs e)
{
//string[] temps = System.IO.Directory.GetDirectories(Path.Combine(SysAppPath.GetCurrentAppPath(), "工作空间", "模板", "变更成果模板"));
string[] temps = System.IO.Directory.GetDirectories(Path.Combine(sBGCGDir));
List<string> tempList = TemplateList;
foreach (var item in temps)
{
DirectoryInfo f = new DirectoryInfo(item);
if (!tempList.Contains(f.Name))
tempList.Add(f.Name);
}
TemplateList = tempList;
}
private void Init()
{
try
{
InitFeatureCodeDic();
string templatePath = sBGCGDir;// Path.Combine(SysAppPath.GetCurrentAppPath(), "工作空间", "模板", "变更成果模板");
if (!Directory.Exists(templatePath))
Directory.CreateDirectory(templatePath);
string[] temps = Directory.GetDirectories(Path.Combine(sBGCGDir));
TemplateList = new List<string>();
foreach (var item in temps)
{
DirectoryInfo f = new DirectoryInfo(item);
TemplateList.Add(f.Name);
}
//if (TemplateList.Count > 0)
//{
// CurrentTemplateIndex = 1;
//}
ReadTemplateLayerInfo();
}
catch (Exception ex)
{
LogAPI.Debug(ex);
MessageHelper.ShowError(ex.Message);
}
}
private void ReadTemplateLayerInfo()
{
IWorkspaceAPI s_WsAPI = null;
try
{
string templatePath = sBGCGDir;// Path.Combine(SysAppPath.GetCurrentAppPath(), "工作空间", "模板", "变更成果模板");
string vctPath_GX = Path.Combine(templatePath, "模板", "VCTTemplate3ForBG.VCT");//默认模板
string vctPath_GXGC = Path.Combine(templatePath, "模板", "VCTTemplate3ForBG2.VCT");//默认模板
string vctPath_GX0 = Path.Combine(templatePath, "成果导出", "VCTTemplate3ForBG.VCT");
string vctPath_GXGC0 = Path.Combine(templatePath, "成果导出", "VCTTemplate3ForBG2.VCT");
Dictionary<string, string> layers = GetLayersForVCT(vctPath_GX, vctPath_GXGC);//默认模板
Dictionary<string, string> layers0 = GetLayersForVCT(vctPath_GX0, vctPath_GXGC0);
GXVCTEntity = new BGVCTEntity() { Name = "增量更新" };
GXGCVCTEntity = new BGVCTEntity() { Name = "整层更新" };
string currentGDBPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ZLDatabase;
s_WsAPI = new WorkspaceAPI(currentGDBPath, WorkspaceTypeEnum.GDBFile);
foreach (KeyValuePair<string, string> kvp in layers)
{
if ("DLTBGX,DLTBGXGC,XZQGX,XZQGXGC,CJDCQGX,CJDCQGXGC,XZQJXGX,CJDCQJXGX,CZCDYDGX,CZCDYDGXGC".Contains(kvp.Value))
{
IFeatureClassAPI fcAPI = s_WsAPI.OpenFeatureClass2(kvp.Value);
if (fcAPI != null)
{
IFeatureClass fc = fcAPI.FeatureClass;
GXVCTEntity.SubEntities.Add(new BGVCTEntity() { Name = fc.AliasName, FeatureClassName = kvp.Value, ParentEntity = GXVCTEntity, IsChecked = true });
}
continue;
}
else
{
IFeatureClassAPI fcAPI = s_WsAPI.OpenFeatureClass2(kvp.Value);
if (fcAPI != null)
{
IFeatureClass fc = fcAPI.FeatureClass;
if (layers0.ContainsValue(kvp.Value))
{
GXGCVCTEntity.SubEntities.Add(new BGVCTEntity() { Name = fc.AliasName, FeatureClassName = kvp.Value, ParentEntity = GXGCVCTEntity, IsChecked = true });
}
else
{
GXGCVCTEntity.SubEntities.Add(new BGVCTEntity() { Name = fc.AliasName, FeatureClassName = kvp.Value, ParentEntity = GXGCVCTEntity, IsChecked = false });
}
}
}
}
IncrementalUpdatingSource = new List<BGVCTEntity>();
IncrementalUpdatingSource.Add(GXVCTEntity);
LayerSource = new List<BGVCTEntity>();
LayerSource.Add(GXGCVCTEntity);
}
catch (Exception ex)
{
LogAPI.Debug("获取矢量数据模板异常:" + ex);
MessageHelper.ShowError(ex.Message);
}
finally
{
if (s_WsAPI != null)
{
s_WsAPI.CloseWorkspace();
}
}
}
private Dictionary<string, string> dicFeatureCode = null;
private void InitFeatureCodeDic()
{
dicFeatureCode = new Dictionary<string, string>();
dicFeatureCode.Add("CCWJQGX", "2099090100");
dicFeatureCode.Add("GFBQGX", "2099070100");
//dicFeatureCode.Add("LSYDGX", "2099010100");
dicFeatureCode.Add("GCHZZGX", "2099120100");
dicFeatureCode.Add("TTQGX", "2099080100");
dicFeatureCode.Add("DLTBGX", "2001010100");
dicFeatureCode.Add("CLKZDGX", "1000110000");
dicFeatureCode.Add("CZKFBJGX", "3002010000");
dicFeatureCode.Add("CZCDYDGX", "2099030100");
dicFeatureCode.Add("CZCDYDGXGC", "2099030100");
dicFeatureCode.Add("DGXGX", "1000710000");
dicFeatureCode.Add("DZGYGX", "3001050100");
dicFeatureCode.Add("FJMSQGX", "3001040100");
dicFeatureCode.Add("GCZJDGX", "1000720000");
dicFeatureCode.Add("GDDBGX", "2099040100");
dicFeatureCode.Add("GJGYGX", "3001010100");
dicFeatureCode.Add("JZKZDGX", "1000110408");
dicFeatureCode.Add("KFYQGX", "2099060100");
dicFeatureCode.Add("LMFWGX", "2099100100");
//dicFeatureCode.Add("PDTGX", "1000780000");
dicFeatureCode.Add("PZWJSTDGX", "2099020100");
dicFeatureCode.Add("QTJZKFQGX", "3001990100");
dicFeatureCode.Add("SCZZBHQGX", "3001090100");
dicFeatureCode.Add("SDGYGX", "3001070100");
dicFeatureCode.Add("SLGYGX", "3001030100");
dicFeatureCode.Add("STBHHXGX", "3003010000");
dicFeatureCode.Add("WJMHDGX", "2099110100");
dicFeatureCode.Add("YYSSYDGX", "3001080100");
dicFeatureCode.Add("ZRBHQGX", "3001020100");
dicFeatureCode.Add("ZRYCBHQGX", "3001060100");
dicFeatureCode.Add("ZYXMYDGX", "2099050100");
dicFeatureCode.Add("XZQGX", "1000600100");
dicFeatureCode.Add("XZQJXGX", "1000600200");
dicFeatureCode.Add("CJDCQGX", "1000600400");
dicFeatureCode.Add("CJDCQJXGX", "1000600500");
dicFeatureCode.Add("YJJBNTTBGX", "2005010300");
dicFeatureCode.Add("DLTBGXGC", "2001010100");
dicFeatureCode.Add("XZQGXGC", "1000600100");
dicFeatureCode.Add("CJDCQGXGC", "1000600400");
}
private Dictionary<string, string> GetLayersForVCT(string pVCTPath, string pVCTPath2)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
StreamReader sr = new StreamReader(pVCTPath, Encoding.GetEncoding("GB18030"));
string line = null;
bool BeginLoad = false;
while ((line = sr.ReadLine()) != null)
{
if (line == "FeatureCodeBegin")
{
BeginLoad = true;
}
if (BeginLoad && line != "FeatureCodeBegin")
{
string[] strs = line.Split(',');
if (strs.Length == 4 && !dic.Keys.Contains(strs[1]))
{
dic.Add(strs[1], strs[3]);
}
}
if (line == "FeatureCodeEnd")
{
BeginLoad = false;
break;
}
}
sr.Close();
sr.Dispose();
StreamReader sr2 = new StreamReader(pVCTPath2, Encoding.GetEncoding("GB18030"));
line = null;
BeginLoad = false;
while ((line = sr2.ReadLine()) != null)
{
if (line == "FeatureCodeBegin")
{
BeginLoad = true;
}
if (BeginLoad && line != "FeatureCodeBegin")
{
string[] strs = line.Split(',');
if (strs.Length == 4 && !dic.Keys.Contains(strs[1]))
{
dic.Add(strs[1], strs[3]);
}
}
if (line == "FeatureCodeEnd")
{
BeginLoad = false;
break;
}
}
sr2.Close();
sr2.Dispose();
return dic;
}
private void CreateCatalogDir(List<ResultsCatalog> pCatalog)
{
try
{
if (pCatalog == null) return;
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
string templatePath = sBGCGDir;// Path.Combine(SysAppPath.GetCurrentAppPath(), "工作空间", "模板", "变更成果模板");
string gxVCTPath = Path.Combine(templatePath, "成果导出", "VCTTemplate3ForBG.VCT");
string gxgcVCTPath = Path.Combine(templatePath, "成果导出", "VCTTemplate3ForBG2.VCT");
foreach (ResultsCatalog item in pCatalog)
{
item.Path = item.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", BGYear.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
item.Name = item.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", BGYear.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
if (item.IsChecked == false) continue;
string sPath = string.Empty;
switch (item.Type)
{
case "Directory":
this.UpdateMsg(string.Format("正在创建目录:{0}", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
if (!System.IO.Directory.Exists(sPath))
System.IO.Directory.CreateDirectory(sPath);
if (item.SubCatalog != null)
CreateCatalogDir(item.SubCatalog);
break;
case "MetadataFile":
sPath = System.IO.Path.Combine(OutDir, item.Path);
this.UpdateMsg(string.Format("正在生成元数据【{0}】", item.Name));
ExportMetadata exportMetadata = new ExportMetadata();
exportMetadata.IsBG = true;
exportMetadata.OutPath = System.IO.Path.GetDirectoryName(sPath);
exportMetadata.Scale = new ScaleCodeTable() { Scale = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).Scale, ScaleCode = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode };
exportMetadata.Export(BGYear.ToString());
break;
case "ExtractMDBFile":
try
{
sPath = System.IO.Path.Combine(OutDir, item.Path);
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
ExportBGMDB exportBGMDB = new ExportBGMDB(gxVCTPath, gxgcVCTPath);
exportBGMDB.Export(sPath);
}
catch (Exception ex)
{
throw ex;
}
break;
case "ExtractGDBFile":
try
{
sPath = System.IO.Path.Combine(OutDir, item.Path);
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
ExportBGGDB exportBGGDB = new ExportBGGDB(gxVCTPath, gxgcVCTPath);
exportBGGDB.Export(sPath);
}
catch (Exception ex)
{
throw ex;
}
break;
case "ExtractGDB":
try
{
sPath = System.IO.Path.Combine(OutDir, item.Path);
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
ExportBGMDB exportBGMDB = new ExportBGMDB(gxVCTPath, gxgcVCTPath);
exportBGMDB.ExportGDB(sPath);
}
catch (Exception ex)
{
throw ex;
}
break;
case "VCTFile":
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
string TempMDBPath = System.IO.Path.Combine(SysAppPath.GetTempPath(), string.Format("temp_vct_{0}.mdb", Guid.NewGuid().ToString().Replace("-", "")));
if (System.IO.File.Exists(TempMDBPath))
{
File.Delete(TempMDBPath);
}
ExportBGMDB exportBGMDB2 = new ExportBGMDB(gxVCTPath, gxgcVCTPath);
string vctpath = null;
if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GX"))
{
exportBGMDB2.LayerNameFilter = "GX";
vctpath = gxVCTPath;// Path.Combine(templatePath, TemplateList[CurrentTemplateIndex], "VCTTemplate3ForBG.VCT");
}
else if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GXGC"))
{
exportBGMDB2.LayerNameFilter = "GXGC";
vctpath = gxgcVCTPath;// Path.Combine(templatePath, TemplateList[CurrentTemplateIndex], "VCTTemplate3ForBG2.VCT");
}
exportBGMDB2.Export(TempMDBPath);
System.Threading.Thread.Sleep(2000);
var tmpname = item.Name.Substring(0, item.Name.Length - 4);
CreateVCT(tmpname,vctpath, TempMDBPath, (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE, float.Parse((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).FDD), (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode, System.IO.Path.GetDirectoryName(sPath).TrimEnd('\\'));
List<string> filenames = new List<string>();
string vctfolderpath = System.IO.Path.GetDirectoryName(sPath);
string[] files = System.IO.Directory.GetFiles(vctfolderpath.TrimEnd());//得到文件
foreach (string file in files)//循环文件
{
if (System.IO.Path.GetExtension(file).ToUpper() == ".VCT")
{
filenames.Add(System.IO.Path.GetFileNameWithoutExtension(file));
}
}
foreach (var name in filenames)
{
tmpname = item.Name.Substring(0, item.Name.Length - 4);
if (name.EndsWith("000000"))
{
if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GX"))
{
System.IO.File.Move(vctfolderpath + @"\" + name + ".VCT", vctfolderpath + @"\" + tmpname + ".VCT");
}
else if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GXGC"))
{
System.IO.File.Move(vctfolderpath + @"\" + name + ".VCT", vctfolderpath + @"\" + tmpname + ".VCT");
}
}
}
//string[] dirs = System.IO.Directory.GetDirectories(vctfolderpath);//得到目录
//foreach (var name in dirs)
//{
// tmpname = item.Name.Substring(0, item.Name.Length - 4);
// if (name.EndsWith("000000_idx"))
// {
// if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GX"))
// {
// System.IO.Directory.Move(name, vctfolderpath + @"\" + tmpname + "_idx");
// }
// else if (System.IO.Path.GetFileNameWithoutExtension(sPath).EndsWith("GXGC"))
// {
// System.IO.Directory.Move(name, vctfolderpath + @"\" + tmpname + "_idx");
// }
// }
//}
break;
case "ReportExcel":
if (string.IsNullOrWhiteSpace(NCDataDir))
{
continue;
}
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
//BGExportHelper exportReport = new BGExportHelper();
//exportReport.AreaUnit = ReportFileTypeEnum.DBGQ;
//exportReport.OutPath = sPath;
//exportReport.NCDataDir = NCDataDir;
try
{
//exportReport.Export((ReportTypeEnum)System.Enum.Parse(typeof(ReportTypeEnum), item.FileType));
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite";
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
string saveCurrentPath = string.Format("{0}.xlsx", sPath);
ReportEntityClass reportEntityClass = new ReportEntityClass();
reportEntityClass.ReportType = (ReportTypeEnum)System.Enum.Parse(typeof(ReportTypeEnum), ((ReportTypeEnum)System.Enum.Parse(typeof(ReportTypeEnum), item.FileType)).ToString());
StatisticalReportClass reportClass = new StatisticalReportClass();
reportClass.NULLExport(saveCurrentPath, dbHelper, reportEntityClass, NCDataDir);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
break;
case "ReportWord":
this.UpdateMsg(string.Format("正在导出【{0}】", item.Name));
sPath = System.IO.Path.Combine(OutDir, item.Path);
IStatisticExport exprotReport2 = new BGExportHelper();
exprotReport2.AreaUnit = ReportFileTypeEnum.DBGQ;
exprotReport2.OutPath = sPath;
exprotReport2.ExportWordReport((ReportTypeEnum)System.Enum.Parse(typeof(ReportTypeEnum), item.FileType));
break;
default:
break;
}
}
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
private static string CreateVCT(string idxName, string vctpath, string mdbpath, string xzqdm, float dk, string blc, string rootpath, string ffh = null)
{
VCTFileConvertHelper h = new VCTFileConvertHelper();
VctVectorData vctdata = h.GetVctVectorData(vctpath, true);
vctdata.VctHead.XZQDM = xzqdm;// KGIS.Common.Utility.EnvironmentVariables.Instance.Project.;
vctdata.VctHead.DK = dk;
MapScaleEnum mapscale = (MapScaleEnum)System.Enum.Parse(typeof(MapScaleEnum), blc);
vctdata.VctHead.MapScale = ((int)mapscale).ToTrim();
MDBToVCTHelper mdbtovct = new MDBToVCTHelper();
mdbtovct.MaxBSM = 1;
mdbtovct.RootPath = rootpath + @"\";
string vctfilepath = mdbtovct.MDBToVCT(mdbpath, vctdata, ffh);
//CreateVCTIndex(vctfilepath, idxName);
return vctfilepath;
}
private static void CreateVCTIndex(string vctfilepath,string idxName)
{
//创建索引
VCTIndexHelper vctidxhelper = new VCTIndexHelper();
vctidxhelper.CreateIdxByVCTFile(vctfilepath, true);
}
string bglayer = "";
private void UpdateBGYear(List<ResultsCatalog> resultsCatalogs)
{
if (resultsCatalogs.Count > 0)
{
foreach (var item in resultsCatalogs)
{
if (item.Name.Contains(bglayer))
{
item.Name = item.Name.Replace(bglayer, BGYear.ToString());
}
if (item.SubCatalog != null && item.SubCatalog.Count > 0)
{
UpdateBGYear(item.SubCatalog);
}
else
{
if (item.Name.Contains(bglayer))
{
item.Name = item.Name.Replace(bglayer, BGYear.ToString());
}
}
}
}
}
/// <summary>
/// 由于权属代码功能没有完善,现需要调用权属功能位置写死,龙城区为例
/// </summary>
/// <returns></returns>
public List<ResultsCatalog> GetResultsCatalogtemp(bool ischeck = false, List<ResultsCatalog> resultsCatalogs = null)
{
List<ResultsCatalog> result = new List<ResultsCatalog>();
try
{
//if (resultsCatalogs != null)
//{
// UpdateBGYear(resultsCatalogs);
// bglayer = BGYear.ToString();
// return resultsCatalogs;
//}
//bglayer = BGYear.ToString();
XmlDocument doc = new XmlDocument();
string strPath = SysAppPath.GetCurrentAppPath();
strPath += @"Configs\ResultsCatalogCfgForBG2.xml";
doc.Load(strPath);
XmlNode nodeDataCatalog = doc.SelectSingleNode("ResultsCatalog");
if (nodeDataCatalog == null)
return result;
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
foreach (XmlNode item in nodeDataCatalog.ChildNodes)
{
if (item.Name == "DataCatalog")
{
ResultsCatalog rootCatalog = new ResultsCatalog();
if (ischeck)
{
rootCatalog.IsChecked = true;
}
rootCatalog.Name = item.Attributes["Name"] == null ? "" : item.Attributes["Name"].Value;
rootCatalog.Path = rootCatalog.Name;
rootCatalog.Type = "Directory";
if (item.ChildNodes != null)
{
List<ResultsCatalog> tree = GetSubCatalog(item, rootCatalog, BGYear.ToString());
if (rootCatalog.SubCatalog == null)
rootCatalog.SubCatalog = new List<ResultsCatalog>();
if (ischeck)
{
foreach (var tr in tree)
{
tr.IsChecked = true;
}
}
rootCatalog.SubCatalog.AddRange(tree);
}
if (qsDic != null && !string.IsNullOrWhiteSpace((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE) && (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE != "000000")
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE.Substring(0, 2));
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*省", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE.Substring(0, 4));
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*市", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*县", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*县", dic.NAME);
}
}
rootCatalog.Path = rootCatalog.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
rootCatalog.Name = rootCatalog.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", BGYear.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
result.Add(rootCatalog);
}
}
return result;
}
catch (Exception ex)
{
LogAPI.Debug("初始化成果导出异常:" + ex);
throw;
}
}
public List<ResultsCatalog> GetResultsCatalog()
{
List<ResultsCatalog> result = new List<ResultsCatalog>();
try
{
XmlDocument doc = new XmlDocument();
string strPath = SysAppPath.GetBGResultsCataCfgPath();
doc.Load(strPath);
XmlNode nodeDataCatalog = doc.SelectSingleNode("ResultsCatalog");
if (nodeDataCatalog == null)
return result;
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
if (qsDic == null)
{
return result;
}
foreach (XmlNode item in nodeDataCatalog.ChildNodes)
{
if (item.Name == "DataCatalog")
{
ResultsCatalog rootCatalog = new ResultsCatalog();
rootCatalog.Name = item.Attributes["Name"] == null ? "" : item.Attributes["Name"].Value;
rootCatalog.Path = rootCatalog.Name;
rootCatalog.Type = "Directory";
if (item.ChildNodes != null)
{
List<ResultsCatalog> tree = GetSubCatalog(item, rootCatalog, BGYear.ToString());
if (rootCatalog.SubCatalog == null)
rootCatalog.SubCatalog = new List<ResultsCatalog>();
rootCatalog.SubCatalog.AddRange(tree);
}
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*省", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*市", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
//dic = qsDic.FindLast(f => == Env.Instance.Project.CODE);
if (dic != null)
{
rootCatalog.Path = rootCatalog.Path.Replace("*县", dic.NAME);
rootCatalog.Name = rootCatalog.Name.Replace("*县", dic.NAME);
}
}
rootCatalog.Path = rootCatalog.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
rootCatalog.Name = rootCatalog.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", BGYear.ToString()).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
result.Add(rootCatalog);
}
}
return result;
}
catch (Exception ex)
{
LogAPI.Debug(ex);
throw;
}
}
public static List<ResultsCatalog> GetSubCatalog(XmlNode pNode, ResultsCatalog pCatalog, string year)
{
List<ResultsCatalog> result = new List<ResultsCatalog>();
if (pNode != null && pNode.ChildNodes != null)
{
string sPName = pNode.Attributes["Name"] == null ? "" : pNode.Attributes["Name"].Value.ToString();
//rootCatalog.Name = rootCatalog.Name.Replace("县行政区划代码6位", Env.Instance.Project.CODE).Replace("年代代码4位", DateTime.Now.Year.ToString()).Replace("比例尺代码1位", "I");
sPName = sPName.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", year).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
List<DataDicTionary> qsDic = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM);
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
sPName = sPName.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
sPName = sPName.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
sPName = sPName.Replace("*县", dic.NAME);
}
}
foreach (XmlNode item in pNode.ChildNodes)
{
ResultsCatalog catalog = new ResultsCatalog();
try
{
if (item.Attributes != null && item.Attributes["ShowFilter"] != null)
{
string[] showFilter = item.Attributes["ShowFilter"].Value.ToString().Split('_');
if (!(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE.StartsWith(showFilter[0]) && !sPName.StartsWith(showFilter[1]))
{
continue;
}
}
catalog.Name = item.Attributes["Name"] == null ? "" : item.Attributes["Name"].Value;
catalog.Path = System.IO.Path.Combine(pCatalog.Path, catalog.Name);
catalog.CopyFile = item.Attributes["CopyFile"] == null ? "" : item.Attributes["CopyFile"].Value;
catalog.Type = item.Name;
catalog.Parent = pCatalog;
if (qsDic != null)
{
DataDicTionary dic = qsDic.FirstOrDefault(f => f.CODE.Length == 2);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*省", dic.NAME);
catalog.Name = catalog.Name.Replace("*省", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE.Length == 4);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*市", dic.NAME);
catalog.Name = catalog.Name.Replace("*市", dic.NAME);
}
dic = qsDic.FirstOrDefault(f => f.CODE == (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
if (dic != null)
{
catalog.Path = catalog.Path.Replace("*县", dic.NAME);
catalog.Name = catalog.Name.Replace("*县", dic.NAME);
}
}
catalog.Path = catalog.Path.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
catalog.Name = catalog.Name.Replace("县行政区划代码6位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE).Replace("年代代码4位", year).Replace("比例尺代码1位", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ScaleCode);
result.Add(catalog);
}
catch (Exception ex)
{ }
if (item.ChildNodes != null)
{
if ("ReportExcel,ReportWord".Contains(item.Name))
{
ReadAttribute(item, catalog);
}
else
{
catalog.SubCatalog = GetSubCatalog(item, catalog, year);
}
}
}
}
return result;
}
private static void ReadAttribute(XmlNode pNode, ResultsCatalog pCatalog)
{
if (pNode != null && pNode.ChildNodes != null)
{
foreach (XmlNode item in pNode.ChildNodes)
{
switch (item.Name)
{
case "ReportType":
pCatalog.FileType = item.InnerText;
break;
case "TempalateFileName":
pCatalog.FileTempalate = item.InnerText;
break;
default:
break;
}
}
}
}
private void CreateVCTContent()
{
IWorkspaceAPI s_WsAPI = null;
try
{
List<string> fcNameList = new List<string>() { "XZQGX", "XZQJXGX", "CJDCQGX", "CJDCQJXGX", "GXZJ", "XZQGXGC", "CJDCQGXGC" };
string currentGDBPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath();
s_WsAPI = new WorkspaceAPI(currentGDBPath, WorkspaceTypeEnum.GDBFile);
Dictionary<string, string> s_FcList = s_WsAPI.GetFeatureClassName(esriDatasetType.esriDTFeatureDataset);
string sPath = System.IO.Path.Combine(SysAppPath.GetCurrentAppPath(), "Z_VCTContent.txt");
FileStream fs = new FileStream(sPath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
if (s_FcList.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in s_FcList)
{
if (fcNameList.Contains(kvp.Value))
{
IFeatureClassAPI fcSourceAPI = s_WsAPI.OpenFeatureClass(kvp.Value);
IFeatureClass fcSource = fcSourceAPI.FeatureClass;
FeatureClass fc = fcSource as FeatureClass;
IFields fields = fcSource.Fields;
int FieldCount = 0;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
FieldCount++;
}
sw.WriteLine(string.Format("{0},{1}", fc.Name, FieldCount));
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
if (field.Name == "OBJECTID" || field.Name == "SHAPE" || field.Name == "SHAPE_Length" || field.Name == "SHAPE_Area")
{
continue;
}
sw.WriteLine(string.Format("{0},{1},{2}", field.Name, GetVCTFieldType(field), field.Length <= 254 ? field.Length : 254));
}
sw.WriteLine("0");
}
}
}
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (s_WsAPI != null)
{
s_WsAPI.CloseWorkspace();
}
}
}
private string GetVCTFieldType(IField field)
{
string strType = null;
switch (field.Type)
{
case esriFieldType.esriFieldTypeSmallInteger:
strType = "Int";
break;
case esriFieldType.esriFieldTypeInteger:
strType = "Int";
break;
case esriFieldType.esriFieldTypeSingle:
strType = "Float";
break;
case esriFieldType.esriFieldTypeDouble:
strType = "Float";
break;
case esriFieldType.esriFieldTypeString:
if (field.Name.EndsWith("BZ"))
{
strType = "VarChar";
}
else
{
strType = "Char";
}
break;
case esriFieldType.esriFieldTypeDate:
strType = "Date";
break;
case esriFieldType.esriFieldTypeOID:
break;
case esriFieldType.esriFieldTypeGeometry:
break;
case esriFieldType.esriFieldTypeBlob:
break;
case esriFieldType.esriFieldTypeRaster:
break;
case esriFieldType.esriFieldTypeGUID:
break;
case esriFieldType.esriFieldTypeGlobalID:
break;
case esriFieldType.esriFieldTypeXML:
break;
default:
break;
}
return strType;
}
#region 导入表格数据
public void ExcelToDataTable()
{
DataTable dataTable = null;
IRDBHelper rdbHelper = null;
try
{
ProjectInfo prjInfo = MapsManager.Instance.CurrProjectInfo as ProjectInfo;
string filter = "*.xlsx";
if (string.IsNullOrWhiteSpace(NCDataDir)) return;
var files = System.IO.Directory.GetFiles(NCDataDir, filter, SearchOption.AllDirectories);
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite";
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
DirectoryInfo dir = new DirectoryInfo(NCDataDir);
FileInfo[] fileSet = dir.GetFiles("(" + (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + ")*.xlsx", SearchOption.AllDirectories);
foreach (var item in fileSet)
{
var tableName = item.Name.Replace("(", "").Replace(")", "").Replace((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE, "").Replace(item.Extension, "").ToTrim();
using (var streamData = File.Open(item.FullName, FileMode.Open, FileAccess.Read))
{
using (var readerData = ExcelReaderFactory.CreateReader(streamData))
{
var result = readerData.AsDataSet();
dataTable = result.Tables[0];
Dictionary<string, string> dics = Get_Colunms(dataTable);
CreateTableSql(rdbHelper, tableName, dics);
if (dataTable != null && dataTable.Rows.Count > 0)
{
dataTable = DtSelectTop(10, dataTable);
Insert_sql(dataTable, dics, rdbHelper, tableName);
}
}
}
}
string tbName = "土地利用现状分类面积汇总表";
//调整后年初报表平差(涉及行政区调入、调出的情况)
DataTable table = rdbHelper.ExecuteDatatable("tab", string.Format(@"select case WHEN column1='{0}' THEN'column1' ELSE 'column2' END ColumnName from {1} WHERE column1='{0}' or column2='{0}' ", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE, tbName), true);
if (table == null || table.Rows.Count == 0)
{
return;
}
string ColumnName = table.Rows[0][0].ToTrim();
string strViewSQL = string.Empty;
if (ColumnName == "column1")
{
strViewSQL = string.Format(@" create view V_PC_NCMJ as
select '4' Cells_X, '2' Cells_Y, round(column11,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '3' Cells_Y, round(column12,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '4' Cells_Y, round(column13,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '5' Cells_Y, round(column14,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '6' Cells_Y, round(column15,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '7' Cells_Y, round(column16,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '8' Cells_Y, round(column17,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '9' Cells_Y, round(column18,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '10' Cells_Y, round(column19,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '11' Cells_Y, round(column20,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '12' Cells_Y, round(column21,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '13' Cells_Y, round(column22,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '14' Cells_Y, round(column23,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '15' Cells_Y, round(column24,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '16' Cells_Y, round(column25,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '17' Cells_Y, round(column26,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '18' Cells_Y, round(column27,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '19' Cells_Y, round(column28,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '20' Cells_Y, round(column3,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '21' Cells_Y, round(column4,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '22' Cells_Y, round(column5,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '23' Cells_Y, round(column6,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '24' Cells_Y, round(column7,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '25' Cells_Y, round(column8,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '26' Cells_Y, round(column9,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '27' Cells_Y, round(column10,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '28' Cells_Y, round(column43,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '29' Cells_Y, round(column44,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '30' Cells_Y, round(column45,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '31' Cells_Y, round(column46,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '32' Cells_Y, round(column47,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '33' Cells_Y, round(column48,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '34' Cells_Y, round(column49,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '36' Cells_Y, round(column29,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '37' Cells_Y, round(column30,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '38' Cells_Y, round(column31,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '39' Cells_Y, round(column32,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '40' Cells_Y, round(column33,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '41' Cells_Y, round(column34,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '42' Cells_Y, round(column35,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '43' Cells_Y, round(column36,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '44' Cells_Y, round(column37,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '45' Cells_Y, round(column38,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '46' Cells_Y, round(column39,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '47' Cells_Y, round(column40,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '48' Cells_Y, round(column41,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '49' Cells_Y, round(column42,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '50' Cells_Y, round(column50,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '51' Cells_Y, round(column51,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '52' Cells_Y, round(column52,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '53' Cells_Y, round(column53,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '54' Cells_Y, round(column54,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '55' Cells_Y, round(column55,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '56' Cells_Y, round(column56,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '57' Cells_Y, round(column57,4) BGMJ FROM {2} WHERE {1}='{0}' ", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE, ColumnName, tbName);
}
else if (ColumnName == "column2")
{
strViewSQL = string.Format(@" create view V_PC_NCMJ as
select '4' Cells_X, '2' Cells_Y, round(column12,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '3' Cells_Y, round(column13,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '4' Cells_Y, round(column14,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '5' Cells_Y, round(column15,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '6' Cells_Y, round(column16,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '7' Cells_Y, round(column17,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '8' Cells_Y, round(column18,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '9' Cells_Y, round(column19,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '10' Cells_Y, round(column20,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '11' Cells_Y, round(column21,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '12' Cells_Y, round(column22,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '13' Cells_Y, round(column23,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '14' Cells_Y, round(column24,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '15' Cells_Y, round(column25,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '16' Cells_Y, round(column26,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '17' Cells_Y, round(column27,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '18' Cells_Y, round(column28,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '19' Cells_Y, round(column29,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '20' Cells_Y, round(column4,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '21' Cells_Y, round(column5,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '22' Cells_Y, round(column6,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '23' Cells_Y, round(column7,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
SELECT '4' Cells_X, '24' Cells_Y, round(column8,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '25' Cells_Y, round(column9,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '26' Cells_Y, round(column10,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '27' Cells_Y, round(column11,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '28' Cells_Y, round(column44,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '29' Cells_Y, round(column45,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '30' Cells_Y, round(column46,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '31' Cells_Y, round(column47,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '32' Cells_Y, round(column48,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '33' Cells_Y, round(column49,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '34' Cells_Y, round(column50,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '36' Cells_Y, round(column30,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '37' Cells_Y, round(column31,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '38' Cells_Y, round(column32,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '39' Cells_Y, round(column33,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '40' Cells_Y, round(column34,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '41' Cells_Y, round(column35,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '42' Cells_Y, round(column36,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '43' Cells_Y, round(column37,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '44' Cells_Y, round(column38,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '45' Cells_Y, round(column39,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '46' Cells_Y, round(column40,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '47' Cells_Y, round(column41,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '48' Cells_Y, round(column42,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '49' Cells_Y, round(column43,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '50' Cells_Y, round(column51,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '51' Cells_Y, round(column52,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '52' Cells_Y, round(column53,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '53' Cells_Y, round(column54,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '54' Cells_Y, round(column55,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '55' Cells_Y, round(column56,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '56' Cells_Y, round(column57,4) BGMJ FROM {2} WHERE {1}='{0}' UNION ALL
select '4' Cells_X, '57' Cells_Y, round(column58,4) BGMJ FROM {2} WHERE {1}='{0}' ", (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE, ColumnName, tbName);
}
//年初面积
rdbHelper.ExecuteSQL(@"DROP VIEW V_PC_NCMJ");
rdbHelper.ExecuteSQL(strViewSQL);
//调入面积
rdbHelper.ExecuteSQL(@"DROP VIEW V_PC_TRMJ");
strViewSQL = @"CREATE VIEW V_PC_TRMJ as
select Cells_Y,dlbm,BGMJ from
(
select case when XZQTZLX='1' then bgq ELSE bgh end dlbm, SUM(BGMJ) BGMJ from
(
select case when BGQCZCSXM='空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ,XZQTZLX
from
(
select substr(BGQDLBM, 1, 4) BGQDLBM, substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ
)A WHERE XZQTZLX in ('1','3')
)A GROUP BY dlbm
)a left join TDLYXZBGB B on a.DLBM= B.bgh where b.Cells_X='12'";
rdbHelper.ExecuteSQL(strViewSQL);
//调出面积
rdbHelper.ExecuteSQL(@"DROP VIEW V_PC_TCMJ");
strViewSQL = @"CREATE VIEW V_PC_TCMJ as
select Cells_Y,dlbm,BGMJ from
(
select bgq dlbm, SUM(BGMJ) BGMJ from
(
select case when BGQCZCSXM='空' then BGQDLBM else BGQCZCSXM end bgq,case when BGHCZCSXM = '空' then BGHDLBM else BGHCZCSXM end bgh,BGMJ,XZQTZLX
from
(
select substr(BGQDLBM, 1, 4) BGQDLBM, substr(BGQCZCSXM, 1, 3) BGQCZCSXM, substr(BGHDLBM, 1, 4) BGHDLBM,substr(BGHCZCSXM, 1, 3) BGHCZCSXM,BGMJ, XZQTZLX from JCTJB_GQ
)A WHERE XZQTZLX in ('2','4')
)A GROUP BY dlbm order by bgmj desc
)a left join TDLYXZBGB B on a.DLBM= B.bgh where b.Cells_X='12'";
rdbHelper.ExecuteSQL(strViewSQL);
//计算平差数
rdbHelper.ExecuteSQL(@"DROP VIEW V_PC_PCS");
strViewSQL = @" create view V_PC_PCS as
SELECT round(ifnull(trmj,0)-ifnull(tcmj,0),2) mjc from
(
(select sum(bgmj) trmj from JCTJB_GQ where XZQTZLX='1' or XZQTZLX='3'),
(select sum(bgmj) tcmj from JCTJB_GQ where XZQTZLX='2' or XZQTZLX='4')
)";
rdbHelper.ExecuteSQL(strViewSQL);
dataTable = rdbHelper.ExecuteDatatable("dtPCS", "select * from V_PC_PCS", true);
double pcs = 0;
if (dataTable != null && dataTable.Rows.Count > 0)
{
pcs = dataTable.Rows[0][0].ToDouble();
if (pcs == 0) return;
}
if (prjInfo == null) return;
if (prjInfo.KZMJ == null) return;
double LLMJBHValue = Math.Round(prjInfo.KZMJ.TZH_LDMJ_GQ + prjInfo.KZMJ.TZH_HDMJ_GQ - (prjInfo.KZMJ.TZQ_LDMJ_GQ + prjInfo.KZMJ.TZQ_HDMJ_GQ), 2);
double PCKZS = Math.Round(LLMJBHValue - pcs, 2);
//获取待平差条目
rdbHelper.ExecuteSQL(@"DROP VIEW V_PC_DPCTM");
dataTable = rdbHelper.ExecuteDatatable("dtPCS", "select * from V_PC_TRMJ", true);
double trmj = 0;
if (dataTable != null && dataTable.Rows.Count > 0)
{
trmj = dataTable.Rows[0][0].ToInt();
strViewSQL = $@"CREATE VIEW V_PC_DPCTM as
select * from JCTJB_GQ where XZQTZLX='1' or XZQTZLX='3' ORDER by BGMJ desc,BGHDLBM desc,BGHQSXZ,BGHZLDWDM,BGHGDLX,BGHGDPDJB,BGHTBXHDM,BGHZZSXDM,BGHCZCSXM,BGHMSSM LIMIT {Math.Abs(PCKZS) * 100}";
}
else
{
strViewSQL = $@"CREATE VIEW V_PC_DPCTM as
select * from JCTJB_GQ where BGQDLBM=(
select dlbm from (
select dlbm,(ncmj+trmj-tcmj) TZHNCMJ from (
select a.Cells_Y,case when a.dlbm is null then b.dlbm else a.dlbm end dlbm,ifnull(a.NCMJ,0) NCMJ,ifnull(a.TRMJ,0) TRMJ,ifnull(b.BGMJ,0) as TCMJ from
(
select a.Cells_Y,b.dlbm,a.BGMJ as NCMJ,ifnull(b.BGMJ,0) as TRMJ from V_PC_NCMJ a left join V_PC_TRMJ b on a.Cells_Y=b.Cells_Y
)a left join V_PC_TCMJ b on a.Cells_Y=b.Cells_Y
) where dlbm is not null order by tzhncmj desc LIMIT 1
)
) and (XZQTZLX='2' or XZQTZLX='4') and BGQCZCSXM='空' order by bgmj desc,BGQQSXZ,BGQZLDWDM,BGQGDLX,BGQGDPDJB,BGQTBXHDM,BGQZZSXDM,BGQCZCSXM,BGQMSSM LIMIT {Math.Abs(PCKZS) * 100}";
}
rdbHelper.ExecuteSQL(strViewSQL);
if (PCKZS > 0)
{
if (trmj > 0)
{
rdbHelper.ExecuteSQL(@"update JCTJB_GQ set bgmj=bgmj+0.01 where id in
(
select id from V_PC_DPCTM
)");
}
else
{
rdbHelper.ExecuteSQL(@"update JCTJB_GQ set bgmj=bgmj-0.01 where id in
(
select id from V_PC_DPCTM
)");
}
}
else
{
if (trmj > 0)
{
rdbHelper.ExecuteSQL(@"update JCTJB_GQ set bgmj=bgmj-0.01 where id in
(
select id from V_PC_DPCTM
)");
}
else
{
rdbHelper.ExecuteSQL(@"update JCTJB_GQ set bgmj=bgmj+0.01 where id in
(
select id from V_PC_DPCTM
)");
}
}
}
catch (Exception ex)
{
LogAPI.Debug("读取Excel数据错误(成果输出):" + ex);
}
finally
{
if (dataTable != null)
{
dataTable.Clear();
dataTable = null;
}
}
}
public static DataTable DtSelectTop(int TopItem, DataTable oDT)
{
if (oDT.Rows.Count < TopItem) return oDT;
DataTable NewTable = oDT.Clone();
DataRow[] rows = oDT.Select("1=1");
for (int i = 0; i < TopItem; i++)
{
NewTable.ImportRow((DataRow)rows[i]);
}
return NewTable;
}
/// <summary>
/// 获取列
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
public static Dictionary<string, string> Get_Colunms(DataTable dic)
{
Dictionary<string, string> dics = new Dictionary<string, string>();
foreach (DataColumn item in dic.Columns)
{
dics.Add(item.ColumnName, "Varchar");
}
return dics;
}
/// <summary>
/// 创建表
/// </summary>
/// <param name="rdbHelper"></param>
/// <param name="tableName"></param>
/// <param name="table"></param>
protected void CreateTableSql(IRDBHelper rdbHelper, string tableName, Dictionary<string, string> table)
{
string result = string.Empty;
try
{
string temp1 = "CREATE TABLE if not exists " + tableName + "(";
foreach (var item in table)
{
temp1 = temp1 + item.Key.Trim().ToLower() + " " + item.Value + ",";
}
result = temp1.TrimEnd(',') + ");";
rdbHelper.ExecuteNonQueryWithException($" DROP TABLE if exists {tableName}");
rdbHelper.ExecuteNonQueryWithException(result);
}
catch (Exception ex)
{
throw ex;
}
}
public void Insert_sql(DataTable dic, Dictionary<string, string> dics, IRDBHelper SqlHelper, string Table)
{
#region 获取所有字段
StringBuilder columns = new StringBuilder();
foreach (var item in dics)
{
columns.Append("," + item.Key);
}
#endregion
#region 数据入库
int CycleIndex = 0;
StringBuilder insertsql = new StringBuilder();
StringBuilder strsql = new StringBuilder();
StringBuilder stringBuilder = new StringBuilder();
var count = dic.Rows.Count;
foreach (DataRow item0 in dic.Rows)
{
CycleIndex++;
StringBuilder data = new StringBuilder();//insert语句插入字段
foreach (var item1 in dics)
{
if (item0[item1.Key].ToString().Trim() == "")
{
data.Append(",null");
}
else
{
data.Append((",'" + item0[item1.Key].ToString().Trim().Replace("'", "''").Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "") + "'"));
}
}
insertsql.Append(string.Format("insert into " + Table + "({0})values({1});", columns.ToString().Substring(1), data.ToString().Substring(1)));
#region 提交数据
if (count < 10000)
{
if (CycleIndex < count)
{
stringBuilder.Append(insertsql.ToString());
insertsql.Clear();
}
else if (CycleIndex == count)
{
stringBuilder.Append(insertsql.ToString());
var num = SqlHelper.ExecuteNonQuery(stringBuilder.ToString(), CommandType.Text);
if (num < 0 && stringBuilder.ToString() != "")
return;
}
}
else
{
strsql.Append(insertsql.ToString());
insertsql.Clear();
}
if (CycleIndex == 10000)
{
try
{
var num = SqlHelper.ExecuteNonQuery(strsql.ToString(), CommandType.Text);
if (num < 0 && strsql.ToString() != "")
return;
insertsql.Clear();
strsql.Clear();
count = count - CycleIndex;
CycleIndex = 0;
}
catch (Exception exc)
{
throw new Exception(exc.Message);
}
finally
{
GC.Collect();
}
}
#endregion
}
#endregion
}
#endregion
}
}