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);//确认窗口点击取消或者自动关闭,则解锁。 } } }
/// <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); } } }
/// <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); } }
/// <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)); } }
/// <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]); } } }
/// <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(); } }
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); //小的范围层。最后创建,防止被遮盖 }
/// <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("系统错误,签到失败"); } }
/// <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)); } }
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)); } }
/// <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); } }
/// <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:未知原因,预约确认失败。 } } }