コード例 #1
0
            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);
            }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: HealthData.cs プロジェクト: caoxianbing/HWeb
        /// <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);
        }
コード例 #4
0
        /// <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());
        }
コード例 #5
0
        public async Task <IActionResult> Get()
        {
            var reports = await healthCheckService.CheckHealthAsync();

            var models = HealthReportModel.CreateFromReport(reports, "Identity");

            return(Ok(models));
        }
コード例 #6
0
        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));
        }
コード例 #7
0
            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);
            }
コード例 #8
0
 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)));
 }
コード例 #9
0
        /// <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 = "设备不存在!" }));
            }
        }
コード例 #10
0
        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 : "") + "&nbsp;&nbsp;&nbsp;设备号:" + _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();
        }