using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using HT.Cloud.Code;
using SqlSugar;
using HT.Cloud.DataBase;
using HT.Cloud.Domain.ChartsManage;
using Serenity.Services;
using iTextSharp.text;
using HT.Cloud.Domain.DevicesManage;
using Microsoft.AspNetCore.Mvc;
using HT.Cloud.Domain.ReportManage;
using Quartz;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Security.Cryptography.Xml;
namespace HT.Cloud.Service.ChartsManage
{
///
/// 创 建:cdl
/// 日 期:2023-02-23 11:10
/// 描 述:历史趋势服务类
///
public class RtTechChartsService : BaseService, IDenpendency
{
///
/// 绑定数据仓库的数据库ID
///
private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber;
public RtTechChartsService(ISqlSugarClient context) : base(context)
{
}
public async Task GetAllTagList(string systemName, string chartTagType)
{
//var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName;
//var driverId = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().DriverID;
//var driverName = _context.AsTenant().QueryableWithAttr().Where(x => x.DriverID == driverId).First().DriverName;
var list = _context.AsTenant().GetConnection(dataDBNumber).Ado.SqlQuery($"SELECT * FROM HT_{systemName}_CHART WHERE ChartTagType = '{chartTagType}'");
return list.ToJson();
}
public async Task GetDriverGroupList()
{
List subsystems = new List();
var list_group = _context.AsTenant().QueryableWithAttr().ToList();
int i = 0;
foreach (var group in list_group)
{
subsystems.Add(new GroupNameList() { Lable = "a" + i, Value = group.GroupDescription });
i++;
}
return subsystems.ToJson();
}
public async Task GetGroupSubsystemTag(string groupDescription)
{
List subsystems = new List();
var groupId = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == groupDescription).First().GroupID;
var grouped = _context.AsTenant().QueryableWithAttr().ToList().Where(x=>x.GroupID==groupId);
List list_name_two = grouped.Select(t => t.Subsystem).GroupBy(c => c).Select(c => c.First()).ToList();
int i = 0;
foreach (var Meta_Tag in list_name_two)
{
subsystems.Add(new SubsysytemNameList() { Lable = "a" + i, Value = Meta_Tag });
i++;
}
return subsystems.ToJson();
}
public async Task GetAllSubsystemTag()
{
List subsystems = new List();
var grouped = _context.AsTenant().QueryableWithAttr().ToList();
List list_name_two = grouped.Select(t => t.Subsystem).GroupBy(c => c).Select(c => c.First()).ToList();
int i = 0;
foreach (var Meta_Tag in list_name_two)
{
subsystems.Add(new SubsysytemNameList() { Lable = "a" + i, Value = Meta_Tag });
i++;
}
return subsystems.ToJson();
}
public async Task GetSubsystemAllTag(string subsysytemName,string groupDescription)
{
var subsysname = subsysytemName;
var groupId = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == groupDescription).First().GroupID;
var response = _context.AsTenant().QueryableWithAttr().Where(x => x.Subsystem == subsysname&&x.GroupID == groupId).Select(x => new { x.TagID, x.Description, x.Units }).ToList();
var reList = new List();
foreach (var subsystem in response)
{
reList.Add(
new SubAllTagReturn()
{
TagID =(short)subsystem.TagID,
Description = subsystem.Description + $"({subsystem.Units})",
Units = subsystem.Units
}
);
}
return reList.ToJson();
}
public async Task GetChartsTagValueInit(string[] charts_TagNames, string[] Tables, string systemName)
{
var tagName_list = new List();
var result_list = new List>();
//var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName;
foreach (string tagNameTxt in charts_TagNames)
{
tagName_list.Add(tagNameTxt);
result_list.Add(new List());
}
var remoteRtDataServer = _context.AsTenant().QueryableWithAttr().First().remotertdataserver + $"systemName={systemName}";
/**/
var timeEnd = DateTime.Now.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss");
var timeStart = DateTime.Now.AddHours(-12).ToString("yyyy-MM-dd HH:mm:ss");
var timeinterval = 30;
bool finish = false;
var initDbData = new List>();
Task.Run(() =>
{
GetTagValueInit_Backgroud(Tables, charts_TagNames, timeStart, timeEnd, timeinterval, out finish, out initDbData, systemName);
});
/**/
while (!finish)
{
var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer);
JObject valueJson = JObject.Parse(responseStr);
int forid = 0;
foreach (string tagName in tagName_list)
{
var timestring = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var srcvalue = valueJson[tagName].ToString();
decimal value = 0.0M;
if (srcvalue.Equals("False") || srcvalue.Equals("True"))
{
value = srcvalue.Equals("True") ? value = 1.0M : value = 0.0M;
}
else
{
value = decimal.Parse(srcvalue);
}
result_list[forid].Add(new ChartData()
{
name = timestring,
value = value
});
forid++;
}
Thread.Sleep(980);
}
for(int ii =0;ii> initDbData, string systemName)
{
finish = false;
initDbData = new List>();
for(int i = 0;i.ConvertDataTableToList(dt);
var resultlist = new List();
foreach (var value in valuelist)
{
resultlist.Add(new ChartData()
{
name = value.HDATETIME,
value = value.VALUE
});
}
initDbData.Add(resultlist);
}
finish = true;
}
public async Task GetChartsTagValue(string[] charts_TagNames, string systemName)
{
var tagName_list = new List();
var result_list = new List>();
//var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName;
foreach (string tagNameTxt in charts_TagNames)
{
tagName_list.Add(tagNameTxt);
result_list.Add(new List());
}
var remoteRtDataServer = _context.AsTenant().QueryableWithAttr().First().remotertdataserver + $"systemName={systemName}"; ;
var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer);
JObject valueJson = JObject.Parse(responseStr);
int forid = 0;
foreach (string tagName in tagName_list)
{
var timestring = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var srcvalue = valueJson[tagName].ToString();
decimal value = 0.0M;
if (srcvalue.Equals("False") || srcvalue.Equals("True"))
{
value = srcvalue.Equals("True") ? value = 1.0M : value = 0.0M;
}
else
{
value = decimal.Parse(srcvalue);
}
result_list[forid].Add(new ChartData()
{
name = timestring,
value = value
});
forid++;
}
return result_list.ToJson();
}
public class SubsysytemNameList
{
public string Lable { get; set; }
public string Value { get; set; }
}
private class GroupNameList
{
public string Lable { get; set; }
public string Value { get; set; }
}
public class SubAllTagReturn
{
//x.TagID, x.Description, x.Units
public short TagID { get; set; }
public string Description { get; set; }
public string Units { get; set; }
}
public class ChartData
{
public decimal value { get; set; }
public String name { get; set; }
}
public class HDATETIMEVALUE
{
public String HDATETIME { get; set; }
public decimal VALUE { get; set; }
}
}
}