/// <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> /// <param name="name"></param> /// <param name="type"></param> /// <param name="startTime"></param> /// <param name="endTime"></param> /// <returns></returns> public IActionResult ExportPdf(string shipId, string name, int type, string startTime, string endTime) { int total = 0; SearchAlarmViewModel model = new SearchAlarmViewModel() { Name = name, EndTime = endTime, StartTime = startTime, Type = type, ShipId = shipId }; shipId = string.IsNullOrEmpty(shipId) ? base.user.ShipId : shipId; if (!base.user.IsLandHome) { shipId = base.user.ShipId; model.ShipId = base.user.ShipId; } var ship = _context.Ship.Where(c => c.Id == shipId).FirstOrDefault(); var list = GetDate(model, 1, 1000000, out total); string time = startTime + "~" + endTime; var address = HttpContext.Request.Scheme + "://" + HttpContext.Request.Host; string html = ManagerHelp.GetHtml(list, time, ship.Name, address); //生成PDF var pdfBytes = _PDFService.CreatePDF(html); return(File(pdfBytes, "application/pdf", "报警信息.pdf")); }
/// <summary> /// 删除船员 /// </summary> /// <param name="id"></param> /// <returns></returns> public IActionResult Delete(int id) { try { int code = 1; string errMsg = ""; //陆地端远程删除船员 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 = "人脸组件未启动" })); } assembly.SendCrewDelete(id, XMQComId + ":" + identity); code = GetResult(); if (code == 400) { errMsg = "网络请求超时。。。"; } else if (code != 0) { errMsg = "船员删除失败"; } } else { var employee = _context.Crew.Find(id); if (employee == null) { return(NotFound()); } var employeePictures = _context.CrewPicture.Where(e => e.CrewId == employee.Id).ToList(); if (employeePictures.Count() > 0) { //删除船员图片 _context.CrewPicture.RemoveRange(employeePictures); } string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); if (identity == "") { return(new JsonResult(new { code = 1, msg = "人脸组件未启动" })); } assembly.SendCrewDelete(id, identity); //删除船员 _context.Crew.Remove(employee); _context.SaveChanges(); code = 0; } return(new JsonResult(new { code = code, msg = errMsg })); } catch (Exception ex) { return(new JsonResult(new { code = 1, msg = "删除失败!" + ex.Message })); } }
public IActionResult Load() { try { Ship ship = new Ship(); if (base.user.IsLandHome) { string browsertoken = HttpContext.Session.GetString("comtoken"); string XMQComId = base.user.ShipId + ":" + ManagerHelp.GetLandToId(browsertoken); assembly.SendStatusQuery(XMQComId); bool flag = true; new TaskFactory().StartNew(() => { while (ManagerHelp.StatusReponse == "" && flag) { Thread.Sleep(1000); } }).Wait(3000); flag = false; if (ManagerHelp.StatusReponse != "") { var response = JsonConvert.DeserializeObject <StatusResponse>(ManagerHelp.StatusReponse); if (response != null) { ship.Flag = response.flag; ship.Name = response.name.Split('|')[0]; if (response.name.Split('|').Length > 1) { ship.type = (Ship.Type)Convert.ToInt32(response.name.Split('|')[1]); } } } } else { ship = _context.Ship.FirstOrDefault(); } var result = new { code = 0, data = ship, isSet = base.user.EnableConfigure }; return(new JsonResult(result)); } catch (Exception ex) { return(new JsonResult(new { code = 1, msg = "获取数据失败!" + ex.Message })); } }
/// <summary> /// 数据转操作 /// </summary> /// <param name="xmq">为空:船舶端接收报警 不为空是陆地端接收报警</param> /// <param name="alarmInfo">报警实体</param> /// <param name="shipId">船ID</param> /// <param name="cid">摄像机ID</param> /// <param name="cname">摄像机名称</param> private void GetData(ref Models.AlarmInfo alarmInfo, ref string cid, ref string cname, ref string webId) { var ids = alarmInfo.cid.Split(':'); using (var context = new MyContext()) { if (ManagerHelp.IsShipPort) { if (ids.Length == 2) { var cam = context.Camera.FirstOrDefault(c => c.DeviceId == ids[0] && c.Index == Convert.ToInt32(ids[1])); if (cam != null) { cid = cam.Id; cname = cam.NickName; } ; } string str = Encoding.ASCII.GetString(alarmInfo.picture); byte[] picture = ManagerHelp.ConvertBase64(str); alarmInfo.picture = picture; } else { if (ids.Length == 3) { cid = ids[0]; cname = ids[1]; webId = ids[2]; } alarmInfo.picture = alarmInfo.picture; } } //时间处理 if (alarmInfo.time != "") { var times = alarmInfo.time.Split(","); if (times.Length > 1) { DateTime dt = Convert.ToDateTime(times[0] + " " + times[1]); var timezone = Convert.ToInt32(times[2]); DateTime dtime = dt.AddHours(timezone); alarmInfo.time = dtime.ToString("yyyy-MM-dd HH:mm:ss"); } } else { alarmInfo.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } }
private void SendCrew() { if (ManagerHelp.isFaceAlgorithm && ManagerHelp.isInit == false) { string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); if (identity != "") { //等待15秒后发送底库数据 Thread.Sleep(15 * 1000); var crew = ProtoBDManager.CrewQuery(); foreach (var item in crew) { manager.SendCrewAdd(item, identity); } ManagerHelp.isFaceAlgorithm = false; } } }
/// <summary> /// 陆地端查看船员信息 /// </summary> /// <returns></returns> private IActionResult LandLoad() { //XMQ的组件ID string XMQComId = base.user.ShipId; string tokenstr = HttpContext.Session.GetString("comtoken"); //获取XMQ组件里的WEB组件ID string webIdentity = ManagerHelp.GetLandToId(tokenstr); assembly.SendCrewQuery(XMQComId + ":" + webIdentity); List <ProtoBuffer.Models.CrewInfo> crewInfos = new List <ProtoBuffer.Models.CrewInfo>(); try { bool flag = true; new TaskFactory().StartNew(() => { while (flag) { if (ManagerHelp.CrewReponse != "") { crewInfos = JsonConvert.DeserializeObject <List <ProtoBuffer.Models.CrewInfo> >(ManagerHelp.CrewReponse); flag = false; } Thread.Sleep(500); } }).Wait(timeout); flag = false; } catch (Exception) { } ManagerHelp.CrewReponse = ""; crewVMList = new List <CrewViewModel>(); foreach (var item in crewInfos) { CrewViewModel model = new CrewViewModel() { Id = Convert.ToInt32(item.uid), Job = item.job, Name = item.name, crewPictureViewModels = new List <CrewPictureViewModel>() }; if (item.pictures != null) { foreach (var pic in item.pictures) { CrewPictureViewModel vm = new CrewPictureViewModel() { Id = Guid.NewGuid().ToString(), Picture = pic }; model.crewPictureViewModels.Add(vm); } } crewVMList.Add(model); } var result = new { code = 0, data = crewVMList, count = crewInfos.Count(), isSet = !string.IsNullOrEmpty(XMQComId) ? base.user.EnableConfigure : false }; return(new JsonResult(result)); }
/// <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); }
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 })); }
/// <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 })); } }
/// <summary> /// 陆地端查看设备信息 /// </summary> /// <returns></returns> private IActionResult LandLoad() { List <Device> list = new List <Device>(); //XMQ的组件ID string XMQComId = base.user.ShipId; string tokenstr = HttpContext.Session.GetString("comtoken"); //获取XMQ组件里的WEB组件ID string webIdentity = ManagerHelp.GetLandToId(tokenstr); var result = new { code = 0, data = list, isSet = !string.IsNullOrEmpty(base.user.ShipId) ? base.user.EnableConfigure : false }; if (webIdentity == "") { return(new JsonResult(result)); } //发送查询设备请求 assembly.SendDeveiceQuery(XMQComId + ":" + webIdentity); bool flag = true; new TaskFactory().StartNew(() => { while (flag && ManagerHelp.DeviceReponse == "") { Thread.Sleep(500); } }).Wait(timeout); flag = false; if (ManagerHelp.DeviceReponse != "") { List <ProtoBuffer.Models.DeviceInfo> devices = JsonConvert.DeserializeObject <List <ProtoBuffer.Models.DeviceInfo> >(ManagerHelp.DeviceReponse); ManagerHelp.DeviceReponse = ""; foreach (var item in devices) { Device model = new Device() { Enable = item.enable, factory = (Device.Factory)((int)item.factory), Id = item.did, IP = item.ip, Name = item.name, Nickname = item.nickname, Password = item.password, Port = item.port, type = (Device.Type)((int)item.type) }; var cam = item.camerainfos; model.CameraModelList = new List <Camera>(); if (cam != null) { foreach (var it in cam) { model.CameraModelList.Add(new Camera() { Index = it.index, Id = it.cid, Enable = it.enable, IP = it.ip, NickName = it.nickname, DeviceId = item.did }); } } list.Add(model); } } //var result = new //{ // code = 0, // data = list, // isSet = !string.IsNullOrEmpty(base.user.ShipId) ? base.user.EnableConfigure : false //}; return(new JsonResult(result)); }
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="id"></param> /// <param name="name"></param> /// <param name="job"></param> /// <param name="picIds">图片ID</param> /// <returns></returns> public IActionResult Save(int id, string name, string job, string picIds) { try { if (base.user.ShipId == "") { return(new JsonResult(new { code = 1, msg = "船不存在,无法添加数据" })); } int code = 1; string errMsg = ""; List <string> ids = new List <string>(); if (picIds != null) { ids = picIds.Split(',').ToList(); } if (base.user.IsLandHome) { #region 陆地端添加/修改船员 //xmq的组件ID 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 = "当前船舶已失联,请重新连接" })); } string algoComId = ManagerHelp.GetLandToId(tokenstr, ComponentType.AI, ManagerHelp.FaceName); if (string.IsNullOrEmpty(algoComId)) { return(new JsonResult(new { code = 1, msg = "人脸组件未启动" })); } ProtoBuffer.Models.CrewInfo emp = GetCrewInfo(id, name, job, ids); if (id > 0) { assembly.SendCrewUpdate(emp, XMQComId + ":" + identity); } else { assembly.SendCrewAdd(emp, XMQComId + ":" + identity); } code = GetResult(); if (code == 2) { errMsg = "船员名称不能重复"; } if (code == 400) { errMsg = "网络请求超时。。。"; } else if (code != 0) { errMsg = "船员信息保存失败"; } //清除已经上传了的图片 foreach (var item in ids) { picBytes.Remove(item); } return(new JsonResult(new { code = code, msg = code == 2 ? "船员名称不能重复" : "数据保存失败" })); #endregion } else { Crew employee = new Crew(); if (!CheckData(id, name, ref employee, ref errMsg)) { return(new JsonResult(new { code = 1, msg = errMsg })); } string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); if (identity == "") { return(new JsonResult(new { code = 1, msg = "人脸组件未启动" })); } //增加或修改 AddOrUpdate(id, name, job, ids, ref employee); //发送netmq消息 var dbPic = _context.CrewPicture.Where(c => c.CrewId == employee.Id).ToList(); List <string> bytes = new List <string>(); foreach (var item in dbPic) { bytes.Add(Convert.ToBase64String(item.Picture)); } ProtoBuffer.Models.CrewInfo crewInfo = new ProtoBuffer.Models.CrewInfo() { job = employee.Job, name = employee.Name, uid = employee.Id.ToString(), pictures = bytes }; //if (id > 0) { assembly.SendCrewUpdate(crewInfo, identity); } //else { assembly.SendCrewAdd(crewInfo, identity); } assembly.SendCrewAdd(crewInfo, identity); code = GetResult(); if (code == 400) { errMsg = "网络请求超时。。。"; } else if (code != 0) { errMsg = "船员信息保存失败"; } } return(new JsonResult(new { code = code, msg = errMsg })); } catch (Exception ex) { 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; } }
/// <summary> /// 保存船状态 /// </summary> /// <param name="ship"></param> /// <returns></returns> public IActionResult Save(string id, string name, int type) { try { if (!base.user.EnableConfigure) { new JsonResult(new { code = 1, msg = "您没有权限修改数据!" }); } int code = 1; string errMsg = ""; if (base.user.IsLandHome) { string cid = base.user.ShipId; string tokenstr = HttpContext.Session.GetString("comtoken"); string identity = ManagerHelp.GetLandToId(tokenstr); if (string.IsNullOrEmpty(identity)) { return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" })); } Ship ship = new Ship() { type = (Ship.Type)type, Name = name, Flag = type == 1 ? true : false }; string toId = cid + ":" + identity; assembly.SendStatusSet(ship, StatusRequest.Type.SAIL, toId); assembly.SendStatusSet(ship, StatusRequest.Type.NAME, toId); code = GetResult(); if (code == 0) { var component = _context.Component.FirstOrDefault(c => c.Cid == cid); if (component != null) { var landship = _context.Ship.FirstOrDefault(c => c.Id == component.ShipId); if (landship != null) { landship.Name = ship.Name; landship.type = ship.type; //航行类型为:自动时,默认状态为停港 landship.Flag = ship.Flag; _context.Ship.Update(landship); _context.SaveChanges(); } } } } else { #region 船舶端修改船状态 if (!string.IsNullOrEmpty(id)) { var ship = _context.Ship.FirstOrDefault(c => c.Id == id); if (ship != null) { ship.Name = name; ship.type = (Ship.Type)type; //航行类型为:自动时,默认状态为停港 ship.Flag = type == 1 ? true : false; } _context.Ship.Update(ship); _context.SaveChanges(); SendMqMsg(ship); code = 0; } #endregion } if (code == 400) { errMsg = "网络超时。。。"; } else if (code != 0) { errMsg = "数据保存失败"; } return(new JsonResult(new { code = code, msg = errMsg })); } catch (Exception ex) { _logger.LogError("保存船信息异常Save(" + id + "," + name + "," + type + ")" + ex.Message); return(new JsonResult(new { code = 0, msg = "数据保存失败" + ex.Message })); } }
public IActionResult LandLoad() { string identtity = base.user.ShipId; string browsertoken = HttpContext.Session.GetString("comtoken"); string webId = ManagerHelp.GetLandToId(browsertoken); List <AlgorithmViewModel> algorithms = new List <AlgorithmViewModel>(); List <ProtoBuffer.Models.AlgorithmInfo> protoDate = new List <ProtoBuffer.Models.AlgorithmInfo>(); if (string.IsNullOrEmpty(webId)) { return(new JsonResult(new { code = 0, data = algorithms })); } assembly.SendAlgorithmQuery(identtity + ":" + webId); assembly.SendDeveiceQuery(identtity + ":" + webId); bool flag = true; new TaskFactory().StartNew(() => { while (flag) { if (ManagerHelp.AlgorithmReponse != "" && ManagerHelp.DeviceReponse != "") { flag = false; } Thread.Sleep(100); } }).Wait(timeout); flag = false; try { if (ManagerHelp.AlgorithmReponse != "") { protoDate = JsonConvert.DeserializeObject <List <ProtoBuffer.Models.AlgorithmInfo> >(ManagerHelp.AlgorithmReponse); } if (ManagerHelp.DeviceReponse != "") { boatDevices = JsonConvert.DeserializeObject <List <ProtoBuffer.Models.DeviceInfo> >(ManagerHelp.DeviceReponse); } ManagerHelp.AlgorithmReponse = ""; ManagerHelp.DeviceReponse = ""; } catch (Exception) { } cameras = new List <Camera>(); foreach (var item in boatDevices) { if (item.camerainfos != null) { foreach (var cam in item.camerainfos) { Camera model = new Camera() { Id = cam.cid, NickName = cam.nickname, DeviceId = item.did, Index = cam.index }; cameras.Add(model); } } } foreach (var item in protoDate) { string cid = item.cid; string nickName = ""; if (cameras.Where(c => c.Id == cid).Any()) { nickName = cameras.FirstOrDefault(c => c.Id == cid).NickName; } algorithms.Add(new AlgorithmViewModel() { Cid = cid, NickName = nickName, DectectFirst = item.dectectfirst, DectectSecond = item.dectectsecond, GPU = item.gpu, Id = item.aid, Similar = item.similar, Track = item.track, Type = (int)item.type }); } var result = new { code = 0, data = algorithms, camera = cameras }; return(new JsonResult(result)); }
/// <summary> /// 保存算法 /// </summary> /// <param name="model"></param> /// <returns></returns> public IActionResult Save(string model) { try { string shipId = base.user.ShipId;//为陆地端时保存的是XMQ的组件ID if (shipId == "") { return(new JsonResult(new { code = 1, msg = "船不存在,无法添加数据" })); } var viewModel = JsonConvert.DeserializeObject <AlgorithmViewModel>(model); if (viewModel != null) { int code = 1; string errMsg = ""; string AIName = Enum.GetName(typeof(AlgorithmType), viewModel.Type); if (base.user.IsLandHome) { //获取当前船舶的组件ID(webId) string tokenstr = HttpContext.Session.GetString("comtoken"); string identity = ManagerHelp.GetLandToId(tokenstr); if (string.IsNullOrEmpty(identity)) { return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" })); } //获取当前组件下的某个算法 string algoComId = ManagerHelp.GetLandToId(tokenstr, ComponentType.AI, AIName); if (string.IsNullOrEmpty(algoComId) && viewModel.Type != (int)AlgorithmType.CAPTURE) { string name = GetViewName((AlgorithmType)viewModel.Type); return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" })); } var cam = cameras.FirstOrDefault(c => c.Id == viewModel.Cid); //算法里的摄像机ID=设备ID:摄像机ID:摄像机通道 string cid = cam.DeviceId + ":" + cam.Id + ":" + cam.Index; //向船舶端发送算法配置请求 ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid); code = SendData(algorithm, (shipId + ":" + identity)); if (code == 400) { errMsg = "网络请求超时。。。"; } else if (code != 0) { errMsg = "算法配置失败"; } } else { Algorithm algo = new Algorithm(); if (!DataCheck(viewModel, ref algo, ref errMsg)) { return(new JsonResult(new { code = 1, msg = errMsg })); } //获取船舶某个算法的组件ID string identity = ManagerHelp.GetShipToId(ComponentType.AI, AIName); if (string.IsNullOrEmpty(identity) && viewModel.Type != (int)AlgorithmType.CAPTURE) { string name = GetViewName((AlgorithmType)viewModel.Type); return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" })); } algo.GPU = viewModel.GPU; algo.Type = (AlgorithmType)viewModel.Type; algo.Similar = viewModel.Similar; algo.Cid = viewModel.Cid; algo.DectectFirst = viewModel.DectectFirst; algo.DectectSecond = viewModel.DectectSecond; algo.Track = viewModel.Track; if (!string.IsNullOrEmpty(viewModel.Id)) { algo.Id = viewModel.Id; _context.Algorithm.Update(algo); } else { algo.Id = Guid.NewGuid().ToString(); _context.Algorithm.Add(algo); } //缺岗直接进库不用发消息 if (viewModel.Type == (int)AlgorithmType.CAPTURE) { _context.SaveChanges(); code = 0; ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } else { viewModel.Id = algo.Id; var camera = _context.Camera.FirstOrDefault(c => c.Id == viewModel.Cid); if (camera != null) { string cid = camera.DeviceId + ":" + camera.Id + ":" + camera.Index; ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid); ManagerHelp.isFaceAlgorithm = false; if (viewModel.Type == (int)AlgorithmType.ATTENDANCE_IN || viewModel.Type == (int)AlgorithmType.ATTENDANCE_OUT) { ManagerHelp.isFaceAlgorithm = true; } code = SendData(algorithm, identity); if (code == 0) { _context.SaveChanges(); } else if (code == 2) { errMsg = "网络请求超时。。。"; } else { errMsg = "算法配置失败"; } } } } return(new JsonResult(new { code = code, msg = errMsg })); } return(new JsonResult(new { code = 1, msg = "操作界面数据失败!" })); } catch (Exception ex) { _logger.LogError("保存算法配置失败", model); return(new JsonResult(new { code = 1, msg = "数据保存失败!" + ex.Message })); } }
/// <summary> /// 算法处理 /// </summary> /// <param name="fromId">算法来源</param> /// <param name="algorithm"></param> public void AlgorithmData(SmartWeb.ProtoBuffer.Models.Algorithm algorithm, string fromId) { //添加日志 ProtoBDManager.AddReceiveLog <SmartWeb.ProtoBuffer.Models.Algorithm>("Algorithm/" + Enum.GetName(typeof(Models.Component.Command), Convert.ToInt32(algorithm.command)), algorithm); switch (algorithm.command) { case Models.Algorithm.Command.CONFIGURE_REQ: #region 陆地端发送算法设置请求 var request = algorithm.algorithmrequest; if (request == null) { manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, 1); break; } var devcid = request.algorithminfo.cid.Split(":"); //cid=did:cid:index(设备ID:摄像机ID:摄像机通道) var cid = devcid[1]; request.algorithminfo.cid = cid; int result = ProtoBDManager.AlgorithmSet(request.algorithminfo); if (result == 0) { if (request.algorithminfo.type == AlgorithmInfo.Type.CAPTURE) { ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } if (request.algorithminfo.type != AlgorithmInfo.Type.CAPTURE) { string name = Enum.GetName(typeof(AlgorithmType), request.algorithminfo.type); string identity = ManagerHelp.GetShipToId(ComponentType.AI, name); if (identity != "") { //向算法组件注册时只需要传入设备ID和摄像机通道 request.algorithminfo.cid = devcid[0] + ":" + devcid[1] + ":" + devcid[2]; ManagerHelp.isFaceAlgorithm = false; if (request.algorithminfo.type == AlgorithmInfo.Type.ATTENDANCE_IN || request.algorithminfo.type == AlgorithmInfo.Type.ATTENDANCE_OUT) { ManagerHelp.isFaceAlgorithm = true; } manager.SendAlgorithmSet(request.algorithminfo, identity); ManagerHelp.UpSend.Add("Algorithm"); } else { manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, 1); } } else { //向陆地端响应算法请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, result); } } else { //向陆地端响应算法请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, result); } break; #endregion case Models.Algorithm.Command.QUERY_REQ: #region 陆地端发送算法查询请求 //查询船舶端数据库获取所有算法数据 var algorithms = ProtoBDManager.AlgorithmQuery(true); //返回给陆地端 manager.SendAlgorithmRN(Models.Algorithm.Command.QUERY_REP, algorithms); break; #endregion case Models.Algorithm.Command.CONFIGURE_REP: if (ManagerHelp.UpSend.Where(c => c == "Algorithm").Any()) { //向陆地端响应请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, algorithm.algorithmresponse.result); ManagerHelp.UpSend.Remove("Algorithm"); } else { ManagerHelp.AlgorithmResult = algorithm.algorithmresponse.result.ToString(); } if (ManagerHelp.IsShipPort) { //算法配置成功后把船状态推送给当前算法 if (algorithm.algorithmresponse.result == 0) { var ship = ProtoBDManager.StatusQuery(); manager.SendStatusSet(ship, StatusRequest.Type.SAIL, fromId); SendCrew(); } } break; case Models.Algorithm.Command.QUERY_REP: if (algorithm.algorithmresponse != null && algorithm.algorithmresponse.result == 0 && algorithm.algorithmresponse.configures != null) { ManagerHelp.AlgorithmReponse = JsonConvert.SerializeObject(algorithm.algorithmresponse.configures); } break; default: break; } }
/// <summary> /// 船员处理 /// </summary> /// <param name="crew"></param> public void CrewData(SmartWeb.ProtoBuffer.Models.Crew crew) { int result = 1;//响应状态 switch (crew.command) { case Models.Crew.Command.NEW_REQ: #region 陆地端添加船员请求 if (crew.crewrequest == null) { manager.SendCrewRN(Models.Crew.Command.NEW_REP, null, 1); } else { var crewInfo = crew.crewrequest.crewinfo; result = ProtoBDManager.CrewAdd(ref crewInfo); if (result == 0) { string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); if (identity != "") { //向组件发送船员请求 manager.SendCrewAdd(crewInfo, identity); ManagerHelp.UpSend.Add("CrewAdd"); } else { //向陆地端响应算法请求 manager.SendCrewRN(Models.Crew.Command.NEW_REP, null, result); } } else { //向陆地端响应算法请求 manager.SendCrewRN(Models.Crew.Command.NEW_REP, null, result); } } break; #endregion case Models.Crew.Command.DELETE_REQ: #region 陆地端删除船员请求 if (crew.crewrequest == null) { manager.SendCrewRN(Models.Crew.Command.DELETE_REP, null, 1); } else { result = ProtoBDManager.CrewDelete(crew.crewrequest.crewinfo.uid); if (result == 0) { string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); //向组件发送船员请求 manager.SendCrewDelete(Convert.ToInt32(crew.crewrequest.crewinfo.uid), identity); ManagerHelp.UpSend.Add("CrewDel"); } else { manager.SendCrewRN(Models.Crew.Command.DELETE_REP, null, result); } } break; #endregion case Models.Crew.Command.MODIFY_REQ: #region 陆地端修改船员请求 if (crew.crewrequest == null) { manager.SendCrewRN(Models.Crew.Command.MODIFY_REP, null, 1); } else { result = ProtoBDManager.CrewUpdate(crew.crewrequest.crewinfo); if (result == 0) { string identity = ManagerHelp.GetShipToId(ComponentType.AI, ManagerHelp.FaceName); if (identity != "") { //向组件发送船员请求 //manager.SendCrewUpdate(crew.crewrequest.crewinfo, identity); manager.SendCrewAdd(crew.crewrequest.crewinfo, identity); ManagerHelp.UpSend.Add("CrewEdit"); } else { manager.SendCrewRN(Models.Crew.Command.MODIFY_REP, null, result); } } else { manager.SendCrewRN(Models.Crew.Command.MODIFY_REP, null, result); } } break; #endregion case Models.Crew.Command.QUERY_REQ: #region 陆地端查询船员请求 int uid = crew.crewrequest != null && crew.crewrequest.crewinfo != null?Convert.ToInt32(crew.crewrequest.crewinfo.uid) : 0; var crews = ProtoBDManager.CrewQuery(uid); manager.SendCrewRN(Models.Crew.Command.QUERY_REP, crews); break; #endregion case Models.Crew.Command.NEW_REP: if (ManagerHelp.UpSend.Where(c => c == "CrewAdd").Any()) { //向陆地端响应请求 manager.SendCrewRN(Models.Crew.Command.NEW_REP, null, crew.crewresponse.result); ManagerHelp.UpSend.Remove("CrewAdd"); } else { ManagerHelp.CrewResult = crew.crewresponse.result.ToString(); } break; case Models.Crew.Command.DELETE_REP: if (ManagerHelp.UpSend.Where(c => c == "CrewDel").Any()) { //向陆地端响应请求 manager.SendCrewRN(Models.Crew.Command.DELETE_REP, null, crew.crewresponse.result); ManagerHelp.UpSend.Remove("CrewDel"); } else { ManagerHelp.CrewResult = crew.crewresponse.result.ToString(); } break; case Models.Crew.Command.MODIFY_REP: if (ManagerHelp.UpSend.Where(c => c == "CrewEdit").Any()) { //向陆地端响应请求 manager.SendCrewRN(Models.Crew.Command.MODIFY_REP, null, crew.crewresponse.result); ManagerHelp.UpSend.Remove("CrewEdit"); } else { ManagerHelp.CrewResult = crew.crewresponse.result.ToString(); } break; case Models.Crew.Command.QUERY_REP: if (crew.crewresponse != null && crew.crewresponse.result == 0 && crew.crewresponse.crewinfos != null) { ManagerHelp.CrewReponse = JsonConvert.SerializeObject(crew.crewresponse.crewinfos); } break; default: break; } }