diff --git a/src/YunDa.Server/YunDa.Server.ISMSTcp/Configuration/ApiEndpointsConfiguration.cs b/src/YunDa.Server/YunDa.Server.ISMSTcp/Configuration/ApiEndpointsConfiguration.cs
index d808c10..3e0b650 100644
--- a/src/YunDa.Server/YunDa.Server.ISMSTcp/Configuration/ApiEndpointsConfiguration.cs
+++ b/src/YunDa.Server/YunDa.Server.ISMSTcp/Configuration/ApiEndpointsConfiguration.cs
@@ -88,5 +88,20 @@ namespace YunDa.Server.ISMSTcp.Configuration
public string BeijingYounuoApiPushYounuoAlert => $"{BaseUrl.TrimEnd('/')}/api/services/SOMS/BeijingYounuoApi/PushYounuoAlert";
public string BeijingYounuoApiDeleteAlarmsByTwinId => $"{BaseUrl.TrimEnd('/')}/api/services/SOMS/BeijingYounuoApi/DeleteAlarmsByTwinId";
+
+ ///
+ /// 二次回路巡检计划 URI
+ ///
+ public string SecondaryCircuitInspectionPlanUri => $"{BaseUrl.TrimEnd('/')}/api/services/SOMS/SecondaryCircuitInspectionPlan/GetList";
+
+ ///
+ /// 获取孪生体与遥测数据绑定关系 URI
+ ///
+ public string ThingDeviceBindingConfigUri => $"{BaseUrl.TrimEnd('/')}/api/services/SOMS/TwinDataBinding/FindDatas";
+
+ ///
+ /// 获取设备和孪生体的关联 URI
+ ///
+ public string ThingSimDatasUri => $"{BaseUrl.TrimEnd('/')}/api/services/SOMS/RackEquipment/GetSimDatas";
}
}
diff --git a/src/YunDa.Server/YunDa.Server.ISMSTcp/Controllers/QueryController.cs b/src/YunDa.Server/YunDa.Server.ISMSTcp/Controllers/QueryController.cs
index 35c2d07..0af780b 100644
--- a/src/YunDa.Server/YunDa.Server.ISMSTcp/Controllers/QueryController.cs
+++ b/src/YunDa.Server/YunDa.Server.ISMSTcp/Controllers/QueryController.cs
@@ -2,9 +2,11 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
+using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Utilities;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -253,22 +255,27 @@ namespace YunDa.Server.ISMSTcp.Controllers
///
/// 示例请求:GET /api/CallYCByDataId?dataIds=CallYCByDataID|001#002#003
///
- [HttpGet("CallYCByDataId")]
+ [HttpPost("CallYCByDataId")]
public async Task CallYCByDataId(
- [FromQuery] string cmd,
- [FromQuery] int times,
+ [FromBody] CallYCByDataIdRequest request,
CancellationToken cancellationToken = default)
{
+ var id = request.Id;
+ var times = request.Times;
+
+ id.RemoveAll(string.IsNullOrWhiteSpace);
+
+ string cmd = string.Format("CallYCByDataID|{0}", string.Join("#", id));
+
try
{
// 参数验证
- var validationResult = ValidateDataIdsParameter(cmd);
- if (!validationResult.IsValid)
+ if (id.Count == 0)
{
return BadRequest(new
{
success = false,
- message = validationResult.ErrorMessage,
+ message = "未提供数据ID",
timestamp = DateTime.Now
});
}
@@ -276,6 +283,8 @@ namespace YunDa.Server.ISMSTcp.Controllers
_logger.LogInformation("收到遥测数据召唤请求 - cmd: {cmd}", cmd);
// 发送TCP消息
+ DateTime cmdTime = DateTime.Now;
+
int sucessCount = 0;
for (int i = 0; i < times; i++)
{
@@ -287,15 +296,44 @@ namespace YunDa.Server.ISMSTcp.Controllers
await Task.Delay(1000);
}
+
if (times-sucessCount<3)
{
- return Ok(new
+ List ycDataList = null;
+
+ var sw = Stopwatch.StartNew();
+ while(sw.ElapsedMilliseconds < 10*1000)
{
- success = true,
- message = "遥测数据召唤命令已发送",
- timestamp = DateTime.Now
- });
+ ycDataList = await _telemeteringHandle.GetYCDataByDataIds(id, cmdTime, sucessCount);
+
+ if (ycDataList.Count == id.Count)
+ break;
+
+ await Task.Delay(100);
+ }
+
+ if (ycDataList?.Count == id.Count)
+ {
+ return Ok(new
+ {
+ success = true,
+ message = "获取遥测数据成功",
+ data = ycDataList,
+ count = ycDataList.Count,
+ timestamp = DateTime.Now
+ });
+ }
+ else
+ {
+ return StatusCode(500, new
+ {
+ success = false,
+ message = "发送命令成功,获取遥测数据超时",
+ timestamp = DateTime.Now
+ });
+ }
+
}
else
{
@@ -329,34 +367,6 @@ namespace YunDa.Server.ISMSTcp.Controllers
}
}
- ///
- /// 验证数据ID参数
- ///
- /// 数据ID字符串
- /// 验证结果
- private (bool IsValid, string ErrorMessage) ValidateDataIdsParameter(string dataIds)
- {
- if (string.IsNullOrWhiteSpace(dataIds))
- {
- return (false, "参数 dataIds 不能为空");
- }
-
- // 检查格式是否符合 CallYCByDataID|DataID1#DataID2#...
- if (!dataIds.StartsWith("CallYCByDataID|", StringComparison.OrdinalIgnoreCase))
- {
- return (false, "参数格式错误,应为:CallYCByDataID|DataID1#DataID2#DataID3#......");
- }
-
- // 检查是否包含数据ID
- var parts = dataIds.Split('|');
- if (parts.Length < 2 || string.IsNullOrWhiteSpace(parts[1]))
- {
- return (false, "未提供数据ID,格式应为:CallYCByDataID|DataID1#DataID2#DataID3#......");
- }
-
- return (true, string.Empty);
- }
-
///
/// 发送TCP消息
///
diff --git a/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/ApiEndpoints.cs b/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/ApiEndpoints.cs
index 9864572..fa9d3e3 100644
--- a/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/ApiEndpoints.cs
+++ b/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/ApiEndpoints.cs
@@ -46,6 +46,21 @@ namespace YunDa.Server.ISMSTcp.Domain
///
string LoginUri { get; }
+ ///
+ /// 二次回路巡检计划 URI
+ ///
+ string SecondaryCircuitInspectionPlanUri { get; }
+
+ ///
+ /// 获取孪生体与遥测数据绑定关系 URI
+ ///
+ string ThingDeviceBindingConfigUri { get; }
+ ///
+ ///
+ /// 获取设备和孪生体的关联 URI
+ ///
+ string ThingSimDatasUri { get; }
+
}
///
@@ -104,5 +119,20 @@ namespace YunDa.Server.ISMSTcp.Domain
/// 获取用户登录的URI
///
public string LoginUri => _config.LoginUri;
+
+ ///
+ /// 二次回路巡检计划 URI
+ ///
+ public string SecondaryCircuitInspectionPlanUri => _config.SecondaryCircuitInspectionPlanUri;
+
+ ///
+ /// 获取孪生体与遥测数据绑定关系 URI
+ ///
+ public string ThingDeviceBindingConfigUri => _config.ThingDeviceBindingConfigUri;
+
+ ///
+ /// 获取设备和孪生体的关联 URI
+ ///
+ public string ThingSimDatasUri => _config.ThingSimDatasUri;
}
}
diff --git a/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/WebApiRequest.cs b/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/WebApiRequest.cs
index 803573b..e430f0c 100644
--- a/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/WebApiRequest.cs
+++ b/src/YunDa.Server/YunDa.Server.ISMSTcp/Domain/WebApiRequest.cs
@@ -8,8 +8,10 @@ using System.Text;
using System.Threading.Tasks;
using ToolLibrary;
using YunDa.Server.ISMSTcp.Models;
+using YunDa.Server.ISMSTcp.Services;
using YunDa.SOMS.DataTransferObject;
using YunDa.SOMS.DataTransferObject.Account;
+using YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection;
using YunDa.SOMS.DataTransferObject.ExternalEntities.BeijingYounuo;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto;
using YunDa.SOMS.DataTransferObject.MaintenanceAndOperations.SecondaryEquipment;
@@ -622,5 +624,100 @@ namespace YunDa.Server.ISMSTcp.Domain
}
}
+
+ public async Task UploadAlertMessageAsync(List alertDatas)
+ {
+ try
+ {
+ //告警上传
+ foreach (var alert in alertDatas)
+ {
+ await HttpHelper.HttpPostRequestAsync