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.
175 lines
6.2 KiB
175 lines
6.2 KiB
using ESRI.ArcGIS.ADF; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.EngineEditor; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Reflection; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.Platform; |
|
using System.Runtime.InteropServices; |
|
using KGIS.Framework.Maps; |
|
|
|
namespace Kingo.Plugin.EngineEditor.Commands.Tools |
|
{ |
|
public class CmdUpdateZZBGJCBHTool : BaseToolCmd |
|
{ |
|
IFeatureLayer m_Layer; |
|
public override void OnCreate(object hook) |
|
{ |
|
base.OnCreate(hook); |
|
} |
|
public override bool Deactivate() |
|
{ |
|
base.Deactivate(); |
|
this.m_deactivate = true; |
|
return this.m_deactivate; |
|
} |
|
public override void OnClick() |
|
{ |
|
base.OnClick(); |
|
//if (mapService == null) |
|
// mapService = MapsManager.Instance.MapService; |
|
ICursor pCur = null; |
|
IRow pRow = null; |
|
IFeatureCursor InsertCursor = null; |
|
IFeature feature = null; |
|
try |
|
{ |
|
m_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("自主变更图斑"); |
|
Platform.Instance.Progress.ShowProgressBar("正在更新自主变更图斑监测编号……"); |
|
string where = ""; |
|
IQueryDef pQDef = ((m_Layer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace).CreateQueryDef(); |
|
pQDef.Tables = "BHTB"; |
|
pQDef.WhereClause = "SJLY='2' GROUP BY JCBH having count(*)>1"; |
|
pQDef.SubFields = "JCBH,count(*)"; |
|
pCur = pQDef.Evaluate(); |
|
while ((pRow = pCur.NextRow()) != null) |
|
{ |
|
where += "'" + pRow.get_Value(0).ToString() + "',"; |
|
} |
|
if (!string.IsNullOrEmpty(where)) |
|
{ |
|
where = where.TrimEnd(','); |
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
queryFilter.WhereClause = "JCBH in (" + where + ")"; |
|
InsertCursor = m_Layer.FeatureClass.Update(queryFilter, true); |
|
while ((feature = InsertCursor.NextFeature()) != null) |
|
{ |
|
string jcbh = GetMaxJCBH(m_Layer.FeatureClass, feature.Value[feature.Fields.FindField("XZQDM")].ToString()); |
|
feature.Value[feature.Fields.FindField("JCBH")] = jcbh; |
|
InsertCursor.UpdateFeature(feature); |
|
} |
|
InsertCursor.Flush(); |
|
} |
|
Platform.Instance.Progress.CloseProgressBar(); |
|
MessageHelper.Show("更新成功!"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Platform.Instance.Progress.CloseProgressBar(); |
|
LogAPI.Debug(ex); |
|
MessageHelper.ShowError("更新失败!"); |
|
} |
|
finally |
|
{ |
|
if (InsertCursor!=null) |
|
{ |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(InsertCursor); |
|
} |
|
} |
|
} |
|
private int maxXH = 0; |
|
/// <summary> |
|
/// 生成JCBH |
|
/// </summary> |
|
/// <param name="fc"></param> |
|
/// <param name="xzqdm"></param> |
|
/// <returns></returns> |
|
private string GetMaxJCBH(IFeatureClass fc, string xzqdm) |
|
{ |
|
string JCBH = ""; |
|
string start_jcbh = xzqdm + "DF"; |
|
if (maxXH > 0) |
|
{ |
|
maxXH++; |
|
} |
|
else |
|
{ |
|
IQueryFilter QueryFilter = new QueryFilterClass(); |
|
QueryFilter.WhereClause = "SJLY='2'"; |
|
if (fc.FeatureCount(QueryFilter) == 0) |
|
{ |
|
maxXH = 1; |
|
} |
|
else |
|
{ |
|
int JCBHIndex = fc.FindField("JCBH"); |
|
ITable table = (ITable)fc; |
|
// 创建一个ITableSort接口对象 |
|
ITableSort tableSort = new TableSortClass(); |
|
tableSort.Table = table; |
|
tableSort.QueryFilter = QueryFilter; |
|
tableSort.Fields = "JCBH"; |
|
tableSort.set_Ascending("JCBH", false); |
|
tableSort.Sort(null); |
|
ICursor cursor = tableSort.Rows; |
|
IRow row = cursor.NextRow(); |
|
if (row != null) |
|
{ |
|
int maxBSM = 0; |
|
int currBSM = 0; |
|
string BSMStr = row.Value[JCBHIndex].ToString(); |
|
string subBSMStr = BSMStr.Substring(8); |
|
try |
|
{ |
|
currBSM = Convert.ToInt32(subBSMStr); |
|
} |
|
catch (Exception) |
|
{ |
|
return JCBH; |
|
} |
|
if (currBSM > maxBSM) maxBSM = currBSM; |
|
maxBSM++; |
|
maxXH = maxBSM; |
|
} |
|
} |
|
} |
|
int zeroNum = 5 - maxXH.ToString().Length; |
|
string maxStr = maxXH.ToString(); |
|
for (int i = 0; i < zeroNum; i++) |
|
{ |
|
maxStr = 0 + maxStr; |
|
} |
|
JCBH = start_jcbh + maxStr; |
|
return JCBH; |
|
|
|
} |
|
public override bool Enabled |
|
{ |
|
get |
|
{ |
|
//if (m_pEditor == null) |
|
//{ |
|
// return false; |
|
//} |
|
//if (m_pEditor.EditState != esriEngineEditState.esriEngineStateEditing) |
|
//{ return false; } |
|
//if ((m_pEditor as EngineEditorClass).TargetLayer == null) |
|
//{ return false; } |
|
return true; |
|
} |
|
} |
|
public override void Refresh(int hDC) |
|
{ |
|
} |
|
} |
|
}
|
|
|