public static HealthReportModel CreateFrom(HealthReport report) { var uiReport = new HealthReportModel(new Dictionary <string, HealthReportEntryModel>(), report.TotalDuration) { StatusModel = (HealthStatusModel)report.Status }; foreach ((string key, HealthReportEntry value) in report.Entries) { var entry = new HealthReportEntryModel { Data = value.Data, Description = value.Description ?? string.Empty, Duration = value.Duration, StatusModel = (HealthStatusModel)value.Status }; if (value.Exception != null) { string message = value.Exception?.Message ?? string.Empty; entry.Exception = message; entry.Description = value.Description ?? message; } uiReport.Entries.Add(key, entry); } return(uiReport); }
/// <summary> /// 取报表 /// </summary> /// <param name="type"></param> /// <param name="date"></param> /// <param name="d"></param> /// <returns></returns> HealthReportModel getReport(int type, string date, Device d) { DateTime start = Convert.ToDateTime(date.Split('~')[0]); DateTime end = Convert.ToDateTime(date.Split('~')[1]); int space = (end - start).Days + 1; HealthReportModel model = null; HealthReportModel model1; HealthReportModel model2; //心率 if (type == 1 || (type == 4 || type == 3)) { model1 = HealthData.GetHealthReport(d.Imei, start, end, 1); model = model1; } //血压 if (type == 2 || (type == 4 || type == 3)) { model2 = HealthData.GetHealthReport(d.Imei, start, end, 2); if (model == null) { model = model2; } else { model.Items.AddRange(model2.Items); } model.Items = model.Items.OrderByDescending(p => p.LastUpdate).ToList(); } return(model); }
/// <summary> /// 取某段时间内健康数据报表 /// </summary> /// <param name="imei">设备imei</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="type">1:心率 2:血压,3全部</param> /// <returns></returns> public static HealthReportModel GetHealthReport(string imei, DateTime start, DateTime end, int type = 3) { HealthReportModel rm = new HealthReportModel(); try { APIHealthReportModel model = new APIHealthReportModel(); model.TypeId = type; model.Start = start; model.End = end; model.Imei = imei; rm = HttpApi.GetApiResult <HealthReportModel>("Health/GetHealthByType", model); ReadResource.ExecBack(rm, "HealthReport"); } catch (Exception ex) { LogHelper.ErrorLog(ex); return(new HealthReportModel { State = -1, Message = ex.Message }); } return(rm); }
/// <summary> /// 打印健康报表 /// </summary> /// <returns></returns> public static string PrintHealtReport(HealthReportModel info) { //命名导出表格的StringBuilder变量 StringBuilder sHtml = new StringBuilder(string.Empty); sHtml.Append("<tr height=\"20\" align=\"center\" style='background-color:#009688;'><td>测量时间</td><td>心率</td><td>收缩压</td><td>舒张压</td><td>步数</td><td>运动距离(KM)</td><td>卡里路(千卡)</td></tr>"); //打印列名 foreach (var v in info.Items) { sHtml.Append("<tr height=\"20\" align=\"center\"><td>" + v.LastUpdate + "</td><td>" + v.Heartbeat + "</td><td>" + v.Shrink + "</td><td>" + v.Diastolic + "</td><td>" + v.Steps + "</td><td>" + WebHelper.GetDistance(v.Steps) + "</td><td>" + WebHelper.GetCariello(v.Steps) + "</td></tr>"); } if (info.Items.Count == 0) { sHtml.Append("<tr height=\"30\"><td colspan=\"7\" align=\"center\">暂无数据</td></tr>"); } //打印表尾 // sHtml.Append("<tr height=\"40\"><td align=\"center\" colspan=\"5\" style='background-color:#CD0000;font-size:24px'><b>XXXXXXXX</a> </b></td></tr>"); return(sHtml.ToString()); //调用输出Excel表的方法 //ExportToExcel("application/ms-excel", "XXXXXX报价表.xls", sHtml.ToString()); }
public async Task <IActionResult> Get() { var reports = await healthCheckService.CheckHealthAsync(); var models = HealthReportModel.CreateFromReport(reports, "Identity"); return(Ok(models)); }
public async Task <IActionResult> Index() { var models = new List <HealthReportModel>(); models.AddRange(await endpointsHealthService.GetIdentityHealthReport()); models.AddRange(await endpointsHealthService.GetApiHealthReport()); models.AddRange(HealthReportModel.CreateFromReport(await healthCheckService.CheckHealthAsync(), "Admin")); return(View(models)); }
public static HealthReportModel CreateFrom(Exception exception, string entryName = "Endpoint") { var uiReport = new HealthReportModel(new Dictionary <string, HealthReportEntryModel>(), TimeSpan.FromSeconds(0)) { StatusModel = HealthStatusModel.Unhealthy }; uiReport.Entries.Add(entryName, new HealthReportEntryModel { Exception = exception.Message, Description = exception.Message, Duration = TimeSpan.FromSeconds(0), StatusModel = HealthStatusModel.Unhealthy }); return(uiReport); }
public static Task WriteHealthCheckJsonResponse(HttpContext httpContext, HealthReport report) { httpContext.Response.ContentType = DefaultContentType; return(httpContext.Response.WriteAsync(report == null ? Text : JsonSerializer.Serialize(HealthReportModel.CreateFrom(report), JsonSerializerOptions))); }
/// <summary> /// 获取监控报表 /// </summary> /// <param name="type">1:心率 2:血压,3全部,4步数</param> /// <param name="date">时间范围,用~隔开</param> /// <param name="deviceId">设备id</param> /// <returns></returns> public JsonResult AjaxGetHealthList(int type, string date, int deviceId) { Device d = DeviceLogic.GetDeviceById(deviceId); if (d != null) { DateTime start = Convert.ToDateTime(date.Split('~')[0]); DateTime end = Convert.ToDateTime(date.Split('~')[1]); int space = (end - start).Days + 1; //取报表 HealthReportModel model = getReport(type, date, d); List <HeathInfoAvg> avgHbs = new List <HeathInfoAvg>(); model.Items.ForEach(p => { p.Distance = WebHelper.GetDistance(p.Steps); p.Calorie = WebHelper.GetDistance(p.Steps); p.LastUpdate = p.LastUpdate.AddHours(8); //按时间段统计 if (type != 4 && (p.Heartbeat > 0 || p.Diastolic > 0)) { string dateKey = p.LastUpdate.ToString("yyyy-MM-dd 7:00") + "~" + p.LastUpdate.ToString("yyyy-MM-dd 22:00"); //DateTime _dt = p.LastUpdate.AddDays(-1); if (p.LastUpdate.Hour < 7) { dateKey = p.LastUpdate.AddDays(-1).ToString("yyyy-MM-dd 22:00") + "~" + p.LastUpdate.ToString("yyyy-MM-dd 7:00"); } else if (p.LastUpdate.Hour > 22) { dateKey = p.LastUpdate.ToString("yyyy-MM-dd 22:00") + "~" + p.LastUpdate.AddDays(1).ToString("yyyy-MM-dd 7:00"); } HeathInfoAvg agv = avgHbs.FirstOrDefault(t => t.DateKey == dateKey); if (agv == null) { agv = new HeathInfoAvg { DateKey = dateKey, Sum = p.Heartbeat, Sum2 = Convert.ToInt32(p.Shrink), Sum3 = Convert.ToInt32(p.Diastolic), SCount = p.Shrink > 0 ? 1 : 0, HCount = p.Heartbeat > 0 ? 1 : 0, Type = 3, LastDate = p.LastUpdate }; avgHbs.Add(agv); } else { if (p.Heartbeat > 0) { agv.HCount++; } if (p.Shrink > 0) { agv.SCount++; } agv.Sum += p.Heartbeat; agv.Sum2 += Convert.ToInt32(p.Shrink); agv.Sum3 += Convert.ToInt32(p.Diastolic); } } }); if (type == 4) { //按天统计 var _list = model.Items.GroupBy(p => p.LastUpdate.ToString("yyyy-MM-dd")).Select(g => new { Steps = g.Select(t => t.Steps).Max(), Distance = g.Select(t => t.Distance).Max(), Calorie = g.Select(t => t.Calorie).Max(), DateKey = g.Last().LastUpdate.ToString("yyyy-MM-dd") }).ToList(); if (_list.Count < space) { for (int i = 0; i < space; i++) { string _date = start.AddDays(i).ToString("yyyy-MM-dd"); if (!_list.Exists(p => p.DateKey == _date)) { _list.Add(new { Steps = 0, Distance = 0.0M, Calorie = 0.0M, DateKey = _date }); } } } return(Json(new { code = 0, data = model.Items.Where(p => p.Steps > 0).ToList(), extend = _list.OrderByDescending(p => p.DateKey) })); } else { avgHbs = avgHbs.OrderByDescending(p => p.LastDate).ToList(); ////最小时间替换成开始时间 if (avgHbs.Count > 0)// avgHbs[0].DateKey.Split('~')[0] { avgHbs[0].DateKey = avgHbs[0].DateKey.Split('~')[0] + "~" + end.ToString("MM-dd HH:mm"); avgHbs[avgHbs.Count - 1].DateKey = start.ToString("yyyy-MM-dd HH:mm") + "~" + avgHbs[avgHbs.Count - 1].DateKey.Split('~')[1]; } ////最大时间替换成结束时间 //if (avgHbs.Count > 1) // avgHbs[avgHbs.Count - 1].DateKey = start.ToString("yyyy-MM-dd HH:mm") + "~" + avgHbs[avgHbs.Count - 1].DateKey.Split('~')[1]; return(Json(new { code = 0, data = model.Items.Where(p => (p.Heartbeat > 0 || p.Diastolic > 0)).ToList(), extend = avgHbs })); } } else { return(Json(new { code = State.NotFind, msg = "设备不存在!" })); } }
public void BatchExportReport(int type, string date, string deviceIds = "") { //居民不能批量倒 if (AuthUser.UserTypeId == 4) { return; } var dAndU = DeviceLogic.GetDeviceList(AuthUser.UserTypeId.Value, AuthUser.Id, 1, 10000); if (string.IsNullOrWhiteSpace(deviceIds)) { foreach (var v in dAndU) { deviceIds += v.DeviceId + ","; } deviceIds.TrimEnd(','); } string[] strs = deviceIds.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); StringBuilder sHtml = new StringBuilder(); //打印表头 sHtml.Append("<table border=\"1\" width=\"90%\">"); sHtml.Append("<tr><td colspan=\"7\" style='font-size:16px;'>时间段:<b>" + date + "</b></td></tr>"); foreach (string str in strs) { int _dId = Convert.ToInt32(str); var _u = dAndU.FirstOrDefault(p => p.DeviceId == _dId); //不在名下不能倒 if (_u == null) { continue; } var _d = DeviceLogic.GetDeviceById(_dId); if (_d == null) { continue; } HealthReportModel _model = getReport(type, date, _d); sHtml.Append("<tr height=\"30\"><td colspan=\"7\" align=\"left\" style='font-size:16px;font-weight:600;'><b>" + (!string.IsNullOrWhiteSpace(_u.UserName) ? _u.UserName : "") + " 设备号:" + _u.Imei + "</b></td></tr>"); sHtml.Append(PrintReport.PrintHealtReport(_model)); } sHtml.Append("</table>"); Response.ContentType = "application/ms-excel"; Response.ContentEncoding = Encoding.UTF8; Response.Charset = "utf-8"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + AuthUser.UserName + " 管辖居民健康报表.xls"); System.IO.StringWriter tw = new System.IO.StringWriter(); // Response.Output.Write(sHtml.ToString()); Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=utf-8\"/>" + sHtml.ToString()); /*乱码BUG修改 20140505*/ //如果采用以上代码导出时出现内容乱码,可将以下所注释的代码覆盖掉上面【System.Web.HttpContext.Current.Response.Output.Write(ExcelContent.ToString());】即可实现。 //System.Web.HttpContext.Current.Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=utf-8\"/>" + ExcelContent.ToString()); Response.Flush(); Response.End(); }