using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Framework.AE; using KGIS.Framework.AE.ExtensionMethod; 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 Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Helper; using Kingo.PluginServiceInterface.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; using UIShell.OSGi; namespace Kingo.Plugin.General.Helper { #region 新疆 public class DataOperationHelper_65 : DataOperationHelper_Default { private ProjectInfo projectInfo { get { return MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; } } public DataOperationHelper_65(TreeView _tvPackges) : base(_tvPackges) { } #region 保存单图斑和独立图层数据 /// /// 保存单图斑和独立图层数据 /// /// /// /// public override void SaveBGFWAndDLTC(string tbbsm, string BSM, IRDBHelper rdbHelper, IFeature feature) { try { DataTable dataTableDetailjson = rdbHelper.ExecuteDatatable("detailjson", $"select * from detailjson where tbbsm = '{tbbsm}' ", true); DataTable dataTableWYRW = rdbHelper.ExecuteDatatable("wyrw", $"select JCBH from wyrw where tbbsm = '{tbbsm}' ", true); ILayer layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("基础_地类图斑"); ILayer layerPodu = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("基础_省级下发坡度图"); if (string.IsNullOrWhiteSpace(tbbsm) || string.IsNullOrWhiteSpace(BSM)) return;//图斑标识码和标识码不可为空 //判定DTBDLTBGX表中是否有XZGDFJ列 没有则添加 DataTable dataTableDTBDLTB = rdbHelper.ExecuteDatatable("DTBDLTBGX", "select * from DTBDLTBGX", true); if (dataTableDTBDLTB != null) { if (!dataTableDTBDLTB.Columns.Contains("XZGDFJ")) { rdbHelper.ExecuteSQL(@"ALTER TABLE DTBDLTBGX ADD COLUMN XZGDFJ text(200);"); } } string xzqdm = tbbsm.Substring(0, 6); rdbHelper.ExecuteNonQueryWithException($"delete from DTBLSYDGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBGFBQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBTTQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBCCWJQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBCZCDYDGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBLMFWGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from PZWJ where bsm='{BSM}'", CommandType.Text); //rdbHelper.ExecuteNonQueryWithException(string.Format("delete from fjgx where tbbsm='{0}'", BSM), CommandType.Text); string excuteSQL = "UPDATE DTBDLTBGX SET {0} WHERE BSM='{1}'"; List listField = new List() { "TBBSM", "TBYBH", "DLBM", "KCDLBM", "QSXZ", "QSDWDM", "QSDWMC", "ZLDWDM", "ZLDWMC", "GDLX", "XZDWKD", "TBXHDM", "ZZSXDM", "TBXHMC", "GDDB", "CZCSXM", "SJNF", "FRDBS", "MSSM", "EGeometry", "DDTCBZ", "DDTCMC", "SFGX", "WBGYY1", "WBGYY", "SFJZ", "QKSM", "LJLX", "YWTBSM", "NBWQKSM", "SHLZQKSM", "LNGDZB", "SDMSSM", "YDYHFL", "ZGQKSM", "BZ", "SFXML", "XMMC", "XMLX", "XMBH", "DKMC", "CZCTBBH", "LC", "NF", "XZGDFJ", "GXSJ", "LJBZ", "JZYBH", "LJTBBH" }; //独立图层代码 string ddtcbz = string.Empty; string ddtcmc = string.Empty; //城镇村属性码 string czcsxm = string.Empty; //地类编码 string dlbm = string.Empty; //权属性质 string qsxz = string.Empty; //权属单位代码 string qsdwdm = string.Empty; //权属单位名称 string qsdwmc = string.Empty; //坐落单位代码 string zldwdm = string.Empty; //坐落单位名称 string zldwmc = string.Empty; //项目类型 string xmlx = string.Empty; //种指属性代码 string zzsxdm = string.Empty; //图斑细化代码 string tbxhdm = string.Empty; //未变更原因描述 string wbgyyms = string.Empty; //数据年份 string sjnf = string.Empty; //求椭圆面积 double mj = Math.Round(feature.ShapeCopy.GetEllipseArea(), 2); //变更后值 string bgHValue = $"jkry='{(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).UserName}',tbmj={mj},tbdlmj={mj},gxsj='{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}', jym = '{GetJym(feature)}', "; //构建字段值 foreach (string item in listField) { int index = feature.Fields.FindField(item); if (index <= -1) { continue; } object obj = feature.get_Value(index); if (!(obj is DBNull) && !string.IsNullOrWhiteSpace(obj.ToString())) { if (item.Equals("ddtcbz", StringComparison.CurrentCultureIgnoreCase)) { ddtcbz = obj.ToString(); } if (item.Equals("ddtcmc", StringComparison.CurrentCultureIgnoreCase)) { ddtcmc = obj.ToString(); } if (item.Equals("CZCSXM", StringComparison.CurrentCultureIgnoreCase)) { czcsxm = obj.ToString(); } } if (item.Equals("XMLX")) { xmlx = obj == null ? "" : obj.ToString(); } if (item.Equals("QSXZ")) { qsxz = obj == null ? "" : obj.ToString(); } if (item.Equals("DLBM")) { dlbm = obj == null ? "" : obj.ToString(); } else if (item.Equals("ZZSXDM")) { zzsxdm = obj == null ? "" : obj.ToString(); } else if (item.Equals("TBXHDM")) tbxhdm = obj == null ? "" : obj.ToString(); else if (item.Equals("SJNF")) sjnf = obj == null ? "" : obj.ToString(); IField field = feature.Fields.Field[index]; switch (field.Type) { case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeBlob: if (obj == null || obj == DBNull.Value) { bgHValue += item + "=0,"; } else { bgHValue += item + "=" + obj + ","; } break; default: if (item.Equals("KCDLBM", StringComparison.CurrentCultureIgnoreCase)) { if (!dlbm.StartsWith("01")) { bgHValue += item + "='" + "" + "',"; } else { bgHValue += item + "='" + obj + "',"; } } else if (item.Equals("WBGYY1", StringComparison.CurrentCultureIgnoreCase)) { //if (string.IsNullOrEmpty(obj.ToString())) wbgyyms = obj.ToString(); } else if (item.Equals("WBGYY", StringComparison.CurrentCultureIgnoreCase)) { if (obj.ToString() == "其他") bgHValue += item + "='" + wbgyyms + "',"; else bgHValue += item + "='" + obj + "',"; } else if (item.Equals("GDLX", StringComparison.CurrentCultureIgnoreCase)) { bgHValue += item + "='" + obj + "',"; if (obj != null && (obj.ToString().Equals("TT") || obj.ToString().Equals("PD"))) { string gdpdjb = ""; int gdpdjbIndex = feature.Fields.FindField("GDPDJB"); if (gdpdjbIndex > -1) { object gdpdjbValue = feature.get_Value(gdpdjbIndex); if (gdpdjbValue != null && !string.IsNullOrEmpty(gdpdjbValue.ToString())) { gdpdjb = gdpdjbValue.ToString(); } else gdpdjb = GetPojb(feature, layerPodu); } else gdpdjb = GetPojb(feature, layerPodu); double gdkcxs = DTBDBLoadHelper.GetTKXS(gdpdjb, obj.ToString()); double kcmj = gdkcxs * mj; double tbdlmj = mj - kcmj; bgHValue += $"gdpdjb = '{gdpdjb}',kcxs = {gdkcxs}, kcmj = {kcmj}, tbdlmj = {tbdlmj}, "; } } else if ((item.Equals("JZYBH", StringComparison.CurrentCultureIgnoreCase) || item.Equals("TBYBH", StringComparison.CurrentCultureIgnoreCase)) && (obj == null || string.IsNullOrEmpty(obj.ToString()))) { string JZYBH = string.Empty; if (CurrentWYRWTB != null) JZYBH = CurrentWYRWTB.JCBH; else if(dataTableWYRW != null && dataTableWYRW.Rows.Count > 0) { JZYBH = dataTableWYRW.Rows[0]["JCBH"].ToString(); } obj = JZYBH; bgHValue += item + "='" + obj + "',"; feature.set_Value(index, obj); } else if (item.Equals("LJTBBH", StringComparison.CurrentCultureIgnoreCase) && (obj == null || string.IsNullOrEmpty(obj.ToString()))) { if (dataTableDetailjson != null && dataTableDetailjson.Rows.Count > 0) { for (int i = 0; i < dataTableDetailjson.Rows.Count; i++) { if (dataTableDetailjson.Rows[i]["Name"].ToString() == "类举图斑编号" || dataTableDetailjson.Rows[i]["Name"].ToString() == "LJTBBH") { obj = dataTableDetailjson.Rows[i]["Value"].ToString(); bgHValue += item + "='" + obj + "',"; feature.set_Value(index, obj); break; } } } } else { bgHValue += item + "='" + obj + "',"; } break; } } feature.Store(); string sadff = string.Format(excuteSQL, bgHValue.TrimEnd(','), BSM); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, bgHValue.TrimEnd(','), BSM), CommandType.Text); //地类名称 string dlmc = string.Empty; DataDicTionary dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.DLBM).FirstOrDefault(x => x.CODE.Equals(dlbm)); if (dataDicTionary != null) { dlmc = dataDicTionary.NAME; } //种植属性名称 string zzsxmc = string.Empty; dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.ZZSX).FirstOrDefault(x => x.CODE.Equals(zzsxdm)); if (dataDicTionary != null) { zzsxmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}' where bsm='{BSM}'", CommandType.Text); //单独图层名称 dataDicTionary = Platform.Instance.DicHelper.GetAllDic().FirstOrDefault(x => x.CODE.Equals(ddtcbz)); if (dataDicTionary != null) { ddtcmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}' where bsm='{BSM}'", CommandType.Text); //图斑细化名称 string tbxhmc = string.Empty; dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.TBXHLX).FirstOrDefault(x => x.CODE.Equals(tbxhdm)); if (dataDicTionary != null) { tbxhmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}',tbxhmc='{tbxhmc}',qsxz='{qsxz}' where bsm='{BSM}'", CommandType.Text); //保存独立图层代码 switch (ddtcbz) { case "1301"://临时用地2099010100 DataTable dataTable = IRowToDataTable(feature as IRow); if (dataTable != null && dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBLSYDGX (BSM, DDTCBZ, DDTCMC, YSDM, GLTBBSM, PZWJMC, PZWH, TBMJ, PZMJ, YTFL, JTXMYT, PZRQ, YQSX, TDSYHT, BZ, GXSJ) VALUES('{BSM}', '{ddtcbz}', '{ddtcmc}', '2099010100', '{BSM}', '{dr["PZWJMC_LSYD"]}', '{dr["PZWH_LSYD"]}', {dr["TBMJ"]}, {dr["TBMJ"]}, '{dr["YTFL_LSYD"]}', '{dr["JTXMYT_LSYD"]}', '{dr["PZRQ_LSYD"]}', '{dr["YQSX_LSYD"]}', '{dr["TDSYHT_LSYD"]}', '{dr["BZ"]}', '{dr["GXSJ"]}')", CommandType.Text); object obj = feature.get_Value(feature.Fields.FindField("PZWJ_LSYD")); if (obj != null && !(obj is DBNull)) { IMemoryBlobStreamVariant varBlobStream = (IMemoryBlobStreamVariant)obj; object obj1 = null; varBlobStream.ExportToVariant(out obj1); rdbHelper.ExecuteNonQueryWithException($"INSERT INTO PZWJ(BSM, Name, Path, Extension) VALUES('{BSM}', '{dr["PZWJMC_LSYD"]}', '', '')", CommandType.Text); IDbDataParameter[] parameters = new IDbDataParameter[1]; parameters[0] = new System.Data.SQLite.SQLiteParameter("FileContent", DbType.Binary) { Value = obj1 }; rdbHelper.ExecuteNonQueryWithException($"update PZWJ SET FileContent=@FileContent where bsm='{BSM}'", CommandType.Text, parameters); } } break; case "1302"://光伏板区2099070100 dataTable = IRowToDataTable(feature as IRow); if (dataTable != null && dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBGFBQGX(BSM, DDTCBZ, DDTCMC, YSDM, XMMC, XMGM, QYMJ, PZYDSJ, BZ, GXSJ) VALUES('{BSM}', '{ddtcbz}', '{ddtcmc}', '2099070100', '{dr["XMMC_GFBQ"]}', '{dr["XMGM_GFBQ"]}', {dr["TBMJ"]}, '{dr["PZYDSJ_GFBQ"]}', '{dr["BZ"]}', '{dr["GXSJ"]}')", CommandType.Text); } break; case "1303"://推土区 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBTTQGX(BSM, DDTCBZ, DDTCMC, YSDM, TTQMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099080100',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; case "1304"://拆除未尽区2099090100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBCCWJQGX (BSM, DDTCBZ, DDTCMC, YSDM, ZDMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099090100',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; case "1305"://路面范围2099100100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBLMFWGX (BSM, DDTCBZ, DDTCMC, YSDM, ZLDWDM, KD, MJ, DLBM, MC, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099100100',zldwdm,xzdwkd,tbmj,dlbm,'',bz,gxsj from dtbdltbgx where bsm='{BSM}';", CommandType.Text); break; case "1306"://工厂化种植更新2099120100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO GCHZZGX (BSM,YSDM,ZDMJ,DLBM,DLMC,BZ,GXSJ) select bsm,'2099120100',tbmj,dlbm,'',bz,gxsj from dtbdltbgx where bsm='{BSM}';", CommandType.Text); break; case "一般地类": if (xmlx == "1" || xmlx == "2") { DataTable dtXmlx2 = IRowToDataTable(feature as IRow); if (dtXmlx2 != null && dtXmlx2.Rows.Count > 0) { object obj = feature.get_Value(feature.Fields.FindField("XZGDFJ")); if (obj != null && !(obj is DBNull)) { string[] files = obj.ToString().Split(';'); string strSql = string.Empty; foreach (string file in files) { string strGuid = Guid.NewGuid().ToString(); var objBsm = rdbHelper.ExecuteScalar($"select bsm from wyhcfj where hcjlbsm = '{dtXmlx2.Rows[0]["TBBSM"].ToString()}' and fjmc = '{file.Substring(file.LastIndexOf("\\") + 1)}'", CommandType.Text); using (System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); IDbDataParameter[] parameters = new IDbDataParameter[5]; if (objBsm == null) { strSql = "INSERT INTO WYHCFJ ( HCLX, HCJLBSM, DKID, FJMC, FJLX, MODE,IS_SELECTED, SEQUENCE, SUBTYPE, ARG, ARG4, CJSJ, LENGTH, POINTS_JSON, UserDelete ) VALUES ( 'WYRWTB', @HCJLBSM, @HCJLBSM, @FJMC, 'PDF', '4',1, '0', '1', @ARG, @ARG4, @CJSJ, '0', '[]', '0' )"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx2.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } else { strSql = "UPDATE WYHCFJ SET ARG = @ARG, ARG4 = @ARG4, CJSJ = @CJSJ WHERE HCJLBSM=@HCJLBSM AND FJMC = @FJMC"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx2.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } rdbHelper.ExecuteNonQueryWithException(strSql, CommandType.Text, parameters); rdbHelper.ExecuteNonQueryWithException($"insert into fjgx (wytbbsm,fjarg,tbbsm) values ('{dtXmlx2.Rows[0]["TBBSM"].ToString()}','{strGuid}','{BSM}')", CommandType.Text); fs.Close(); } } } } } break; } string czcmc = string.Empty; //保存城镇村等用地 switch (czcsxm) { case "201": case "201A": case "202": case "202A": case "203": case "203A": case "204": case "205": dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.CZCJGKYD).FirstOrDefault(x => x.CODE.Equals(czcsxm)); if (dataDicTionary != null) { czcmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBCZCDYDGX (BSM, DDTCBZ, DDTCMC, YSDM, CZCLX, CZCDM, CZCMC, CZCMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099030100',czcsxm,'{xzqdm.PadRight(19, '0')}','{czcmc}',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; } ////保存附件信息 //object images = feature.get_Value(feature.Fields.FindField("images")); //if (images != null) //{ // excuteSQL = "insert into fjgx(WYTBBSM,FJARG,tbbsm)values('{0}','{1}','{2}')"; // foreach (var item in images.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) // { // rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, tbbsm, item, BSM), CommandType.Text); // } //} //附件文件 保存 DataTable dtXmlx = IRowToDataTable(feature as IRow); if (dtXmlx != null && dtXmlx.Rows.Count > 0) { object obj = feature.get_Value(feature.Fields.FindField("XZGDFJ")); if (obj != null && !(obj is DBNull) && !string.IsNullOrWhiteSpace(obj.ToString())) { string[] files = obj.ToString().Split(';'); string strSql = string.Empty; foreach (string file in files) { string strGuid = Guid.NewGuid().ToString(); var objBsm = rdbHelper.ExecuteScalar($"select bsm from wyhcfj where hcjlbsm = '{dtXmlx.Rows[0]["TBBSM"].ToString()}' and fjmc = '{file.Substring(file.LastIndexOf("\\") + 1)}'", CommandType.Text); using (System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); IDbDataParameter[] parameters = new IDbDataParameter[5]; if (objBsm == null) { strSql = "INSERT INTO WYHCFJ ( HCLX, HCJLBSM, DKID, FJMC, FJLX, MODE,IS_SELECTED, SEQUENCE, SUBTYPE, ARG, ARG4, CJSJ, LENGTH, POINTS_JSON, UserDelete ) VALUES ( 'WYRWTB', @HCJLBSM, @HCJLBSM, @FJMC, 'PDF', '4',1, '0', '1', @ARG, @ARG4, @CJSJ, '0', '[]', '0' )"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } else { strSql = "UPDATE WYHCFJ SET ARG = @ARG, ARG4 = @ARG4, CJSJ = @CJSJ WHERE HCJLBSM=@HCJLBSM AND FJMC = @FJMC"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } rdbHelper.ExecuteNonQueryWithException(strSql, CommandType.Text, parameters); rdbHelper.ExecuteNonQueryWithException($"insert into fjgx (wytbbsm,fjarg,tbbsm) values ('{dtXmlx.Rows[0]["TBBSM"].ToString()}','{strGuid}','{BSM}')", CommandType.Text); fs.Close(); } } } } //根据图斑面积面积,限制外业照片、视频数量 string strTbmj = string.Empty; int tbmjIndex = feature.Fields.FindField("TBMJ"); if (tbmjIndex > -1) { strTbmj = feature.get_Value(tbmjIndex).ToString(); DataTable dtFj = rdbHelper.ExecuteDatatable("wyhcfj", $"select sum(case when mode in ('5') then 1 else 0 end) as videocount,sum(case when mode not in ('4','5') then 1 else 0 end) as imagecount from wyhcfj a inner join fjgx b on a.hcjlbsm=b.wytbbsm and b.fjarg = a.arg and b.tbbsm ='{BSM}' where HCJLBSM='{tbbsm}' and (UserDelete <> 1 or UserDelete is not null)", true); if (!string.IsNullOrEmpty(strTbmj) && dtFj != null && dtFj.Rows.Count > 0) { int imageCount = 0, videoCount = 0; if (dtFj.Rows[0]["imagecount"] != null && !string.IsNullOrEmpty(dtFj.Rows[0]["imagecount"].ToString())) { imageCount = int.Parse(dtFj.Rows[0]["imagecount"].ToString()); } if (dtFj.Rows[0]["videocount"] != null && !string.IsNullOrEmpty(dtFj.Rows[0]["videocount"].ToString())) { videoCount = int.Parse(dtFj.Rows[0]["videocount"].ToString()); } decimal tbmj = (Convert.ToDouble(strTbmj) / 666.67).ToDecimal(2); if (tbmj <= 5) { if (imageCount > 15 || videoCount > 2) { //MessageHelper.Show("图斑面积小于5亩时,外业照片数量超过15张,或者外业视频数量超过2段"); LogAPI.Debug("图斑面积小于5亩时,外业照片数量超过15张,或者外业视频数量超过2段"); return; } } if (5 < tbmj && tbmj <= 20) { if (imageCount > 30 || videoCount > 5) { //MessageHelper.Show("图斑面积大于5亩小于等于20亩时,外业照片数量超过30张,或者外业视频数量超过5段"); LogAPI.Debug("图斑面积大于5亩小于等于20亩时,外业照片数量超过30张,或者外业视频数量超过5段"); return; } } if (tbmj > 20) { if (imageCount > 50 || videoCount > 7) { //MessageHelper.Show("图斑面积大于20亩时,外业照片数量超过50张,或者外业视频数量超过7段"); LogAPI.Debug("图斑面积大于20亩时,外业照片数量超过50张,或者外业视频数量超过7段"); return; } } } } } catch (Exception ex) { LogAPI.Debug("DataOperationHelper_65.SaveBGFWAndDLTC 异常" + ex.Message); LogAPI.Debug("DataOperationHelper_65.SaveBGFWAndDLTC 异常" + ex.StackTrace); throw ex; } } #endregion #region 初始化界面 /// /// 加载单图斑属性数据 /// public override ObservableCollection LoadTreeData() { ObservableCollection DataSource = new ObservableCollection(); LayerCfg LayerCfg = null; try { TreeNode parentNodes = new TreeNode() { Name = $"单图斑任务列表(0个)", Paixu = 0, IsExpanded = true, Icon = "pack://application:,,,/Kingo.Plugin.DTBJK;component/Resources/列表.png", NodeLevel = 0, NodeID = Guid.NewGuid().ToString().Replace("-", ""), Data = null, IsOpenEdit = true, ParentButtonVisibility = Visibility.Visible, Nodes = new ObservableCollection() }; #region 单图斑建库任务矢量加载 IDataCatalogService DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); object LayerCfgobj = DataCatalog.CurrentLayers; int TCXH = 1;//任务序号 if (LayerCfgobj is LayerCfg) { LayerCfg = (LayerCfgobj as LayerCfg).Layers.FirstOrDefault(f => f.LayerName == "监测数据" && f.LayerType == EnumLayerType.GroupLayer); if (LayerCfg != null) { foreach (var LayerCfgitem in LayerCfg.Layers) { if (LayerCfgitem.Data is FeatureLayer) { IFeatureLayer JCTBFeaLayer = LayerCfgitem.Data as FeatureLayer; IQueryFilter queryFilter = new QueryFilterClass(); if (JCTBFeaLayer is IFeatureLayerDefinition pFLDefinition) { queryFilter.WhereClause = pFLDefinition.DefinitionExpression; } var jctbcount = JCTBFeaLayer.FeatureClass.FeatureCount(queryFilter); if (JCTBFeaLayer == null || JCTBFeaLayer.FeatureClass == null || jctbcount == 0) continue; TreeNode parentNode = new TreeNode()//图层数据一级(类似任务包一级) { Name = $"{LayerCfgitem.LayerName}({jctbcount}个)", Paixu = TCXH++, IsExpanded = false, Icon = "pack://application:,,,/Kingo.Plugin.DTBJK;component/Resources/数据检查.png", NodeLevel = 1, NodeID = Guid.NewGuid().ToString().Replace("-", ""), Data = LayerCfgitem.Data, ParentNode = parentNodes, ParentButtonVisibility = Visibility.Collapsed, Nodes = new ObservableCollection(), LoadingVisibility = Visibility.Collapsed, OpenPackageVisibility = Visibility.Visible }; parentNodes.Nodes.Add(parentNode); } } parentNodes.Name = "单图斑任务列表(" + parentNodes.Nodes.Count + "个)"; } #region 变更范围注释 //if (LayerCfgobj != null) //{ // LayerCfg = (LayerCfgobj as LayerCfg).Layers.FirstOrDefault(f => f.LayerName == "变更数据" && f.LayerType == EnumLayerType.GroupLayer); // foreach (var LayerCfgitem in LayerCfg.Layers) // { // if (LayerCfgitem.Data is FeatureLayer) // { // if (LayerCfgitem.FcName != "DLTBBG") continue; // IFeatureLayer JCTBFeaLayer = LayerCfgitem.Data as FeatureLayer; // IQueryFilter queryFilter = new QueryFilterClass(); // if (JCTBFeaLayer is IFeatureLayerDefinition pFLDefinition) // { // queryFilter.WhereClause = " SJLY='' OR SJLY is NULL"; // } // var tbcount = JCTBFeaLayer.FeatureClass.FeatureCount(queryFilter); // if (JCTBFeaLayer == null || JCTBFeaLayer.FeatureClass == null || tbcount == 0) continue; // TreeNode parentNode = new TreeNode() // { // Name = $"{LayerCfgitem.LayerName}({tbcount}个)", // Paixu = TCXH++, // IsExpanded = false, // Icon = "pack://application:,,,/Kingo.Plugin.DTBJK;component/Resources/数据检查.png", // NodeLevel = 1, // NodeID = Guid.NewGuid().ToString().Replace("-", ""), // Data = LayerCfgitem.Data, // ParentNode = parentNodes, // ParentButtonVisibility = Visibility.Collapsed, // Nodes = new ObservableCollection(), // LoadingVisibility = Visibility.Collapsed, // OpenPackageVisibility = Visibility.Visible // }; // parentNodes.Nodes.Add(parentNode); // } // } // parentNodes.Name = "单图斑任务列表(" + parentNodes.Nodes.Count + "个)"; //} #endregion } #endregion #region 单图斑建库任务包加载 SyncPackage(projectInfo.TaskPath); if (projectInfo.ListTaskPackage != null && projectInfo.ListTaskPackage.Count != 0) { List lstDelete = new List(); foreach (TaskPackage item in projectInfo.ListTaskPackage) { if (string.IsNullOrWhiteSpace(item.PackagePath) || !File.Exists(item.PackagePath)) { lstDelete.Add(item); continue; } string fileName = System.IO.Path.GetFileName(item.PackagePath); if (item.BID == null || string.IsNullOrWhiteSpace(item.BID.ToString())) { item.BID = Guid.NewGuid().ToString().Replace("-", ""); } TreeNode treeNode = new TreeNode() { Name = fileName + "(" + item.TBCount + "个)", Paixu = TCXH++, IsExpanded = false, Icon = "pack://application:,,,/Kingo.Plugin.DTBJK;component/Resources/数据检查.png", NodeID = Guid.NewGuid().ToString().Replace("-", ""), NodeLevel = 1, Data = item,//可区分任务类型 ParentNode = parentNodes, LoadingVisibility = Visibility.Collapsed, OpenPackageVisibility = Visibility.Visible, UncompletedCount = item.WWCCount, CompletedCount = item.WCCount }; parentNodes.Nodes.Add(treeNode); } foreach (var item in lstDelete) { projectInfo.ListTaskPackage.Remove(item); } parentNodes.Name = "单图斑任务列表(" + parentNodes.Nodes.Count + "个)"; DataSource = new ObservableCollection(); projectInfo.Save(); } #endregion DataSource.Add(parentNodes); } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("任务包加载失败:" + ex.Message); } TreeDataSource = DataSource; return DataSource; } #endregion #region 同步任务目录文件夹任务包文件 /// /// 同步任务目录文件夹任务包文件 /// /// /// public override void SyncPackage(string taskPath) { try { if (string.IsNullOrWhiteSpace(taskPath) || !Directory.Exists(taskPath)) { projectInfo.ListTaskPackage = new List(); return; } if (projectInfo.ListTaskPackage == null) { projectInfo.ListTaskPackage = new List(); } DirectoryInfo directory = new DirectoryInfo(System.IO.Path.Combine(taskPath, "未完成")); string filter = "*.jkrw"; if (Platform.Instance.SystemType == SystemTypeEnum.WYZS) { filter = "*.shrw"; } FileInfo[] files = directory.GetFiles(filter, SearchOption.AllDirectories); if (files == null || files.Length <= 0) { return; } foreach (var item in files) { IRDBHelper rdbHelper = null; try { TaskPackage taskPackage = projectInfo.ListTaskPackage.FirstOrDefault(x => x.PackagePath.Equals(item.FullName)); if (taskPackage != null && !string.IsNullOrWhiteSpace(taskPackage.PackageTempPath) && System.IO.File.Exists(taskPackage.PackageTempPath)) { try { if (taskPackage.State.Equals("已输出")) { File.Delete(item.FullName); } } catch { } rdbHelper = RDBFactory.CreateDbHelper($"{taskPackage.PackageTempPath}{(MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); FileInfo file = new FileInfo(taskPackage.PackageTempPath); if (file.IsReadOnly) { LogAPI.Debug($"选择的单图斑建库任务包{taskPackage.PackageTempPath}不允许是只读文件!"); throw new Exception("选择的单图斑建库任务包不允许是只读文件!"); } } else { rdbHelper = RDBFactory.CreateDbHelper($"{item.FullName}{(MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); FileInfo file = new FileInfo(item.FullName); if (file.IsReadOnly) { LogAPI.Debug($"选择的单图斑建库任务包{item.FullName}不允许是只读文件!"); throw new Exception("选择的单图斑建库任务包不允许是只读文件!"); } } if (!rdbHelper.TableIsExist("wyrw")) { throw new Exception("选择的单图斑建库任务包不存在外业任务(WYRW)表!"); } if (!rdbHelper.TableIsExist("YSJ")) { throw new Exception("选择的单图斑建库任务包不存在元数据(YSJ)表!"); } CheckTableExist(rdbHelper); DataTable dataTable = rdbHelper.ExecuteDatatable("ysj", "select * from ysj", true); if (dataTable == null || dataTable.Rows.Count <= 0) { throw new Exception("选择的单图斑建库任务包元数据(YSJ)表数据为空!"); } dataTable = rdbHelper.ExecuteDatatable("wyrw", "select ZT,TBBSM from wyrw", true); if (dataTable == null || dataTable.Rows.Count <= 0) { throw new Exception("选择的单图斑建库任务包外业任务表数据为空!"); } //rdbHelper.ExecuteNonQueryWithException("update dtbdltbgx set ddtcbz='一般地类',ddtcmc='一般地类' where ddtcbz is null or ddtcbz=''", CommandType.Text); foreach (DataRow dataRow in dataTable.Rows) { //如果单图斑一条数据都没有,则把外业任务图斑拷贝到DTBDLTBGX表中,作为一个默认的变更范围 long tbCount = (long)rdbHelper.ExecuteScalar($"select count(1) from dtbdltbgx where tbbsm='{dataRow["tbbsm"]}'", CommandType.Text); if (tbCount <= 0) { string sql = $"INSERT INTO dtbdltbgx (BSM,TBBSM,EGeometry,ZXDX,ZXDY,MAXX,MAXY,MINX,MINY,JKRY,DLBM,ZZSXDM,TBXHDM,DDTCBZ,GDLX,XZDWKD,TBMJ,YDYHFL,BZ) SELECT '{Guid.NewGuid().ToString().Replace("-", "")}' as BSM,A.TBBSM,A.EGeometry,A.ZXDX,A.ZXDY,A.MAXX,A.MAXY,A.MINX,A.MINY,'{projectInfo.UserName}' as JKRY,(case when length(b.HCBGDL)>4 then substr(b.HCBGDL,0,5) else B.HCBGDL end) as HCBGDL,B.ZZSX,B.TBXHSX,(case when length(replace(B.DDTCXX,' ',''))<4 then '一般地类' else replace(B.DDTCXX,' ','') end) as DDTCBZ,B.GDLX,cast(B.XZDLKD as numeric) as XZDWKD,(A.TBMJ*666.67) AS TBMJ,b.YDYHFL AS YDYHFL,b.XJBZ AS XJBZ FROM WYRW A LEFT JOIN WYHCCG B ON A.TBBSM = B.HCRWBSM where tbbsm = '{dataRow["tbbsm"]}' LIMIT 1;"; rdbHelper.ExecuteNonQueryWithException(sql, CommandType.Text); } } if (taskPackage == null) { projectInfo.ListTaskPackage.Add( new TaskPackage() { BID = Guid.NewGuid().ToString().Replace("-", ""), YWLX = UserLoginHelper.GetAppsetingValueByKey("JkTaskDBYWLX"), PackagePath = item.FullName, State = "未完成", TBCount = $"({dataTable.Select("ZT='已输出'").Length}/{dataTable.Rows.Count})", WCCount = dataTable.Select("ZT='已完成'").Length, WWCCount = dataTable.Select("ZT<>'已完成' and ZT<>'已上传' and ZT<>'已输出'").Length }); } else { taskPackage.TBCount = $"({dataTable.Select("ZT='已输出'").Length}/{dataTable.Rows.Count})"; taskPackage.WCCount = dataTable.Select("ZT='已完成'").Length; taskPackage.WWCCount = dataTable.Select("ZT<>'已完成' and ZT<>'已上传' and ZT<>'已输出'").Length; } } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowTips(item + "无法添加:" + ex.Message); MessageHelper.ShowTips(item + "无法添加:" + ex.StackTrace); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); rdbHelper = null; } } } projectInfo.Save(); } catch (Exception ex) { LogAPI.Debug(ex); throw ex; } } #endregion #region 工具栏修改数据后,点击保存时更新任务包数据 /// /// 工具栏修改数据后,点击保存时更新任务包数据 /// /// /// /// /// 0:新增 1:修改 2:删除 public override void UpdateData(IDifferenceCursorEx differenceCursorEx, IRDBHelper rdbHelper, int type) { //准备输入参数 int featureOID = -1; //新图形 IRow sourceRow = null; //旧图形 IRow differenceRow = null; //变化字段 ILongArray longArray = null; // 获取 differenceCursorEx.Next(out featureOID, out sourceRow, out differenceRow, out longArray); // 获取编辑图形信息 while (featureOID != -1) { int bsmIndex = -1; string excuteSQL = string.Empty; try { string bsm = string.Empty; switch (type) { case 0://0:新增 AddFeature(sourceRow as IFeature, rdbHelper); break; case 1://1:修改 AddFeature(sourceRow as IFeature, rdbHelper); break; case 2://2:删除 bsmIndex = differenceRow.Fields.FindField("BSM"); int jcbhIndex = differenceRow.Fields.FindField("JCBH"); int tbbsmIndex = differenceRow.Fields.FindField("TBBSM"); int sjlyIndex = differenceRow.Fields.FindField("SJLY"); string JCBHValue = ""; if (bsmIndex > -1) { bsm = differenceRow.get_Value(bsmIndex) as string; } if (jcbhIndex != -1) { JCBHValue = differenceRow.Value[jcbhIndex].ToString(); } else if (tbbsmIndex != -1) { JCBHValue = differenceRow.Value[tbbsmIndex].ToString(); } TreeNode treeNode = GetNodeByName(TreeDataSource[0], bsm, new List() { 3 }); if (treeNode != null && treeNode.NodeLevel == 3) { TreeNode parNode = treeNode.ParentNode; if (parNode != null) { IsAutoSaveEdit = false;//暂时作为避免再次触发保存 parNode.Nodes.Remove(treeNode); if (parNode.PackageNode.Name.StartsWith("变更范围")) { //变更范围删除图斑更新二级节点信息 } else if (parNode.Data is DataRow) { parNode.Name = (parNode.Data as DataRow)["JCBH"].ToString() + $"({parNode.Nodes.Count})"; } else if (parNode.Data is WYRWTB) { parNode.Name = (parNode.Data as WYRWTB).TBBSM.ToString() + $"({parNode.Nodes.Count})"; excuteSQL = "delete from {0} where bsm='{1}'"; rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBDLTBGX", bsm), CommandType.Text); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBCCWJQGX", bsm), CommandType.Text); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBCZCDYDGX", bsm), CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBDLTBGXGC where BGHTBBSM ='{bsm}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBGFBQGX", bsm), CommandType.Text); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBLMFWGX", bsm), CommandType.Text); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, "DTBLSYDGX", bsm), CommandType.Text); //rdbHelper.ExecuteNonQueryWithException($"delete from FJGX where TBBSM ='{bsm}'", CommandType.Text); //rdbHelper.ExecuteNonQueryWithException($"delete from FJGX where tbbsm not in(select bsm from DTBDLTBGX);", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from PZWJ where bsm not in(select bsm from DTBDLTBGX);", CommandType.Text); (DtbFeatureLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("DELETE FROM TTQGX where BSM = '" + bsm + "'"); } IsAutoSaveEdit = true; } } treeNode = GetNodeByName(TreeDataSource[0], JCBHValue, new List() { 2 }); if (sjlyIndex != -1 && treeNode != null && treeNode.NodeLevel == 2) { //仅仅修改任务图斑中ZZTB类型数据 if (differenceRow.Value[sjlyIndex].ToString() == "ZZTB") { rdbHelper.ExecuteNonQueryWithException($"delete from WYRW where JCBH='{JCBHValue}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from dtbdltbgx where TBBSM='{JCBHValue}'", CommandType.Text); TreeNode parNode = treeNode.ParentNode; IsAutoSaveEdit = false;//暂时作为避免再次触发保存 parNode.Nodes.Remove(treeNode); IsAutoSaveEdit = true; } } break; } } catch (Exception ex) { LogAPI.Debug(ex.Message); } differenceCursorEx.Next(out featureOID, out sourceRow, out differenceRow, out longArray); } } #endregion #region 新增图斑 /// /// 新增图斑(单图斑新增与修改合并) /// public override void AddFeature(IFeature Newfeature, IRDBHelper rdbHelper) { try { if (Newfeature == null || Newfeature.Shape == null || Newfeature.Shape.IsEmpty) return; IFeature featureTBBSM = null; List features = null; try { object LayerCfgobj = DataCatalog.CurrentLayers; if (LayerCfgobj is LayerCfg && rdbHelper == null)//矢量数据类型 { LayerCfg jcsj = (LayerCfgobj as LayerCfg).Layers.FirstOrDefault(f => f.LayerName == "监测数据" && f.LayerType == EnumLayerType.GroupLayer); if (jcsj == null) return;//获取所有的监测数据图层 string JCBHValue = string.Empty; foreach (LayerCfg itemCfg in jcsj.Layers) { features = FeatureAPI.Identify(Newfeature.ShapeCopy, itemCfg.Data as IFeatureLayer); if (features != null && features.Count > 0) { //如果仅压盖到了一个,则挂接到该外业任务图斑 if (features.Count == 1) { featureTBBSM = features[0]; } else if (features.Count > 1) { double _area = -1; foreach (IFeature item in features) { //areaas1 = item.ShapeCopy as IArea; IGeometry geometry = DtbFeatureLayer.FeatureClass.GetFeature(Newfeature.OID).ShapeCopy; //此处报错可能是空间参考坐标系不一致 double interArea = FeatureAPI.GetInterArea(geometry, item.ShapeCopy); if (_area < interArea) { _area = interArea; featureTBBSM = item; } } } int index = featureTBBSM.Fields.FindField("JCBH"); if (index > -1) { object obj = featureTBBSM.get_Value(index); JCBHValue = obj == null ? "" : obj.ToString(); break; } } } int tbBSMIndex = Newfeature.Fields.FindField("TBBSM"); int tbbhIndex = Newfeature.Fields.FindField("TBYBH"); int bsmIndex = Newfeature.Fields.FindField("BSM"); int tbmjIndex = Newfeature.Fields.FindField("TBMJ"); int zldwdmIndex = Newfeature.Fields.FindField("ZLDWDM"); int jckzldwdmIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("ZLDWDM"); int qsdwdmIndex = Newfeature.Fields.FindField("QSDWDM"); int jckqsdwdmIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSDWDM"); int zldwmcIndex = Newfeature.Fields.FindField("ZLDWMC"); int jckzldwmcIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("ZLDWMC"); int qsdwmcIndex = Newfeature.Fields.FindField("QSDWMC"); int jckqsdwmcIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSDWMC"); int qsxzIndex = Newfeature.Fields.FindField("QSXZ"); int jckqsxzIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSXZ"); try { //继承基础库权属及性质 List featureJCKs = FeatureAPI.Identify2(Newfeature.ShapeCopy, DtbFeatureLayer); double _area2 = -1; IFeature featureJCK = null; foreach (IFeature itemF in featureJCKs) { if (featureJCKs.Count == 1) { featureJCK = itemF; } else { //此处报错可能是空间参考坐标系不一致 double interArea = FeatureAPI.GetInterArea(Newfeature.ShapeCopy, itemF.ShapeCopy); if (_area2 < interArea) { _area2 = interArea; featureJCK = itemF; } } } if (featureJCK != null && jckqsxzIndex != -1 && jckqsdwmcIndex != -1 && jckqsdwdmIndex != -1) { //属性不为空 不继承基础库的属性 if (string.IsNullOrEmpty(Newfeature.Value[qsdwdmIndex].ToTrim())) Newfeature.Value[qsdwdmIndex] = featureJCK.Value[jckqsdwdmIndex]; if (string.IsNullOrEmpty(Newfeature.Value[qsdwmcIndex].ToTrim())) Newfeature.Value[qsdwmcIndex] = featureJCK.Value[jckqsdwmcIndex]; if (string.IsNullOrEmpty(Newfeature.Value[zldwmcIndex].ToTrim())) Newfeature.Value[zldwmcIndex] = featureJCK.Value[jckzldwmcIndex]; if (string.IsNullOrEmpty(Newfeature.Value[zldwdmIndex].ToTrim())) Newfeature.Value[zldwdmIndex] = featureJCK.Value[jckzldwdmIndex]; if (string.IsNullOrEmpty(Newfeature.Value[qsxzIndex].ToTrim())) Newfeature.Value[qsxzIndex] = featureJCK.Value[jckqsxzIndex]; } } catch (Exception ex) { LogAPI.Debug("继承基础库属性异常:" + ex.Message); } Newfeature.Value[tbbhIndex] = JCBHValue;//图斑编号 if (featureTBBSM != null) Newfeature.Value[tbBSMIndex] = featureTBBSM.Value[featureTBBSM.Fields.FindField("TBBSM")].ToString();//图斑标识码 IArea area1 = Newfeature.ShapeCopy as IArea; Newfeature.Value[tbmjIndex] = Math.Round(area1.Area, 2);//图斑面积 Newfeature.Value[bsmIndex] = Guid.NewGuid().ToTrim().Replace("-", "").Substring(0, 18); Newfeature.Store(); TreeNode treeNode = GetNodeByName(TreeDataSource[0], JCBHValue.Trim(), new List() { 2 }); if (treeNode == null) return; //节点修改 if (treeNode.Nodes.FirstOrDefault(x => x.NodeID.ToInt() == Newfeature.OID) == null) { TreeNode bgfwNode = new TreeNode()//第四级-变更图斑 { Name = Newfeature.Value[bsmIndex] as string, Icon = "pack://application:,,,/Kingo.Plugin.General;component/Resources/变更图斑.png", NodeID = Newfeature.OID, NodeLevel = 3, Data = Newfeature, ParentNode = treeNode, PackageNode = treeNode.PackageNode, PackageState = "未完成",//新增图斑默认为“未完成”状态 LoadingVisibility = Visibility.Collapsed }; treeNode.Nodes.Add(bgfwNode); treeNode.PackageState = GetNodesJCZT(treeNode); treeNode.Name = Newfeature.Value[tbbhIndex] + $"({treeNode.Nodes.Count})"; } else { TreeNode node = treeNode.Nodes.FirstOrDefault(x => x.NodeID.ToInt() == Newfeature.OID); node.NodeID = Newfeature.OID; node.Data = Newfeature; node.Name = Newfeature.Value[bsmIndex] as string; } //循环判断变更图斑图形是否存在,不存在则删除变更范围节点 if (treeNode.Nodes.Count > 0) { List deleteList = new List(); foreach (var item in treeNode.Nodes) { try { DtbFeatureLayer.FeatureClass.GetFeature(item.NodeID.ToInt()); } catch (Exception ex) { LogAPI.Debug("新增节点获取图层失败(不处理):" + ex); deleteList.Add(item); } } IsAutoSaveEdit = false;//暂时作为避免再次触发保存 foreach (var item in deleteList) { treeNode.Nodes.Remove(item); } IsAutoSaveEdit = true; } } else if (Newfeature.Class.AliasName == "单图斑地类图斑更新" && rdbHelper != null)//任务包类型数据 { //获取当前变更图斑对应的外业任务图斑 string BSMValue = string.Empty; string tblx = string.Empty; int dlbmIndex = Newfeature.Fields.FindField("TBBSM");//地类编码 if (dlbmIndex > -1) { BSMValue = Newfeature.get_Value(dlbmIndex).ToString(); } if (string.IsNullOrWhiteSpace(BSMValue) && CurrentWYRWTB != null) { //BSMValue = GetTBBSM(Newfeature, ref tblx); if (string.IsNullOrWhiteSpace(BSMValue)) BSMValue = CurrentWYRWTB.TBBSM; } GenerNewData(Newfeature, rdbHelper, BSMValue); UpdateKCXS(Newfeature, rdbHelper, BSMValue); } else if (Newfeature.Class.AliasName == "外业图斑" && rdbHelper != null) { string jcbhValue = string.Empty; int jcbhIndex = Newfeature.Class.FindField("JCBH"); int sjlyIndex = Newfeature.Class.FindField("SJLY"); if (!Newfeature.Value[sjlyIndex].ToString().Contains("ZZTB") && !string.IsNullOrWhiteSpace(Newfeature.Value[sjlyIndex].ToString())) { if (EngineEditorBG != null) EngineEditorBG.StopEditing(false); return;//非新增任务图斑修改不保存 } bool NewJCBH = false; jcbhValue = Newfeature.Value[jcbhIndex].ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { IJKTBTask GetRWTBDataHelper = new JKTBTaskHelper(); jcbhValue = GetRWTBDataHelper.GetRWTBSEQ(projectInfo.CODE, CurrentTaskPackage.YWLX).ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { MessageHelper.ShowTips("接口获取“JCBH”失败!"); return; } NewJCBH = true; } #region 分割任务图斑情况 //如果是分割图斑,两个要素jcbhValue是一样的,判断存在多个图斑,则也需要重新赋值jcbhValue if (!NewJCBH) { IQueryFilter queryFilter = new QueryFilterClass() { WhereClause = $"JCBH='{jcbhValue}'" }; ICursor cursor = (Newfeature.Class as ITable).Search(queryFilter, false); int count = 0; IRow row = null; while ((row = cursor.NextRow()) != null) { count++; if (count > 1) { IJKTBTask GetRWTBDataHelper = new JKTBTaskHelper(); jcbhValue = GetRWTBDataHelper.GetRWTBSEQ(projectInfo.CODE, CurrentTaskPackage.YWLX).ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { MessageHelper.ShowTips("接口获取“JCBH”失败!"); return; } NewJCBH = true; break; } } } #endregion GenerWYTBNewData(Newfeature, rdbHelper, jcbhValue, NewJCBH); } } catch (Exception ex) { LogAPI.Debug("新增/修改图斑发生错误:" + ex.Message); LogAPI.Debug("可能原因为:空间参考不一样所致"); LogAPI.Debug(ex.StackTrace); } finally { if (features != null) { foreach (var item in features) { Marshal.ReleaseComObject(item); } } } } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); } } #endregion #region 新增图斑 /// /// 新增图斑(单图斑新增与修改合并) /// public override void UpdateFeatureAttribute(IFeature Newfeature, IRDBHelper rdbHelper) { try { if (Newfeature == null || Newfeature.Shape == null || Newfeature.Shape.IsEmpty) return; IFeature featureTBBSM = null; List features = null; try { object LayerCfgobj = DataCatalog.CurrentLayers; if (LayerCfgobj is LayerCfg && rdbHelper == null)//矢量数据类型 { LayerCfg jcsj = (LayerCfgobj as LayerCfg).Layers.FirstOrDefault(f => f.LayerName == "监测数据" && f.LayerType == EnumLayerType.GroupLayer); if (jcsj == null) return;//获取所有的监测数据图层 string JCBHValue = string.Empty; foreach (LayerCfg itemCfg in jcsj.Layers) { features = FeatureAPI.Identify(Newfeature.ShapeCopy, itemCfg.Data as IFeatureLayer); if (features != null && features.Count > 0) { //如果仅压盖到了一个,则挂接到该外业任务图斑 if (features.Count == 1) { featureTBBSM = features[0]; } else if (features.Count > 1) { double _area = -1; foreach (IFeature item in features) { //areaas1 = item.ShapeCopy as IArea; IGeometry geometry = DtbFeatureLayer.FeatureClass.GetFeature(Newfeature.OID).ShapeCopy; //此处报错可能是空间参考坐标系不一致 double interArea = FeatureAPI.GetInterArea(geometry, item.ShapeCopy); if (_area < interArea) { _area = interArea; featureTBBSM = item; } } } int index = featureTBBSM.Fields.FindField("JCBH"); if (index > -1) { object obj = featureTBBSM.get_Value(index); JCBHValue = obj == null ? "" : obj.ToString(); break; } } } int tbBSMIndex = Newfeature.Fields.FindField("TBBSM"); int tbbhIndex = Newfeature.Fields.FindField("TBYBH"); int bsmIndex = Newfeature.Fields.FindField("BSM"); int tbmjIndex = Newfeature.Fields.FindField("TBMJ"); int zldwdmIndex = Newfeature.Fields.FindField("ZLDWDM"); int jckzldwdmIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("ZLDWDM"); int qsdwdmIndex = Newfeature.Fields.FindField("QSDWDM"); int jckqsdwdmIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSDWDM"); int zldwmcIndex = Newfeature.Fields.FindField("ZLDWMC"); int jckzldwmcIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("ZLDWMC"); int qsdwmcIndex = Newfeature.Fields.FindField("QSDWMC"); int jckqsdwmcIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSDWMC"); int qsxzIndex = Newfeature.Fields.FindField("QSXZ"); int jckqsxzIndex = DtbFeatureLayer.FeatureClass.Fields.FindField("QSXZ"); try { //继承基础库权属及性质 List featureJCKs = FeatureAPI.Identify2(Newfeature.ShapeCopy, DtbFeatureLayer); double _area2 = -1; IFeature featureJCK = null; foreach (IFeature itemF in featureJCKs) { if (featureJCKs.Count == 1) { featureJCK = itemF; } else { //此处报错可能是空间参考坐标系不一致 double interArea = FeatureAPI.GetInterArea(Newfeature.ShapeCopy, itemF.ShapeCopy); if (_area2 < interArea) { _area2 = interArea; featureJCK = itemF; } } } if (featureJCK != null && jckqsxzIndex != -1 && jckqsdwmcIndex != -1 && jckqsdwdmIndex != -1) { //属性不为空 不继承基础库的属性 if (string.IsNullOrEmpty(Newfeature.Value[qsdwdmIndex].ToTrim())) Newfeature.Value[qsdwdmIndex] = featureJCK.Value[jckqsdwdmIndex]; if (string.IsNullOrEmpty(Newfeature.Value[qsdwmcIndex].ToTrim())) Newfeature.Value[qsdwmcIndex] = featureJCK.Value[jckqsdwmcIndex]; if (string.IsNullOrEmpty(Newfeature.Value[zldwmcIndex].ToTrim())) Newfeature.Value[zldwmcIndex] = featureJCK.Value[jckzldwmcIndex]; if (string.IsNullOrEmpty(Newfeature.Value[zldwdmIndex].ToTrim())) Newfeature.Value[zldwdmIndex] = featureJCK.Value[jckzldwdmIndex]; if (string.IsNullOrEmpty(Newfeature.Value[qsxzIndex].ToTrim())) Newfeature.Value[qsxzIndex] = featureJCK.Value[jckqsxzIndex]; } } catch (Exception ex) { LogAPI.Debug("继承基础库属性异常:" + ex.Message); } Newfeature.Value[tbbhIndex] = JCBHValue;//图斑编号 if (featureTBBSM != null) Newfeature.Value[tbBSMIndex] = featureTBBSM.Value[featureTBBSM.Fields.FindField("TBBSM")].ToString();//图斑标识码 IArea area1 = Newfeature.ShapeCopy as IArea; Newfeature.Value[tbmjIndex] = Math.Round(area1.Area, 2);//图斑面积 Newfeature.Value[bsmIndex] = Guid.NewGuid().ToTrim().Replace("-", "").Substring(0, 18); Newfeature.Store(); TreeNode treeNode = GetNodeByName(TreeDataSource[0], JCBHValue.Trim(), new List() { 2 }); if (treeNode == null) return; //节点修改 if (treeNode.Nodes.FirstOrDefault(x => x.NodeID.ToInt() == Newfeature.OID) == null) { TreeNode bgfwNode = new TreeNode()//第四级-变更图斑 { Name = Newfeature.Value[bsmIndex] as string, Icon = "pack://application:,,,/Kingo.Plugin.General;component/Resources/变更图斑.png", NodeID = Newfeature.OID, NodeLevel = 3, Data = Newfeature, ParentNode = treeNode, PackageNode = treeNode.PackageNode, PackageState = "未完成",//新增图斑默认为“未完成”状态 LoadingVisibility = Visibility.Collapsed }; treeNode.Nodes.Add(bgfwNode); treeNode.PackageState = GetNodesJCZT(treeNode); treeNode.Name = Newfeature.Value[tbbhIndex] + $"({treeNode.Nodes.Count})"; } else { TreeNode node = treeNode.Nodes.FirstOrDefault(x => x.NodeID.ToInt() == Newfeature.OID); node.NodeID = Newfeature.OID; node.Data = Newfeature; node.Name = Newfeature.Value[bsmIndex] as string; } //循环判断变更图斑图形是否存在,不存在则删除变更范围节点 if (treeNode.Nodes.Count > 0) { List deleteList = new List(); foreach (var item in treeNode.Nodes) { try { DtbFeatureLayer.FeatureClass.GetFeature(item.NodeID.ToInt()); } catch (Exception ex) { LogAPI.Debug("新增节点获取图层失败(不处理):" + ex); deleteList.Add(item); } } IsAutoSaveEdit = false;//暂时作为避免再次触发保存 foreach (var item in deleteList) { treeNode.Nodes.Remove(item); } IsAutoSaveEdit = true; } } else if (Newfeature.Class.AliasName == "单图斑地类图斑更新" && rdbHelper != null)//任务包类型数据 { //获取当前变更图斑对应的外业任务图斑 string BSMValue = string.Empty; string tblx = string.Empty; int dlbmIndex = Newfeature.Fields.FindField("TBBSM");//地类编码 if (dlbmIndex > -1) { BSMValue = Newfeature.get_Value(dlbmIndex).ToString(); } if (string.IsNullOrWhiteSpace(BSMValue) && CurrentWYRWTB != null) { //BSMValue = GetTBBSM(Newfeature, ref tblx); if (string.IsNullOrWhiteSpace(BSMValue)) BSMValue = CurrentWYRWTB.TBBSM; } GenerUpdateNewData(Newfeature, rdbHelper, BSMValue); UpdateKCXS(Newfeature, rdbHelper, BSMValue); } else if (Newfeature.Class.AliasName == "外业图斑" && rdbHelper != null) { string jcbhValue = string.Empty; int jcbhIndex = Newfeature.Class.FindField("JCBH"); int sjlyIndex = Newfeature.Class.FindField("SJLY"); if (!Newfeature.Value[sjlyIndex].ToString().Contains("ZZTB") && !string.IsNullOrWhiteSpace(Newfeature.Value[sjlyIndex].ToString())) { if (EngineEditorBG != null) EngineEditorBG.StopEditing(false); return;//非新增任务图斑修改不保存 } bool NewJCBH = false; jcbhValue = Newfeature.Value[jcbhIndex].ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { IJKTBTask GetRWTBDataHelper = new JKTBTaskHelper(); jcbhValue = GetRWTBDataHelper.GetRWTBSEQ(projectInfo.CODE, CurrentTaskPackage.YWLX).ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { MessageHelper.ShowTips("接口获取“JCBH”失败!"); return; } NewJCBH = true; } #region 分割任务图斑情况 //如果是分割图斑,两个要素jcbhValue是一样的,判断存在多个图斑,则也需要重新赋值jcbhValue if (!NewJCBH) { IQueryFilter queryFilter = new QueryFilterClass() { WhereClause = $"JCBH='{jcbhValue}'" }; ICursor cursor = (Newfeature.Class as ITable).Search(queryFilter, false); int count = 0; IRow row = null; while ((row = cursor.NextRow()) != null) { count++; if (count > 1) { IJKTBTask GetRWTBDataHelper = new JKTBTaskHelper(); jcbhValue = GetRWTBDataHelper.GetRWTBSEQ(projectInfo.CODE, CurrentTaskPackage.YWLX).ToString(); if (string.IsNullOrWhiteSpace(jcbhValue)) { MessageHelper.ShowTips("接口获取“JCBH”失败!"); return; } NewJCBH = true; break; } } } #endregion GenerWYTBNewData(Newfeature, rdbHelper, jcbhValue, NewJCBH); } } catch (Exception ex) { LogAPI.Debug("新增/修改图斑发生错误:" + ex.Message); LogAPI.Debug("可能原因为:空间参考不一样所致"); LogAPI.Debug(ex.StackTrace); } finally { if (features != null) { foreach (var item in features) { Marshal.ReleaseComObject(item); } } } } catch (Exception ex) { LogAPI.Debug(ex.Message); LogAPI.Debug(ex.StackTrace); } } #endregion #region GenerNewData private void GenerUpdateNewData(IFeature Newfeature, IRDBHelper rdbHelper, string tbbsm) { IFeature feature = null; IGeometry convertGeometry = null; IClone clone = null; ICursor cursor = null; IRow row = null; try { string bsm = string.Empty; int bsmIndex = Newfeature.Fields.FindField("BSM"); if (bsmIndex > -1) { bsm = Newfeature.get_Value(bsmIndex) as string; } Guid guidBSM; //如果没值,则赋值新的GUID if (string.IsNullOrWhiteSpace(bsm) || !Guid.TryParse(bsm, out guidBSM)) { bsm = Guid.NewGuid().ToString(); Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "UpdateFJGX", Content = bsm, Extend = rdbHelper }); } else { //如果是分割图斑,两个要素bsm是一样的,判断存在多个BSM图斑,则也需要重新赋值BSM IQueryFilter queryFilter = new QueryFilterClass() { WhereClause = $"bsm='{bsm}'" }; cursor = (Newfeature.Class as ITable).Search(queryFilter, false); int count = 0; while ((row = cursor.NextRow()) != null) { count++; if (count > 1) { bsm = Guid.NewGuid().ToString(); break; } } } #region 防止存在多部件图形,但另一部分又是空的图形 IGeometryCollection geometryCollection = Newfeature.ShapeCopy as IGeometryCollection; if (geometryCollection.GeometryCount > 1) { for (int i = 0; i < geometryCollection.GeometryCount; i++) { IGeometry geometry = geometryCollection.Geometry[i]; IArea areaSub = geometry as IArea; if (areaSub == null || Math.Abs(areaSub.Area) == 0) { geometryCollection.RemoveGeometries(i, 1); } } Newfeature.Shape = geometryCollection as IGeometry; } #endregion #region 设置图形属性 //计算椭球面积 clone = Newfeature.ShapeCopy as IClone; double tqmj = (clone.Clone() as IPolygon).GetEllipseArea(); //获取图形json坐标串 clone = Newfeature.ShapeCopy as IClone; IGeometry cloneGeometry = clone.Clone() as IGeometry; string egeometry = GeometryConvertHelper.ConverIGometryToJson(cloneGeometry); //此处是为了验证转换后的json坐标串是否可以转换回去,如果转换并投影后图形为空,说明转换后的坐标串egeometry不正确 convertGeometry = GeometryConvertHelper.ConverJsonToIGeoemtry(egeometry); if (convertGeometry == null) { LogAPI.Debug(egeometry); throw new Exception("图形转换后的Json坐标串无法转回图形!"); } convertGeometry.Project(this.hookHelper.FocusMap.SpatialReference); if (convertGeometry == null || convertGeometry.IsEmpty) { LogAPI.Debug(egeometry); throw new Exception("图形转换的Json坐标串坐标参考不正确,请尝试重启软件!"); } //获取图形四至、中心点坐标 IArea area = cloneGeometry as IArea; string fields = "BSM,TBBSM,EGeometry,TBMJ,TBDLMJ,ZXDX,ZXDY,MAXX,MAXY,MINX,MINY,JKRY,TBLX,LNGDZB"; string fieldValues = $"'{bsm}','{tbbsm}','{egeometry}',{tqmj},{tqmj},{area.Centroid.X},{area.Centroid.Y},{cloneGeometry.Envelope.XMax},{cloneGeometry.Envelope.YMax},{cloneGeometry.Envelope.XMin},{cloneGeometry.Envelope.YMin},'{projectInfo.UserName}','{"0"}'"; #region 更新要素字段信息 int tempDDTCBZIndex = Newfeature.Fields.FindField("DDTCBZ"); string tempDDTCBZ = null; if (tempDDTCBZIndex > -1) tempDDTCBZ = Newfeature.get_Value(tempDDTCBZIndex).ToString(); int tempDLBMIndex = Newfeature.Fields.FindField("DLBM"); string tempDLBM = null; if (tempDLBMIndex > -1) tempDLBM = Newfeature.get_Value(tempDLBMIndex).ToString(); //图层信息选择单独图层的,除路面范围,默认地类直接继承基础库原地类 if (!string.IsNullOrEmpty(tempDDTCBZ) && tempDDTCBZ != "一般地类" && !tempDDTCBZ.Equals("1305", StringComparison.CurrentCultureIgnoreCase) && string.IsNullOrEmpty(tempDLBM)) { ILayer layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("基础_地类图斑"); if (layer != null) { List JCfeatures = FeatureAPI.Identify2(Newfeature.ShapeCopy, layer); if (JCfeatures != null && JCfeatures.Count > 0) { int jcdlbmIndex = JCfeatures[0].Fields.FindField("DLBM"); if (jcdlbmIndex > -1) { tempDLBM = JCfeatures[0].get_Value(jcdlbmIndex).ToString(); Newfeature.set_Value(tempDLBMIndex, tempDLBM); } } } } int fIndex = Newfeature.Fields.FindField("bsm"); if (fIndex > -1) { Newfeature.set_Value(fIndex, bsm); } fIndex = Newfeature.Fields.FindField("egeometry"); if (fIndex > -1) { Newfeature.set_Value(fIndex, egeometry); } fIndex = Newfeature.Fields.FindField("tbbsm"); if (fIndex > -1) { Newfeature.set_Value(fIndex, tbbsm); } fIndex = Newfeature.Fields.FindField("BID"); if (fIndex > -1) { Newfeature.set_Value(fIndex, CurrentTaskPackage.BID); } fIndex = Newfeature.Fields.FindField("TBMJ"); if (fIndex > -1) { Newfeature.set_Value(fIndex, tqmj); } fIndex = Newfeature.Fields.FindField("TBDLMJ"); if (fIndex > -1) { Newfeature.set_Value(fIndex, tqmj); } fIndex = Newfeature.Fields.FindField("ZXDX"); if (fIndex > -1) { Newfeature.set_Value(fIndex, area.Centroid.X); } fIndex = Newfeature.Fields.FindField("ZXDY"); if (fIndex > -1) { Newfeature.set_Value(fIndex, area.Centroid.Y); } fIndex = Newfeature.Fields.FindField("MAXX"); if (fIndex > -1) { Newfeature.set_Value(fIndex, cloneGeometry.Envelope.XMax); } fIndex = Newfeature.Fields.FindField("MAXY"); if (fIndex > -1) { Newfeature.set_Value(fIndex, cloneGeometry.Envelope.YMax); } fIndex = Newfeature.Fields.FindField("MINX"); if (fIndex > -1) { Newfeature.set_Value(fIndex, cloneGeometry.Envelope.XMin); } fIndex = Newfeature.Fields.FindField("MINY"); if (fIndex > -1) { Newfeature.set_Value(fIndex, cloneGeometry.Envelope.YMin); } fIndex = Newfeature.Fields.FindField("JKRY"); if (fIndex > -1) { Newfeature.set_Value(fIndex, projectInfo.UserName); } string zzsxdm = null; fIndex = Newfeature.Fields.FindField("ZZSXDM"); if (fIndex > -1) { zzsxdm = Newfeature.get_Value(fIndex).ToString(); if (!string.IsNullOrEmpty(tempDDTCBZ) && !string.IsNullOrEmpty(tempDLBM) && "1301,1302,1303,1304".Contains(tempDDTCBZ) && "0101,0102,0103".Contains(tempDLBM)) { if (string.IsNullOrEmpty(zzsxdm)) { zzsxdm = "WG"; Newfeature.set_Value(fIndex, "WG"); } } } fIndex = Newfeature.Fields.FindField("ZZSXMC"); if (fIndex > -1) { //种植属性名称 string zzsxmc = string.Empty; DataDicTionary dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.ZZSX).FirstOrDefault(x => x.CODE.Equals(zzsxdm)); if (dataDicTionary != null) { zzsxmc = dataDicTionary.NAME; } Newfeature.set_Value(fIndex, zzsxmc); } #region 计算变更范围与历年耕地图层的相交面积 double lngdArea = 0; //shape_area图形面积 IArea area1 = Newfeature.ShapeCopy as IArea; double jcmj = Math.Round(area1.Area, 2); string lngdzb = Math.Round((lngdArea / jcmj) * 100, 2) + "%"; fIndex = Newfeature.Fields.FindField("LNGDZB"); if (fIndex > -1) { Newfeature.set_Value(fIndex, lngdzb); } fieldValues += $",'{lngdzb}'"; #endregion #endregion //Newfeature.Store(); #endregion //删除库中已存在的数据 rdbHelper.ExecuteNonQueryWithException($"delete from dtbdltbgx where bsm='{bsm}'", CommandType.Text); string excuteSQL = string.Format("insert into dtbdltbgx({0})values({1})", fields, fieldValues); rdbHelper.ExecuteNonQueryWithException(excuteSQL, CommandType.Text); //保存其他属性字段和独立图层信息表 SaveUpdateBGFWAndDLTC(tbbsm, bsm, rdbHelper, Newfeature); //保存更新过程数据 DTBDBLoadHelper.SaveGXGCData(bsm, tbbsm, Newfeature, rdbHelper, this.hookHelper, false);//同步保存 object dlbmOBJ = Newfeature.get_Value(Newfeature.Fields.FindField("DLBM")); string dlbm = dlbmOBJ == null ? "" : dlbmOBJ.ToString(); //自动填充是否更新和是否举证字段 //ValidationField(bsm, Newfeature, rdbHelper, dlbm, tqmj); #region 同步更新树结构数据 TreeNode treeNode = GetNodeByName(TreeDataSource[0], tbbsm, new List() { 2 }); if (treeNode != null && treeNode.NodeLevel == 2) { if (treeNode.Nodes == null) { treeNode.Nodes = new ObservableCollection(); } List lsttree = treeNode.Nodes.Where(x => x.NodeID.Equals(Newfeature.OID)).ToList(); TreeNode addNode = null; if (lsttree.Count() <= 0) { DataTable dataTable = rdbHelper.ExecuteDatatable("data", $"select * from dtbdltbgx where bsm='{bsm}'", true); addNode = new TreeNode() { Name = bsm, Paixu = treeNode.Nodes.Count + 10, IsExpanded = false, Icon = "pack://application:,,,/Kingo.Plugin.General;component/Resources/变更图斑.png", NodeLevel = 3, Data = KGIS.Framework.Utils.Utility.TBToList.ConvertEntity(dataTable.Rows[0]), cMenu = null, PackageNode = treeNode.PackageNode, ParentNode = treeNode, NodeID = Newfeature.OID }; (addNode.Data as DTBDLTBGX).ObjectID = Newfeature.OID;//补充OID值 treeNode.Name = tbbsm + "(" + (treeNode.Nodes.Count + 1) + ")"; treeNode.Nodes.Add(addNode); } else { addNode = lsttree[0]; } addNode.Name = bsm; //循环判断变更图斑图形是否存在,不存在则删除变更范围节点 if (treeNode.Nodes.Count > 0) { List deleteList = new List(); foreach (var item in treeNode.Nodes) { try { DtbFeatureLayer.FeatureClass.GetFeature((int)item.NodeID); } catch { deleteList.Add(item); } } foreach (var item in deleteList) { treeNode.Nodes.Remove(item); } } //更新节点数量 treeNode.Name = tbbsm + "(" + (treeNode.Nodes.Count) + ")"; } #endregion SyncDBData(Newfeature.Class as IFeatureClass, rdbHelper, tbbsm); } catch (Exception ex) { LogAPI.Debug("新增或修改单图斑变更范围失败:" + ex.Message); LogAPI.Debug("新增或修改单图斑变更范围失败:" + ex.StackTrace); LogAPI.Debug("新增或修改单图斑变更范围失败:" + ex); throw ex; } finally { if (row != null) Marshal.ReleaseComObject(row); if (cursor != null) Marshal.ReleaseComObject(cursor); if (clone != null) Marshal.ReleaseComObject(clone); if (convertGeometry != null) Marshal.ReleaseComObject(convertGeometry); if (feature != null) Marshal.ReleaseComObject(feature); } } #endregion #region 保存单图斑和独立图层数据 /// /// 保存单图斑和独立图层数据 /// /// /// /// private void SaveUpdateBGFWAndDLTC(string tbbsm, string BSM, IRDBHelper rdbHelper, IFeature feature) { try { DataTable dataTableDetailjson = rdbHelper.ExecuteDatatable("detailjson", $"select * from detailjson where tbbsm = '{tbbsm}' ", true); DataTable dataTableWYRW = rdbHelper.ExecuteDatatable("wyrw", $"select JCBH from wyrw where tbbsm = '{tbbsm}' ", true); ILayer layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("基础_地类图斑"); ILayer layerPodu = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("基础_省级下发坡度图"); if (string.IsNullOrWhiteSpace(tbbsm) || string.IsNullOrWhiteSpace(BSM)) return;//图斑标识码和标识码不可为空 //判定DTBDLTBGX表中是否有XZGDFJ列 没有则添加 DataTable dataTableDTBDLTB = rdbHelper.ExecuteDatatable("DTBDLTBGX", "select * from DTBDLTBGX", true); if (dataTableDTBDLTB != null) { if (!dataTableDTBDLTB.Columns.Contains("XZGDFJ")) { rdbHelper.ExecuteSQL(@"ALTER TABLE DTBDLTBGX ADD COLUMN XZGDFJ text(200);"); } } string xzqdm = tbbsm.Substring(0, 6); rdbHelper.ExecuteNonQueryWithException($"delete from DTBLSYDGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBGFBQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBTTQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBCCWJQGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBCZCDYDGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from DTBLMFWGX where bsm='{BSM}'", CommandType.Text); rdbHelper.ExecuteNonQueryWithException($"delete from PZWJ where bsm='{BSM}'", CommandType.Text); //rdbHelper.ExecuteNonQueryWithException(string.Format("delete from fjgx where tbbsm='{0}'", BSM), CommandType.Text); string excuteSQL = "UPDATE DTBDLTBGX SET {0} WHERE BSM='{1}'"; List listField = new List() { "TBBSM", "TBYBH", "DLBM", "KCDLBM", "QSXZ", "QSDWDM", "QSDWMC", "ZLDWDM", "ZLDWMC", "GDLX", "XZDWKD", "TBXHDM", "ZZSXDM", "TBXHMC", "GDDB", "CZCSXM", "SJNF", "FRDBS", "MSSM", "EGeometry", "DDTCBZ", "DDTCMC", "SFGX", "WBGYY1", "WBGYY", "SFJZ", "QKSM", "LJLX", "YWTBSM", "NBWQKSM", "SHLZQKSM", "LNGDZB", "SDMSSM", "YDYHFL", "ZGQKSM", "BZ", "SFXML", "XMMC", "XMLX", "XMBH", "DKMC", "CZCTBBH", "LC", "NF", "XZGDFJ", "GXSJ", "LJBZ", "JZYBH", "LJTBBH" }; //独立图层代码 string ddtcbz = string.Empty; string ddtcmc = string.Empty; //城镇村属性码 string czcsxm = string.Empty; //地类编码 string dlbm = string.Empty; //权属性质 string qsxz = string.Empty; //权属单位代码 string qsdwdm = string.Empty; //权属单位名称 string qsdwmc = string.Empty; //坐落单位代码 string zldwdm = string.Empty; //坐落单位名称 string zldwmc = string.Empty; //项目类型 string xmlx = string.Empty; //种指属性代码 string zzsxdm = string.Empty; //图斑细化代码 string tbxhdm = string.Empty; //未变更原因描述 string wbgyyms = string.Empty; //数据年份 string sjnf = string.Empty; //求椭圆面积 double mj = Math.Round(feature.ShapeCopy.GetEllipseArea(), 2); //变更后值 string bgHValue = $"jkry='{(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).UserName}',tbmj={mj},tbdlmj={mj},gxsj='{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}', jym = '{GetJym(feature)}', "; //构建字段值 foreach (string item in listField) { int index = feature.Fields.FindField(item); if (index <= -1) { continue; } object obj = feature.get_Value(index); if (!(obj is DBNull) && !string.IsNullOrWhiteSpace(obj.ToString())) { if (item.Equals("ddtcbz", StringComparison.CurrentCultureIgnoreCase)) { ddtcbz = obj.ToString(); } if (item.Equals("ddtcmc", StringComparison.CurrentCultureIgnoreCase)) { ddtcmc = obj.ToString(); } if (item.Equals("CZCSXM", StringComparison.CurrentCultureIgnoreCase)) { czcsxm = obj.ToString(); } } if (item.Equals("XMLX")) { xmlx = obj == null ? "" : obj.ToString(); } if (item.Equals("QSXZ")) { qsxz = obj == null ? "" : obj.ToString(); } if (item.Equals("DLBM")) { dlbm = obj == null ? "" : obj.ToString(); } else if (item.Equals("ZZSXDM")) { zzsxdm = obj == null ? "" : obj.ToString(); } else if (item.Equals("TBXHDM")) tbxhdm = obj == null ? "" : obj.ToString(); else if (item.Equals("SJNF")) sjnf = obj == null ? "" : obj.ToString(); IField field = feature.Fields.Field[index]; switch (field.Type) { case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeBlob: if (obj == null || obj == DBNull.Value) { bgHValue += item + "=0,"; } else { bgHValue += item + "=" + obj + ","; } break; default: if (item.Equals("KCDLBM", StringComparison.CurrentCultureIgnoreCase)) { if (!dlbm.StartsWith("01")) { bgHValue += item + "='" + "" + "',"; } else { bgHValue += item + "='" + obj + "',"; } } else if (item.Equals("WBGYY1", StringComparison.CurrentCultureIgnoreCase)) { //if (string.IsNullOrEmpty(obj.ToString())) wbgyyms = obj.ToString(); } else if (item.Equals("WBGYY", StringComparison.CurrentCultureIgnoreCase)) { if (obj.ToString() == "其他") bgHValue += item + "='" + wbgyyms + "',"; else bgHValue += item + "='" + obj + "',"; } else if (item.Equals("GDLX", StringComparison.CurrentCultureIgnoreCase)) { bgHValue += item + "='" + obj + "',"; if (obj != null && (obj.ToString().Equals("TT") || obj.ToString().Equals("PD"))) { string gdpdjb = ""; int gdpdjbIndex = feature.Fields.FindField("GDPDJB"); if (gdpdjbIndex > -1) { object gdpdjbValue = feature.get_Value(gdpdjbIndex); if (gdpdjbValue != null && !string.IsNullOrEmpty(gdpdjbValue.ToString())) { gdpdjb = gdpdjbValue.ToString(); } else gdpdjb = GetPojb(feature, layerPodu); } else gdpdjb = GetPojb(feature, layerPodu); double gdkcxs = DTBDBLoadHelper.GetTKXS(gdpdjb, obj.ToString()); double kcmj = gdkcxs * mj; double tbdlmj = mj - kcmj; bgHValue += $"gdpdjb = '{gdpdjb}',kcxs = {gdkcxs}, kcmj = {kcmj}, tbdlmj = {tbdlmj}, "; } } else if (item.Equals("JZYBH", StringComparison.CurrentCultureIgnoreCase) && (obj == null || string.IsNullOrEmpty(obj.ToString()))) { string JZYBH = string.Empty; if (CurrentWYRWTB != null) JZYBH = CurrentWYRWTB.JCBH; else if (dataTableWYRW != null && dataTableWYRW.Rows.Count > 0) { JZYBH = dataTableWYRW.Rows[0]["JCBH"].ToString(); } obj = JZYBH; bgHValue += item + "='" + obj + "',"; feature.set_Value(index, obj); } else if (item.Equals("LJTBBH", StringComparison.CurrentCultureIgnoreCase) && (obj == null || string.IsNullOrEmpty(obj.ToString()))) { if (dataTableDetailjson != null && dataTableDetailjson.Rows.Count > 0) { for (int i = 0; i < dataTableDetailjson.Rows.Count; i++) { if (dataTableDetailjson.Rows[i]["Name"].ToString() == "类举图斑编号" || dataTableDetailjson.Rows[i]["Name"].ToString() == "LJTBBH") { obj = dataTableDetailjson.Rows[i]["Value"].ToString(); bgHValue += item + "='" + obj + "',"; feature.set_Value(index, obj); break; } } } } else { bgHValue += item + "='" + obj + "',"; } break; } } //feature.Store(); string sadff = string.Format(excuteSQL, bgHValue.TrimEnd(','), BSM); rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, bgHValue.TrimEnd(','), BSM), CommandType.Text); //地类名称 string dlmc = string.Empty; DataDicTionary dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.DLBM).FirstOrDefault(x => x.CODE.Equals(dlbm)); if (dataDicTionary != null) { dlmc = dataDicTionary.NAME; } //种植属性名称 string zzsxmc = string.Empty; dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.ZZSX).FirstOrDefault(x => x.CODE.Equals(zzsxdm)); if (dataDicTionary != null) { zzsxmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}' where bsm='{BSM}'", CommandType.Text); //单独图层名称 dataDicTionary = Platform.Instance.DicHelper.GetAllDic().FirstOrDefault(x => x.CODE.Equals(ddtcbz)); if (dataDicTionary != null) { ddtcmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}' where bsm='{BSM}'", CommandType.Text); //图斑细化名称 string tbxhmc = string.Empty; dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.TBXHLX).FirstOrDefault(x => x.CODE.Equals(tbxhdm)); if (dataDicTionary != null) { tbxhmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"update dtbdltbgx set dlmc='{dlmc}',zzsxmc='{zzsxmc}',ddtcmc='{ddtcmc}',tbxhmc='{tbxhmc}',qsxz='{qsxz}' where bsm='{BSM}'", CommandType.Text); //保存独立图层代码 switch (ddtcbz) { case "1301"://临时用地2099010100 DataTable dataTable = IRowToDataTable(feature as IRow); if (dataTable != null && dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBLSYDGX (BSM, DDTCBZ, DDTCMC, YSDM, GLTBBSM, PZWJMC, PZWH, TBMJ, PZMJ, YTFL, JTXMYT, PZRQ, YQSX, TDSYHT, BZ, GXSJ) VALUES('{BSM}', '{ddtcbz}', '{ddtcmc}', '2099010100', '{BSM}', '{dr["PZWJMC_LSYD"]}', '{dr["PZWH_LSYD"]}', {dr["TBMJ"]}, {dr["TBMJ"]}, '{dr["YTFL_LSYD"]}', '{dr["JTXMYT_LSYD"]}', '{dr["PZRQ_LSYD"]}', '{dr["YQSX_LSYD"]}', '{dr["TDSYHT_LSYD"]}', '{dr["BZ"]}', '{dr["GXSJ"]}')", CommandType.Text); object obj = feature.get_Value(feature.Fields.FindField("PZWJ_LSYD")); if (obj != null && !(obj is DBNull)) { IMemoryBlobStreamVariant varBlobStream = (IMemoryBlobStreamVariant)obj; object obj1 = null; varBlobStream.ExportToVariant(out obj1); rdbHelper.ExecuteNonQueryWithException($"INSERT INTO PZWJ(BSM, Name, Path, Extension) VALUES('{BSM}', '{dr["PZWJMC_LSYD"]}', '', '')", CommandType.Text); IDbDataParameter[] parameters = new IDbDataParameter[1]; parameters[0] = new System.Data.SQLite.SQLiteParameter("FileContent", DbType.Binary) { Value = obj1 }; rdbHelper.ExecuteNonQueryWithException($"update PZWJ SET FileContent=@FileContent where bsm='{BSM}'", CommandType.Text, parameters); } } break; case "1302"://光伏板区2099070100 dataTable = IRowToDataTable(feature as IRow); if (dataTable != null && dataTable.Rows.Count > 0) { DataRow dr = dataTable.Rows[0]; rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBGFBQGX(BSM, DDTCBZ, DDTCMC, YSDM, XMMC, XMGM, QYMJ, PZYDSJ, BZ, GXSJ) VALUES('{BSM}', '{ddtcbz}', '{ddtcmc}', '2099070100', '{dr["XMMC_GFBQ"]}', '{dr["XMGM_GFBQ"]}', {dr["TBMJ"]}, '{dr["PZYDSJ_GFBQ"]}', '{dr["BZ"]}', '{dr["GXSJ"]}')", CommandType.Text); } break; case "1303"://推土区 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBTTQGX(BSM, DDTCBZ, DDTCMC, YSDM, TTQMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099080100',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; case "1304"://拆除未尽区2099090100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBCCWJQGX (BSM, DDTCBZ, DDTCMC, YSDM, ZDMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099090100',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; case "1305"://路面范围2099100100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBLMFWGX (BSM, DDTCBZ, DDTCMC, YSDM, ZLDWDM, KD, MJ, DLBM, MC, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099100100',zldwdm,xzdwkd,tbmj,dlbm,'',bz,gxsj from dtbdltbgx where bsm='{BSM}';", CommandType.Text); break; case "1306"://工厂化种植更新2099120100 rdbHelper.ExecuteNonQueryWithException($"INSERT INTO GCHZZGX (BSM,YSDM,ZDMJ,DLBM,DLMC,BZ,GXSJ) select bsm,'2099120100',tbmj,dlbm,'',bz,gxsj from dtbdltbgx where bsm='{BSM}';", CommandType.Text); break; case "一般地类": if (xmlx == "1" || xmlx == "2") { DataTable dtXmlx2 = IRowToDataTable(feature as IRow); if (dtXmlx2 != null && dtXmlx2.Rows.Count > 0) { object obj = feature.get_Value(feature.Fields.FindField("XZGDFJ")); if (obj != null && !(obj is DBNull)) { string[] files = obj.ToString().Split(';'); string strSql = string.Empty; foreach (string file in files) { string strGuid = Guid.NewGuid().ToString(); var objBsm = rdbHelper.ExecuteScalar($"select bsm from wyhcfj where hcjlbsm = '{dtXmlx2.Rows[0]["TBBSM"].ToString()}' and fjmc = '{file.Substring(file.LastIndexOf("\\") + 1)}'", CommandType.Text); using (System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); IDbDataParameter[] parameters = new IDbDataParameter[5]; if (objBsm == null) { strSql = "INSERT INTO WYHCFJ ( HCLX, HCJLBSM, DKID, FJMC, FJLX, MODE,IS_SELECTED, SEQUENCE, SUBTYPE, ARG, ARG4, CJSJ, LENGTH, POINTS_JSON, UserDelete ) VALUES ( 'WYRWTB', @HCJLBSM, @HCJLBSM, @FJMC, 'PDF', '4',1, '0', '1', @ARG, @ARG4, @CJSJ, '0', '[]', '0' )"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx2.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } else { strSql = "UPDATE WYHCFJ SET ARG = @ARG, ARG4 = @ARG4, CJSJ = @CJSJ WHERE HCJLBSM=@HCJLBSM AND FJMC = @FJMC"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx2.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } rdbHelper.ExecuteNonQueryWithException(strSql, CommandType.Text, parameters); rdbHelper.ExecuteNonQueryWithException($"insert into fjgx (wytbbsm,fjarg,tbbsm) values ('{dtXmlx2.Rows[0]["TBBSM"].ToString()}','{strGuid}','{BSM}')", CommandType.Text); fs.Close(); } } } } } break; } string czcmc = string.Empty; //保存城镇村等用地 switch (czcsxm) { case "201": case "201A": case "202": case "202A": case "203": case "203A": case "204": case "205": dataDicTionary = Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.CZCJGKYD).FirstOrDefault(x => x.CODE.Equals(czcsxm)); if (dataDicTionary != null) { czcmc = dataDicTionary.NAME; } rdbHelper.ExecuteNonQueryWithException($"INSERT INTO DTBCZCDYDGX (BSM, DDTCBZ, DDTCMC, YSDM, CZCLX, CZCDM, CZCMC, CZCMJ, BZ, GXSJ) select bsm,ddtcbz,ddtcmc,'2099030100',czcsxm,'{xzqdm.PadRight(19, '0')}','{czcmc}',tbmj,bz,gxsj from dtbdltbgx where bsm='{BSM}'", CommandType.Text); break; } ////保存附件信息 //object images = feature.get_Value(feature.Fields.FindField("images")); //if (images != null) //{ // excuteSQL = "insert into fjgx(WYTBBSM,FJARG,tbbsm)values('{0}','{1}','{2}')"; // foreach (var item in images.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) // { // rdbHelper.ExecuteNonQueryWithException(string.Format(excuteSQL, tbbsm, item, BSM), CommandType.Text); // } //} //附件文件 保存 DataTable dtXmlx = IRowToDataTable(feature as IRow); if (dtXmlx != null && dtXmlx.Rows.Count > 0) { object obj = feature.get_Value(feature.Fields.FindField("XZGDFJ")); if (obj != null && !(obj is DBNull) && !string.IsNullOrWhiteSpace(obj.ToString())) { string[] files = obj.ToString().Split(';'); string strSql = string.Empty; foreach (string file in files) { string strGuid = Guid.NewGuid().ToString(); var objBsm = rdbHelper.ExecuteScalar($"select bsm from wyhcfj where hcjlbsm = '{dtXmlx.Rows[0]["TBBSM"].ToString()}' and fjmc = '{file.Substring(file.LastIndexOf("\\") + 1)}'", CommandType.Text); using (System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); IDbDataParameter[] parameters = new IDbDataParameter[5]; if (objBsm == null) { strSql = "INSERT INTO WYHCFJ ( HCLX, HCJLBSM, DKID, FJMC, FJLX, MODE,IS_SELECTED, SEQUENCE, SUBTYPE, ARG, ARG4, CJSJ, LENGTH, POINTS_JSON, UserDelete ) VALUES ( 'WYRWTB', @HCJLBSM, @HCJLBSM, @FJMC, 'PDF', '4',1, '0', '1', @ARG, @ARG4, @CJSJ, '0', '[]', '0' )"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } else { strSql = "UPDATE WYHCFJ SET ARG = @ARG, ARG4 = @ARG4, CJSJ = @CJSJ WHERE HCJLBSM=@HCJLBSM AND FJMC = @FJMC"; parameters[0] = new System.Data.SQLite.SQLiteParameter("HCJLBSM", DbType.String) { Value = dtXmlx.Rows[0]["TBBSM"].ToString() }; parameters[1] = new System.Data.SQLite.SQLiteParameter("FJMC", DbType.String) { Value = file.Substring(file.LastIndexOf("\\") + 1) }; parameters[2] = new System.Data.SQLite.SQLiteParameter("ARG", DbType.String) { Value = strGuid }; parameters[3] = new System.Data.SQLite.SQLiteParameter("ARG4", DbType.Binary) { Value = bytes }; parameters[4] = new System.Data.SQLite.SQLiteParameter("CJSJ", DbType.DateTime) { Value = DateTime.Now }; } rdbHelper.ExecuteNonQueryWithException(strSql, CommandType.Text, parameters); rdbHelper.ExecuteNonQueryWithException($"insert into fjgx (wytbbsm,fjarg,tbbsm) values ('{dtXmlx.Rows[0]["TBBSM"].ToString()}','{strGuid}','{BSM}')", CommandType.Text); fs.Close(); } } } } //根据图斑面积面积,限制外业照片、视频数量 string strTbmj = string.Empty; int tbmjIndex = feature.Fields.FindField("TBMJ"); if (tbmjIndex > -1) { strTbmj = feature.get_Value(tbmjIndex).ToString(); DataTable dtFj = rdbHelper.ExecuteDatatable("wyhcfj", $"select sum(case when mode in ('5') then 1 else 0 end) as videocount,sum(case when mode not in ('4','5') then 1 else 0 end) as imagecount from wyhcfj a inner join fjgx b on a.hcjlbsm=b.wytbbsm and b.fjarg = a.arg and b.tbbsm ='{BSM}' where HCJLBSM='{tbbsm}' and (UserDelete <> 1 or UserDelete is not null)", true); if (!string.IsNullOrEmpty(strTbmj) && dtFj != null && dtFj.Rows.Count > 0) { int imageCount = 0, videoCount = 0; if (dtFj.Rows[0]["imagecount"] != null && !string.IsNullOrEmpty(dtFj.Rows[0]["imagecount"].ToString())) { imageCount = int.Parse(dtFj.Rows[0]["imagecount"].ToString()); } if (dtFj.Rows[0]["videocount"] != null && !string.IsNullOrEmpty(dtFj.Rows[0]["videocount"].ToString())) { videoCount = int.Parse(dtFj.Rows[0]["videocount"].ToString()); } decimal tbmj = (Convert.ToDouble(strTbmj) / 666.67).ToDecimal(2); if (tbmj <= 5) { if (imageCount > 15 || videoCount > 2) { //MessageHelper.Show("图斑面积小于5亩时,外业照片数量超过15张,或者外业视频数量超过2段"); LogAPI.Debug("图斑面积小于5亩时,外业照片数量超过15张,或者外业视频数量超过2段"); return; } } if (5 < tbmj && tbmj <= 20) { if (imageCount > 30 || videoCount > 5) { //MessageHelper.Show("图斑面积大于5亩小于等于20亩时,外业照片数量超过30张,或者外业视频数量超过5段"); LogAPI.Debug("图斑面积大于5亩小于等于20亩时,外业照片数量超过30张,或者外业视频数量超过5段"); return; } } if (tbmj > 20) { if (imageCount > 50 || videoCount > 7) { //MessageHelper.Show("图斑面积大于20亩时,外业照片数量超过50张,或者外业视频数量超过7段"); LogAPI.Debug("图斑面积大于20亩时,外业照片数量超过50张,或者外业视频数量超过7段"); return; } } } } } catch (Exception ex) { LogAPI.Debug("DataOperationHelper_65.SaveUpdateBGFWAndDLTC 异常" + ex.Message); LogAPI.Debug("DataOperationHelper_65.SaveUpdateBGFWAndDLTC 异常" + ex.StackTrace); throw ex; } } #endregion } #endregion }