全量提交: KMS适配器终检修复+warehouse P0修复+MC4认证修复+网关B路由+接口文档+代码审核报告
This commit is contained in:
@@ -24,10 +24,13 @@ using System.Text.Json;
|
||||
|
||||
namespace Warehouse.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// gateway_nodes 业务逻辑(partial)。注册/心跳/设备同步。
|
||||
/// </summary>
|
||||
public partial class gateway_nodesService
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
private readonly Igateway_nodesRepository _repository;//访问数据库
|
||||
private readonly Igateway_nodesRepository _repository;
|
||||
|
||||
[ActivatorUtilitiesConstructor]
|
||||
public gateway_nodesService(
|
||||
@@ -38,24 +41,22 @@ namespace Warehouse.Services
|
||||
{
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
_repository = dbRepository;
|
||||
//多租户会用到这init代码,其他情况可以不用
|
||||
//base.Init(dbRepository);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 网关注册(Upsert)。
|
||||
/// NodeCode 匹配则更新适配器类型/地址/在线状态并返回已有 NodeId,
|
||||
/// NodeCode 匹配则更新适配器类型/地址/在线状态;
|
||||
/// NodeCode 不匹配且 Token 验证通过则插入新记录。
|
||||
/// </summary>
|
||||
[Obsolete("由 A1 API Controller 自动调用,不建议手动调用")]
|
||||
public async Task<gateway_nodes> RegisterNodeAsync(string nodeCode, string token, string adapterTypes, string baseUrl)
|
||||
{
|
||||
var existing = await _repository.FindAsIQueryable<gateway_nodes>()
|
||||
.FirstOrDefaultAsync(x => x.NodeCode == nodeCode);
|
||||
var existingList = await _repository.FindAsIQueryable(x => x.NodeCode == nodeCode).ToListAsync();
|
||||
var existing = existingList.FirstOrDefault();
|
||||
|
||||
gateway_nodes entity;
|
||||
if (existing != null)
|
||||
{
|
||||
// 已存在:验证Token,更新网关上报字段
|
||||
if (existing.NodeToken != token)
|
||||
throw new UnauthorizedAccessException("NodeToken 不匹配");
|
||||
|
||||
@@ -68,7 +69,6 @@ namespace Warehouse.Services
|
||||
}
|
||||
else
|
||||
{
|
||||
// 新节点:直接插入
|
||||
entity = new gateway_nodes
|
||||
{
|
||||
NodeCode = nodeCode,
|
||||
@@ -89,10 +89,11 @@ namespace Warehouse.Services
|
||||
/// <summary>
|
||||
/// 心跳更新。更新 LastHeartbeat 并标记在线。
|
||||
/// </summary>
|
||||
[Obsolete("由 A2 API Controller 自动调用,不建议手动调用")]
|
||||
public async Task UpdateHeartbeatAsync(string nodeCode, string token)
|
||||
{
|
||||
var entity = _repository.FindAsIQueryable<gateway_nodes>()
|
||||
.FirstOrDefaultAsync(x => x.NodeCode == nodeCode && x.NodeToken == token);
|
||||
var entityList = await _repository.FindAsIQueryable(x => x.NodeCode == nodeCode && x.NodeToken == token).ToListAsync();
|
||||
var entity = entityList.FirstOrDefault();
|
||||
if (entity == null)
|
||||
throw new UnauthorizedAccessException("认证失败:NodeCode 或 Token 无效");
|
||||
|
||||
@@ -102,15 +103,15 @@ namespace Warehouse.Services
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设备数据同步。按照字段分治原则写入 base_device:
|
||||
/// 首次入库写全量,后续仅更新网关字段(IsOnline/ExtraData/ParentDeviceId等)。
|
||||
/// 设备数据同步。按字段分治原则写入 base_device:
|
||||
/// 首次入库写全量,后续仅更新网关字段。
|
||||
/// parentSourceId 解析为 ParentDeviceId。
|
||||
/// </summary>
|
||||
[Obsolete("由 A3 API Controller 自动调用,不建议手动调用")]
|
||||
public async Task<(int added, int updated)> SyncDevicesAsync(int gatewayNodeId, List<SyncDeviceItem> devices)
|
||||
{
|
||||
var db = _repository.DbContext;
|
||||
|
||||
// 批量查询已有设备映射表(用于 parentSourceId → ParentDeviceId 解析)
|
||||
var adapterCodes = devices.Select(d => d.AdapterCode).Distinct().ToList();
|
||||
var existingIds = db.Queryable<base_device>()
|
||||
.Where(x => x.NodeId == gatewayNodeId && adapterCodes.Contains(x.AdapterCode))
|
||||
@@ -124,7 +125,6 @@ namespace Warehouse.Services
|
||||
existingIds.TryGetValue(key, out var existingId);
|
||||
bool isNew = existingId == 0;
|
||||
|
||||
// 解析 parentSourceId → ParentDeviceId
|
||||
int? parentDeviceId = null;
|
||||
if (!string.IsNullOrEmpty(d.ParentSourceId))
|
||||
{
|
||||
@@ -134,7 +134,6 @@ namespace Warehouse.Services
|
||||
|
||||
if (isNew)
|
||||
{
|
||||
// 首次入库写全量
|
||||
var entity = new base_device
|
||||
{
|
||||
DeviceName = d.Name ?? $"DEV_{d.SourceId}",
|
||||
@@ -158,7 +157,6 @@ namespace Warehouse.Services
|
||||
}
|
||||
else
|
||||
{
|
||||
// 已有记录:仅更新网关字段
|
||||
var entity = db.Queryable<base_device>().InSingle(existingId);
|
||||
if (entity != null)
|
||||
{
|
||||
@@ -178,7 +176,7 @@ namespace Warehouse.Services
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>网关同步设备条目(A3 接口接收的数据模型)</summary>
|
||||
/// <summary>网关同步设备条目</summary>
|
||||
public class SyncDeviceItem
|
||||
{
|
||||
public string AdapterCode { get; set; } = "";
|
||||
|
||||
Reference in New Issue
Block a user