From 307240c4ace6291326ba3b1f9c2e2a4c37764cfd Mon Sep 17 00:00:00 2001 From: fajiao <1519100073@qq.com> Date: Thu, 8 Dec 2022 09:43:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=20CameraType=20=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E6=9C=8D=E5=8A=A1=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cis.Application/Cb/Entity/BO/CbCameraBO.cs | 27 +++++++ Cis.Application/Cb/Entity/CbCameraParams.cs | 13 +++- .../Cb/Service/CbCameraParamsService.cs | 28 ++++--- Cis.Application/Cb/Service/CbCameraService.cs | 69 ++++++++++++++++- Cis.Application/Cis.Application.csproj | 8 +- Cis.Application/Cis.Application.xml | 75 +++++++++++++++---- .../Cm/Service/CmMarkGroupService.cs | 4 +- .../Cm/Service/CmMarkLabelService.cs | 10 +-- .../Core/Center/CameraDataCenter.cs | 32 +++++--- Cis.Application/Core/Center/InstanceCenter.cs | 16 ++++ Cis.Application/Core/Common/Extension.cs | 20 ++--- .../Component/CameraSDK/CameraSdkServer.cs | 2 +- .../MarkSeacher/MarkSearcherServer.cs | 4 +- .../Core/Component/Onvif/OnvifServer.cs | 2 +- .../Core/Service/MarkSearchService.cs | 3 + Cis.Application/Core/Service/OnvifService.cs | 3 + Cis.Application/Startup.cs | 1 + .../Sys/SeedData/SysDictDataSeedData.cs | 10 ++- .../Sys/SeedData/SysDictTypeSeedData.cs | 3 +- .../Sys/Service/SysDictDataService.cs | 2 +- .../Sys/Service/SysDictTypeService.cs | 4 +- Cis.Core/Cache/CacheSetup.cs | 11 +-- Cis.Core/Cis.Core.csproj | 2 +- Cis.Core/Cis.Core.xml | 28 ++++++- Cis.Core/Common/Entity/ServiceBase.cs | 21 +++--- Cis.Core/Common/Extension/ObjectExtension.cs | 17 +++++ Cis.Core/CoreConfig.json | 4 +- Cis.Web.Entry/Program.cs | 2 +- Cis.sln | 5 -- EC.Helper/CameraSDK/Common/CameraException.cs | 12 +-- EC.Helper/CameraSDK/Common/CameraStruct.cs | 28 +++---- EC.Helper/CameraSDK/DaHua/DaHuaSDK.cs | 2 +- EC.Helper/CameraSDK/HiK/HiKSDK.cs | 2 +- EC.Helper/CameraSDK/YuShi/YuShiSDK.cs | 2 +- EC.Helper/Onvif/OnvifClient.cs | 4 +- Frontend/src/api/cameraMark/markSearchApi.ts | 4 +- 36 files changed, 353 insertions(+), 127 deletions(-) create mode 100644 Cis.Application/Cb/Entity/BO/CbCameraBO.cs create mode 100644 Cis.Application/Core/Center/InstanceCenter.cs diff --git a/Cis.Application/Cb/Entity/BO/CbCameraBO.cs b/Cis.Application/Cb/Entity/BO/CbCameraBO.cs new file mode 100644 index 0000000..7194737 --- /dev/null +++ b/Cis.Application/Cb/Entity/BO/CbCameraBO.cs @@ -0,0 +1,27 @@ +namespace Cis.Application.Cb; + +/// +/// 相机 BO +/// +public class CbCameraBO +{ + /// + /// cbCameraId + /// + public long Id { get; set; } + + /// + /// cbCamera 实体类 + /// + public CbCamera CbCamera { get; set; } + + /// + /// cbCameraParams 实体类 + /// + public CbCameraParams CbCameraParams { get; set; } + + public static CbCameraBO New(long cbCameraId, CbCamera cbCamera, CbCameraParams cbCameraParams) + { + return new() { Id = cbCameraId, CbCamera = cbCamera, CbCameraParams = cbCameraParams }; + } +} \ No newline at end of file diff --git a/Cis.Application/Cb/Entity/CbCameraParams.cs b/Cis.Application/Cb/Entity/CbCameraParams.cs index af5e06b..8a47e72 100644 --- a/Cis.Application/Cb/Entity/CbCameraParams.cs +++ b/Cis.Application/Cb/Entity/CbCameraParams.cs @@ -15,11 +15,11 @@ public class CbCameraParams : EntityBase public string Name { get; set; } /// - /// 相机类型 + /// 相机厂商 /// - [SugarColumn(ColumnDescription = "相机类型")] + [SugarColumn(ColumnDescription = "相机厂商")] [Required] - public int CameraType { get; set; } + public int Manufactor { get; set; } /// /// sdk 端口 @@ -28,6 +28,13 @@ public class CbCameraParams : EntityBase [Required] public int SdkPort { get; set; } + /// + /// 相机类型 + /// + [SugarColumn(ColumnDescription = "相机类型")] + [Required] + public int Type { get; set; } + /// /// FocusX /// diff --git a/Cis.Application/Cb/Service/CbCameraParamsService.cs b/Cis.Application/Cb/Service/CbCameraParamsService.cs index f13dae9..8fe4161 100644 --- a/Cis.Application/Cb/Service/CbCameraParamsService.cs +++ b/Cis.Application/Cb/Service/CbCameraParamsService.cs @@ -16,18 +16,20 @@ public class CbCameraParamsService : ServiceBase, ITransient /// /// 获取实体类 /// - /// equal:cameraType,id,isDelete; like:name; between:[startTime,endTime]; + /// equal:manufactor,type,id,isDelete; like:name; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); var exp = Expressionable.Create(); if (queryObj.TryGetValue("name", StringComparison.OrdinalIgnoreCase, out JToken name)) exp.And(it => it.Name.Contains(name.ToString())); - if (queryObj.TryGetValue("cameraType", StringComparison.OrdinalIgnoreCase, out JToken cameraType)) - exp.And(it => it.CameraType.Equals(cameraType)); + if (queryObj.TryGetValue("manufactor", StringComparison.OrdinalIgnoreCase, out JToken manufactor)) + exp.And(it => it.Manufactor.Equals(manufactor)); + if (queryObj.TryGetValue("type", StringComparison.OrdinalIgnoreCase, out JToken type)) + exp.And(it => it.Type.Equals(type)); if (queryObj.TryGetValue("Id", StringComparison.OrdinalIgnoreCase, out JToken Id)) exp.And(it => it.Id.Equals(Id)); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) @@ -45,7 +47,7 @@ public class CbCameraParamsService : ServiceBase, ITransient /// /// 批量获取实体类 /// - /// equal:cameraType,isDelete; like:name; between:[startTime,endTime]; + /// equal:manufactor,type,isDelete; like:name; between:[startTime,endTime]; /// [HttpGet] public override async Task> GetList(string queryJson = "") @@ -55,8 +57,10 @@ public class CbCameraParamsService : ServiceBase, ITransient var exp = Expressionable.Create(); if (queryObj.TryGetValue("name", StringComparison.OrdinalIgnoreCase, out JToken name)) exp.And(it => it.Name.Contains(name.ToString())); - if (queryObj.TryGetValue("cameraType", StringComparison.OrdinalIgnoreCase, out JToken cameraType)) - exp.And(it => it.CameraType.Equals(cameraType)); + if (queryObj.TryGetValue("manufactor", StringComparison.OrdinalIgnoreCase, out JToken manufactor)) + exp.And(it => it.Manufactor.Equals(manufactor)); + if (queryObj.TryGetValue("type", StringComparison.OrdinalIgnoreCase, out JToken type)) + exp.And(it => it.Type.Equals(type)); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) exp.And(it => it.IsDelete.Equals(isDelete)); if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) @@ -72,11 +76,11 @@ public class CbCameraParamsService : ServiceBase, ITransient /// /// 批量获取分页实体类 /// - /// equal:cameraType,isDelete; like:name; between:[startTime,endTime]; + /// equal:manufactor,type,isDelete; like:name; between:[startTime,endTime]; /// index,size /// [HttpGet] - public override async Task> GetPageList([Required] string pagination, string queryJson="") + public override async Task> GetPageList([Required] string pagination, string queryJson = "") { Pagination pageObj = pagination.ToObject(); JObject queryObj = queryJson.ToJObject(); @@ -84,8 +88,10 @@ public class CbCameraParamsService : ServiceBase, ITransient var exp = Expressionable.Create(); if (queryObj.TryGetValue("name", StringComparison.OrdinalIgnoreCase, out JToken name)) exp.And(it => it.Name.Contains(name.ToString())); - if (queryObj.TryGetValue("cameraType", StringComparison.OrdinalIgnoreCase, out JToken cameraType)) - exp.And(it => it.CameraType.Equals(cameraType)); + if (queryObj.TryGetValue("manufactor", StringComparison.OrdinalIgnoreCase, out JToken manufactor)) + exp.And(it => it.Manufactor.Equals(manufactor)); + if (queryObj.TryGetValue("type", StringComparison.OrdinalIgnoreCase, out JToken type)) + exp.And(it => it.Type.Equals(type)); if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) exp.And(it => it.IsDelete.Equals(isDelete)); if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) diff --git a/Cis.Application/Cb/Service/CbCameraService.cs b/Cis.Application/Cb/Service/CbCameraService.cs index c9157ec..2fb41c7 100644 --- a/Cis.Application/Cb/Service/CbCameraService.cs +++ b/Cis.Application/Cb/Service/CbCameraService.cs @@ -9,8 +9,11 @@ namespace Cis.Application.Cb; [ApiDescriptionSettings(CbInfo.GroupName, Order = CbInfo.CbCameraGroupOrder)] public class CbCameraService : ServiceBase, ITransient { - public CbCameraService(SqlSugarRepository baseRep) : base(baseRep) + protected readonly SqlSugarRepository _cbCameraParamsRep; + + public CbCameraService(SqlSugarRepository baseRep, SqlSugarRepository cbCameraParamsRep) : base(baseRep) { + _cbCameraParamsRep = cbCameraParamsRep; } /// @@ -19,7 +22,7 @@ public class CbCameraService : ServiceBase, ITransient /// equal:cbCameraParamsId,id,isDelete; like:ip,name; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); @@ -103,4 +106,66 @@ public class CbCameraService : ServiceBase, ITransient .ToPageListAsync(pageObj.Index, pageObj.Size); return list; } + + #region BO + + /// + /// 获取实体类 BO + /// + /// 实体类 id + /// + [HttpGet] + public async Task GetBO([Required] long id) + { + CbCamera camera = await _baseRep.GetByIdAsync(id); + if (camera == null) return null; + CbCameraParams cameraParams = await _cbCameraParamsRep.GetByIdAsync(camera.CbCameraParamsId); + if (cameraParams == null) return null; + CbCameraBO bo = CbCameraBO.New(camera.Id, camera, cameraParams); + return bo; + } + + /// + /// 批量获取实体类 BO + /// + /// equal:cbCameraParamsId,isDelete; like:ip,name; between:[startTime,endTime]; + /// + [HttpGet] + public async Task> GetBOList(string queryJson = "") + { + JObject queryObj = queryJson.ToJObject(); + var exp = Expressionable.Create(); + if (queryObj.TryGetValue("cbCameraParamsId", StringComparison.OrdinalIgnoreCase, out JToken cbCameraParamsId)) + exp.And(it => it.CbCameraParamsId.Equals(cbCameraParamsId)); + if (queryObj.TryGetValue("name", StringComparison.OrdinalIgnoreCase, out JToken name)) + exp.And(it => it.Name.Contains(name.ToString())); + if (queryObj.TryGetValue("ip", StringComparison.OrdinalIgnoreCase, out JToken ip)) + exp.And(it => it.Ip.Contains(ip.ToString())); + if (queryObj.TryGetValue("IsDelete", StringComparison.OrdinalIgnoreCase, out JToken isDelete)) + exp.And(it => it.IsDelete.Equals(isDelete)); + if (queryObj.TryGetValue("StartTime", StringComparison.OrdinalIgnoreCase, out JToken startTime) + && queryObj.TryGetValue("EndTime", StringComparison.OrdinalIgnoreCase, out JToken endTime)) + exp.And(it => it.CreateTime >= startTime.ToDateTime() && it.CreateTime <= endTime.ToDateTime()); + List cameraList = await _baseRep.AsQueryable() + .Where(exp.ToExpression()) + .ToListAsync(); + + HashSet paramsIdSet = new(); + foreach (var item in cameraList) + paramsIdSet.Add(item.CbCameraParamsId); + List paramsList = await _cbCameraParamsRep.AsQueryable() + .Where(it => paramsIdSet.ToList().Contains(it.Id)) + .ToListAsync(); + Dictionary paramsDict = new(); + foreach (var item in paramsList) + paramsDict.Add(item.Id, item); + + List boList = new(); + foreach (var item in cameraList) + boList.Add(CbCameraBO.New(item.Id, item, paramsDict[item.CbCameraParamsId])); + + return boList; + } + + #endregion BO } \ No newline at end of file diff --git a/Cis.Application/Cis.Application.csproj b/Cis.Application/Cis.Application.csproj index d795dc6..f6b8deb 100644 --- a/Cis.Application/Cis.Application.csproj +++ b/Cis.Application/Cis.Application.csproj @@ -18,10 +18,6 @@ - - - - @@ -31,4 +27,8 @@ + + + + diff --git a/Cis.Application/Cis.Application.xml b/Cis.Application/Cis.Application.xml index 0c28f39..c3a0a17 100644 --- a/Cis.Application/Cis.Application.xml +++ b/Cis.Application/Cis.Application.xml @@ -49,6 +49,26 @@ CbCameraParams 表描述 + + + 相机 BO + + + + + cbCameraId + + + + + cbCamera 实体类 + + + + + cbCameraParams 实体类 + + 相机表 @@ -89,9 +109,9 @@ 名称 - + - 相机类型 + 相机厂商 @@ -99,6 +119,11 @@ sdk 端口 + + + 相机类型 + + FocusX @@ -119,25 +144,25 @@ 相机参数服务 - + 获取实体类 - equal:cameraType,id,isDelete; like:name; between:[startTime,endTime]; + equal:manufactor,type,id,isDelete; like:name; between:[startTime,endTime]; 批量获取实体类 - equal:cameraType,isDelete; like:name; between:[startTime,endTime]; + equal:manufactor,type,isDelete; like:name; between:[startTime,endTime]; 批量获取分页实体类 - equal:cameraType,isDelete; like:name; between:[startTime,endTime]; + equal:manufactor,type,isDelete; like:name; between:[startTime,endTime]; index,size @@ -146,7 +171,7 @@ 相机服务 - + 获取实体类 @@ -168,6 +193,20 @@ index,size + + + 获取实体类 BO + + 实体类 id + + + + + 批量获取实体类 BO + + equal:cbCameraParamsId,isDelete; like:ip,name; between:[startTime,endTime]; + + Cm -> Camera mark @@ -298,7 +337,7 @@ 标记分组服务 - + 获取实体类 @@ -339,14 +378,14 @@ 实体类 - + 批量添加实体类 - 实体类数组 + 实体类列表 - + 获取实体类 @@ -955,6 +994,11 @@ {cameraId, OnvifClient} + + + 标签追踪服务 + + 激活 Searcher @@ -1007,6 +1051,11 @@ cbCameraId + + + onvif 服务 + + 注册 onvifClient @@ -1244,7 +1293,7 @@ 系统字典值服务 - + 获取实体类 @@ -1271,7 +1320,7 @@ 系统字典类型服务 - + 获取实体类 diff --git a/Cis.Application/Cm/Service/CmMarkGroupService.cs b/Cis.Application/Cm/Service/CmMarkGroupService.cs index 1830acb..ba9395b 100644 --- a/Cis.Application/Cm/Service/CmMarkGroupService.cs +++ b/Cis.Application/Cm/Service/CmMarkGroupService.cs @@ -19,7 +19,7 @@ public class CmMarkGroupService : ServiceBase, ITransient /// equal:id,isDelete; like:name; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); @@ -72,7 +72,7 @@ public class CmMarkGroupService : ServiceBase, ITransient /// index,size /// [HttpGet] - public override async Task> GetPageList([Required] string pagination, string queryJson="") + public override async Task> GetPageList([Required] string pagination, string queryJson = "") { Pagination pageObj = pagination.ToObject(); JObject queryObj = queryJson.ToJObject(); diff --git a/Cis.Application/Cm/Service/CmMarkLabelService.cs b/Cis.Application/Cm/Service/CmMarkLabelService.cs index d6cee92..9e2b73a 100644 --- a/Cis.Application/Cm/Service/CmMarkLabelService.cs +++ b/Cis.Application/Cm/Service/CmMarkLabelService.cs @@ -54,12 +54,12 @@ public class CmMarkLabelService : ServiceBase, ITransient /// /// 批量添加实体类 /// - /// 实体类数组 + /// 实体类列表 /// [HttpPost] - public override async Task AddArray([Required][FromForm] CmMarkLabel[] array) + public override async Task AddList([Required][FromForm] List list) { - foreach (CmMarkLabel item in array) + foreach (CmMarkLabel item in list) { bool ret = _cameraSdk.TryGetPtzInfoById(item.CbCameraId.ToString(), out PtzInfo ptzInfo); if (!ret) return false; @@ -67,7 +67,7 @@ public class CmMarkLabelService : ServiceBase, ITransient item.TiltPosition = ptzInfo.Tilt; item.ZoomPosition = ptzInfo.Zoom; } - return await _baseRep.InsertRangeAsync(array); + return await _baseRep.InsertRangeAsync(list); } /// @@ -76,7 +76,7 @@ public class CmMarkLabelService : ServiceBase, ITransient /// equal:cbCameraId,cmMarkGroupId,id,isDelete; like:name; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); diff --git a/Cis.Application/Core/Center/CameraDataCenter.cs b/Cis.Application/Core/Center/CameraDataCenter.cs index 4b1db50..b724202 100644 --- a/Cis.Application/Core/Center/CameraDataCenter.cs +++ b/Cis.Application/Core/Center/CameraDataCenter.cs @@ -86,13 +86,19 @@ public class CameraDataCenter : ISingleton /// private async Task RefreshCameraPtzInfos() { - string[] cameraIpList = await _cache.HKeysAsync(CacheInfo.CameraIpCounts); - List tasks = new(); - foreach (string cameraIp in cameraIpList) + try + { + string[] cameraIpList = await _cache.HKeysAsync(CacheInfo.CameraIpCounts); + List tasks = new(); + foreach (string cameraIp in cameraIpList) + { + tasks.Add(RefreshCameraPtzInfo(cameraIp)); + } + await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(_options.CameraPtz.Timeout)); + } + catch (Exception e) { - tasks.Add(RefreshCameraPtzInfo(cameraIp)); } - await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(_options.CameraPtz.Timeout)); } /// @@ -112,13 +118,19 @@ public class CameraDataCenter : ISingleton /// private async Task RefreshMarkSearchers() { - string[] cameraIdList = await _cache.HKeysAsync(CacheInfo.CameraId2Ip); - List tasks = new(); - foreach (string cameraId in cameraIdList) + try + { + string[] cameraIdList = await _cache.HKeysAsync(CacheInfo.CameraId2Ip); + List tasks = new(); + foreach (string cameraId in cameraIdList) + { + tasks.Add(RefreshMarkSearcher(cameraId.ToLong())); + } + await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(_options.CameraPtz.Timeout)); + } + catch (Exception e) { - tasks.Add(RefreshMarkSearcher(cameraId.ToLong())); } - await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(_options.CameraPtz.Timeout)); } /// diff --git a/Cis.Application/Core/Center/InstanceCenter.cs b/Cis.Application/Core/Center/InstanceCenter.cs new file mode 100644 index 0000000..17ef255 --- /dev/null +++ b/Cis.Application/Core/Center/InstanceCenter.cs @@ -0,0 +1,16 @@ +namespace Cis.Application.Core; + +public static class InstanceCenter +{ + static InstanceCenter() + { + // 静态构造函数只执行一次 + // 主动注册全局单例服务 + App.GetService(App.RootServices); + } + + public static void Init() + { + // 空函数,意在初始化静态构造函数 + } +} \ No newline at end of file diff --git a/Cis.Application/Core/Common/Extension.cs b/Cis.Application/Core/Common/Extension.cs index e2746c8..1b0cd40 100644 --- a/Cis.Application/Core/Common/Extension.cs +++ b/Cis.Application/Core/Common/Extension.cs @@ -6,24 +6,24 @@ namespace Cis.Application.Core; [SuppressSniffer] public static class Extension { - public static ICameraSDK CreateCameraSDK(this CameraType cameraType, CameraInfo cameraInfo) + public static ICameraSDK CreateCameraSDK(this CameraManufactor cameraManufactor, CameraInfo cameraInfo) { - return cameraType switch + return cameraManufactor switch { - CameraType.HiK => new HiKSDK(cameraInfo), - CameraType.DaHua => new DaHuaSDK(cameraInfo), - CameraType.YuShi => new YuShiSDK(cameraInfo), + CameraManufactor.HiK => new HiKSDK(cameraInfo), + CameraManufactor.DaHua => new DaHuaSDK(cameraInfo), + CameraManufactor.YuShi => new YuShiSDK(cameraInfo), _ => null, }; } - public static MarkSearcherBase CreateMarkSearcher(this CameraType cameraType, CameraCalcParams cameraCalcParams) + public static MarkSearcherBase CreateMarkSearcher(this CameraManufactor cameraManufactor, CameraCalcParams cameraCalcParams) { - return cameraType switch + return cameraManufactor switch { - CameraType.HiK => new HiKMarkSearcher(cameraCalcParams), - CameraType.DaHua => new DaHuaMarkSearcher(cameraCalcParams), - CameraType.YuShi => new YuShiMarkSearcher(cameraCalcParams), + CameraManufactor.HiK => new HiKMarkSearcher(cameraCalcParams), + CameraManufactor.DaHua => new DaHuaMarkSearcher(cameraCalcParams), + CameraManufactor.YuShi => new YuShiMarkSearcher(cameraCalcParams), _ => null }; } diff --git a/Cis.Application/Core/Component/CameraSDK/CameraSdkServer.cs b/Cis.Application/Core/Component/CameraSDK/CameraSdkServer.cs index e5cf7cd..258ab73 100644 --- a/Cis.Application/Core/Component/CameraSDK/CameraSdkServer.cs +++ b/Cis.Application/Core/Component/CameraSDK/CameraSdkServer.cs @@ -32,7 +32,7 @@ public class CameraSdkServer : ICameraSdkServer, ISingleton { bool ret = CameraSdkDict.ContainsKey(cameraInfo.Ip); if (ret) return false; - ICameraSDK cameraSDK = ((CameraType)cameraInfo.Type).CreateCameraSDK(cameraInfo); + ICameraSDK cameraSDK = ((CameraManufactor)cameraInfo.Manufactor).CreateCameraSDK(cameraInfo); if (cameraSDK == null) return false; ret = cameraSDK.Init(); if (!ret) return false; diff --git a/Cis.Application/Core/Component/MarkSeacher/MarkSearcherServer.cs b/Cis.Application/Core/Component/MarkSeacher/MarkSearcherServer.cs index 39fa255..8c8fbac 100644 --- a/Cis.Application/Core/Component/MarkSeacher/MarkSearcherServer.cs +++ b/Cis.Application/Core/Component/MarkSeacher/MarkSearcherServer.cs @@ -87,7 +87,7 @@ public class MarkSearcherServer : IMarkSearcherServer, ISingleton ret = _cameraSdkServer.IsExists(cbCamera.Ip); if (!ret) { - CameraInfo cameraInfo = CameraInfo.New(cbCameraParams.CameraType, cbCamera.Ip, cbCamera.UserName, cbCamera.Password); + CameraInfo cameraInfo = CameraInfo.New(cbCameraParams.Manufactor, cbCamera.Ip, cbCamera.UserName, cbCamera.Password); ret = _cameraSdkServer.Register(cameraInfo); if (!ret) { @@ -105,7 +105,7 @@ public class MarkSearcherServer : IMarkSearcherServer, ISingleton // 创建相机计算参数 CameraCalcParams cameraCalcParams = CameraCalcParams.New(cbCamera.Id, ptzInfo, cbCameraParams.FocusX, cbCameraParams.FocusY, zoomVaryExpr); // 创建 markSearcher - MarkSearcherBase markSearcher = ((CameraType)cbCameraParams.CameraType).CreateMarkSearcher(cameraCalcParams); + MarkSearcherBase markSearcher = ((CameraManufactor)cbCameraParams.Manufactor).CreateMarkSearcher(cameraCalcParams); if (markSearcher == null) return false; // 获取标签列表 List cmMarkLabelList = _cmMarkLableRep.GetList(u => u.CbCameraId == cameraId); diff --git a/Cis.Application/Core/Component/Onvif/OnvifServer.cs b/Cis.Application/Core/Component/Onvif/OnvifServer.cs index 53e2658..7023d33 100644 --- a/Cis.Application/Core/Component/Onvif/OnvifServer.cs +++ b/Cis.Application/Core/Component/Onvif/OnvifServer.cs @@ -38,7 +38,7 @@ public class OnvifServer : IOnvifServer, ISingleton if (ret) return false; OnvifClient client = new(camera.Ip, camera.UserName, camera.Password); ret = await client.Init(); - if(!ret) return false; + if (!ret) return false; ret = OnvifClientDict.TryAdd(camera.Id, client); return ret; } diff --git a/Cis.Application/Core/Service/MarkSearchService.cs b/Cis.Application/Core/Service/MarkSearchService.cs index 48484ff..2dde3cb 100644 --- a/Cis.Application/Core/Service/MarkSearchService.cs +++ b/Cis.Application/Core/Service/MarkSearchService.cs @@ -2,6 +2,9 @@ namespace Cis.Application.Core; +/// +/// 标签追踪服务 +/// [ApiDescriptionSettings(CoreInfo.GroupName, Order = CoreInfo.MarkSearchGroupOrder)] public class MarkSearchService : IDynamicApiController, ITransient { diff --git a/Cis.Application/Core/Service/OnvifService.cs b/Cis.Application/Core/Service/OnvifService.cs index b1484a8..b4687b1 100644 --- a/Cis.Application/Core/Service/OnvifService.cs +++ b/Cis.Application/Core/Service/OnvifService.cs @@ -4,6 +4,9 @@ using EC.Helper.Onvif; namespace Cis.Application.Core; +/// +/// onvif 服务 +/// [ApiDescriptionSettings(CoreInfo.GroupName, Order = CoreInfo.OnvifGroupOrder)] public class OnvifService : IDynamicApiController, ITransient { diff --git a/Cis.Application/Startup.cs b/Cis.Application/Startup.cs index a4049ab..c68d577 100644 --- a/Cis.Application/Startup.cs +++ b/Cis.Application/Startup.cs @@ -33,5 +33,6 @@ public class Startup : AppStartup /// public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + InstanceCenter.Init(); } } \ No newline at end of file diff --git a/Cis.Application/Sys/SeedData/SysDictDataSeedData.cs b/Cis.Application/Sys/SeedData/SysDictDataSeedData.cs index 5935110..420c4a5 100644 --- a/Cis.Application/Sys/SeedData/SysDictDataSeedData.cs +++ b/Cis.Application/Sys/SeedData/SysDictDataSeedData.cs @@ -6,13 +6,17 @@ public class SysDictDataSeedData : ISqlSugarEntitySeedData { return new SysDictData[] { - new(){Id=358769934100001, SysDictTypeId=358728043100001, Code="HiK", Value="1", Order=100, Remark="海康相机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, - new(){Id=358769934100002, SysDictTypeId=358728043100001, Code="DaHua", Value="2", Order=100, Remark="大华相机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, - new(){Id=358769934100003, SysDictTypeId=358728043100001, Code="YuShi", Value="3", Order=100, Remark="宇视相机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){Id=358769934100001, SysDictTypeId=358728043100001, Code="HiK", Value="1", Order=100, Remark="海康", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){Id=358769934100002, SysDictTypeId=358728043100001, Code="DaHua", Value="2", Order=100, Remark="大华", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){Id=358769934100003, SysDictTypeId=358728043100001, Code="YuShi", Value="3", Order=100, Remark="宇视", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, new(){Id=358769934100011, SysDictTypeId=358728043100002, Code="HiK", Value="8000", Order=100, Remark="海康sdk端口", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, new(){Id=358769934100012, SysDictTypeId=358728043100002, Code="DaHua", Value="37777", Order=100, Remark="大华sdk端口", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, new(){Id=358769934100013, SysDictTypeId=358728043100002, Code="YuShi", Value="8800", Order=100, Remark="宇视sdk端口", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + + new(){Id=358769934100021, SysDictTypeId=358728043100001, Code="BulletCamera", Value="1", Order=100, Remark="枪机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){Id=358769934100022, SysDictTypeId=358728043100001, Code="DomeCamera", Value="2", Order=100, Remark="半球机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){Id=358769934100023, SysDictTypeId=358728043100001, Code="SpeedDomeCamera", Value="3", Order=100, Remark="球机", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, }; } } \ No newline at end of file diff --git a/Cis.Application/Sys/SeedData/SysDictTypeSeedData.cs b/Cis.Application/Sys/SeedData/SysDictTypeSeedData.cs index 387e590..6c99b5d 100644 --- a/Cis.Application/Sys/SeedData/SysDictTypeSeedData.cs +++ b/Cis.Application/Sys/SeedData/SysDictTypeSeedData.cs @@ -6,8 +6,9 @@ public class SysDictTypeSeedData : ISqlSugarEntitySeedData { return new SysDictType[] { - new(){ Id=358728043100001, Name="相机类型", Code="camera_type", Order=100, Remark="相机类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){ Id=358728043100001, Name="相机厂商", Code="camera_manufactor", Order=100, Remark="相机厂商", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, new(){ Id=358728043100002, Name="相机SDK端口", Code="camera_sdk_port", Order=100, Remark="相机SDK端口", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, + new(){ Id=358728043100003, Name="相机类型", Code="camera_type", Order=100, Remark="相机类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-11-30 00:00:00")}, }; } } \ No newline at end of file diff --git a/Cis.Application/Sys/Service/SysDictDataService.cs b/Cis.Application/Sys/Service/SysDictDataService.cs index a5729d2..dea558e 100644 --- a/Cis.Application/Sys/Service/SysDictDataService.cs +++ b/Cis.Application/Sys/Service/SysDictDataService.cs @@ -19,7 +19,7 @@ public class SysDictDataService : ServiceBase, ITransient /// equal:sysDictTypeId,code,id,isDelete; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); diff --git a/Cis.Application/Sys/Service/SysDictTypeService.cs b/Cis.Application/Sys/Service/SysDictTypeService.cs index d3a2b1e..bc72eb2 100644 --- a/Cis.Application/Sys/Service/SysDictTypeService.cs +++ b/Cis.Application/Sys/Service/SysDictTypeService.cs @@ -19,7 +19,7 @@ public class SysDictTypeService : ServiceBase, ITransient /// equal:code,id,isDelete; like:name; between:[startTime,endTime]; /// [HttpGet] - public override async Task GetQ([Required] string queryJson) + public override async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); @@ -76,7 +76,7 @@ public class SysDictTypeService : ServiceBase, ITransient /// index,size /// [HttpGet] - public override async Task> GetPageList([Required] string pagination, string queryJson="") + public override async Task> GetPageList([Required] string pagination, string queryJson = "") { JObject queryObj = queryJson.ToJObject(); Pagination pageObj = pagination.ToObject(); diff --git a/Cis.Core/Cache/CacheSetup.cs b/Cis.Core/Cache/CacheSetup.cs index 513f8a8..e76a944 100644 --- a/Cis.Core/Cache/CacheSetup.cs +++ b/Cis.Core/Cache/CacheSetup.cs @@ -10,12 +10,9 @@ public static class CacheSetup /// public static void AddCache(this IServiceCollection services) { - services.AddSingleton(options => - { - var redisOptions = App.GetOptions(); - RedisClient cache = new(redisOptions.ConnectionString); - cache.FlushDb(); - return cache; - }); + var redisOptions = App.GetOptions(); + RedisClient cache = new(redisOptions.ConnectionString); + cache.FlushDb(); + services.AddSingleton(cache); } } \ No newline at end of file diff --git a/Cis.Core/Cis.Core.csproj b/Cis.Core/Cis.Core.csproj index 27d689b..0a2984b 100644 --- a/Cis.Core/Cis.Core.csproj +++ b/Cis.Core/Cis.Core.csproj @@ -34,6 +34,6 @@ - + diff --git a/Cis.Core/Cis.Core.xml b/Cis.Core/Cis.Core.xml index 049df6b..dd0ecea 100644 --- a/Cis.Core/Cis.Core.xml +++ b/Cis.Core/Cis.Core.xml @@ -208,11 +208,11 @@ 实体类 - + 批量添加实体类 - 实体类数组 + 实体类列表 @@ -222,6 +222,13 @@ 实体类 + + + 批量更新实体类 + + 实体类列表 + + 删除实体类 @@ -229,6 +236,13 @@ 实体类 id + + + 批量删除实体类 + + 实体类数组 + + 假删除实体类 @@ -244,7 +258,7 @@ 实体类 id - + 获取实体类 @@ -339,6 +353,14 @@ 字串 + + + 字符串拆分转 object[] + + + 默认英文逗号隔开 + + 排除SqlSugar忽略的列 diff --git a/Cis.Core/Common/Entity/ServiceBase.cs b/Cis.Core/Common/Entity/ServiceBase.cs index a2c2b81..f151b77 100644 --- a/Cis.Core/Common/Entity/ServiceBase.cs +++ b/Cis.Core/Common/Entity/ServiceBase.cs @@ -40,12 +40,12 @@ public class ServiceBase : IDynamicApiController where T : EntityBase, new() /// /// 批量添加实体类 /// - /// 实体类数组 + /// 实体类列表 /// [HttpPost] - public virtual async Task AddArray([Required][FromForm] T[] array) + public virtual async Task AddList([Required][FromForm] List list) { - return await _baseRep.InsertRangeAsync(array); + return await _baseRep.InsertRangeAsync(list); } /// @@ -62,12 +62,12 @@ public class ServiceBase : IDynamicApiController where T : EntityBase, new() /// /// 批量更新实体类 /// - /// 实体类数组 + /// 实体类列表 /// [HttpPost] - public virtual async Task UpdateArray([Required][FromForm] T[] array) + public virtual async Task UpdateList([Required][FromForm] List list) { - return await _baseRep.UpdateRangeAsync(array); + return await _baseRep.UpdateRangeAsync(list); } /// @@ -84,12 +84,13 @@ public class ServiceBase : IDynamicApiController where T : EntityBase, new() /// /// 批量删除实体类 /// - /// 实体类数组 + /// 实体类数组 /// [HttpPost] - public virtual async Task DeleteArray([Required][FromForm] T[] array) + public virtual async Task DeleteArray([Required][FromForm] string ids) { - return await _baseRep.DeleteByIdsAsync(array); + object[] objects = ids.ToSplitObjects(); + return await _baseRep.DeleteByIdsAsync(objects); } /// @@ -124,7 +125,7 @@ public class ServiceBase : IDynamicApiController where T : EntityBase, new() /// equal:id,isDelete; between:[startTime,endTime]; /// [HttpGet] - public virtual async Task GetQ([Required] string queryJson) + public virtual async Task GetByQ([Required] string queryJson) { JObject queryObj = queryJson.ToJObject(); diff --git a/Cis.Core/Common/Extension/ObjectExtension.cs b/Cis.Core/Common/Extension/ObjectExtension.cs index 6f3dcac..3d1b0fb 100644 --- a/Cis.Core/Common/Extension/ObjectExtension.cs +++ b/Cis.Core/Common/Extension/ObjectExtension.cs @@ -128,6 +128,23 @@ public static class ObjectExtension return !string.IsNullOrEmpty(Json) ? JObject.Parse(Json.Replace(" ", "")) : JObject.Parse("{}"); } + /// + /// 字符串拆分转 object[] + /// + /// + /// 默认英文逗号隔开 + /// + public static object[] ToSplitObjects(this string str, string trimstr = ",") + { + var list = str.Split(trimstr.ToArray()); + object[] result = new object[list.Length]; + for (int i = 0; i < list.Length; i++) + { + result[i] = list[i]; + } + return result; + } + /// /// 排除SqlSugar忽略的列 /// diff --git a/Cis.Core/CoreConfig.json b/Cis.Core/CoreConfig.json index da4d820..2559961 100644 --- a/Cis.Core/CoreConfig.json +++ b/Cis.Core/CoreConfig.json @@ -4,7 +4,7 @@ { "ConfigId": "Cis", "DbType": "MySql", // MySql、SqlServer、Sqlite、Oracle、PostgreSQL、Dm、Kdbndp、Oscar、MySqlConnector、Access - "ConnectionString": "Data Source=127.0.0.1;port=3306;User ID=root;Password=123456;Database=Cis;pooling=true;sslmode=none;CharSet=utf8;", + "ConnectionString": "Data Source=192.168.1.119;port=3306;User ID=root;Password=123456;Database=Cis;pooling=true;sslmode=none;CharSet=utf8;", //"DbType": "Sqlite", //"ConnectionString": "DataSource=./cis.db", //"DbType": "PostgreSQL", @@ -14,7 +14,7 @@ ] }, "Redis": { - "ConnectionString": "127.0.0.1:6379,password=123456,defaultDatabase=2" + "ConnectionString": "192.168.1.119:6379,password=123456,defaultDatabase=2" }, "AppSettings": { "InjectSpecificationDocument": true // 生产环境是否开启Swagger diff --git a/Cis.Web.Entry/Program.cs b/Cis.Web.Entry/Program.cs index c19f1b5..e0edba2 100644 --- a/Cis.Web.Entry/Program.cs +++ b/Cis.Web.Entry/Program.cs @@ -5,7 +5,7 @@ AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler // webServer Serve.Run(RunOptions.Default.AddWebComponent().WithArgs(args)); -static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) +void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Log.Error(sender?.ToString(), e); } diff --git a/Cis.sln b/Cis.sln index 06430c8..cbb9209 100644 --- a/Cis.sln +++ b/Cis.sln @@ -13,11 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cis.Web.Entry", "Cis.Web.En EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EC.Helper", "EC.Helper\EC.Helper.csproj", "{C2A5AEC8-F4FB-4D57-AE32-80502979FB9E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5D70EBD8-D86C-4F6B-9231-3ED720842298}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - EndProjectSection -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/EC.Helper/CameraSDK/Common/CameraException.cs b/EC.Helper/CameraSDK/Common/CameraException.cs index 7b4853c..e2a392e 100644 --- a/EC.Helper/CameraSDK/Common/CameraException.cs +++ b/EC.Helper/CameraSDK/Common/CameraException.cs @@ -19,7 +19,7 @@ public class CameraException : Exception protected class CameraExceptionObj { - public CameraType Type { get; set; } + public CameraManufactor Manufactor { get; set; } public int ErrCode { get; set; } @@ -27,25 +27,25 @@ public class CameraException : Exception public override string? ToString() { - return $"Type:{Type}, ErrCode:{ErrCode}, ErrMsg:{ErrMsg}"; + return $"Manufactor:{Manufactor}, ErrCode:{ErrCode}, ErrMsg:{ErrMsg}"; } } - public static CameraException New(CameraType type, int errCode) + public static CameraException New(CameraManufactor manufactor, int errCode) { CameraExceptionObj obj = new() { - Type = type, + Manufactor = manufactor, ErrCode = errCode }; return new CameraException(obj.ToString()); } - public static CameraException New(CameraType type, int errCode, string errMsg) + public static CameraException New(CameraManufactor manufactor, int errCode, string errMsg) { CameraExceptionObj obj = new() { - Type = type, + Manufactor = manufactor, ErrCode = errCode, ErrMsg = errMsg }; diff --git a/EC.Helper/CameraSDK/Common/CameraStruct.cs b/EC.Helper/CameraSDK/Common/CameraStruct.cs index d4b0a97..4e3d37c 100644 --- a/EC.Helper/CameraSDK/Common/CameraStruct.cs +++ b/EC.Helper/CameraSDK/Common/CameraStruct.cs @@ -8,9 +8,9 @@ public class CameraInfo #region Attr /// - /// 相机类型 + /// 相机厂商 /// - public int Type { get; set; } + public int Manufactor { get; set; } /// /// ip 地址 @@ -34,35 +34,35 @@ public class CameraInfo #endregion Attr - public static CameraInfo New(int type, string ip, int port, string userName, string password) + public static CameraInfo New(int manufactor, string ip, int port, string userName, string password) { - CameraInfo info = new() { Type = type, Ip = ip, Port = port, UserName = userName, Password = password }; + CameraInfo info = new() { Manufactor = manufactor, Ip = ip, Port = port, UserName = userName, Password = password }; if (port <= 0) - throw new Exception("Camera type not support."); + throw new Exception("Camera manufactor not support."); return info; } - public static CameraInfo New(int type, string ip, string userName, string password) + public static CameraInfo New(int manufactor, string ip, string userName, string password) { - CameraInfo info = new() { Type = type, Ip = ip, UserName = userName, Password = password }; - int port = (CameraType)type switch + CameraInfo info = new() { Manufactor = manufactor, Ip = ip, UserName = userName, Password = password }; + int port = (CameraManufactor)manufactor switch { - CameraType.HiK => (int)CameraPort.HiK, - CameraType.DaHua => (int)CameraPort.DaHua, - CameraType.YuShi => (int)CameraPort.YuShi, + CameraManufactor.HiK => (int)CameraPort.HiK, + CameraManufactor.DaHua => (int)CameraPort.DaHua, + CameraManufactor.YuShi => (int)CameraPort.YuShi, _ => -1, }; info.Port = port; if (port <= 0) - throw new Exception("Camera type not support."); + throw new Exception("Camera manufactor not support."); return info; } } /// -/// 相机类型 +/// 相机厂商 /// -public enum CameraType : int +public enum CameraManufactor : int { HiK = 1, DaHua, diff --git a/EC.Helper/CameraSDK/DaHua/DaHuaSDK.cs b/EC.Helper/CameraSDK/DaHua/DaHuaSDK.cs index fd3a94d..828c244 100644 --- a/EC.Helper/CameraSDK/DaHua/DaHuaSDK.cs +++ b/EC.Helper/CameraSDK/DaHua/DaHuaSDK.cs @@ -62,7 +62,7 @@ public class DaHuaSDK : ICameraSDK uint errCode = (uint)DaHuaOriSDK.CLIENT_GetLastError(); if (errCode == 0) return; errCode -= 0x80000000; - throw CameraException.New(CameraType.DaHua, (int)errCode); + throw CameraException.New(CameraManufactor.DaHua, (int)errCode); } #endregion Base Method diff --git a/EC.Helper/CameraSDK/HiK/HiKSDK.cs b/EC.Helper/CameraSDK/HiK/HiKSDK.cs index 517a28d..c9600ef 100644 --- a/EC.Helper/CameraSDK/HiK/HiKSDK.cs +++ b/EC.Helper/CameraSDK/HiK/HiKSDK.cs @@ -48,7 +48,7 @@ public class HiKSDK : ICameraSDK { uint errCode = HiKOriSDK.NET_DVR_GetLastError(); if (errCode == 0) return; - throw CameraException.New(CameraType.HiK, (int)errCode); + throw CameraException.New(CameraManufactor.HiK, (int)errCode); } #endregion Base Method diff --git a/EC.Helper/CameraSDK/YuShi/YuShiSDK.cs b/EC.Helper/CameraSDK/YuShi/YuShiSDK.cs index 6ff5959..43764a4 100644 --- a/EC.Helper/CameraSDK/YuShi/YuShiSDK.cs +++ b/EC.Helper/CameraSDK/YuShi/YuShiSDK.cs @@ -51,7 +51,7 @@ public class YuShiSDK : ICameraSDK { int errCode = YuShiOriSDK.NETDEV_GetLastError(); if (errCode == 0) return; - throw CameraException.New(CameraType.YuShi, (int)errCode); + throw CameraException.New(CameraManufactor.YuShi, (int)errCode); } #endregion Base Method diff --git a/EC.Helper/Onvif/OnvifClient.cs b/EC.Helper/Onvif/OnvifClient.cs index b3e060d..9c5b50a 100644 --- a/EC.Helper/Onvif/OnvifClient.cs +++ b/EC.Helper/Onvif/OnvifClient.cs @@ -120,7 +120,7 @@ public class OnvifClient if (string.IsNullOrEmpty(SteamUrl)) { MediaUri mediaUri = await Media.GetStreamUriAsync(RtspStreamSetup, ProfileToken); - SteamUrl = mediaUri.Uri; + SteamUrl = mediaUri.Uri.Replace("://", $"://{Username}:{Password}@"); } return SteamUrl; } @@ -130,7 +130,7 @@ public class OnvifClient if (string.IsNullOrEmpty(SnapshotUrl)) { MediaUri mediaUri = await Media.GetSnapshotUriAsync(ProfileToken); - SnapshotUrl = mediaUri.Uri; + SnapshotUrl = mediaUri.Uri.Replace("://", $"://{Username}:{Password}@"); } return SnapshotUrl; } diff --git a/Frontend/src/api/cameraMark/markSearchApi.ts b/Frontend/src/api/cameraMark/markSearchApi.ts index 4c22de0..fbca488 100644 --- a/Frontend/src/api/cameraMark/markSearchApi.ts +++ b/Frontend/src/api/cameraMark/markSearchApi.ts @@ -5,7 +5,7 @@ import qs from 'qs'; enum Api { ActivateSearcher = '/markSearch/activateSearcher', DeActiveSearcher = '/markSearch/deActiveSearcher', - IsExistSearcher = '/markSearch/isExistSearcher', + IsExistsSearcher = '/markSearch/isExistsSearcher', ActivateMarkLabel = '/markSearch/activateMarkLabel', DeactivateMarkLabel = '/markSearch/deactivateMarkLabel', IsExistMarkLabel = '/markSearch/isExistMarkLabel', @@ -18,7 +18,7 @@ export const ActiveSearcher = (params?: any) => axios.post(CisApiUrl + Api.Activ export const DeActiveSearcher = (params?: any) => axios.post(CisApiUrl + Api.DeActiveSearcher, qs.stringify(params)) -export const IsExistSearcher = (params?: any) => axios.get(CisApiUrl + Api.IsExistSearcher, {params: params}) +export const IsExistSearcher = (params?: any) => axios.get(CisApiUrl + Api.IsExistsSearcher, {params: params}) export const ActivateMarkLabel = (params?: any) => axios.post(CisApiUrl + Api.ActivateMarkLabel, qs.stringify(params))