From 08148c093e4d369ea0f30c005dc5796d1fd4688b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B4=81=20=E4=BB=BB?= Date: Mon, 12 Jan 2026 10:03:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FireManagement/FireManagementApp.cs | 539 ++++++++++++++---- .../FireManagement/Request/FmCameraReq.cs | 29 + OpenAuth.Repository/Domain/FmCamera.cs | 19 +- .../FireManagementController.cs | 73 +++ 4 files changed, 539 insertions(+), 121 deletions(-) create mode 100644 OpenAuth.App/ServiceApp/FireManagement/Request/FmCameraReq.cs diff --git a/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs b/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs index 50d355c..0ff8f2a 100644 --- a/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs +++ b/OpenAuth.App/ServiceApp/FireManagement/FireManagementApp.cs @@ -36,6 +36,9 @@ using Hopetry.App.SugarModel.FeiXianModel.YingJingJu; using Infrastructure.Helpers; using Yitter.IdGenerator; using static Org.BouncyCastle.Math.EC.ECCurve; +using DocumentFormat.OpenXml.Wordprocessing; +using Newtonsoft.Json.Linq; +using DocumentFormat.OpenXml.Vml.Wordprocessing; namespace OpenAuth.App.ServiceApp.FireManagement { @@ -1530,6 +1533,428 @@ namespace OpenAuth.App.ServiceApp.FireManagement return "fail"; } + + public async Task> ListCameraWithInRange(string lng, string lat, int radius) + { + // '{lng}', '{lat}' + var sql = + @$"WITH reference_point AS ( SELECT ST_SetSRID ( ST_MakePoint ( '{lng}', '{lat}' )::geography, 4326 ) AS geom ) SELECT +l.* +FROM + fm_camera l, + reference_point r +WHERE + ST_DWithin ( ST_SetSRID ( ST_MakePoint ( l.""Lng"" :: FLOAT, l.""Lat"" :: FLOAT )::geography, 4326 ), r.geom, {radius} + ) +ORDER BY + ST_Distance ( ST_SetSRID ( ST_MakePoint ( l.""Lng"" :: FLOAT, l.""Lat"" :: FLOAT )::geography, 4326 ), r.geom ) "; + var x = await Repository.AsSugarClient().SqlQueryable(sql).ToListAsync(); + return new Response + { + Result = x + }; + } + + public async Task> ListDaHuaCameraInfo(int pageNum, int pageSize, int isOnline) + { + var daHuaApi = new DaHuaApi("https://icc-dev.hibetatest.com:4077"); + var channelCategoryRequest = new ChannelCategoryRequest + { + pageNum = pageNum, + pageSize = pageSize, + isOnline = 1, + unitTypeList = new List { 1 }, + }; + Console.WriteLine(JsonConvert.SerializeObject(channelCategoryRequest)); + var channelCategoryResponse = await daHuaApi.GetChannelCategoriesAsync(channelCategoryRequest); + if (channelCategoryResponse.success) + { + return new Response + { + Result = channelCategoryResponse.data.pageData + }; + } + + return new Response + { + Code = channelCategoryResponse.code, + Message = channelCategoryResponse.errMsg + }; + } + + public async Task> GetDaHuaRtsp(string channelCode, string streamType) + { + var daHuaApi = new DaHuaApi("https://icc-dev.hibetatest.com:4077"); + + var request = new RtspPreviewRequest + { + data = new RtspPreviewData + { + channelId = channelCode, + dataType = "1", + streamType = streamType //主码流 + } + }; + var y = await daHuaApi.StartRtspPreviewAsync(request); + if (y.success) + { + return new Response + { + Result = y.data + }; + } + + return new Response + { + Code = y.code, + Message = y.errMsg + }; + } + /// + /// 获取设备信息 + /// + /// + /// + /// + /// + public TableData LoadCameraInfo(string county, int pageIndex, int pageSize) + { + TableData data = new TableData(); + ConnectionConfig connectionConfig = new ConnectionConfig + { + ConnectionString = "server=10.176.126.121;Port=33066;Database=inspur_ztk;Uid=lyyj;Pwd=Lyyj1024", + DbType = DbType.MySql, + IsAutoCloseConnection = true, + MoreSettings = new ConnMoreSettings() + { + PgSqlIsAutoToLower = false,//增删查改支持驼峰表 + } + }; + using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) + { + int totalCount = 0; + var list = db.Queryable() + .WhereIF(!string.IsNullOrEmpty(county), r => r.qx.Contains(county)) + .Select(r => new ztk_jcjk_jkdw() + { + id = r.id.SelectAll(), + }) + .ToPageList(pageIndex, pageSize, ref totalCount); + data.data = list; + data.count = totalCount; + data.code = 200; + data.msg = "请求成功"; + } + return data; + } + + + + /// + /// 获取应急局摄像头信息---添加到数据库表 + /// + /// + /// + /// + /// + public async Task> AddCameraInfoYingJi(string county) + { + ConnectionConfig connectionConfig = new ConnectionConfig + { + ConnectionString = "server=10.176.126.121;Port=33066;Database=inspur_ztk;Uid=lyyj;Pwd=Lyyj1024", + DbType = DbType.MySql, + IsAutoCloseConnection = true, + MoreSettings = new ConnMoreSettings() + { + PgSqlIsAutoToLower = false,//增删查改支持驼峰表 + } + }; + List fclist=new List(); + using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) + { + //var list = db.Queryable() + // .WhereIF(!string.IsNullOrEmpty(county), r => r.qx.Contains(county)) + // .Select(r => new ztk_jcjk_jkdw() + // { + // id = r.id.SelectAll(), + // }) + // .ToList(); + //foreach(var item in list) + //{ + // FmCamera fc=new FmCamera(); + // fc.Id = Guid.NewGuid().ToString(); + // fc.Name = item.jkdmckjg+"_热成像"; + // fc.Model = "ShiYingJiReChengXiang"; + // fc.Status = item.tyzt; //停用状态 + // fc.Manufacturer = "大华"; + // fc.SerialNumber = item.jkdgbidzlkjg; + // fc.Ip = "221.2.83.254"; + // fc.Channel = 0; + // fc.Lng = item.jd.ToString(); + // fc.Lat = item.wd.ToString(); + // fc.UpdateTime = DateTime.Now; + // fc.AppKey = null; + // fc.AppSecret = null; + // fc.Port = "7012"; + // fc.RegionPathName = item.ssfz; + // fc.CameraType = null; + // fc.SerialNumberRcx = item.jkdgbidzlrcx; + // fclist.Add(fc); + //} + } + using (var db = base.UnitWork.CreateContext()) + { + var list = db.FmCamera_yjj.AsQueryable().ToList(); + foreach (var item in list) + { + FmCamera fc = new FmCamera(); + fc.Id = Guid.NewGuid().ToString(); + fc.Name = item.jkdmckjg + "_热成像"; + fc.Model = "ShiYingJiReChengXiang"; + fc.Status = item.tyzt; //停用状态 + fc.Manufacturer = "大华"; + fc.SerialNumber = item.jkdgbidzlkjg; + fc.Ip = "221.2.83.254"; + fc.Channel = 0; + fc.Lng = item.jd.ToString(); + fc.Lat = item.wd.ToString(); + fc.UpdateTime = DateTime.Now; + fc.AppKey = null; + fc.AppSecret = null; + fc.Port = "7012"; + fc.RegionPathName = item.ssfz; + fc.CameraType = null; + fc.SerialNumberRcx = item.jkdgbidzlrcx; + fclist.Add(fc); + } + var flag= await db.FmCamera.InsertRangeAsync(fclist); + if (db.Commit()&&flag==true) + { + return new Response { Result = true, Message = "操作成功" }; + } + else + { + return new Response { Result = false, Message = "操作失败" }; + } + } + } + + /// + /// 海康摄像头添加 + /// + /// 海康平台ip + /// 海康平台端口 + /// 组织架构路径id + /// appkey + /// appsecret + /// + public async Task>AddHaiKangCameraInfo(string ip, int port,string pathid,string appkey, string appsecret,int pageno=1,int pagesize=100) + { + // 设置平台信息 + HttpUtillib.SetPlatformInfo(appkey, appsecret, ip, port, true); + + // 构建请求参数 + var obj = new + { + regionIndexCodes = new string[] { pathid }, // 确保是数组格式 + isSubRegion = true, + pageNo = pageno, + pageSize = pagesize, // 建议不要设置过大,海康可能有最大限制 + orderBy="name", + orderType= "desc" + }; + + string body = JsonConvert.SerializeObject(obj); + string uri = "/artemis/api/resource/v2/camera/search"; + byte[] result = HttpUtillib.HttpPost(uri, body, 15,1); + List fclist = new List(); + var param = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(result)); + var data= param["data"]["list"]; + + using (var db = base.UnitWork.CreateContext()) + { + foreach (var item in data) + { + //string sql = @"select * from fm_camera1 WHERE ""SerialNumber""='" + item["indexCode"] + "'"; + //var cam=await Repository.AsSugarClient().SqlQueryable(sql).ToListAsync(); + //if (cam.Count>0) + //{ + FmCamera fc = new FmCamera(); + fc.Id = Guid.NewGuid().ToString(); + fc.Name = item["name"].ToString(); + var type = item["regionPathName"].ToString(); + if (type.IndexOf("林场") > -1) + { + fc.Model = "LinQuSheXiangTou"; + } + else + { + if (type.IndexOf("林下") > -1) + { + fc.Model = "ShengTaiLinShiPinJianKong"; + } + else + { + if (type.IndexOf("高空瞭望") > -1) + { + fc.Model = "GaoKongLiaoWang"; + } + else + { + fc.Model = "ShiPinJianKong"; + } + } + } + + fc.Status = "0"; //停用状态 + fc.Manufacturer = "海康"; + fc.SerialNumber = item["indexCode"].ToString(); + fc.Ip = ip; + fc.Channel = 0; + fc.Lng = item["longitude"].ToString(); + fc.Lat = item["latitude"].ToString(); + fc.UpdateTime = Convert.ToDateTime(item["createTime"].ToString()); + fc.AppKey = appkey; + fc.AppSecret = appsecret; + fc.Port = port.ToString(); + fc.RegionPathName = item["regionPathName"].ToString(); + fc.CameraType = Convert.ToInt32(item["cameraType"]); + fc.SerialNumberRcx = null; + fclist.Add(fc); + //} + //else + //{ + // continue; + //} + + } + var flag = await db.FmCamera.InsertRangeAsync(fclist); + if (db.Commit() && flag == true) + { + return new Response { Result = true, Message = "操作成功" }; + } + else + { + return new Response { Result = false, Message = "操作失败" }; + } + } + } + + + public async Task> AddHaiKangCameraInfoBeiFen(string ip, int port, string pathid, string appkey, string appsecret, int pageno = 1, int pagesize = 100) + { + // 设置平台信息 + HttpUtillib.SetPlatformInfo(appkey, appsecret, ip, port, true); + + // 构建请求参数 + var obj = new + { + regionIndexCodes = new string[] { pathid }, // 确保是数组格式 + isSubRegion = true, + pageNo = pageno, + pageSize = pagesize, // 建议不要设置过大,海康可能有最大限制 + orderBy = "name", + orderType = "desc" + }; + + string body = JsonConvert.SerializeObject(obj); + string uri = "/artemis/api/resource/v2/camera/search"; + byte[] result = HttpUtillib.HttpPost(uri, body, 15, 1); + List fclist = new List(); + var param = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(result)); + var data = param["data"]["list"]; + + using (var db = base.UnitWork.CreateContext()) + { + foreach (var item in data) + { + string sql = @"select * from fm_camera1 WHERE ""SerialNumber""='" + item["indexCode"] + "'"; + var cam = await Repository.AsSugarClient().SqlQueryable(sql).ToListAsync(); + if (cam.Count > 0) + { + FmCamera fc = new FmCamera(); + fc.Id = Guid.NewGuid().ToString(); + fc.Name = item["name"].ToString(); + var type = item["regionPathName"].ToString(); + if (type.IndexOf("林场") > -1) + { + fc.Model = "LinQuSheXiangTou"; + } + else + { + if (type.IndexOf("生态林") > -1) + { + fc.Model = "ShengTaiLinShiPinJianKong"; + } + else + { + if (type.IndexOf("高空瞭望") > -1) + { + fc.Model = "GaoKongLiaoWang"; + } + else + { + fc.Model = "ShiPinJianKong"; + } + } + } + + fc.Status = "0"; //停用状态 + fc.Manufacturer = "海康"; + fc.SerialNumber = item["indexCode"].ToString(); + fc.Ip = ip; + fc.Channel = 0; + fc.Lng = item["longitude"].ToString(); + fc.Lat = item["latitude"].ToString(); + fc.UpdateTime = Convert.ToDateTime(item["createTime"].ToString()); + fc.AppKey = appkey; + fc.AppSecret = appsecret; + fc.Port = port.ToString(); + fc.RegionPathName = item["regionPathName"].ToString(); + fc.CameraType = Convert.ToInt32(item["cameraType"]); + fc.SerialNumberRcx = null; + fclist.Add(fc); + } + else + { + continue; + } + + } + var flag = await db.FmCamera.InsertRangeAsync(fclist); + if (db.Commit() && flag == true) + { + return new Response { Result = true, Message = "操作成功" }; + } + else + { + return new Response { Result = false, Message = "操作失败" }; + } + } + } + + + /// + /// 查询摄像头信息--后台使用 + /// + /// + public async Task>>> GetCameraInfoPageList(FmCameraReq req) + { + using (var db = base.UnitWork.CreateContext()) + { + RefAsync totalNumber = 0; + var infos = await db.FmCamera.AsQueryable() + .WhereIF(!string.IsNullOrEmpty(req.name), r => r.Name.Contains(req.name)) + .WhereIF(!string.IsNullOrEmpty(req.model), r => r.Model==req.model) + .WhereIF(!string.IsNullOrEmpty(req.manufacturer), r => r.Manufacturer.Contains(req.manufacturer)) + .WhereIF(!string.IsNullOrEmpty(req.serialnumber), r => r.SerialNumber.Contains(req.serialnumber)) + .ToPageListAsync(req.page, req.limit, totalNumber); + return new Response>> + { + Result = new PageInfo> { Items = infos, Total = totalNumber } + }; + } + } #endregion #region 人员类型统计 @@ -1782,120 +2207,6 @@ namespace OpenAuth.App.ServiceApp.FireManagement #endregion - public async Task> ListCameraWithInRange(string lng, string lat, int radius) - { - // '{lng}', '{lat}' - var sql = - @$"WITH reference_point AS ( SELECT ST_SetSRID ( ST_MakePoint ( '{lng}', '{lat}' )::geography, 4326 ) AS geom ) SELECT -l.* -FROM - fm_camera l, - reference_point r -WHERE - ST_DWithin ( ST_SetSRID ( ST_MakePoint ( l.""Lng"" :: FLOAT, l.""Lat"" :: FLOAT )::geography, 4326 ), r.geom, {radius} - ) -ORDER BY - ST_Distance ( ST_SetSRID ( ST_MakePoint ( l.""Lng"" :: FLOAT, l.""Lat"" :: FLOAT )::geography, 4326 ), r.geom ) "; - var x = await Repository.AsSugarClient().SqlQueryable(sql).ToListAsync(); - return new Response - { - Result = x - }; - } - - public async Task> ListDaHuaCameraInfo(int pageNum, int pageSize, int isOnline) - { - var daHuaApi = new DaHuaApi("https://icc-dev.hibetatest.com:4077"); - var channelCategoryRequest = new ChannelCategoryRequest - { - pageNum = pageNum, - pageSize = pageSize, - isOnline = 1, - unitTypeList = new List { 1 }, - }; - Console.WriteLine(JsonConvert.SerializeObject(channelCategoryRequest)); - var channelCategoryResponse = await daHuaApi.GetChannelCategoriesAsync(channelCategoryRequest); - if (channelCategoryResponse.success) - { - return new Response - { - Result = channelCategoryResponse.data.pageData - }; - } - - return new Response - { - Code = channelCategoryResponse.code, - Message = channelCategoryResponse.errMsg - }; - } - - public async Task> GetDaHuaRtsp(string channelCode,string streamType) - { - var daHuaApi = new DaHuaApi("https://icc-dev.hibetatest.com:4077"); - - var request = new RtspPreviewRequest - { - data = new RtspPreviewData - { - channelId = channelCode, - dataType = "1", - streamType = streamType //主码流 - } - }; - var y = await daHuaApi.StartRtspPreviewAsync(request); - if (y.success) - { - return new Response - { - Result = y.data - }; - } - - return new Response - { - Code = y.code, - Message = y.errMsg - }; - } - /// - /// 获取设备信息 - /// - /// - /// - /// - /// - public TableData LoadCameraInfo(string county, int pageIndex, int pageSize) - { - TableData data = new TableData(); - ConnectionConfig connectionConfig = new ConnectionConfig - { - ConnectionString = "server=10.176.126.121;Port=33066;Database=inspur_ztk;Uid=lyyj;Pwd=Lyyj1024", - DbType = DbType.MySql, - IsAutoCloseConnection = true, - MoreSettings = new ConnMoreSettings() - { - PgSqlIsAutoToLower = false,//增删查改支持驼峰表 - } - }; - using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) - { - int totalCount = 0; - var list = db.Queryable() - .WhereIF(!string.IsNullOrEmpty(county), r => r.qx.Contains(county)) - .Select(r => new ztk_jcjk_jkdw() - { - id = r.id.SelectAll(), - }) - .ToPageList(pageIndex, pageSize, ref totalCount); - data.data = list; - data.count = totalCount; - data.code = 200; - data.msg = "请求成功"; - } - return data; - } - #region 感知中心--摄像头类型 /// diff --git a/OpenAuth.App/ServiceApp/FireManagement/Request/FmCameraReq.cs b/OpenAuth.App/ServiceApp/FireManagement/Request/FmCameraReq.cs new file mode 100644 index 0000000..e6f72a6 --- /dev/null +++ b/OpenAuth.App/ServiceApp/FireManagement/Request/FmCameraReq.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.FireManagement.Request +{ + public class FmCameraReq + { + //摄像头类型,与字典对应 + public string model { get; set; } + //摄像头名称 + public string name { get; set; } + //厂商 + public string manufacturer { get; set; } + //序列号 + public string serialnumber { get; set; } + //当前页 + public int page { get; set; } + //每页条数 + public int limit { get; set; } + public FmCameraReq() + { + page = 1; + limit = 10; + } + } +} diff --git a/OpenAuth.Repository/Domain/FmCamera.cs b/OpenAuth.Repository/Domain/FmCamera.cs index af1a80a..8f9a231 100644 --- a/OpenAuth.Repository/Domain/FmCamera.cs +++ b/OpenAuth.Repository/Domain/FmCamera.cs @@ -21,7 +21,7 @@ namespace OpenAuth.Repository.Domain /// Nullable:False /// [SugarColumn(IsPrimaryKey=true)] - public long Id {get;set;} + public string Id {get;set;} /// /// Desc:名称或编号 @@ -121,12 +121,17 @@ namespace OpenAuth.Repository.Domain /// public string RegionPathName {get;set;} - /// - /// Desc:监控点类型 枪机 0 半球 1 快球 2 带云台枪机 3 - /// Default: - /// Nullable:True - /// - public int? CameraType {get;set;} + /// + /// Desc:监控点类型 枪机 0 半球 1 快球 2 带云台枪机 3 + /// Default: + /// Nullable:True + /// + public int? CameraType {get;set;} + + /// + /// 大华热成像序列号 + /// + public string SerialNumberRcx { get; set; } } } diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs index e8cbc36..8377beb 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/FireManagement/FireManagementController.cs @@ -11,6 +11,7 @@ using OpenAuth.App.ServiceApp.FireManagement.Request; using OpenAuth.App.ServiceApp.FireManagement.Response; using OpenAuth.Repository.Domain.FireManagement; using DocumentFormat.OpenXml.EMMA; +using OpenAuth.Repository.Domain; namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement { @@ -857,5 +858,77 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.FireManagement } } #endregion + + #region 摄像头信息处理 + /// + /// 大华摄像头添加 + /// + /// 所属县区 + /// + [HttpPost] + [AllowAnonymous] + public async Task> AddCameraInfoYingJi(string county) + { + Response response = new Response(); + try + { + return await _app.AddCameraInfoYingJi(county); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + + /// + /// 获取海康平台摄像头列表信息,添加到数据库 + /// + /// 海康平台ip + /// 海康平台端口 + /// 组织架构路径id + /// appkey + /// appsecret + /// + [HttpPost] + [AllowAnonymous] + public async Task> AddHaiKangCameraInfo(string ip, int port, string pathid, string appkey, string appsecret) + { + Response response = new Response(); + try + { + return await _app.AddHaiKangCameraInfo(ip,port,pathid,appkey,appsecret); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + + + /// + /// 查询摄像头列表--后台使用 + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>>> GetCameraInfoPageList([FromQuery]FmCameraReq req) + { + Response>> response = new Response>>(); + try + { + return await _app.GetCameraInfoPageList(req); + } + catch (Exception ex) + { + response.Code = 500; + response.Message = ex.InnerException?.Message ?? ex.Message; + } + return response; + } + #endregion } }