diff --git a/HT.Cloud.Domain/Entity/ReportManage/RtReportEntity.cs b/HT.Cloud.Domain/Entity/ReportManage/RtReportEntity.cs new file mode 100644 index 0000000..851df53 --- /dev/null +++ b/HT.Cloud.Domain/Entity/ReportManage/RtReportEntity.cs @@ -0,0 +1,71 @@ +using System; +using System.ComponentModel.DataAnnotations; +using SqlSugar; + +namespace HT.Cloud.Domain.ReportManage +{ + /// + /// 创 建:cdl + /// 日 期:2023-03-30 14:52 + /// 描 述:实时报表SQL转换实体类 + /// + [SugarTable("HT_RT_REPORT")] + public class RtReportEntity + { + /// + /// + /// + [SugarColumn(ColumnName="HNO", ColumnDescription = "",ColumnDataType = "int(10)",IsPrimaryKey = true)] + public int HNO { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HTAB", ColumnDescription = "",ColumnDataType = "nvarchar(50)")] + public string HTAB { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HALI", ColumnDescription = "",ColumnDataType = "nvarchar(10)")] + public string HALI { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HSYS", ColumnDescription = "",ColumnDataType = "nvarchar(100)", IsNullable = true)] + public string HSYS { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HPRO", ColumnDescription = "",ColumnDataType = "nvarchar(100)", IsNullable = true)] + public string HPRO { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HREQ", ColumnDescription = "",ColumnDataType = "nvarchar(50)", IsNullable = true)] + public string HREQ { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HSIG", ColumnDescription = "",ColumnDataType = "nvarchar(10)")] + public string HSIG { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HVAR", ColumnDescription = "",ColumnDataType = "nvarchar(80)")] + public string HVAR { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HFVAR", ColumnDescription = "",ColumnDataType = "nvarchar(80)", IsNullable = true)] + public string HFVAR { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HCON", ColumnDescription = "",ColumnDataType = "nvarchar(500)")] + public string HCON { get; set; } + /// + /// + /// + [SugarColumn(ColumnName="HFLAG", ColumnDescription = "",ColumnDataType = "int(10)")] + public int HFLAG { get; set; } + } +} diff --git a/HT.Cloud.Service/ReportManage/RtReportService.cs b/HT.Cloud.Service/ReportManage/RtReportService.cs new file mode 100644 index 0000000..346c8c3 --- /dev/null +++ b/HT.Cloud.Service/ReportManage/RtReportService.cs @@ -0,0 +1,103 @@ +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; + +namespace HT.Cloud.Service.ReportManage +{ + public class RtReportService : BaseService, IDenpendency + { + public RtReportService(ISqlSugarClient context) : base(context) + { + } + + public async Task GetRtSubsysTagValue() + { + var srcList = repository.IQueryable().ToList(); + + + var remoteRtDataServer = _context.Queryable().First().remotertdataserver; + + var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer); + + + JObject valueJson = JObject.Parse(responseStr); + + var srcTagRtValues = new List(); + + foreach(var src in srcList) + { + string SubsysName = src.HSYS.ToString(); + string Description = src.HPRO.ToString(); + string TagName = src.HVAR.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 = "手动"; + } + + srcTagRtValues.Add(new SrcTagRtValue() {TagName = TagName, Description = Description, Value = Value }); + } + var dt = new Dictionary(); + foreach (var src in srcTagRtValues) + { + dt.Add(src.TagName, src.Value); + } + dt.Add("RtTime",DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); + return dt.ToJson(); + + + } + 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/ReportManage/Controllers/RtReportController.cs b/HT.Cloud.Web/Areas/ReportManage/Controllers/RtReportController.cs new file mode 100644 index 0000000..89aec98 --- /dev/null +++ b/HT.Cloud.Web/Areas/ReportManage/Controllers/RtReportController.cs @@ -0,0 +1,23 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using HT.Cloud.Service.ChartsManage; +using HT.Cloud.Service.ReportManage; + +namespace HT.Cloud.Web.Areas.ReportManage.Controllers +{ + [Area("ReportManage")] + public class RtReportController : BaseController + { + public RtReportService _rtReportService { get; set; } + + [HttpGet] + public async Task GetRtData() + { + var data = await _rtReportService.GetRtSubsysTagValue(); + return Content(data); + } + + + } +} diff --git a/HT.Cloud.Web/Areas/ReportManage/Views/HistoryReport/Index.cshtml b/HT.Cloud.Web/Areas/ReportManage/Views/HistoryReport/Index.cshtml index c4606d6..97e4e1a 100644 --- a/HT.Cloud.Web/Areas/ReportManage/Views/HistoryReport/Index.cshtml +++ b/HT.Cloud.Web/Areas/ReportManage/Views/HistoryReport/Index.cshtml @@ -15,7 +15,14 @@ 表单设计器代码 @@ -36,7 +43,7 @@ -
+
@@ -48,13 +55,42 @@ -
+
-
+
+
+ +
+ + + +
+
+
+
-
+
@@ -94,7 +130,7 @@
-
+
@@ -118,13 +154,13 @@
@**@
- + @**@ - - @@ -151,8 +187,229 @@ iconPicker = layui.iconPicker, cron = layui.cron, labelGeneration = layui.labelGeneration; - debugger; - + form.on('select(quickTime)', 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 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 == "thisWeek"){ + + + var weekStartDate = weekStartTimestamp(); + var timef1 = getFormatDate(new Date(weekStartDate*1000)); + 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: timef1, + }); + }); + var timef2 = getFormatDate(new Date(Date.now())); + 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: timef2, + }); + }); + + }else if(selectValue == "lastWeek"){ + var lastWeekDate = lastWeekTimetamp(); + var timef1 = getFormatDate(new Date(lastWeekDate[0] * 1000)); + 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: timef1, + }); + }); + var timef2 = getFormatDate(new Date(lastWeekDate[1] * 1000)); + 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: timef2, + }); + }); + }else if(selectValue == "thisMonth"){ + var monthStartDate = monthStartTimestamp(); + var timef = getFormatDate(new Date(monthStartDate * 1000)); + 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: timef, + }); + }); + var timef2 = getFormatDate(new Date(Date.now())); + 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: timef2, + }); + }); + + }else if(selectValue == "lastMonth"){ + //lastMonthTimetamp() + var lastMonthDate = lastMonthTimetamp(); + var timef1 = getFormatDate(new Date(lastMonthDate[0] * 1000)); + 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: timef1, + }); + }); + var timef2 = getFormatDate(new Date(lastMonthDate[1] * 1000)); + 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: timef2, + }); + }); + }else {} + }); }); wcLoading.close(); //debugger; @@ -161,6 +418,22 @@ var endtime = new Date(); endtime.setDate(endtime.getDate()) var endtimeString = endtime.getFullYear() + "-" + parseInt(endtime.getMonth() + 1) + "-" + endtime.getDate() + " " + (endtime.getHours()) + ":" + endtime.getMinutes() + ":" + endtime.getSeconds(); + function getFormatDateone(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; + } layui.use('laydate', function () { var laydate = layui.laydate; lay('#dateReStartTime').each(function () { @@ -169,7 +442,7 @@ trigger: 'click', format: "yyyy-MM-dd HH:mm:ss", //value: "2023-02-23 13:56:25", - value:starttimeString, + value: getFormatDateone(starttime), }); }); lay('#dateReEndTime').each(function () { @@ -178,11 +451,14 @@ trigger: 'click', format: "yyyy-MM-dd HH:mm:ss", //value: "2023-02-23 13:56:25", - value: endtimeString, + value: getFormatDateone(endtime), }); }); }); - + //layui.form.on('select(quickTime)',function(data1){ + // var selectQuick = data1.value; + // debugger; + //}); var starttime = new Date(new Date().setHours(0, 0, 0, 0)); var starttimeString = starttime.getFullYear() + "-" + parseInt(starttime.getMonth() + 1) + "-" + starttime.getDate() + " " + (starttime.getHours()) + ":" + starttime.getMinutes() + ":" + starttime.getSeconds(); var endtime = new Date(); @@ -190,6 +466,8 @@ var endtimeString = endtime.getFullYear() + "-" + parseInt(endtime.getMonth() + 1) + "-" + endtime.getDate() + " " + (endtime.getHours()) + ":" + endtime.getMinutes() + ":" + endtime.getSeconds(); debugger; + // + function getFormatDate(date) { let year = date.getFullYear(); @@ -368,7 +646,7 @@ // csv 数据转换为 table csv2table(csv, showTab = false) { - var html = "";// class=\"layui-table\" lay-data=\"{报表数据}\" + var html = "
";// class=\"layui-table\" lay-data=\"{报表数据}\" var rows = csv.split("\n"); debugger; rows.pop(); // 最后一行没用的 @@ -415,7 +693,7 @@ if(did == 0){ html += "";// }else{ - html += "";// + html += "";// } }); @@ -509,13 +787,28 @@ //转换静态表格 table.init('tdemo', { page:true, - limit:17, + limit:15, //height: 315 //设置高度 //limit: 10 //注意:请务必确保 limit 参数(默认:10)是与你服务端限定的数据条数一致 //支持所有基础参数 done:function(res,curr,count){ // console.log(res) + //var donestyle = "" + //var oDiv = document.querySelector("#tdemo"); + //oDiv.style.cssText = donestyle; + //layui-table-cell laytable-cell-group + //layui-table-cell laytable-cell-1-1-0 + //$(".layui-table-cell"). [800].style + //解决表头宽度不够自动换行问题 + $(".layui-table-cell").each(function(index,val){ + $(".layui-table-cell")[index].style.lineHeight = "20px !importanr"; + $(".layui-table-cell")[index].style.verticalAlign = "middle"; + $(".layui-table-cell")[index].style.height = "auto"; + $(".layui-table-cell")[index].style.overflow = "visible"; + $(".layui-table-cell")[index].style.textOverflow = "inherit"; + $(".layui-table-cell")[index].style.whiteSpace = "normal"; + }); //解决操作栏因为内容过多换行问题 $(".layui-table-main tr").each(function (index, val) { $($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height()); @@ -542,6 +835,8 @@ $($(this).find(".layui-table-body tbody th")[index]).height($(val).height()); }); }); + + $('.layui-laypage-limits').hide(); } }); } @@ -580,9 +875,114 @@ } + /** + * 本周开始时间戳 + * 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 + } - diff --git a/HT.Cloud.Web/HT.Cloud.Web.csproj b/HT.Cloud.Web/HT.Cloud.Web.csproj index 1b24a1a..56c8a7d 100644 --- a/HT.Cloud.Web/HT.Cloud.Web.csproj +++ b/HT.Cloud.Web/HT.Cloud.Web.csproj @@ -71,6 +71,9 @@ Always + + PreserveNewest + PreserveNewest diff --git a/HT.Cloud.Web/Views/Home/Default.cshtml b/HT.Cloud.Web/Views/Home/Default.cshtml index e618da2..7b6d1ed 100644 --- a/HT.Cloud.Web/Views/Home/Default.cshtml +++ b/HT.Cloud.Web/Views/Home/Default.cshtml @@ -10,6 +10,7 @@ +
" + dhead + "" + dhead + "" + dhead + "