public IHttpActionResult DepartAlarmTypeStatistics(DepartAlarmStatisticsModel query) { if (query == null || string.IsNullOrEmpty(query.From) || string.IsNullOrEmpty(query.To)) { return(BadRequest()); } try { if (!UserController.LoginDictionary.ContainsKey(GetCookie("token"))) { return(Logout()); } UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")]; if (userCookie == null) { return(Logout()); } if (query.DepartmentID == 0) { query.DepartmentID = userCookie.DepartmentID; } query.From = Convert.ToDateTime(query.From).ToString("yyyy-MM-dd 00:00:00"); query.To = Convert.ToDateTime(query.To).ToString("yyyy-MM-dd 23:59:59"); var result = CabinetLog.DepartAlarmTypeStatistics(query.DepartmentID, query.From, query.To); return(Success(result)); } catch (Exception ex) { _logger.Error(ex); return(Failure("提交失败")); } }
public IHttpActionResult GetAll() { try { var cabinetList = Cabinet.GetAll().FindAll(m => (m.Status == 1 || m.Status == 4)); foreach (var m in cabinetList) { var log = CabinetLog.GetOpenLog(m.ID); if (log == null || log.CreateTime.AddSeconds(60) < DateTime.Now) { m.Status = 3; Cabinet.Update(m); _logger.Info("自动重置关闭"); } } var list = Cabinet.GetAll(); var model = list.Select(m => new BxgModel { Name = m.Name, Mac = m.AndroidMac, IP = m.IP, IsOnline = m.IsOnline ?? false, LastOnlineTime = (m.LastOnlineTime == null) ? "" : m.LastOnlineTime?.ToString("yyyy-MM-dd HH:mm:ss"), //正常开门 = 1, //正常关门 = 3, //非工作时间开门 = 4, //非工作时间关门 = 5, //外部电源断开 = 6, //备份电源电压低 = 7, //未按规定关门 = 8, //强烈震动 = 9, //网络断开 = 10, Status = (m.Status == 1 || m.Status == 4) ? 1 : 0, StatusDes = (m.Status == null ? "" : Enum.GetName(typeof(OperatorTypeEnum), m.Status)), }).ToList(); var item = new ResultModel() { Success = 1, Message = "", Data = model }; return(Json <ResultModel>(item)); } catch (Exception ex) { logger.Error(ex); var item = new ResultModel() { Success = 0, Message = "获取数据失败", Data = null }; return(Json <ResultModel>(item)); } }
private void AddLog(Cabinet cabinet, CommandRequest request) { var log = new CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = request.UserName, OperateTime = DateTime.Now, OperationType = request.OperatorType, CreateTime = DateTime.Now, CabinetIP = GetIP(), EventContent = JsonConvert.SerializeObject(request) }; CabinetLog.Add(log); }
public IHttpActionResult DeleteCabinetLog(List <int> ids) { try { if (ids?.Count == 0) { return(BadRequest()); } CabinetLog.Delete(ids); return(Success()); } catch (Exception ex) { _logger.Error(ex); return(Failure("查询失败")); } }
public IHttpActionResult DepartMonthAlarmStatistics(DepartAlarmStatisticsModel query) { if (query == null || string.IsNullOrEmpty(query.From) || string.IsNullOrEmpty(query.To)) { return(BadRequest()); } try { if (!UserController.LoginDictionary.ContainsKey(GetCookie("token"))) { return(Logout()); } UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")]; if (userCookie == null) { return(Logout()); } if (query.DepartmentID == 0) { query.DepartmentID = userCookie.DepartmentID; } MonthAlarmStatisticsModel model = new Models.MonthAlarmStatisticsModel(); model.Year = DateTime.Parse(query.From).Year.ToString(); model.Data = new List <int>(); query.From = Convert.ToDateTime(query.From).ToString("yyyy-MM-dd 00:00:00"); query.To = Convert.ToDateTime(query.To).ToString("yyyy-MM-dd 23:59:59"); var result = CabinetLog.DepartMonthAlarmStatistics(query.DepartmentID, query.From, query.To); if (result.Count > 0) { for (int i = 1; i <= 12; i++) { var item = result.Find(m => m.Month == i); model.Data.Add(item == null ? 0 : item.Count); } } return(Success(model)); } catch (Exception ex) { _logger.Error(ex); return(Failure("查询失败")); } }
public IHttpActionResult QueryCabinetLog(CabinetLogSearchModel search) { try { if (search == null) { return(BadRequest()); } if (search.PageIndex == 0) { search.PageIndex = 1; } if (search.PageSize == 0) { search.PageSize = 20; } if (!UserController.LoginDictionary.ContainsKey(GetCookie("token"))) { return(Logout()); } UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")]; if (userCookie == null) { return(Logout()); } List <Department> departList = new List <Department>(); if ((search.DepartmentID ?? 0) != 0) { departList = Department.GetAllChildren(search.DepartmentID.Value); } else { departList = Department.GetAllChildren(userCookie.DepartmentID); } var result = CabinetLog.GetCabinets(search, departList.Select(m => m.ID).ToList()); if (result.Items.Count > 0) { var cabinet = Cabinet.GetCabinetByIds(result.Items.Select(m => m.CabinetID).ToList()); var depart = Department.GetAll(result.Items.Select(m => m.DepartmentID ?? 0).ToList()); result.Items.ForEach(m => { m.OperationType = m.OperationType; m.CabinetName = cabinet.Find(n => n.ID == m.CabinetID)?.Name; m.DepartmentName = depart.Find(n => n.ID == m.DepartmentID)?.Name; m.CabinetCode = cabinet.Find(n => n.ID == m.CabinetID)?.Code; if (!string.IsNullOrEmpty(m.EventContent) && m.EventContent.ToLower().Contains("photos")) { //有事件 CommandRequest req = JsonConvert.DeserializeObject <CommandRequest>(m.EventContent); if (req != null && req.Photos != null && req.Photos.Count > 0) { for (int i = 0; i < req.Photos.Count; i++) { req.Photos[i] = ImgToBase64String(req.Photos[i]); } m.EventContent = JsonConvert.SerializeObject(req); } } }); } return(Success(result)); } catch (Exception ex) { _logger.Error(ex); return(Failure("查询失败")); } }
public IHttpActionResult SubmitLog(CommandDeal cmd) { if (cmd == null) { return(BadRequest()); } try { if (!UserController.LoginDictionary.ContainsKey(GetCookie("token"))) { return(Logout()); } UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")]; if (userCookie == null) { return(Logout()); } _logger.Warn(JsonConvert.SerializeObject(cmd)); if (cmd.OperationType == (int)OperatorTypeEnum.允许开门 || cmd.OperationType == (int)OperatorTypeEnum.拒绝开门 || cmd.OperationType == (int)OperatorTypeEnum.接受语音 || cmd.OperationType == (int)OperatorTypeEnum.拒绝语音 || cmd.OperationType == (int)OperatorTypeEnum.允许终端修改信息 || cmd.OperationType == (int)OperatorTypeEnum.拒绝终端修改信息 || cmd.OperationType == (int)OperatorTypeEnum.允许人员注册 || cmd.OperationType == (int)OperatorTypeEnum.拒绝人员注册) { string authcode = cmd.AuthCode; lock (AndroidController.CommandDictionaryLock) { AndroidController.CommandDictionary.Add(new CommandResponse { OperationType = cmd.OperationType, AuthCode = cmd.AuthCode, ID = cmd.CabinetID, CreateTime = DateTime.Now }); } //if (AndroidController.CommandDictionary.ContainsKey(cmd.CabinetID)) // AndroidController.CommandDictionary[cmd.CabinetID] =new CommandResponse { OperationType= cmd.OperationType ,AuthCode=authcode} ; //else // AndroidController.CommandDictionary.TryAdd(cmd.CabinetID, new CommandResponse { OperationType = cmd.OperationType, AuthCode = authcode }); } CabinetLog log = new CabinetLog(); log.CabinetID = cmd.CabinetID; log.OperationType = cmd.OperationType; log.OperatorName = userCookie.Name; log.DepartmentID = userCookie.DepartmentID; log.EventContent = cmd.EventContent; log.OperateTime = DateTime.Now; log.CreateTime = DateTime.Now; log.Remark = cmd.Remark; CabinetLog.Add(log); if (cmd.OperationType == (int)OperatorTypeEnum.解除报警) { var cab = Cabinet.GetOne(cmd.CabinetID); if (cab != null) { cab.Alarm = ""; cab.Status = 23; Cabinet.Update(cab); } } return(Success()); } catch (Exception ex) { _logger.Error(ex); return(Failure("提交失败")); } }
private void SyncCabinet() { int interval = 30; if (!string.IsNullOrEmpty(pingInterval)) { int.TryParse(pingInterval, out interval); } Thread.Sleep(interval * 1000); while (true) { try { //删除5分钟之前的命令 lock (AndroidController.logLock) AndroidController.CabinetLogQueue.RemoveAll(m => m.CreateTime.AddMinutes(5) < DateTime.Now); //List<string> keys = UserController.LoginDictionary.Keys.ToList(); //foreach (var key in keys) //{ // if (UserController.LoginDictionary.ContainsKey(key)) // { // if( UserController.LoginDictionary[key].LastLoginTime!=null&&(DateTime.Now- UserController.LoginDictionary[key].LastLoginTime.Value).TotalHours > 24) // { // logger.Error("自动退出 " + key + " " + UserController.LoginDictionary[key].LastLoginTime.Value.ToString("yyyy.MM.dd HH:mm:ss")); // UserController.LoginDictionary.Remove(key); // } // } //} } catch (Exception ex) { logger.Error(ex); } try { //List<int> onLine = new List<int>(); //List<int> offLine = new List<int>(); List <CabinetData.Entities.CabinetLog> logs = new List <CabinetData.Entities.CabinetLog>(); var cabinetList = CabinetData.Entities.Cabinet.GetAll(); foreach (var cabinet in cabinetList) { bool isOnline = false; if (cabinet.IsOnline ?? false)//在线 { //如果保险柜在线,检测是否下线 if (!AndroidController.HeartDictionary.ContainsKey(cabinet.ID) || (AndroidController.HeartDictionary.ContainsKey(cabinet.ID) && AndroidController.HeartDictionary[cabinet.ID].AddSeconds(interval) < DateTime.Now)) { //string host = cabinet.IP; //Ping p1 = new Ping(); //PingReply reply = p1.Send(host); //发送主机名或Ip地址 //if (reply.Status != IPStatus.Success) //{ logger.Warn("03保险柜在线,心跳不在且ping不通下线" + cabinet.ID + ":" + cabinet.IP); //offLine.Add(cabinet.ID); var log = new CabinetData.Entities.CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = "", OperateTime = DateTime.Now, OperationType = (int)OperatorTypeEnum.线, CreateTime = DateTime.Now, CabinetIP = "", EventContent = "超时下线" }; logs.Add(log); CabinetData.Entities.Cabinet.UpdateOffLine(new List <int> { cabinet.ID }); lock (AndroidController.logLock) { AndroidController.msgID++; log.ID = AndroidController.msgID; AndroidController.CabinetLogQueue.Add(log); } DateTime dt; AndroidController.HeartDictionary.TryRemove(cabinet.ID, out dt); //} } } else { if (AndroidController.HeartDictionary.ContainsKey(cabinet.ID) && AndroidController.HeartDictionary[cabinet.ID].AddSeconds(interval) > DateTime.Now)//如果存在 { logger.Warn("01保险柜不在线,心跳上线" + cabinet.ID + ":" + cabinet.IP); isOnline = true; } else { //string host = cabinet.IP; //Ping p1 = new Ping(); //PingReply reply = p1.Send(host); //发送主机名或Ip地址 //if (reply.Status == IPStatus.Success) //{ // logger.Warn("02保险柜不在线,ping上线" + cabinet.ID + ":" + cabinet.IP); // isOnline = true; //} } if (isOnline) { //onLine.Add(cabinet.ID); var log = new CabinetData.Entities.CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = "", OperateTime = DateTime.Now, OperationType = (int)OperatorTypeEnum.线, CreateTime = DateTime.Now, CabinetIP = "", EventContent = "" }; logs.Add(log); CabinetData.Entities.Cabinet.UpdateOnLine(new List <int> { cabinet.ID }); lock (AndroidController.logLock) { AndroidController.msgID++; log.ID = AndroidController.msgID; AndroidController.CabinetLogQueue.Add(log); } } } } if (logs.Count > 0) { CabinetLog.Add(logs); } } catch (Exception ex) { logger.Error(ex); } finally { Thread.Sleep(3000); } } }
public IHttpActionResult Command(CommandRequest request) { if (request == null) { return(Failure("请求命令无效")); } if (string.IsNullOrEmpty(request.Mac)) { return(Failure("必须指定mac地址")); } try { _logger.Info(JsonConvert.SerializeObject(request)); var cabinet = Cabinet.GetByMac(request.Mac); if (cabinet == null) { return(Failure("未找到指定保险柜")); } #region 心跳 if (request.OperatorType == (int)OperatorTypeEnum.心跳) { if (HeartDictionary.ContainsKey(cabinet.ID)) { HeartDictionary[cabinet.ID] = DateTime.Now; } else { HeartDictionary.TryAdd(cabinet.ID, DateTime.Now); } CommandResponse res = null; int type = -1; lock (CommandDictionaryLock) { var item = CommandDictionary.Find(m => m.ID == cabinet.ID); if (item != null) { res = item; CommandDictionary.Remove(item); } } if (res != null) { type = res.OperationType; var msg = "AuthCode-" + res.AuthCode; if (type == (int)OperatorTypeEnum.允许开门) { //cabinet.Status = (int)OperatorTypeEnum.允许开门; //cabinet.Alarm = ""; //cabinet.IsOpen = true; //Cabinet.Update(cabinet); return(Success1("允许开门", msg)); } else if (type == (int)OperatorTypeEnum.拒绝开门) { return(Success1("拒绝开门", msg)); } else if (type == (int)OperatorTypeEnum.拒绝语音) { return(Success1("拒绝语音", msg)); } else if (type == (int)OperatorTypeEnum.接受语音) { return(Success1("接受语音", msg)); } else if (type == (int)OperatorTypeEnum.允许终端修改信息) { return(Success1("允许终端修改信息", msg)); } else if (type == (int)OperatorTypeEnum.拒绝终端修改信息) { return(Success1("拒绝终端修改信息", msg)); } else if (type == (int)OperatorTypeEnum.允许人员注册) { return(Success1("允许人员注册", msg)); } else if (type == (int)OperatorTypeEnum.拒绝人员注册) { return(Success1("拒绝人员注册", msg)); } } return(Success()); } #endregion #region 增加请求日志 var log = new CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = request.UserName, OperateTime = DateTime.Now, OperationType = request.OperatorType, CreateTime = DateTime.Now, CabinetIP = GetIP(), EventContent = JsonConvert.SerializeObject(request), Remark = request.AuthCode }; CabinetLog.Add(log); #endregion #region 开门申请 if (request.OperatorType == (int)OperatorTypeEnum.申请开门) { if (!(cabinet.NeedConfirm ?? true)) { lock (CommandDictionaryLock) { CommandDictionary.Add(new CommandResponse { OperationType = (int)OperatorTypeEnum.允许开门, AuthCode = request.AuthCode, ID = cabinet.ID, CreateTime = DateTime.Now }); } request.OperatorType = (int)OperatorTypeEnum.允许开门; request.EventContent = "不需要审核自动开门"; AddLog(cabinet, request); return(Success()); } #region 密码开门 else if (request.Method == 0) { if (string.IsNullOrEmpty(request.Password)) { CabinetLog.Add(new CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = request.UserName, OperateTime = DateTime.Now, OperationType = (int)OperatorTypeEnum.密码错误, CreateTime = DateTime.Now, CabinetIP = GetIP(), EventContent = JsonConvert.SerializeObject(request) }); _loggerError.Error("密码不得为空"); return(Failure("密码不得为空")); } var first = string.IsNullOrEmpty(cabinet.FirstContactPassword) ? "" : AESAlgorithm.Decrypto(cabinet.FirstContactPassword); var second = string.IsNullOrEmpty(cabinet.SecondContactPassword) ? "" : AESAlgorithm.Decrypto(cabinet.SecondContactPassword); if (first != request.Password && second != request.Password) { CabinetLog.Add(new CabinetLog { CabinetID = cabinet.ID, DepartmentID = cabinet.DepartmentID, OperatorName = request.UserName, OperateTime = DateTime.Now, OperationType = (int)OperatorTypeEnum.密码错误, CreateTime = DateTime.Now, CabinetIP = GetIP(), EventContent = JsonConvert.SerializeObject(request) }); _loggerError.Error("密码错误 " + request.Password + " [" + cabinet.FirstContactPassword + ":" + first + "] [" + cabinet.SecondContactPassword + ":" + second + "]"); return(Failure("密码错误")); } } #endregion #region 加入前台提醒 lock (logLock) { msgID++; log.ID = msgID; CabinetLogQueue.Add(log); } return(Success("等待审核")); #endregion } #endregion #region 语音申请||终端修改信息||申请人员注册 else if (request.OperatorType == (int)OperatorTypeEnum.请求语音 || request.OperatorType == (int)OperatorTypeEnum.终端修改信息 || request.OperatorType == (int)OperatorTypeEnum.申请人员注册) { lock (logLock) { msgID++; log.ID = msgID; CabinetLogQueue.Add(log); } return(Success("等待审核")); } #endregion #region 关门确认 else if (request.OperatorType == (int)OperatorTypeEnum.正常关门) { if (DateTime.Now.Hour < 9 || DateTime.Now.Hour > 17 || DateTime.Now.DayOfWeek == DayOfWeek.Sunday || DateTime.Now.DayOfWeek == DayOfWeek.Saturday) { cabinet.Status = (int)OperatorTypeEnum.非工作时间关门; cabinet.Alarm = OperatorTypeEnum.非工作时间关门.ToString(); } else { cabinet.Status = (int)OperatorTypeEnum.正常关门; cabinet.Alarm = ""; } cabinet.IsOpen = false; Cabinet.Update(cabinet); } #endregion #region 开门确认 else if (request.OperatorType == (int)OperatorTypeEnum.正常开门) { if (DateTime.Now.Hour < 9 || DateTime.Now.Hour > 17 || DateTime.Now.DayOfWeek == DayOfWeek.Sunday || DateTime.Now.DayOfWeek == DayOfWeek.Saturday) { cabinet.Status = (int)OperatorTypeEnum.非工作时间开门; cabinet.Alarm = OperatorTypeEnum.非工作时间开门.ToString(); } else { cabinet.Status = (int)OperatorTypeEnum.正常开门; cabinet.Alarm = ""; } cabinet.IsOpen = true; Cabinet.Update(cabinet); } #endregion #region 应急钥匙开门 else if (request.OperatorType == (int)OperatorTypeEnum.应急钥匙开门) { cabinet.Status = (int)OperatorTypeEnum.应急钥匙开门; cabinet.Alarm = OperatorTypeEnum.应急钥匙开门.ToString(); cabinet.IsOpen = true; Cabinet.Update(cabinet); } #endregion #region 其他请求 else { cabinet.Status = request.OperatorType; cabinet.Alarm = Enum.GetName(typeof(OperatorTypeEnum), cabinet.Status); Cabinet.Update(cabinet); } #endregion lock (logLock) { msgID++; log.ID = msgID; CabinetLogQueue.Add(log); } return(Success()); } catch (Exception ex) { logger.Error(ex); return(Failure("上报失败")); } }