using Abp.Dependency;
using System;
using System.Threading.Tasks;
using ToolLibrary.LogHelper;
using Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection;
using Yunda.ISAS.DataMonitoringServer.DataAnalysis.Helper;
using Yunda.ISAS.DataMonitoringServer.DataAnalysis.TeleInfoSave;
using Yunda.ISAS.DataMonitoringServer.DataCenter;
using Yunda.ISAS.DataMonitoringServer.WebApi;
using Yunda.ISAS.DataMonitoringServer.WebSocket;
using Yunda.SOMS.DataMonitoringServer.Service.DataAnalysis.Model;
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
{
public class MonitoringDataService : ISingletonDependency
{
///
/// 是否在运行
///
//public bool IsRunning { get; set; }
private readonly DataCollectionTask _dataCollectionTask;
private readonly TelemeteringResultSaveTask _telemeteringResultSaveTask;
private readonly WebSocketServer _webSocketServer;
private readonly WebApiServer _webApiServer;
private readonly ConfigurationHepler _configurationHepler;
private readonly WebApiRequest _webApiRequest;
private readonly RunningDataCache _runningDataCache;
private readonly TelecomDataCenter _telecomDataCenter;
public MonitoringDataService(WebApiRequest webApiRequest,
RunningDataCache runningDataCache,
DataCollectionTask dataCollectionTask,
TelemeteringResultSaveTask telemeteringResultSaveTask,
WebSocketServer webSocketController,
ConfigurationHepler configurationHepler,
TelecomDataCenter telecomDataCenter,
WebApiServer webApiServer
)
{
_telecomDataCenter = telecomDataCenter;
_webApiRequest = webApiRequest;
_runningDataCache = runningDataCache;
_dataCollectionTask = dataCollectionTask;
_telemeteringResultSaveTask = telemeteringResultSaveTask;
_webSocketServer = webSocketController;
_webApiServer = webApiServer;
_configurationHepler = configurationHepler;
var webapiPort = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "WebApi", "Port");
//_webApiServer.RunServerAsync(int.Parse(webapiPort));
}
private bool IsOpenWebSocket = false;
///
/// 开始服务
///
///
public void DataServiceStart(Content settingModel)
{
Action startWebsocket = () =>
{
try
{
if (!IsOpenWebSocket)
{
_telemeteringResultSaveTask.SaveStart();//开启遥测数据保存
_telecomDataCenter.ExcuteSelfChecking();
var path = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Path");
var port = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Port");
_webSocketServer.WebSocketStartAsync(path, int.Parse(port));
IsOpenWebSocket = true;
}
}
catch (Exception ex)
{
Log4Helper.Error(this.GetType(), "websocket", ex);
}
};
SetMonitoringData(_configurationHepler.SubstationId);
_dataCollectionTask.CollectionStart(settingModel, startWebsocket);//开启数据采集
}
public void CallAllData()
{
_dataCollectionTask.CallAllData();
}
///
/// 停止服务
///
public void DataServiceStop()
{
_dataCollectionTask.CollectionStop(); //数据采集停止
}
///
/// 从服务端获取遥信遥测数据 填入缓存中
///
private void SetMonitoringData(Guid transformerSubstationId)
{
try
{
//1、从业务服务中获取监控遥测,遥信数据并更新至MonitoringDataService.EquipmentData中
_webApiRequest.GetEquipmentData(transformerSubstationId);
_webApiRequest.GetLinkageStrategyData(transformerSubstationId);
_webApiRequest.GetVideoDevs(transformerSubstationId);
_webApiRequest.GetTransubstationInfo(transformerSubstationId);
var count = _runningDataCache.VideoDevs.Count;
MonitoringEventBus.LogHandler($"从服务器获取了{count}条摄像头数据", "服务器数据更新");
_webApiRequest.GetTelecommandModels(transformerSubstationId);
count = _runningDataCache.TelecommandModels.Count;
MonitoringEventBus.LogHandler($"从服务器获取了{count}条遥控配置数据", "服务器数据更新");
_webApiRequest.InitCamAuthCache();
}
catch (Exception ex)
{
MonitoringEventBus.LogHandler(ex.Message, "异常信息");
}
}
}
}