/// <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); }
/// <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)); }