/// <summary> /// 初使化设备 /// </summary> public bool InitDevice() { List <SmartWeb.Models.Component> list = new List <SmartWeb.Models.Component>(); using (var con = new MyContext()) { list = con.Component.Where(c => c.Type != ComponentType.WEB && c.Line == 0).ToList(); } if (list.Count > 0) { var deviceInfos = ProtoBDManager.DeviceQuery(null); foreach (var item in deviceInfos) { var type = ManagerHelp.GetComponentType((int)item.factory); string toId = ""; if (list.Where(c => c.Type == type).Any()) { toId = list.FirstOrDefault(c => c.Type == type).Cid; } //海康和大华组件尚未启动则不需要发送组件注册消息 if (toId == "") { continue; } assembly.SendDeveiceAdd(item, toId); } return(true); } else { ManagerHelp.isInit = false; return(false); } }
/// <summary> /// 发送缺岗通知 /// </summary> public void LoadNotice() { Task.Factory.StartNew(state => { //获取间隔时间 int departureTime = ManagerHelp.DepartureTime; while (true) { try { using (var context = new MyContext()) { //获取船的航行状态 var ship = context.Ship.FirstOrDefault(); if (ship == null) { continue; } DateTime dt = DateTime.Now; bool flag = false; if (ManagerHelp.LiveTime != "") { if ((dt - Convert.ToDateTime(ManagerHelp.LiveTime)).Minutes >= departureTime) { flag = true; } } //Console.WriteLine("考勤人数" + ManagerHelp.atWorks.Count + " 当前时间:" + dt + " 离岗时间:" + ManagerHelp.LiveTime); //ManagerHelp.atWorks 考勤人数的集合 if (ship.Flag && ManagerHelp.atWorks.Count <= 0 && flag) { var algo = context.Algorithm.Where(c => c.Type == AlgorithmType.CAPTURE).ToList(); if (algo.Count == 0) { continue; } var camares = context.Camera.Where(c => algo.Select(a => a.Cid).Contains(c.Id)).ToList(); foreach (var item in camares) { var device = context.Device.FirstOrDefault(c => c.Id == item.DeviceId); if (device == null) { continue; } var component = context.Component.FirstOrDefault(c => c.Type == ManagerHelp.GetComponentType((int)device.factory)); if (component == null) { continue; } CaptureInfo captureInfo = new CaptureInfo() { cid = item.Id + "\0",//C++ 字符串是以\0结尾的 did = item.DeviceId + "\0", idx = item.Index }; assembly.SendCapture(captureInfo, Event.Command.CAPTURE_JPEG_REQ, component.Cid); Console.WriteLine("发送缺岗请求成功,时间" + dt.ToString("yyyy-MM-dd HH:mm:ss")); ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } } } } catch (Exception ex) { ProtoBDManager.AddReceiveLog("ExceptionCapture", "", ex.Message); } Thread.Sleep(1000);//单位毫秒 } }, TaskCreationOptions.LongRunning); }
/// <summary> /// 删除设备 /// </summary> /// <param name="id"></param> /// <returns></returns> public IActionResult Delete(string id, int factory) { try { if (id == null) { return(NotFound()); } int code = 1; string msg = ""; //陆地端删除设备 if (base.user.IsLandHome) { string shipId = base.user.ShipId; string tokenstr = HttpContext.Session.GetString("comtoken"); //获取设备的组件ID string identity = ManagerHelp.GetLandToId(tokenstr); if (identity == "") { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), Convert.ToInt32(factory)) + "组件未启动" })); } assembly.SendDeveiceDelete(shipId + ":" + identity, id); code = GetResult(); } else { var device = _context.Device.Find(id); if (device == null) { return(NotFound()); } var cameras = _context.Camera.Where(c => c.DeviceId == device.Id).ToList(); var cids = string.Join(',', cameras.Select(c => c.Id)); if (cids != "") { var cameraConfig = _context.Algorithm.Where(c => cids.Contains(c.Id)); if (cameraConfig.Count() > 0) { //删除摄像机配置表 _context.Algorithm.RemoveRange(cameraConfig); } //删除摄像机表 _context.Camera.RemoveRange(cameras); } //删除设备表 _context.Device.Remove(device); //获取设备的组件ID string identity = ManagerHelp.GetShipToId(ManagerHelp.GetComponentType(factory)); if (identity == "") { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), Convert.ToInt32(factory)) + "组件未启动" })); } assembly.SendDeveiceDelete(identity, device.Id); code = GetResult(); if (code == 0 || code == -5) { _context.SaveChanges(); code = 0; } } if (code == 2) { msg = "请求超时。。。"; } else if (code != 0) { msg = "删除失败"; } return(new JsonResult(new { code = code, msg = msg })); } catch (Exception ex) { _logger.LogError(ex, "删除设备异常", id); return(new JsonResult(new { code = 1, msg = "删除失败!" + ex.Message })); } }
public IActionResult CamSave(string id, string did, int factory, string nickName, string enable, int index = 0) { if (ModelState.IsValid) { try { int code = 1; string msg = ""; //陆地端远程修改摄像机信息 if (base.user.IsLandHome) { string XMQComId = base.user.ShipId; string tokenstr = HttpContext.Session.GetString("comtoken"); string identity = ManagerHelp.GetLandToId(tokenstr); if (identity == "") { return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" })); } //获取设备的组件ID string hkidentity = ManagerHelp.GetLandToId(tokenstr, ManagerHelp.GetComponentType(factory)); if (hkidentity == "") { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), Convert.ToInt32(factory)) + "组件未启动" })); } Device emb = new Device { Id = did, Enable = true, CameraModelList = new List <Camera>() { new Camera() { NickName = nickName, Enable = enable == "1" ? true : false, Index = index, Id = id } } }; assembly.SendDeveiceUpdate(emb, XMQComId + ":" + identity, did); code = GetResult(); } else { Camera camera = _context.Camera.FirstOrDefault(c => c.Id == id); if (camera == null) { return(new JsonResult(new { code = 1, msg = "数据不存在" })); } //获取设备的组件ID string identity = ManagerHelp.GetShipToId(ManagerHelp.GetComponentType(factory)); if (identity == "") { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), Convert.ToInt32(factory)) + "组件未启动" })); } camera.NickName = nickName; camera.Enable = enable == "1" ? true : false; var embModel = _context.Device.FirstOrDefault(e => e.Id == camera.DeviceId); if (embModel != null) { Device emb = new Device { Id = did, CameraModelList = new List <Camera>() { new Camera() { NickName = nickName, Enable = enable == "1" ? true : false, Id = id } } }; assembly.SendDeveiceUpdate(emb, identity, embModel.Id); code = GetResult(); if (code == 0) { _context.Update(camera); _context.SaveChangesAsync(); } } ; } if (code == 2) { msg = "请求超时。。。"; } else if (code != 0) { msg = "配置摄像机信息失败"; } return(new JsonResult(new { code = code, msg = msg })); } catch (Exception ex) { _logger.LogError("修改摄像机信息失败", "Save(" + id + "," + did + "," + nickName + "," + enable + ")"); return(new JsonResult(new { code = 1, msg = "数据保存失败!" + ex.Message })); } } return(new JsonResult(new { code = 0 })); }
public IActionResult Save(string strEmbed) { try { string shipId = base.user.ShipId; int code = 1; string msg = ""; if (shipId == "") { return(new JsonResult(new { code = 1, msg = "船不存在,无法添加数据" })); } var model = JsonConvert.DeserializeObject <DeviceViewModel>(strEmbed); //陆地端远程添加设备 if (base.user.IsLandHome) { string tokenstr = HttpContext.Session.GetString("comtoken"); string identity = ManagerHelp.GetLandToId(tokenstr); if (string.IsNullOrEmpty(identity)) { return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" })); } string devComId = ManagerHelp.GetLandToId(tokenstr, ManagerHelp.GetComponentType(model.Factory)); if (string.IsNullOrEmpty(devComId)) { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), Convert.ToInt32(model.Factory)) + "组件未启动" })); } Device emb = GetProtoDevice(model); if (!string.IsNullOrEmpty(model.Id)) { assembly.SendDeveiceUpdate(emb, shipId + ":" + identity, model.Id); } else { assembly.SendDeveiceAdd(emb, shipId + ":" + identity); } code = GetResult(); } else { string identity = ManagerHelp.GetShipToId(ManagerHelp.GetComponentType(model.Factory)); if (identity == "") { return(new JsonResult(new { code = 1, msg = Enum.GetName(typeof(Device.Factory), model.Factory) + "组件未启动" })); } Device device = new Device(); if (!string.IsNullOrEmpty(model.Id)) { device = _context.Device.FirstOrDefault(c => c.Id == model.Id); if (device == null) { return(new JsonResult(new { code = 1, msg = "数据不存在" })); } } device.IP = model.IP; device.Name = model.Name; device.Nickname = model.Nickname; device.Password = model.Password; device.Port = model.Port; device.type = (Device.Type)model.Type; device.factory = (Device.Factory)model.Factory; device.Enable = model.Enable; if (string.IsNullOrEmpty(model.Id)) { device.Id = Guid.NewGuid().ToString(); _context.Device.Add(device); _context.SaveChanges(); model.Id = device.Id; Device emb = GetProtoDevice(model); assembly.SendDeveiceAdd(emb, identity); } else { Device emb = GetProtoDevice(model); _context.Device.Update(device); _context.SaveChanges(); assembly.SendDeveiceUpdate(emb, identity, device.Id); } code = GetResult(); if (code == -2) { Device emb = GetProtoDevice(model); assembly.SendDeveiceAdd(emb, identity); code = GetResult(); } } if (code == 400) { msg = "请求超时。。。"; } else if (code != 0) { msg = "请输入正确的设备参数"; } return(new JsonResult(new { code = code, msg = msg })); } catch (Exception ex) { _logger.LogError(ex, "保存设备信息异常", strEmbed); return(new JsonResult(new { code = 1, msg = "数据保存失败!" + ex.Message })); } }
/// <summary> /// 设备处理 /// </summary> /// <param name="device"></param> public void DeviceData(SmartWeb.ProtoBuffer.Models.Device device) { //添加日志 ProtoBDManager.AddReceiveLog <SmartWeb.ProtoBuffer.Models.Device>("Device/" + Enum.GetName(typeof(Models.Component.Command), Convert.ToInt32(device.command)), device); switch (device.command) { //上游陆地端的请求 case Models.Device.Command.NEW_REQ: #region 陆地端增加设备请求 if (device.devicerequest != null) { var model = ProtoBDManager.DeviceAdd(device.devicerequest.deviceinfo); if (model != null) { //获取设置的组件ID string identity = ManagerHelp.GetShipToId(ManagerHelp.GetComponentType((int)model.factory)); if (identity != "") { manager.SendDeveiceAdd(model, identity); ManagerHelp.UpSend.Add(model.Id + "Add"); } else { manager.SendDeviceRN(Models.Device.Command.MODIFY_REP, "", null, 1); } } } else { manager.SendDeviceRN(Models.Device.Command.NEW_REP, "", null, 1); } break; #endregion case Models.Device.Command.DELETE_REQ: #region 陆地端删除设备请求 if (device.devicerequest != null && !string.IsNullOrEmpty(device.devicerequest.deviceinfo.did)) { //删除船舶端数据 var result = ProtoBDManager.DeviceDelete(device.devicerequest.deviceinfo.did); manager.SendDeviceRN(Models.Device.Command.DELETE_REP, device.devicerequest.deviceinfo.did, null, result); } else { manager.SendDeviceRN(Models.Device.Command.DELETE_REP, "", null, 1); } break; #endregion case Models.Device.Command.MODIFY_REQ: #region 陆地端编辑设备请求 if (device.devicerequest != null && !string.IsNullOrEmpty(device.devicerequest.did)) { bool isSend = false; //修改船舶端数据库信息 var model = ProtoBDManager.DeviceUpdate(device.devicerequest.did, device.devicerequest.deviceinfo, ref isSend); if (model != null && isSend) { //获取设置的组件ID string identity = ManagerHelp.GetShipToId(ManagerHelp.GetComponentType((int)model.factory)); if (identity != "") { manager.SendDeveiceUpdate(model, identity); ManagerHelp.UpSend.Add(model.Id + "Edit"); } else { manager.SendDeviceRN(Models.Device.Command.MODIFY_REP, "", null, 1); } } else { manager.SendDeviceRN(Models.Device.Command.MODIFY_REP, "", null, isSend?0:1); } } else { manager.SendDeviceRN(Models.Device.Command.MODIFY_REP, "", null, 1); } break; #endregion case Models.Device.Command.QUERY_REQ: #region 陆地端查询设备请求 var info = device.devicerequest == null ? null : device.devicerequest.deviceinfo; string did = device.devicerequest != null ? device.devicerequest.did : ""; var devices = ProtoBDManager.DeviceQuery(info, did); manager.SendDeviceRN(Models.Device.Command.QUERY_REP, did, devices); break; #endregion case Models.Device.Command.NEW_REP: #region XMQ响应设备增加 did = ""; if (device.deviceresponse.result == 0 && device.deviceresponse.deviceinfos != null) { var dev = device.deviceresponse.deviceinfos[0]; ProtoBDManager.AddCameras(dev.camerainfos, dev.did); did = dev.did; } if (ManagerHelp.UpSend.Where(c => c == did + "Add").Any()) { //向陆地端响应请求 manager.SendDeviceRN(Models.Device.Command.NEW_REP, did); ManagerHelp.UpSend.Remove(did + "Add"); } else { ManagerHelp.DeviceResult = device.deviceresponse.result.ToString(); //-101设备已经存在 -2设备未添加就执行了修改 if (device.deviceresponse.result != 0 && device.deviceresponse.result != -2 && device.deviceresponse.result != -101) { if (device.deviceresponse != null && device.deviceresponse.deviceinfos != null && device.deviceresponse.deviceinfos.Count > 0) { did = device.deviceresponse.deviceinfos[0].did; ProtoBDManager.DeviceDelete(did); } } } break; #endregion case Models.Device.Command.DELETE_REP: ManagerHelp.DeviceResult = device.deviceresponse.result.ToString(); break; case Models.Device.Command.MODIFY_REP: #region XMQ响应设备修改 did = device.deviceresponse.did; if (device.deviceresponse.result == 0 && device.deviceresponse.deviceinfos != null) { ProtoBDManager.DeviceUpdate(did, device.deviceresponse.deviceinfos[0]); } if (ManagerHelp.UpSend.Where(c => c == did + "Edit").Any()) { //向陆地端响应请求 manager.SendDeviceRN(Models.Device.Command.MODIFY_REP, did); ManagerHelp.UpSend.Remove(did + "Edit"); } else { ManagerHelp.DeviceResult = device.deviceresponse.result.ToString(); } break; #endregion case Models.Device.Command.QUERY_REP: if (device.deviceresponse != null && device.deviceresponse.result == 0 && device.deviceresponse.deviceinfos != null) { ManagerHelp.DeviceReponse = JsonConvert.SerializeObject(device.deviceresponse.deviceinfos); } break; default: break; } }