/// <summary> /// 解锁 /// </summary> /// <param name="cardnumber"></param> /// <param name="flag"></param> private void UnlockDistanceCard(int flag) { try { StopTimeOutThread(); int index = -1; foreach (KeyValuePair <CbCardInfo, int> item in _mUnLockList) { index++; if (_mUnLockCardInfo != null && item.Key == _mUnLockCardInfo) { if (flag == 0) { item.Key.Unlocked = 0; Dbhelper.Db.Update <CbCardInfo>(item.Key); dgv_UnlockList["c_State", index].Value = Properties.Resources.check; OnLockChange(item); } _mUnLockCardInfo = null; continue; } if (_mUnLockCardInfo != null) { continue; } if (item.Key.Unlocked == 0) { continue; } _mUnLockCardInfo = item.Key; DistanceTypeParameter typeparam = new DistanceTypeParameter() { Lock = 0, Distance = item.Key.Distance }; int typebyte = DistanceCardHelper.SetCardTypeByte(typeparam, 1); byte[] by = PortAgreement.GetDistanceContent(item.Key.CardNumber, typebyte); PortHelper.SerialPortWrite(by); StartTimeOutThread(); return; } foreach (KeyValuePair <CbCardInfo, int> item in _mUnLockList) { if (item.Key.Unlocked != 0) { UseControlEnabled(); return; } } dgv_UnlockList.Rows.Clear(); this.DialogResult = DialogResult.OK; } catch (Exception ex) { UseControlEnabled(); CustomExceptionHandler.GetExceptionMessage(ex); MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// 确认 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Btn_Enter_Click(object sender, EventArgs e) { //获取延期时间 DateTime newtime = t_NewTime.Value; //获取车场分区的值 int partition = cb_CardPartition.SelectedIndex == 0 ? 0 : GetPartition(); if (_mCardInfo != null)//定距卡 { btn_Enter.Enabled = false; _mCardInfo.StopTime = newtime; _mCardInfo.FieldPartition = partition; try { if (_mCardCounting == null) { //获取定距卡计数信息 _mCardCounting = Dbhelper.Db.FirstDefault <CbCardCountingState>(" and UseNumber = '" + _mCardInfo.CardNumber + "' "); //计数加1 _mCardCounting.UseCounting = DistanceCardHelper.LimitCount(_mCardCounting.UseCounting); } //将数据写入定距卡 byte[] by = DistanceCardHelper.SetDistanceData(_mCardInfo.CardNumber, _mCardCounting.UseCounting, _mCardInfo.StopTime, _mCardInfo.FieldPartition); PortHelper.SerialPortWrite(by); StartTimeOut(); } catch (Exception ex) { btn_Enter.Enabled = true; CustomExceptionHandler.GetExceptionMessage(ex); MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else if (_mAssociateCard != null)//单张副卡 { _mAssociateCard.UpdateTime = newtime; _mAssociateCard.SubCardDivision = partition; this.Tag = _mAssociateCard; this.DialogResult = DialogResult.OK; } else //批量延期 { foreach (CbAssociateCard item in _mAssociateCards) { item.UpdateTime = newtime; item.SubCardDivision = partition; } this.Tag = _mAssociateCards; this.DialogResult = DialogResult.OK; } }
/// <summary> /// 获取副卡的计数信息 /// </summary> /// <param name="cardnumber"></param> /// <returns></returns> private CbCardCountingState GetViceCardCounting(string cardnumber) { CbCardCountingState cardcounting = null; foreach (CbCardCountingState item in _mViceCardCounting) { if (item.UseNumber.Equals(cardnumber)) { item.UseCounting = DistanceCardHelper.LimitCount(item.UseCounting); cardcounting = item; break; } } return(cardcounting); }
/// <summary> /// 延期更新 /// </summary> /// <param name="cardnumber"></param> /// <param name="flag"></param> private void SetUpdateCardData(int flag) { try { StopTimeOutThread(); int index = -1; //遍历更新的集合 foreach (KeyValuePair <CbCardInfo, int> item in _mUpdateList) { index++; if (_mCardInfo != null && item.Key == _mCardInfo) { if (flag != 0) //失败 { dgv_DelayList["c_State", index].Value = Properties.Resources.block; } else { DateTime maxtime = DateTime.MinValue; foreach (CbAssociateCard vicecarditem in _mViceCard) { if (vicecarditem.UseState == 1) { vicecarditem.UseState = 0; vicecarditem.AssociateCardTime = vicecarditem.UpdateTime; } if (vicecarditem.UpdateTime.Date > maxtime.Date) { maxtime = vicecarditem.UpdateTime; } } if (item.Key.StopTime.Date != maxtime.Date) { item.Key.StopTime = maxtime; //更新主卡数据 Dbhelper.Db.Update <CbCardInfo>(item.Key); } //更新副卡数据 Dbhelper.Db.Update <CbAssociateCard>(_mViceCard.ToArray()); //更新计数数据 if (_mViceCardCounting != null) { _mViceCardCounting.Add(_mCardCounting); Dbhelper.Db.Update <CbCardCountingState>(_mViceCardCounting.ToArray()); } else { Dbhelper.Db.Update <CbCardCountingState>(_mCardCounting); } dgv_DelayList["c_State", index].Value = Properties.Resources.check; OnUpdateChanage(item); } _mCardInfo = null; continue; } if (_mCardInfo != null) { continue; } if (dgv_DelayList["c_State", index].Value == Properties.Resources.check) { continue; } _mCardInfo = item.Key; //获取主卡计数字节数据 _mCardCounting = Dbhelper.Db.FirstDefault <CbCardCountingState>(" and UseNumber='" + item.Key.CardNumber + "' "); //计数字节+1 _mCardCounting.UseCounting = DistanceCardHelper.LimitCount(_mCardCounting.UseCounting); //获取副卡数据集 _mViceCard = Dbhelper.Db.ToList <CbAssociateCard>(" and CardID =" + item.Key.ID + " "); byte[] by = null; if (item.Key.CardType == (int)CardTypes.CombinationCard) //组合卡 { StringBuilder sb = new StringBuilder(); foreach (CbAssociateCard vicecarditem in _mViceCard) { sb.AppendFormat(" UseNumber='{0}' or", vicecarditem.AssociateCardNumber); } if (sb.Length > 0) { sb.Remove(sb.Length - 2, 2); } //获取副卡集合的计数字节数据集 _mViceCardCounting = Dbhelper.Db.ToList <CbCardCountingState>(string.Format(" and ({0}) ", sb.ToString())); List <CombinationCardViceCardDataParam> ViceCardParam = new List <CombinationCardViceCardDataParam>(); foreach (CbAssociateCard vicecarditem in _mViceCard) { CbCardCountingState vicecardcounting = GetViceCardCounting(vicecarditem.AssociateCardNumber); ViceCardParam.Add(new CombinationCardViceCardDataParam() { ViceCardCount = vicecardcounting.UseCounting, ViceCardNumber = vicecarditem.AssociateCardNumber, ViceCardPartition = vicecarditem.SubCardDivision, ViceCardTime = vicecarditem.UpdateTime }); } by = DistanceCardHelper.SetDistanceData(item.Key.CardNumber, _mCardCounting.UseCounting, ViceCardParam); } else//车牌识别卡 { List <LprCardViceCardParam> ViceCardParam = new List <LprCardViceCardParam>(); foreach (CbAssociateCard vicecarditem in _mViceCard) { ViceCardParam.Add(new LprCardViceCardParam() { PlateNumber = vicecarditem.AssociateCardNumber, ViceCardPartition = vicecarditem.SubCardDivision, ViceCardTime = vicecarditem.UpdateTime }); } by = DistanceCardHelper.SetDistanceData(item.Key.CardNumber, _mCardCounting.UseCounting, ViceCardParam); } //发送数据 PortHelper.SerialPortWrite(by); //开始超时线程 StartTimeOutThread(); return; } btn_Enter.Enabled = PortHelper.IsConnection; this.DialogResult = DialogResult.OK; } catch (Exception ex) { SetControlEnabled(); CustomExceptionHandler.GetExceptionMessage(ex); MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// 确认 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Btn_Enter_Click(object sender, EventArgs e) { btn_Enter.Enabled = false; byte[] by = null; try { if (_mCardCounting == null) { //获取主卡计数数据 _mCardCounting = Dbhelper.Db.FirstDefault <CbCardCountingState>(string.Format(" and UseNumber='{0}' ", _mCardInfo.CardNumber)); //当前计数+1 _mCardCounting.UseCounting = DistanceCardHelper.LimitCount(_mCardCounting.UseCounting); } //获取副卡集合 _mViceCard = new List <CbAssociateCard>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < dgv_DataList.RowCount; i++) { CbAssociateCard mvicecard = FormComm.GetDataSourceToClass <CbAssociateCard>(dgv_DataList, i); _mViceCard.Add(mvicecard); sb.AppendFormat(" UseNumber='{0}' or", mvicecard.AssociateCardNumber); } if (sb.Length > 0) { sb = sb.Remove(sb.Length - 2, 2); } if (_mViceCardCounting == null && _mCardInfo.CardType == (int)CardTypes.CombinationCard) { //获取副卡的计数数据 _mViceCardCounting = Dbhelper.Db.ToList <CbCardCountingState>(string.Format(" and ({0}) ", sb.ToString())); List <CombinationCardViceCardDataParam> ViceCardParams = new List <CombinationCardViceCardDataParam>(); foreach (CbCardCountingState item in _mViceCardCounting) { //副卡计数+1 item.UseCounting = DistanceCardHelper.LimitCount(item.UseCounting); //获取副卡 CbAssociateCard vicecard = GetViceCard(item.UseNumber); ViceCardParams.Add(new CombinationCardViceCardDataParam() { ViceCardCount = item.UseCounting, ViceCardNumber = item.UseNumber, ViceCardPartition = vicecard.SubCardDivision, ViceCardTime = vicecard.UpdateTime }); } by = DistanceCardHelper.SetDistanceData(_mCardInfo.CardNumber, _mCardCounting.UseCounting, ViceCardParams); } else //车牌识别卡 { List <LprCardViceCardParam> ViceCardParams = new List <LprCardViceCardParam>(); foreach (CbAssociateCard item in _mViceCard) { ViceCardParams.Add(new LprCardViceCardParam() { PlateNumber = item.AssociateCardNumber, ViceCardPartition = item.SubCardDivision, ViceCardTime = item.UpdateTime }); } by = DistanceCardHelper.SetDistanceData(_mCardInfo.CardNumber, _mCardCounting.UseCounting, ViceCardParams); } PortHelper.SerialPortWrite(by); StartTimeOutThread(); } catch (Exception ex) { btn_Enter.Enabled = true; CustomExceptionHandler.GetExceptionMessage(ex); MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }