Пример #1
0
        public IHttpActionResult CheckVersion(string mac, string version)
        {
            if (string.IsNullOrEmpty(mac) || string.IsNullOrEmpty(version))
            {
                return(Failure("mac or version can't be empty"));
            }
            var cabinet = Cabinet.GetByMac(mac);

            if (cabinet == null)
            {
                return(Failure("this cabinet is not register"));
            }
            if (string.IsNullOrEmpty(cabinet.AndroidVersion))
            {
                cabinet.AndroidVersion = version;
                Cabinet.Update(cabinet);
            }
            if (version != cabinet.AndroidVersion)
            {
                return(Success("/files/" + cabinet.AndroidVersion + ".apk"));
            }
            else
            {
                return(Success(""));
            }
        }
Пример #2
0
        public IHttpActionResult AddCabinet(Cabinet cabinet)
        {
            try
            {
                string valiate = ValiateCabinetModel(cabinet);
                if (!string.IsNullOrEmpty(valiate))
                {
                    return(Failure(valiate));
                }
                if (Cabinet.GetByName(cabinet.Name) != null)
                {
                    return(Failure("该名称已经被使用"));
                }
                if (Cabinet.GetByMac(cabinet.AndroidMac) != null)
                {
                    return(Failure("该硬件编码已经被使用"));
                }

                if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
                {
                    return(Logout());
                }
                UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
                if (userCookie == null)
                {
                    return(Logout());
                }
                SystemLog.Add(new SystemLog
                {
                    Action       = "AddCabinet",
                    LogContent   = userCookie.Name + "-新增保险柜-" + cabinet.Name,
                    CreateTime   = DateTime.Now,
                    UserID       = userCookie.ID,
                    RoleID       = userCookie.RoleID,
                    DepartmentID = userCookie.DepartmentID,
                    ClientIP     = GetIP(),
                    UserName     = userCookie.Name,
                    RealName     = userCookie.RealName
                });
                cabinet.CreateTime = DateTime.Now;
                cabinet.IsOnline   = false;
                if (!string.IsNullOrEmpty(cabinet.FirstContactPassword))
                {
                    cabinet.FirstContactPassword = AESAlgorithm.Encrypto(cabinet.FirstContactPassword);
                }
                if (!string.IsNullOrEmpty(cabinet.SecondContactPassword))
                {
                    cabinet.SecondContactPassword = AESAlgorithm.Encrypto(cabinet.SecondContactPassword);
                }
                Cabinet.Add(cabinet);
                return(Success(true));
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(Failure("新增失败"));
            }
        }
Пример #3
0
        public IHttpActionResult EditCabinet(Cabinet cabinet)
        {
            try
            {
                string valiate = ValiateCabinetModel(cabinet);
                if (!string.IsNullOrEmpty(valiate))
                {
                    return(Failure(valiate));
                }
                if (!UserController.LoginDictionary.ContainsKey(GetCookie("token")))
                {
                    return(Logout());
                }
                UserInfo userCookie = UserController.LoginDictionary[GetCookie("token")];
                if (userCookie == null)
                {
                    return(Logout());
                }
                if (cabinet.ID == 0)
                {
                    return(Failure("未指定保险柜"));
                }
                var cab = Cabinet.GetOne(cabinet.ID);
                if (cab == null)
                {
                    return(Failure("未找到指定保险柜"));
                }
                var old = Cabinet.GetByName(cabinet.Name);
                if (old != null && old.ID != cabinet.ID)
                {
                    return(Failure("该名称已经被使用"));
                }

                old = Cabinet.GetByMac(cabinet.AndroidMac);
                if (old != null && old.ID != cabinet.ID)
                {
                    return(Failure("该硬件编码已经被使用"));
                }


                SystemLog.Add(new SystemLog
                {
                    Action       = "EditCabinet",
                    LogContent   = userCookie.Name + "-编辑保险柜-" + cabinet.ID,
                    CreateTime   = DateTime.Now,
                    UserID       = userCookie.ID,
                    RoleID       = userCookie.RoleID,
                    DepartmentID = userCookie.DepartmentID,
                    ClientIP     = GetIP(),
                    UserName     = userCookie.Name,
                    RealName     = userCookie.RealName
                });
                cab.Address              = cabinet.Address;
                cab.AndroidMac           = cabinet.AndroidMac;
                cab.Code                 = cabinet.Code;
                cab.DepartmentID         = cabinet.DepartmentID;
                cab.FirstContact         = cabinet.FirstContact;
                cab.FirstContactPassword = AESAlgorithm.Encrypto(cabinet.FirstContactPassword);
                cab.FirstContactPhone    = cabinet.FirstContactPhone;

                cab.IP            = cabinet.IP;
                cab.Name          = cabinet.Name;
                cab.NeedConfirm   = cabinet.NeedConfirm;
                cab.Remark        = cabinet.Remark;
                cab.SecondContact = cabinet.SecondContact;

                cab.SecondContactPassword = AESAlgorithm.Encrypto(cabinet.SecondContactPassword);
                cab.SecondContactPhone    = cabinet.SecondContactPhone;

                Cabinet.Update(cab);
                return(Success(true));
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(Failure("修改失败"));
            }
        }
Пример #4
0
        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("上报失败"));
            }
        }