/// <summary> /// 算法请求 /// </summary> public void InitAlgorithm(string typeName = "") { try { using (var con = new MyContext()) { var components = con.Component.Where(c => c.Type == ComponentType.AI && c.Line == 0).ToList(); if (components.Count > 0) { var algorithmInfos = ProtoBDManager.AlgorithmQuery(false, typeName); foreach (var item in algorithmInfos) { //配置的是缺岗类型则传入设备的通讯ID if (item.type != AlgorithmInfo.Type.CAPTURE) { string name = Enum.GetName(typeof(AlgorithmType), Convert.ToInt32(item.type)); if (name == "ATTENDANCE_IN" || name == "ATTENDANCE_OUT") { name = ManagerHelp.FaceName.ToUpper(); } if (components.Where(c => c.Name.ToUpper() == name).Any()) { string identity = components.FirstOrDefault(c => c.Name.ToUpper() == name).Cid; assembly.SendAlgorithmSet(item, identity); } } } } } } catch (Exception ex) { } }
/// <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="nextIdentity"></param> public void InitCrew() { using (var con = new MyContext()) { var component = con.Component.FirstOrDefault(c => c.Type != ComponentType.AI && c.Name == ManagerHelp.FaceName && c.Line == 0); if (component != null) { var crewInfos = ProtoBDManager.CrewQuery(); foreach (var item in crewInfos) { assembly.SendCrewAdd(item, component.Cid); } } } }
/// <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); }