/// <summary> /// ajax请求设备的历史轨迹 /// </summary> /// <param name="deviceId"></param> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public JsonResult AjaxGetHistory(int deviceId, DateTime start, DateTime end) { Device d = DeviceLogic.GetDeviceById(deviceId); if (d == null) { return(Json(new BaseResult { State = State.NotFind, Message = "未找到该设备" })); } HistoryModel model = DeviceData.GetHistory(d.APIDeviceId ?? 0, start, end, CacheHelper.GetToken(d.UserId)); if (model.State == 0 || model.State == 10) { model.Items.ForEach(p => { p.Time = Convert.ToDateTime(p.Time).AddHours(8).ToString("yyyy-MM-dd HH:mm:ss"); }); return(Json(new { State = State.Success, data = model.Items })); } else { return(Json(new BaseResult { State = State.Falid, Message = model.Message })); } }
/// <summary> /// 请求用户的健康数据 /// </summary> /// <param name="deviceId"></param> /// <returns></returns> public JsonResult AjaxGetHealthInfo(int deviceId) { Device d = DeviceLogic.GetDeviceById(deviceId); if (d == null) { return(Json(new BaseResult { State = State.NotFind, Message = "未找到该设备" })); } HealthInfoModel model = HealthData.GetHealthInfo(d.APIDeviceId ?? 0); return(Json(new { State = State.Success, Item = model })); }
/// <summary> /// 获取设备指令列表 /// </summary> /// <param name="type">1用户id,2设备id</param> /// <param name="objId"></param> /// <returns></returns> public JsonResult AjaxGetCmdListAndLog(int type, int objId) { Device d = null; if (type == 1) { d = DeviceLogic.GetDeviceByUserId(objId); } else if (type == 2) { d = DeviceLogic.GetDeviceById(objId); } if (d == null) { return(Json(new BaseResult { State = State.NotFind, Message = "未找到绑定设备" })); } List <CmdConfig> ccList = CmdLogic.GetCmdList(d.APIDeviceModel ?? 0); List <CmdLog> clList = CmdLogic.GetCmdLogs(d.Imei); List <CmdQueue> qList = CmdLogic.GetQueueByDeviceId(d.APIDeviceId ?? 0); foreach (var q in qList) { CmdConfig _c = ccList.FirstOrDefault(p => p.CmdCode == q.CmdCode); if (_c != null) { _c.CmdValue = (q.ExceTime ?? 0).ToString(); } } return(Json(new { State = State.Success, UserName = AuthUser.LoginName, CmdList = ccList, LogList = clList, Imei = d.Imei, DeviceId = d.Id })); }
/// <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(); }
/// <summary> /// 下发指令 /// </summary> /// <param name="cmdCode">指令code</param> /// <param name="deviceId">设备id</param> /// <returns></returns> public JsonResult AjaxSendCmd(string cmdCode, int deviceId, string param, int min) { BaseResult res = new BaseResult(); Device d = DeviceLogic.GetDeviceById(deviceId); CmdConfig cmd = CmdLogic.GetCmdConfigByCode(cmdCode, d.APIDeviceModel.Value); if ((d.APIDeviceModel ?? 0) <= 0) { res.Message = "指令下发失败,设备型号为空!"; res.State = State.Falid; return(Json(res)); } CmdLog log = new CmdLog(); log.CmdCode = cmdCode; log.CmdName = cmd.CmdName; log.Imei = d.Imei; log.Param = param; log.IsSucess = false; log.SendLoginName = AuthUser.LoginName; //是否立即下发,不是的加入队列 if ((cmd.IsNowSend ?? true) == false)//设置主动上传间隔 { log.SendDate = DateTime.Now; if (min > 0) { CmdQueue queue = new CmdQueue(); queue.APIDeviceId = d.APIDeviceId; queue.Model = d.APIDeviceModel.Value; queue.CmdCode = cmdCode; queue.Created = DateTime.Now; queue.LastExecTime = DateTime.Now; queue.Param = param; queue.ExceTime = min; queue.IMEI = d.Imei; queue.Notice = AuthUser.LoginName; CmdLogic.SaveCmdQueue(queue); SaveUserLog(AuthUser.LoginName + "设置了设备" + d.Imei + cmd.CmdName + ":" + min + "分钟", LogLevel.Info, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); } else { CmdLogic.DelCmdQueue(cmdCode, d.APIDeviceId.Value); } log.CmdName = cmd.CmdName + ":" + min + "分钟"; res.State = State.Success; res.Message = "设置成功," + min + "分钟"; //return Json(res); } else if (d != null) { log.SendDate = DateTime.Now; SendCmdModel model = DeviceData.SendCmd(cmdCode, d.APIDeviceId ?? 0, d.APIDeviceModel ?? 0, CacheHelper.GetToken(d.UserId), param); if (model.State != 0) { res.State = State.Falid; res.Message = model.Content + ":" + model.Message; SaveUserLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd.CmdName + "指令失败:" + res.Message, LogLevel.Sensitive, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); } else { log.IsSucess = true; res.State = State.Success; res.Message = model.Content; SaveUserLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd.CmdName + "指令:" + res.Message, LogLevel.Info, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); //WriteLog( + res.Message); } log.Response = model.State + "|" + res.Message; log.ResponseTime = DateTime.Now; } else { res.State = State.NotFind; res.Message = "设备不存在"; WriteLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd + "指令失败:" + res.Message); } //保存指令下发记录 CmdLogic.SaveCmdLog(log); if (res.Message.StartsWith("Off")) { res.Message = "设备不线,指令离线下发"; } return(Json(res)); }