Esempio n. 1
0
        private void btnKeyboard_Click(object sender, RoutedEventArgs e)
        {
            NoKeyboard kb = new NoKeyboard(frmResolution.ViewModel.CountDownSeconds);

            countDownSeconds.Pause();
            kb.ShowDialog();
            countDownSeconds.Start();
            if (!string.IsNullOrEmpty(kb.SeatNo))
            {
                string roomName = frmResolution.ViewModel.RoomName;
                string seatNo   = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, kb.SeatNo);
                TipForm_SelectSeatConfinmed tip = new TipForm_SelectSeatConfinmed(roomName, seatNo, frmResolution.ViewModel.CountDownSeconds);//显示提示窗体
                countDownSeconds.Pause();
                tip.ShowDialog();
                countDownSeconds.Start();
                if (tip.IsTrue)
                {
                    clientobject.EnterOutLogData.EnterOutlog.SeatNo      = kb.SeatNo;
                    clientobject.EnterOutLogData.EnterOutlog.TerminalNum = clientobject.ClientSetting.ClientNo;
                    clientobject.EnterOutLogData.EnterOutlog.Remark      = string.Format("在终端{0}输入座位号选择,{1},{2}号座位", clientobject.ClientSetting.ClientNo, clientobject.EnterOutLogData.Student.AtReadingRoom.Name, seatNo);
                    clientobject.EnterOutLogData.FlowControl             = SeatManage.EnumType.ClientOperation.SelectSeat; //操作为选择座位
                    this.Hide();
                }
                else
                {
                    T_SM_Seat.UnLockSeat(kb.SeatNo);//确认窗口点击取消或者自动关闭,则解锁。
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// 添加常坐座位
 /// </summary>
 public void AddOften()
 {
     try
     {
         List <Seat> seats = T_SM_Seat.GetReaderOftenUsedSeat(ClientObject.EnterOutLogData.EnterOutlog.CardNo, ClientObject.ClientSetting.DeviceSetting.UsingOftenUsedSeat.LengthDays, ClientObject.ClientSetting.DeviceSetting.Rooms);
         for (int i = 0; i < 12; i++)
         {
             if (i > seats.Count - 1)
             {
                 OftenUsedSeats[i].SeatNo          = "";
                 OftenUsedSeats[i].ShortSeatNo     = "";
                 OftenUsedSeats[i].ReadingRoomName = "";
                 OftenUsedSeats[i].ReadingRoomNo   = "";
                 OftenUsedSeats[i].UCVisible       = "Collapsed";
             }
             else
             {
                 OftenUsedSeats[i].SeatNo          = seats[i].SeatNo;
                 OftenUsedSeats[i].ShortSeatNo     = SeatComm.SeatNoToShortSeatNo(ClientObject.ReadingRoomList[seats[i].ReadingRoomNum].Setting.SeatNumAmount, seats[i].SeatNo);
                 OftenUsedSeats[i].ReadingRoomName = ClientObject.ReadingRoomList[seats[i].ReadingRoomNum].Name;
                 OftenUsedSeats[i].ReadingRoomNo   = seats[i].ReadingRoomNum;
                 OftenUsedSeats[i].UCVisible       = "Visible";
             }
         }
     }
     catch (Exception ex)
     {
         WriteLog.Write("加载阅览室遇到异常" + ex.Message);
         PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
     }
 }
        /// <summary>
        /// 等待座位
        /// </summary>
        public void WaitingSeat()
        {
            WaitSeatLogInfo waitLog     = clientobject.EnterOutLogData.Student.WaitSeatLog;
            ReadingRoomInfo roomInfo    = clientobject.EnterOutLogData.Student.AtReadingRoom;
            string          shortSeatNo = SeatComm.SeatNoToShortSeatNo(roomInfo.Setting.SeatNumAmount, waitLog.SeatNo);
            WaitSeatCancel  askForm     = new WaitSeatCancel(roomInfo.Name, shortSeatNo);

            askForm.ShowDialog();
            if (askForm.IsTrue)
            {
                //处理等待记录的Id
                this.clientobject.EnterOutLogData.WaitSeatLogModel              = waitLog;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.OperateType  = Operation.Reader;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.NowState     = LogStatus.Valid;
                if (T_SM_SeatWaiting.UpdateWaitLog(this.clientobject.EnterOutLogData.WaitSeatLogModel))
                {  //恢复读者的在座状态
                    this.clientobject.EnterOutLogData.EnterOutlog = T_SM_EnterOutLog.GetEnterOutLogInfoById(this.clientobject.EnterOutLogData.WaitSeatLogModel.EnterOutLogID);
                    System.TimeSpan shortleavetimelong = ServiceDateTime.Now - clientobject.EnterOutLogData.EnterOutlog.EnterOutTime;
                    this.clientobject.EnterOutLogData.EnterOutlog.EnterOutState = EnterOutLogType.ComeBack;
                    this.clientobject.EnterOutLogData.EnterOutlog.EnterOutType  = LogStatus.Valid;
                    this.clientobject.EnterOutLogData.EnterOutlog.Flag          = Operation.OtherReader;
                    clientobject.EnterOutLogData.EnterOutlog.TerminalNum        = clientobject.ClientSetting.ClientNo;
                    this.clientobject.EnterOutLogData.EnterOutlog.Remark        = string.Format("读者{0}在{1}终端取消等待{2} {3}号座位,您暂离{4}分钟后恢复为在座状态",
                                                                                                this.clientobject.EnterOutLogData.WaitSeatLogModel.CardNo,
                                                                                                this.clientobject.ClientSetting.ClientNo,
                                                                                                this.clientobject.EnterOutLogData.EnterOutlog.ReadingRoomName,
                                                                                                this.clientobject.EnterOutLogData.EnterOutlog.ShortSeatNo,
                                                                                                shortleavetimelong.Minutes);
                    int newId = -1;
                    EnterOutOperate.AddEnterOutLog(this.clientobject.EnterOutLogData.EnterOutlog, ref newId);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 获取布局图
        /// </summary>
        public void GetLayout()
        {
            Layout = ClientObject.ReadingRoomList[ReadingRoomNo].SeatList;
            bool isCanSelectBespeak = ClientObject.ReadingRoomList[ReadingRoomNo].Setting.SeatBespeak.Used && ClientObject.ReadingRoomList[ReadingRoomNo].Setting.SeatBespeak.SelectBespeakSeat;
            bool isCanWait          = ClientObject.ReadingRoomList[ReadingRoomNo].Setting.NoManagement.Used;

            foreach (KeyValuePair <string, Seat> seat in Layout.Seats)
            {
                SeatUC_ViewModel seatVM = new SeatUC_ViewModel();
                seat.Value.ShortSeatNo        = SeatComm.SeatNoToShortSeatNo(ClientObject.ReadingRoomList[ReadingRoomNo].Setting.SeatNumAmount, seat.Value.SeatNo);
                seatVM.IsCanSelectBespeakSeat = isCanSelectBespeak;
                seatVM.IsCanWaitSeat          = isCanWait;
                seatVM.IsBespeak          = false;
                seatVM.IsPower            = seat.Value.HavePower;
                seatVM.IsShortLeave       = false;
                seatVM.IsStop             = seat.Value.IsSuspended;
                seatVM.IsUsing            = false;
                seatVM.IsWaiting          = false;
                seatVM.LongSeatNo         = seat.Value.SeatNo;
                seatVM.ReadingRoomNo      = seat.Value.ReadingRoomNum;
                seatVM.ShortSeatNo        = seat.Value.ShortSeatNo;
                seatVM.SelectSeat        += RoomSeatWindow_SelectSeat;
                seatVM.SelectBespeakSeat += RoomSeatWindow_SelectBespeakSeat;
                seatVM.WaitSeat          += RoomSeatWindow_WaitSeat;
                _seatLayoutList.Add(seat.Key, seatVM);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 初始化常坐座位按钮
        /// </summary>
        public void InitiallizeOftenSeat(List <Seat> seats)
        {
            try
            {
                int seatBtnX = 4;
                int seatBtnY = 53;
                if (seats.Count == 0)
                {
                    OftenUsedSeatButton seatBtn = new OftenUsedSeatButton();
                    seatBtn.Text     = "暂无常坐座位";
                    seatBtn.Location = new Point(seatBtnX, seatBtnY);
                    this.Controls.Add(seatBtn);
                }
                else
                {
                    for (int i = 0; i < seats.Count; i++)
                    {
                        ReadingRoomInfo roomInfo = clientobject.ReadingRoomList[seats[i].ReadingRoomNum];
                        seats[i].ShortSeatNo = SeatComm.SeatNoToShortSeatNo(roomInfo.Setting.SeatNumAmount, seats[i].SeatNo);
                        OftenUsedSeatButton seatBtn = new OftenUsedSeatButton();
                        seatBtn.ReadingRoomNo   = seats[i].ReadingRoomNum;
                        seatBtn.ReadingRoomName = roomInfo.Name;
                        seatBtn.SeatNo          = seats[i].SeatNo;
                        seatBtn.ShortSeatNo     = seats[i].ShortSeatNo;
                        seatBtn.Location        = new Point(seatBtnX, seatBtnY);
                        seatBtn.Click          += new EventHandler(seatBtn_Click);
                        this.Controls.Add(seatBtn);

                        seatBtnX += 165;
                        if ((i + 1) % 3 == 0)
                        {
                            seatBtnX  = 4;
                            seatBtnY += 53;
                        }
                        if ((i + 1) > clientobject.ClientSetting.DeviceSetting.UsingOftenUsedSeat.SeatCount)
                        {
                            break;
                        }
                    }
                }
            }
            catch
            {
                SeatManage.SeatClient.Tip.Tip_Framework tip = new SeatManage.SeatClient.Tip.Tip_Framework(SeatManage.EnumType.TipType.Exception, 7);//显示提示窗体
                tip.ShowDialog();
                clientobject.EnterOutLogData.EnterOutlog.SeatNo = "";
            }
        }
        /// <summary>
        /// 等待座位
        /// </summary>
        public void WaitingSeat()
        {
            WaitSeatLogInfo waitLog = clientobject.EnterOutLogData.Student.WaitSeatLog;
            ReadingRoomInfo roomInfo = clientobject.EnterOutLogData.Student.AtReadingRoom;

            string shortSeatNo = SeatComm.SeatNoToShortSeatNo(roomInfo.Setting.SeatNumAmount, waitLog.SeatNo);
            MessageWindow popWindowCancel = new MessageWindow(MessageType.CancelWaitConfirm);
            popWindowCancel.ShowDialog();
            if (popWindowCancel.viewModel.OperateResule == HandleResult.Successed)
            {
                //处理等待记录的Id
                this.clientobject.EnterOutLogData.WaitSeatLogModel = waitLog;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.OperateType = Operation.Reader;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                this.clientobject.EnterOutLogData.WaitSeatLogModel.NowState = LogStatus.Valid;
                if (T_SM_SeatWaiting.UpdateWaitLog(this.clientobject.EnterOutLogData.WaitSeatLogModel))
                {  //恢复读者的在座状态

                    this.clientobject.EnterOutLogData.EnterOutlog = T_SM_EnterOutLog.GetEnterOutLogInfoById(this.clientobject.EnterOutLogData.WaitSeatLogModel.EnterOutLogID);
                    System.TimeSpan shortleavetimelong = ServiceDateTime.Now - clientobject.EnterOutLogData.EnterOutlog.EnterOutTime;
                    this.clientobject.EnterOutLogData.EnterOutlog.EnterOutState = EnterOutLogType.ComeBack;
                    this.clientobject.EnterOutLogData.EnterOutlog.EnterOutType = LogStatus.Valid;
                    this.clientobject.EnterOutLogData.EnterOutlog.Flag = Operation.OtherReader;
                    clientobject.EnterOutLogData.EnterOutlog.TerminalNum = clientobject.ClientSetting.ClientNo;
                    this.clientobject.EnterOutLogData.EnterOutlog.Remark = string.Format("读者{0}在{1}终端取消等待{2} {3}号座位,您暂离{4}分钟后恢复为在座状态",
                        this.clientobject.EnterOutLogData.WaitSeatLogModel.CardNo,
                        this.clientobject.ClientSetting.ClientNo,
                        this.clientobject.EnterOutLogData.EnterOutlog.ReadingRoomName,
                        this.clientobject.EnterOutLogData.EnterOutlog.ShortSeatNo,
                        shortleavetimelong.Minutes);
                    int newId = -1;
                    if (EnterOutOperate.AddEnterOutLog(this.clientobject.EnterOutLogData.EnterOutlog, ref newId) == HandleResult.Successed)
                    {
                        MessageWindow popWindow = new MessageWindow(MessageType.CancleWaitSuccess);
                        popWindow.ShowDialog();
                    }
                    else
                    {
                        MessageWindow popWindow = new MessageWindow(MessageType.Exception);
                        popWindow.ShowDialog();
                    }
                }

            }
        }
        /// <summary>
        /// 座位等待处理
        /// </summary>
        /// <param name="readingRoom">阅览室</param>
        /// <param name="enterOutLog">进出记录</param>
        /// <param name="waitSeatLoglist">等待记录列表</param>
        private void WaitSeatOperate(ReadingRoomInfo readingRoom, EnterOutLogInfo enterOutLog, List <WaitSeatLogInfo> waitSeatLoglist, DateTime nowDateTime)
        {
            try
            {
                waitSeatLoglist[0].WaitingState    = EnterOutLogType.WaitingSuccess;
                waitSeatLoglist[0].StatsChangeTime = nowDateTime;
                seatManageService.UpdateWaitLog(waitSeatLoglist[0]);
                ReaderNoticeInfo notice = new ReaderNoticeInfo();

                //释放原读者座位
                int logid = 0;
                enterOutLog.Flag          = Operation.Service;
                enterOutLog.EnterOutState = EnterOutLogType.Leave;
                enterOutLog.EnterOutTime  = nowDateTime;
                enterOutLog.Remark        = string.Format("在{0},{1}号座位,被其他读者设置暂离,暂离超时,被监控服务释放座位", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount));
                seatManageService.AddEnterOutLogInfo(enterOutLog, ref logid);

                WriteLog.Write(string.Format("监控服务:读者{0},{1}", enterOutLog.CardNo, enterOutLog.Remark));
                //等待读者入座
                EnterOutLogInfo new_eol = new EnterOutLogInfo();
                new_eol.CardNo        = waitSeatLoglist[0].CardNo;
                new_eol.EnterOutLogNo = SeatComm.RndNum();
                new_eol.EnterOutState = EnterOutLogType.WaitingSuccess;
                new_eol.EnterOutType  = LogStatus.Valid;
                new_eol.ReadingRoomNo = waitSeatLoglist[0].ReadingRoomNo;
                new_eol.Flag          = Operation.Service;
                new_eol.SeatNo        = enterOutLog.SeatNo;
                new_eol.Remark        = string.Format("在{0},{1}号座位,等待成功,自动入座", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount));
                seatManageService.AddEnterOutLogInfo(new_eol, ref logid);

                WriteLog.Write(string.Format("监控服务:读者{0},{1}", new_eol.CardNo, new_eol.Remark));
                if (readingRoom.Setting.IsRecordViolate)
                {
                    AddViolationRecordByEnterOutLog(enterOutLog, ViolationRecordsType.ShortLeaveByReaderOutTime, string.Format("读者在{0},{1}号座位,被其他读者设置暂离,暂离超时", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount)), readingRoom.Setting, nowDateTime);
                }
            }
            catch (Exception ex)
            {
                WriteLog.Write(string.Format("监控服务:处理等待读者发生错误:" + ex.Message));
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 随机选择
        /// </summary>
        /// <returns></returns>
        public bool RandomSeat()
        {
            if (LastSeatCount == 0)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ReadingRoomFull);
                return(false);
            }
            string tempSeatNo = T_SM_Seat.RandomAllotSeat(ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo);

            if (T_SM_Seat.LockSeat(tempSeatNo) != SeatLockState.Locked)//座位锁定失败,则提示
            {
                ClientObject.EnterOutLogData.EnterOutlog.SeatNo = "";
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SeatLocking);
                return(false);
            }
            ClientObject.EnterOutLogData.EnterOutlog.Remark      = string.Format("在终端{0}刷卡,自动选择{1} {2}号座位", ClientObject.ClientSetting.ClientNo, ClientObject.EnterOutLogData.Student.AtReadingRoom.Name, tempSeatNo.Substring(tempSeatNo.Length - ClientObject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount));
            ClientObject.EnterOutLogData.EnterOutlog.SeatNo      = tempSeatNo;
            ClientObject.EnterOutLogData.EnterOutlog.TerminalNum = ClientObject.ClientSetting.ClientNo;
            ClientObject.EnterOutLogData.EnterOutlog.ShortSeatNo = SeatComm.SeatNoToShortSeatNo(ClientObject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, ClientObject.EnterOutLogData.EnterOutlog.SeatNo);
            ClientObject.EnterOutLogData.FlowControl             = ClientOperation.SelectSeat; //操作为选择座位
            return(true);
        }
 /// <summary>
 /// 显示当前读者的详细进出记录
 /// </summary>
 /// <param name="cardNo"></param>
 private void ShowEnterOutLogMessage(string cardNo)
 {
     if (!string.IsNullOrEmpty(cardNo))
     {
         DateTime nowdt = ServiceDateTime.Now;
         List <EnterOutLogInfo> eollist = readerLogQuery.QueryEnterOugLogs(cardNo, nowdt);
         //List<BespeakLogInfo> blilist = readerLogQuery.QueryBespeakLogs(cardNo, nowdt);
         //List<WaitSeatLogInfo> wslilist = readerLogQuery.QueryWaitSeatLogs(cardNo, nowdt);
         lblCardNo.Text = cardNo;
         bool flag = false;
         for (int i = 0; i < eollist.Count; i++)
         {
             if (eollist[i].EnterOutType == SeatManage.EnumType.LogStatus.Valid && eollist[i].EnterOutState != SeatManage.EnumType.EnterOutLogType.Leave)
             {
                 ReadingRoomInfo room = T_SM_ReadingRoom.GetSingleRoomInfo(eollist[i].ReadingRoomNo);
                 lblReadingRoomName.Text = room.Name;
                 lblSeatNo.Text          = SeatComm.SeatNoToShortSeatNo(room.Setting.SeatNumAmount, eollist[i].SeatNo);
                 lblNowState.Text        = SeatComm.ConvertReaderState(eollist[i].EnterOutState);
                 flag = true;
                 break;
             }
         }
         if (!flag)
         {
             lblReadingRoomName.Text = "没有选择座位";
             lblNowState.Text        = "无座";
             lblSeatNo.Text          = "无";
         }
         List <Label> labelList = readerLogQuery.GetEnterOutLogLabels(eollist);
         panel1.Controls.Clear();
         for (int i = 0; i < labelList.Count; i++)
         {
             panel1.Controls.Add(labelList[i]);
         }
     }
 }
Esempio n. 10
0
 /// <summary>
 /// 添加常坐座位
 /// </summary>
 public void AddOften()
 {
     try
     {
         OftenUsedSeats.Clear();
         List <Seat> seats = SeatManage.Bll.T_SM_Seat.GetReaderOftenUsedSeat(clientObject.EnterOutLogData.EnterOutlog.CardNo, clientObject.ClientSetting.DeviceSetting.UsingOftenUsedSeat.LengthDays, clientObject.ClientSetting.DeviceSetting.Rooms);
         for (int i = 0; i < seats.Count; i++)
         {
             UsuallySeatUC_ViewModel vm = new UsuallySeatUC_ViewModel();
             seats[i].ShortSeatNo = SeatComm.SeatNoToShortSeatNo(seats[i].ReadingRoom.Setting.SeatNumAmount, seats[i].SeatNo);
             vm.SeatNo            = seats[i].SeatNo;
             vm.ShortSeatNo       = seats[i].ShortSeatNo;
             vm.ReadingRoomName   = seats[i].ReadingRoom.Name;
             vm.ReadingRoomNo     = seats[i].ReadingRoomNum;
             OftenUsedSeats.Add(vm);
         }
     }
     catch (Exception ex)
     {
         SeatManage.SeatManageComm.WriteLog.Write("加载阅览室遇到异常" + ex.Message);
         MessageWindow errorWindow = new MessageWindow(MessageType.Exception);
         errorWindow.ShowDialog();
     }
 }
Esempio n. 11
0
        private void btnYes_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtSeatNo.Text.Trim()))
            {
                toolTip1.SetToolTip(txtSeatNo, "请输入座位号!");
                toolTip1.Show("请输入座位号!", txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }
            string          seatNo     = "";
            ReadingRoomInfo roomInfo   = clientObject.EnterOutLogData.Student.AtReadingRoom;
            string          roomNo     = roomInfo.No + "000";
            string          seatHeader = SeatComm.SeatNoToSeatNoHeader(roomInfo.Setting.SeatNumAmount, roomNo);

            seatNo = seatHeader + txtSeatNo.Text;
            //获取座位信息,并判断座位在该阅览室是否存在。
            Seat seat = T_SM_Seat.GetSeatInfoBySeatNo(seatNo);

            if (seat == null)
            {
                toolTip1.SetToolTip(txtSeatNo, "座位号输入有误,请输入正确的座位号!");
                toolTip1.Show("座位号输入有误,请输入正确的座位号!", txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }
            if (seat.IsSuspended)
            {
                toolTip1.SetToolTip(txtSeatNo, "您选择的座位,已暂停使用,请重新选择!");
                toolTip1.Show("您选择的座位,已暂停使用,请重新选择!", txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }
            if (seat.ReadingRoomNum != roomInfo.No)
            {
                toolTip1.SetToolTip(txtSeatNo, string.Format("座位{0}在该阅览室不存在", txtSeatNo.Text));
                toolTip1.Show(string.Format("座位{0}在该阅览室不存在", txtSeatNo.Text), txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }

            SeatManage.EnumType.EnterOutLogType logType = SeatManage.Bll.T_SM_EnterOutLog.GetSeatUsedState(seatNo);

            //TODO:还需检测座位是否被预约 SeatManage.Bll.T_SM_EnterOutLog
            if (logType == SeatManage.EnumType.EnterOutLogType.None || logType == SeatManage.EnumType.EnterOutLogType.Leave)
            {
                //根据座位号获取进出记录的状态,如果为None或者为Leave,则锁定座位
                SeatManage.EnumType.SeatLockState lockResult = SeatManage.Bll.T_SM_Seat.LockSeat(seatNo);
                if (lockResult == SeatManage.EnumType.SeatLockState.NotExists)
                {
                    toolTip1.SetToolTip(txtSeatNo, "座位号不存在");
                    toolTip1.Show("座位号不存在", txtSeatNo, 5000);
                    return;
                }
                else if (lockResult == SeatManage.EnumType.SeatLockState.UnLock)
                {
                    toolTip1.SetToolTip(txtSeatNo, "座位正在被其他读者选择");
                    toolTip1.Show("座位正在被其他读者选择", txtSeatNo, 5000);
                    txtSeatNo.Text = "";
                    return;
                }
                else if (lockResult == SeatManage.EnumType.SeatLockState.Locked)
                {
                    this._seatNo = seatNo;
                    this.Close();
                    this.Dispose();
                }
            }
            else if (logType == SeatManage.EnumType.EnterOutLogType.BespeakWaiting)
            {
                toolTip1.SetToolTip(txtSeatNo, "已被其他读者预约");
                toolTip1.Show("已被其他读者预约", txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }
            else
            {
                toolTip1.SetToolTip(txtSeatNo, "座位正在被使用");
                toolTip1.Show("座位正在被使用", txtSeatNo, 5000);
                txtSeatNo.Text = "";
                return;
            }
            //}
            //else
            //{
            //    toolTip1.SetToolTip(txtSeatNo, "请输入最后四位座位号");
            //    toolTip1.Show("请输入座位号",txtSeatNo,5000);
            //}
        }
        /// <summary>
        /// 选座操作
        /// </summary>
        public void ChooseSeat()
        {
            //进出记录相关属性赋值。
            clientobject.EnterOutLogData.EnterOutlog.EnterOutLogNo = SeatManage.SeatManageComm.SeatComm.RndNum();
            clientobject.EnterOutLogData.EnterOutlog.EnterOutState = SeatManage.EnumType.EnterOutLogType.SelectSeat;
            clientobject.EnterOutLogData.EnterOutlog.Flag          = SeatManage.EnumType.Operation.Reader;
            clientobject.EnterOutLogData.EnterOutlog.EnterOutType  = SeatManage.EnumType.LogStatus.Valid;

            ReadingRoomWindow readingRoomWindow = new ReadingRoomWindow();

            readingRoomWindow.ShowDialog();
            if (clientobject.EnterOutLogData.FlowControl == SeatManage.EnumType.ClientOperation.Exit)//阅览室选座操作为退出,结束选座流程
            {
                return;
            }
            switch (readingRoomWindow.viewModel.RoomSelectSeatMethod)
            {
            case SelectSeatMode.AutomaticMode:
                string tempSeatNo = T_SM_Seat.RandomAllotSeat(clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo);
                SeatManage.EnumType.SeatLockState lockseat = T_SM_Seat.LockSeat(tempSeatNo);
                if (lockseat == SeatLockState.Locked)    //座位锁定失败,则提示
                {
                    clientobject.EnterOutLogData.EnterOutlog.Remark      = string.Format("在终端{0}刷卡,自动选择{1} {2}号座位", clientobject.ClientSetting.ClientNo, clientobject.EnterOutLogData.Student.AtReadingRoom.Name, tempSeatNo.Substring(tempSeatNo.Length - clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount));
                    clientobject.EnterOutLogData.EnterOutlog.SeatNo      = tempSeatNo;
                    clientobject.EnterOutLogData.EnterOutlog.TerminalNum = clientobject.ClientSetting.ClientNo;
                    clientobject.EnterOutLogData.EnterOutlog.ShortSeatNo = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                }
                else
                {
                    clientobject.EnterOutLogData.EnterOutlog.SeatNo = "";
                    PopupWindow popWindow = new PopupWindow(TipType.SeatLocking);
                    popWindow.ShowDialog();
                }
                break;

            case SelectSeatMode.ManualMode:
                //座位选择的操作为退出,结束选座流程;操作为选座,跳出循环;否则操作为back,继续执行循环操作
                break;
            }
            if (string.IsNullOrEmpty(clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo) || string.IsNullOrEmpty(clientobject.EnterOutLogData.EnterOutlog.SeatNo))
            {
                //如果阅览室编号或者座位号为空,则不执行插入操作。
                return;
            }
            int          newLogId = -1;
            HandleResult result   = EnterOutOperate.AddEnterOutLog(clientobject.EnterOutLogData.EnterOutlog, ref newLogId);//插入进出记录

            if (result == HandleResult.Successed)
            {
                T_SM_Seat.UnLockSeat(clientobject.EnterOutLogData.EnterOutlog.SeatNo);//记录插入成功,解锁座位
                if (clientobject.EnterOutLogData.WaitSeatLogModel != null)
                {
                    //等待记录的实体不为空,说明当前读者操作为等待座位。
                    //TODO:添加等待记录
                    clientobject.EnterOutLogData.WaitSeatLogModel.EnterOutLogID = newLogId;
                    T_SM_SeatWaiting.AddWaitSeatLog(clientobject.EnterOutLogData.WaitSeatLogModel);
                    PrintData data = new PrintData();
                    data.CardNo          = clientobject.EnterOutLogData.WaitSeatLogModel.CardNo;
                    data.EnterTime       = ServiceDateTime.Now;
                    data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                    data.SecCardNo       = clientobject.EnterOutLogData.EnterOutlog.CardNo;
                    double timelength = NowReadingRoomState.GetSeatHoldTime(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatHoldTime, data.EnterTime);
                    data.WaitEndDateTime = data.EnterTime.AddMinutes(timelength);
                    printer.ThreadPrint(PrintStatus.Wait, data, clientobject.ClientSetting.ClientNo);

                    PopupWindow popWindow = new PopupWindow(TipType.WaitSeatSuccess);
                    popWindow.ShowDialog();
                }
                else
                {
                    PrintData data = new PrintData();
                    data.CardNo          = clientobject.EnterOutLogData.EnterOutlog.CardNo;
                    data.EnterTime       = ServiceDateTime.Now;
                    data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                    if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip == PrintSlipMode.AutoPrint)
                    {
                        printer.ThreadPrint(PrintStatus.General, data, clientobject.ClientSetting.ClientNo);
                    }
                    if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip == PrintSlipMode.UserChoose)
                    {
                        PopupWindow printWindow = new PopupWindow(TipType.PrintConfIrm);
                        printWindow.ShowDialog();
                        if (printWindow.viewModel.OperateResule == HandleResult.Successed)
                        {
                            printer.ThreadPrint(PrintStatus.General, data, clientobject.ClientSetting.ClientNo);
                        }
                    }
                    //提示选座成功
                    PopupWindow popWindow = new PopupWindow(TipType.SelectSeatResult);
                    popWindow.ShowDialog();
                }
            }
        }
        /// <summary>
        /// 预约等待
        /// </summary>
        public void BespeakSeatWait()
        {
            DateTime nowDate = ServiceDateTime.Now;

            if (clientobject.EnterOutLogData.Student.BespeakLog.Count > 0)
            {
                BespeakLogInfo bespeaklog = clientobject.EnterOutLogData.Student.BespeakLog[0];
                //if (!SelectSeatProven.CheckReadingRoomInThisClient(bespeaklog.ReadingRoomNo, clientobject.ClientSetting.DeviceSetting))
                //{  //验证房间号是否属于本触摸屏所管理的阅览室
                //    Tip_Framework uc = new Tip_Framework(TipType.BeapeatRoomNotExists, 9);
                //}
                ReadingRoomSetting set     = clientobject.EnterOutLogData.Student.AtReadingRoom.Setting;
                DateTime           dtBegin = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
                DateTime           dtEnd   = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
                if (DateTimeOperate.DateAccord(dtBegin, dtEnd, nowDate) || (set.SeatBespeak.NowDayBespeak && bespeaklog.SubmitTime == bespeaklog.BsepeakTime))
                {
                    //TODO:预约时间在开始时间和结束时间之间,执行预约确认操作
                    //TODO:预约确认时,判断当前座位上是否有人。
                    EnterOutLogInfo seatUsedInfo = T_SM_EnterOutLog.GetUsingEnterOutLogBySeatNo(bespeaklog.SeatNo);

                    if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                    { //条件满足,说明座位正在使用。
                        seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                        seatUsedInfo.EnterOutType  = LogStatus.Valid;
                        seatUsedInfo.TerminalNum   = clientobject.ClientSetting.ClientNo;
                        seatUsedInfo.Remark        = string.Format("预约该座位的读者在终端{0}刷卡确认入座,设置在座读者离开", clientobject.ClientSetting.ClientNo);
                        seatUsedInfo.Flag          = Operation.OtherReader;
                        int newId = -1;
                        if (EnterOutOperate.AddEnterOutLog(seatUsedInfo, ref newId) == HandleResult.Successed)
                        {
                            List <WaitSeatLogInfo> waitInfoList = SeatManage.Bll.T_SM_SeatWaiting.GetWaitSeatList(null, seatUsedInfo.EnterOutLogID, null, null, null);
                            if (waitInfoList.Count > 0)
                            {
                                this.clientobject.EnterOutLogData.WaitSeatLogModel              = waitInfoList[0];
                                this.clientobject.EnterOutLogData.WaitSeatLogModel.OperateType  = Operation.Reader;
                                this.clientobject.EnterOutLogData.WaitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                                this.clientobject.EnterOutLogData.WaitSeatLogModel.NowState     = LogStatus.Valid;
                                if (!T_SM_SeatWaiting.UpdateWaitLog(this.clientobject.EnterOutLogData.WaitSeatLogModel))
                                {
                                    PopupWindow errorWindow = new PopupWindow(TipType.Exception);
                                    errorWindow.ShowDialog();
                                    return;
                                }
                            }
                        }
                        else
                        {
                            PopupWindow errorWindow = new PopupWindow(TipType.Exception);
                            errorWindow.ShowDialog();
                            return;
                        }
                    }
                    EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                    newEnterOutLog.CardNo                    = bespeaklog.CardNo;
                    newEnterOutLog.EnterOutLogNo             = SeatComm.RndNum();
                    newEnterOutLog.EnterOutState             = EnterOutLogType.BookingConfirmation;
                    newEnterOutLog.EnterOutType              = LogStatus.Valid;
                    newEnterOutLog.Flag                      = Operation.Reader;
                    newEnterOutLog.ReadingRoomNo             = bespeaklog.ReadingRoomNo;
                    newEnterOutLog.ReadingRoomName           = bespeaklog.ReadingRoomName;
                    newEnterOutLog.ShortSeatNo               = bespeaklog.ShortSeatNum;
                    newEnterOutLog.SeatNo                    = bespeaklog.SeatNo;
                    newEnterOutLog.TerminalNum               = clientobject.ClientSetting.ClientNo;
                    newEnterOutLog.Remark                    = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    clientobject.EnterOutLogData.EnterOutlog = newEnterOutLog;
                    int          logid  = -1;
                    HandleResult result = EnterOutOperate.AddEnterOutLog(newEnterOutLog, ref logid); //添加入座记录
                    if (result == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Confinmed;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = nowDate;
                        bespeaklog.Remark       = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                        PrintData data = new PrintData();
                        data.CardNo          = bespeaklog.CardNo;;
                        data.EnterTime       = nowDate;
                        data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                        data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                        data.SeatNo          = SeatComm.SeatNoToShortSeatNo(set.SeatNumAmount, bespeaklog.SeatNo);
                        if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip == PrintSlipMode.AutoPrint)
                        {
                            printer.ThreadPrint(PrintStatus.General, data, clientobject.ClientSetting.ClientNo);
                        }
                        if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip == PrintSlipMode.UserChoose)
                        {
                            PopupWindow printWindow = new PopupWindow(TipType.PrintConfIrm);
                            printWindow.ShowDialog();
                            if (printWindow.viewModel.OperateResule == HandleResult.Successed)
                            {
                                printer.ThreadPrint(PrintStatus.General, data, clientobject.ClientSetting.ClientNo);
                            }
                        }
                    }
                    PopupWindow popWindow = new PopupWindow(TipType.BespeatSeatConfirmSuccess);
                    popWindow.ShowDialog();
                }
                else if (nowDate.CompareTo(dtBegin) < 0)
                {
                    //TODO:预约时间过早,请在dtBegin 到dtEnd刷卡确认。
                    PopupWindow popWindow = new PopupWindow(TipType.BookConfirmWarn);
                    popWindow.ShowDialog();
                    if (popWindow.viewModel.OperateResule == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Cencaled;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = ServiceDateTime.Now;
                        bespeaklog.Remark       = string.Format("在终端{0}刷卡取消{1},{2}号座位的预约。", clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        int         i = T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                        PopupWindow popWindowCancel = new PopupWindow(TipType.BookCancelSuccess);
                        popWindowCancel.ShowDialog();
                    }
                }
                else if (nowDate.CompareTo(dtEnd) < 0)
                {
                    //TODO:最迟确认时间为:dtEnd。
                }
                else
                {
                    //TODO:未知原因,预约确认失败。
                }
            }
        }
        /// <summary>
        /// 选座操作
        /// </summary>
        public void ChooseSeat()
        {
            //进出记录相关属性赋值。
            Clientobject.EnterOutLogData.EnterOutlog.EnterOutLogNo = SeatComm.RndNum();
            Clientobject.EnterOutLogData.EnterOutlog.EnterOutState = EnterOutLogType.SelectSeat;
            Clientobject.EnterOutLogData.EnterOutlog.Flag          = Operation.Reader;
            Clientobject.EnterOutLogData.EnterOutlog.EnterOutType  = LogStatus.Valid;
            ReadingRoomWindowObject.GetInstance().Window.ShowMessage();
            //阅览室选座操作为退出,结束选座流程
            if (Clientobject.EnterOutLogData.FlowControl == ClientOperation.Exit)
            {
                return;
            }
            //返回为自动选座
            if (string.IsNullOrEmpty(Clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo) || string.IsNullOrEmpty(Clientobject.EnterOutLogData.EnterOutlog.SeatNo))
            {
                //如果阅览室编号或者座位号为空,则不执行插入操作。
                if (!string.IsNullOrEmpty(Clientobject.EnterOutLogData.EnterOutlog.SeatNo))
                {
                    T_SM_Seat.UnLockSeat(Clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                }
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                return;
            }
            int newLogId = -1;

            if (EnterOutOperate.AddEnterOutLog(Clientobject.EnterOutLogData.EnterOutlog, ref newLogId) == HandleResult.Failed)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                return;
            }
            T_SM_Seat.UnLockSeat(Clientobject.EnterOutLogData.EnterOutlog.SeatNo);//记录插入成功,解锁座位

            if (Clientobject.EnterOutLogData.FlowControl == ClientOperation.WaitSeat)
            {
                //SeatManage.ClassModel.ReaderNoticeInfo rni = new SeatManage.ClassModel.ReaderNoticeInfo();
                //rni.CardNo = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                //rni.Type = NoticeType.OtherSetShortLeaveWarning;
                //rni.Note = Clientobject.EnterOutLogData.EnterOutlog.Remark;
                //SeatManage.Bll.T_SM_ReaderNotice.AddReaderNotice(rni);

                //PushMsgInfo msg = new PushMsgInfo();
                //msg.Title = "您好,您已被设置为暂离";
                //msg.MsgType = MsgPushType.OtherUser;
                //msg.StudentNum = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                //msg.Message = Clientobject.EnterOutLogData.EnterOutlog.Remark;
                //SeatManage.Bll.T_SM_ReaderNotice.SendPushMsg(msg);

                //TODO:添加等待记录
                Clientobject.EnterOutLogData.WaitSeatLogModel.EnterOutLogID = newLogId;
                if (T_SM_SeatWaiting.AddWaitSeatLog(Clientobject.EnterOutLogData.WaitSeatLogModel) > 0)
                {
                    PrintData data;
                    switch (Clientobject.ClientSetting.DeviceSetting.UsingPrintSlip)
                    {
                    case PrintSlipMode.AutoPrint:
                        data                 = new PrintData();
                        data.CardNo          = Clientobject.EnterOutLogData.WaitSeatLogModel.CardNo;
                        data.EnterTime       = ServiceDateTime.Now;
                        data.ReaderName      = Clientobject.EnterOutLogData.Student.Name;
                        data.ReadingRoomName = Clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                        data.SeatNo          = SeatComm.SeatNoToShortSeatNo(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, Clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                        data.SecCardNo       = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                        data.WaitEndDateTime = data.EnterTime.AddMinutes(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.GetSeatHoldTime(data.EnterTime));

                        printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                        break;

                    case PrintSlipMode.UserChoose:
                        PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.PrintConfIrm);
                        if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule == HandleResult.Successed)
                        {
                            data                 = new PrintData();
                            data.CardNo          = Clientobject.EnterOutLogData.WaitSeatLogModel.CardNo;
                            data.EnterTime       = ServiceDateTime.Now;
                            data.ReaderName      = Clientobject.EnterOutLogData.Student.Name;
                            data.ReadingRoomName = Clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                            data.SeatNo          = SeatComm.SeatNoToShortSeatNo(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, Clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                            data.SecCardNo       = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                            data.WaitEndDateTime = data.EnterTime.AddMinutes(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.GetSeatHoldTime(data.EnterTime));

                            printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                        }
                        break;

                    case PrintSlipMode.NotPrint:
                        break;
                    }
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.WaitSeatSuccess);
                }
                else
                {
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                }
            }
            else
            {
                PrintData data;
                switch (Clientobject.ClientSetting.DeviceSetting.UsingPrintSlip)
                {
                case PrintSlipMode.AutoPrint:
                    data                 = new PrintData();
                    data.CardNo          = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                    data.EnterTime       = ServiceDateTime.Now;
                    data.ReaderName      = Clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = Clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, Clientobject.EnterOutLogData.EnterOutlog.SeatNo);

                    printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                    break;

                case PrintSlipMode.UserChoose:
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.PrintConfIrm);
                    if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule == HandleResult.Successed)
                    {
                        data                 = new PrintData();
                        data.CardNo          = Clientobject.EnterOutLogData.EnterOutlog.CardNo;
                        data.EnterTime       = ServiceDateTime.Now;
                        data.ReaderName      = Clientobject.EnterOutLogData.Student.Name;
                        data.ReadingRoomName = Clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                        data.SeatNo          = SeatComm.SeatNoToShortSeatNo(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, Clientobject.EnterOutLogData.EnterOutlog.SeatNo);

                        printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                    }
                    break;

                case PrintSlipMode.NotPrint:
                    break;
                }
                //提示选座成功
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SelectSeatResult);
            }
        }
        /// <summary>
        /// 选座操作
        /// </summary>
        public void ChooseSeat()
        {
            //进出记录相关属性赋值。
            clientobject.EnterOutLogData.EnterOutlog.EnterOutLogNo = SeatManage.SeatManageComm.SeatComm.RndNum();
            clientobject.EnterOutLogData.EnterOutlog.EnterOutState = SeatManage.EnumType.EnterOutLogType.SelectSeat;
            clientobject.EnterOutLogData.EnterOutlog.Flag          = SeatManage.EnumType.Operation.Reader;
            clientobject.EnterOutLogData.EnterOutlog.EnterOutType  = SeatManage.EnumType.LogStatus.Valid;

            ReadingRoom frmReadingRoom = new ReadingRoom();

            WPF_Seat.SeatForm seat = WPF_Seat.SeatForm.GetInstance();
            //while (true)
            //{
            frmReadingRoom.ShowDialog();

            if (clientobject.EnterOutLogData.FlowControl == SeatManage.EnumType.ClientOperation.Exit)//阅览室选座操作为退出,结束选座流程
            {
                frmReadingRoom.Close();
                return;
            }
            switch (frmReadingRoom.RoomSelectSeatMethod)
            {
            case SelectSeatMode.AutomaticMode:
                string tempSeatNo = T_SM_Seat.RandomAllotSeat(clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo);
                SeatManage.EnumType.SeatLockState lockseat = T_SM_Seat.LockSeat(tempSeatNo);
                if (lockseat == SeatLockState.Locked)    //座位锁定失败,则提示
                {
                    clientobject.EnterOutLogData.EnterOutlog.Remark      = string.Format("在终端{0}刷卡,自动选择{1} {2}号座位", clientobject.ClientSetting.ClientNo, clientobject.EnterOutLogData.Student.AtReadingRoom.Name, tempSeatNo.Substring(tempSeatNo.Length - clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount));
                    clientobject.EnterOutLogData.EnterOutlog.SeatNo      = tempSeatNo;
                    clientobject.EnterOutLogData.EnterOutlog.TerminalNum = clientobject.ClientSetting.ClientNo;
                }
                else
                {
                    clientobject.EnterOutLogData.EnterOutlog.SeatNo = "";
                    SeatManage.SeatClient.Tip.Tip_Framework tip = new SeatManage.SeatClient.Tip.Tip_Framework(SeatManage.EnumType.TipType.SeatLocking, 8);    //显示提示窗体
                    tip.ShowDialog();
                }
                break;

            case SelectSeatMode.ManualMode:
                seat.DrowSeatUsedInfo();
                seat.ShowDialog();
                //座位选择的操作为退出,结束选座流程;操作为选座,跳出循环;否则操作为back,继续执行循环操作
                break;
                //}

                if (clientobject.EnterOutLogData.FlowControl == SeatManage.EnumType.ClientOperation.Exit)
                {
                    frmReadingRoom.Close();
                    return;
                }
                else if (clientobject.EnterOutLogData.FlowControl == SeatManage.EnumType.ClientOperation.SelectSeat)
                {
                    frmReadingRoom.Close();
                    break;
                }
            }
            if (string.IsNullOrEmpty(clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo) || string.IsNullOrEmpty(clientobject.EnterOutLogData.EnterOutlog.SeatNo))
            {
                //如果阅览室编号或者座位号为空,则不执行插入操作。
                frmReadingRoom.Close();
                return;
            }
            int          newLogId = -1;
            HandleResult result   = EnterOutOperate.AddEnterOutLog(clientobject.EnterOutLogData.EnterOutlog, ref newLogId);//插入进出记录

            frmReadingRoom.Dispose();
            if (result == HandleResult.Successed)
            {
                T_SM_Seat.UnLockSeat(clientobject.EnterOutLogData.EnterOutlog.SeatNo);//记录插入成功,解锁座位
                if (clientobject.EnterOutLogData.WaitSeatLogModel != null)
                {
                    //等待记录的实体不为空,说明当前读者操作为等待座位。
                    //TODO:添加等待记录
                    clientobject.EnterOutLogData.WaitSeatLogModel.EnterOutLogID = newLogId;
                    T_SM_SeatWaiting.AddWaitSeatLog(clientobject.EnterOutLogData.WaitSeatLogModel);
                    PrintData data = new PrintData();
                    data.CardNo          = clientobject.EnterOutLogData.WaitSeatLogModel.CardNo;
                    data.EnterTime       = ServiceDateTime.Now;
                    data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                    data.SecCardNo       = clientobject.EnterOutLogData.EnterOutlog.CardNo;
                    double timelength = NowReadingRoomState.GetSeatHoldTime(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatHoldTime, data.EnterTime);
                    data.WaitEndDateTime = data.EnterTime.AddMinutes(timelength);
                    printer.Print(PrintStatus.Wait, data, clientobject.ClientSetting.ClientNo);

                    Tip_Framework topform = new Tip_Framework(TipType.WaitSeatSuccess, 9);
                    topform.OperateResule = result;
                    topform.ShowDialog();
                }
                else
                {
                    PrintData data = new PrintData();
                    data.CardNo          = clientobject.EnterOutLogData.EnterOutlog.CardNo;
                    data.EnterTime       = ServiceDateTime.Now;
                    data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, clientobject.EnterOutLogData.EnterOutlog.SeatNo);
                    if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip)
                    {
                        printer.Print(PrintStatus.General, data, clientobject.ClientSetting.ClientNo);
                    }
                    //提示选座成功
                    Tip_Framework topform = new Tip_Framework(TipType.SelectSeatResult, 9);
                    topform.OperateResule = result;
                    topform.ShowDialog();
                }
            }
        }
        /// <summary>
        /// 预约等待
        /// </summary>
        public void BespeakSeatWait()
        {
            DateTime nowDate = ServiceDateTime.Now;

            if (clientobject.EnterOutLogData.Student.BespeakLog.Count > 0)
            {
                BespeakLogInfo bespeaklog = clientobject.EnterOutLogData.Student.BespeakLog[0];
                //if (!SelectSeatProven.CheckReadingRoomInThisClient(bespeaklog.ReadingRoomNo, clientobject.ClientSetting.DeviceSetting))
                //{  //验证房间号是否属于本触摸屏所管理的阅览室
                //    Tip_Framework uc = new Tip_Framework(TipType.BeapeatRoomNotExists, 9);
                //}
                ReadingRoomSetting set     = clientobject.EnterOutLogData.Student.AtReadingRoom.Setting;
                DateTime           dtBegin = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
                DateTime           dtEnd   = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
                if (DateTimeOperate.DateAccord(dtBegin, dtEnd, nowDate))
                {
                    //TODO:预约时间在开始时间和结束时间之间,执行预约确认操作
                    //TODO:预约确认时,判断当前座位上是否有人。
                    EnterOutLogInfo seatUsedInfo = T_SM_EnterOutLog.GetUsingEnterOutLogBySeatNo(bespeaklog.SeatNo);

                    if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                    { //条件满足,说明座位正在使用。
                        seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                        seatUsedInfo.EnterOutType  = LogStatus.Valid;
                        seatUsedInfo.TerminalNum   = clientobject.ClientSetting.ClientNo;
                        seatUsedInfo.Remark        = string.Format("预约该座位的读者在终端{0}刷卡确认入座,设置在座读者离开", clientobject.ClientSetting.ClientNo);
                        seatUsedInfo.Flag          = Operation.OtherReader;
                        int newId = -1;
                        EnterOutOperate.AddEnterOutLog(seatUsedInfo, ref newId);
                    }
                    EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                    newEnterOutLog.CardNo        = bespeaklog.CardNo;
                    newEnterOutLog.EnterOutLogNo = SeatComm.RndNum();
                    newEnterOutLog.EnterOutState = EnterOutLogType.BookingConfirmation;
                    newEnterOutLog.EnterOutType  = LogStatus.Valid;
                    newEnterOutLog.Flag          = Operation.Reader;
                    newEnterOutLog.ReadingRoomNo = bespeaklog.ReadingRoomNo;
                    newEnterOutLog.SeatNo        = bespeaklog.SeatNo;
                    newEnterOutLog.TerminalNum   = clientobject.ClientSetting.ClientNo;
                    newEnterOutLog.Remark        = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    int          logid  = -1;
                    HandleResult result = EnterOutOperate.AddEnterOutLog(newEnterOutLog, ref logid); //添加入座记录
                    if (result == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Confinmed;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = nowDate;
                        bespeaklog.Remark       = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                        PrintData data = new PrintData();
                        data.CardNo          = bespeaklog.CardNo;;
                        data.EnterTime       = nowDate;
                        data.ReaderName      = clientobject.EnterOutLogData.Student.Name;
                        data.ReadingRoomName = clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                        data.SeatNo          = SeatComm.SeatNoToShortSeatNo(set.SeatNumAmount, bespeaklog.SeatNo);
                        if (clientobject.ClientSetting.DeviceSetting.UsingPrintSlip)
                        {
                            printer.Print(PrintStatus.Book, data, clientobject.ClientSetting.ClientNo);//打印
                        }
                    }
                    Tip_Framework tip = new Tip_Framework(TipType.BespeatSeatConfirmSuccess, 9);
                    tip.ShowDialog();
                }
                else if (nowDate.CompareTo(dtBegin) < 0)
                {
                    //TODO:预约时间过早,请在dtBegin 到dtEnd刷卡确认。
                    BookConfirmWarn tipFrom = new BookConfirmWarn();
                    tipFrom.BeginTime = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime)).ToString("HH:mm");
                    tipFrom.EndTime   = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime)).ToString("HH:mm");
                    tipFrom.ShowDialog();
                }
                else if (nowDate.CompareTo(dtEnd) < 0)
                {
                    //TODO:最迟确认时间为:dtEnd。
                }
                else
                {
                    //TODO:未知原因,预约确认失败。
                }
            }
        }
        void seatLayout()
        {
            this.canvas_Thumbnail.Children.Clear();
            this.canvas_Seat.Children.Clear();//座位图中移除所有子元素

            viewModel.AllSeatCount = viewModel.Layout.Seats.Count;

            int SeatWidth  = 24 * viewModel.Layout.SeatCol;
            int SeatHeight = 24 * viewModel.Layout.SeatRow;

            this.canvas_Seat.Width  = SeatWidth;
            this.canvas_Seat.Height = SeatHeight;
            double areaScaleX = SeatWidth / SeatWindow.Width;
            double areaScaleY = SeatHeight / SeatWindow.Height;

            if (SeatWidth >= SeatHeight)
            {
                scaleX = SeatWidth / canvas_Thumbnail.Width;
                scaleY = SeatWidth / canvas_Thumbnail.Height;
                moveY  = (SeatWidth - SeatHeight) / 2 / scaleY;
            }
            else
            {
                scaleX = SeatHeight / canvas_Thumbnail.Width;
                scaleY = SeatHeight / canvas_Thumbnail.Height;
                moveX  = (SeatHeight - SeatWidth) / 2 / scaleX;
            }
            //scaleX = SeatWidth / canvas_Thumbnail.Width;
            //scaleY = SeatHeight / canvas_Thumbnail.Height;

            try
            {
                Canvas.SetLeft(canvas_Seat, 0);
                Canvas.SetTop(canvas_Seat, 0);
            }
            catch
            { }

            #region 布局座位
            Code.GetSeatNoteImage getImage = new GetSeatNoteImage();
            ReadingRoomInfo       roomInfo = viewModel.clientObject.EnterOutLogData.Student.AtReadingRoom;
            DateTime startTime             = DateTime.Now;
            foreach (Seat seat in viewModel.Layout.Seats.Values)
            {
                seat.ShortSeatNo = SeatComm.SeatNoToShortSeatNo(roomInfo.Setting.SeatNumAmount, seat.SeatNo);
                #region 布局实际图,
                double     canLeft = 24 * (double)seat.PositionX;
                double     canTop  = 24 * (double)seat.PositionY;
                SeatButton seatBtn = new SeatButton();
                seatBtn.Width       = 48;
                seatBtn.Height      = 48;
                seatBtn.ShortSeatNo = seat.ShortSeatNo;
                seatBtn.SeatNo      = seat.SeatNo;
                seatBtn.Background  = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgSeat;
                if (seat.HavePower)
                {
                    seatBtn.PowerImg = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgPower;
                }
                switch (seat.SeatUsedState)
                {
                case SeatManage.EnumType.EnterOutLogType.Leave:
                    if (seat.IsSuspended)
                    {
                        seatBtn.ReaderBackground = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgStopUse;
                        viewModel.AllSeatCount  -= 1;
                    }
                    else
                    {
                        seatBtn.MouseLeftButtonUp   += new MouseButtonEventHandler(seatBtn_MouseLeftButtonUp);
                        viewModel.LastSeatCount     += 1;
                        seatBtn.lblSeatNo.Visibility = System.Windows.Visibility.Visible;
                    }
                    //frmResolution.ViewModel.SeatAmcountFree += 1;//遇到空闲座位,ViewModel空闲座位数+1
                    //seatBtn.MouseLeftButtonUp += new MouseButtonEventHandler(seatBtn_MouseLeftButtonUp);
                    break;

                case SeatManage.EnumType.EnterOutLogType.SelectSeat:
                case SeatManage.EnumType.EnterOutLogType.ReselectSeat:
                case SeatManage.EnumType.EnterOutLogType.ComeBack:
                case SeatManage.EnumType.EnterOutLogType.ContinuedTime:
                case SeatManage.EnumType.EnterOutLogType.BookingConfirmation:
                case SeatManage.EnumType.EnterOutLogType.WaitingSuccess:
                    seatBtn.ReaderBackground = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgReader;
                    if (roomInfo.Setting.NoManagement.Used)
                    {
                        seatBtn.MouseLeftButtonUp += new MouseButtonEventHandler(seatBtn_WaitSeat);
                    }
                    break;

                case SeatManage.EnumType.EnterOutLogType.ShortLeave:
                    seatBtn.ReaderBackground = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgReader;
                    seatBtn.ShowleaveImg     = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgShortLeave;
                    break;

                case SeatManage.EnumType.EnterOutLogType.BespeakWaiting:
                    seatBtn.ReaderBackground = SeatFormImageBrush.GetInstance(viewModel.clientObject.ClientSetting.DeviceSetting.BackImgage).ImgBook;
                    if (roomInfo.Setting.SeatBespeak.SelectBespeakSeat)
                    {
                        seatBtn.MouseLeftButtonUp += new MouseButtonEventHandler(seatBtn_SelectBookingSeat);
                    }
                    break;
                }
                seatBtn.lblSeatNo.RenderTransform       = new RotateTransform(-seat.RotationAngle);
                seatBtn.lblSeatNo.RenderTransformOrigin = new Point(0.5, 0.5);
                seatBtn.RenderTransform       = new RotateTransform(seat.RotationAngle);
                seatBtn.RenderTransformOrigin = new Point(0.5, 0.5);
                this.canvas_Seat.Children.Add(seatBtn);
                Canvas.SetLeft(seatBtn, canLeft);
                Canvas.SetTop(seatBtn, canTop);
                #endregion

                #region 布局缩略图
                Rectangle rec = new Rectangle();
                rec.Width  = 36 / scaleX;
                rec.Height = 36 / scaleY;
                double thumbLeft = (double)(seat.PositionX * (double)24 + 6) / scaleX;
                double thumbTop  = (double)(seat.PositionY * (double)24 + 6) / scaleY;
                switch (seat.SeatUsedState)
                {
                case SeatManage.EnumType.EnterOutLogType.Leave:
                    rec.Fill = new SolidColorBrush(Color.FromRgb(220, 220, 220));
                    if (seat.IsSuspended)
                    {
                        rec.Fill = new SolidColorBrush(Color.FromRgb(234, 38, 52));
                    }
                    break;

                case SeatManage.EnumType.EnterOutLogType.SelectSeat:
                case SeatManage.EnumType.EnterOutLogType.ReselectSeat:
                case SeatManage.EnumType.EnterOutLogType.ComeBack:
                case SeatManage.EnumType.EnterOutLogType.ContinuedTime:
                case SeatManage.EnumType.EnterOutLogType.ShortLeave:
                case SeatManage.EnumType.EnterOutLogType.BespeakWaiting:
                case SeatManage.EnumType.EnterOutLogType.BookingConfirmation:
                case SeatManage.EnumType.EnterOutLogType.WaitingSuccess:
                    rec.Fill = new SolidColorBrush(Color.FromRgb(234, 38, 52));
                    break;
                }
                rec.RenderTransformOrigin = new Point(0.5, 0.5);
                rec.RenderTransform       = new RotateTransform(seat.RotationAngle);
                this.canvas_Thumbnail.Children.Add(rec);
                Canvas.SetZIndex(rec, 0);
                Canvas.SetLeft(rec, thumbLeft + moveX);
                Canvas.SetTop(rec, thumbTop + moveY);
                #endregion
            }
            TimeSpan ts = DateTime.Now - startTime;
            Console.WriteLine("执行时间:" + ts.TotalSeconds);
            //frmResolution.ViewModel.SeatAmcountUsed = frmResolution.ViewModel.SeatAmcountAll - frmResolution.ViewModel.SeatAmcountFree;
            #endregion

            #region 布局备注
            foreach (Note note in viewModel.Layout.Notes)
            {
                #region 实际图

                NoteElement element = new NoteElement();
                if (note.Type == SeatManage.EnumType.OrnamentType.Table)
                {
                    element.BorderThickness = new Thickness(1);
                    element.BorderBrush     = new SolidColorBrush(Colors.Black);
                }
                //element.BorderThickness = new Thickness(1);
                //element.BorderBrush = new SolidColorBrush(Colors.Yellow);
                element.Width  = note.BaseWidth * 24;
                element.Height = note.BaseHeight * 24;
                element.Notes  = note.Remark;
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                element.RenderTransform       = new RotateTransform(note.RotationAngle);
                element.NoteType = note.Type;
                Canvas.SetLeft(element.lbRemark, element.Width / 2 - element.lbRemark.Width / 2);
                this.canvas_Seat.Children.Add(element);
                double canLeft = 24 * (double)note.PositionX;
                double canTop  = 24 * (double)note.PositionY;
                Canvas.SetLeft(element, canLeft);
                Canvas.SetTop(element, canTop);
                #endregion

                #region 缩略图

                switch (note.Type)
                {
                case SeatManage.EnumType.OrnamentType.Door:
                case SeatManage.EnumType.OrnamentType.Steps:
                    break;

                case SeatManage.EnumType.OrnamentType.Roundtable:
                case SeatManage.EnumType.OrnamentType.Plant:
                {
                    Border br = new Border();
                    br.CornerRadius    = new CornerRadius(note.BaseWidth * (double)12 / scaleX);
                    br.BorderThickness = new Thickness(note.BaseWidth * (double)12 / scaleX);
                    br.BorderBrush     = new SolidColorBrush(Color.FromRgb(231, 186, 100));
                    double thumbLeft = (double)(24 / scaleX) * (double)note.PositionX;
                    double thumbTop  = (double)(24 / scaleY) * (double)note.PositionY;
                    this.canvas_Thumbnail.Children.Add(br);
                    Canvas.SetLeft(br, thumbLeft + moveX);
                    Canvas.SetTop(br, thumbTop + moveY);
                }
                break;

                default:
                {
                    Rectangle rec = new Rectangle();
                    rec.Width  = (double)24 * note.BaseWidth / scaleX;
                    rec.Height = (double)24 * note.BaseHeight / scaleY;
                    double thumbLeft = (double)(24 / scaleX) * (double)note.PositionX;
                    double thumbTop  = (double)(24 / scaleY) * (double)note.PositionY;
                    rec.RenderTransformOrigin = new Point(0.5, 0.5);
                    rec.RenderTransform       = new RotateTransform(note.RotationAngle);
                    rec.Fill = new SolidColorBrush(Color.FromRgb(231, 186, 100));
                    this.canvas_Thumbnail.Children.Add(rec);
                    Canvas.SetLeft(rec, thumbLeft + moveX);
                    Canvas.SetTop(rec, thumbTop + moveY);
                }
                break;
                }

                #endregion
            }
            #endregion


            areaSimle      = new System.Windows.Shapes.Rectangle();
            areaSimle.Name = "areaSimle";
            if (areaScaleX != 0)
            {
                areaSimle.Width = (canvas_Thumbnail.Width - moveX * 2) / areaScaleX;//按比例缩小层的宽度
            }
            else
            {
                areaSimle.Width = canvas_Thumbnail.Width;
            }
            if (areaScaleY != 0)
            {
                areaSimle.Height = (canvas_Thumbnail.Height - moveY * 2) / areaScaleY; //按比例缩小层的高度
            }
            else
            {
                areaSimle.Height = canvas_Thumbnail.Height;
            }

            areaSimle.Fill    = new SolidColorBrush(Colors.White);
            areaSimle.Opacity = 0.5;

            this.canvas_Thumbnail.Children.Add(areaSimle);
            Canvas.SetZIndex(areaSimle, 1000);
            Canvas.SetTop(areaSimle, moveY);
            Canvas.SetLeft(areaSimle, moveX);
            //小的范围层。最后创建,防止被遮盖
        }
