From 6025fb75a300829dd86c52ba7c8a1c2e65099614 Mon Sep 17 00:00:00 2001 From: dell Date: Wed, 20 Dec 2023 15:51:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChartsManage/RtTechChartsService.cs | 4 +- .../ReportManage/HistoryAlarmService.cs | 121 + .../SystemSecurity/RealTimeIOState.cs | 119 + .../Views/PenMeiRtTechCharts/Index.cshtml | 59 +- .../PenMeiHistoryAlarmNewController.cs | 17 +- .../PenMeiHistoryAlarmNewNewController.cs | 307 +++ .../Controllers/PenMeiJMReportController.cs | 74 + .../Views/PenMeiHistoryAlarmNew/Index.cshtml | 973 +++++-- .../PenMeiHistoryAlarmNewNew/Index.cshtml | 2290 +++++++++++++++++ .../Views/PenMeiJMReport/Index.cshtml | 327 +++ .../Controllers/MainPageControl.cs | 1 + .../Controllers/DeviceIOController.cs | 46 + .../Views/DeviceIO/Index.cshtml | 297 +++ HT.Cloud.Web/HT.Cloud.Web.csproj | 4 + HT.Cloud.Web/WaterCloud.Web.xml | 76 +- 15 files changed, 4399 insertions(+), 316 deletions(-) create mode 100644 HT.Cloud.Service/SystemSecurity/RealTimeIOState.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewNewController.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiJMReportController.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNewNew/Index.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiJMReport/Index.cshtml create mode 100644 HT.Cloud.Web/Areas/SystemSecurity/Controllers/DeviceIOController.cs create mode 100644 HT.Cloud.Web/Areas/SystemSecurity/Views/DeviceIO/Index.cshtml diff --git a/HT.Cloud.Service/ChartsManage/RtTechChartsService.cs b/HT.Cloud.Service/ChartsManage/RtTechChartsService.cs index 9f0e788..023a76e 100644 --- a/HT.Cloud.Service/ChartsManage/RtTechChartsService.cs +++ b/HT.Cloud.Service/ChartsManage/RtTechChartsService.cs @@ -127,8 +127,8 @@ namespace HT.Cloud.Service.ChartsManage /**/ var timeEnd = DateTime.Now.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss"); - var timeStart = DateTime.Now.AddHours(-2).ToString("yyyy-MM-dd HH:mm:ss"); - var timeinterval = 1; + 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(() => diff --git a/HT.Cloud.Service/ReportManage/HistoryAlarmService.cs b/HT.Cloud.Service/ReportManage/HistoryAlarmService.cs index 55ec250..59d4281 100644 --- a/HT.Cloud.Service/ReportManage/HistoryAlarmService.cs +++ b/HT.Cloud.Service/ReportManage/HistoryAlarmService.cs @@ -136,6 +136,28 @@ namespace HT.Cloud.Service.ReportManage //return resultlist.ToJson(); } + + public async Task GetAlarmRecordForTagName(string Description, string startdt, string enddt, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + var driverID = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupName == groupName).First().DriverID; + var driverName = _context.AsTenant().QueryableWithAttr().Where(x => x.DriverID == driverID).First().DriverName; + //short tagid = (short)_context.AsTenant().QueryableWithAttr().Where(x => x.Description == Description).First().TagID; + var alarmList = _context.AsTenant().GetConnection(dataDBNumber).Ado.SqlQuery($"SELECT * FROM HT_{driverName}_{groupName}_ALARM"); + int tagid = alarmList.Where(x=>x.Description == Description).First().TagID; + SugarParameter[] sqlParameters = + { + new SugarParameter("@Henddt",enddt), + new SugarParameter("@Hstartdt",startdt), + new SugarParameter("@Htagid",tagid) + + }; + var dt = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Tag_Alarm", sqlParameters); + var valuelist = DataTableConvertModel.ConvertDataTableToList(dt); + return valuelist.ToJson(); + + } + public async Task GetAlarmRecordQuick(string HATYPE, string startdt, string enddt, string systemName) { var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; @@ -152,6 +174,22 @@ namespace HT.Cloud.Service.ReportManage return valuelist.ToJson(); } + + public async Task GetAlarmHistory(string startdt, string enddt, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + SugarParameter[] sqlParameters = + { + new SugarParameter("@Henddt",enddt), + new SugarParameter("@HGROUPNAME",groupName), + new SugarParameter("@Hstartdt",startdt) + }; + var dt = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Tag_Alarm_PMHis", sqlParameters); + var valuelist = DataTableConvertModel.ConvertDataTableToList(dt); + return valuelist.ToJson(); + + } + //GetAlarmRecordQuickDesc public async Task GetAlarmRecordQuickDesc(string hhour, string systemName) { @@ -220,6 +258,60 @@ namespace HT.Cloud.Service.ReportManage return valuelist.ToJson(); } + public async Task GetAlarm_CS(string startdt, string enddt, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + SugarParameter[] sqlParameters = + { + new SugarParameter("@HGROUPNAME",groupName), + new SugarParameter("@Hstartdt",startdt), + new SugarParameter("@Henddt",enddt) + }; + var dt = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("HT_BI_Alarm_CS", sqlParameters); + var valuelist = DataTableConvertModel.ConvertDataTableToList(dt); + + var result = new List(); + var hdate = startdt + "至" + enddt; + foreach (var item in valuelist) + { + result.Add(new AlarmCS_Result() + { + HDATE = hdate, + Tagname = item.Tagname, + Description = item.Description, + Hcount = item.Hcount, + }); + } + + + return valuelist.ToJson(); + } + + public async Task GetAlarm_Ztime(string startdt, string enddt, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + SugarParameter[] sqlParameters = + { + new SugarParameter("@HGROUPNAME",groupName), + new SugarParameter("@Hstartdt",startdt), + new SugarParameter("@Henddt",enddt) + }; + var dt = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("HT_BI_Alarm_Ztime", sqlParameters); + var valuelist = DataTableConvertModel.ConvertDataTableToList(dt); + var result = new List(); + var hdate = startdt + "至" + enddt; + foreach ( var item in valuelist) + { + result.Add(new AlarmZtime_Result() { + HDATE =hdate, + TAGNAME = item.TAGNAME, + Description = item.Description, + Hztime = item.Hztime, + }); + } + return result.ToJson(); + } + private class AlarmValueCount { public string Alarmtype { get; set; } @@ -283,5 +375,34 @@ namespace HT.Cloud.Service.ReportManage public string Description { get; set; } public double Hpercent { get; set; } } + + private class AlarmCS + { + public string Tagname { get; set; } + public string Description { get; set; } + public int Hcount { get; set; } + } + + private class AlarmCS_Result + { + public string HDATE { get; set; } + public string Tagname { get; set; } + public string Description { get; set; } + public int Hcount { get; set; } + } + + private class AlarmZtime + { + public string TAGNAME { get; set; } + public string Description { get; set; } + public int Hztime { get; set; } + } + private class AlarmZtime_Result + { + public string HDATE { get; set; } + public string TAGNAME { get; set; } + public string Description { get; set; } + public int Hztime { get; set; } + } } } diff --git a/HT.Cloud.Service/SystemSecurity/RealTimeIOState.cs b/HT.Cloud.Service/SystemSecurity/RealTimeIOState.cs new file mode 100644 index 0000000..dd4af3a --- /dev/null +++ b/HT.Cloud.Service/SystemSecurity/RealTimeIOState.cs @@ -0,0 +1,119 @@ +using MiniExcelLibs; +using Serenity.Services; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HT.Cloud.Domain.ReportManage; +using Newtonsoft.Json.Linq; +using System.Data; +using HT.Cloud.Code; +using HT.Cloud.Domain.ChartsManage; +using HT.Cloud.Domain.DevicesManage; +using Quartz; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; + +namespace HT.Cloud.Service.SystemSecurity +{ + public class RealTimeIOState : BaseService, IDenpendency + { + /// + /// 绑定数据仓库的数据库ID + /// + private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber; + + public RealTimeIOState(ISqlSugarClient context) : base(context) + { + } + + public async Task GetRtData() + { + //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_{driverName}_{groupName}_MAINPAGE"); + + var remoteRtDataServer = " http://localhost:5276/TestIOApi/"; + + var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer); + + + + JObject valueJson = JObject.Parse(responseStr); + + return valueJson.ToString(0); + + //var srcTagRtValues = new List(); + //var dt = new Dictionary(); + //foreach (var src in list) + //{ + // string elementIndex = src.ElementIndex.ToString(); + // string Description = src.Description.ToString(); + // string TagName = src.TagName.ToString(); + // string srcValue = valueJson[TagName].ToString(); + // string hSig = src.Hsig.ToString(); + // string Value = ""; + // if (hSig == "SS") + // { + // if (srcValue == "True") + // Value = "开启"; + // else + // Value = "停止"; + // } + // else if (hSig == "OC") + // { + // if (srcValue == "True") + // Value = "开"; + // else + // Value = "关"; + // } + // else if (hSig == "VP") + // { + // Value = Convert.ToDouble(srcValue).ToString("f2"); + // } + // else if (hSig == "PE") + // { + // Value = srcValue + "%"; + // } + // else if (hSig == "YN") + // { + // if (srcValue == "True") + // Value = "是"; + // else + // Value = "否"; + // } + // else if (hSig == "AM") + // { + // if (srcValue == "True") + // Value = "自动"; + // else + // Value = "手动"; + // } + // dt.Add(elementIndex, Value); + //} + //return dt.ToJson(); + } + + + + public class ChartDataFormat + { + public string TagName { get; set; } + public string Description { get; set; } + public string Value { get; set; } + public string RtTime { get; set; } + } + + public class SrcTagRtValue + { + public string TagName { get; set; } + public string Description { get; set; } + public string Value { get; set; } + } + } +} diff --git a/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiRtTechCharts/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiRtTechCharts/Index.cshtml index 0e38da5..a162c1b 100644 --- a/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiRtTechCharts/Index.cshtml +++ b/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiRtTechCharts/Index.cshtml @@ -685,6 +685,23 @@ 3、构建实时趋势,设置曲线数据从采集服务中的实时数据中每秒增加数据,最大数据量50个。 */ + + /* + *一 + 1、调整报警记录统计界面样式,将报警明细汇总表格和图表显示集中在同一界面。 + 2、修改报警图表数据查询函数为新的存储过程,调用曲工新的仿真数据。 + *二 + 1、柱状图JS绘制方法加载新的返回数据格式,绘制为按照报警次数显示。 + 2、L2管理平台ppt制作。 + *三 + L2管理平台ppt制作。 + *四 + 1、部署modbus驱动测试程序,测试读取效率。 + 2、实时趋势开启后台异步加载,初始化后异步加载12小时的历史数据。 + *五 + 实时趋势添加缩放区域拖拽条,在鼠标滚动的基础上可自由拖动显示的时间跨度。 + */ + //for (var ci = 0; ci < StaticSelectTagList.length; ci++) { // if (ci == 0) { // let yAxisdata = { @@ -815,10 +832,32 @@ let legenddata = StaticSelectTagList[li].Description; legend.push(JSON.parse(JSON.stringify(legenddata))); } - var dataZoom = { - //type: 'slider' - type: 'inside' - } + var dataZoom = [ + // { + // textStyle: { + // color: '#8392A5' + // }, + // handleIcon: + // 'path://M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', + // dataBackground: { + // areaStyle: { + // color: '#8392A5' + // }, + // lineStyle: { + // opacity: 0.8, + // color: '#8392A5' + // } + // }, + // brushSelect: true + // }, + { + type: 'inside', + start: 80, + }, + { + type:'slider' + } + ] var option = { xAxis: { @@ -910,16 +949,16 @@ let axisData = RtData[0][0].name; for (var stl = 0; stl < StaticSelectTagList.length; stl++) { - if (option.series[stl].data.length > 49) { - option.series[stl].data.shift(); - } + // if (option.series[stl].data.length > 49) { + // option.series[stl].data.shift(); + // } option.series[stl].data.push(RtData[stl][0].value); } - if (option.xAxis[0].data.length > 49) { - option.xAxis[0].data.shift(); + // if (option.xAxis[0].data.length > 49) { + // option.xAxis[0].data.shift(); - } + // } option.xAxis[0].data.push(axisData); myChart.setOption(option); diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewController.cs b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewController.cs index a825378..fa0ffa1 100644 --- a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewController.cs +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewController.cs @@ -86,6 +86,17 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers return Content(data); } [HttpPost] + public async Task GetAlarmHistory(Alarm_History_Params alarm_History_Params) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime(alarm_History_Params.StartTime); + var EndTime = Gettime(alarm_History_Params.EndTime); + + var data = await _historyAlarmService.GetAlarmHistory(StartTime, EndTime, systemName); + return Content(data); + } + [HttpPost] public async Task GetAlarmSubSystem(SubSystem_Params subSystem_Params) { string systemName = "喷煤系统"; @@ -214,7 +225,11 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers { public string Hhour { get; set; } } - + public class Alarm_History_Params + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } public class Alarm_ACC_Params diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewNewController.cs b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewNewController.cs new file mode 100644 index 0000000..1db5016 --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryAlarmNewNewController.cs @@ -0,0 +1,307 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using HT.Cloud.Code; +using HT.Cloud.Domain.ChartsManage; +using HT.Cloud.Service; +using Microsoft.AspNetCore.Authorization; +using HT.Cloud.Service.ChartsManage; +using HT.Cloud.Service.ReportManage; +using Serenity.Services; +using HT.Cloud.Domain.DevicesManage; +using SqlSugar; + +namespace HT.Cloud.Web.Areas.ReportManage.Controllers +{ + /// + /// 创 建:cdl + /// 日 期:2023-02-23 11:10 + /// 描 述:历史趋势控制器类 + /// + [Area("PenMeiReportManage")] + public class PenMeiHistoryAlarmNewNewController : BaseController + { + public HistoryAlarmService _historyAlarmService { get;set;} + /// + /// 绑定数据仓库的数据库ID + /// + private string groupDescription = GlobalContext.SystemConfig.GroupDescription; + [HttpGet] + public async Task GetDriverGroupList() + { + var data = await _historyAlarmService.GetDriverGroupList(); + return Content(data); + } + + [HttpGet] + public async Task GetAllSubsystemTag() + { + string systemName = "喷煤系统"; + + var data = await _historyAlarmService.GetAllSubsystemTag(systemName); + return Content(data); + } + + [HttpPost] + public async Task GetSubsystemAllTag(ChartSubsysytemName chartSubsysytemName) + { + string systemName = "喷煤系统"; + + var data = await _historyAlarmService.GetSubsystemAllTag(chartSubsysytemName.SubsysytemName, systemName); + return Content(data); + } + + [HttpPost] + public async Task GetAlarmRecord(Alarm_Params charts_Params) + { + string systemName = "喷煤系统"; + + short TagID = short.Parse(charts_Params.TagID); + var StartTime = Gettime(charts_Params.StartTime); + var EndTime = Gettime(charts_Params.EndTime); + + var data = await _historyAlarmService.GetAlarmRecord(TagID, StartTime, EndTime, systemName); + return Content(data); + } + [HttpPost] + public async Task GetAlarmRecordQuick(Alarm_Quick_Params alarm_Quick_Params) + { + string systemName = "喷煤系统"; + + var Alarmtype = alarm_Quick_Params.Alarmtype; + var StartTime = Gettime(alarm_Quick_Params.StartTime); + var EndTime = Gettime(alarm_Quick_Params.EndTime); + + var data = await _historyAlarmService.GetAlarmRecordQuick(Alarmtype, StartTime, EndTime, systemName); + return Content(data); + } + [HttpPost] + public async Task GetAlarmRecordQuickDesc(Alarm_Quick_Desc_Params alarm_Quick_Desc_Params) + { + string systemName = "喷煤系统"; + + var hhour = alarm_Quick_Desc_Params.Hhour; + + var data = await _historyAlarmService.GetAlarmRecordQuickDesc(hhour, systemName); + return Content(data); + } + [HttpPost] + public async Task GetAlarmHistory(Alarm_History_Params alarm_History_Params) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime(alarm_History_Params.StartTime); + var EndTime = Gettime(alarm_History_Params.EndTime); + + var data = await _historyAlarmService.GetAlarmHistory(StartTime, EndTime, systemName); + return Content(data); + } + [HttpPost] + public async Task GetAlarmSubSystem(SubSystem_Params subSystem_Params) + { + string systemName = "喷煤系统"; + + var AlarmName = subSystem_Params.AlarmName; + var data = await _historyAlarmService.GetAlarmSubSystem(AlarmName,systemName); + return Content(data); + } + + public string Gettime(string longtime) + { + long jsTimeStamp = long.Parse(longtime); + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime dt = startTime.AddMilliseconds(jsTimeStamp); + return (dt.ToString("yyyy/MM/dd HH:mm:ss")); + } + + public string Gettime_(string longtime) + { + long jsTimeStamp = long.Parse(longtime); + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime dt = startTime.AddMilliseconds(jsTimeStamp); + return (dt.ToString("yyyy-MM-dd HH:mm:ss")); + } + + + [HttpPost] + public async Task GetAlarmACC(Alarm_ACC_Params alarm_ACC_Params) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime(alarm_ACC_Params.StartTime); + var EndTime = Gettime(alarm_ACC_Params.EndTime); + + var data = await _historyAlarmService.GetAlarm_ACC(StartTime, EndTime, systemName); + return Content(data); + } + + [HttpPost] + public async Task GetAlarmHistogram(Alarm_Histogram_Params alarm_Histogram_Params) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime_(alarm_Histogram_Params.StartTime); + var EndTime = Gettime_(alarm_Histogram_Params.EndTime); + + var data = await _historyAlarmService.GetAlarm_Histogram(StartTime, EndTime, systemName); + return Content(data); + } + + [HttpPost] + public async Task GetAlarmPie(Alarm_Pie_Params alarm_Pie_Params) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime(alarm_Pie_Params.StartTime); + var EndTime = Gettime(alarm_Pie_Params.EndTime); + + var data = await _historyAlarmService.GetAlarm_Pie(StartTime, EndTime, systemName); + return Content(data); + } + + [HttpPost] + public async Task GetAlarmRecordForTagName(Alarm_ParamsForTagName charts_Params) + { + string systemName = "喷煤系统"; + + string Description = charts_Params.Description; + var StartTime = Gettime(charts_Params.StartTime); + var EndTime = Gettime(charts_Params.EndTime); + + var data = await _historyAlarmService.GetAlarmRecordForTagName(Description, StartTime, EndTime, systemName); + return Content(data); + } + + public async Task GetAlarm_CS(Alarm_CS alarm_CS) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime_(alarm_CS.StartTime); + var EndTime = Gettime_(alarm_CS.EndTime); + + var data = await _historyAlarmService.GetAlarm_CS(StartTime, EndTime, systemName); + return Content(data); + } + + public async Task GetAlarm_Ztime(Alarm_Ztime alarm_Ztime) + { + string systemName = "喷煤系统"; + + var StartTime = Gettime_(alarm_Ztime.StartTime); + var EndTime = Gettime_(alarm_Ztime.EndTime); + + var data = await _historyAlarmService.GetAlarm_Ztime(StartTime, EndTime, systemName); + return Content(data); + } + /* + * 一 + * 1、重绘管理系统所有趋势曲线,曲线的数据点上不在绘制图形圆点。 + * 2、实时趋势开放拖动和JS代码添加可向前加载数据集的动态方法。 + * 二 + * 1、后台服务在获取实时趋势初始化数据时进行向前的数据获取,为初始数据集添加一段历史数据。 + * 2、参加公司组织的拍摄技术培训。 + * 三 + * 1、使用异步和函数回调来执行历史数据查询,在实时数据获取后进行时间戳对其,避免出现重复时间和漏掉时间。 + * 2、报警分析柱图优化,单日柱状图从堆叠图修改为平铺柱状图。 + * 四 + * 1、柱状图添加工具条,可支持堆叠图、平铺图、折线图切换显示,并支持下载功能。 + * 2、添加图表联动功能,增加柱状图和饼图的点击事件,在柱状区域或饼状区域内点击可跳转至该报警信息的详细查询。 + * 五 + * 1、 + * 2、整理管理系统以前相关的设计、宣传素材,编写管理系统演示用ppt。 + */ + //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 SubsysytemNameList + //{ + // public string Lable { get; set; } + // public string Value { get; set; } + //} + + public class ChartSubsysytemName + { + public string SubsysytemName { get; set; } + } + + //public class HDATETIMEVALUE + //{ + // public String HDATETIME { get; set; } + // public decimal VALUE { get; set; } + //} + //public class ChartData + //{ + // public decimal value { get; set; } + // public String name { get; set; } + //} + public class SubSystem_Params + { + public string AlarmName { get; set; } + } + public class Alarm_Params + { + public string TagID { get; set; } + public string StartTime { get; set; } + public string EndTime { get; set; } + } + + public class Alarm_ParamsForTagName + { + public string Description { get; set; } + public string StartTime { get; set; } + public string EndTime { get; set; } + } + + public class Alarm_Quick_Params + { + public string Alarmtype { get; set; } + public string StartTime { get; set; } + public string EndTime { get; set; } + } + public class Alarm_Quick_Desc_Params + { + public string Hhour { get; set; } + } + public class Alarm_History_Params + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + + + public class Alarm_ACC_Params + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + public class Alarm_Histogram_Params + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + public class Alarm_Pie_Params + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + + public class Alarm_CS + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + + public class Alarm_Ztime + { + public string StartTime { get; set; } + public string EndTime { get; set; } + } + } +} diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiJMReportController.cs b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiJMReportController.cs new file mode 100644 index 0000000..6fe2132 --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiJMReportController.cs @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright © 2020 HT.Cloud.Framework 版权所有 + * Author: HT.Cloud + * Description: WaterCloud快速开发平台 + * Website: +*********************************************************************************/ + +using Microsoft.AspNetCore.Mvc; +using System.Linq; +using System.Threading.Tasks; +using HT.Cloud.Code; +using HT.Cloud.Service.SystemSecurity; + +namespace HT.Cloud.Web.Areas.SystemSecurity.Controllers +{ + [Area("PenMeiReportManage")] + [HandlerLogin(needLogin: false)] + [HandlerAuthorize(needAuth: false)] + public class PenMeiJMReportController : BaseController + { + public ServerStateService _serverStateService { get; set; } + public RealTimeIOState _realTimeIOState { get; set; } + + + [HttpGet] + public async Task GetServerDataJson() + { + return await Task.Run(() => + { + /* + * 一 + * 1、安装java集成开发环境,根据示例重构jimu报表的代码。 + * 2、jimu报表的java环境继承到.Net中过于繁琐和前端功能较简单放弃使用jumu报表,使用另一款.Net作为服务端的cell报表。 + * 二 + * 1、下载cell报表前端源码,安装前端Vue3源码环境,通过反编译补全功能代码和与后端的Api请求。 + * 2、去除无用功能和界面,只保留报表功能,将所有原项目logo和名称标记替换为恒拓相关。 + * 三 + * 1、获取cellreport后端源码,编辑源码库的静态资源,下载补全项目引用的开源类库。 + * 2、修改水印函数库文件,将唯一不可修改的导出pdf水印替换为空或恒拓环保科技。 + * 四 + * 1、将前端和后端源码编译打包,重构项目运行结构,前后端集成为一个服务实力,部署测试。 + * 2、报表软件交给曲工进行报表编辑和运行测试,同时进行debug调试。 + * 五 + * 1、将曲工编辑好的报表集成至管理平台。 + * 2、比较JS自动绘图组件,选择适合自动生成的组件进行io模块自动构建。 + */ + //windows环境 + var computer = ComputerHelper.GetComputerInfo(); + var arm = computer.RAMRate; + var cpu = computer.CPURate; + var iis = computer.RunTime; + var TotalRAM = computer.TotalRAM; + string ip = WebHelper.GetWanIp(); + string ipLocation = WebHelper.GetIpLocation(ip); + var IP = string.Format("{0} ({1})", ip, ipLocation); + return Content(new { ARM = arm, CPU = cpu, IIS = iis, TotalRAM = TotalRAM, IP = IP }.ToJson()); + }); + } + + [HttpGet] + public async Task GetServerData() + { + var data = (await _serverStateService.GetList(2)).OrderBy(a => a.F_Date).ToList(); + return Content(data.ToJson()); + } + + [HttpGet] + public async Task GetRealIOState() + { + var data = _realTimeIOState.GetRtData(); + return Content(data.Result); + } + } +} \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNew/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNew/Index.cshtml index 387a908..69e6fbf 100644 --- a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNew/Index.cshtml +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNew/Index.cshtml @@ -364,6 +364,295 @@ }); + form.on('select(quickTimeF)', function (data) { + var selectValue = data.value; + + function getFormatDate(date) { + let year = date.getFullYear(); + let month = date.getMonth() + 1; + let day = date.getDate(); + let hour = date.getHours(); + let minutes = date.getMinutes(); + let seconds = date.getSeconds(); + month = (month < 10) ? '0' + month : month; + day = (day < 10) ? '0' + day : day; + hour = (hour < 10) ? '0' + hour : hour; + minutes = (minutes < 10) ? '0' + minutes : minutes; + seconds = (seconds < 10) ? '0' + seconds : seconds; + let currentDate = year + "-" + month + "-" + day + + " " + hour + ":" + minutes + ":" + seconds; + return currentDate; + } + /** + * 获取今日零点时间戳 + * returns {number} + */ + function todayStartTimestamp() { + const timestamp = Math.floor(new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000) + return timestamp + } + /** + * 获取昨日开始、结束时间戳 + * param num + * returns {number[昨日开始时间戳, 昨日结束时间戳]} + */ + function yesterdayTimestamp(num = 1) { + const MillisecondsADay = 24 * 60 * 60 * num + // 今日零点时间戳 + const timestamp = Math.floor(new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000) + // 昨日开始时间戳 + const yesterdayStartTime = timestamp - MillisecondsADay + // 昨日结束时间戳 + const yesterdayEndTime = timestamp - 1 + return [yesterdayStartTime, yesterdayEndTime] + } + /** + * 本周开始时间戳 + * returns {number} + */ + function weekStartTimestamp() { + // 一天的秒数 + const MillisecondsADay = 24 * 60 * 60 + // 今日零点时间戳 + const timestamp = Math.floor(new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000) + const weekDay = new Date().getDay() === 0 ? (7 - 1) : (new Date().getDay() - 1) + const weekTimeStamp = timestamp - MillisecondsADay * weekDay + return weekTimeStamp + } + /** + * 上周开始、结束时间戳 + * returns {number[上周开始时间戳, 上周结束时间戳]} + */ + function lastWeekTimetamp() { + // 一天的秒数 + const MillisecondsADay = 24 * 60 * 60 + // 今日零点时间戳 + const timestamp = Math.floor(new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000) + const weekDay = new Date().getDay() === 0 ? (7 - 1) : (new Date().getDay() - 1) + // 本周开始时间戳 + const weekTimeStamp = timestamp - MillisecondsADay * weekDay + // 上周开始时间戳 + const lastWeekStart = weekTimeStamp - MillisecondsADay * 7 + // 上周结束时间戳 + const lastWeekEnd = weekTimeStamp - 1 + return [lastWeekStart, lastWeekEnd] + } + + /** + * 当月开始时间戳 + * returns {number} + */ + function monthStartTimestamp() { + const date = new Date() + date.setDate(1) + date.setHours(0, 0, 0, 0) + const timeStamp = date.getTime() / 1000 + return timeStamp + } + /** + * 获取上月开始、结束时间戳 + * returns {number[上月开始时间戳,上月结束时间戳]} + */ + function lastMonthTimetamp() { + // 一天的秒数 + const MillisecondsADay = 24 * 60 * 60 + + const date = new Date() + date.setDate(1) + date.setHours(0, 0, 0, 0) + // 当月开始时间戳 + const timeStamp = date.getTime() / 1000 + // 上个月的天数 + const days = lastMonthDats() + // 上月开始时间戳 + const lastMonthStart = timeStamp - (MillisecondsADay * days) + // 上月结束时间戳 + const lastMonthEnd = timeStamp - 1 + return [lastMonthStart, lastMonthEnd] + } + /** + * 上月天数 + * returns {number} + */ + function lastMonthDats() { + const date = new Date() + const year = date.getFullYear() + // 上个月月份 + let month = (date.getMonth() + 1) - 1 // 0-11 表示 1月-12月 + // 0 表示12月 + month = month || 12 + // 30天的月份 + const arr30 = [4, 6, 9, 11] + // 31天的月份 + const arr31 = [1, 3, 5, 7, 8, 10, 12] + if (arr30.indexOf(month) !== -1) { + // 上个月是 30 天 + return 30 + } else if (arr31.indexOf(month) !== -1) { + // 上个月是 31 天 + return 31 + } else { + // 2月 + if (isRunYear(year)) { + return 29 + } else { + return 28 + } + } + } + /** + * 是否为闰年 + * param year + * returns {boolean} + */ + function isRunYear(year) { + // 条件:能被4整除并且不能被100整除,或者被400整除的 + let flag = false + if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) { + flag = true + } + return flag + } + + var laydate = layui.laydate; + if (selectValue == "toDay") { + var toDayStartDate = todayStartTimestamp(); + var timef1 = getFormatDate(new Date(toDayStartDate * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef1, + }); + }); + var timef2 = getFormatDate(new Date(Date.now())); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + } else if (selectValue == "yesterDay") { + var yesterDayDate = yesterdayTimestamp(1); + var timef1 = getFormatDate(new Date(yesterDayDate[0] * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef1, + }); + }); + var timef2 = getFormatDate(new Date(yesterDayDate[1] * 1000)); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + } else if (selectValue == "thisWeek") { + var weekStartDate = weekStartTimestamp(); + var timef1 = getFormatDate(new Date(weekStartDate * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef1, + }); + }); + var timef2 = getFormatDate(new Date(Date.now())); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + + } else if (selectValue == "lastWeek") { + var lastWeekDate = lastWeekTimetamp(); + var timef1 = getFormatDate(new Date(lastWeekDate[0] * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef1, + }); + }); + var timef2 = getFormatDate(new Date(lastWeekDate[1] * 1000)); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + } else if (selectValue == "thisMonth") { + var monthStartDate = monthStartTimestamp(); + var timef = getFormatDate(new Date(monthStartDate * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef, + }); + }); + var timef2 = getFormatDate(new Date(Date.now())); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + + } else if (selectValue == "lastMonth") { + //lastMonthTimetamp() + var lastMonthDate = lastMonthTimetamp(); + var timef1 = getFormatDate(new Date(lastMonthDate[0] * 1000)); + lay('#dateReStartTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef1, + }); + }); + var timef2 = getFormatDate(new Date(lastMonthDate[1] * 1000)); + lay('#dateReEndTime1').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: timef2, + }); + }); + } else { } + }); + GetAllSubsystemTag(); var starttime = new Date(new Date().setHours(0, 0, 0, 0)); @@ -588,7 +877,10 @@ type: "Post", //dataType: "json", data: para, - success: function (redata) { } + success: function (redata) { + + + } }); debugger; $.when(myajax).done(function (redata) { @@ -620,34 +912,40 @@ showTableQuick = async function () { debugger; //if (selectType.value == "recent") { - showLoading1(); - var showdata = await GetAlarmRecordQuickDesc(); - table.render({ - elem: '#result1', - height: 'full-150', - data: showdata, - //editTrigger:'dblclick', - cols: [[ - //{ type: 'checkbox' }, - //{ field: 'Subsystem', title: '子系统', edit: 'text'}, + showLoading1(); + // var showdata = await GetAlarmRecordQuickDesc(); + var showdata = await GetAlarmRecordHistory(); + debugger; + table.render({ + elem: '#result1', + // height: 'full-150', + data: showdata, + //editTrigger:'dblclick', + cols: [[ + //{ type: 'checkbox' }, + //{ field: 'Subsystem', title: '子系统', edit: 'text'}, - { field: 'Description', title: '报警名称' }, - //{ field: 'TagName' , title:'变量编码' , edit:'text'}, - //{ field: 'Address', title: '起始地址', edit: 'text' }, - //{ field: 'DataType' , title:'数值类型' , edit:'text'}, - { field: 'Typename', title: '报警类型' }, - { field: 'Startdt', title: '开始时间' }, - { field: 'Enddt', title: '结束时间' }, - //{ field: 'RtValue' , title:'当前值' , edit:'text'}, - //{ field: 'hcount', title: '报警次数' }, - { field: 'Hztime', title: '报警总时长(秒)' }, - { title: '操作', width: 120, toolbar: '#currentTableBar', align: "center", fixed: 'right' }, + { field: 'Description', title: '报警名称' }, + //{ field: 'TagName' , title:'变量编码' , edit:'text'}, + //{ field: 'Address', title: '起始地址', edit: 'text' }, + //{ field: 'DataType' , title:'数值类型' , edit:'text'}, + { field: 'Typename', title: '报警类型' }, + { field: 'Startdt', title: '开始时间' }, + { field: 'Enddt', title: '结束时间' }, + //{ field: 'RtValue' , title:'当前值' , edit:'text'}, + //{ field: 'hcount', title: '报警次数' }, + { field: 'Hztime', title: '报警总时长(秒)' }, + { title: '操作', width: 120, toolbar: '#currentTableBar', align: "center", fixed: 'right' }, + + ]], + page: true, + limit: 5, + }); + completeLoading1(); + debugger; + ShowZhuChartLi(); + ShowBingChartLi(); - ]], - page: true, - limit: 16, - }); - completeLoading1(); } table.on('tool(currentTableFilter)', async function (obj) { @@ -752,7 +1050,7 @@ Hhour = 8; } else if (alarmTimeHorizon == "onlyTwelveHour") { Hhour = 12; - } else if (alarmTimeHorizon == "onlyOneDay") { + } else if (alarmTimeHorizon == "toDay") { Hhour = 24; } else { Hhour = 1; @@ -780,6 +1078,34 @@ } + //获取tagvalue + async function GetAlarmRecordHistory() { + debugger; + let datetimestart = $('#dateReStartTime1')[0].value; + let datetimeend = $('#dateReEndTime1')[0].value; + //getChecked + //var checkRow = $('#subsystemTagList').datalist("getChecked"); + let datapa = { "StartTime": Date.parse(new Date(datetimestart)), "EndTime": Date.parse(new Date(datetimeend)) }; + let result; + debugger; + + myajax = await $.ajax({ + url: "/PenMeiReportManage/PenMeiHistoryAlarmNew/GetAlarmHistory", + type: "Post", + //dataType: "json", + data: datapa, + success: function (redata) { } + }); + + debugger; + + $.when(myajax).done(function (redata) { + result = JSON.parse(redata); + }); + return result; + } + + showTable = async function(){ showLoading(); var showdata = await GetAlarmRecordValue(); @@ -800,13 +1126,14 @@ //{ field: 'RtValue' , title:'当前值' , edit:'text'}, { field: 'startdt', title: '开始时间'}, { field: 'enddt', title: '结束时间' }, - { field: 'Hztime', title: '持续时间' }, + { field: 'Hztime', title: '持续时间(秒)', edit:false }, ]], page:true, limit:16, }); completeLoading(); + } @@ -1214,6 +1541,316 @@ }); } + + + + ShowZhuChartLi = async function () { + + + + var alarmlist = new Array(); + debugger; + let datetimestart = $('#dateReStartTime1')[0].value; + let datetimeend = $('#dateReEndTime1')[0].value; + + //getChecked + //var checkRow = $('#subsystemTagList').datalist("getChecked"); + let datapa = { "StartTime": Date.parse(new Date(datetimestart)), "EndTime": Date.parse(new Date(datetimeend)) }; + let result; + debugger; + + myajax = await $.ajax({ + url: "/PenMeiReportManage/PenMeiHistoryAlarm/GetAlarmHistogram", + type: "Post", + //dataType: "json", + data: datapa, + success: function (redata) { + debugger; + var data = JSON.parse(redata); + var myChart = echarts.init(document.getElementById('resultzhu')); + myChart.dispose(); + myChart = echarts.init(document.getElementById('resultzhu')); + myChart.hideLoading(); + myChart.showLoading(); + + let date = []; //x轴日期 + let lenged = []; //series的个数 + let s = []; + data.map((item) => { + date.push(item['HDATE']); + lenged.push(item['Description']); + }); + debugger; + date = [...new Set(date)]; //去重 + lenged = [...new Set(lenged)]; + console.log(date, lenged); + let series = []; + lenged.map((item) => { + //生成 series + let obj = { + name: item, + type: 'bar', + // stack: 'As', + emphasis: { + focus: 'series' + }, + data: [] + }; + series.push(obj); + }); + + data.map((item) => { + //对series 的data进行处理 + + series.map((item1) => { + if (item1.name == item['Description'] && date.indexOf(item['HDATE']) > -1) { + item1.data[date.indexOf(item['HDATE'])] = item['hcount']; + } + }); + }); + var option = { + title: { + text: '报警频率统计', + // subtext: '纯属虚构', + left: 'center' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow' + } + }, + toolbox: { + show: true, + orient: 'vertical', + left: 'right', + top: 'center', + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + magicType: { show: true, type: ['line', 'bar', 'stack'] }, + restore: { show: true }, + saveAsImage: { show: true } + } + }, + legend: { + orient: 'vertical', + left: 'center', + bottom:'bottom', + }, + // legend: lenged, + grid: { + left: '3%', + right: '4%', + bottom: '5%', + containLabel: true + }, + xAxis: [ + { + type: 'category', + data: date + } + ], + yAxis: [ + { + type: 'value', + name:'报警次数', + position:'', + alignTicks:true, + axisLine: { + show:true, + }, + }, + ], + series: series + }; + myChart.hideLoading(); + option && myChart.setOption(option); + // myChart.setOption(JSON.parse(JSON.stringify(option))); + myChart.on('click', async params => { + debugger; + // 可以设置点击的类型与响应的系列 + if (params.seriesType === 'bar') { + + var tagname = params.seriesName; + + debugger; + let description = tagname; + let datetimestart = $('#dateReStartTime1')[0].value; + let datetimeend = $('#dateReEndTime1')[0].value; + var laydate = layui.laydate; + lay('#dateReStartTime').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: datetimestart, + }); + }); + lay('#dateReEndTime').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: datetimeend, + }); + }); + + let alarmSub = ""; + + element.tabChange('Chang', "22"); + + let datapa = { "AlarmName": description }; + myajax = await $.ajax({ + url: "/PenMeiReportManage/PenMeiHistoryAlarm/GetAlarmSubSystem", + type: "Post", + //dataType: "json", + data: datapa, + success: function (redata) { + alarmSub = JSON.parse(redata); + } + }); + + var comdatas = $('#subsystemselect').combobox('getData'); + for (var i = 0; i < comdatas.length; i++) { + var comdata = comdatas[i]; + + if (comdata.Value == alarmSub) { + $('#subsystemselect').combobox("select", comdata.Value); + updateSelect_Value(comdata.Value, description); + break; + } + } + // if (params.seriesIndex === 1) { + // debugger; + // } + } + + }); + } + }); + } + + ShowBingChartLi = async function () { + var alarmlist = new Array(); + debugger; + let datetimestart = $('#dateReStartTime1')[0].value; + let datetimeend = $('#dateReEndTime1')[0].value; + + + //getChecked + //var checkRow = $('#subsystemTagList').datalist("getChecked"); + let datapa = { "StartTime": Date.parse(new Date(datetimestart)), "EndTime": Date.parse(new Date(datetimeend)) }; + let result; + debugger; + + myajax = await $.ajax({ + url: "/PenMeiReportManage/PenMeiHistoryAlarm/GetAlarmPie", + type: "Post", + //dataType: "json", + data: datapa, + success: function (redata) { + debugger; + result = JSON.parse(redata); + + var myChart = echarts.init(document.getElementById('resultbing'), 'walden'); + myChart.dispose(); + myChart = echarts.init(document.getElementById('resultbing'), 'walden'); + myChart.hideLoading(); + myChart.showLoading(); + var data = []; + for (var i = 0; i < result.length; i++) { + + data.push({ value: result[i].Hpercent, name: result[i].Description + "\n" + result[i].Hpercent + "%" }); + } + debugger; + var option = { + legend: { + orient: 'vertical', + left: 'center', + bottom: 'bottom', + }, + title: { + text: '报警时长占比统计', + // subtext: '纯属虚构', + left: 'center' + }, + series: [ + { + type: 'pie', + data: data + } + ] + } + myChart.hideLoading(); + myChart.setOption(JSON.parse(JSON.stringify(option))); + myChart.on('click', async params => { + // 可以设置点击的类型与响应的系列 + if (params.seriesType === 'pie') { + + var tagname = result[params.dataIndex].Description; + + debugger; + let description = tagname; + let datetimestart = $('#dateReStartTime1')[0].value; + let datetimeend = $('#dateReEndTime1')[0].value; + var laydate = layui.laydate; + lay('#dateReStartTime').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: datetimestart, + }); + }); + lay('#dateReEndTime').each(function () { + laydate.render({ + elem: this, + trigger: 'click', + format: "yyyy-MM-dd HH:mm:ss", + //value: "2023-02-23 13:56:25", + value: datetimeend, + }); + }); + + let alarmSub = ""; + + element.tabChange('Chang', "22"); + + let datapa = { "AlarmName": description }; + myajax = await $.ajax({ + url: "/PenMeiReportManage/PenMeiHistoryAlarm/GetAlarmSubSystem", + type: "Post", + //dataType: "json", + data: datapa, + success: function (redata) { + alarmSub = JSON.parse(redata); + } + }); + + var comdatas = $('#subsystemselect').combobox('getData'); + for (var i = 0; i < comdatas.length; i++) { + var comdata = comdatas[i]; + + if (comdata.Value == alarmSub) { + $('#subsystemselect').combobox("select", comdata.Value); + updateSelect_Value(comdata.Value, description); + break; + } + } + // if (params.seriesIndex === 1) { + // debugger; + // } + } + + }); + } + }); + } + }); @@ -1225,105 +1862,16 @@ @**@
    @*
  • 散点图
  • *@ -
  • 重点报警统计
  • -
  • 报警时长占比
  • -
  • 报警汇总
  • + @*
  • 重点报警统计
  • +
  • 报警时长占比
  • *@ +
  • 报警汇总
  • 报警查询
