摄像头相关接口添加

DataMaintenance
洁 任 2026-01-12 10:03:51 +08:00
parent 111091664f
commit 08148c093e
4 changed files with 539 additions and 121 deletions

View File

@ -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<Response<dynamic>> 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<dynamic>(sql).ToListAsync();
return new Response<dynamic>
{
Result = x
};
}
public async Task<Response<dynamic>> 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<int> { 1 },
};
Console.WriteLine(JsonConvert.SerializeObject(channelCategoryRequest));
var channelCategoryResponse = await daHuaApi.GetChannelCategoriesAsync(channelCategoryRequest);
if (channelCategoryResponse.success)
{
return new Response<dynamic>
{
Result = channelCategoryResponse.data.pageData
};
}
return new Response<dynamic>
{
Code = channelCategoryResponse.code,
Message = channelCategoryResponse.errMsg
};
}
public async Task<Response<dynamic>> 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<dynamic>
{
Result = y.data
};
}
return new Response<dynamic>
{
Code = y.code,
Message = y.errMsg
};
}
/// <summary>
/// 获取设备信息
/// </summary>
/// <param name="county"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
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<ztk_jcjk_jkdw>()
.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;
}
/// <summary>
/// 获取应急局摄像头信息---添加到数据库表
/// </summary>
/// <param name="county"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public async Task<Response<bool>> 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<FmCamera> fclist=new List<FmCamera>();
using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
{
//var list = db.Queryable<ztk_jcjk_jkdw>()
// .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<bool> { Result = true, Message = "操作成功" };
}
else
{
return new Response<bool> { Result = false, Message = "操作失败" };
}
}
}
/// <summary>
/// 海康摄像头添加
/// </summary>
/// <param name="ip">海康平台ip</param>
/// <param name="port">海康平台端口</param>
/// <param name="pathid">组织架构路径id</param>
/// <param name="appkey">appkey</param>
/// <param name="appsecret">appsecret</param>
/// <returns></returns>
public async Task<Response<bool>>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<FmCamera> fclist = new List<FmCamera>();
var param = JsonConvert.DeserializeObject<JObject>(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<dynamic>(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<bool> { Result = true, Message = "操作成功" };
}
else
{
return new Response<bool> { Result = false, Message = "操作失败" };
}
}
}
public async Task<Response<bool>> 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<FmCamera> fclist = new List<FmCamera>();
var param = JsonConvert.DeserializeObject<JObject>(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<dynamic>(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<bool> { Result = true, Message = "操作成功" };
}
else
{
return new Response<bool> { Result = false, Message = "操作失败" };
}
}
}
/// <summary>
/// 查询摄像头信息--后台使用
/// </summary>
/// <returns></returns>
public async Task<Response<PageInfo<List<FmCamera>>>> GetCameraInfoPageList(FmCameraReq req)
{
using (var db = base.UnitWork.CreateContext())
{
RefAsync<int> 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<PageInfo<List<FmCamera>>>
{
Result = new PageInfo<List<FmCamera>> { Items = infos, Total = totalNumber }
};
}
}
#endregion
#region 人员类型统计
@ -1782,120 +2207,6 @@ namespace OpenAuth.App.ServiceApp.FireManagement
#endregion
public async Task<Response<dynamic>> 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<dynamic>(sql).ToListAsync();
return new Response<dynamic>
{
Result = x
};
}
public async Task<Response<dynamic>> 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<int> { 1 },
};
Console.WriteLine(JsonConvert.SerializeObject(channelCategoryRequest));
var channelCategoryResponse = await daHuaApi.GetChannelCategoriesAsync(channelCategoryRequest);
if (channelCategoryResponse.success)
{
return new Response<dynamic>
{
Result = channelCategoryResponse.data.pageData
};
}
return new Response<dynamic>
{
Code = channelCategoryResponse.code,
Message = channelCategoryResponse.errMsg
};
}
public async Task<Response<dynamic>> 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<dynamic>
{
Result = y.data
};
}
return new Response<dynamic>
{
Code = y.code,
Message = y.errMsg
};
}
/// <summary>
/// 获取设备信息
/// </summary>
/// <param name="county"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
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<ztk_jcjk_jkdw>()
.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 感知中心--摄像头类型
/// <summary>

View File

@ -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;
}
}
}

View File

@ -21,7 +21,7 @@ namespace OpenAuth.Repository.Domain
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true)]
public long Id {get;set;}
public string Id {get;set;}
/// <summary>
/// Desc:名称或编号
@ -121,12 +121,17 @@ namespace OpenAuth.Repository.Domain
/// </summary>
public string RegionPathName {get;set;}
/// <summary>
/// Desc:监控点类型 枪机 0 半球 1 快球 2 带云台枪机 3
/// Default:
/// Nullable:True
/// </summary>
public int? CameraType {get;set;}
/// <summary>
/// Desc:监控点类型 枪机 0 半球 1 快球 2 带云台枪机 3
/// Default:
/// Nullable:True
/// </summary>
public int? CameraType {get;set;}
/// <summary>
/// 大华热成像序列号
/// </summary>
public string SerialNumberRcx { get; set; }
}
}

View File

@ -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 摄像头信息处理
/// <summary>
/// 大华摄像头添加
/// </summary>
/// <param name="county">所属县区</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<bool>> AddCameraInfoYingJi(string county)
{
Response<bool> response = new Response<bool>();
try
{
return await _app.AddCameraInfoYingJi(county);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
/// <summary>
/// 获取海康平台摄像头列表信息,添加到数据库
/// </summary>
/// <param name="ip">海康平台ip</param>
/// <param name="port">海康平台端口</param>
/// <param name="pathid">组织架构路径id</param>
/// <param name="appkey">appkey</param>
/// <param name="appsecret">appsecret</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<bool>> AddHaiKangCameraInfo(string ip, int port, string pathid, string appkey, string appsecret)
{
Response<bool> response = new Response<bool>();
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;
}
/// <summary>
/// 查询摄像头列表--后台使用
/// </summary>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<FmCamera>>>> GetCameraInfoPageList([FromQuery]FmCameraReq req)
{
Response<PageInfo<List<FmCamera>>> response = new Response<PageInfo<List<FmCamera>>>();
try
{
return await _app.GetCameraInfoPageList(req);
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.InnerException?.Message ?? ex.Message;
}
return response;
}
#endregion
}
}