Esempio n. 18
0
        /// <summary>
        /// 预约签到
        /// </summary>
        /// <param name="bookNo"></param>
        /// <returns></returns>
        public string ConfigSeat(int bookNo)
        {
            try
            {
                DateTime       nowDate    = DateTime.Now;
                BespeakLogInfo bespeaklog = seatManage.GetBespeaklogById(bookNo);
                if (bespeaklog == null)
                {
                    return("获取预约记录失败");
                }
                if (bespeaklog.BsepeakState != BookingStatus.Waiting)
                {
                    return("此条记录状态无效,请查询刷新页面");
                }

                List <ReadingRoomInfo> rooms = seatManage.GetReadingRoomInfo(new List <string>()
                {
                    bespeaklog.ReadingRoomNo
                });
                if (rooms.Count < 1)
                {
                    return("阅览室设置获取失败");
                }
                ReadingRoomSetting set     = rooms[0].Setting;
                DateTime           dtBegin = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
                DateTime           dtEnd   = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
                if (DateTimeOperate.DateAccord(dtBegin, dtEnd, nowDate) || (set.SeatBespeak.NowDayBespeak && bespeaklog.SubmitTime == bespeaklog.BsepeakTime))
                {
                    //TODO:预约时间在开始时间和结束时间之间,执行预约确认操作
                    //TODO:预约确认时,判断当前座位上是否有人。
                    EnterOutLogInfo seatUsedInfo = seatManage.GetEnterOutLogInfoBySeatNum(bespeaklog.SeatNo);
                    if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                    { //条件满足,说明座位正在使用。
                        seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                        seatUsedInfo.EnterOutType  = LogStatus.Valid;
                        seatUsedInfo.Remark        = string.Format("预约该座位的读者在手机网站签到入座,设置在座读者离开");
                        seatUsedInfo.Flag          = Operation.OtherReader;
                        int newId = -1;
                        if (seatManage.AddEnterOutLogInfo(seatUsedInfo, ref newId) == HandleResult.Successed)
                        {
                            List <WaitSeatLogInfo> waitInfoList = seatManage.GetWaitLogList(null, seatUsedInfo.EnterOutLogID, null, null, null);
                            if (waitInfoList.Count > 0)
                            {
                                WaitSeatLogInfo WaitSeatLogModel = waitInfoList[0];
                                WaitSeatLogModel.OperateType  = Operation.Reader;
                                WaitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                                WaitSeatLogModel.NowState     = LogStatus.Valid;
                                if (!seatManage.UpdateWaitLog(WaitSeatLogModel))
                                {
                                    return("取消等待此座位的读者状态失败");
                                }
                            }
                        }
                        else
                        {
                            return("设置当前使用此座位的读者离开失败");
                        }
                    }
                    EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                    newEnterOutLog.CardNo          = bespeaklog.CardNo;
                    newEnterOutLog.EnterOutLogNo   = SeatComm.RndNum();
                    newEnterOutLog.EnterOutState   = EnterOutLogType.BookingConfirmation;
                    newEnterOutLog.EnterOutType    = LogStatus.Valid;
                    newEnterOutLog.Flag            = Operation.Reader;
                    newEnterOutLog.ReadingRoomNo   = bespeaklog.ReadingRoomNo;
                    newEnterOutLog.ReadingRoomName = bespeaklog.ReadingRoomName;
                    newEnterOutLog.ShortSeatNo     = bespeaklog.ShortSeatNum;
                    newEnterOutLog.SeatNo          = bespeaklog.SeatNo;
                    newEnterOutLog.Remark          = string.Format("在手机预约网站预约签到,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    int          logid  = -1;
                    HandleResult result = seatManage.AddEnterOutLogInfo(newEnterOutLog, ref logid); //添加入座记录
                    if (result == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Confinmed;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = nowDate;
                        bespeaklog.Remark       = string.Format("在手机预约网站预约签到,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        if (seatManage.UpdateBespeakLogInfo(bespeaklog) > 0)
                        {
                            return("");
                        }
                        else
                        {
                            return("系统错误,签到失败");
                        }
                    }
                    else
                    {
                        return("系统错误,签到失败");
                    }
                }
                else if (nowDate.CompareTo(dtBegin) < 0)
                {
                    //TODO:预约时间过早,请在dtBegin 到dtEnd刷卡确认。
                    return("对不起,您预约的座位尚未到达签到时间,请在" + dtBegin.ToShortTimeString() + "到" + dtEnd.ToShortTimeString() + "间进行签到");
                }
                else if (nowDate.CompareTo(dtEnd) < 0)
                {
                    return("对不起,您预约已超时");
                }
                else
                {
                    return("系统错误,签到失败");
                }
            }
            catch (Exception ex)
            {
                SeatManageComm.WriteLog.Write(string.Format("预约签到失败:{0}", ex.Message));
                return("系统错误,签到失败");
            }
        }
Esempio n. 19
0
        /// <summary>
        /// 更换座位
        /// </summary>
        /// <param name="cardNo">学号</param>
        /// <param name="seatNum">要更换的座位号</param>
        /// <param name="readingRoomNum">阅览室编号</param>
        /// <returns></returns>
        public string ChangeSeat(string cardNo, string seatNum, string readingRoomNum)
        {
            try
            {
                List <string> roomNums = new List <string>();
                roomNums.Add(readingRoomNum);
                List <ReadingRoomInfo> rooms = seatManage.GetReadingRoomInfo(roomNums);
                if (rooms.Count == 0)
                {
                    return("没有找到对应的阅览室");
                }
                ReadingRoomSetting roomSet         = rooms[0].Setting;
                ReaderInfo         reader          = GetReaderInfo(cardNo);
                EnterOutLogType    nowReaderStatus = EnterOutLogType.Leave;
                if (reader.EnterOutLog != null && reader.EnterOutLog.EnterOutState != EnterOutLogType.Leave)
                {
                    nowReaderStatus = reader.EnterOutLog.EnterOutState;
                }
                else if (reader.BespeakLog.Count > 0)
                {
                    nowReaderStatus = EnterOutLogType.BespeakWaiting;
                }
                else if (reader.WaitSeatLog != null)
                {
                    nowReaderStatus = EnterOutLogType.Waiting;
                }

                switch (nowReaderStatus)
                {
                case EnterOutLogType.Leave:
                    return("你还没有选座");

                case EnterOutLogType.BespeakWaiting:
                    if (reader.BespeakLog[0].SeatNo == seatNum && reader.BespeakLog[0].BsepeakState == BookingStatus.Waiting)
                    {
                        EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();    //构造
                        newEnterOutLog.CardNo        = reader.BespeakLog[0].CardNo;
                        newEnterOutLog.EnterOutLogNo = SeatComm.RndNum();
                        newEnterOutLog.EnterOutState = EnterOutLogType.BookingConfirmation;
                        newEnterOutLog.EnterOutType  = LogStatus.Valid;
                        newEnterOutLog.Flag          = Operation.Reader;
                        newEnterOutLog.ReadingRoomNo = reader.BespeakLog[0].ReadingRoomNo;
                        newEnterOutLog.SeatNo        = reader.BespeakLog[0].SeatNo;
                        newEnterOutLog.Remark        = string.Format("通过扫码入座预约的{0} {1}号座位", reader.BespeakLog[0].ReadingRoomName, reader.BespeakLog[0].ShortSeatNum);
                        int logid = -1;
                        try
                        {
                            HandleResult result = seatManage.AddEnterOutLogInfo(newEnterOutLog, ref logid);     //添加入座记录
                            if (result == HandleResult.Successed)
                            {
                                reader.BespeakLog[0].BsepeakState = BookingStatus.Confinmed;
                                reader.BespeakLog[0].CancelPerson = Operation.Reader;
                                reader.BespeakLog[0].CancelTime   = seatManage.GetServerDateTime();
                                reader.BespeakLog[0].Remark       = string.Format("通过扫码入座预约的{0} {1}号座位", reader.BespeakLog[0].ReadingRoomName, reader.BespeakLog[0].ShortSeatNum);
                                seatManage.UpdateBespeakLogInfo(reader.BespeakLog[0]);
                            }
                            else
                            {
                                return("预约入座失败。");
                            }
                        }
                        catch (Exception ex)
                        {
                            SeatManageComm.WriteLog.Write(string.Format("扫码预约入座确认失败:{0}", ex.Message));
                            return("未知原因,预约入座确认失败");
                        }
                    }
                    else
                    {
                        return(string.Format("您已预约{0} {1}号座位,请扫该座位上的条形码", reader.BespeakLog[0].ReadingRoomName, reader.BespeakLog[0].ShortSeatNum));
                    }
                    break;

                case EnterOutLogType.BookingConfirmation:
                case EnterOutLogType.SelectSeat:
                case EnterOutLogType.ContinuedTime:
                case EnterOutLogType.ComeBack:
                case EnterOutLogType.ReselectSeat:
                case EnterOutLogType.WaitingSuccess:
                case EnterOutLogType.ShortLeave:
                    if (seatManage.GetReaderChooseSeatTimes(cardNo, roomSet.PosTimes.Minutes) >= roomSet.PosTimes.Times)
                    {
                        return("选座频繁。");
                    }
                    EnterOutLogInfo enterOutlog = reader.EnterOutLog;
                    enterOutlog.ReadingRoomNo = readingRoomNum;
                    enterOutlog.Remark        = "通过扫码更换到该座位";
                    enterOutlog.SeatNo        = seatNum;
                    enterOutlog.Flag          = EnumType.Operation.Reader;
                    enterOutlog.EnterOutType  = EnumType.LogStatus.Valid;
                    enterOutlog.EnterOutState = EnumType.EnterOutLogType.ReselectSeat;
                    enterOutlog.EnterOutLogNo = SeatManage.SeatManageComm.SeatComm.RndNum();
                    int newLogId = -1;
                    if (seatManage.AddEnterOutLogInfo(enterOutlog, ref newLogId) == HandleResult.Successed)
                    {
                        return("");
                    }
                    else
                    {
                        return("未知原因,更换座位失败");
                    }

                case EnterOutLogType.Waiting:
                    return("您当前在等待其他座位");
                }
                return("读者状态错误");
            }
            catch (Exception ex)
            {
                SeatManageComm.WriteLog.Write(string.Format("扫码入座失败:{0}", ex.Message));
                return("系统错误,更换座位失败");
            }
        }
        /// <summary>
        /// 确认座位号
        /// </summary>
        /// <returns></returns>
        public bool CheckSeatNumber()
        {
            if (string.IsNullOrEmpty(SeatNo))
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatNotExist);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }
            _LongSeatNo = "";
            ReadingRoomInfo roomInfo   = Clientobject.EnterOutLogData.Student.AtReadingRoom;
            string          roomNo     = roomInfo.No + "000";
            string          seatHeader = SeatComm.SeatNoToSeatNoHeader(roomInfo.Setting.SeatNumAmount, roomNo);

            _LongSeatNo = seatHeader + SeatNo;
            //获取座位信息,并判断座位在该阅览室是否存在。
            Seat seat = T_SM_Seat.GetSeatInfoBySeatNo(_LongSeatNo);

            if (seat == null)
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatNotExist);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }
            if (seat.IsSuspended)
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatIsStopping);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }
            if (seat.ReadingRoomNum != roomInfo.No)
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatNotExist);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }

            SeatManage.EnumType.EnterOutLogType logType = SeatManage.Bll.T_SM_EnterOutLog.GetSeatUsedState(_LongSeatNo);

            //TODO:还需检测座位是否被预约 SeatManage.Bll.T_SM_EnterOutLog
            if (logType == SeatManage.EnumType.EnterOutLogType.None || logType == SeatManage.EnumType.EnterOutLogType.Leave)
            {
                //根据座位号获取进出记录的状态,如果为None或者为Leave,则锁定座位
                SeatManage.EnumType.SeatLockState lockResult = SeatManage.Bll.T_SM_Seat.LockSeat(_LongSeatNo);
                if (lockResult == SeatManage.EnumType.SeatLockState.NotExists)
                {
                    MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatNotExist);
                    CountDown.Pause();
                    popWindow.ShowDialog();
                    CountDown.Start();
                    return(false);
                }
                else if (lockResult == SeatManage.EnumType.SeatLockState.UnLock)
                {
                    MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatIsUsing);
                    CountDown.Pause();
                    popWindow.ShowDialog();
                    CountDown.Start();
                    return(false);
                }
                else if (lockResult == SeatManage.EnumType.SeatLockState.Locked)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (logType == SeatManage.EnumType.EnterOutLogType.BespeakWaiting)
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatIsUsing);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }
            else
            {
                MessageWindow popWindow = new MessageWindow(SeatManage.EnumType.MessageType.SeatIsUsing);
                CountDown.Pause();
                popWindow.ShowDialog();
                CountDown.Start();
                return(false);
            }
            //}
            //else
            //{
            //    toolTip1.SetToolTip(txtSeatNo, "请输入最后四位座位号");
            //    toolTip1.Show("请输入座位号",txtSeatNo,5000);
            //}
        }
        /// <summary>
        /// 预约等待
        /// </summary>
        public void BespeakCheck()
        {
            if (Clientobject.EnterOutLogData.Student.BespeakLog.Count <= 0)
            {
                return;
            }
            BespeakLogInfo     bespeaklog = Clientobject.EnterOutLogData.Student.BespeakLog[0];
            ReadingRoomSetting set        = Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting;
            DateTime           dtBegin    = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
            DateTime           dtEnd      = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
            DateTime           nowDate    = ServiceDateTime.Now;

            if (DateTimeOperate.DateAccord(dtBegin, dtEnd, nowDate) || (set.SeatBespeak.NowDayBespeak && bespeaklog.SubmitTime == bespeaklog.BsepeakTime))
            {
                //TODO:预约时间在开始时间和结束时间之间,执行预约确认操作
                //TODO:预约确认时,判断当前座位上是否有人。
                EnterOutLogInfo seatUsedInfo = T_SM_EnterOutLog.GetUsingEnterOutLogBySeatNo(bespeaklog.SeatNo);
                if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                { //条件满足,说明座位正在使用。
                    seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                    seatUsedInfo.EnterOutType  = LogStatus.Valid;
                    seatUsedInfo.TerminalNum   = Clientobject.ClientSetting.ClientNo;
                    seatUsedInfo.Remark        = string.Format("预约该座位的读者在终端{0}刷卡确认入座,设置在座读者离开", Clientobject.ClientSetting.ClientNo);
                    seatUsedInfo.Flag          = Operation.OtherReader;
                    int newId = -1;
                    if (EnterOutOperate.AddEnterOutLog(seatUsedInfo, ref newId) == HandleResult.Successed)
                    {
                        List <WaitSeatLogInfo> waitInfoList = T_SM_SeatWaiting.GetWaitSeatList(null, seatUsedInfo.EnterOutLogID, null, null, null);
                        if (waitInfoList.Count > 0)
                        {
                            Clientobject.EnterOutLogData.WaitSeatLogModel              = waitInfoList[0];
                            Clientobject.EnterOutLogData.WaitSeatLogModel.OperateType  = Operation.Reader;
                            Clientobject.EnterOutLogData.WaitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                            Clientobject.EnterOutLogData.WaitSeatLogModel.NowState     = LogStatus.Valid;
                            if (!T_SM_SeatWaiting.UpdateWaitLog(Clientobject.EnterOutLogData.WaitSeatLogModel))
                            {
                                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                                return;
                            }
                        }
                    }
                    else
                    {
                        PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                        return;
                    }
                }
                EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                newEnterOutLog.CardNo                    = bespeaklog.CardNo;
                newEnterOutLog.EnterOutLogNo             = SeatComm.RndNum();
                newEnterOutLog.EnterOutState             = EnterOutLogType.BookingConfirmation;
                newEnterOutLog.EnterOutType              = LogStatus.Valid;
                newEnterOutLog.Flag                      = Operation.Reader;
                newEnterOutLog.ReadingRoomNo             = bespeaklog.ReadingRoomNo;
                newEnterOutLog.ReadingRoomName           = bespeaklog.ReadingRoomName;
                newEnterOutLog.ShortSeatNo               = bespeaklog.ShortSeatNum;
                newEnterOutLog.SeatNo                    = bespeaklog.SeatNo;
                newEnterOutLog.TerminalNum               = Clientobject.ClientSetting.ClientNo;
                newEnterOutLog.Remark                    = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", Clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                Clientobject.EnterOutLogData.EnterOutlog = newEnterOutLog;
                int          logid  = -1;
                HandleResult result = EnterOutOperate.AddEnterOutLog(newEnterOutLog, ref logid); //添加入座记录
                if (result == HandleResult.Successed)
                {
                    bespeaklog.BsepeakState = BookingStatus.Confinmed;
                    bespeaklog.CancelPerson = Operation.Reader;
                    bespeaklog.CancelTime   = nowDate;
                    bespeaklog.Remark       = string.Format("在终端{0}刷卡,入座预约的{1} {2}号座位", Clientobject.ClientSetting.ClientNo,
                                                            bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);

                    PrintData data = new PrintData();
                    data.CardNo = bespeaklog.CardNo;
                    ;
                    data.EnterTime       = nowDate;
                    data.ReaderName      = Clientobject.EnterOutLogData.Student.Name;
                    data.ReadingRoomName = Clientobject.EnterOutLogData.Student.AtReadingRoom.Name;
                    data.SeatNo          = SeatComm.SeatNoToShortSeatNo(set.SeatNumAmount, bespeaklog.SeatNo);

                    switch (Clientobject.ClientSetting.DeviceSetting.UsingPrintSlip)
                    {
                    case PrintSlipMode.AutoPrint:
                        printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                        break;

                    case PrintSlipMode.UserChoose:
                        PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.PrintConfIrm);
                        if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule == HandleResult.Successed)
                        {
                            printer.ThreadPrint(PrintStatus.General, data, Clientobject.ClientSetting.ClientNo);
                        }
                        break;

                    case PrintSlipMode.NotPrint:
                        break;
                    }

                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.BespeatSeatConfirmSuccess);
                }
                else
                {
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
                }
            }
            else if (nowDate.CompareTo(dtBegin) < 0)
            {
                //TODO:预约时间过早,请在dtBegin 到dtEnd刷卡确认。
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.BookConfirmWarn);
                if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule != HandleResult.Successed)
                {
                    return;
                }
                bespeaklog.BsepeakState = BookingStatus.Cencaled;
                bespeaklog.CancelPerson = Operation.Reader;
                bespeaklog.CancelTime   = ServiceDateTime.Now;
                bespeaklog.Remark       = string.Format("在终端{0}刷卡取消{1},{2}号座位的预约。", Clientobject.ClientSetting.ClientNo, bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                int i = T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.BookCancelSuccess);
            }
        }
        /// <summary>
        /// 执行阅览室开闭馆处理
        /// </summary>
        /// <param name="RoomsStatus">阅览室状态</param>
        public void OpenCloseReadingRoom()
        {
            try
            {
                DateTime nowDateTime = ServiceDateTime.Now;
                List <ReadingRoomOpenCloseLogInfo> rrocList = T_SM_RROpenCloseLog.GetReadingRoomOClog(null, LogStatus.Valid, null, null);
                //遍历所有阅览室
                foreach (ReadingRoomInfo rri in roomList.Values.Where(rri => rri.Setting != null))
                {
                    //获取阅览室状态
                    ReadingRoomOpenCloseLogInfo rroc = rrocList.OrderByDescending(u => u.OperateTime).ToList().Find(u => u.ReadingRoomNo == rri.No);
                    if (rroc == null)
                    {
                        rroc = new ReadingRoomOpenCloseLogInfo();
                        rroc.OpenCloseState = ReadingRoomStatus.Close;
                        rroc.ReadingRoomNo  = rri.No;
                        rroc.OperateNo      = SeatComm.RndNum();
                        rroc.OperateTime    = nowDateTime;
                        rroc.Logstatus      = LogStatus.Valid;
                    }

                    int new_id = 0;
                    //如果启用24小时模式
                    if (rri.Setting.RoomOpenSet.UninterruptibleModel)
                    {
                        if (rroc.OpenCloseState == ReadingRoomStatus.Close)
                        {
                            rroc.OpenCloseState = ReadingRoomStatus.Open;
                            rroc.OperateTime    = nowDateTime;
                            T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                            WriteLog.Write(string.Format("监控服务:{0},开启", rri.Name));
                        }
                        continue;
                    }
                    ReadingRoomStatus nowState = rri.Setting.ReadingRoomOpenState(nowDateTime);
                    //判断状态
                    if (rroc.OpenCloseState == nowState)
                    {
                        continue;
                    }
                    switch (nowState)
                    {
                    case ReadingRoomStatus.Open:
                        rroc.OpenCloseState = ReadingRoomStatus.Open;
                        rroc.OperateTime    = ServiceDateTime.Now;
                        rroc.OperateNo      = SeatComm.RndNum();
                        T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                        WriteLog.Write(string.Format("监控服务:{0},开启", rri.Name));
                        break;

                    case ReadingRoomStatus.Close:
                        CloseReadingRoom(rri);
                        rroc.OpenCloseState = ReadingRoomStatus.Close;
                        rroc.OperateTime    = ServiceDateTime.Now;
                        T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                        WriteLog.Write(string.Format("监控服务:{0},关闭", rri.Name));
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog.Write(string.Format("监控服务:执行阅览室开闭馆处理遇到错误:{0}", ex.Message));
            }
        }
Esempio n. 23
0
        public string QRcodeOperation(string codeStr, string studentNo)
        {
            try
            {
                AJM_HandleResult          result          = new AJM_HandleResult();
                string[]                  scanResultArray = codeStr.Split('?');
                ClientCheckCodeParamModel scancode        = null;
                if (scanResultArray.Length >= 2)
                {
                    string[] strParam = scanResultArray[1].Split('=');
                    if (strParam.Length >= 2)
                    {
                        scancode = ClientCheckCodeParamModel.Prase(strParam[1]);//兼容url的二维码。
                    }
                }
                else
                {
                    scancode = ClientCheckCodeParamModel.Prase(codeStr);
                }
                DateTime ndt = DateTime.Now;
                if (scancode == null)
                {
                    result.Result = false;
                    result.Msg    = "对不起,二维码错误!";
                    return(JSONSerializer.Serialize(result));
                }
                if (scancode.CodeTime.AddMinutes(1) <= ndt)
                {
                    result.Result = false;
                    result.Msg    = "对不起,二维码超时!";
                    return(JSONSerializer.Serialize(result));
                }
                if (string.IsNullOrEmpty(studentNo))
                {
                    result.Result = false;
                    result.Msg    = "读者学号为空。";
                    return(JSONSerializer.Serialize(result));
                }
                ReaderInfo reader = SeatManageDateService.GetReader(studentNo, true);
                if (reader == null)
                {
                    result.Result = false;
                    result.Msg    = "获取读者信息失败。";
                    return(JSONSerializer.Serialize(result));
                }
                if (reader.EnterOutLog == null && reader.BespeakLog.Count < 1)
                {
                    result.Result = false;
                    result.Msg    = "对不起,您还没有座位,请先选择或预约一个座位。";
                }

                if (reader.EnterOutLog != null)
                {
                    switch (reader.EnterOutLog.EnterOutState)
                    {
                    case EnterOutLogType.BookingConfirmation: //预约入座
                    case EnterOutLogType.SelectSeat:          //选座
                    case EnterOutLogType.ContinuedTime:       //续时
                    case EnterOutLogType.ComeBack:            //暂离回来
                    case EnterOutLogType.ReselectSeat:        //重新选座
                    case EnterOutLogType.WaitingSuccess:      //等待入座
                        result.Result = false;
                        result.Msg    = "您当前已有座位。";
                        break;

                    case EnterOutLogType.ShortLeave:
                        reader.EnterOutLog.EnterOutState = EnterOutLogType.ComeBack;
                        reader.EnterOutLog.Remark        = string.Format("您在选座终端{0}扫描二维码恢复在座,本次暂离时长{1}分钟。", scancode.ClientNo, ((int)(ndt - reader.EnterOutLog.EnterOutTime).TotalMinutes));
                        reader.EnterOutLog.Flag          = Operation.Reader;
                        reader.EnterOutLog.EnterOutTime  = ndt;
                        result.Result = true;
                        int newId = -1;
                        if (SeatManageDateService.AddEnterOutLogInfo(reader.EnterOutLog, ref newId) != HandleResult.Successed)
                        {
                            result.Result = false;
                            result.Msg    = "对不起,暂离回来失败!";
                            return(JSONSerializer.Serialize(result));
                        }
                        result.Result = true;
                        result.Msg    = reader.EnterOutLog.Remark;
                        List <WaitSeatLogInfo> waitSeatLogs = SeatManageDateService.GetWaitLogList("", reader.EnterOutLog.EnterOutLogID, null, null, null);
                        if (waitSeatLogs.Count > 0)
                        {
                            WaitSeatLogInfo waitSeatLog = waitSeatLogs[0];
                            waitSeatLog.NowState     = LogStatus.Fail;
                            waitSeatLog.OperateType  = Operation.OtherReader;
                            waitSeatLog.WaitingState = EnterOutLogType.WaitingCancel;
                            SeatManageDateService.UpdateWaitLog(waitSeatLog);
                        }
                        break;

                    case EnterOutLogType.Leave:
                        result.Result = false;
                        result.Msg    = "对不起,您还没有座位,请先选择或预约一个座位。";
                        break;

                    default:
                        result.Result = false;
                        result.Msg    = "对不起,您还没有座位,请先选择或预约一个座位。";
                        break;
                    }
                    return(JSONSerializer.Serialize(result));
                }
                ReadingRoomSetting set     = reader.AtReadingRoom.Setting;
                DateTime           dtBegin = reader.BespeakLog[0].BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
                DateTime           dtEnd   = reader.BespeakLog[0].BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
                if (!DateTimeOperate.DateAccord(dtBegin, dtEnd, ndt) && (!set.SeatBespeak.NowDayBespeak || reader.BespeakLog[0].SubmitTime != reader.BespeakLog[0].BsepeakTime))
                {
                    result.Result = false;
                    result.Msg    = "对不起,您预约的座位没有到达签到时间";
                    return(JSONSerializer.Serialize(result));
                }
                EnterOutLogInfo seatUsedInfo = SeatManageDateService.GetEnterOutLogInfoBySeatNum(reader.BespeakLog[0].SeatNo);
                if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                {
                    //条件满足,说明座位正在使用。
                    seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                    seatUsedInfo.EnterOutType  = LogStatus.Valid;
                    seatUsedInfo.Remark        = "您正在使用的座位已被原预约的读者";
                    seatUsedInfo.Flag          = Operation.OtherReader;
                    int newId = -1;
                    if (SeatManageDateService.AddEnterOutLogInfo(seatUsedInfo, ref newId) != HandleResult.Successed)
                    {
                        result.Result = false;
                        result.Msg    = "对不起,此阅览室尚未开放。";
                        return(JSONSerializer.Serialize(result));
                    }

                    List <WaitSeatLogInfo> waitInfoList = SeatManageDateService.GetWaitLogList(null, seatUsedInfo.EnterOutLogID, null, null, null);
                    if (waitInfoList.Count > 0)
                    {
                        WaitSeatLogInfo waitSeatLogModel = waitInfoList[0];
                        waitSeatLogModel.OperateType  = Operation.Reader;
                        waitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel;
                        waitSeatLogModel.NowState     = LogStatus.Valid;
                        SeatManageDateService.UpdateWaitLog(waitSeatLogModel);
                    }
                }
                EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                newEnterOutLog.CardNo          = reader.BespeakLog[0].CardNo;
                newEnterOutLog.EnterOutLogNo   = SeatComm.RndNum();
                newEnterOutLog.EnterOutState   = EnterOutLogType.BookingConfirmation;
                newEnterOutLog.EnterOutType    = LogStatus.Valid;
                newEnterOutLog.Flag            = Operation.Reader;
                newEnterOutLog.ReadingRoomNo   = reader.BespeakLog[0].ReadingRoomNo;
                newEnterOutLog.ReadingRoomName = reader.BespeakLog[0].ReadingRoomName;
                newEnterOutLog.ShortSeatNo     = reader.BespeakLog[0].ShortSeatNum;
                newEnterOutLog.SeatNo          = reader.BespeakLog[0].SeatNo;
                newEnterOutLog.Remark          = string.Format("您在选座终端{0}扫描二维码,签到入座预约的{1} {2}号座位", scancode.ClientNo, reader.BespeakLog[0].ReadingRoomName, reader.BespeakLog[0].ShortSeatNum);

                int logid = -1;
                if (SeatManageDateService.AddEnterOutLogInfo(newEnterOutLog, ref logid) == HandleResult.Successed)
                {
                    reader.BespeakLog[0].BsepeakState = BookingStatus.Confinmed;
                    reader.BespeakLog[0].CancelPerson = Operation.Reader;
                    reader.BespeakLog[0].CancelTime   = ndt;
                    reader.BespeakLog[0].Remark       = newEnterOutLog.Remark;
                    SeatManageDateService.UpdateBespeakLogInfo(reader.BespeakLog[0]);
                }
                result.Result = true;
                result.Msg    = newEnterOutLog.Remark;
                return(JSONSerializer.Serialize(result));
            }
            catch (Exception ex)
            {
                WriteLog.Write("读者签到/回来遇到异常:" + ex.Message);
                AJM_HandleResult result = new AJM_HandleResult();
                result.Result = false;
                result.Msg    = "执行遇到异常";
                return(JSONSerializer.Serialize(result));
            }
        }
        /// <summary>
        /// 座位等待处理
        /// </summary>
        /// <param name="readingRoom">阅览室</param>
        /// <param name="enterOutLog">进出记录</param>
        /// <param name="waitSeatLoglist">等待记录列表</param>
        private static void WaitSeatOperate(ReadingRoomInfo readingRoom, EnterOutLogInfo enterOutLog, List <WaitSeatLogInfo> waitSeatLoglist, DateTime nowDateTime)
        {
            try
            {
                waitSeatLoglist[0].WaitingState    = EnterOutLogType.WaitingSuccess;
                waitSeatLoglist[0].StatsChangeTime = nowDateTime;
                T_SM_SeatWaiting.UpdateWaitLog(waitSeatLoglist[0]);
                ReaderNoticeInfo notice = new ReaderNoticeInfo();

                //释放原读者座位
                int logid = 0;
                enterOutLog.Flag          = Operation.Service;
                enterOutLog.EnterOutState = EnterOutLogType.Leave;
                enterOutLog.EnterOutTime  = nowDateTime;
                enterOutLog.Remark        = string.Format("在{0},{1}号座位,被其他读者设置暂离,暂离超时,被监控服务释放座位", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount));
                EnterOutOperate.AddEnterOutLog(enterOutLog, ref logid);


                //notice.CardNo = enterOutLog.CardNo;
                //notice.Type = NoticeType.ShortLeaveTimeEndWarning;
                //notice.Note = "暂离超时,座位已被释放。";
                //T_SM_ReaderNotice.AddReaderNotice(notice);


                //PushMsgInfo msg = new PushMsgInfo();
                //msg.Title = "您好,您的座位已被释放";
                //msg.MsgType = MsgPushType.TimeOut;
                //msg.StudentNum = enterOutLog.CardNo;
                //msg.Message = enterOutLog.Remark;
                //SeatManage.Bll.T_SM_ReaderNotice.SendPushMsg(msg);


                WriteLog.Write(string.Format("监控服务:读者{0},{1}", enterOutLog.CardNo, enterOutLog.Remark));
                //等待读者入座
                EnterOutLogInfo new_eol = new EnterOutLogInfo();
                new_eol.CardNo        = waitSeatLoglist[0].CardNo;
                new_eol.EnterOutLogNo = SeatComm.RndNum();
                new_eol.EnterOutState = EnterOutLogType.WaitingSuccess;
                new_eol.EnterOutType  = LogStatus.Valid;
                new_eol.ReadingRoomNo = waitSeatLoglist[0].ReadingRoomNo;
                new_eol.Flag          = Operation.Service;
                new_eol.SeatNo        = enterOutLog.SeatNo;
                new_eol.Remark        = string.Format("在{0},{1}号座位,等待成功,自动入座", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount));
                EnterOutOperate.AddEnterOutLog(new_eol, ref logid);


                //notice.CardNo = enterOutLog.CardNo;
                //notice.Type = NoticeType.WaitSeatSuccess;
                //notice.Note = "您等待的座位已经分配给您。";
                //T_SM_ReaderNotice.AddReaderNotice(notice);

                //msg = new PushMsgInfo();
                //msg.Title = "您好,您已等待成功";
                //msg.MsgType = MsgPushType.ToTime;
                //msg.StudentNum = enterOutLog.CardNo;
                //msg.Message = new_eol.Remark;
                //SeatManage.Bll.T_SM_ReaderNotice.SendPushMsg(msg);



                WriteLog.Write(string.Format("监控服务:读者{0},{1}", new_eol.CardNo, new_eol.Remark));
                if (readingRoom.Setting.IsRecordViolate)
                {
                    AddViolationRecordByEnterOutLog(enterOutLog, ViolationRecordsType.ShortLeaveByReaderOutTime, string.Format("读者在{0},{1}号座位,被其他读者设置暂离,暂离超时", enterOutLog.ReadingRoomName, enterOutLog.SeatNo.Substring(enterOutLog.SeatNo.Length - readingRoom.Setting.SeatNumAmount)), readingRoom.Setting, nowDateTime);
                }
            }
            catch (Exception ex)
            {
                WriteLog.Write(string.Format("监控服务:处理等待读者发生错误:" + ex.Message));
            }
        }
