V4完成: 预览+云台整合 操作列JSX按钮 全链路调通
This commit is contained in:
@@ -17,6 +17,26 @@ namespace Warehouse.Controllers
|
||||
{
|
||||
public partial class base_deviceController
|
||||
{
|
||||
private readonly Ibase_deviceService _service;//访问业务代码
|
||||
private readonly Iwarehouse_regionsService _regionsService;
|
||||
private readonly Iwarehouse_devicepointService _pointService;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
[ActivatorUtilitiesConstructor]
|
||||
public base_deviceController(
|
||||
Ibase_deviceService service,
|
||||
Iwarehouse_regionsService regionsService,
|
||||
Iwarehouse_devicepointService pointService,
|
||||
IHttpContextAccessor httpContextAccessor
|
||||
)
|
||||
: base(service)
|
||||
{
|
||||
_service = service;
|
||||
_regionsService = regionsService;
|
||||
_pointService = pointService;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取区域→点位→设备树。
|
||||
/// 用于管理端左侧树形控件展示层级结构。
|
||||
@@ -26,32 +46,27 @@ namespace Warehouse.Controllers
|
||||
[Route("/api/DeviceManager/GetRegionTree")]
|
||||
public async Task<IActionResult> GetRegionTree()
|
||||
{
|
||||
// 获取区域和点位服务
|
||||
var regionSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.warehouse_regionsService");
|
||||
var pointSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.warehouse_devicepointService");
|
||||
|
||||
var regionSvc = regionSvcType?.GetProperty("Instance")?.GetValue(null) as IService<warehouse_regions>;
|
||||
var pointSvc = pointSvcType?.GetProperty("Instance")?.GetValue(null) as IService<warehouse_devicepoint>;
|
||||
|
||||
// 查所有区域
|
||||
var regions = regionSvc != null
|
||||
? await regionSvc.FindAsIQueryable(x => true).ToListAsync()
|
||||
: new List<warehouse_regions>();
|
||||
var regions = await _regionsService.FindAsIQueryable(x => true).ToListAsync();
|
||||
|
||||
// 查所有点位
|
||||
var points = pointSvc != null
|
||||
? await pointSvc.FindAsIQueryable(x => true).ToListAsync()
|
||||
: new List<warehouse_devicepoint>();
|
||||
var points = await _pointService.FindAsIQueryable(x => true).ToListAsync();
|
||||
|
||||
// 统计每个点位下的设备数量
|
||||
//var deviceCounts = new Dictionary<int, int>();
|
||||
//var allDevices = await _service.FindAsIQueryable(x => true)
|
||||
// .Where(x => x.PointId != null)
|
||||
// .GroupBy(x => x.PointId!.Value)
|
||||
// .Select(g => new { PointId = g.Key, Count = g.Count() })
|
||||
// .ToListAsync();
|
||||
var deviceCounts = new Dictionary<int, int>();
|
||||
var allDevices = await _service.FindAsIQueryable(x => true)
|
||||
.Where(x => x.PointId != null)
|
||||
.GroupBy(x => x.PointId!.Value)
|
||||
.Select(g => new { PointId = g.Key, Count = g.Count() })
|
||||
var devices = await _service.FindAsIQueryable(x => x.PointId != null)
|
||||
.Select(x => new { x.PointId })
|
||||
.ToListAsync();
|
||||
foreach (var g in allDevices)
|
||||
deviceCounts[g.PointId] = g.Count;
|
||||
deviceCounts = devices
|
||||
.Where(x => x.PointId.HasValue)
|
||||
.GroupBy(x => x.PointId!.Value)
|
||||
.ToDictionary(g => g.Key, g => g.Count());
|
||||
|
||||
// 构建树形结构
|
||||
var tree = new List<object>();
|
||||
|
||||
@@ -3,21 +3,45 @@
|
||||
*A组接口使用 [AllowAnonymous] + NodeToken 二次认证
|
||||
*所有改动在 Partial 目录,不破坏框架可升级性
|
||||
*/
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using VolPro.Entity.DomainModels;
|
||||
using Warehouse.IServices;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Threading.Tasks;
|
||||
using VolPro.Core.DBManager;
|
||||
using VolPro.Core.DbSqlSugar;
|
||||
using VolPro.Entity.DomainModels;
|
||||
using Warehouse.IRepositories;
|
||||
using Warehouse.IServices;
|
||||
using Warehouse.Services;
|
||||
|
||||
namespace Warehouse.Controllers
|
||||
{
|
||||
public partial class gateway_nodesController
|
||||
{
|
||||
private readonly Igateway_nodesService _service;//访问业务代码
|
||||
private readonly Ibase_deviceService _deviceService;
|
||||
private readonly Iiot_alarmService _iot_alarmService;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
[ActivatorUtilitiesConstructor]
|
||||
public gateway_nodesController(
|
||||
Igateway_nodesService service,
|
||||
Ibase_deviceService deviceService,
|
||||
Iiot_alarmService iot_alarmService,
|
||||
IHttpContextAccessor httpContextAccessor
|
||||
)
|
||||
: base(service)
|
||||
{
|
||||
_service = service;
|
||||
_deviceService = deviceService;
|
||||
_iot_alarmService = iot_alarmService;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
/// <summary>A1: 网关注册(Upsert)。认证方式: NodeToken</summary>
|
||||
[HttpPost]
|
||||
[Route("/api/gateway/register")]
|
||||
@@ -32,11 +56,7 @@ namespace Warehouse.Controllers
|
||||
var node = await _service.RegisterNodeAsync(req.NodeCode, req.Token, req.AdapterTypes, req.BaseUrl);
|
||||
|
||||
// 返回当前网关的顶层设备列表
|
||||
var deviceSvc = _service.GetType().Assembly.GetType("Warehouse.Services.base_deviceService")
|
||||
?.GetProperty("Instance")?.GetValue(null) as Ibase_deviceService;
|
||||
var devices = deviceSvc != null
|
||||
? await deviceSvc.GetDevicesByGatewayNodeAsync(node.NodeId)
|
||||
: new List<base_device>();
|
||||
var devices = await _deviceService.GetDevicesByGatewayNodeAsync(node.NodeId);
|
||||
|
||||
return Ok(new { nodeId = node.NodeId, devices = devices.Select(d => new {
|
||||
d.DeviceId, d.DeviceName, d.AdapterCode, d.SourceId,
|
||||
@@ -125,12 +145,10 @@ namespace Warehouse.Controllers
|
||||
if (node == null) return StatusCode(401, new { message = "认证失败" });
|
||||
|
||||
// 获取告警服务
|
||||
var alarmSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.iot_alarmService");
|
||||
var alarmSvc = alarmSvcType?.GetProperty("Instance")?.GetValue(null) as Iiot_alarmService;
|
||||
var alarmSvc = _iot_alarmService;
|
||||
|
||||
// 批量查询 DeviceSourceId → DeviceId 映射
|
||||
var deviceSvcType = _service.GetType().Assembly.GetType("Warehouse.Services.base_deviceService");
|
||||
var deviceSvc = deviceSvcType?.GetProperty("Instance")?.GetValue(null) as Ibase_deviceService;
|
||||
var deviceSvc = _deviceService;
|
||||
|
||||
int added = 0;
|
||||
foreach (var a in req.Alarms)
|
||||
|
||||
Reference in New Issue
Block a user