- @*
-
-
- -
-
+ -
- -
-
- -
- -
-
-
-
-
- -
- -
-
-
- -
-
- -
- - - -
-
-
-
-
-
- -
- -
-
- -
- -
-
-
-
-
-
-
-
-
-
*@ - -
+ @*
@@ -1360,35 +1908,7 @@
- @*
-
- -
- - - -
-
-
*@ +
@@ -1506,97 +2026,22 @@
-
+
*@ -
+
- @*
-
-
-
-
-
-
-
- -
- -
-
-
*@ +
- @*
-
-
-
-
*@ +
- @*
-
- -
- - - -
-
-
*@ +
@@ -1621,19 +2066,18 @@
- @*
-
+
- + + -
-
-
*@ -
-
- -
- - -
@@ -1702,13 +2117,29 @@
-
+ @* 550px *@
-
@*style="width: 100%; height: 100% "*@ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNewNew/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNewNew/Index.cshtml new file mode 100644 index 0000000..3c7c0e8 --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryAlarmNewNew/Index.cshtml @@ -0,0 +1,2290 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + +
+
    +
  • 报警时长统计
  • +
  • 报警频率统计
  • +
+
+ + + + + + +
+
+
+ +
+ + +
+ +
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+ + + +
+
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+ +
+ + +
+ +
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+ + + +
+
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+ +
+
+
+ +
+ +
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiJMReport/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiJMReport/Index.cshtml new file mode 100644 index 0000000..8e55f42 --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiJMReport/Index.cshtml @@ -0,0 +1,327 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment env + + + + + + +
+
+
+ +
+
+
+ + diff --git a/HT.Cloud.Web/Areas/ReportManage/Controllers/MainPageControl.cs b/HT.Cloud.Web/Areas/ReportManage/Controllers/MainPageControl.cs index 3de989a..fe29832 100644 --- a/HT.Cloud.Web/Areas/ReportManage/Controllers/MainPageControl.cs +++ b/HT.Cloud.Web/Areas/ReportManage/Controllers/MainPageControl.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using HT.Cloud.Service.ChartsManage; using HT.Cloud.Service.ReportManage; using HT.Cloud.Code; +using HT.Cloud.Service.SystemSecurity; namespace HT.Cloud.Web.Areas.ReportManage.Controllers { diff --git a/HT.Cloud.Web/Areas/SystemSecurity/Controllers/DeviceIOController.cs b/HT.Cloud.Web/Areas/SystemSecurity/Controllers/DeviceIOController.cs new file mode 100644 index 0000000..921accb --- /dev/null +++ b/HT.Cloud.Web/Areas/SystemSecurity/Controllers/DeviceIOController.cs @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright © 2020 HT.Cloud.Framework 版权所有 + * Author: HT.Cloud + * Description: WaterCloud快速开发平台 + * Website: +*********************************************************************************/ + +using Microsoft.AspNetCore.Mvc; +using System.Linq; +using System.Threading.Tasks; +using HT.Cloud.Code; +using HT.Cloud.Service.SystemSecurity; + +namespace HT.Cloud.Web.Areas.SystemSecurity.Controllers +{ + [Area("SystemSecurity")] + public class DeviceIOController : BaseController + { + public ServerStateService _serverStateService { get; set; } + + [HttpGet] + public async Task GetServerDataJson() + { + return await Task.Run(() => + { + //windows环境 + var computer = ComputerHelper.GetComputerInfo(); + var arm = computer.RAMRate; + var cpu = computer.CPURate; + var iis = computer.RunTime; + var TotalRAM = computer.TotalRAM; + string ip = WebHelper.GetWanIp(); + string ipLocation = WebHelper.GetIpLocation(ip); + var IP = string.Format("{0} ({1})", ip, ipLocation); + return Content(new { ARM = arm, CPU = cpu, IIS = iis, TotalRAM = TotalRAM, IP = IP }.ToJson()); + }); + } + + [HttpGet] + public async Task GetServerData() + { + var data = (await _serverStateService.GetList(2)).OrderBy(a => a.F_Date).ToList(); + return Content(data.ToJson()); + } + } +} \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/SystemSecurity/Views/DeviceIO/Index.cshtml b/HT.Cloud.Web/Areas/SystemSecurity/Views/DeviceIO/Index.cshtml new file mode 100644 index 0000000..78b848e --- /dev/null +++ b/HT.Cloud.Web/Areas/SystemSecurity/Views/DeviceIO/Index.cshtml @@ -0,0 +1,297 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment env + + + + + +@*
+
+
+
+
+ +
+
+
+
+
*@\ + + webtopo-svg-edit Example + + + + + + + +
+ + diff --git a/HT.Cloud.Web/HT.Cloud.Web.csproj b/HT.Cloud.Web/HT.Cloud.Web.csproj index 4607add..734cd2b 100644 --- a/HT.Cloud.Web/HT.Cloud.Web.csproj +++ b/HT.Cloud.Web/HT.Cloud.Web.csproj @@ -94,6 +94,10 @@ true PreserveNewest + + true + PreserveNewest + diff --git a/HT.Cloud.Web/WaterCloud.Web.xml b/HT.Cloud.Web/WaterCloud.Web.xml index d81181f..749a2cf 100644 --- a/HT.Cloud.Web/WaterCloud.Web.xml +++ b/HT.Cloud.Web/WaterCloud.Web.xml @@ -177,6 +177,18 @@ 绑定数据仓库的数据库ID + + + 创 建:cdl + 日 期:2023-02-23 11:10 + 描 述:历史趋势控制器类 + + + + + 绑定数据仓库的数据库ID + + 绑定数据仓库的数据库ID @@ -214,6 +226,38 @@ 绑定数据仓库的数据库ID + + + 获得指定路径下所有文件名 + + 列表 + 文件夹路径 + + + + 定时任务 + + + + + 获取本地可执行的任务列表 + + + + + 改变任务状态,启动/停止 + + + + + 立即执行任务 + + + + + 清除任务计划 + + 创 建:超级管理员 @@ -270,38 +314,6 @@ 描 述:系统设置控制器类 - - - 获得指定路径下所有文件名 - - 列表 - 文件夹路径 - - - - 定时任务 - - - - - 获取本地可执行的任务列表 - - - - - 改变任务状态,启动/停止 - - - - - 立即执行任务 - - - - - 清除任务计划 - - 测试文件