Esempio n. 25
0
        /// <summary>
        /// 确认座位号
        /// </summary>
        /// <returns></returns>
        public bool CheckSeatNumber()
        {
            if (string.IsNullOrEmpty(SeatNo))
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatNotExists);
                return(false);
            }
            _LongSeatNo = "";
            ReadingRoomInfo roomInfo   = ClientObject.EnterOutLogData.Student.AtReadingRoom;
            string          roomNo     = roomInfo.No + "000";
            string          seatHeader = SeatComm.SeatNoToSeatNoHeader(roomInfo.Setting.SeatNumAmount, roomNo);

            _LongSeatNo = seatHeader + SeatNo;
            //获取座位信息,并判断座位在该阅览室是否存在。
            Seat seat = T_SM_Seat.GetSeatInfoBySeatNo(_LongSeatNo);

            if (seat == null)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatNotExists);
                return(false);
            }
            if (seat.IsSuspended)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatStopping);
                return(false);
            }
            if (seat.ReadingRoomNum != roomInfo.No)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatNotExists);
                return(false);
            }

            SeatManage.EnumType.EnterOutLogType logType = T_SM_EnterOutLog.GetSeatUsedState(_LongSeatNo);

            if (logType == SeatManage.EnumType.EnterOutLogType.None || logType == SeatManage.EnumType.EnterOutLogType.Leave)
            {
                //根据座位号获取进出记录的状态,如果为None或者为Leave,则锁定座位
                SeatManage.EnumType.SeatLockState lockResult = T_SM_Seat.LockSeat(_LongSeatNo);
                if (lockResult == SeatManage.EnumType.SeatLockState.NotExists)
                {
                    PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatNotExists);
                    return(false);
                }
                if (lockResult == SeatManage.EnumType.SeatLockState.Locked)
                {
                    return(true);
                }
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatUsing);
                return(false);
            }
            else if (logType == SeatManage.EnumType.EnterOutLogType.BespeakWaiting)
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatUsing);
                return(false);
            }
            else
            {
                PopupWindowsObject.GetInstance().Window.ShowMessage(SeatManage.EnumType.TipType.SeatUsing);
                return(false);
            }
        }
        /// <summary>
        /// 进入阅览室前判断
        /// </summary>
        /// <param name="roomNo"></param>
        public void EnterReadingRoom(ReadingRoomUC_ViewModel vm_Room)
        {
            try
            {
                //ClientObject.EnterOutLogData.FlowControl = ClientOperation.Back;
                ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo = vm_Room.ReadingRoomNo;
                ReadingRoomInfo roomInfo = T_SM_ReadingRoom.GetSingleRoomInfo(vm_Room.ReadingRoomNo);
                if (vm_Room.Status == ReadingRoomStatus.Close || vm_Room.Status == ReadingRoomStatus.BeforeClose)
                {
                    ClientObject.EnterOutLogData.Student.AtReadingRoom = roomInfo;
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ReadingRoomClosing);
                    ClientObject.EnterOutLogData.Student.AtReadingRoom = null;
                    return;
                }
                if (vm_Room.Usage == ReadingRoomUsingStatus.Full && (!roomInfo.Setting.NoManagement.Used))
                {
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ReadingRoomFull);
                    return;
                }
                ClientObject.EnterOutLogData.Student.AtReadingRoom = roomInfo;//给读者所在的阅览室赋值。

                //验证读者身份是否允许选择该阅览室。
                if (!SelectSeatProven.ProvenReaderType(ClientObject.EnterOutLogData.Student, roomInfo.Setting))
                {
                    PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ReaderTypeInconformity);
                    return;
                }
                //验证读者黑名单,选座次数。
                if (SelectSeatProven.ProvenReaderState(ClientObject.EnterOutLogData.Student, roomInfo, ClientObject.RegulationRulesSet.BlacklistSet, ClientObject.ClientSetting.DeviceSetting))
                {
                    ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo = "";
                    return;
                }
                //TODO:验证终端选座方式
                if (vm_Room.Usage == ReadingRoomUsingStatus.Full && roomInfo.Setting.NoManagement.Used)
                {
                    ClientObject.EnterOutLogData.FlowControl = ClientOperation.SelectSeat;
                    ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo   = roomInfo.No;
                    ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomName = roomInfo.Name;
                    //ReadingRoomWindowObject.GetInstance().Window.Hide();
                    RoomSeatWindowObject.GetInstance(roomInfo.No).Window[roomInfo.No].ShowMessage();
                }
                else
                {
                    SelectSeatMode selectSeatMethod = SelectSeatProven.ProvenSelectSeatMethod(ClientObject.ClientSetting.DeviceSetting, roomInfo.Setting.SeatChooseMethod);

                    if (selectSeatMethod == SelectSeatMode.OptionalMode || selectSeatMethod == SelectSeatMode.ManualMode)
                    {
                        ClientObject.EnterOutLogData.FlowControl = ClientOperation.SelectSeat;
                        ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo   = roomInfo.No;
                        ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomName = roomInfo.Name;
                        //ReadingRoomWindowObject.GetInstance().Window.Hide();
                        RoomSeatWindowObject.GetInstance(roomInfo.No).Window[roomInfo.No].ShowMessage();
                    }
                    else
                    {
                        ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo   = roomInfo.No;
                        ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomName = roomInfo.Name;
                        string tempSeatNo = T_SM_Seat.RandomAllotSeat(ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo);
                        if (T_SM_Seat.LockSeat(tempSeatNo) != SeatLockState.Locked)//座位锁定失败,则提示
                        {
                            ClientObject.EnterOutLogData.EnterOutlog.SeatNo = "";
                            PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SeatLocking);
                            return;
                        }
                        ClientObject.EnterOutLogData.EnterOutlog.Remark      = string.Format("在终端{0}刷卡,自动选择{1} {2}号座位", ClientObject.ClientSetting.ClientNo, ClientObject.EnterOutLogData.Student.AtReadingRoom.Name, tempSeatNo.Substring(tempSeatNo.Length - ClientObject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount));
                        ClientObject.EnterOutLogData.EnterOutlog.SeatNo      = tempSeatNo;
                        ClientObject.EnterOutLogData.EnterOutlog.TerminalNum = ClientObject.ClientSetting.ClientNo;
                        ClientObject.EnterOutLogData.EnterOutlog.ShortSeatNo = SeatComm.SeatNoToShortSeatNo(ClientObject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatNumAmount, ClientObject.EnterOutLogData.EnterOutlog.SeatNo);
                        ClientObject.EnterOutLogData.FlowControl             = ClientOperation.SelectSeat; //操作为选择座位
                    }
                }
                //RoomSeatWindowObject.GetInstance(roomInfo.No).Window[roomInfo.No] = null;
            }
            catch (Exception ex)
            {
                WriteLog.Write("加载阅览室遇到异常" + ex.Message);
                PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.Exception);
            }
        }
