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 HT.Cloud.Domain.DevicesManage; using Newtonsoft.Json.Linq; using System.Threading; namespace HT.Cloud.Service.ChartsManage { /// /// 创 建:cdl /// 日 期:2023-03-01 15:05 /// 描 述:实时趋势服务类 /// public class RtchartsService : BaseService, IDenpendency { /// /// 绑定数据仓库的数据库ID /// private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber; public RtchartsService(ISqlSugarClient context) : base(context) { } public async Task GetDriverGroupList() { var list_group = _context.AsTenant().QueryableWithAttr().ToList(); return list_group.ToJson(); } public async Task GetAllSubsystemTag(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 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_TagIDs, 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 tagIDTxt in charts_TagIDs) { var tagID = ushort.Parse(tagIDTxt); var TagName = _context.AsTenant().QueryableWithAttr().Where(x => x.TagID == tagID).First().TagName; tagName_list.Add(TagName); result_list.Add(new List()); } var remoteRtDataServer = _context.AsTenant().QueryableWithAttr().First().remotertdataserver + $"?groupName={groupName}"; for (int i = 0; i < 3; i++) { 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); } return result_list.ToJson(); } public async Task GetChartsTagValue(string[] charts_TagIDs, 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 tagIDTxt in charts_TagIDs) { var tagID = ushort.Parse(tagIDTxt); var TagName = _context.AsTenant().QueryableWithAttr().Where(x => x.TagID == tagID).First().TagName; tagName_list.Add(TagName); result_list.Add(new List()); } var remoteRtDataServer = _context.AsTenant().QueryableWithAttr().First().remotertdataserver + $"?groupName={groupName}"; 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; } } 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; } } } }