public void SetCtrlStyle(DoorControlStyle ctrlStyle, int delaySecond = 3) { data[1] = 3; switch (ctrlStyle) { case DoorControlStyle.Online: data[1] = 3; break; case DoorControlStyle.AlwaysOpen: data[1] = 1; break; case DoorControlStyle.AlwaysClose: data[1] = 2; break; default: break; } if (delaySecond < 1) { delaySecond = 3; } data[2] = (byte)delaySecond; }
public bool SetDoorControlStyle(Controller controller, int doorNum, DoorControlStyle ctrlStyle, int delaySecond = 3) { WGPacket packet = new WGPacket(0x80); packet.SetDevSn(controller.sn); packet.SetDoorNum(doorNum); packet.SetCtrlStyle(ctrlStyle, delaySecond); DoSend(packet, controller.ip, controller.port); List <WGPacket> packets = WGRecievePacketAddClose(1); if (packets.Count == 1) { return(packets[0].data[0] > 0); } return(false); }
private void btnApplyState_Click(object sender, EventArgs e) { List <decimal> ids = GetCtrlIds(); bool isAllowVisitor = cbIsAllowVisitor.Checked; CtrlWaiting waiting = new CtrlWaiting(() => { try { List <decimal> visitorIds = new List <decimal>(); foreach (var item in _doors) { if (item.IS_ALLOW_VISITOR != isAllowVisitor) { visitorIds.Add(item.ID); } } if (visitorIds.Count > 0) { Maticsoft.DBUtility.DbHelperSQL.Query("update SMT_DOOR_INFO set IS_ALLOW_VISITOR=" + (isAllowVisitor ? 1 : 0) + " where ID in (" + string.Join(",", visitorIds.ToArray()) + ")"); WinInfoHelper.ShowInfoWindow(this.Parent, "更新访客状态正常!"); foreach (var item in _doors) { item.IS_ALLOW_VISITOR = isAllowVisitor; } } Maticsoft.BLL.SMT_CONTROLLER_INFO ctrlBLL = new Maticsoft.BLL.SMT_CONTROLLER_INFO(); var ctrls = ctrlBLL.GetModelList("ID in (" + string.Join(",", ids) + ")"); DoorControlStyle style = DoorControlStyle.Online; if (rbOnline.Checked) { style = DoorControlStyle.Online; } else if (rbAlwaysOpen.Checked) { style = DoorControlStyle.AlwaysOpen; } else if (rbAlwaysClose.Checked) { style = DoorControlStyle.AlwaysClose; } List <ManualResetEvent> resetEvents = new List <ManualResetEvent>(); foreach (var item in ctrls) { var doors = _doors.FindAll(m => m.CTRL_ID == item.ID); if (doors.Count == 0) { continue; } ManualResetEvent evt = new ManualResetEvent(false); resetEvents.Add(evt); ThreadPool.QueueUserWorkItem(new WaitCallback((o) => { try { var c = ControllerHelper.ToController(item); IAccessCore acc = new WGAccess(); foreach (var d in doors) { if (d.CTRL_DOOR_INDEX == null) { continue; } string temp = "在线"; switch (style) { case DoorControlStyle.Online: temp = "在线"; break; case DoorControlStyle.AlwaysOpen: temp = "常开"; break; case DoorControlStyle.AlwaysClose: temp = "常关"; break; default: break; } bool ret = acc.SetDoorControlStyle(c, (int)d.CTRL_DOOR_INDEX, style, iDelayTime.Value); if (!ret) { this.Invoke(new Action(() => { if (_dgvX != null) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(_dgvX, DateTime.Now, d.DOOR_NAME, "设置门禁失败!控制器IP=" + item.IP + ",SN=" + item.SN_NO + ",门禁:" + d.DOOR_NAME); _dgvX.Rows.Insert(0, row); row.Selected = true; } })); WinInfoHelper.ShowInfoWindow(this.Parent, "设置门禁失败!控制器IP=" + item.IP + ",SN=" + item.SN_NO + ",门禁:" + d.DOOR_NAME); continue; } else { Maticsoft.BLL.SMT_DOOR_INFO doorBll = new Maticsoft.BLL.SMT_DOOR_INFO(); d.CTRL_DELAY_TIME = iDelayTime.Value; d.CTRL_STYLE = (int)style; doorBll.Update(d); IsChanged = true; this.Invoke(new Action(() => { if (_dgvX != null) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(_dgvX, DateTime.Now, d.DOOR_NAME, "设置门禁:" + d.DOOR_NAME + " " + temp + "状态,时间" + iDelayTime.Value + "秒成功!"); _dgvX.Rows.Insert(0, row); row.Selected = true; } })); WinInfoHelper.ShowInfoWindow(this.Parent, "设置门禁:" + d.DOOR_NAME + " " + temp + "状态,时间" + iDelayTime.Value + "秒成功!"); } } } catch (Exception ex) { log.Error("设置门禁发生异常:", ex); this.Invoke(new Action(() => { if (_dgvX != null) { DataGridViewRow row = new DataGridViewRow(); row.CreateCells(_dgvX, DateTime.Now, "", "设置门禁发生异常!控制器IP=" + item.IP + ",SN=" + item.SN_NO + ",异常信息:" + ex.Message); _dgvX.Rows.Insert(0, row); row.Selected = true; } })); WinInfoHelper.ShowInfoWindow(this.Parent, "设置门禁发生异常!控制器IP=" + item.IP + ",SN=" + item.SN_NO + ",异常信息:" + ex.Message); } finally { evt.Set(); } })); } foreach (var item in resetEvents) { item.WaitOne(15000); } } catch (Exception ex) { log.Error("设置门禁发生异常1:", ex); WinInfoHelper.ShowInfoWindow(this.Parent, "设置门禁发生异常!"); } finally { this.Invoke(new Action(() => { this.Close(); })); } }); waiting.Show(this); }