using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Framework.AE; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using Kingo.ImageViewForWebSocket; using Kingo.PluginServiceInterface; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; namespace Kingo.Plugin.DataLoad.Service { public class ProofManager : IProofManager { private string DBPath = string.Empty; private ProjectInfo PrjInfo { get { return MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; } } private Dictionary DICIRDBHelper = null; private string pPath = string.Empty; public List GetProofInfoList(string pJCBH) { #region //if (string.IsNullOrWhiteSpace(pJCBH) || PrjInfo == null) // return null; //List result = new List(); //try //{ // ProofInfo proofInfo = new ProofInfo(); // DataTable tbDT = SQLiteDBOperate.Instance.ExceDataTable(DBPath, string.Format("select * from BGDC2020 where JCBH='{0}'", pJCBH)); // if (tbDT != null && tbDT.Rows.Count > 0) // { // foreach (DataRow dr in tbDT.Rows) // { // proofInfo.JCBH = dr["JCBH"].ToTrim(); // proofInfo.BGDL = dr["BGDL"].ToTrim(); // proofInfo.BGFW = dr["BGFW"].ToTrim(); // proofInfo.WBGLX = dr["WBGLX"].ToTrim(); // proofInfo.BZ = dr["BZ"].ToTrim(); // } // } // var tempPrj = new ProjectInfo(); // byte[] jcbh = tempPrj.AesEncrypt(pJCBH.ToTrim(), "58ef12f9891a4cd89fa7bdd181ef13a7"); // DataTable dt = SQLiteDBOperate.Instance.ExceDataTable(DBPath, string.Format("select TCBM,TBYBH,FJMC,XZB,YZB,Longitude,Latitude,PSJD,FJLX from FJ where TBYBH='{0}' or TBYBH='{1}' ", pJCBH, Convert.ToBase64String(jcbh))); // if (dt != null && dt.Rows.Count > 0) // { // List imgList = new List(); // proofInfo.ImgList = imgList; // foreach (DataRow dr in dt.Rows) // { // AttachEntity entity = new AttachEntity(); // entity.FJMC = dr["FJMC"].ToString(); // entity.AttachLocationPath = PrjInfo.ProjDir + "\\Picture\\" + dr["FJMC"].ToString(); // double xzb, yzb; // if (double.TryParse(dr["Longitude"].ToString(), out xzb) && double.TryParse(dr["Latitude"].ToString(), out yzb)) // { // IPoint mapPointC = new PointClass() { X = xzb, Y = yzb }; // if (mapPointC.X != 0) // { // ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); // mapPointC.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); // //创建图层 // ISpatialReference spatiaReference = GeoDBAPI.CreteSpatialReference(PrjInfo.PrjFileStr); // mapPointC.Project(spatiaReference); // entity.X = mapPointC.X; // entity.Y = mapPointC.Y; // System.Runtime.InteropServices.Marshal.ReleaseComObject(NewSpatialReference); // NewSpatialReference = null; // System.Runtime.InteropServices.Marshal.ReleaseComObject(mapPointC); // mapPointC = null; // } // else // { // continue; // } // } // else // { // if (dr["XZB"] != DBNull.Value) // { // entity.X = Convert.ToDouble(dr["XZB"]); // } // if (dr["YZB"] != DBNull.Value) // { // entity.Y = Convert.ToDouble(dr["YZB"]); // } // } // if (dr["PSJD"] != DBNull.Value) // { // entity.Angle = Convert.ToDouble(dr["PSJD"]); // } // //if (dr["FJLX"].ToString() != "V" && entity is T) // if (dr["FJLX"].ToString() != "V") // imgList.Add(entity); // } // } // ExportPic(new List() { pJCBH, Convert.ToBase64String(jcbh) }, DBPath); // result.Add((T)(object)proofInfo); //} //catch (Exception ex) //{ // MessageHelper.Show("获取举证信息时发生异常,详细信息请查看日志"); // LogAPI.Debug("获取举证信息时发生异常,异常信息如下:"); // LogAPI.Debug(ex); //} //return result; #endregion if (string.IsNullOrWhiteSpace(pJCBH) || PrjInfo == null) return null; List result = new List(); string DBPath = string.Empty; string Extension = string.Empty;//文件扩展名 DataTable tbbh_dbpath = null; DataTable dt = null; DataTable tbInfoDT = null; IRDBHelper rdbHelper = null; try { ProofInfo proofInfo = null; if (pPath != PrjInfo.ProjDir) { pPath = PrjInfo.ProjDir; Clear(); } if (DICIRDBHelper == null) DICIRDBHelper = new Dictionary(); string dbPath = $"{PrjInfo.ProjDir}\\BGTJ.sqlite"; rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); tbbh_dbpath = rdbHelper.ExecuteDatatable("tbbh", $@"select IsChecked,FileName,ParengFolder||'\'||FileName DbPath,Extension from DBFILEINFO WHERE ParengFolder||'\'||FileName=(select DbPath from hcdb_relation WHERE TBBH='{pJCBH}') and IsChecked<>0 and IsDelete<>0 ", true); if (tbbh_dbpath == null || tbbh_dbpath.Rows.Count == 0) return null; Extension = tbbh_dbpath.Rows[0]["Extension"].ToString(); DBPath = tbbh_dbpath.Rows[0]["DbPath"].ToString(); switch (Extension) { case ".db": var tempPrj = new ProjectInfo(); if (!DICIRDBHelper.ContainsKey(DBPath)) DICIRDBHelper.Add(DBPath, RDBFactory.CreateDbHelper("Data Source=" + DBPath, DatabaseType.SQLite)); rdbHelper = DICIRDBHelper[DBPath]; proofInfo = new ProofInfo(); tbInfoDT = rdbHelper.ExecuteDatatable("tb", $"select BSM, TBLX, XZQDM, XMC, TBBH, TBMC, TBMJ, XZB, YZB, BZ, b.KZXX, TBFW,WYHSQK,SDDLDM,DCRY,DCSJ from TBJBXX a ,DCHSXX b on a.BSM=b.TBBSM where TBBH='{pJCBH}'", true); if (tbInfoDT != null && tbInfoDT.Rows.Count > 0) { Dictionary dicJson = JsonConvert.DeserializeObject>(tbInfoDT.Rows[0]["KZXX"].ToTrim()); if (dicJson != null) { #region 外业信息 if (!string.IsNullOrWhiteSpace(tbInfoDT.Rows[0]["WYHSQK"].ToTrim())) proofInfo.WYHSQK = tbInfoDT.Rows[0]["WYHSQK"].ToTrim(); if (!string.IsNullOrWhiteSpace(tbInfoDT.Rows[0]["SDDLDM"].ToTrim())) proofInfo.SDDLDM = tbInfoDT.Rows[0]["SDDLDM"].ToTrim(); if (!string.IsNullOrWhiteSpace(tbInfoDT.Rows[0]["DCRY"].ToTrim())) proofInfo.DCRY = tbInfoDT.Rows[0]["DCRY"].ToTrim(); if (!string.IsNullOrWhiteSpace(tbInfoDT.Rows[0]["DCSJ"].ToTrim())) proofInfo.DCSJ = tbInfoDT.Rows[0]["DCSJ"].ToTrim();//当前调查时间为字符串类型 if (!string.IsNullOrWhiteSpace(tbInfoDT.Rows[0]["TBBH"].ToTrim())) proofInfo.JCBH = tbInfoDT.Rows[0]["TBBH"].ToTrim(); if (dicJson.ContainsKey("BGFW")) proofInfo.BGFW = dicJson["BGFW"].ToTrim(); if (dicJson.ContainsKey("WBGLX")) proofInfo.WBGLX = dicJson["WBGLX"].ToTrim(); if (dicJson.ContainsKey("BZ")) proofInfo.BZ = dicJson["BZ"].ToTrim(); #endregion } dt = rdbHelper.ExecuteDatatable("tb", string.Format("select TBBSM,FJMC,Longitude,Latitude,PSJD,FJLX,ISSELECTED from FJ where TBBSM='{0}' ", tbInfoDT.Rows[0]["BSM"]), true); if (dt != null && dt.Rows.Count > 0) { List imgList = new List(); foreach (DataRow dr in dt.Rows) { AttachEntity entity = new AttachEntity(); entity.FJMC = dr["FJMC"].ToString(); entity.AttachLocationPath = PrjInfo.ProjDir + "\\Picture\\" + dr["FJMC"].ToString(); entity.JCBH = dr["TBBSM"].ToTrim(); entity.isCheck = (bool)dr["ISSELECTED"]; double xzb, yzb; if (double.TryParse(dr["Longitude"].ToString(), out xzb) && double.TryParse(dr["Latitude"].ToString(), out yzb)) { IPoint mapPointC = new PointClass() { X = xzb, Y = yzb }; if (mapPointC.X != 0) { ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); mapPointC.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); //创建图层 ISpatialReference spatiaReference = GeoDBAPI.CreteSpatialReference(PrjInfo.PrjFileStr); mapPointC.Project(spatiaReference); entity.X = mapPointC.X; entity.Y = mapPointC.Y; System.Runtime.InteropServices.Marshal.ReleaseComObject(NewSpatialReference); NewSpatialReference = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(mapPointC); mapPointC = null; } else { continue; } } else { if (tbInfoDT.Rows[0]["XZB"] != DBNull.Value) { entity.X = Convert.ToDouble(tbInfoDT.Rows[0]["XZB"]); } if (tbInfoDT.Rows[0]["YZB"] != DBNull.Value) { entity.Y = Convert.ToDouble(tbInfoDT.Rows[0]["YZB"]); } } if (dr["PSJD"] != DBNull.Value) { entity.Angle = Convert.ToDouble(dr["PSJD"]); } if (dr["FJLX"].ToString() != "V") imgList.Add(entity); } proofInfo.ImgList = imgList; } ExportPic(new List() { tbInfoDT.Rows[0]["BSM"].ToTrim() }, DBPath); } //result.Add((T)(object)proofInfo); break; case ".hcdb": proofInfo = new ProofInfo(); if (!DICIRDBHelper.ContainsKey(DBPath)) DICIRDBHelper.Add(DBPath, RDBFactory.CreateDbHelper("Data Source=" + DBPath, DatabaseType.SQLite)); rdbHelper = DICIRDBHelper[DBPath]; tbInfoDT = rdbHelper.ExecuteDatatable("tb", string.Format("select WYRDDL as BGDL,'' BGFW ,'' WBGLX, WYBZ as BZ,DHRY as JZRY from SURVEY_RECORD where TBBH='{0}'", pJCBH), true); if (tbInfoDT != null && tbInfoDT.Rows.Count > 0) { proofInfo.BGDL = tbInfoDT.Rows[0]["BGDL"].ToTrim(); proofInfo.BGFW = tbInfoDT.Rows[0]["BGFW"].ToTrim(); proofInfo.WBGLX = tbInfoDT.Rows[0]["WBGLX"].ToTrim(); proofInfo.BZ = tbInfoDT.Rows[0]["BZ"].ToTrim(); } dt = rdbHelper.ExecuteDatatable("tb", string.Format("select FJMC,ZBX,ZBY,Longitude,Latitude,PSJD,FJLX,ISSelected from WYHCFJ where TBBH='{0}' ", pJCBH), true); if (dt != null && dt.Rows.Count > 0) { List imgList = new List(); proofInfo.ImgList = imgList; foreach (DataRow dr in dt.Rows) { AttachEntity entity = new AttachEntity(); entity.FJMC = dr["FJMC"].ToString(); entity.AttachLocationPath = PrjInfo.ProjDir + "\\Picture\\" + dr["FJMC"].ToString(); entity.isCheck = dr["ISSelected"].ToTrim() == "1"; entity.JCBH = pJCBH; double xzb, yzb; if (double.TryParse(dr["Longitude"].ToString(), out xzb) && double.TryParse(dr["Latitude"].ToString(), out yzb)) { IPoint mapPointC = new PointClass() { X = xzb, Y = yzb }; if (mapPointC.X != 0) { ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); mapPointC.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); //创建图层 ISpatialReference spatiaReference = GeoDBAPI.CreteSpatialReference(PrjInfo.PrjFileStr); mapPointC.Project(spatiaReference); entity.X = mapPointC.X; entity.Y = mapPointC.Y; System.Runtime.InteropServices.Marshal.ReleaseComObject(NewSpatialReference); NewSpatialReference = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(mapPointC); mapPointC = null; } else { continue; } } else { if (dr["ZBX"] != DBNull.Value) { entity.X = Convert.ToDouble(dr["ZBX"]); } if (dr["ZBY"] != DBNull.Value) { entity.Y = Convert.ToDouble(dr["ZBY"]); } } if (dr["PSJD"] != DBNull.Value) { entity.Angle = Convert.ToDouble(dr["PSJD"]); } if (dr["FJLX"].ToString() != "V") imgList.Add(entity); } } ExportPic(new List() { pJCBH }, DBPath); break; default: break; } if (proofInfo != null) result.Add((T)(object)proofInfo); } catch (Exception ex) { if (rdbHelper != null) rdbHelper.DisConnect(); //MessageHelper.Show("获取举证信息时发生异常,详细信息请查看日志"); LogAPI.Debug("获取举证信息时发生异常,异常信息如下:"); LogAPI.Debug(ex); } return result; } public List GetProofInfoList(object pGeo, string pAreaScale) { IGeometry geo = pGeo as IGeometry; if (geo == null) return null; List result = new List(); //空间查询逻辑 try { IFeatureLayer tysdjzLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JZCG"); if (tysdjzLayer != null && tysdjzLayer.FeatureClass != null) { List tysdjzFeatureList = FeatureAPI.Identify(geo, tysdjzLayer); if (tysdjzFeatureList != null && tysdjzFeatureList.Count != 0) { for (int i = 0; i < tysdjzFeatureList.Count; i++) { IFeature feature = tysdjzFeatureList[i]; if (feature != null) { IGeometry tysdjzGeo = feature.Shape; IGeometry interSectGeo = FeatureAPI.InterSect(geo, tysdjzGeo); IArea area = tysdjzGeo as IArea; IArea interSectArea = interSectGeo as IArea; IArea BGTBArea = geo as IArea; if (!string.IsNullOrWhiteSpace(pAreaScale)) { double scale = Convert.ToDouble(pAreaScale); if (interSectArea.Area / area.Area > scale / 100 || interSectArea.Area / BGTBArea.Area > scale / 100) { int fieldIndex = feature.Fields.FindField("JCBH"); if (fieldIndex < 0) continue; string jcbh = feature.Value[fieldIndex].ToString(); if (!string.IsNullOrWhiteSpace(jcbh)) { List list = GetProofInfoList(jcbh); if (list != null) result.AddRange(list); } } } } } } } } catch (Exception ex) { throw; } // return result; } private void ExportPic(List lstPic, string dbPath) { try { if (lstPic != null && lstPic.Count > 0) { string picPath = string.Empty; string picturePath = PrjInfo.ProjDir + "\\Picture"; if (!Directory.Exists(picturePath)) { Directory.CreateDirectory(picturePath); } foreach (string tbybh in lstPic) { DataTable tmDt = SQLiteDBOperate.Instance.ExceDataTable(dbPath, $"select FJ,FJMC from FJ where TBBSM='{tbybh}' "); if (tmDt != null && tmDt.Rows.Count > 0) { foreach (DataRow tmpDr in tmDt.Rows) { if (tmpDr != null && tmpDr["FJ"] != System.DBNull.Value) { picPath = PrjInfo.ProjDir + "\\Picture\\" + tmpDr["FJMC"].ToString(); if (!File.Exists(picPath)) { File.WriteAllBytes(PrjInfo.ProjDir + "\\Picture" + "\\" + tmpDr["FJMC"].ToString(), (tmpDr["FJ"] as byte[])); } } } } } } } catch (Exception ex) { LogAPI.Debug("举证照片写入本地异常:" + ex.Message); } } public void Clear() { if (DICIRDBHelper != null) { foreach (var item in DICIRDBHelper) { if (item.Value == null) continue; item.Value.DisConnect(); } DICIRDBHelper = null; } } } }