/// <summary> /// 根据日期获取阅览室开闭时间 /// </summary> /// <param name="set"></param> /// <param name="date"></param> /// <returns></returns> public TimeSpace GetRoomOpenTimeByDate(ReadingRoomSetting set, string date) { DayOfWeek day = Convert.ToDateTime(date).DayOfWeek; TimeSpace timeList = new TimeSpace(); if (set.RoomOpenSet.UsedAdvancedSet) { if (set.RoomOpenSet.RoomOpenPlan[day].Used) { timeList = set.RoomOpenSet.RoomOpenPlan[day].OpenTime[0]; //bespeakTime = DateTime.Parse(string.Format("{0} {1}", Convert.ToDateTime(date).ToShortDateString(), set.RoomOpenSet.RoomOpenPlan[day].OpenTime[0].BeginTime)); } else { timeList.BeginTime = set.RoomOpenSet.DefaultOpenTime.BeginTime; timeList.EndTime = set.RoomOpenSet.DefaultOpenTime.EndTime; //bespeakTime = DateTime.Parse(string.Format("{0} {1}", Convert.ToDateTime(date).ToShortDateString(), set.RoomOpenSet.DefaultOpenTime.BeginTime)); } } else { timeList.BeginTime = set.RoomOpenSet.DefaultOpenTime.BeginTime; timeList.EndTime = set.RoomOpenSet.DefaultOpenTime.EndTime; } return(timeList); }
string bespeakSureTimeSpan(ReadingRoomSetting set) { DateTime bespeakTime = DateTime.Now; if (bookMode.SelectedIndex == 1) { if (ReadingRoomList[roomNo].Setting.SeatBespeak.SpecifiedTime) { bespeakTime = Convert.ToDateTime(spanSelect.Items[spanSelect.SelectedIndex].Value); } else { bespeakTime = Convert.ToDateTime(timeSelect.Items[timeSelect.SelectedIndex].Value); } DateTime bespeakBeginTime = bespeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime)); DateTime bespeakEndTime = bespeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime)); return(string.Format("{0}至{1}", bespeakBeginTime.ToShortTimeString(), bespeakEndTime.ToShortTimeString())); } else { DateTime bespeakBeginTime = bespeakTime; DateTime bespeakEndTime = bespeakTime.AddMinutes(set.SeatBespeak.SeatKeepTime); return(string.Format("{0}至{1}", bespeakBeginTime.ToShortTimeString(), bespeakEndTime.ToShortTimeString())); } }
/// <summary> /// 预约超时 /// </summary> /// <param name="rri">阅览室信息</param> /// <param name="NowDateTime">时间</param> /// <param name="bli">预约记录</param> private static void BookingOverTime(ReadingRoomSetting roomSetting, DateTime NowDateTime, BespeakLogInfo bli) { try { bli.CancelTime = NowDateTime; bli.CancelPerson = Operation.Service; bli.BsepeakState = BookingStatus.Cencaled; bli.Remark = string.Format("在{0},{1}号座位,预约超时", bli.ReadingRoomName, bli.SeatNo.Substring(bli.SeatNo.Length - roomSetting.SeatNumAmount)); T_SM_SeatBespeak.UpdateBespeakList(bli); WriteLog.Write(string.Format("读者{0},{1}", bli.CardNo, bli.Remark)); if (roomSetting.IsRecordViolate) { AddViolationRecordByBookLog(bli, ViolationRecordsType.BookingTimeOut, string.Format("读者在{0},{1}号座位,预约超时", bli.ReadingRoomName, bli.SeatNo.Substring(bli.SeatNo.Length - roomSetting.SeatNumAmount)), roomSetting, NowDateTime); //ReaderNoticeInfo notice = new ReaderNoticeInfo(); //notice.CardNo = bli.CardNo; //notice.Type = NoticeType.BespeakExpiration; //notice.Note = "预约的座位因超时已被取消。"; //T_SM_ReaderNotice.AddReaderNotice(notice); } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:处理读者预约超时发生错误:" + ex.Message)); } }
/// <summary> /// 暂离超时操作 /// </summary> /// <param name="enterOutlog">进出记录</param> /// <param name="roomset">阅览室设置</param> private void ShortLeaveOverTimeOperator(EnterOutLogInfo enterOutlog, ReadingRoomSetting readingRoomSetting, DateTime nowDateTime) { try { string vrremark = ""; ViolationRecordsType vrtypt = ViolationRecordsType.ShortLeaveOutTime; enterOutlog.EnterOutTime = nowDateTime; enterOutlog.EnterOutState = EnterOutLogType.Leave; switch (enterOutlog.Flag) {//TODO:记录管理员信息 case Operation.Admin: enterOutlog.Remark = string.Format("在{0},{1}号座位,被管理员设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,被管理员设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveByAdminOutTime; break; case Operation.OtherReader: enterOutlog.Remark = string.Format("在{0},{1}号座位,被其他读者设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,被其他读者设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveByReaderOutTime; break; case Operation.Reader: enterOutlog.Remark = string.Format("在{0},{1}号座位,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveOutTime; break; case Operation.Service: enterOutlog.Remark = string.Format("在{0},{1}号座位,在座超时,监控服务设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,在座超时,监控服务设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.SeatOutTime; break; default: enterOutlog.Remark = string.Format("在{0},{1}号座位,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveOutTime; break; } enterOutlog.Flag = Operation.Service; int logid = 0; seatManageService.AddEnterOutLogInfo(enterOutlog, ref logid); WriteLog.Write(string.Format("读者{0},{1}", enterOutlog.CardNo, enterOutlog.Remark)); if (readingRoomSetting.IsRecordViolate) { AddViolationRecordByEnterOutLog(enterOutlog, vrtypt, vrremark, readingRoomSetting, nowDateTime); } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:处理读者暂离超时发生错误:" + ex.Message)); } }
/// <summary> /// 验证读者类型 /// </summary> /// <param name="reader"></param> /// <param name="roomSet"></param> /// <returns></returns> public static bool ProvenReaderType(ReaderInfo reader, ReadingRoomSetting roomSet) { if (!roomSet.LimitReaderEnter.Used) { return(true); } string[] readerTypes = roomSet.LimitReaderEnter.ReaderTypes.Split(';'); if (readerTypes.Any(t => reader.ReaderType == t)) { return(roomSet.LimitReaderEnter.CanEnter); } return(!roomSet.LimitReaderEnter.CanEnter); }
string bespeakSureTime(ReadingRoomSetting set) { T_SM_ReadingRoom bllReadingRoom = new T_SM_ReadingRoom(); DateTime bespeakTime = Convert.ToDateTime(bllReadingRoom.GetRoomOpenTimeByDate(set, date).BeginTime); if (spanSelect.Visible) { bespeakTime = Convert.ToDateTime(spanSelect.Items[spanSelect.SelectedIndex].Value); } else { bespeakTime = Convert.ToDateTime(timeSelect.Items[timeSelect.SelectedIndex].Value); } return(string.Format(bespeakTime.ToShortTimeString())); }
string bespeakSureTime(ReadingRoomSetting set) { DateTime bespeakTime = DateTime.Now; if (bookMode.SelectedIndex == 1) { if (ReadingRoomList[roomNo].Setting.SeatBespeak.SpecifiedTime) { bespeakTime = Convert.ToDateTime(spanSelect.Items[spanSelect.SelectedIndex].Value); } else { bespeakTime = Convert.ToDateTime(timeSelect.Items[timeSelect.SelectedIndex].Value); } } return(string.Format(bespeakTime.ToShortTimeString())); }
string bespeakSureTimeSpan(ReadingRoomSetting set) { T_SM_ReadingRoom bllReadingRoom = new T_SM_ReadingRoom(); DateTime bespeakTime = Convert.ToDateTime(bllReadingRoom.GetRoomOpenTimeByDate(set, date).BeginTime); if (spanSelect.Visible) { bespeakTime = Convert.ToDateTime(spanSelect.Items[spanSelect.SelectedIndex].Value); } else { bespeakTime = Convert.ToDateTime(timeSelect.Items[timeSelect.SelectedIndex].Value); } DateTime bespeakBeginTime = bespeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime)); DateTime bespeakEndTime = bespeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime)); return(string.Format("{0}至{1}", bespeakBeginTime.ToShortTimeString(), bespeakEndTime.ToShortTimeString())); }
/// <summary> /// 验证读者类型 /// </summary> /// <param name="reader"></param> /// <param name="roomSet"></param> /// <returns></returns> public static bool ProvenReaderType(ReaderInfo reader, ReadingRoomSetting roomSet) { if (roomSet.LimitReaderEnter.Used) { string[] readerTypes = roomSet.LimitReaderEnter.ReaderTypes.Split(';'); for (int i = 0; i < readerTypes.Length; i++) { if (reader.ReaderType == readerTypes[i])//如果读者类型和限制的类型一致,则返回该类型的选择权限。 { return(roomSet.LimitReaderEnter.CanEnter); } } return(!roomSet.LimitReaderEnter.CanEnter); } else { return(true); } }
/// <summary> /// 在座超时处理 /// </summary> /// <param name="leavetype">处理类型</param> /// <param name="eol">进出记录</param> private static void SeatOverTimeOperator(ReadingRoomSetting roomSetting, EnterOutLogInfo eol, DateTime nowDateTime) { try { int logdi = 0; //在座超时处理 switch (roomSetting.SeatUsedTimeLimit.OverTimeHandle) { case EnterOutLogType.Leave: eol.EnterOutState = EnterOutLogType.Leave; eol.EnterOutTime = nowDateTime; eol.Flag = Operation.Service; eol.Remark = string.Format("在{0},{1}号座位,在座超时,监控服务释放座位", eol.ReadingRoomName, eol.SeatNo.Substring(eol.SeatNo.Length - roomSetting.SeatNumAmount)); EnterOutOperate.AddEnterOutLog(eol, ref logdi); WriteLog.Write(string.Format("监控服务:读者{0},{1}", eol.CardNo, eol.Remark)); //违规处理 if (roomSetting.IsRecordViolate) { AddViolationRecordByEnterOutLog(eol, ViolationRecordsType.SeatOutTime, string.Format("读者在{0},{1}号座位,在座超时", eol.ReadingRoomName, eol.SeatNo.Substring(eol.SeatNo.Length - roomSetting.SeatNumAmount)), roomSetting, nowDateTime); } break; case EnterOutLogType.ShortLeave: eol.EnterOutState = EnterOutLogType.ShortLeave; eol.EnterOutTime = nowDateTime; eol.Flag = Operation.Service; eol.Remark = string.Format("在{0},{1}号座位,在座超时,监控服务设置暂离", eol.ReadingRoomName, eol.SeatNo.Substring(eol.SeatNo.Length - roomSetting.SeatNumAmount)); EnterOutOperate.AddEnterOutLog(eol, ref logdi); WriteLog.Write(string.Format("监控服务:读者{0},{1}", eol.CardNo, eol.Remark)); break; } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:处理读者在座超时发生错误:" + ex.Message)); } }
/// <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); } }
private BespeakLogInfo DataRowToBespeakLogInfoNotCheck(DataRow dr) { try { BespeakLogInfo bookLogInfo = new BespeakLogInfo(); bookLogInfo.BsepeaklogID = dr["BespeakID"].ToString(); bookLogInfo.ReadingRoomNo = dr["ReadingRoomNo"].ToString(); bookLogInfo.SeatNo = dr["SeatNo"].ToString(); bookLogInfo.BsepeakState = (BookingStatus)int.Parse(dr["BespeakState"].ToString()); bookLogInfo.BsepeakTime = Convert.ToDateTime(dr["BespeakTime"]); bookLogInfo.CardNo = dr["CardNo"].ToString(); if (!string.IsNullOrEmpty(dr["CancelTime"].ToString())) { bookLogInfo.CancelTime = Convert.ToDateTime(dr["CancelTime"]); } bookLogInfo.SubmitTime = Convert.ToDateTime(dr["SubmitTime"]); if (!string.IsNullOrEmpty(dr["BespeakCancelPerson"].ToString())) { bookLogInfo.CancelPerson = (Operation)int.Parse(dr["BespeakCancelPerson"].ToString()); } ReadingRoomSetting roomSet = new ReadingRoomSetting(dr["ReadingSetting"].ToString()); bookLogInfo.ReadingRoomName = dr["ReadingRoomName"].ToString(); bookLogInfo.ReaderName = dr["ReaderName"].ToString(); if (dr["ReaderTypeName"] != null) { bookLogInfo.TypeName = dr["ReaderTypeName"].ToString(); } if (dr["ReaderDeptName"] != null) { bookLogInfo.DeptName = dr["ReaderDeptName"].ToString(); } if (dr["Sex"] != null) { bookLogInfo.Sex = dr["Sex"].ToString(); } bookLogInfo.FlagKey = dr["BespeakFlag"].ToString(); //if (bookLogInfo.BsepeakState == BookingStatus.Waiting) //{ // DateTime bespeakDate = bookLogInfo.BsepeakTime; // bookLogInfo.Remark = string.Format("请在{0}至{1}之间到图书馆刷卡确认。", bespeakDate.AddMinutes(-int.Parse(roomSet.SeatBespeak.ConfirmTime.BeginTime)).ToShortTimeString(), bespeakDate.AddMinutes(int.Parse(roomSet.SeatBespeak.ConfirmTime.EndTime)).ToShortTimeString()); //} //else //{ bookLogInfo.Remark = dr["remark"].ToString(); //} //if (GetBespeakMD5Key(bookLogInfo) != bookLogInfo.FlagKey) //{ // return null; //} bookLogInfo.ShortSeatNum = bookLogInfo.SeatNo.Substring(bookLogInfo.SeatNo.Length - roomSet.SeatNumAmount, roomSet.SeatNumAmount); return(bookLogInfo); } catch { return(null); } }
/// <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:未知原因,预约确认失败。 } } }
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)); } }
public string SubmitSeat(string cardNo, string seatNum, string readingRoomNum) { try { if (!IsPushAccount(cardNo)) { string readCardRemark = ConfigurationManager.AppSettings["ReadCardRemark"] ?? "请先刷卡"; return(readCardRemark); } 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: if (seatManage.GetReaderChooseSeatTimes(cardNo, roomSet.PosTimes.Minutes) >= roomSet.PosTimes.Times) { return("选座频繁。"); } EnterOutLogInfo enterOutlog = new EnterOutLogInfo(); enterOutlog.CardNo = cardNo; enterOutlog.ReadingRoomNo = readingRoomNum; enterOutlog.Remark = "读者通过手机客户端选择座位"; enterOutlog.SeatNo = seatNum; enterOutlog.Flag = EnumType.Operation.Reader; enterOutlog.EnterOutType = EnumType.LogStatus.Valid; enterOutlog.EnterOutState = EnumType.EnterOutLogType.SelectSeat; enterOutlog.EnterOutLogNo = SeatManage.SeatManageComm.SeatComm.RndNum(); int newLogId = -1; if (seatManage.AddEnterOutLogInfo(enterOutlog, ref newLogId) == HandleResult.Successed) { return("选座成功!"); } else { return("未知原因,选择座位失败"); } break; case EnterOutLogType.BespeakWaiting: return("您已有等待签到的座位"); case EnterOutLogType.BookingConfirmation: case EnterOutLogType.SelectSeat: case EnterOutLogType.ContinuedTime: case EnterOutLogType.ComeBack: case EnterOutLogType.ReselectSeat: case EnterOutLogType.WaitingSuccess: case EnterOutLogType.ShortLeave: return("您已有座位"); case EnterOutLogType.Waiting: return("您当前在等待其他座位"); } return("读者状态错误"); } catch (Exception ex) { SeatManageComm.WriteLog.Write(string.Format("扫码入座失败:{0}", ex.Message)); return("系统错误,选择座位失败"); } }
/// <summary> /// 添加违规记录 /// </summary> /// <param name="eol">进出记录</param> /// <param name="type">违规类型</param> /// <param name="note">提示信息</param> private void AddViolationRecordByEnterOutLog(EnterOutLogInfo eol, ViolationRecordsType type, string note, ReadingRoomSetting roomSetting, DateTime nowDateTime) { try { if (roomSetting.BlackListSetting.Used && !roomSetting.BlackListSetting.ViolateRoule[type]) { return; } if (!regulationRulesSetting.BlacklistSet.Used || !regulationRulesSetting.BlacklistSet.ViolateRoule[type]) { return; } ViolationRecordsLogInfo vrli = new ViolationRecordsLogInfo(); vrli.CardNo = eol.CardNo; vrli.SeatID = eol.SeatNo; if (vrli.SeatID.Length > roomSetting.SeatNumAmount) { vrli.SeatID = vrli.SeatID.Substring(vrli.SeatID.Length - roomSetting.SeatNumAmount); } vrli.ReadingRoomID = eol.ReadingRoomNo; vrli.EnterOutTime = nowDateTime.ToString(); vrli.EnterFlag = type; vrli.Remark = note; seatManageService.AddViolationRecordsLog(vrli); WriteLog.Write(string.Format("监控服务:读者{0},{1},记录违规", vrli.CardNo, vrli.Remark)); } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:添加违规记录发生错误:" + ex.Message)); } }
/// <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:未知原因,预约确认失败。 } } }
/// <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> /// <param name="enterOutlog">进出记录</param> /// <param name="roomset">阅览室设置</param> private static void ShortLeaveOverTimeOperator(EnterOutLogInfo enterOutlog, ReadingRoomSetting readingRoomSetting, DateTime nowDateTime) { try { string vrremark = ""; ViolationRecordsType vrtypt = ViolationRecordsType.ShortLeaveOutTime; enterOutlog.EnterOutTime = nowDateTime; enterOutlog.EnterOutState = EnterOutLogType.Leave; switch (enterOutlog.Flag) {//TODO:记录管理员信息 case Operation.Admin: enterOutlog.Remark = string.Format("在{0},{1}号座位,被管理员设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,被管理员设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveByAdminOutTime; break; case Operation.OtherReader: enterOutlog.Remark = string.Format("在{0},{1}号座位,被其他读者设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,被其他读者设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveByReaderOutTime; break; case Operation.Reader: enterOutlog.Remark = string.Format("在{0},{1}号座位,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveOutTime; break; case Operation.Service: enterOutlog.Remark = string.Format("在{0},{1}号座位,在座超时,监控服务设置暂离,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,在座超时,监控服务设置暂离,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.SeatOutTime; break; default: enterOutlog.Remark = string.Format("在{0},{1}号座位,暂离超时,被监控服务释放座位", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrremark = string.Format("读者在{0},{1}号座位,暂离超时", enterOutlog.ReadingRoomName, enterOutlog.SeatNo.Substring(enterOutlog.SeatNo.Length - readingRoomSetting.SeatNumAmount)); vrtypt = ViolationRecordsType.ShortLeaveOutTime; break; } //ReaderNoticeInfo notice = new ReaderNoticeInfo(); //notice.CardNo = enterOutlog.CardNo; //if (enterOutlog.Flag == Operation.Service)//暂离记录为监控服务操作。 //{ // notice.Type = NoticeType.SeatUsedTimeEnd; // notice.Note = "在座超时,座位已经被释放,如果还需继续使用座位,请重新选座"; //} //else //{ // notice.Type = NoticeType.SeatUsedTimeEnd; // 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); enterOutlog.Flag = Operation.Service; int logid = 0; EnterOutOperate.AddEnterOutLog(enterOutlog, ref logid); WriteLog.Write(string.Format("读者{0},{1}", enterOutlog.CardNo, enterOutlog.Remark)); if (readingRoomSetting.IsRecordViolate) { AddViolationRecordByEnterOutLog(enterOutlog, vrtypt, vrremark, readingRoomSetting, nowDateTime); } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:处理读者暂离超时发生错误:" + ex.Message)); } }
/// <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:未知原因,预约确认失败。 } } }