Exemple #1
0
        /// <summary>
        /// 设置指令的缓存
        /// </summary>
        /// <param name="cmdCode"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static CmdConfig GetCachCmdConfig(string cmdCode, int model)
        {
            string    key = "cmd_" + cmdCode + model;
            CmdConfig cmd = GetCache(key) as CmdConfig;

            if (cmd == null)
            {
                cmd = CmdLogic.GetCmdConfigByCode(cmdCode, model);
            }
            SetCache(key, cmd, 3600);//一个小时过期
            return(cmd);
        }
Exemple #2
0
        /// <summary>
        /// 启动指令队列
        /// </summary>
        /// <param name="second">执行时间间隔,默认10分钟</param>
        public static void StartCmdQueue(int second = 600)
        {
            //最少一分钟跑一次
            if (second < 60)
            {
                second = 60;
            }
            ThreadPool.QueueUserWorkItem(p =>
            {
                while (true)
                {
                    try
                    {
                        List <CmdQueue> list = CmdLogic.GetCmdQueues();
                        InLogQueue("获取到待执行指令数量:" + list.Count(), LogLevel.Info, "local");
                        if (list.Count > 0)
                        {
                            foreach (var l in list)
                            {
                                //多个指令以_区分
                                string[] cmdCodes = l.CmdCode.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                                foreach (string code in cmdCodes)
                                {
                                    CmdConfig cmd      = CacheHelper.GetCachCmdConfig(code, l.Model);
                                    CmdLog log         = new CmdLog();
                                    log.CmdCode        = code;
                                    log.CmdName        = l.ExceTime + "分钟:" + cmd.CmdName;
                                    log.Imei           = l.IMEI;
                                    log.Param          = l.Param;
                                    log.IsSucess       = false;
                                    log.SendLoginName  = l.Notice;
                                    log.SendDate       = DateTime.Now;
                                    SendCmdModel model = DeviceData.SendCmd(code, l.APIDeviceId ?? 0, l.Model, CacheHelper.GetTokenByDeviceId(l.IMEI), l.Param);
                                    log.IsSucess       = model.State == 0;
                                    log.Notice         = "每隔" + l.ExceTime + "分钟下发主动监测。";
                                    log.Response       = model.Content + ":" + model.Message;
                                    log.ResponseTime   = DateTime.Now;
                                    CmdLogic.SaveCmdLog(log);//保存日志
                                }
                                CmdLogic.UpdateQueueTime(l);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        InLogQueue_Error(ex, "local");
                    }

                    Thread.Sleep(second * 1000);
                }
            });
        }
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="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));
        }