From b684f2501e15101c6b14fe9d88ec01eb8d8d906e Mon Sep 17 00:00:00 2001 From: dell Date: Thu, 31 Oct 2024 23:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReportManage/Ht_Sys_TimeZoneEntity.cs | 43 + .../ReportManage/HistoryEleTimeZoneService.cs | 391 ++++ .../ReportManage/HistoryReportOutPut.cs | 376 ++++ .../ReportManage/MainPageService.cs | 21 +- .../Views/PenMeiHistoryCharts/Index.cshtml | 2 +- .../PenMeiHistoryEleTimeZoneController.cs | 185 ++ .../PenMeiHistoryOutPutController.cs | 157 ++ .../PenMeiHistoryEleTimeZone/Index.cshtml | 965 +++++++++ .../Index_blue.cshtml | 1580 +++++++++++++++ .../PenMeiHistoryOutPut - 复制/Index.cshtml | 1494 ++++++++++++++ .../Index_blue.cshtml | 1580 +++++++++++++++ .../Views/PenMeiHistoryOutPut/Index.cshtml | 1717 +++++++++++++++++ .../PenMeiHistoryOutPut/Index_blue.cshtml | 1580 +++++++++++++++ HT.Cloud.Web/Views/Home/Default.cshtml | 27 + HT.Cloud.Web/WaterCloud.Web.xml | 10 + HT.Cloud.Web/wwwroot/images/不可见.png | Bin 0 -> 9472 bytes HT.Cloud.Web/wwwroot/images/查看.png | Bin 0 -> 8474 bytes 17 files changed, 10123 insertions(+), 5 deletions(-) create mode 100644 HT.Cloud.Domain/Entity/ReportManage/Ht_Sys_TimeZoneEntity.cs create mode 100644 HT.Cloud.Service/ReportManage/HistoryEleTimeZoneService.cs create mode 100644 HT.Cloud.Service/ReportManage/HistoryReportOutPut.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryEleTimeZoneController.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryOutPutController.cs create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index_blue.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index_blue.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index.cshtml create mode 100644 HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index_blue.cshtml create mode 100644 HT.Cloud.Web/wwwroot/images/不可见.png create mode 100644 HT.Cloud.Web/wwwroot/images/查看.png diff --git a/HT.Cloud.Domain/Entity/ReportManage/Ht_Sys_TimeZoneEntity.cs b/HT.Cloud.Domain/Entity/ReportManage/Ht_Sys_TimeZoneEntity.cs new file mode 100644 index 0000000..112e971 --- /dev/null +++ b/HT.Cloud.Domain/Entity/ReportManage/Ht_Sys_TimeZoneEntity.cs @@ -0,0 +1,43 @@ +using System; +using System.ComponentModel.DataAnnotations; +using SqlSugar; + +namespace HT.Cloud.Domain.ReportManage +{ + /// + /// 创 建:cdl + /// 日 期:2023-04-26 14:43 + /// 描 述:历史信息表实体类 + /// + [SugarTable("HT_SYS_TIMEZONET")] + [TenantAttribute("1")] + public class Ht_Sys_TimeZoneEntity + { + /// + /// + /// + [SugarColumn(ColumnName="Id", ColumnDescription = "",ColumnDataType = "int",IsPrimaryKey = true)] + public int Id { get; set; } + /// + /// + /// + [SugarColumn(ColumnName= "TimeZoneType", ColumnDescription = "",ColumnDataType = "nvarchar(128)")] + public string TimeZoneType { get; set; } + /// + /// + /// + [SugarColumn(ColumnName= "TimeZoneStart", ColumnDescription = "",ColumnDataType = "nvarchar(16)")] + public string TimeZoneStart { get; set; } + /// + /// + /// + [SugarColumn(ColumnName= "TimeZoneEnd", ColumnDescription = "",ColumnDataType = "nvarchar(16)")] + public string TimeZoneEnd { get; set; } + /// + /// + /// + [SugarColumn(ColumnName= "Description", ColumnDescription = "",ColumnDataType = "nvarchar(128)")] + public string Description { get; set; } + + } +} diff --git a/HT.Cloud.Service/ReportManage/HistoryEleTimeZoneService.cs b/HT.Cloud.Service/ReportManage/HistoryEleTimeZoneService.cs new file mode 100644 index 0000000..cf0e3ba --- /dev/null +++ b/HT.Cloud.Service/ReportManage/HistoryEleTimeZoneService.cs @@ -0,0 +1,391 @@ +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 System.Reflection.PortableExecutable; +using Newtonsoft.Json; +using HT.Cloud.Code; +using HT.Cloud.Domain.DevicesManage; +using System.Text.RegularExpressions; +using Org.BouncyCastle.Asn1.X509; +using System.Security.Cryptography; +using System.Threading; +using System.Data; +using iTextSharp.text; +using Serenity.Data; +using Quartz; +using static iTextSharp.text.pdf.XfaForm; +using HT.Cloud.Domain.Entity.ReportManage; + +namespace HT.Cloud.Service.ReportManage +{ + public class HistoryEleTimeZoneService : BaseService, IDenpendency + { + /// + /// 绑定数据仓库的数据库ID + /// + private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber; + + public HistoryEleTimeZoneService(ISqlSugarClient context) : base(context) + { + } + + public async Task GetDriverGroupList() + { + var list_group = _context.AsTenant().QueryableWithAttr().ToList(); + return list_group.ToJson(); + } + + public async Task GetReportFileName(string startdt, string enddt, int timeinterval) + { + //SqlParameter[] sqlParameters = + //{ + // new SqlParameter("@startdt",startdt), + // new SqlParameter("@enddt",enddt), + // new SqlParameter("@timeinterval",timeinterval) + //}; + + + ////* + + //string conn = db.Database.GetConnectionString(); //"Data Source=192.168.110.32;Initial Catalog=SCADA;User Id= sa;Password= Sa1qaz;Integrated Security=False;Encrypt=True;TrustServerCertificate=True;"; + //SqlConnection sqlConnection = new SqlConnection(conn); + //var ds = sqlConnection.SqlQueryex("Query_Report_YL", sqlParameters); + + //* + //var ds = db.SqlQuery("Query_Report_Period", sqlParameters);/// + + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + + + + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL", sqlParameters); + Report.TableName = "Report"; + + + var value = new Dictionary() + { + ["title"] = "Report", + ["Report"] = Report, + }; + //var pathroot = ""; + //var Isdebug = Configuration["Isdebug"]; + //if (Isdebug.Equals("yes")) + //{ + // pathroot = Directory.GetCurrentDirectory(); + //} + //else + //{ + // pathroot = AppContext.BaseDirectory; + //} + var pathroot = Directory.GetCurrentDirectory(); + var templatePath = pathroot + "\\wwwroot\\report\\" + "报表预设模板" + ".xlsx"; + string fileurl = "Report" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; + //var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + MiniExcel.SaveAsByTemplate(path: path, templatePath: templatePath, value: value); + + ////await Task.Delay(1); + //Result result = new Result(); + //result.data = fileurl; + return fileurl; + } + /// + /// sql获取count + /// + /// + /// + /// + /// + public async Task GetReportNewInitPara(string startdt, string enddt, int timeinterval) + { + + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + var dt_Counts = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL_COUNT", sqlParameters); + int counts = dt_Counts.Rows[0][0].ToInt(); + return counts; + } + /// + /// 代码计算count + /// + /// + /// + /// + /// + public async Task GetReportNewInitParaInCode(long startdt, long enddt, int timeinterval) + { + + var startS = startdt / 1000; + var endS = enddt / 1000; + var counts = ((endS - startS) / timeinterval) + 1; + return counts; + } + public async Task GetReportNewAsync(string page, string limit, string Startdt, string Enddt, string Timeinterval, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + //SugarParameter[] sqlParameters ={ + // new SugarParameter("@startdt",Startdt), + // new SugarParameter("@enddt",Enddt), + // new SugarParameter("@timeinterval",Timeinterval) + //}; + //var dt_Counts = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL_COUNT", sqlParameters); + //int counts = dt_Counts.Rows[0][0].ToInt(); + string msg = ""; + int code = 0; + SugarParameter[] sqlReportParameters ={ + new SugarParameter("@startdt",Startdt), + new SugarParameter("@enddt",Enddt), + new SugarParameter("@groupname",groupName), + new SugarParameter("@timeinterval",Timeinterval), + new SugarParameter("@hpage",page.ToInt()), + new SugarParameter("@hlimit",limit.ToInt()) + }; + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_PAGE", sqlReportParameters); + + var jsonResult = JsonConvert.SerializeObject(Report); + + + var result = new + { + code = code, + msg = msg, + //count = counts, + data = jsonResult + }; + string serJson = JsonConvert.SerializeObject(result); + + + return serJson; + + } + public async Task GetReportNew(string startdt, string enddt, int timeinterval) + { + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL", sqlParameters); + Report.TableName = "Report"; + + //return JsonConvert.SerializeObject(Report); + return Report; + + } + public async Task GetReportFirstHead(string systemName) + { + 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}_REPORT"); + //var list = _context.AsTenant().QueryableWithAttr().ToList(); + List list_name_two = list.Select(t => t.HSYS).GroupBy(c => c).Select(c => c.First()).ToList(); + return list_name_two.ToJson(); + } + + public async Task GetReportSecondHead(string systemName) + { + 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}_REPORT"); + List list_name_two = list.Select(t => t.HSYS).GroupBy(c => c).Select(c => c.First()).ToList(); + var relist = new List(); + foreach(var t in list_name_two) + { + var secondHead = new SecondHead(); + secondHead.HSYS = t; + var listHead = list.Where(x=> x.HSYS == t).ToList(); + var listHeadString = new List(); + var listTitleString = new List(); + foreach(var h in listHead) + { + listHeadString.Add(h.HPRO.ToString()); + listTitleString.Add(h.HVAR.ToString()); + } + secondHead.Head = listHeadString; + secondHead.Title = listTitleString; + relist.Add(secondHead); + } + return relist.ToJson(); + //return Report.ToJson(); + } + + public async Task GetReportDownLoad(DateTime startTime, DateTime endTime ,int interval, string systemName) + { + 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}_REPORTPATH"); + var f3dpath = list.First().ReportPath; + + var listSub = TimeInOneDay(startTime, endTime); + + var pathroot = Directory.GetCurrentDirectory(); + string fileurl = "报表 " + startTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "至" + endTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "(" + "时间间隔" + interval.ToString() + "秒" + ")" + "_" + DateTime.Now.ToString("yyyy年MM月dd日 HH.mm.ss") + "导出" + ".xlsx"; + //var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + var path3d = @f3dpath + fileurl; + var sheets = new Dictionary(); + var sheets3D = new Dictionary(); + try + { + for (int i = 0; i < listSub.Count; i++) + { + var item = listSub[i]; + var fstartTime = item.starttime; + var fendTime = item.endtime; + + SugarParameter[] sqlParameters ={ + new SugarParameter("@enddt", fendTime.ToString("yyyy-MM-dd HH:mm:ss")), + new SugarParameter("@groupname", groupName), + new SugarParameter("@startdt", fstartTime.ToString("yyyy-MM-dd HH:mm:ss")), + new SugarParameter("@timeinterval",interval) + }; + var reader = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataReader("Query_Report_YL_CHN", sqlParameters); + + //string conn = _context.CurrentConnectionConfig.ConnectionString; //"Data Source=192.168.110.32;Initial Catalog=SCADA;User Id= sa;Password= Sa1qaz;Integrated Security=False;Encrypt=True;TrustServerCertificate=True;"; + // SqlConnection sqlConnection = new SqlConnection(conn); + // SqlCommand command = new SqlCommand("dbo.Query_Report_YL_CHN", sqlConnection); + // command.CommandType = CommandType.StoredProcedure; + + //command.Parameters.Add(new SqlParameter("@enddt", fendTime.ToString("yyyy-MM-dd HH:mm:ss"))); + //command.Parameters.Add(new SqlParameter("@groupname", groupName)); + //command.Parameters.Add(new SqlParameter("@startdt", fstartTime.ToString("yyyy-MM-dd HH:mm:ss"))); + //command.Parameters.Add(new SqlParameter("@timeinterval", interval)); + + // command.CommandTimeout = 999999; + // sqlConnection.Open(); + // var reader = command.ExecuteReader(); + + + + //var pathroot = Directory.GetCurrentDirectory(); + //string fileurl = "报表_" + startTime.ToString("yyyy_MM_dd_HH_mm_ss")+"至"+ endTime.ToString("yyyy_MM_dd_HH_mm_ss")+"("+"时间间隔"+interval.ToString()+"秒"+")"+"_"+DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")+"导出" + ".xlsx"; + ////var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + //var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + + var sheetName = fstartTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "至" + fendTime.ToString("HH.mm.ss"); + + //MiniExcel.SaveAs(path, reader, true, sheetName, ExcelType.XLSX, null, false); + + sheets.Add(sheetName, reader); + sheets3D.Add(sheetName, reader); + //sqlConnection.Close(); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + try + { + //var sheets3d = new Dictionary(sheets.ToDictionary(pair => pair.Key, pair => pair.Value)); + + + //await Task.Delay(1000); + MiniExcel.SaveAs(path, sheets); + + File.Copy(path, path3d, true); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + //await Task.WhenAll(taskCloud, task3D); + //bool a = true; + ////MiniExcel.SaveAs(path, reader); + //while (a) + //{ + // Thread.Sleep(1000); + //} + return fileurl.ToJson(); + } + /// + /// 处理分段,截头去尾还需添加 + /// + /// + /// + /// + public List TimeInOneDay(DateTime startTime, DateTime endTime) + { + var hour = startTime.Hour; + var minute = startTime.Minute; + var second = startTime.Second; + var oneendtime = new DateTime(startTime.Year,startTime.Month,startTime.Day,23,59,59); + var twostarttime = startTime.AddHours(0 - hour).AddMinutes(0 - minute).AddSeconds(0 - second).AddDays(1); + var twoendtime = new DateTime( twostarttime.Year, twostarttime.Month,twostarttime.Day,23,59,59); + + List ListTime = new List(); + + int day = (endTime - startTime).Days; + + for (int i = 0; i <= day; i++) + { + TimeMDL temptime = new TimeMDL(); + if (i == 0) + { + + temptime.starttime = startTime; + temptime.endtime = oneendtime; + ListTime.Add(temptime); + } + else + { + temptime.starttime = twostarttime; + temptime.endtime = twoendtime; + twostarttime = twostarttime.AddDays(1); + twoendtime = twoendtime.AddDays(1); + ListTime.Add(temptime); + } + } + + //list在处理 第一行和最后一行 + //ListTime[0].starttime = startTime; + ListTime[ListTime.Count-1].endtime = endTime; + + return ListTime; + } + public class TimeMDL + { + public DateTime starttime { get; set; } + public DateTime endtime { get; set; } + } + public class SecondHead + { + public string HSYS { get; set;} + public List Head { get; set;} + public List Title { get; set; } + } + + + + public async Task GetTimeZoneData(long startTime, long endTime, string systemName) + { + 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_WINTER_TIMEZONE"); + + return "".ToString(); + + + } + + } +} diff --git a/HT.Cloud.Service/ReportManage/HistoryReportOutPut.cs b/HT.Cloud.Service/ReportManage/HistoryReportOutPut.cs new file mode 100644 index 0000000..1dafc34 --- /dev/null +++ b/HT.Cloud.Service/ReportManage/HistoryReportOutPut.cs @@ -0,0 +1,376 @@ +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 System.Reflection.PortableExecutable; +using Newtonsoft.Json; +using HT.Cloud.Code; +using HT.Cloud.Domain.DevicesManage; +using System.Text.RegularExpressions; +using Org.BouncyCastle.Asn1.X509; +using System.Security.Cryptography; +using System.Threading; +using System.Data; +using iTextSharp.text; +using Serenity.Data; +using Quartz; +using static iTextSharp.text.pdf.XfaForm; +using HT.Cloud.Domain.Entity.ReportManage; + +namespace HT.Cloud.Service.ReportManage +{ + public class HistoryOutPutService : BaseService, IDenpendency + { + /// + /// 绑定数据仓库的数据库ID + /// + private string dataDBNumber = GlobalContext.SystemConfig.DataDBNumber; + + public HistoryOutPutService(ISqlSugarClient context) : base(context) + { + } + + public async Task GetDriverGroupList() + { + var list_group = _context.AsTenant().QueryableWithAttr().ToList(); + return list_group.ToJson(); + } + + public async Task GetReportFileName(string startdt, string enddt, int timeinterval) + { + //SqlParameter[] sqlParameters = + //{ + // new SqlParameter("@startdt",startdt), + // new SqlParameter("@enddt",enddt), + // new SqlParameter("@timeinterval",timeinterval) + //}; + + + ////* + + //string conn = db.Database.GetConnectionString(); //"Data Source=192.168.110.32;Initial Catalog=SCADA;User Id= sa;Password= Sa1qaz;Integrated Security=False;Encrypt=True;TrustServerCertificate=True;"; + //SqlConnection sqlConnection = new SqlConnection(conn); + //var ds = sqlConnection.SqlQueryex("Query_Report_YL", sqlParameters); + + //* + //var ds = db.SqlQuery("Query_Report_Period", sqlParameters);/// + + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + + + + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL", sqlParameters); + Report.TableName = "Report"; + + + var value = new Dictionary() + { + ["title"] = "Report", + ["Report"] = Report, + }; + //var pathroot = ""; + //var Isdebug = Configuration["Isdebug"]; + //if (Isdebug.Equals("yes")) + //{ + // pathroot = Directory.GetCurrentDirectory(); + //} + //else + //{ + // pathroot = AppContext.BaseDirectory; + //} + var pathroot = Directory.GetCurrentDirectory(); + var templatePath = pathroot + "\\wwwroot\\report\\" + "报表预设模板" + ".xlsx"; + string fileurl = "Report" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; + //var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + MiniExcel.SaveAsByTemplate(path: path, templatePath: templatePath, value: value); + + ////await Task.Delay(1); + //Result result = new Result(); + //result.data = fileurl; + return fileurl; + } + /// + /// sql获取count + /// + /// + /// + /// + /// + public async Task GetReportNewInitPara(string startdt, string enddt, int timeinterval) + { + + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + var dt_Counts = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL_COUNT", sqlParameters); + int counts = dt_Counts.Rows[0][0].ToInt(); + return counts; + } + /// + /// 代码计算count + /// + /// + /// + /// + /// + public async Task GetReportNewInitParaInCode(long startdt, long enddt, int timeinterval) + { + + var startS = startdt / 1000; + var endS = enddt / 1000; + var counts = ((endS - startS) / timeinterval) + 1; + return counts; + } + public async Task GetReportNewAsync(string page, string limit, string Startdt, string Enddt, string Timeinterval, string systemName) + { + var groupName = _context.AsTenant().QueryableWithAttr().Where(x => x.GroupDescription == systemName).First().GroupName; + //SugarParameter[] sqlParameters ={ + // new SugarParameter("@startdt",Startdt), + // new SugarParameter("@enddt",Enddt), + // new SugarParameter("@timeinterval",Timeinterval) + //}; + //var dt_Counts = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL_COUNT", sqlParameters); + //int counts = dt_Counts.Rows[0][0].ToInt(); + string msg = ""; + int code = 0; + SugarParameter[] sqlReportParameters ={ + new SugarParameter("@startdt",Startdt), + new SugarParameter("@enddt",Enddt), + new SugarParameter("@groupname",groupName), + new SugarParameter("@timeinterval",Timeinterval), + new SugarParameter("@hpage",page.ToInt()), + new SugarParameter("@hlimit",limit.ToInt()) + }; + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_PAGE", sqlReportParameters); + + var jsonResult = JsonConvert.SerializeObject(Report); + + + var result = new + { + code = code, + msg = msg, + //count = counts, + data = jsonResult + }; + string serJson = JsonConvert.SerializeObject(result); + + + return serJson; + + } + public async Task GetReportNew(string startdt, string enddt, int timeinterval) + { + SugarParameter[] sqlParameters ={ + new SugarParameter("@startdt",startdt), + new SugarParameter("@enddt",enddt), + new SugarParameter("@timeinterval",timeinterval) + }; + var Report = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataTable("Query_Report_YL", sqlParameters); + Report.TableName = "Report"; + + //return JsonConvert.SerializeObject(Report); + return Report; + + } + public async Task GetReportFirstHead(string systemName) + { + 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}_REPORT"); + //var list = _context.AsTenant().QueryableWithAttr().ToList(); + List list_name_two = list.Select(t => t.HSYS).GroupBy(c => c).Select(c => c.First()).ToList(); + return list_name_two.ToJson(); + } + + public async Task GetReportSecondHead(string systemName) + { + 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}_REPORT"); + List list_name_two = list.Select(t => t.HSYS).GroupBy(c => c).Select(c => c.First()).ToList(); + var relist = new List(); + foreach(var t in list_name_two) + { + var secondHead = new SecondHead(); + secondHead.HSYS = t; + var listHead = list.Where(x=> x.HSYS == t).ToList(); + var listHeadString = new List(); + var listTitleString = new List(); + foreach(var h in listHead) + { + listHeadString.Add(h.HPRO.ToString()); + listTitleString.Add(h.HVAR.ToString()); + } + secondHead.Head = listHeadString; + secondHead.Title = listTitleString; + relist.Add(secondHead); + } + return relist.ToJson(); + //return Report.ToJson(); + } + + public async Task GetReportDownLoad(DateTime startTime, DateTime endTime ,int interval, string systemName) + { + 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}_REPORTPATH"); + var f3dpath = list.First().ReportPath; + + var listSub = TimeInOneDay(startTime, endTime); + + var pathroot = Directory.GetCurrentDirectory(); + string fileurl = "报表 " + startTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "至" + endTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "(" + "时间间隔" + interval.ToString() + "秒" + ")" + "_" + DateTime.Now.ToString("yyyy年MM月dd日 HH.mm.ss") + "导出" + ".xlsx"; + //var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + var path3d = @f3dpath + fileurl; + var sheets = new Dictionary(); + var sheets3D = new Dictionary(); + try + { + for (int i = 0; i < listSub.Count; i++) + { + var item = listSub[i]; + var fstartTime = item.starttime; + var fendTime = item.endtime; + + SugarParameter[] sqlParameters ={ + new SugarParameter("@enddt", fendTime.ToString("yyyy-MM-dd HH:mm:ss")), + new SugarParameter("@groupname", groupName), + new SugarParameter("@startdt", fstartTime.ToString("yyyy-MM-dd HH:mm:ss")), + new SugarParameter("@timeinterval",interval) + }; + var reader = _context.AsTenant().GetConnection(dataDBNumber).Ado.UseStoredProcedure().GetDataReader("Query_Report_YL_CHN", sqlParameters); + + //string conn = _context.CurrentConnectionConfig.ConnectionString; //"Data Source=192.168.110.32;Initial Catalog=SCADA;User Id= sa;Password= Sa1qaz;Integrated Security=False;Encrypt=True;TrustServerCertificate=True;"; + // SqlConnection sqlConnection = new SqlConnection(conn); + // SqlCommand command = new SqlCommand("dbo.Query_Report_YL_CHN", sqlConnection); + // command.CommandType = CommandType.StoredProcedure; + + //command.Parameters.Add(new SqlParameter("@enddt", fendTime.ToString("yyyy-MM-dd HH:mm:ss"))); + //command.Parameters.Add(new SqlParameter("@groupname", groupName)); + //command.Parameters.Add(new SqlParameter("@startdt", fstartTime.ToString("yyyy-MM-dd HH:mm:ss"))); + //command.Parameters.Add(new SqlParameter("@timeinterval", interval)); + + // command.CommandTimeout = 999999; + // sqlConnection.Open(); + // var reader = command.ExecuteReader(); + + + + //var pathroot = Directory.GetCurrentDirectory(); + //string fileurl = "报表_" + startTime.ToString("yyyy_MM_dd_HH_mm_ss")+"至"+ endTime.ToString("yyyy_MM_dd_HH_mm_ss")+"("+"时间间隔"+interval.ToString()+"秒"+")"+"_"+DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")+"导出" + ".xlsx"; + ////var fileurl = $"电子报表2023_01_03_11_19_53.xlsx"; + //var path = pathroot + "\\wwwroot\\report\\" + fileurl;//{StartTime}-{EndTime} + + var sheetName = fstartTime.ToString("yyyy年MM月dd日 HH.mm.ss") + "至" + fendTime.ToString("HH.mm.ss"); + + //MiniExcel.SaveAs(path, reader, true, sheetName, ExcelType.XLSX, null, false); + + sheets.Add(sheetName, reader); + sheets3D.Add(sheetName, reader); + //sqlConnection.Close(); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + try + { + //var sheets3d = new Dictionary(sheets.ToDictionary(pair => pair.Key, pair => pair.Value)); + + + //await Task.Delay(1000); + MiniExcel.SaveAs(path, sheets); + + File.Copy(path, path3d, true); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + //await Task.WhenAll(taskCloud, task3D); + //bool a = true; + ////MiniExcel.SaveAs(path, reader); + //while (a) + //{ + // Thread.Sleep(1000); + //} + return fileurl.ToJson(); + } + /// + /// 处理分段,截头去尾还需添加 + /// + /// + /// + /// + public List TimeInOneDay(DateTime startTime, DateTime endTime) + { + var hour = startTime.Hour; + var minute = startTime.Minute; + var second = startTime.Second; + var oneendtime = new DateTime(startTime.Year,startTime.Month,startTime.Day,23,59,59); + var twostarttime = startTime.AddHours(0 - hour).AddMinutes(0 - minute).AddSeconds(0 - second).AddDays(1); + var twoendtime = new DateTime( twostarttime.Year, twostarttime.Month,twostarttime.Day,23,59,59); + + List ListTime = new List(); + + int day = (endTime - startTime).Days; + + for (int i = 0; i <= day; i++) + { + TimeMDL temptime = new TimeMDL(); + if (i == 0) + { + + temptime.starttime = startTime; + temptime.endtime = oneendtime; + ListTime.Add(temptime); + } + else + { + temptime.starttime = twostarttime; + temptime.endtime = twoendtime; + twostarttime = twostarttime.AddDays(1); + twoendtime = twoendtime.AddDays(1); + ListTime.Add(temptime); + } + } + + //list在处理 第一行和最后一行 + //ListTime[0].starttime = startTime; + ListTime[ListTime.Count-1].endtime = endTime; + + return ListTime; + } + public class TimeMDL + { + public DateTime starttime { get; set; } + public DateTime endtime { get; set; } + } + public class SecondHead + { + public string HSYS { get; set;} + public List Head { get; set;} + public List Title { get; set; } + } + } +} diff --git a/HT.Cloud.Service/ReportManage/MainPageService.cs b/HT.Cloud.Service/ReportManage/MainPageService.cs index a3b5944..65eb481 100644 --- a/HT.Cloud.Service/ReportManage/MainPageService.cs +++ b/HT.Cloud.Service/ReportManage/MainPageService.cs @@ -116,8 +116,15 @@ namespace HT.Cloud.Service.ReportManage var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer); JObject valueJson = JObject.Parse(responseStr); - - chartDataFormat.Value = valueJson[item.TagName].ToString(); + if (item.ElementIndex.ToString() == "C3") + { + chartDataFormat.Value = (valueJson[item.TagName].ToString().ParseToFloat() * 0.84f).ToString("0.00"); + } + else + { + chartDataFormat.Value = decimal.Parse(valueJson[item.TagName].ToString()).ToString("0.00"); + } + //chartDataFormat.Value = valueJson[item.TagName].ToString(); chartDataFormat.RtTime = datetimeNow; @@ -170,8 +177,14 @@ namespace HT.Cloud.Service.ReportManage var responseStr = RemoteHttpRequest.HttpGet(remoteRtDataServer); JObject valueJson = JObject.Parse(responseStr); - - chartDataFormat.Value = valueJson[item.TagName].ToString(); + if (item.ElementIndex.ToString() == "C3") + { + chartDataFormat.Value = (valueJson[item.TagName].ToString().ParseToFloat() * 0.84f).ToString("0.00"); + } + else + { + chartDataFormat.Value = decimal.Parse(valueJson[item.TagName].ToString()).ToString("0.00"); + } chartDataFormat.RtTime = datetimeNow; diff --git a/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiHistoryCharts/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiHistoryCharts/Index.cshtml index a88933d..78e81bf 100644 --- a/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiHistoryCharts/Index.cshtml +++ b/HT.Cloud.Web/Areas/PenMeiChartsManage/Views/PenMeiHistoryCharts/Index.cshtml @@ -585,7 +585,7 @@ //第一条Y轴是否显示轴线 const oneAxisLineShow = true; //其他Y轴是否显示轴线 - const otherAxisLineShow = true; + const otherAxisLineShow = false; showchart = async function () { //(document.getElementById('echarts-records'), 'walden'); diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryEleTimeZoneController.cs b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryEleTimeZoneController.cs new file mode 100644 index 0000000..590d15a --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryEleTimeZoneController.cs @@ -0,0 +1,185 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using HT.Cloud.Service.ChartsManage; +using HT.Cloud.Service.ReportManage; +using Newtonsoft.Json; +using System.Diagnostics.Metrics; +using System.Text; +using static System.Net.Mime.MediaTypeNames; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Http; +using Microsoft.CodeAnalysis; +using HT.Cloud.Code; +using SqlSugar; + +namespace HT.Cloud.Web.Areas.PenMeiReportManage.Controllers +{ + [Area("PenMeiReportManage")] + [HandlerLogin(needLogin: false)] + [HandlerAuthorize(needAuth: false)] + public class PenMeiHistoryEleTimeZoneController : BaseController + { + public HistoryEleTimeZoneService _historyEleTimeZoneService { get; set; } + /// + /// 绑定数据仓库的数据库ID + /// + private string systemDescription = GlobalContext.SystemConfig.SystemDescription; + [HttpGet] + public async Task GetDriverGroupList() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + + var data = await _historyEleTimeZoneService.GetDriverGroupList(); + return Content(data); + } + + [HttpPost] + public async Task GetReport(Reportparam reportparam) + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var StartTime = Gettime( reportparam.StartTime.ToString()); + var EndTime = Gettime( reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var data = await _historyEleTimeZoneService.GetReportFileName(StartTime, EndTime, Interval); + return Content(data); + } + [HttpPost] + public async Task GetReportNew(Reportparam reportparam) + { + var t1 = DateTime.Now; + //var ob = JsonConvert.SerializeObject(reportparam); + var t2 = DateTime.Now; + Console.WriteLine($"第1次序列化,花费时间:{(t2 - t1).TotalMilliseconds}"); + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var StartTime = Gettime(reportparam.StartTime.ToString()); + var EndTime = Gettime(reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var t5 = DateTime.Now; + var data = await _historyEleTimeZoneService.GetReportNew(StartTime, EndTime, Interval); + var t6 = DateTime.Now; + Console.WriteLine($"调用service,花费时间:{(t6 - t5).TotalMilliseconds}"); + var t3 = DateTime.Now; + var con = JsonConvert.SerializeObject(data); + var t4 = DateTime.Now; + Console.WriteLine($"第2次序列化,花费时间:{(t4 - t3).TotalMilliseconds}"); + return Content(con, "text/html; charset=utf-8"); + //return Content(con); + } + [HttpPost] + public async Task GetReportNewInitPara(Reportparam reportparam) + { + ////sql获取count + //var StartTime = Gettime(reportparam.StartTime.ToString()); + //var EndTime = Gettime(reportparam.EndTime.ToString()); + //var Interval = int.Parse(reportparam.Interval); + //var data = await _historyReportService.GetReportNewInitPara(StartTime, EndTime, Interval); + //var con = JsonConvert.SerializeObject(data); + //return Content(con); + + //代码理论count + var StartTime = long.Parse(reportparam.StartTime.ToString()); + var EndTime = long.Parse(reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var data = await _historyEleTimeZoneService.GetReportNewInitParaInCode(StartTime, EndTime, Interval); + var con = JsonConvert.SerializeObject(data); + return Content(con); + } + [IgnoreAntiforgeryToken] + public async Task GetReportNewPage(string page, string limit,string StartTime,string EndTime, string Interval) + { + //string page = Request.Query["page"].ToString(); + //string limit = Request.Query["limit"].ToString(); + //var page = Gettime(asyncparam.page.ToString()); + //var limit = Gettime(asyncparam.limit.ToString()); + var startTime = Gettime(StartTime); + var endTime = Gettime(EndTime); + var data = await _historyEleTimeZoneService.GetReportNewAsync(page, limit, startTime, endTime, Interval, systemDescription); + //var con = JsonConvert.SerializeObject(data); + return Content(data); + } + [HttpGet] + public async Task GetReportFirstHead() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var data = await _historyEleTimeZoneService.GetReportFirstHead(systemDescription); + return Content(data); + } + [HttpGet] + public async Task GetReportSecondHead() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var data = await _historyEleTimeZoneService.GetReportSecondHead(systemDescription); + return Content(data); + } + [HttpPost] + public async Task GetReportDownLoad(DownLoadparam downLoadparam) + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + DateTime StartTime = start.AddMilliseconds(downLoadparam.StartTime).ToLocalTime(); + DateTime EndTime = start.AddMilliseconds(downLoadparam.EndTime).ToLocalTime(); + int Interval = int.Parse(downLoadparam.Interval.ToString()); + var data = await _historyEleTimeZoneService.GetReportDownLoad(StartTime, EndTime, Interval, systemDescription); + 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 async Task GetTimeZoneData(Reportparam reportparam) + { + ////sql获取count + //var StartTime = Gettime(reportparam.StartTime.ToString()); + //var EndTime = Gettime(reportparam.EndTime.ToString()); + //var Interval = int.Parse(reportparam.Interval); + //var data = await _historyReportService.GetReportNewInitPara(StartTime, EndTime, Interval); + //var con = JsonConvert.SerializeObject(data); + //return Content(con); + + var dtStart = DateTime.Parse(reportparam.StartTime.ToString()); + var dtEnd = DateTime.Parse(reportparam.EndTime.ToString()); + + + //代码理论count + var StartTime = ((DateTimeOffset)dtStart).ToUnixTimeSeconds(); //long.Parse(reportparam.StartTime.ToString()); + var EndTime = ((DateTimeOffset)dtEnd).ToUnixTimeSeconds(); //long.Parse(reportparam.EndTime.ToString()); + var data = await _historyEleTimeZoneService.GetTimeZoneData(StartTime, EndTime,systemDescription); + var con = JsonConvert.SerializeObject(data); + return Content(con); + } + + + + public class Reportparam + { + public string StartTime { get; set; } + public string EndTime { get; set; } + public string Interval { get; set; } + } + public class DownLoadparam + { + public long StartTime { get; set; } + public long EndTime { get; set; } + public string Interval { get; set; } + } + public class Asyncparam + { + public string page { get; set; } + public string limit { get; set; } + } + } +} diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryOutPutController.cs b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryOutPutController.cs new file mode 100644 index 0000000..72bc81c --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Controllers/PenMeiHistoryOutPutController.cs @@ -0,0 +1,157 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using HT.Cloud.Service.ChartsManage; +using HT.Cloud.Service.ReportManage; +using Newtonsoft.Json; +using System.Diagnostics.Metrics; +using System.Text; +using static System.Net.Mime.MediaTypeNames; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Http; +using Microsoft.CodeAnalysis; +using HT.Cloud.Code; + +namespace HT.Cloud.Web.Areas.PenMeiReportManage.Controllers +{ + [Area("PenMeiReportManage")] + [HandlerLogin(needLogin: false)] + [HandlerAuthorize(needAuth: false)] + public class PenMeiHistoryOutPutController : BaseController + { + public HistoryOutPutService _historyOutPutService { get; set; } + /// + /// 绑定数据仓库的数据库ID + /// + private string systemDescription = GlobalContext.SystemConfig.SystemDescription; + [HttpGet] + public async Task GetDriverGroupList() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + + var data = await _historyOutPutService.GetDriverGroupList(); + return Content(data); + } + + [HttpPost] + public async Task GetReport(Reportparam reportparam) + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var StartTime = Gettime( reportparam.StartTime.ToString()); + var EndTime = Gettime( reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var data = await _historyOutPutService.GetReportFileName(StartTime, EndTime, Interval); + return Content(data); + } + [HttpPost] + public async Task GetReportNew(Reportparam reportparam) + { + var t1 = DateTime.Now; + //var ob = JsonConvert.SerializeObject(reportparam); + var t2 = DateTime.Now; + Console.WriteLine($"第1次序列化,花费时间:{(t2 - t1).TotalMilliseconds}"); + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var StartTime = Gettime(reportparam.StartTime.ToString()); + var EndTime = Gettime(reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var t5 = DateTime.Now; + var data = await _historyOutPutService.GetReportNew(StartTime, EndTime, Interval); + var t6 = DateTime.Now; + Console.WriteLine($"调用service,花费时间:{(t6 - t5).TotalMilliseconds}"); + var t3 = DateTime.Now; + var con = JsonConvert.SerializeObject(data); + var t4 = DateTime.Now; + Console.WriteLine($"第2次序列化,花费时间:{(t4 - t3).TotalMilliseconds}"); + return Content(con, "text/html; charset=utf-8"); + //return Content(con); + } + [HttpPost] + public async Task GetReportNewInitPara(Reportparam reportparam) + { + ////sql获取count + //var StartTime = Gettime(reportparam.StartTime.ToString()); + //var EndTime = Gettime(reportparam.EndTime.ToString()); + //var Interval = int.Parse(reportparam.Interval); + //var data = await _historyReportService.GetReportNewInitPara(StartTime, EndTime, Interval); + //var con = JsonConvert.SerializeObject(data); + //return Content(con); + + //代码理论count + var StartTime = long.Parse(reportparam.StartTime.ToString()); + var EndTime = long.Parse(reportparam.EndTime.ToString()); + var Interval = int.Parse(reportparam.Interval); + var data = await _historyOutPutService.GetReportNewInitParaInCode(StartTime, EndTime, Interval); + var con = JsonConvert.SerializeObject(data); + return Content(con); + } + [IgnoreAntiforgeryToken] + public async Task GetReportNewPage(string page, string limit,string StartTime,string EndTime, string Interval) + { + //string page = Request.Query["page"].ToString(); + //string limit = Request.Query["limit"].ToString(); + //var page = Gettime(asyncparam.page.ToString()); + //var limit = Gettime(asyncparam.limit.ToString()); + var startTime = Gettime(StartTime); + var endTime = Gettime(EndTime); + var data = await _historyOutPutService.GetReportNewAsync(page, limit, startTime, endTime, Interval, systemDescription); + //var con = JsonConvert.SerializeObject(data); + return Content(data); + } + [HttpGet] + public async Task GetReportFirstHead() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var data = await _historyOutPutService.GetReportFirstHead(systemDescription); + return Content(data); + } + [HttpGet] + public async Task GetReportSecondHead() + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + var data = await _historyOutPutService.GetReportSecondHead(systemDescription); + return Content(data); + } + [HttpPost] + public async Task GetReportDownLoad(DownLoadparam downLoadparam) + { + //var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); + //var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); + DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + DateTime StartTime = start.AddMilliseconds(downLoadparam.StartTime).ToLocalTime(); + DateTime EndTime = start.AddMilliseconds(downLoadparam.EndTime).ToLocalTime(); + int Interval = int.Parse(downLoadparam.Interval.ToString()); + var data = await _historyOutPutService.GetReportDownLoad(StartTime, EndTime, Interval, systemDescription); + 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 class Reportparam + { + public string StartTime { get; set; } + public string EndTime { get; set; } + public string Interval { get; set; } + } + public class DownLoadparam + { + public long StartTime { get; set; } + public long EndTime { get; set; } + public string Interval { get; set; } + } + public class Asyncparam + { + public string page { get; set; } + public string limit { get; set; } + } + } +} diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index.cshtml new file mode 100644 index 0000000..d0e8f30 --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index.cshtml @@ -0,0 +1,965 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ + +
+
+
+
+ @*
6/12
*@ +
+
+ +
+
+
+ + @*
*@ + @*
6/12
*@ +
+
+
+ + @**@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index_blue.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index_blue.cshtml new file mode 100644 index 0000000..aca319b --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryEleTimeZone/Index_blue.cshtml @@ -0,0 +1,1580 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ +
+
+ @*
*@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index.cshtml new file mode 100644 index 0000000..b85d2eb --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index.cshtml @@ -0,0 +1,1494 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ + +
+
+
+
+ @*
6/12
*@ +
+
+ +
+
+
+ + @*
*@ + @*
6/12
*@ +
+
+
+ + @**@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index_blue.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index_blue.cshtml new file mode 100644 index 0000000..aca319b --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut - 复制/Index_blue.cshtml @@ -0,0 +1,1580 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ +
+
+ @*
*@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index.cshtml new file mode 100644 index 0000000..a275def --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index.cshtml @@ -0,0 +1,1717 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ + +
+
+
+
+ @*
6/12
*@ +
+
+ +
+
+
+ +
+ + @*
*@ + @*
6/12
*@ +
+
+
+ + @**@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index_blue.cshtml b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index_blue.cshtml new file mode 100644 index 0000000..aca319b --- /dev/null +++ b/HT.Cloud.Web/Areas/PenMeiReportManage/Views/PenMeiHistoryOutPut/Index_blue.cshtml @@ -0,0 +1,1580 @@ +@{ + ViewBag.Title = "Index"; + Layout = "~/Views/Shared/_Index.cshtml"; +} + + + + + + + + + 表单设计器代码 + + + + + + + + + + + +
+
+
+ @*
+
+ +
+ +
+
+
*@ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ +
+ @*
*@ + @*
+
+
*@ +
+
+ @*
*@ +
+ @**@ + +@* + *@ + + + + + + \ No newline at end of file diff --git a/HT.Cloud.Web/Views/Home/Default.cshtml b/HT.Cloud.Web/Views/Home/Default.cshtml index 5ff2e01..2c91caa 100644 --- a/HT.Cloud.Web/Views/Home/Default.cshtml +++ b/HT.Cloud.Web/Views/Home/Default.cshtml @@ -634,6 +634,33 @@ legend: { data: legendArr }, + toolbox: { + feature: { + myTool1: { + show: true, + title: '显示数据', + icon: 'path d="M698.71 301.02c-60.96-46.64-122.59-69.073-186.71-69.073S386.25 254.38 325.29 301.02c-60.699 46.44-120.173 116.59-177.696 210.747 57.534 94.323 117.022 164.595 177.732 211.115 60.956 46.707 122.573 69.17 186.674 69.17 64.1 0 125.718-22.463 186.674-69.17 60.71-46.52 120.198-116.792 177.732-211.115-57.523-94.157-116.997-164.307-177.696-210.747zM512 864c-161.102 0-307.306-112.03-438.613-336.088a31.959 31.959 0 0 1 0.01-32.338C204.702 271.858 350.903 160 512 160c161.097 0 307.298 111.858 438.603 335.574a31.959 31.959 0 0 1 0.01 32.338C819.306 751.971 673.102 864 512 864z m0-128c-123.712 0-224-100.288-224-224s100.288-224 224-224 224 100.288 224 224-100.288 224-224 224z"', + onclick: function (charts) { + // var myChart = echarts.init(document.getElementById('echarts-records')); + var option = charts.option; + for (var i = 0; i < option.series.length; i++) { + option.series[i].label.show = true; + } + } + }, + myTool2: { + show: true, + title: '隐藏数据', + icon: 'path d="M359.854 561.713l-48.99 48.991C296.222 580.926 288 547.424 288 512c0-123.712 100.288-224 224-224 35.423 0 68.926 8.223 98.704 22.863l-48.99 48.991C545.864 354.681 529.154 352 512 352c-88.366 0-160 71.634-160 160 0 17.155 2.68 33.865 7.854 49.713z m303.99-100.342l48.89-48.89C727.626 442.46 736 476.253 736 512c0 123.712-100.288 224-224 224-35.747 0-69.538-8.374-99.52-23.266l48.89-48.89C477.49 669.214 494.515 672 512 672c88.366 0 160-71.634 160-160 0-17.486-2.785-34.51-8.156-50.63z m-402.7 201.719L210.222 714c-46.578-49.479-91.533-111.148-134.865-185.008a31.977 31.977 0 0 1 0-32.363C206.63 272.876 352.794 161 513.851 161c66.582 0 130.619 19.12 192.11 57.361l-52.539 52.529c-45.606-25.502-91.813-37.929-139.571-37.929-64.104 0-125.719 22.438-186.663 69.085-60.68 46.446-120.136 116.6-177.64 210.764 36.426 59.648 73.68 109.734 111.595 150.28z m503.674-301.18l50.92-50.91c46.578 49.479 91.533 111.148 134.866 185.008a31.977 31.977 0 0 1 0 32.363C819.332 752.124 673.168 864 512.11 864c-66.582 0-130.62-19.12-192.111-57.361l52.54-52.529c45.606 25.502 91.813 37.929 139.57 37.929 64.105 0 125.72-22.438 186.664-69.085 60.68-46.446 120.136-116.6 177.64-210.764-36.426-59.648-73.68-109.734-111.596-150.28z"', + onclick: function (charts) { + var option = charts.option; + for (var i = 0; i < option.series.length; i++) { + option.series[i].label.show = false; + } + } + } + } + }, //legend:legendArr, xAxis: { type: 'category', diff --git a/HT.Cloud.Web/WaterCloud.Web.xml b/HT.Cloud.Web/WaterCloud.Web.xml index def84f9..a8947fa 100644 --- a/HT.Cloud.Web/WaterCloud.Web.xml +++ b/HT.Cloud.Web/WaterCloud.Web.xml @@ -228,6 +228,16 @@ 绑定数据仓库的数据库ID + + + 绑定数据仓库的数据库ID + + + + + 绑定数据仓库的数据库ID + + 绑定数据仓库的数据库ID diff --git a/HT.Cloud.Web/wwwroot/images/不可见.png b/HT.Cloud.Web/wwwroot/images/不可见.png new file mode 100644 index 0000000000000000000000000000000000000000..fef280d91679efa1b4a677dce25a9d661668ba41 GIT binary patch literal 9472 zcmdsdWmjBHur)I10KuIwNU-3Npg}TNGC**G2WN061PJay?cj#QIy5Sro=`)j$oT!bO(4`!|CXC?#-LJmtREM(5=}~WzVb1Ym9ViR5Y#*=U;^)ICmjTdj+QUVBVAmjDBrGXGn5T%s zv2+>a!x-{@F;6W61j15b_D!_)_$WcxO=YW6tcV{2D2kW({JxbAgtdiS0(a)58 zc7ED2!gLmt_N$l(z$m%TI5weRhcLN!DSVp7LUiszXt7uD9${)(W6IwLAj`)HW7RlM zQXx$Lo9@I+9Zn^pHoG6lLRdD41ABRXIdsqbw4|Q1M*1d3SMz%D37Hl5pnviHZ?_mz zS-Tyc3ziFepdJI_?-?ETX4oG z`PAG?z4V=NL*`0z9P2gX8)09Sm;361__mG*Up>WvP*{2L_Aln0{7|(9&in-Ew_)AcEp79}VP$*+aGdV-spAC0BRtK|mNCyGuKiIS< zjV~{gVEi;atoU2EgyZFn0gy2k;J~dtVzqHlCIGzR;#YG4LF zRXR$WE|js4o5944_l7mzo>RgcHCZk6uiE?vIc9sNT(Jv^l1w|sP$SuDAtC5S?tGMCqtcxI;T_=C@#+yi`O{zjEgRil-oUO za&^{5qyT;izNHj-c>>9f$*Cj(Lh~vRo@pV4K zS0E4Cj)x&FrGT51iclZ1zcaK-NaL9m&+Ru{y7F*&fY;{B!kKunfmK=kB1){J@2B#;yPqeoEb4? zc{k)xt{q^5Wn!pV{m|H?{S<13XRI71TwFjnwSp^Z=ja2@W3l=JxY?Y+;L zZ>6yyn3py@N+`wSqmC3Nmz5XrA;ps7MY}cL7)%6Kpm0NOP%+6COv-nYbf;!&AM1-$ z;>v386;B_$hx2-yKY!7HkbrrRvYcS8V@oc#xj?4paz{&)vvY~ z!3Wpi7t|jAKwHth9Ud#ou2dQbt|)ag8qw#l|1qpNo{U5 zRitiEZmorSU;Ad(hm2SJob(?YEszp=IRAJvR5y%~9C+j;=`7@9!I}ZDw}aoD!EU^j z;*2!`GB}b`b&EyZ{q()TPvmO(&fH^oIi|JtV}-w-W+tZ(w-1nY6+4n?Z04+Ih=zsa zqm~HB2>_vmBJF(zcOcB%0V%v5f1fId5`V%|U^DymD;41%1kp>c2Mm-V4xAcsjkEOJ zPc`JDCNQT&C5`r?!b1{H63h+9flT9(N2Lm*zhr-&)<$hgOEB-w@=M;ku5!Ap|AD^) zw7Ha5#!~GIO)Iv>=N7aZ74=62g0`6IQCB1%G_jnGWq{(_*+(HZ^!?*h3#p!d-6}n= zFmH2Ca^vmEAQv*tWE$h%WSk~jZW~VV4RrjWDa?|;<*iBa0IcyLJm}yIBw^&`xd*$+ z`^zS6yT~%qBY0>FW3S>bXcP!K;f@^;p8;5Kpz6#@x$7w*eTp@vAj91#dgNiUNAFNY z&ID&a>4m(qZK8z0Bp*LZTY9>h4!%CY-d#{oLj+Y08U}*0CGE*anAzl?p3vXx8~_*}F` z=Mu(Y6MB4R+zK9{D2k-Tc31<7Jya+npRpnxtp)2R2|oi?*JP^Ckn01IHd!K_74R7o zd5@V^d6WE2=eF}$s(CpS-b%YT$6V9J#8s-~X59a>ne zy;-5?Qa2j?_-~{Qy8KF1a((adXvjK);^x2ujw3Jx&3b=apM$-zw`e*vK*C}x{%Yo5 zfSsuhgF$_DvG(Q{)eHj+Y(6TgdfFY+gZ2yq@1hICxn_AB~I{B%woYN__-u1H5B zdnoFLj2OY4StE}lOxzy8nn-N;oS-8cWIZaXsRRzp1XrpZzeCa6N>kYS0&dW;iyW#| z)e~^c!#OxjbqTTA{UX`O4ioq)QibY-h8TXG<6PYiC$JRIQlvwj+`J3|_TDG4c}ud# zQoSY%NZ(eMeY5EiCt71#BL~wnn5GX-+vBYidK+(XZF6lH9J=(>fp2mh=d#hb+WhdAp8-zjJtYrUv03jQ=}K|O?bw=^I+?Ec>lh*JL4U3;;xbJy%bwDlw}Wxw zE%M;HXig4xHj@FiuWA)U;G!b3t)(cS6YcqSAZb_oQoMCPtT5uIxt6&En}-e3t&I;h zXn}0#VgAbYNN~hr-0EmSJ)HW?`B}Hh5y6dZGH9JtX#Sg(la19s zS;$vrsuCq!q47Y0))Uh0UCUl)PTs;UoOv>>N)0@wiJm{ehB<6p-&FWo_r%lhb zeZ2Zx>m*2SHgU{R>tO=Gg!i^18a!o`?tUM<`d7v$)+~sTcChY=E%3n6?5^^&Db21wSCg`9#g;043M4`z!*NY zLoGEw_!FOXZA&9(gB_XmF=W`Jgf4KB>sWGb^P0j2vV1}Qx;5nX{>b*_1a%fLm2^`H4vlD zaQe1z??Uraj;|bSHOMO6&)W38csft=EVe8|%!qYnaE2-_LPNqJXOMw+5N}(Zq1?4> zo|(&>bAz>4k@=c+V^)9ENpMNvEi^a7Gp0~I-#Y8b7|*42Se)+uE(uF~xK3uIrmHvl zfrKsuZRonTM-@QG;Z>(KORrI6_8WG?2>K3R`|Pe_7YQNa?Z8;mW{_ac^o;u{R~>Mk>l%dPmNnNR7;i!P46(@HRvvq*3O;183QdUT3oQ^2yQO2(L1eec zq>f~xd0G|954Aa_={5z#%x%T;#uS)j!j>W?R6Xynz?(93G+mfU2_Wc#7Ix4P!569> zl_pa8TV$VEli8uiD{K0D4sq+#Vg}63-Rh-YcW1D?a;72YvC6eKtEhrqs5Y&SXZwIm zj8+qaVo69Q&V%%Z_nM`*x`T@99WAOT{7u-;J<5No`wkBwsk|k*qy7ifuJ*qlh~~=` z-Fx3ey-DkZ3r7d{EAeUNo$h`PtV~n%bRO|ed#bR^j;g}%X47nu-O#dvy41M&TheHy z6fpOcpOqOGZbs;=*r~`wYXc2isJw87Mxn72q3DY&=W}&Xr6`l*ulO_u1J>vUiPJf4 z88j!uv8G`*H^?hRR?6ZRg(P}hKuM#bMK?^79}_kWJYC#eL(pMAt{agb$teS)+<(8m z-?1}aum_1$sasDclGpuz*1uzL~Xn+ z4n$MpyBJvr<-{N$cz!tIv7@f{7}?}Z%K7;2CIeAOR9qirF&eH?R($tc5fGkId#3Su zWe+7Iu=#gAjA2@~Aj<;GoqR?)+mxd`0;O;DnZ1jiAR2Ci{B(N^$-mI_ztfO?dNmzl zpS!$o;LTxxMfiEEj4ozwpDE2jY`g^M%P;5Nqu1E~$=7@1lX*g&rshe1tPb)Rq?f!h zWem}fNe}IuIlHB(jLEdhna3F^e$*9gF2)X!GCt$*%ZP0z{Cm9SEYeG%Mj{8oS$!lM zBB57RKQhat9|gy@$fKaK#@9K+4{oe_w!pJTiCOv`Vb_sw9|bZ*C?PY%VuxSyzT$wJUNOeNSOWOp!S<`fk#?bZAc8KSIg6aqBK_9gQ|O7D+C z^Bqr`*nVjAtR{8-S=ik58raU-;~?01}`z;$nkT+ecEj0dW{SGl!|f;~$ zZr|gV)O?64k13*VH1eLLr3N-wlk+xQiytu85=!Z>4Hqx&8Lg@?<+0H0N~_2sZ`4Sf_NVhT&JTdf}c!;eX8i+!raDyJYC^RSE=j zuW|M(O?r*!VPgdwR{mwuOoFyYIp6TJs8NSCC+~g=_OrFC25IbTyC(uMMc-eY7kL|+ zGwoKma#$zyySjX*@0$t~WuhFmbC{kii_Ds+m6P6o{HG$5h(sn$|2?uyI-2mbG|ytJ zfBXhexh$D}(owd0_c&<>Zy5cfj5aD16}q<$p+CGI%V75Fjz4&14)t6*0GTrb%1a)4YWSXn^YzR~gD+zsEu zK)SB!s(JZP-N=|`!8v$8ZAjI^ZgMRAkIgej4}RgM=yhPXlL9((KK3wcnzso?T>$P( zyG+!l4u~V2CZ*RL+2vXhj5gpL7HVWtCk}gI44m8Aql^o9Sj{E90(4!y)t?GkIVuv| zwxok!NF+O$_bPvq`@VdH)vD)%x#sMp-~EYEqi%3e2tSbOS|^2k=X;yZqX6FNY_W>r zsP@!%uq4mV6E^$^rytkGjk>zd)2R0a8Z)j0qs9robtV4vh576ki$(eDnL~P`jF-fB z5AWW1Y6&SF7VSOO|2^cCW;rv7J({SM!F!unS>qtgqpJ>J8mrtI`MkA8Aw zEVY+X%b?_Daa{a_jdw%3fJk?t1`^N6C?kDz1NA$RR3Jg#E%9FI%WC7IBbUNQ=7Z9W zpKH^hYn!4rzmY^s@n_kD!T@J6TKDmd_7-bWyn_Vw>r=&F+)=><<@ZloeZ)+1XJ_dH zOA6V8Ey5G=Qs;LNt4THdM(uu=g)BJ9dZycqrZdO7r&u=niV(VSVL?PY%58`$gyJ!} zgw(||V7_Si*)<0^j`YL__H40GW-!2XG=p~e;$nVPEk#{Ismv8iTS4S$pxEFmhCc;3 zZa_n^z^g^i{^BiWSqIXwx-%kcQr!$L^VRlh?QS-OqX!bDt@cjC-#E|R4ZQIom`NAc zfgtIa$&4hPv}N9cn~y_+dP=u1>Yo+1PtYo1^jRe=vVg{^s;u0J!Cq4IrMT(N;}70~ z+)XF2ge(8;yWW{mG{_33N_uZtCJIB#f>uZW;EwD&!Hx+BA_3F%m3Z3QhbXk{#cV5u zIxErI=gm2xjQ+1z^mb=3FHAftwBK4@2{Rp4-6w^h#o zvElzegx4f1{wipPrgDahn0Skk`2@)o?|LOVKSCOSlTjKQJ4QqR7gb^irJjVlUy@f} zY-REe)4GM_PDf$wARu@d-tYOn==}2=g4?&QM?uX>tEzn3m#hRd%?fjmYIVlk_h0lI zgALne{zVl!R#RMVs5}$0Y9fjb>vs1DM#sw!Vi5r3@Wn{v<;8~SMZ3G&AC$+NLAEqE z`coFcDrRjAX(9SsNeWLMozk?OVysyfCc?*~_JrvFHi_5$i&vZ9Xfq5BfYMYYewhW9 zHX2ut^7Vo;9p>gWyN+~mxOBR8%yJGA1@AKfoLc=Q(q-Z#P44%(n$j!8%0~Uy`Exad zNc_knDl-va$DvPD!NlYmA7D?5-v;c`ERyL{BZl{@Z$fQFkz?d?oVa(NOGsU7d$xLZ zstEIv7<&{9F-v0}8c%ZzBHx*LbHSu-fO1h_MC|4-qUWbxScHNwom~(h_}I(`cX}r4 z-1G5$ewq^dPEdapQC>8oE85pX9_A(mJ6zz7VO5-UeLX*%^fz_rCX1rgL{C?@;OOhq zC8qm!t_Yj^_UIA1HD2@O4|u<-lH0Sbl*b(>x}=l|{BD)0^95%w-A|W~49SZSoJ-JE zzHOO~sK*N0-8sZ+YRN-BG|F@SX$f{?rWd}r`j6~AF9N}s#?WS+BRQu+CgDWiU=1c; z%Mi@#-zs;meQofr@n;7db_B=1WZn8pWLZEI978)<8zN_9)oWa61lVJcPyEZNa{BAk z{|qkWTOi&9YFVyK!lQ~Zbi|~Q<)+xF2T}{Ob&f*L>K-?S1c$!~23g3Q5Ka~)uqh}j z`whw2JPQ7<2=npkmhe0Irz68AG*wfHeaLn+UiSN&w~7+D5UXeKUTYG)M^ssCOY0x) zNI@83H!ox2yOB3RI}9-*>1TAcUhQSEa#8DvS!Lrh&fDa%lKt4jeRTnWiV+_2FWLiU z=qs7iIY!~5oPYlaO5PV}uNa-q>Mk_tIH4PyY&sp;KOqLZJ3b?rFJBIFtNje=66aJ<;7l=o_G?$ zHOQmUeG>FgQMk8F9SgYZ+OmAZ|js#Tt2-=@oTZelb9MD8(j}otb zOXeKGf0eanTBNLU4z42wo;mNt4i(h$sNE9E-!mLtpYX9}@L!e2WUvyBB6OT|*% z#>hxxyhFScjM#n*g7I(v1OT1CT_vwPvV4Gi+M9Ic=dBnO=O^41Nt!gMo98&`3w+Z* z`Z4q})d7B>>LlyM!e-bH5`Wzc>jSS)?CbcC2;?-&_|~%flx$p^`-Nx~Ut;FkuJ`NA zk(x;3Xa~txj&-)`b;DLD+l{6VShGJInvpr_u%0HDCV}7W*s)OlulopzN!aBNdfzva zDz}8M%S9*8wYj$TYsBM@BequIb8`lbxt<;06})h!zp*DX zl5`{t<-K_qB09ZHZp}`RXrj$P!rHe%{HKGUn^#wX>IGS*zjR2FSyt3WbSQH~M-VrK z>&SMjHpIrLWz8duV_r10sj0++{+j_iipHKc*q$L*DG}!jk(}S<2YJUE0*fSm?*Bg$ z0MO3X@?-SQDP>C5W=xfqvz@wVf=HmG(!IsAfis6=Nc6p@Dv6dKvB9G19SwZLUkR^k zVa%<-F7`}wJeIc*R7s(HaDt;SxqPk_=DpqZqC$d>+ zDB&~XX<9w>Nx;o&ZG?*rU3KoDT!68|Zrd!lHDDL3;x0lS_wAG1@T6T<>cCGjL*Iyl z<{t}@os!X(KiZD?(A!|J?|uMZYSdi9<_mv$%s|D$^(LRIUQ<{nV5}MG0DHIS*an_y z*>1*Va4-Vvk5clJdXHRkFLd6}{19^JhgJSiRIS?tO$A9Z$QFS}Fetc5@*v0?7O|~r z8uQhe3lt~#r%rs`^Vi>%VPlZ5oC5Q|eSf7Pfu9Z~kPB|ro4b^ngC^9g0YzwzzfhJI z0{%omD?%LkldsXo-O+o9EJQdy*HO$|zSF*Cj7eJYS%z6iF|X9Ic-c(x#&D(sHTi1c=={CEQ*! z9k`o98ehP7FSe-t`qJuJP+5RU-@nHG$5uPxq6pcrwiDMpLHK07rw3YBO5vv#PF?xy z4A~w!S7C><-S1tZ^v}RwGXTkA*(e14;cR2T z{;UXDc?=k@DIw$<+zM$=xH6e?ZSwI2B0)H1X}yHW4z$67^12j9P9?&pfFcA>mFK|x zXLI0er4)>^q~kuXR37dsDAN>%yU~9Y>@Sny{rc!D5)z>7KP|whVK{l4wF2z~O>pgN z7-lf63{@efIJQeZ6|!BAq~DV#s(j=$`B7R|!4-lQShCSZh9o*L-Dkfv$5xg*WHsA4 zQ#3~4gq8?G@ZzEg?ZJPYbY*Ve;3N2_?f7D7oNr41?D7u5RMbhC(g4z1#bjF|@a(Jaw z?u9t`wFsfQK9RZk4ccPFSEOI%F2C>Iw4mw$I&)NML6j=;QKb=$7$=jRJAzN_ke<5( za7~O*4Q+jLJPn`Hd~umlBC#i*!Gb<1*BEEW;DP6%e+tnXgWqB>GGKqVQN|%GukTA6 z;8&zg71`8i5ye{*_D|@3{{@NNauE`6;7^|1G2i`2 z%Ie%4-*oON%-@I!9pcpBhCofBLj;l@|3e%__m_<|XGhqO$9 z8&wh?$ZsIG9z*>knJV_s`@77z;LQ^Yu7;Jbo5hK-NvfO4_IvT2il-1OQgT1c`0h7C z=rUEeMZb2_=&@>K=lZl1usMcn0@~kqJ~|#LW@E0WFrsXdhs;Gd_hMncodGu6kAIqt z#SH3z;;$6e%bWm%gr@81?Ewx7gjsz&+{94cmp3tY>ON5=-XUy8zKlKi+!%47D0vlh z$IFc=H~woFC=A&o1F^-EiP@-Ak1%ekLI13xCxYr2Ss8@T{YgGkOokW|yg@hny`GG0 zn1a>A0C8tToGMYqo>QXxN)VaI#i_+mqgJLZUrW04zt>_^4mUxT65wkJdB!o6{v#0` z(X9};74~rztBOj#7##H%IXU4S-X8kDkWywKt!fz(*1jHURUG84(mnzW(*1#P{;$%{K5Q90kdCm$I1C%ndM zGEGUpcC-LHMSpe)p;d9Y&A)I(C{yO>7*A#e{!^yVc<;5)AYNQC`yX5)5waM)U;|;h zV1x*UM(W)AKP`yL>{`+Y93goz3XW+pnEg-k@_(k8(--98A2G#RbH6PSk|rd1X+?0E Il%e1M05cC%y#N3J literal 0 HcmV?d00001 diff --git a/HT.Cloud.Web/wwwroot/images/查看.png b/HT.Cloud.Web/wwwroot/images/查看.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ebb58ed8ec04679b75a2843f3008ed9e6ad26f GIT binary patch literal 8474 zcmdtIWl&sC93?uq2Dic82{0tM2KPYl!DVnKKnOO0pc6EMTYx}t4K5R8f@=sa!QEY# z|L(rpdf&I|RlN_l`&QSj)Aj4y-M>EPbo5&-oQyJd;RZaLw&g z7}|b>dgyEV?o)bIq2OVapubW=zU%@Gg{4j<-zy*8gGcpkXkBxmqia?;9Guq303l{R$U$05AE~%8l$0 zoa_L!Fa$n_7N~(!mOnwK0WKIeLimzyqR4kUwr59!%42+kR-`n6D42I zqvn4Jtrb8bBF(6OOCly!>_h1HkWdO#NkL@9>k( z$H?7oG`!PCgdjB5O$)V~?$EgdrB6}>3D z%^y|QD_Y_TG`7%~68uZ;sr!sJ3nGuDnde6K+fa)R6z*|_8YFtc)TzQ8Nr>aDic}e; zBl^;MhJFLmj3Au>i!MSl#?~BQ`pa9TpGbFqXivogb7%^RWP_4zr)(ZpbTu^QJTMWr zYNkJ>Jc|EBPn);rpDG5K763RYm!^flQmkHgbs$8jy9l+Y(GPZFzu-yuFxdK=61GVe zR$0#epm0ttL~nD9o{na^<7~ZOX)@3o`^Q$i0I*qfy0+MVvSoDxb;gH?N_%fkfaklPE<=zuu*vlsH|# z$&18~taR(qOnAYOV8FBNgfPY#t63r-*u|>GG;JHMaz6QHUp2-C*hG^=f~Ea4(bjff z3QcSr1eL}vy+w^K_F~88is#yAAEWkoa@|?~_ulgpe`3I%!dRL*l_UegR{O?^^}zPe z={dbVx;xc>L!<_Xm0UkmMg4mo|L^tH%cu)~e}>V#(N@8EP*LvY*$NEge>z^~40lzk zy2NeEXnN0|Fc{pmR@=N_61o{6M=NxQagqT8wszy)n^-j%&vs%=1~O-DMH4FciG0rF zH)%|`mHbsj;$ViynzKs9*-3$Dray*bNG#VT^S!7urTS9fU-}yzIE@nZ0r3wK*6sb5 zgX6vtYepYh4u%eCw%p*vpZxhW=Lvv+^sIgXu2WNXMAGdF9_Z#WY(~A?{b0qxLd(;TK z*10IxbN_49^7TtG2ZY00^i_H~M|WQTK3O~lP~JUlW`~`n{sn;_sg4MF%wq9*Z%gV+ zHszp&keKZa7i)y*$M)I#sA<6;Jykr=p`TvG5{N2&l4`%f)~!0Fu7QvR=$*jOBp^qF z@mtj*zF!r^d(vZdj-K?&G8=8~O>3Df!@6jcK$mvl!xzKgGGqk}w4U$d9V>1md2!hZ zg`P3*0)OM_-%bL*|rSLrnlE`A^lcQ zB@>2K)w^#Px4=iVG)micy{w!;hRaSDbimcs&-g=t6Z}vDoqcz%Ch5>aED1s}GV^6S zt-$uLa?PE;EAIIKAsq{s8}&SS{tHr@-{uD#!GppblznX*&GK0IZ53ZxH>+m*XZ-Xm zN1CGvagKJ)`aBlQy6N5Bxu$KFlmraOks?(ccWQISl~cdwdL_JN05&zaDxoW(X&R_$C3IgCBO6RqqC-V;$~#Z z5L!mf?x15na-%!Nq%SbDMjsE0On!a~JXW_2BQ9sm(b{<%8aqMoyXM#zU2g#Peb)N@ zk2sMvEj+;YGNo!}@>|X;ZhJbuvyeZHYh#UZy%kxROBTi{KE5%#t!W}&eMWG{_yxYTz^;K2%O=$txEcQp6l#y6VC$hY<5oTFpg&Tjw_0_C zPI5HV92rmc5LsmJD&*zG77qK{Fgy^PD?8n{dOh^$I}bBw-FqhqU&Lf)18+xHi!Tyi zcq#k#{<~FUJQ-OSMTCKC^iAXEAm_Zmyjh;5IGAUbA5p0{NE>NL3`Uiq6MnN*?(81? zt|vHGvunW3dQ1-p3u@?T|XcOCL+gLzno1tw?Wu2f=lqkjmA zHd39uK@UJ_-6NQe2>Za|KDnfCR`L;K1zQJ3?E3)|@(kU{ zgCL3cQ6d|GJ?yGi6U;UyODt;4K0M;_sW}6}MtrEM7}0}N1xcEv8)OIbngZBfT5f31 zPQVn5x@1c*T%Sx@7L48^j9TM$D1U?RxSH0HrKOZIxbmC?rcnZ0O<_A6udRNGtyy6U zG(ON_@i5GM-m)kogcFS=3K#GUY(VOLT}$>UqqdbnRNW1PGZ4LTto74&;_c1TU&?G6 z_4^aK<$rRYOO5X4;~EKb|PO}PsXyvD2A!{4_fe6 zVr=^lB&she#M4yMMCSTucxMr7+0EpZDjdn)gI@OH`G-kO+=f%=pnJOj76GHJH`mNv z{1XR>-g2xLepX~f059i|Qv;Et4Zw#?uQlUtvEhX>ej5(4f-U*%lCnTIX1Ni+~Zj!I-VU+#&G z;7nE(ic}K^JNPM3{$OOb+NiQRz8dVk{iR6iaZmisE7Ne{Fo*BqI#sikr=jdK3bZ3h zm__7AlV6*V9}AUXztxGl5>%!+ST%MRCUUoU`rjISgrJ7#B!y!=xdi%L4jWE{(h{r` zZ3@11E8Y6GK*9aAV(?1bv;pA+*2=Q#>-Ytr@V-_@CqpHwqz-kbY;H1@Cz z^e0V|VcvKpfg>?%t!@Pqhy&k9pyU|7T*_6%U+`&egs1LlGFsa1+v*upT>F=D5P&8& zF8hBRL^osb~gv+6QA~SV7AGMm{qejB;)(H5n`-?9PYpCRI{A7+W>Vonwe2DddWzf7}24G$-C~lL7N=mPE@9MIyI4 zna>ypc9jATkV62}W= z@2feS70~h9QUnW*-iZ;J@iw|KLxW$2m06SS_1*E1_PsqIm_x7biIeWG9o{U&mn)cU zs2s|Hkg5J)@3kVuX$)M-+)AJ{=U>gpo&FtM?suk^S2qDs_`p=q1aG%Fj0QpLjhpdND)PfJu}5pxvc3g4Zrrl8PHmjlA-_$9Rqco@G~&fS$=#mCac=1P z;@`RbwnxiiebJgnPrc<6&*C9ZmUDeaWaQG8*n0pG2+SC=bBh+*({Z2L! zE7gF+S=T+q;11iZu6AB=Fz29K^xqGnN5>`fa59JW?;fo(4HR zPmo9w%@eoR>YHyL`NxyOVte4!K?+thPP_{8 zVpxNFnppXCC>4zuE4%LKwun)sjdo;bmvgF-hi~ts9~L{B$RWUc_bzFA#MmNg$m0_| z-W8u=$zTu|zO-P`NVtv_Gg>BM%yLAjy&)XhQ}-Zryg=2R#+{MZ>T^UNN{6AkOtnwD zJ2l~yJAa~gD8%UR8*yXvJJR!XT_8?k0g;&a4eRS78X~iuz&x-Zs@VMHpGCho-A~I; z5^Ky7!1nh2OVk&U%TCQ0s-J&z%S+y59c!)`jA-(UDKc)#k@7e2z&2w`VbuAa!u53H zKYf)8_v>EgoA&Yl^lx=VhC8KUGInn>6`YP)+C53*KHIeuzZB>23QzBheSHZ4ZBb??b{H38ULqnW*~yl<_&!(>j61>s3JNm;NKHBC7kH zXKE=gti^^33^>U2?ku-p-%ZGkUx-2e>GKVi_GzP%`eB3 z_zh)#PtlmbJTao4pC}VCs#T>~fbm#$>CGmG-vwx=%SO=8cpHW>>YtC7eNSF5^WW4+hI9w`HyP~F9b8yLXLAWFjW#1U@#F;B1fxCG#a(#+B z+KrYsguMzgYtOZAgQoPur2^wwieEfK-lnpwPsZ2on9kb4;-tiwB0<=L(PQXMKl@>J zi`$9qMl@2AxNoH~azhFS1iMHo$S=b1VGVLu@z%$g#rz$Wk1D<|>MaxtUU!1g<~2%^ z_Kkrn_B9!kc;kCt^Zfdoz+%eH`2@E_I~(=|`F__k!VwE3+jv38pSS=NsE=H_$8makKhCa~VwsWPz3qj7<$hp%;m#x!swfI0^G?ytNg zDf?DTCI^C&L)}%+NAkF!n}x%DQnjMdBm1doJCU`baA&pv;rVU0G0ATvt$vMc z|If(}{?Pmy-a3;o%)?8nLN_Z8Q*U8CohOJG(0G=>?$S=UO2&YrG@3S$N{d&Ic3fGY zFJ;1E_%DB^Y;7g{GPAq&U4ewdeU!_Dc>NHg&c(FuzTMP|u&d z1QLHTjA;|i^Wl5S`WPTi5}v2ms82S{1oS_$V@!Npc}~6ibQq0hEdyOfF@HklHZTiI z&#Uln?_j{2Vy6lH_t2(ay%qbTD7WBQ+320Y9b4OGe659nX0UY!U)cDM26Ugo;U9kv z_Z##s@f6NkKEz!U%)^3A=!-$&8Q8XmF^%z_S;v@wH_b7RtO}bLz99AsC2qHkh5e)4 z5?Bk;ZFq$S1ksS34sA8r9^!~H_7(Z8ejY-tWcBy*SZlXJ2^10sBg=YDbLwUV=u>{pxDSd>Ybh-@TIhE=u_t`n zO5Fd6ep{LJgUcswQE>dhiQnf1oARb13IQI-^gjjrLt%(1@9Mn@4QlgiL2Ziu&K5$BoZWOxP`Ec|KXL`@ zqxD*$PwmZBe#emJfq$+%Mx*bLkq#`#SHURrFv^@cmc_=x8#)AD^!pPWbH^bq*O8hur`hda&vao8E5PX` z(e%~z>AnWlx^#V6lX>It4~121Myn0!K|}?2RtY8k|0ckX$o~kiY7pCUNJympZ0xf@ zaj#>whX=)vVTHHjD(KR^`jk-701WEHmy_48_s2un*m~T%t7CY0Mr6Ar2IR&4N4>@M z72DRw>~?yIE$+ikzsQ{(E6lTqi2WVod6Bd}YzVEQhCDSe{F9Fw@w%gyX8o~Pw^CRq{b zWGu7$;0oLS6h1&y(zS5x(qcZ6Ecs8sK;7M#!34F{E*Eb1(&w&ExS)eBvg5r=k4C-$D{jO0{SZ+) z$@J~NmiGTlzHmRyw^PREuz4AjiQ;TqbCfTL82{=YOANj>rVZ1sS@KPwK5v4*<0W~_ z$c64WI;NDFV2_Bm+0dd2D29*Y)OpVcqhinXzEnckkSQXTnkB*2s0Cn>3vGJ%d9S>Gi7S1qGd`(+J|23nv4|E2M-sW z;d7KgG@u0JRojosn@!V?gHyungky>Wv@kwbqKTRpsTvROD$>5^AaYmu#5?1uXbqog zMg2lz@VG|cL67)Pi_B9+74R6$LHVPJ;Lj$qZ>fxv;`;P1PE&Hq<`ZlW&@`PYCLuN3m9|G)Oo$E(bHWvQ~Q#BLOGUuDLsUGXu_g@ z`SZbzi>@c3{y3t{7;R|L7qpp7Nd+f1X+#BPsp>YrVDwLb7Y5X++AVHqIuqKz5Sd+` zbQD@0j1S$YHl9WWnz(Hoq0hv!T0_$`B{N@RQXbd$A4X~L*fZY#)Lg{tu}KUCUVZZa z5|h*wOpWfg<0df7;blSZ@4;2cvI>o~lM@b?jbK<~B9h*QFBD>(waWl^D5eD~4?!%aC3fx13V_Cc=&N2HzfPA3 z#W1UEk2%mqi3Mi?NSin-$+@X<)5&s9?{_ysbe7yeNquo0pL7kPZKm#TWk)6p_Y8I! ze>CeN$f5>2z$*2YuZpSGjXzY52c$=t+aPW5gTv)$Y$u4|LNS{~wZA0ql7|Ue70mD}bY zZI=9lp%EU-Ijx>50h?C&LvtR4WrjkyO`0P~R6G-iUGPj0z<%5FG;C=fZIRoq=S7AM zZ3-VYPLYxP6K-eOp~nV=b~Cs96b)tbWM9pR(w^Ha^J(*{F}(JeBo^S(mWs=yHkFnL6`PWn{-NvL{1r#F)DB}$kNhA!is zeeyT5hsw7jgu2CsM0--}qJtB$U}1gB$+w!%mfFJ`W+sytvn#qGi zhUvLPlVuA$TLr=%i8{m3ofrU~olul}gM_unbb#gU#-j;i!MOt9bN**ffT9zWcHKgs z8U93@3|@$o*-3qJaC*qIAhvN8FGl;Or`KV0Xc4i|yg@jpu`(+3e8`>iH+?vT@!ve=m|ERS4^@=Y- zBO*fopqA*0Xn_aTGB_@^n8JzylD*jD;{Z)YBzoirW@2rRCwi|)KY>YtupjX_5(}N# z`QYyChFW>>$GeP1>9()FhW!_^%Sw2xV~bT`{JqciE?30)5fmc(f1yRCc31VkTLS;x j1^B;(`TrRX;t7Bh{^hpOxOw;-6F^l_OQG_O<){AvjdV(a literal 0 HcmV?d00001