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

1153 lines
57 KiB

4 months ago
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ExcelDataReader;
using KGIS.Framework.AE;
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.Helper;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Dialog;
using KGIS.Framework.Utils.ExtensionMethod;
using KGIS.Framework.Utils.Helper;
using Kingo.PluginServiceInterface;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows;
using IRDBHelper = KGIS.Framework.DBOperator.IRDBHelper;
namespace Kingo.Plugin.LocationChange.View
{
/// <summary>
/// FrmLocationChange.xaml 的交互逻辑
/// </summary>
public partial class FrmLocationChange : BaseWindow
{
/// <summary>
/// 选择范围的变更数据
/// </summary>
private IFeatureLayer SelLocation_Layer = null;
/// <summary>
/// 视图数据表
/// </summary>
DataTable DT = new DataTable();
private string dbPath = Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite";
public FrmLocationChange()
{
InitializeComponent();
DT.Columns.Add(new DataColumn("变更前代码"));
DT.Columns.Add(new DataColumn("变更前名称"));
DT.Columns.Add(new DataColumn("变更后代码"));
DT.Columns.Add(new DataColumn("变更后名称"));
gvCtrl.ItemsSource = DT;
tvAttr2.AddNewRow();
}
/// <summary>
/// 得到要素类集合
/// </summary>
/// <param name="title"></param>
/// <param name="paths">路径集合</param>
public static IFeatureClass GetFeatureClass(string title, ref string paths)
{
IFeatureClass result = null;
try
{
// 获取源数据
OpenDataDialog pDialog = new OpenDataDialog();
ISpatialDataObjectFilter pOFilter;
pOFilter = new FilterFeatureDatasetsAndFeatureClasses();
pDialog.AddFilter(pOFilter, true);
if (!string.IsNullOrWhiteSpace(title))
pDialog.Title = title;
else
pDialog.Title = "选择数据";
pDialog.AllowMultiSelect = false;
pDialog.RestoreLocation = true;
pDialog.StartLocation = pDialog.FinalLocation;
if (pDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count > 0)
{
List<ISpatialDataObject> distObj = pDialog.Selection;
foreach (var obj in distObj)
{
if (obj.DatasetType == esriDatasetType.esriDTFeatureClass)
{
IFeatureClass featureclass = (obj.DatasetName as IName).Open() as IFeatureClass;
result = featureclass;
//paths += obj.FullName;//展示完整路径
paths = featureclass.AliasName;//展示文件名
}
}
}
return result;
}
catch (Exception ex)
{
LogAPI.Debug("选择数据失败:" + ex.Message.ToString());
return result;
}
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOpenFile_Click(object sender, RoutedEventArgs e)
{
string filePath = string.Empty;
OpenFileDialog dialog = new OpenFileDialog();
dialog.DefaultExt = "xls";
dialog.Filter = "Excel文件|*.xls;*.xlsx";
if (dialog.ShowDialog())
{
filePath = dialog.FileName;
using (var streamData = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var readerData = ExcelReaderFactory.CreateReader(streamData))
{
var result = readerData.AsDataSet();
DataTable tempDT = result.Tables[0];
tempDT.Columns[0].ColumnName = "变更前代码";
tempDT.Columns[1].ColumnName = "变更前名称";
tempDT.Columns[2].ColumnName = "变更后代码";
tempDT.Columns[3].ColumnName = "变更后名称";
tempDT.Rows.RemoveAt(0);
DT = tempDT;
gvCtrl.ItemsSource = DT;
}
}
}
}
/// <summary>
/// 添加行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnAddRow_Click(object sender, RoutedEventArgs e)
{
tvAttr2.AddNewRow();
}
/// <summary>
/// 删除选中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDelRow_Click(object sender, RoutedEventArgs e)
{
int[] rows = gvCtrl.GetSelectedRowHandles();
foreach (var item in rows)
{
tvAttr2.DeleteRow(item);
}
}
/// <summary>
/// 选择范围
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnSelTB_Click(object sender, RoutedEventArgs e)
{
string xzdltbPaths = "";
IFeatureClass dltbFc = GetFeatureClass("请选择新增的地类图斑数据", ref xzdltbPaths);
if (dltbFc != null)
{
btnNewData.Text = xzdltbPaths;
SelLocation_Layer = GeoDBAPI.CreateFeatureLayerInmemeory("SelLocation", "选择范围图斑数据", (dltbFc as IGeoDataset).SpatialReference, dltbFc.ShapeType, dltbFc.Fields);
(SelLocation_Layer.FeatureClass as ITable).DeleteSearchedRows(null);
InsertDataToMemeoryLayer(dltbFc, SelLocation_Layer.FeatureClass, null);
}
}
/// <summary>
/// 更新坐落信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOK_Click(object sender, RoutedEventArgs e)
{
try
{
ProgressHelper.ShowProcessBar("正在进行数据处理......");
bool isSucceed = false;
//给定图斑进行变更
if (SelLocation_Layer != null && SelLocation_Layer.FeatureClass.FeatureCount(null) != 0)
{
SelTBZLBG();
isSucceed = true;
}
//给定坐落信息进行变更
if (DT.Rows.Count != 0)
{
bool isXDM = false;
foreach (DataRow dr in DT.Rows)
{
if (string.IsNullOrWhiteSpace(dr["变更前代码"].ToTrim()) || string.IsNullOrWhiteSpace(dr["变更后代码"].ToTrim())) continue;
if (dr["变更前代码"].ToTrim().Length == 6 && dr["变更后代码"].ToTrim().Length == 6)
{
isXDM = true;
}
ExeUpZLInfo(dr["变更前代码"].ToTrim(), dr["变更前名称"].ToTrim(), dr["变更后代码"].ToTrim(), dr["变更后名称"].ToTrim());
}
if (isXDM)//县代码发生改变
{
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC");
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
dbHelper.ExecuteSQL("UPDATE BHXXB set XZQTZLX='5' where XZQTZLX='0'");
(fc as FeatureClass).Workspace.ExecuteSQL("UPDATE DLTBGXGC set XZQTZLX='5' where XZQTZLX='0'");
}
isSucceed = true;
}
ProgressHelper.CloseProcessBar();
if (isSucceed) MessageHelper.Show("变更完成。");
}
catch (Exception ex)
{
MessageHelper.ShowError("变更失败:" + ex.Message);
LogAPI.Debug("坐落变更失败:" + ex);
}
finally
{
ProgressHelper.CloseProcessBar();
if (SelLocation_Layer != null) SelLocation_Layer = null;
}
}
/// <summary>
/// 选择图斑进行坐落变更
/// </summary>
private void SelTBZLBG()
{
//获取左侧新加载的图层
IFeatureLayer JC_Fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑");
IFeatureLayer DLTBGX_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX");
IFeatureClass DLTBGX_Fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
IFeatureCursor featureSelTB = SelLocation_Layer.FeatureClass.Search(null, true);
IFeature Sel_F = null;
//基础库图斑字段
int BGQZLDM_JC = JC_Fc.FeatureClass.FindField("ZLDWDM");
int BGQZLMC_JC = JC_Fc.FeatureClass.FindField("ZLDWMC");
int JC_BSM = JC_Fc.FeatureClass.FindField("BSM");
int JC_TBBH_Index = JC_Fc.FeatureClass.FindField("TBBH");
//更新层图斑字段
int GX_BSM = DLTBGX_Fc.FindField("BSM");
int GX_ZLDWMC = DLTBGX_Fc.FindField("ZLDWDM");
int GX_ZLDWDM = DLTBGX_Fc.FindField("ZLDWMC");
int GX_TBBH_Index = DLTBGX_Fc.FindField("TBBH");
//获取选择范围图斑字段
int BGHZLDM_Sel = SelLocation_Layer.FeatureClass.FindField("ZLDWDM");
int BGHZLMC_Sel = SelLocation_Layer.FeatureClass.FindField("ZLDWMC");
string BGQZLDWDM = string.Empty;
string BGQZLDWMC = string.Empty;
string BGHZLDWMC = string.Empty;
string BGHZLDWDM = string.Empty;
string UpDataGXBSM = string.Empty;
string UpDataJCBSM = string.Empty;
string JC_TBBH = string.Empty;
string GX_TBBH = string.Empty;
while ((Sel_F = featureSelTB.NextFeature()) != null)
{
BGHZLDWDM = Sel_F.Value[BGHZLDM_Sel].ToString();//要改变的坐落信息
BGHZLDWMC = Sel_F.Value[BGHZLMC_Sel].ToString();
//压盖基础基础库
List<IFeature> JC_fs = FeatureAPI.Identify2(Sel_F.ShapeCopy, JC_Fc);
foreach (IFeature item_JC in JC_fs)//压盖到的基础库图斑
{
if (FeatureAPI.IsContains(Sel_F.ShapeCopy, item_JC.ShapeCopy))
{
List<IFeature> DLTBGX_fs = FeatureAPI.Identify2(item_JC.ShapeCopy, DLTBGX_FL);
foreach (IFeature item_GX in DLTBGX_fs)
{
if (FeatureAPI.IsContains(item_JC.ShapeCopy, item_GX.ShapeCopy))
{
JC_TBBH = item_JC.Value[JC_TBBH_Index].ToTrim();
GX_TBBH = item_GX.Value[GX_TBBH_Index].ToTrim();
UpDataJCBSM = item_JC.Value[JC_BSM].ToString();
UpDataGXBSM = item_GX.Value[GX_BSM].ToString();
BGQZLDWDM = item_GX.Value[GX_ZLDWDM].ToString();//改变前的坐落信息
BGQZLDWMC = item_GX.Value[GX_ZLDWMC].ToString();
SelUpdateZLInfo(BGQZLDWDM, BGQZLDWMC, UpDataJCBSM, UpDataGXBSM, JC_TBBH, GX_TBBH, item_GX.OID);
}
else
{
MessageHelper.ShowError("该图斑与地类图斑更新层图斑范围不套合,已记录日志!");
LogAPI.Debug("不套合图斑OID:" + Sel_F.OID);
}
}
if (DLTBGX_fs.Count == 0)//指定图斑只在基础图斑范围内
{
BGQZLDWDM = item_JC.Value[BGQZLDM_JC].ToString();
BGQZLDWMC = item_JC.Value[BGQZLMC_JC].ToString();
UpDataJCBSM = item_JC.Value[JC_BSM].ToString();
XZZLInfoBySelTB(BGHZLDWDM, BGHZLDWMC, BGQZLDWDM, BGQZLDWMC, UpDataJCBSM);
}
}
else
{
MessageHelper.ShowError("该图斑与基础库图斑范围不套合,已记录日志!");
LogAPI.Debug("不套合图斑OID:" + Sel_F.OID);
}
}
}
}
/// <summary>
/// 根据选择图斑数据新增坐落信息至BHXXB
/// </summary>
/// <param name="BGHZLDWDM"></param>
/// <param name="BGHZLDWMC"></param>
/// <param name="BGQZLDWDM"></param>
/// <param name="BGQZLDWMC"></param>
/// <param name="UpDataGXBSM">指定图斑BSM是否新增坐落信息</param>
private void XZZLInfoBySelTB(string BGHZLDWDM, string BGHZLDWMC, string BGQZLDWDM, string BGQZLDWMC, string UpDataJCBSM = "")
{
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
if (!dbHelper.TableIsExist("BHXXB"))
{
dbHelper.ExecuteSQL(" Create TABLE BHXXB ( BGQTBBSM text(100),BGHTBBSM text(100),BGQTBBH text(100),BGHTBBH text(100),BGQZLDWDM text(100),BGHZLDWDM text(100)," +
"BGQZLDWMC text(100),BGHZLDWMC text(100),BGQQSDWDM text(100),BGHQSDWDM text(100),BGQQSDWMC text(100),BGHQSDWMC text(100),BGQQSXZ text(100),BGHQSXZ text(100)," +
"BGQDLBM text(100),BGHDLBM text(100),BGQKCDLBM text(100),BGHKCDLBM text(100),BGQKCXS text(100),BGHKCXS text(100),BGQKCMJ NUMERIC,BGHKCMJ NUMERIC,BGQGDLX text(100),BGHGDLX text(100),BGQGDPDJB text(100),BGHGDPDJB text(100),BGQCZCSXM text(100),BGHCZCSXM text(100)," +
"BGQTBXHDM text(100),BGHTBXHDM text(100),BGQZZSXDM text(100),BGHZZSXDM text(100),BGQMSSM text(100),BGHMSSM text(100),BGQGDDB text(100),BGHGDDB text(100)," +
"BGMJ NUMERIC,XZQTZLX text(100),BZ text(10),BGXW text(10) ) ");
}
IQueryFilter filter = new QueryFilterClass();
//范围内基础图斑(新增坐落信息UpDataJCBSM-基础BSM)
filter.WhereClause = string.Format("ZLDWDM like '{0}%' AND BSM = '{1}'", BGQZLDWDM.ToTrim(), UpDataJCBSM);//定位唯一的一个图斑
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑").FeatureClass as IFeatureClass;
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
ITable itb = fc as ITable;
ICursor cur = itb.Search(filter, true);
IRow row = null;
int bsmIdx = itb.FindField("BSM");
int zldmIdx = itb.FindField("ZLDWDM");
int zlmcIdx = itb.FindField("ZLDWMC");
int qsdmIdx = itb.FindField("QSDWDM");
int qsmcIdx = itb.FindField("QSDWMC");
string bhxxbField = "BGQTBBSM,BGHTBBSM,BGQTBBH,BGHTBBH,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC,BGQQSDWDM,BGHQSDWDM,BGQQSDWMC,BGHQSDWMC,BGQQSXZ,BGHQSXZ,BGQDLBM,BGHDLBM,BGQKCDLBM,BGHKCDLBM,BGQKCXS,BGHKCXS,BGQKCMJ,BGHKCMJ,BGQGDLX,BGHGDLX,BGQGDPDJB,BGHGDPDJB,BGQCZCSXM,BGHCZCSXM,BGQTBXHDM,BGHTBXHDM,BGQZZSXDM,BGHZZSXDM,BGQMSSM,BGHMSSM,BGQGDDB,BGHGDDB,BGMJ,XZQTZLX,BZ,BGXW";
string[] bhxxbfieldArr = bhxxbField.Split(',');
Dictionary<string, int> dicTBBH = new Dictionary<string, int>();
GetMaxTBBH(fc, ref dicTBBH);
GetMaxTBBH(fc2, ref dicTBBH);
DataTable bhxxDt = dbHelper.ExecuteDatatable("BHXXB", string.Format("select * from BHXXB"), true);
List<string> bgqbsmList = new List<string>();
if (bhxxDt != null)
{
foreach (DataRow dr in bhxxDt.Rows)
{
string strBGQBSM = dr["BGQTBBSM"].ToTrim();
if (!bgqbsmList.Contains(strBGQBSM))
bgqbsmList.Add(strBGQBSM);//获取变化信息表中变更前BSM
string strBGHZLDWDM = dr["BGHZLDWDM"].ToTrim();
if (!dicTBBH.ContainsKey(strBGHZLDWDM))
{
dicTBBH.Add(strBGHZLDWDM, dr["BGHTBBH"].ToInt());//变更后坐落单位代码及变更后图斑编号
}
else
{
int bghtbbh = dr["BGHTBBH"].ToInt();
if (dicTBBH[strBGHZLDWDM] < bghtbbh)
dicTBBH[strBGHZLDWDM] = bghtbbh;//获取相同变更后坐落单位代码下的最大变更后图版编号
}
}
}
List<string> strSQL = new List<string>();
int count = itb.RowCount(filter);
int num = 0;
while ((row = cur.NextRow()) != null)//JC_DLTB
{
num++;
string bhxxbValue = string.Empty;
if (zldmIdx == -1) break;
string bsm = row.Value[bsmIdx].ToTrim();
if (bgqbsmList.Contains(bsm)) continue;//过滤掉变化信息表中已存在的
string zldm = row.Value[zldmIdx].ToTrim();//坐落代码
string zlmc = string.Empty;
string qsdm = row.Value[qsdmIdx].ToTrim();//权属代码
string qsmc = string.Empty;
if (qsmcIdx != -1)
qsmc = row.Value[qsmcIdx].ToTrim();
if (zlmcIdx != -1)
zlmc = row.Value[zlmcIdx].ToTrim();//坐落名称
string bghzldm = zldm.Replace(BGQZLDWDM.ToTrim(), BGHZLDWDM.ToTrim());
string bghzlmc = zlmc;
if (!string.IsNullOrWhiteSpace(BGHZLDWMC.ToTrim()))
bghzlmc = zlmc.Replace(BGQZLDWMC.ToTrim(), BGHZLDWMC.ToTrim());//改变后坐落名称
string bghqsdm = qsdm.Replace(BGQZLDWDM.ToTrim(), BGHZLDWDM.ToTrim());
string bghqsmc = qsmc;
if (!string.IsNullOrWhiteSpace(BGHZLDWMC.ToTrim()))
bghqsmc = qsmc.Replace(BGQZLDWMC.ToTrim(), BGHZLDWMC.ToTrim());//改变后权属名称
//填充属性和属性赋值
foreach (var item in bhxxbfieldArr)
{
string name = item.ToTrim().Replace("BGQ", "").Replace("BGH", "");
if (name == "TBBSM")
name = "BSM";
if (item == "BGMJ")
name = "TBMJ";
if (item == "BZ")
name = "Temp_BZ";
int idx = row.Fields.FindField(name);
if (idx != -1)
{
if (item == "BGHTBBSM")
{
bhxxbValue += string.Format("'{0}',", row.Value[idx]);
}
else if (item == "BGHTBBH")
{
string bghTBBH = string.Empty;
if (dicTBBH.ContainsKey(bghzldm))
{
dicTBBH[bghzldm] = dicTBBH[bghzldm] + 1;//最大图斑编号-去最新值
bghTBBH = dicTBBH[bghzldm].ToTrim();
}
else
{ //(变化信息表中的新增村落)新增村
dicTBBH.Add(bghzldm, 1);//图斑编号从一开始
bghTBBH = dicTBBH[bghzldm].ToTrim();
}
bhxxbValue += string.Format("'{0}',", bghTBBH);
}
else if (item == "BGHZLDWDM")
{
bhxxbValue += string.Format("'{0}',", bghzldm);
}
else if (item == "BGHZLDWMC")
{
bhxxbValue += string.Format("'{0}',", bghzlmc);
}
else if (item == "BGHQSDWDM")
{
bhxxbValue += string.Format("'{0}',", bghqsdm);
}
else if (item == "BGHQSDWMC")
{
bhxxbValue += string.Format("'{0}',", bghqsmc);
}
else if (item.EndsWith("MJ"))
{
bhxxbValue += string.Format("{0},", row.Value[idx]);
}
else
{
bhxxbValue += string.Format("'{0}',", row.Value[idx]);
}
}
else if (item == "BZ")
{
bhxxbValue += string.Format("'{0}',", "ZLBG");
}
else if (item == "XZQTZLX")
{
bhxxbValue += string.Format("'{0}',", "0");
}
else if (item == "BGXW")
{
bhxxbValue += string.Format("'{0}',", "1");
}
}
bhxxbValue = bhxxbValue.TrimEnd(',');
string strSQLTemp = string.Format("Insert into BHXXB ({0}) values ({1})", bhxxbField, bhxxbValue);
strSQL.Add(strSQLTemp);
Marshal.ReleaseComObject(row);
}
InsertDB(strSQL, dbPath);
strSQL.Clear();
}
/// <summary>
/// 处理同属性图斑合并
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOK2_Click(object sender, RoutedEventArgs e)
{
try
{
UnionDLTBGX();
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC");
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
DataTable dtbhxx = dbHelper.ExecuteDatatable("BHXXB", "select * from bhxxb", true);
DataTable dtZL = dbHelper.ExecuteDatatable("ZLGroup", "select BGHZLDWDM from bhxxb group by BGHZLDWDM", true);
try
{
dbHelper.BeginTransaction();
foreach (DataRow dr in dtZL.Rows)
{
DataRow[] drs = dtbhxx.Select(string.Format(" BGHZLDWDM='{0}'", dr["BGHZLDWDM"]));
Dictionary<string, int> temp = new Dictionary<string, int>();
Dictionary<string, int> temp3 = new Dictionary<string, int>();
List<int> tbbhs = new List<int>();
int maxTBBH = 0;
foreach (DataRow subdr in drs)
{
int bghtbbh = subdr["BGHTBBH"].ToInt();
if (maxTBBH < bghtbbh)
maxTBBH = bghtbbh;
}
foreach (DataRow subdr in drs)
{
string bghtbbsm = subdr["BGHTBBSM"].ToTrim();
int bghtbbh = subdr["BGHTBBH"].ToInt();
if (!temp.ContainsKey(bghtbbsm))
{
temp.Add(bghtbbsm, bghtbbh);
if (!tbbhs.Contains(bghtbbh))
{
tbbhs.Add(bghtbbh);
}
else
{
maxTBBH++;
temp3.Add(bghtbbsm, maxTBBH);
}
}
}
foreach (var key in temp3.Keys)
{
dbHelper.ExecuteSQL(string.Format("update bhxxb set bghtbbh='{0}' where bghtbbsm='{1}'", temp3[key], key));
IQueryFilter filter = new QueryFilterClass();
filter.WhereClause = string.Format("BGHTBBSM='{0}'", key);
IFeatureCursor cursor = fc.Update(filter, true);
IFeature f = null;
int idx = fc.FindField("BGHTBBH");
while ((f = cursor.NextFeature()) != null)
{
f.Value[idx] = temp3[key].ToTrim();
cursor.UpdateFeature(f);
}
cursor.Flush();
filter.WhereClause = string.Format("BSM='{0}'", key);
cursor = fc2.Update(filter, true);
f = null;
idx = fc2.FindField("TBBH");
while ((f = cursor.NextFeature()) != null)
{
f.Value[idx] = temp3[key].ToTrim();
cursor.UpdateFeature(f);
}
cursor.Flush();
}
}
dbHelper.Commit();
}
catch (Exception)
{
dbHelper.Rollback();
}
MessageHelper.ShowTips("变更完成!");
}
catch (Exception ex)
{
ProgressHelper.CloseProcessBar();
MessageHelper.Show("坐落信息变更失败,请查看系统日志!");
LogAPI.Debug("坐落信息变更时发生异常,异常信息如下:");
LogAPI.Debug(ex);
}
finally
{
loading.Visibility = Visibility.Collapsed;
}
}
/// <summary>
/// 取消按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
/// <summary>
/// 每一条坐落变更信息
/// </summary>
/// <param name="pBGQDM"></param>
/// <param name="pBGQMC"></param>
/// <param name="pBGHDM"></param>
/// <param name="pBGHMC"></param>
private void ExeUpZLInfo(string pBGQDM, string pBGQMC, string pBGHDM, string pBGHMC)
{
try
{
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
if (!dbHelper.TableIsExist("BHXXB"))
{
dbHelper.ExecuteSQL(" Create TABLE BHXXB ( BGQTBBSM text(100),BGHTBBSM text(100),BGQTBBH text(100),BGHTBBH text(100),BGQZLDWDM text(100),BGHZLDWDM text(100)," +
"BGQZLDWMC text(100),BGHZLDWMC text(100),BGQQSDWDM text(100),BGHQSDWDM text(100),BGQQSDWMC text(100),BGHQSDWMC text(100),BGQQSXZ text(100),BGHQSXZ text(100)," +
"BGQDLBM text(100),BGHDLBM text(100),BGQKCDLBM text(100),BGHKCDLBM text(100),BGQKCXS text(100),BGHKCXS text(100),BGQKCMJ NUMERIC,BGHKCMJ NUMERIC,BGQGDLX text(100),BGHGDLX text(100),BGQGDPDJB text(100),BGHGDPDJB text(100),BGQCZCSXM text(100),BGHCZCSXM text(100)," +
"BGQTBXHDM text(100),BGHTBXHDM text(100),BGQZZSXDM text(100),BGHZZSXDM text(100),BGQMSSM text(100),BGHMSSM text(100),BGQGDDB text(100),BGHGDDB text(100)," +
"BGMJ NUMERIC,XZQTZLX text(100),BZ text(10),BGXW text(10) ) ");
}
IQueryFilter filter = new QueryFilterClass();
filter.WhereClause = string.Format("ZLDWDM like '{0}%'", pBGQDM.ToTrim());
IFeatureClass JC_fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑").FeatureClass as IFeatureClass;
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
ITable itb = JC_fc as ITable;
ICursor JC_cur = itb.Search(filter, true);//过滤输入坐落代码改变的部分
IRow row = null;
int bsmIdx = itb.FindField("BSM");
int zldmIdx = itb.FindField("ZLDWDM");
int zlmcIdx = itb.FindField("ZLDWMC");
int qsdmIdx = itb.FindField("QSDWDM");
int qsmcIdx = itb.FindField("QSDWMC");
string bhxxbField = "BGQTBBSM,BGHTBBSM,BGQTBBH,BGHTBBH,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC,BGQQSDWDM,BGHQSDWDM,BGQQSDWMC,BGHQSDWMC,BGQQSXZ,BGHQSXZ,BGQDLBM,BGHDLBM,BGQKCDLBM,BGHKCDLBM,BGQKCXS,BGHKCXS,BGQKCMJ,BGHKCMJ,BGQGDLX,BGHGDLX,BGQGDPDJB,BGHGDPDJB,BGQCZCSXM,BGHCZCSXM,BGQTBXHDM,BGHTBXHDM,BGQZZSXDM,BGHZZSXDM,BGQMSSM,BGHMSSM,BGQGDDB,BGHGDDB,BGMJ,XZQTZLX,BZ,BGXW";
string[] bhxxbfieldArr = bhxxbField.Split(',');
Dictionary<string, int> dicTBBH = new Dictionary<string, int>();
GetMaxTBBH(JC_fc, ref dicTBBH);
GetMaxTBBH(fc2, ref dicTBBH);
DataTable bhxxDt = dbHelper.ExecuteDatatable("BHXXB", string.Format("select * from BHXXB"), true);
List<string> bgqbsmList = new List<string>();
if (bhxxDt != null)
{
foreach (DataRow dr in bhxxDt.Rows)
{
string strBGQBSM = dr["BGQTBBSM"].ToTrim();
if (!bgqbsmList.Contains(strBGQBSM))
bgqbsmList.Add(strBGQBSM);//存储变更前标识码
string strBGHZLDWDM = dr["BGHZLDWDM"].ToTrim();
if (!dicTBBH.ContainsKey(strBGHZLDWDM))
{
dicTBBH.Add(strBGHZLDWDM, dr["BGHTBBH"].ToInt());
}
else
{
int bghtbbh = dr["BGHTBBH"].ToInt();
if (dicTBBH[strBGHZLDWDM] < bghtbbh)
dicTBBH[strBGHZLDWDM] = bghtbbh;
}
}
}
List<string> strSQL = new List<string>();
int count = itb.RowCount(filter);
ProgressHelper.CountProgress = count;
int num = 0;
while ((row = JC_cur.NextRow()) != null)//JC_DLTB
{
num++;
string bhxxbValue = string.Empty;
if (zldmIdx == -1) break;
string bsm = row.Value[bsmIdx].ToTrim();
if (bgqbsmList.Contains(bsm)) continue;
string zldm = row.Value[zldmIdx].ToTrim();
string zlmc = string.Empty;
string qsdm = row.Value[qsdmIdx].ToTrim();
string qsmc = string.Empty;
if (qsmcIdx != -1)
qsmc = row.Value[qsmcIdx].ToTrim();
if (zlmcIdx != -1)
zlmc = row.Value[zlmcIdx].ToTrim();
string bghzldm = zldm.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim());
string bghzlmc = zlmc;
if (!string.IsNullOrWhiteSpace(pBGHMC.ToTrim()))
bghzlmc = zlmc.Replace(pBGQMC.ToTrim(), pBGHMC.ToTrim());
string bghqsdm = qsdm.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim());
string bghqsmc = qsmc;
if (!string.IsNullOrWhiteSpace(pBGHMC.ToTrim()))
bghqsmc = qsmc.Replace(pBGQMC.ToTrim(), pBGHMC.ToTrim());
foreach (var item in bhxxbfieldArr)
{
string name = item.ToTrim().Replace("BGQ", "").Replace("BGH", "");
if (name == "TBBSM")
name = "BSM";
if (item == "BGMJ")
name = "TBMJ";
if (item == "BZ")
name = "Temp_BZ";
int idx = row.Fields.FindField(name);
if (idx != -1)
{
if (item == "BGHTBBSM")
{
bhxxbValue += string.Format("'{0}',", row.Value[idx]);
}
else if (item == "BGHTBBH")
{
string bghTBBH = string.Empty;
if (dicTBBH.ContainsKey(bghzldm))
{
dicTBBH[bghzldm] = dicTBBH[bghzldm] + 1;
bghTBBH = dicTBBH[bghzldm].ToTrim();
}
else
{//新增村
dicTBBH.Add(bghzldm, 1);
bghTBBH = dicTBBH[bghzldm].ToTrim();
}
bhxxbValue += string.Format("'{0}',", bghTBBH);
}
else if (item == "BGHZLDWDM")
{
bhxxbValue += string.Format("'{0}',", bghzldm);
}
else if (item == "BGHZLDWMC")
{
bhxxbValue += string.Format("'{0}',", bghzlmc);
}
else if (item == "BGHQSDWDM")
{
bhxxbValue += string.Format("'{0}',", bghqsdm);
}
else if (item == "BGHQSDWMC")
{
bhxxbValue += string.Format("'{0}',", bghqsmc);
}
else if (item.EndsWith("MJ"))
{
bhxxbValue += string.Format("{0},", row.Value[idx]);
}
else
{
bhxxbValue += string.Format("'{0}',", row.Value[idx]);
}
}
else if (item == "BZ")
{
bhxxbValue += string.Format("'{0}',", "ZLBG");
}
else if (item == "XZQTZLX")
{
bhxxbValue += string.Format("'{0}',", "0");
}
else if (item == "BGXW")
{
bhxxbValue += string.Format("'{0}',", "1");
}
}
bhxxbValue = bhxxbValue.TrimEnd(',');
string strSQLTemp = string.Format("Insert into BHXXB ({0}) values ({1})", bhxxbField, bhxxbValue);
strSQL.Add(strSQLTemp);
Marshal.ReleaseComObject(row);
if (num % 500 == 0 || num == count)
{
InsertDB(strSQL, dbPath);
strSQL.Clear();
ProgressHelper.CurrentProgress = num;
}
}
if (strSQL.Count != 0)
InsertDB(strSQL, dbPath);
strSQL.Clear();
#region 更新坐落单位代码 名称
BGHZLExecute(pBGQDM, pBGQMC, pBGHDM, pBGHMC);
#endregion
}
catch (Exception ex)
{
ProgressHelper.CloseProcessBar();
MessageHelper.Show("坐落信息变更失败,请查看系统日志!");
LogAPI.Debug("坐落信息变更时发生异常,异常信息如下:");
LogAPI.Debug(ex);
}
finally
{
loading.Visibility = Visibility.Collapsed;
}
}
private void UnionDLTBGX()
{
try
{
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\GXGC";
if (!Directory.Exists(gdbFolder))
{
Directory.CreateDirectory(gdbFolder);
}
try
{
BGHelper.DelectDir(gdbFolder);//能删除就删除 删除报错不处理
}
catch
{ }
IWorkspaceFactory pFtWsFct = null;
IWorkspaceName workspaceName = null;
pFtWsFct = new FileGDBWorkspaceFactory();
string gdbFileName = Guid.NewGuid().ToString() + ".gdb";
string path = Path.Combine(gdbFolder, gdbFileName);
workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0);
IFeatureClass _GxFc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
IFeatureLayer memeory_dltbgx1 = GeoDBAPI.CreateFeatureLayerInmemeory("mem_PDTGX", "坡度图更新", (_GxFc as IGeoDataset).SpatialReference, _GxFc.ShapeType, _GxFc.Fields);
IQueryFilter filter2 = new QueryFilterClass();
filter2.WhereClause = " DLBM ='1003' or DLBM='1004' or DLBM ='1006' or DLBM='1101' or DLBM='1107' or DLBM='1107A'";
InsertDataToMemeoryLayer(_GxFc, memeory_dltbgx1.FeatureClass, filter2);
(_GxFc as ITable).DeleteSearchedRows(new QueryFilterClass() { WhereClause = " DLBM ='1003' or DLBM='1004' or DLBM ='1006' or DLBM='1101' or DLBM='1107' or DLBM='1107A'" });
IFeatureLayer tempLayer = null;
GPParamClass gPParamClass = new GPParamClass();
gPParamClass = new GPParamClass();
gPParamClass.FirstFeatureClass = _GxFc;
gPParamClass.OutFeatureClassPath = path + "\\" + "DLTBGX_Diss";
gPParamClass.ListDissolveFiledName = new List<string>() { "DLBM", "DLMC", "QSXZ", "QSDWDM", "QSDWMC", "ZLDWDM", "ZLDWMC", "KCDLBM", "KCXS", "GDLX", "GDPDJB", "XZDWKD", "TBXHDM", "TBXHMC", "ZZSXDM", "ZZSXMC", "GDDB", "FRDBS", "CZCSXM", "MSSM", "HDMC", "XZQTZLX" };//
gPParamClass.IsGetOutPutFeature = true;
GeoprocessorHelper.DissolveAnalysis(gPParamClass, ref tempLayer);
(_GxFc as ITable).DeleteSearchedRows(null);
InsertDataToMemeoryLayer(memeory_dltbgx1.FeatureClass, _GxFc);
InsertDataToMemeoryLayer(tempLayer.FeatureClass, _GxFc);
IFeatureCursor gxCursor = _GxFc.Update(null, true);
int kcdlbmIndex = _GxFc.FindField("GXSJ");
IFeature gxFeature = null;
while ((gxFeature = gxCursor.NextFeature()) != null)
{
gxFeature.Value[kcdlbmIndex] = new DateTime(DateTime.Now.Year - 1, 12, 31);
gxCursor.UpdateFeature(gxFeature);
}
gxCursor.Flush();
BGHelper.GenerateGxgcData();
}
catch (Exception ex)
{
LogAPI.Debug(ex.Message);
throw;
}
}
/// <summary>
/// 指定图斑修改坐落信息变更
/// </summary>
private void SelUpdateZLInfo(string pBGHDM, string pBGHMC, string BGQBSM, string BGHBSM, string BGQTBBH, string BGHTBBH, int GXOID)
{
IRDBHelper rdbHelper = null;
string sql = string.Empty;
IQueryFilter filter = new QueryFilterClass();
try
{
IFeatureClass gxfc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
int QSDWDMIndex = gxfc.FindField("QSDWDM");
int QSDWMCIndex = gxfc.FindField("QSDWMC");
string sqdwdm = gxfc.GetFeature(GXOID).Value[QSDWDMIndex].ToString();
string sqdwmc = gxfc.GetFeature(GXOID).Value[QSDWMCIndex].ToString();
//(不用区分村级与行政区)不区分县区村
IFeatureClass DLTBGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
if (DLTBGCFC != null)
{
//更新层BSM作为唯一条件
sql = $"UPDATE DLTBGX SET ZLDWDM ='{pBGHDM.ToTrim()}',ZLDWMC='{pBGHMC.ToTrim()}',QSDWDM ='{sqdwdm.ToTrim()}',QSDWMC='{sqdwmc.ToTrim()}' WHERE BSM='{BGHBSM}'";
(DLTBGCFC as FeatureClass).Workspace.ExecuteSQL(sql);
}
IFeatureClass TempGXGC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC");
if (TempGXGC != null)
{
//变更后BSM作为唯一条件
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}',BGHQSDWDM='{sqdwdm.ToTrim()}',BGHQSDWMC='{sqdwmc.ToTrim()}' WHERE BGHTBBSM='{BGHBSM}' ";
(TempGXGC as FeatureClass).Workspace.ExecuteSQL(sql);
}
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
if (rdbHelper.TableIsExist("BHXXB"))
{
//单图斑坐落信息变更确认修改变化信息表数据根据(变更前后BSM,变更前后TBBH)来确定当前唯一数据
sql = $"UPDATE BHXXB SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}',BGHQSDWDM='{sqdwdm.ToTrim()}',BGHQSDWMC='{sqdwmc.ToTrim()}' WHERE BGQTBBSM='{BGQBSM}' and BGHTBBSM='{BGHBSM}' and BGQTBBH='{BGQTBBH}' and BGHTBBH='{BGHTBBH}' ";
rdbHelper.ExecuteNonQuery(sql);
}
}
catch (Exception ex)
{
ProgressHelper.CloseProcessBar();
LogAPI.Debug("坐落属性赋值失败:" + ex.Message);
MessageHelper.ShowError("坐落属性赋值失败:" + ex.Message);
}
finally
{
if (rdbHelper != null)
{
rdbHelper.DisConnect();
}
}
}
/// <summary>
/// 更新坐落单位代码 名称
/// </summary>
/// <param name="pBGQDM"></param>
/// <param name="pBGQMC"></param>
/// <param name="pBGHDM"></param>
/// <param name="pBGHMC"></param>
public void BGHZLExecute(string pBGQDM, string pBGQMC, string pBGHDM, string pBGHMC)
{
//IWorkspaceAPI wsAPI = null;
//IWorkspace pWorkspace = null;
IRDBHelper rdbHelper = null;
string sql = string.Empty;
IQueryFilter filter = new QueryFilterClass();
IRow row = null;
try
{
//string gdbpath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetSchemeDBPath();
//wsAPI = new WorkspaceAPI(gdbpath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile);
//pWorkspace = wsAPI.CurrentWorkspace;
IFeatureClass DlTBGXFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
if (DlTBGXFC != null)
{
ProgressHelper.Message = string.Format("【地类图斑更新层】正在进行坐落属性赋值,请稍后...");
if (rbtCJ.IsChecked.Value)//村级调查区
{
sql = $"UPDATE DLTBGX SET ZLDWDM ='{pBGHDM.ToTrim()}',ZLDWMC='{pBGHMC.ToTrim()}' WHERE ZLDWDM='{pBGQDM.ToTrim()}' and ZLDWMC='{pBGQMC.Trim()}' ";
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql);
sql = $"UPDATE DLTBGX SET QSDWDM ='{pBGHDM.ToTrim()}',QSDWMC='{pBGHMC.ToTrim()}' WHERE QSDWDM='{pBGQDM.ToTrim()}' and QSDWMC='{pBGQMC.Trim()}' ";
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql);
}
else//行政区(镇级)
{
filter.WhereClause = string.Format("ZLDWDM like '{0}%'", pBGQDM.ToTrim());
filter.SubFields = "OBJECTID,BSM,ZLDWDM,QSDWDM";
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX");
ITable itb = fc as ITable;
ICursor cur = itb.Search(filter, true);
Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
int iBSM = itb.FindField("BSM");
int iZLDWDM = itb.FindField("ZLDWDM");
int iQSDWDM = itb.FindField("QSDWDM");
while ((row = cur.NextRow()) != null)
{
keyValuePairs.Add(row.OID, $"{row.Value[iZLDWDM]},{row.Value[iQSDWDM]},{row.Value[iBSM]}");//C# 6.0字符串拼接
}
foreach (var item in keyValuePairs)
{
var ZLDWDM = item.Value.Split(',')[0];
var QSDWDM = item.Value.Split(',')[1];
var BSM = item.Value.Split(',')[2];
if (pBGQDM.Length == 6 && pBGHDM.Length == 6)
{
sql = $"UPDATE DLTBGX SET BSM='{BSM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',ZLDWDM='{ZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',QSDWDM='{QSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} ";
}
else
{
sql = $"UPDATE DLTBGX SET ZLDWDM='{ZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',QSDWDM='{QSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} ";
}
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql);
}
}
}
IFeatureClass DlTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC");
if (DlTBGXGCFC != null)
{
ProgressHelper.Message = string.Format("【地类图斑更新过程层】正在进行坐落属性赋值,请稍后...");
if (rbtCJ.IsChecked.Value)
{
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}' WHERE BGQZLDWDM='{pBGQDM.ToTrim()}' and BGQZLDWMC='{pBGQMC.Trim()}' ";
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql);
sql = $"UPDATE DLTBGXGC SET BGHQSDWDM='{pBGHDM.ToTrim()}',BGHQSDWMC='{pBGHMC.ToTrim()}' WHERE BGQQSDWDM='{pBGQDM.ToTrim()}' and BGQQSDWMC='{pBGQMC.Trim()}' ";
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql);
}
else
{
filter.WhereClause = string.Format("BGQZLDWDM like '{0}%'", pBGQDM.ToTrim());
filter.SubFields = "OBJECTID,BGHTBBSM,BGHZLDWDM,BGHQSDWDM";
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC");
ITable itb = fc as ITable;
ICursor cur = itb.Search(filter, true);
Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
int iBGHTBBSM = itb.FindField("BGHTBBSM");
int iBGHZLDWDM = itb.FindField("BGHZLDWDM");
int iBGHQSDWDM = itb.FindField("BGHQSDWDM");
while ((row = cur.NextRow()) != null)
{
keyValuePairs.Add(row.OID, $"{row.Value[iBGHZLDWDM]},{row.Value[iBGHQSDWDM]},{row.Value[iBGHTBBSM]}");
}
foreach (var item in keyValuePairs)
{
var BGHZLDWDM = item.Value.Split(',')[0];
var BGHQSDWDM = item.Value.Split(',')[1];
var BGHTBBSM = item.Value.Split(',')[2];
if (pBGQDM.Length == 6 && pBGHDM.Length == 6)
{
sql = $"UPDATE DLTBGXGC SET BGHTBBSM='{BGHTBBSM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHZLDWDM='{BGHZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHQSDWDM='{BGHQSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} ";
}
else
{
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{BGHZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHQSDWDM='{BGHQSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} ";
}
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql);
}
}
}
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
if (rdbHelper.TableIsExist("BHXXB"))
{
ProgressHelper.Message = string.Format("【变化信息表】正在进行坐落属性赋值,请稍后...");
if (rbtCJ.IsChecked.Value)
{
sql = $"UPDATE BHXXB SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}' WHERE BGQZLDWDM='{pBGQDM.ToTrim()}' and BGQZLDWMC='{pBGQMC.Trim()}' ";
rdbHelper.ExecuteNonQuery(sql);
sql = $"UPDATE BHXXB SET BGHQSDWDM='{pBGHDM.ToTrim()}',BGHQSDWMC='{pBGHMC.ToTrim()}' WHERE BGQQSDWDM='{pBGQDM.ToTrim()}' and BGQQSDWMC='{pBGQMC.Trim()}' ";
rdbHelper.ExecuteNonQuery(sql);
}
else
{
if (pBGQDM.Length == 6 && pBGHDM.Length == 6)
{
sql = $"UPDATE BHXXB SET BGHTBBSM=replace(BGHTBBSM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHZLDWDM=replace(BGHZLDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHQSDWDM=replace(BGHQSDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}') ";
}
else
{
sql = $"UPDATE BHXXB SET BGHZLDWDM=replace(BGHZLDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHQSDWDM=replace(BGHQSDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}') WHERE BGHZLDWDM like '{pBGQDM.ToTrim()}%' ";
}
rdbHelper.ExecuteNonQuery(sql);
}
}
}
catch (Exception ex)
{
ProgressHelper.CloseProcessBar();
LogAPI.Debug("坐落属性赋值失败:" + ex.Message);
MessageHelper.ShowError("坐落属性赋值失败:" + ex.Message);
}
finally
{
if (rdbHelper != null)
{
rdbHelper.DisConnect();
}
}
}
/// <summary>
/// 多线程插入数据到db中
/// </summary>
/// <param name="listSQL"></param>
/// <param name="dbPath"></param>
private void InsertDB(List<string> listSQL, string dbPath)
{
try
{
using (BlockingCollection<string> blockingCollection = new BlockingCollection<string>())
{
listSQL.ForEach(x => blockingCollection.Add(x));
blockingCollection.CompleteAdding();
int taskNum = 5;
Task[] tasks = new Task[taskNum];
for (int i = 0; i < taskNum; i++)
{
tasks[i] = Task.Factory.StartNew(() =>
{
ExcuteThead(blockingCollection, dbPath);
});
}
Task.WaitAll(tasks);
for (int i = 0; i < taskNum; i++)
{
tasks[i].Dispose();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
private void ExcuteThead(BlockingCollection<string> blockingCollection, string dbPath)
{
IRDBHelper rdbHelper = null;
string sqlDe = string.Empty;
try
{
rdbHelper = RDBFactory.CreateDbHelper(string.Format("Data Source={0};Initial Catalog=sqlite;Integrated Security=True;Max Pool Size=10;", dbPath), DatabaseType.SQLite);
if (rdbHelper == null)
{
throw new Exception("执行成果接收时打开数据库连接字符串失败!");
}
rdbHelper.BeginTransaction();
foreach (string sql in blockingCollection.GetConsumingEnumerable())
{
sqlDe = sql;
rdbHelper.ExecuteNonQueryWithException(sql, CommandType.Text);
}
rdbHelper.Commit();
}
catch (Exception ex)
{
if (rdbHelper != null)
rdbHelper.Rollback();
LogAPI.Debug(ex);
throw ex;
}
finally
{
if (rdbHelper != null)
rdbHelper.DisConnect();
}
}
private void InsertDataToMemeoryLayer(IFeatureClass pSource, IFeatureClass pTarget, IQueryFilter pFilter = null)
{
try
{
if (pSource == null || pTarget == null) return;
IFeatureClassAPI fcAPI = new FeatureClassAPI(pSource);
if (pTarget != null)
fcAPI.FcToFc(pTarget, pFilter, false);
}
catch (Exception ex)
{
LogAPI.Debug("插入数据失败:");
LogAPI.Debug(ex);
}
}
private static void GetMaxTBBH(IFeatureClass fc, ref Dictionary<string, int> result)
{
try
{
ICursor cursor = (fc as ITable).Search(new QueryFilterClass() { SubFields = "ZLDWDM,TBBH" }, true);
IRow row = null;
int zlIndex = fc.FindField("ZLDWDM");
int bhIndex = fc.FindField("TBBH");
while ((row = cursor.NextRow()) != null)
{
if (zlIndex != -1 && bhIndex != -1)
{
string zl = row.Value[zlIndex].ToTrim();
if (string.IsNullOrWhiteSpace(zl)) continue;
zl = zl.Replace(zl.Substring(0, 6), (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE);
int tbbh = 0;
int.TryParse(row.Value[bhIndex].ToString(), out tbbh);
if (result.ContainsKey(zl))
{
if (result[zl] < tbbh)
result[zl] = tbbh;
}
else
{
result.Add(zl, tbbh);
}
}
}
}
catch (Exception ex)
{
LogAPI.Debug("获取图层图斑编号失败:" + ex.Message);
throw;
}
}
}
}