121 lines
4.3 KiB
C#
121 lines
4.3 KiB
C#
using Aitex.Core.RT.DBCore;
|
||
using MECF.Framework.Common.DataCenter;
|
||
using Sicentury.Core.EventArgs;
|
||
using Sicentury.Core.Tree;
|
||
using Sicentury.Core;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using MECF.Framework.Common.Equipment;
|
||
using System.Drawing.Text;
|
||
using Aitex.Core.RT.Log;
|
||
|
||
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MfcCalculation
|
||
{
|
||
public class MfcSqlHelp
|
||
{
|
||
public static List<double> Query(string module,string tabName, string name,DateTime start,DateTime end)
|
||
{
|
||
var daySlices =DateRangeHelper.SplitInToHours(new DateRangeHelper(start, end), 12);
|
||
string tableName = module;
|
||
string propertyCmd = "," + $"\"{module}.{tabName}.{name}.FeedBack\"";
|
||
string property = $"{module}.{tabName}.{name}.FeedBack";
|
||
|
||
|
||
return GetData(GetDataSetList(daySlices, tableName, propertyCmd, property), property);
|
||
|
||
|
||
}
|
||
private static List<DataSet> GetDataSetList(IEnumerable<DateRangeHelper> daySlices, string tableName, string propertyCmd,string property)
|
||
{
|
||
List<DataSet> DataSetList = new List<DataSet>();
|
||
foreach (var range in daySlices)
|
||
{
|
||
var ts = range.Diff;
|
||
for (var day = 0; day <= ts.Days; day++)
|
||
{
|
||
var tblName = $"{range.Start.AddDays(day):yyyyMMdd}.{tableName}";
|
||
var sql = new StringBuilder();
|
||
// 检查表名是否存在,否则SQL执行出错。
|
||
if (CheckTableExists(tblName))
|
||
{
|
||
sql.Append("select time AS InternalTimeStamp");
|
||
// 添加待查询的列
|
||
sql.Append(propertyCmd);
|
||
sql.Append($" from \"{tblName}\"");
|
||
|
||
if (day < ts.Days)
|
||
sql.Append(" UNION ");
|
||
sql.Append(
|
||
$" where time between {range.Start.Ticks} and {range.End.Ticks} and '{property}' is not NULL order by InternalTimeStamp asc");
|
||
try
|
||
{
|
||
DataSet dataSet = DB.ExecuteDataset(sql.ToString());
|
||
if (dataSet is not null && dataSet.Tables[0].Rows.Count > 0)
|
||
DataSetList.Add(dataSet);
|
||
}
|
||
catch (Exception ex)//查询较早日期时,可能不存在属性会报错
|
||
{
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
return DataSetList;
|
||
}
|
||
private static List<double> GetData(List<DataSet> dataSetList, string property)
|
||
{
|
||
string rowStr;
|
||
List<double> values = new List<double>();
|
||
foreach (DataSet ds in dataSetList)
|
||
{
|
||
try
|
||
{
|
||
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
||
{
|
||
rowStr = ds.Tables[0].Rows[i][property].ToString();
|
||
if (rowStr is not null && rowStr.Length == 0)
|
||
continue;
|
||
double bd = double.Parse(ds.Tables[0].Rows[i][property].ToString());
|
||
if (bd > 0)
|
||
values.Add(bd);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
return values;
|
||
}
|
||
private static bool CheckTableExists(string tableName)
|
||
{
|
||
var sql =
|
||
$"SELECT EXISTS ( SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = '{tableName}' )";
|
||
var table = DB.ExecuteDataset(sql);
|
||
if (table == null)
|
||
return false;
|
||
|
||
if (table.Tables[0].Rows.Count <= 0)
|
||
return false;
|
||
|
||
var value = table.Tables[0].Rows[0]["exists"].ToString();
|
||
if (value.ToLower() == "true")
|
||
return true;
|
||
|
||
return false;
|
||
}
|
||
}
|
||
}
|