2023-08-11 16:04:39 +08:00
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 ;
2023-11-06 21:26:55 +08:00
using System.Security.Cryptography.Xml ;
2023-08-11 16:04:39 +08:00
namespace HT.Cloud.Service.ChartsManage
{
/// <summary>
/// 创 建: cdl
/// 日 期: 2023-02-23 11:10
/// 描 述:历史趋势服务类
/// </summary>
public class RtTechChartsService : BaseService < RtTechChartsEntity > , IDenpendency
{
2023-08-24 09:28:09 +08:00
/// <summary>
/// 绑定数据仓库的数据库ID
/// </summary>
private string dataDBNumber = GlobalContext . SystemConfig . DataDBNumber ;
public RtTechChartsService ( ISqlSugarClient context ) : base ( context )
2023-08-11 16:04:39 +08:00
{
}
public async Task < string > GetAllTagList ( string systemName , string chartTagType )
{
2025-02-19 16:06:08 +08:00
//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}'" ) ;
2023-08-11 16:04:39 +08:00
return list . ToJson ( ) ;
}
public async Task < string > GetDriverGroupList ( )
{
List < GroupNameList > subsystems = new List < GroupNameList > ( ) ;
2023-08-24 09:28:09 +08:00
var list_group = _context . AsTenant ( ) . QueryableWithAttr < MetaGroupEntity > ( ) . ToList ( ) ;
2023-08-11 16:04:39 +08:00
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 > ( ) ;
2023-08-24 09:28:09 +08:00
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 ) ;
2023-08-11 16:04:39 +08:00
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 > ( ) ;
2023-08-24 09:28:09 +08:00
var grouped = _context . AsTenant ( ) . QueryableWithAttr < MetaTagEntity > ( ) . ToList ( ) ;
2023-08-11 16:04:39 +08:00
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 ;
2023-08-24 09:28:09 +08:00
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 ( ) ;
2023-08-11 16:04:39 +08:00
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 ( ) ;
}
2023-11-06 21:26:55 +08:00
public async Task < string > GetChartsTagValueInit ( string [ ] charts_TagNames , string [ ] Tables , string systemName )
2023-08-11 16:04:39 +08:00
{
2023-11-06 21:26:55 +08:00
2023-08-11 16:04:39 +08:00
var tagName_list = new List < string > ( ) ;
var result_list = new List < List < ChartData > > ( ) ;
2025-02-19 16:06:08 +08:00
//var groupName = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().GroupName;
2023-08-11 16:04:39 +08:00
foreach ( string tagNameTxt in charts_TagNames )
{
tagName_list . Add ( tagNameTxt ) ;
result_list . Add ( new List < ChartData > ( ) ) ;
}
2025-02-19 16:06:08 +08:00
var remoteRtDataServer = _context . AsTenant ( ) . QueryableWithAttr < RtTechChartsEntity > ( ) . First ( ) . remotertdataserver + $"systemName={systemName}" ;
2023-11-06 21:26:55 +08:00
/**/
var timeEnd = DateTime . Now . AddSeconds ( - 1 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
2023-12-20 15:51:03 +08:00
var timeStart = DateTime . Now . AddHours ( - 12 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
var timeinterval = 30 ;
2023-11-06 21:26:55 +08:00
bool finish = false ;
var initDbData = new List < List < ChartData > > ( ) ;
Task . Run ( ( ) = >
{
2025-02-19 16:06:08 +08:00
GetTagValueInit_Backgroud ( Tables , charts_TagNames , timeStart , timeEnd , timeinterval , out finish , out initDbData , systemName ) ;
2023-11-06 21:26:55 +08:00
} ) ;
/**/
while ( ! finish )
2023-08-11 16:04:39 +08:00
{
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.0 M ;
if ( srcvalue . Equals ( "False" ) | | srcvalue . Equals ( "True" ) )
{
value = srcvalue . Equals ( "True" ) ? value = 1.0 M : value = 0.0 M ;
}
else
{
value = decimal . Parse ( srcvalue ) ;
}
result_list [ forid ] . Add ( new ChartData ( )
{
name = timestring ,
value = value
} ) ;
forid + + ;
}
Thread . Sleep ( 980 ) ;
}
2023-11-06 21:26:55 +08:00
for ( int ii = 0 ; ii < initDbData . Count ; ii + + )
{
var item = result_list [ ii ] . ToList ( ) ;
initDbData [ ii ] . AddRange ( item ) ;
}
return initDbData . ToJson ( ) ;
2023-08-11 16:04:39 +08:00
}
2025-02-19 16:06:08 +08:00
public void GetTagValueInit_Backgroud ( string [ ] tables , string [ ] tagNames , string startdt , string enddt , int timeinterval , out bool finish , out List < List < ChartData > > initDbData , string systemName )
2023-11-06 21:26:55 +08:00
{
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 )
} ;
2025-02-19 16:06:08 +08:00
var dt = _context . AsTenant ( ) . GetConnection ( dataDBNumber ) . Ado . UseStoredProcedure ( ) . GetDataTable ( $"Query_Chart_Tag_{systemName}" , sqlParameters ) ;
2023-11-06 21:26:55 +08:00
//*
//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 ;
}
2023-08-11 16:04:39 +08:00
public async Task < string > GetChartsTagValue ( string [ ] charts_TagNames , string systemName )
{
var tagName_list = new List < string > ( ) ;
var result_list = new List < List < ChartData > > ( ) ;
2025-02-19 16:06:08 +08:00
//var groupName = _context.AsTenant().QueryableWithAttr<MetaGroupEntity>().Where(x => x.GroupDescription == systemName).First().GroupName;
2023-08-11 16:04:39 +08:00
foreach ( string tagNameTxt in charts_TagNames )
{
tagName_list . Add ( tagNameTxt ) ;
result_list . Add ( new List < ChartData > ( ) ) ;
}
2025-02-19 16:06:08 +08:00
var remoteRtDataServer = _context . AsTenant ( ) . QueryableWithAttr < RtTechChartsEntity > ( ) . First ( ) . remotertdataserver + $"systemName={systemName}" ; ;
2023-08-11 16:04:39 +08:00
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.0 M ;
if ( srcvalue . Equals ( "False" ) | | srcvalue . Equals ( "True" ) )
{
value = srcvalue . Equals ( "True" ) ? value = 1.0 M : value = 0.0 M ;
}
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 ; }
}
2023-11-06 21:26:55 +08:00
}
2023-08-11 16:04:39 +08:00
}