示例#1
0
        /// <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);
            }
        }
示例#2
0
 /// <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);
 }
示例#3
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 }));
     }
 }
示例#4
0
 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 }));
 }
示例#5
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 }));
            }
        }
示例#6
0
        /// <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;
            }
        }