Files
HTCloud/HT.Cloud.Service/ChartsManage/RtTechChartsService.cs
dell fbc097d131 1、陕西建龙打包版本
2、drawio导入SFC
3、多系统并存修改
2025-02-19 16:06:08 +08:00

294 lines
9.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 创 建cdl
/// 日 期2023-02-23 11:10
/// 描 述:历史趋势服务类
/// </summary>
public class RtTechChartsService : BaseService<RtTechChartsEntity>, IDenpendency
{
/// <summary>
/// 绑定数据仓库的数据库ID
/// </summary>
private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber;
public RtTechChartsService(ISqlSugarClient context) : base(context)
{
}
public async Task<string> GetAllTagList(string systemName, string chartTagType)
{
//var groupName = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().GroupName;
//var driverId = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().DriverID;
//var driverName = _context.AsTenant().QueryableWithAttr<MetaDriverEntity>().Where(x => x.DriverID == driverId).First().DriverName;
var list = _context.AsTenant().GetConnection(dataDBNumber).Ado.SqlQuery<HT_HISTORY_CHARTEntity>($"SELECT * FROM HT_{systemName}_CHART WHERE ChartTagType = '{chartTagType}'");
return list.ToJson();
}
public async Task<string> GetDriverGroupList()
{
List<GroupNameList> subsystems = new List<GroupNameList>();
var list_group = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().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<string> GetGroupSubsystemTag(string groupDescription)
{
List<SubsysytemNameList> subsystems = new List<SubsysytemNameList>();
var groupId = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == groupDescription).First().GroupID;
var grouped = _context.AsTenant().QueryableWithAttr<MetaTagEntity>().ToList().Where(x=>x.GroupID==groupId);
List<string> 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<string> GetAllSubsystemTag()
{
List<SubsysytemNameList> subsystems = new List<SubsysytemNameList>();
var grouped = _context.AsTenant().QueryableWithAttr<MetaTagEntity>().ToList();
List<string> 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<string> GetSubsystemAllTag(string subsysytemName,string groupDescription)
{
var subsysname = subsysytemName;
var groupId = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == groupDescription).First().GroupID;
var response = _context.AsTenant().QueryableWithAttr<MetaTagEntity>().Where(x => x.Subsystem == subsysname&&x.GroupID == groupId).Select(x => new { x.TagID, x.Description, x.Units }).ToList();
var reList = new List<SubAllTagReturn>();
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<string> GetChartsTagValueInit(string[] charts_TagNames, string[] Tables, string systemName)
{
var tagName_list = new List<string>();
var result_list = new List<List<ChartData>>();
//var groupName = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().GroupName;
foreach (string tagNameTxt in charts_TagNames)
{
tagName_list.Add(tagNameTxt);
result_list.Add(new List<ChartData>());
}
var remoteRtDataServer = _context.AsTenant().QueryableWithAttr<RtTechChartsEntity>().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<List<ChartData>>();
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.Count;ii++)
{
var item = result_list[ii].ToList();
initDbData[ii].AddRange(item);
}
return initDbData.ToJson();
}
public void GetTagValueInit_Backgroud(string[] tables, string[] tagNames, string startdt, string enddt, int timeinterval,out bool finish, out List<List<ChartData>> initDbData, string systemName)
{
finish = false;
initDbData = new List<List<ChartData>>();
for(int i = 0;i<tagNames.Length;i++)
{
SugarParameter[] sqlParameters =
{
new SugarParameter("@HTable",tables[i]),
new SugarParameter("@HTagName",tagNames[i]),
new SugarParameter("@startdt",startdt),
new SugarParameter("@enddt",enddt),
new SugarParameter("@timeinterval",timeinterval)
};
var dt = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable($"Query_Chart_Tag_{systemName}", sqlParameters);
//*
//var ds = db.SqlQuery("Query_Report_Period", sqlParameters);///
var valuelist = DataTableConvertModel<HDATETIMEVALUE>.ConvertDataTableToList(dt);
var resultlist = new List<ChartData>();
foreach (var value in valuelist)
{
resultlist.Add(new ChartData()
{
name = value.HDATETIME,
value = value.VALUE
});
}
initDbData.Add(resultlist);
}
finish = true;
}
public async Task<string> GetChartsTagValue(string[] charts_TagNames, string systemName)
{
var tagName_list = new List<string>();
var result_list = new List<List<ChartData>>();
//var groupName = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().GroupName;
foreach (string tagNameTxt in charts_TagNames)
{
tagName_list.Add(tagNameTxt);
result_list.Add(new List<ChartData>());
}
var remoteRtDataServer = _context.AsTenant().QueryableWithAttr<RtTechChartsEntity>().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; }
}
}
}