Esempio n. 27
0
        /// <summary>
        /// 预约等待
        /// </summary>
        public void BespeakSeatWait()
        {
            DateTime nowDate = ServiceDateTime.Now;

            if (clientobject.EnterOutLogData.Student.BespeakLog.Count > 0)
            {
                BespeakLogInfo bespeaklog = clientobject.EnterOutLogData.Student.BespeakLog[0];
                //if (!SelectSeatProven.CheckReadingRoomInThisClient(bespeaklog.ReadingRoomNo, clientobject.ClientSetting.DeviceSetting))
                //{  //验证房间号是否属于本触摸屏所管理的阅览室
                //    Tip_Framework uc = new Tip_Framework(TipType.BeapeatRoomNotExists, 9);
                //}
                ReadingRoomSetting set     = clientobject.EnterOutLogData.Student.AtReadingRoom.Setting;
                DateTime           dtBegin = bespeaklog.BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime));
                DateTime           dtEnd   = bespeaklog.BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime));
                if (DateTimeOperate.DateAccord(dtBegin, dtEnd, nowDate) || (set.SeatBespeak.NowDayBespeak && bespeaklog.SubmitTime == bespeaklog.BsepeakTime))
                {
                    //TODO:预约时间在开始时间和结束时间之间,执行预约确认操作
                    //TODO:预约确认时,判断当前座位上是否有人。
                    EnterOutLogInfo seatUsedInfo = T_SM_EnterOutLog.GetUsingEnterOutLogBySeatNo(bespeaklog.SeatNo);

                    if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                    { //条件满足,说明座位正在使用。
                        seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                        seatUsedInfo.EnterOutType  = LogStatus.Valid;
                        seatUsedInfo.Remark        = string.Format("预约该座位的读者在离开终端刷卡确认入座,设置在座读者离开");
                        seatUsedInfo.Flag          = Operation.OtherReader;
                        int newId = -1;
                        EnterOutOperate.AddEnterOutLog(seatUsedInfo, ref newId);
                    }
                    EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                    newEnterOutLog.CardNo                    = bespeaklog.CardNo;
                    newEnterOutLog.EnterOutLogNo             = SeatComm.RndNum();
                    newEnterOutLog.EnterOutState             = EnterOutLogType.BookingConfirmation;
                    newEnterOutLog.EnterOutType              = LogStatus.Valid;
                    newEnterOutLog.Flag                      = Operation.Reader;
                    newEnterOutLog.ReadingRoomNo             = bespeaklog.ReadingRoomNo;
                    newEnterOutLog.ReadingRoomName           = bespeaklog.ReadingRoomName;
                    newEnterOutLog.ShortSeatNo               = bespeaklog.ShortSeatNum;
                    newEnterOutLog.SeatNo                    = bespeaklog.SeatNo;
                    newEnterOutLog.Remark                    = string.Format("在离开终端刷卡,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    clientobject.EnterOutLogData.EnterOutlog = newEnterOutLog;
                    int          logid  = -1;
                    HandleResult result = EnterOutOperate.AddEnterOutLog(newEnterOutLog, ref logid); //添加入座记录
                    if (result == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Confinmed;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = nowDate;
                        bespeaklog.Remark       = string.Format("在离开终端刷卡,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                    }
                    if (popMessage != null)
                    {
                        popMessage(this, new PopMessage(TipType.BespeatSeatConfirmSuccess, "预约签到成功"));
                    }
                }
                else if (nowDate.CompareTo(dtBegin) < 0)
                {
                    if (popMessage != null)
                    {
                        popMessage(this, new PopMessage(TipType.BookConfirmWarn, "没到签到时间"));
                    }
                }
                else if (nowDate.CompareTo(dtEnd) < 0)
                {
                    //TODO:最迟确认时间为:dtEnd。
                }
                else
                {
                    //TODO:未知原因,预约确认失败。
                }
            }
        }