Exemple #1
0
        /// <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
                }));
            }
        }
Exemple #2
0
        /// <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 }));
        }
Exemple #3
0
        /// <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 }));
        }
Exemple #4
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 = "设备不存在!" }));
            }
        }
Exemple #5
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();
        }
Exemple #6
0
        /// <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));
        }