public void BeapeakLogOperating() { try { DateTime nowDateTime = ServiceDateTime.Now; //预约超时处理 List <BespeakLogInfo> blilist = T_SM_SeatBespeak.GetNotCheckedBespeakLogInfo(null, nowDateTime); if (blilist.Count <= 0) { return; } foreach (BespeakLogInfo bli in blilist) { if (roomList[bli.ReadingRoomNo].Setting.SeatBespeak.NowDayBespeak && bli.BsepeakTime.Date == bli.SubmitTime.Date) { if (bli.BsepeakTime.AddMinutes(roomList[bli.ReadingRoomNo].Setting.SeatBespeak.SeatKeepTime) < nowDateTime) { BookingOverTime(roomList[bli.ReadingRoomNo].Setting, nowDateTime, bli); } } //如果预约超时则更改预约状态 else { if (bli.BsepeakTime.AddMinutes(int.Parse(roomList[bli.ReadingRoomNo].Setting.SeatBespeak.ConfirmTime.EndTime)) < nowDateTime) { BookingOverTime(roomList[bli.ReadingRoomNo].Setting, nowDateTime, bli); } } } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:预约超时处理遇到异常{0}", ex.Message)); } }
/// <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="cardNo"></param> /// <param name="date"></param> /// <returns></returns> public List <BespeakLogInfo> QueryBespeakLogs(string cardNo, DateTime date) { //TODO:查询当天的预约记录 DateTime beginDate = DateTime.Parse(date.ToShortDateString() + " 0:0:0"); DateTime endDate = DateTime.Parse(date.ToShortDateString() + " 23:59:59"); List <BespeakLogInfo> bespeakLogs = T_SM_SeatBespeak.GetBespeakList(cardNo, null, endDate, 0, null); return(bespeakLogs); }
/// <summary> /// 开馆处理 /// </summary> /// <param name="readingRooms"></param> private void OpenReadingRoom(ReadingRoomInfo room) { DateTime nowDateTime = ServiceDateTime.Now; try { //获取昨天的进出记录 List <EnterOutLogInfo> eolList = T_SM_EnterOutLog.GetEnterOutLogByStatus(null, room.No, null, enterOutLogTypeList, LogStatus.Valid, "1900-1-1", ServiceDateTime.Now.ToShortDateString()); foreach (EnterOutLogInfo eol in eolList) { if ((eol.EnterOutState == EnterOutLogType.ShortLeave) && (eol.Flag == Operation.Admin || eol.Flag == Operation.OtherReader)) { //获取昨天的等待记录 List <WaitSeatLogInfo> wsllist = T_SM_SeatWaiting.GetWaitSeatList(null, eol.EnterOutLogID, null, null, new List <EnterOutLogType> { EnterOutLogType.Waiting }); if (wsllist.Count > 0) { wsllist[0].WaitingState = EnterOutLogType.WaitingCancel; wsllist[0].StatsChangeTime = nowDateTime; T_SM_SeatWaiting.UpdateWaitLog(wsllist[0]); } } 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 - room.Setting.SeatNumAmount)); int logdi = 0; EnterOutOperate.AddEnterOutLog(eol, ref logdi); WriteLog.Write(string.Format("监控服务:读者{0},{1}", eol.CardNo, eol.Remark)); } //预约记录处理 TimeSpan span = nowDateTime - DateTime.Parse("2010-1-1"); List <BespeakLogInfo> blilist = T_SM_SeatBespeak.GetBespeakList(null, room.No, nowDateTime.AddDays(-1), span.Days, new List <BookingStatus> { BookingStatus.Waiting }); if (blilist.Count <= 0) { return; } foreach (BespeakLogInfo bli in blilist.Where(bli => bli.BsepeakTime.Date < nowDateTime.Date)) { bli.CancelTime = bli.BsepeakTime.AddMinutes(int.Parse(room.Setting.SeatBespeak.ConfirmTime.EndTime)); bli.CancelPerson = Operation.Service; bli.BsepeakState = BookingStatus.Cencaled; bli.Remark = string.Format("读者,在{0},{1}号座位,预约,闭馆取消预约", bli.ReadingRoomName, bli.SeatNo.Substring(bli.SeatNo.Length - room.Setting.SeatNumAmount)); T_SM_SeatBespeak.UpdateBespeakList(bli); WriteLog.Write(string.Format("监控服务:读者{0},{1}", bli.CardNo, bli.Remark)); } } catch (Exception ex) { WriteLog.Write(string.Format("监控服务:执行开馆处理遇到错误:{0}", ex.Message)); } }
/// <summary> /// 续时 /// </summary> public void ContinuedTime() { int newLogId = -1; //if (Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.RoomOpenSet.UninterruptibleModel) //{ // PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinuedTime); //} //else //{ // if (Clientobject.EnterOutLogData.Student.CanContinuedTime.AddMinutes(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.CanDelayTime) >= DateTime.Parse(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.RoomOpenSet.DefaultOpenTime.EndTime)) // { // PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinuedTimeWithout); // return; // } //} if (Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.CanNotContinuedWithBookNetFixed && Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatBespeak.Used && Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatBespeak.SpecifiedBespeak && Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatBespeak.SpecifiedTime) { List <BespeakLogInfo> bookList = T_SM_SeatBespeak.GetBespeakLogInfoBySeatNo(Clientobject.EnterOutLogData.EnterOutlog.SeatNo, ServiceDateTime.Now); if (bookList.Any(log => Clientobject.EnterOutLogData.Student.CanContinuedTime.AddMinutes(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.CanDelayTime) == log.BsepeakTime)) { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinueWithBookLog); return; } } if (Clientobject.EnterOutLogData.Student.CanContinuedTime.AddMinutes(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.CanDelayTime) >= DateTime.Parse(Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.RoomOpenSet.DefaultOpenTime.EndTime)) { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinuedTimeWithout); return; } if (Clientobject.EnterOutLogData.Student.CanContinuedTime > ServiceDateTime.Now) { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinuedTimeNotTime); return; } if (Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.ContinuedTimes != 0 && (Clientobject.EnterOutLogData.Student.ContinuedTimeCount >= Clientobject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatUsedTimeLimit.ContinuedTimes)) { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.ContinuedTimeNoCount); return; } Clientobject.EnterOutLogData.EnterOutlog.Remark = string.Format("在终端{0}刷卡延长{1} {2}号座位使用时间", Clientobject.ClientSetting.ClientNo, Clientobject.EnterOutLogData.Student.AtReadingRoom.Name, Clientobject.EnterOutLogData.EnterOutlog.ShortSeatNo); Clientobject.EnterOutLogData.EnterOutlog.TerminalNum = Clientobject.ClientSetting.ClientNo; HandleResult result = EnterOutOperate.AddEnterOutLog(Clientobject.EnterOutLogData.EnterOutlog, ref newLogId);//插入进出记录 PopupWindowsObject.GetInstance().Window.ShowMessage(result == HandleResult.Successed ? TipType.ContinuedTime : TipType.Exception); }
public string StuBookLog(string StuNo) { try { if (!Verifylicensing()) { return("非法操作,此接口未进行授权!"); } List <SeatManage.ClassModel.BespeakLogInfo> list = T_SM_SeatBespeak.GetBespeakList(StuNo, null, DateTime.Parse("1900-1-1"), 0, new List <SeatManage.EnumType.BookingStatus>() { SeatManage.EnumType.BookingStatus.Waiting }); //TODO:转换成xml结构的算法 //创建一个xml对象 XmlDocument xmlDoc = new XmlDocument(); //创建开头 XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); xmlDoc.AppendChild(dec); //创建根节点 XmlElement root = xmlDoc.CreateElement("StuBookingLog"); xmlDoc.AppendChild(root); for (int i = 0; i < list.Count; i++) { XmlElement logNode = xmlDoc.CreateElement("Log"); string seatNo = list[i].SeatNo; string roomName = list[i].ReadingRoomName; string message = list[i].Remark; string bookingtime = list[i].BsepeakTime.ToString(); string submittime = list[i].SubmitTime.ToString(); logNode.SetAttribute("SeatNo", seatNo); logNode.SetAttribute("RoomName", roomName); logNode.SetAttribute("SubmitTime", submittime); logNode.SetAttribute("BookingTime", bookingtime); logNode.SetAttribute("Describe", message); root.AppendChild(logNode); } return(xmlDoc.OuterXml); } catch (Exception ex) { return(ex.Message); } }
/// <summary> /// 选择预约的座位 /// </summary> /// <param name="seatBtn"></param> /// <returns></returns> public bool SelectBookingSeat(SeatUC_ViewModel seatVM) { DateTime datetimeNow = ServiceDateTime.Now; List <BespeakLogInfo> bespeakLogList = T_SM_SeatBespeak.GetBespeakLogInfoBySeatNo(seatVM.LongSeatNo, datetimeNow.Date); if (bespeakLogList.Count > 0) { if (bespeakLogList[0].BsepeakTime.AddMinutes(-double.Parse(ClientObject.EnterOutLogData.Student.AtReadingRoom.Setting.SeatBespeak.ConfirmTime.BeginTime)) <= datetimeNow) { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.IsBookingSeat); return(false); } ClientObject.EnterOutLogData.BespeakLogInfo = bespeakLogList[0]; PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SelectBookingSeatWarn); if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule == HandleResult.Failed) { ClientObject.EnterOutLogData.BespeakLogInfo = null; return(false); } } SeatLockState lockseat = T_SM_Seat.LockSeat(seatVM.LongSeatNo); if (lockseat != SeatLockState.Locked) //座位成功加锁 { PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SeatLocking); return(false); } ClientObject.EnterOutLogData.EnterOutlog.ShortSeatNo = seatVM.ShortSeatNo; ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomName = _ReadingRoomName; ClientObject.EnterOutLogData.EnterOutlog.ReadingRoomNo = _ReadingRoomNo; PopupWindowsObject.GetInstance().Window.ShowMessage(TipType.SelectSeatConfinmed); if (PopupWindowsObject.GetInstance().Window.ViewModel.OperateResule == HandleResult.Failed) { T_SM_Seat.UnLockSeat(seatVM.LongSeatNo);//确认窗口点击取消或者自动关闭,则解锁。 return(false); } ClientObject.EnterOutLogData.EnterOutlog.SeatNo = seatVM.LongSeatNo; ClientObject.EnterOutLogData.EnterOutlog.ShortSeatNo = seatVM.ShortSeatNo; ClientObject.EnterOutLogData.EnterOutlog.TerminalNum = ClientObject.ClientSetting.ClientNo; ClientObject.EnterOutLogData.EnterOutlog.Remark = string.Format("在终端{0}手动选择,{1},{2}号座位", ClientObject.ClientSetting.ClientNo, ClientObject.EnterOutLogData.Student.AtReadingRoom.Name, seatVM.ShortSeatNo); ClientObject.EnterOutLogData.FlowControl = ClientOperation.SelectSeat; //操作为选择座位 return(true); }
private void btnSure_Click(object sender, EventArgs e) { try { BespeakLogInfo bespeaklog = clientObject.EnterOutLogData.Student.BespeakLog[0]; 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); if (i > 0) { this.btnSure.Visible = false; this.panel1.Visible = false; this.lblCancelMessage.Text = " 您已经取消预约的座位,请重新刷卡选选座。"; } } catch { } }
/// <summary> /// 开始计算 /// </summary> public static bool Upload() { try { DateTime sdt; string lastdate = GetLastDate(); if (!string.IsNullOrEmpty(lastdate)) { sdt = DateTime.Parse(lastdate); } else { sdt = SeatManage.Bll.T_SM_EnterOutLog_bak.GetFristLogDate(); } if (sdt <= DateTime.Parse("2000-1-1")) { return(true); } AMS.ServiceProxy.FileOperate fileOperate = new ServiceProxy.FileOperate(); sdt = sdt.AddDays(1); while (true) { //获取进出记录 List <EnterOutLogInfo> enterOutLogList = T_SM_EnterOutLog_bak.GetStatisticsLogsByDate(sdt); List <BespeakLogInfo> bespeakLogList = T_SM_SeatBespeak.GetBespeakList(null, null, sdt, 0, null); List <ViolationRecordsLogInfo> violationLogList = T_SM_ViolateDiscipline.GetViolationRecords(null, null, sdt.ToShortDateString(), sdt.Date.AddDays(1).AddSeconds(-1).ToString(), LogStatus.None, LogStatus.None); List <BlackListInfo> blacklistList = T_SM_Blacklist.GetAllBlackListInfo(null, LogStatus.None, sdt.ToShortDateString(), sdt.Date.AddDays(1).AddSeconds(-1).ToString()); if (enterOutLogList.Count <= 0 && bespeakLogList.Count <= 0 && violationLogList.Count <= 0 && sdt >= ServiceDateTime.Now.Date.AddDays(-1)) { break; } StringBuilder eolsb = new StringBuilder(); StringBuilder blisb = new StringBuilder(); StringBuilder vrisb = new StringBuilder(); StringBuilder bllsb = new StringBuilder(); foreach (EnterOutLogInfo eol in enterOutLogList) { //记录内容 eolsb.Append(eol.EnterOutLogID + ","); eolsb.Append(eol.EnterOutLogNo + ","); eolsb.Append(eol.EnterOutState + ","); eolsb.Append(eol.EnterOutTime + ","); //座位信息 eolsb.Append(eol.TerminalNum + ","); eolsb.Append(eol.SeatNo + ","); eolsb.Append(eol.ReadingRoomNo + ","); eolsb.Append(eol.ReadingRoomName + ","); //备注 eolsb.Append(eol.Flag + ","); eolsb.Append(eol.Remark + ","); //读者信息 eolsb.Append(eol.CardNo + ","); eolsb.Append(eol.ReaderName + ","); eolsb.Append(eol.Sex + ","); vrisb.Append(eol.DeptName + ","); vrisb.Append(eol.TypeName + ";"); eolsb.AppendLine(); } foreach (BespeakLogInfo bli in bespeakLogList) { blisb.Append(bli.BsepeaklogID + ","); blisb.Append(bli.BsepeakTime + ","); blisb.Append(bli.BsepeakState + ","); blisb.Append(bli.SubmitTime + ","); blisb.Append(bli.CancelPerson + ","); blisb.Append(bli.CancelTime + ","); blisb.Append(bli.SeatNo + ","); blisb.Append(bli.ReadingRoomNo + ","); blisb.Append(bli.ReadingRoomName + ","); blisb.Append(bli.Remark + ","); blisb.Append(bli.CardNo + ","); blisb.Append(bli.ReaderName + ","); blisb.Append(bli.Sex + ","); vrisb.Append(bli.DeptName + ","); vrisb.Append(bli.TypeName + ";"); blisb.AppendLine(); } foreach (ViolationRecordsLogInfo vri in violationLogList) { vrisb.Append(vri.ID + ","); vrisb.Append(vri.BlacklistID + ","); vrisb.Append(vri.WarningState + ","); vrisb.Append(vri.EnterFlag + ","); vrisb.Append(vri.EnterOutTime + ","); vrisb.Append(vri.Flag + ","); vrisb.Append(vri.SeatID + ","); vrisb.Append(vri.ReadingRoomID + ","); vrisb.Append(vri.ReadingRoomName + ","); vrisb.Append(vri.Remark + ","); vrisb.Append(vri.CardNo + ","); vrisb.Append(vri.ReaderName + ","); vrisb.Append(vri.Sex + ","); vrisb.Append(vri.DeptName + ","); vrisb.Append(vri.TypeName + ";"); vrisb.AppendLine(); } foreach (BlackListInfo bli in blacklistList) { bllsb.Append(bli.ID + ","); bllsb.Append(bli.AddTime + ","); bllsb.Append(bli.BlacklistState + ","); bllsb.Append(bli.OutBlacklistMode + ","); bllsb.Append(bli.OutTime + ","); bllsb.Append(bli.ReadingRoomID + ","); bllsb.Append(bli.ReadingRoomName + ","); bllsb.Append(bli.ReMark + ","); bllsb.Append(bli.CardNo + ","); bllsb.Append(bli.ReaderName + ","); bllsb.Append(bli.Sex + ","); bllsb.Append(bli.DeptName + ","); bllsb.Append(bli.TypeName + ";"); bllsb.AppendLine(); } try { string filedateName = sdt.Year + "-" + sdt.Month + "-" + sdt.Day; SaveLog("EOL_" + filedateName, eolsb.ToString()); SaveLog("BSL_" + filedateName, blisb.ToString()); SaveLog("VRL_" + filedateName, vrisb.ToString()); SaveLog("BLL_" + filedateName, bllsb.ToString()); //压缩文件 string fileDircetoryPath = AppDomain.CurrentDomain.BaseDirectory + "StatisticsTmp\\"; SeatManage.SeatManageComm.ZipUtil.ZipFile(fileDircetoryPath + "EOL_" + filedateName, fileDircetoryPath + "ZEOL_" + filedateName); SeatManage.SeatManageComm.ZipUtil.ZipFile(fileDircetoryPath + "BSL_" + filedateName, fileDircetoryPath + "ZBSL_" + filedateName); SeatManage.SeatManageComm.ZipUtil.ZipFile(fileDircetoryPath + "VRL_" + filedateName, fileDircetoryPath + "ZVRL_" + filedateName); SeatManage.SeatManageComm.ZipUtil.ZipFile(fileDircetoryPath + "BLL_" + filedateName, fileDircetoryPath + "ZBLL_" + filedateName); //上传文件 fileOperate.UpdateFile(fileDircetoryPath + "ZEOL_" + filedateName, ServiceSet.SchoolNums + "_ZEOL_" + filedateName, SeatManageSubsystem.EnterOutLog); fileOperate.UpdateFile(fileDircetoryPath + "ZBSL_" + filedateName, ServiceSet.SchoolNums + "_ZBSL_" + filedateName, SeatManageSubsystem.BespeakLog); fileOperate.UpdateFile(fileDircetoryPath + "ZVRL_" + filedateName, ServiceSet.SchoolNums + "_ZVRL_" + filedateName, SeatManageSubsystem.ViolateDiscipline); fileOperate.UpdateFile(fileDircetoryPath + "ZBLL_" + filedateName, ServiceSet.SchoolNums + "_ZBLL_" + filedateName, SeatManageSubsystem.Blistlist); //删除缓存文件 Directory.Delete(fileDircetoryPath, true); SetLastDate(sdt.ToShortDateString()); sdt = sdt.AddDays(1); if (sdt >= ServiceDateTime.Now.Date) { break; } } catch (Exception ex) { SeatManage.SeatManageComm.WriteLog.Write(string.Format("统计{0}记录失败:{1}", sdt.ToShortDateString(), ex.Message)); return(false); } } return(true); } catch (Exception ex) { SeatManage.SeatManageComm.WriteLog.Write(string.Format("统计记录失败:{0}", ex.Message)); return(false); } }
/// <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 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> private void Statistics() { try { List <ReadingRoomInfo> rooms = ClientConfigOperate.GetReadingRooms(null); DateTime sdt = SeatUsageDataOperating.GetLastRoomUsageStatisticsDate(); if (sdt <= DateTime.Parse("2000-1-1")) { return; } sdt = sdt.AddDays(1); while (true) { //获取进出记录 List <EnterOutLogInfo> enterOutLogList = T_SM_EnterOutLog_bak.GetStatisticsLogsByDate(sdt); List <BespeakLogInfo> bespeakLogList = T_SM_SeatBespeak.GetBespeakList(null, null, sdt, 0, null); List <ViolationRecordsLogInfo> violationLogList = T_SM_ViolateDiscipline.GetViolationRecords(null, null, sdt.ToShortDateString(), sdt.Date.AddDays(1).AddSeconds(-1).ToString(), LogStatus.None, LogStatus.None); //List<BlackListInfo> blacklistList = T_SM_Blacklist.GetAllBlackListInfo(null, LogStatus.None, sdt.ToShortDateString(), sdt.Date.AddDays(1).AddSeconds(-1).ToString()); if (enterOutLogList.Count <= 0 && bespeakLogList.Count <= 0 && violationLogList.Count <= 0 && sdt >= ServiceDateTime.Now.Date.AddDays(-1)) { break; } Dictionary <string, SeatManage.ClassModel.RoomUsageStatistics> roomDir = rooms.ToDictionary(room => room.No, room => new SeatManage.ClassModel.RoomUsageStatistics()); //基本数据及排序处理 foreach (ReadingRoomInfo room in rooms) { roomDir[room.No].StatisticsDate = sdt; roomDir[room.No].ReadingRoomNo = room.No; roomDir[room.No].SeatAllCount = room.SeatList.Seats.Count; roomDir[room.No].OpenTime = DateTime.Parse(room.Setting.GetRoomOpenTimeByDate(sdt).BeginTime); roomDir[room.No].CloseTime = DateTime.Parse(room.Setting.GetRoomOpenTimeByDate(sdt).EndTime); roomDir[room.No].RoomUsageTime = (int)(roomDir[room.No].CloseTime - roomDir[room.No].OpenTime).TotalMinutes; roomDir[room.No].SeatUsageCount = enterOutLogList.FindAll(u => u.ReadingRoomNo == room.No).GroupBy(u => u.SeatNo).Count(); roomDir[room.No].UsedReaderCount = enterOutLogList.FindAll(u => u.ReadingRoomNo == room.No).GroupBy(u => u.CardNo).Count(); roomDir[room.No].CanBesapeakSeat = room.Setting.SeatBespeak.BespeakArea.BespeakType == BespeakAreaType.Percentage ? (int)room.Setting.SeatBespeak.BespeakArea.Scale * room.SeatList.Seats.Count : room.SeatList.Seats.Count(u => u.Value.CanBeBespeak); roomDir[room.No].BespeakedSeat = bespeakLogList.FindAll(u => u.ReadingRoomNo == room.No).GroupBy(u => u.SeatNo).Count(); } foreach (ViolationRecordsLogInfo vrl in violationLogList) { roomDir[vrl.ReadingRoomID].ViolationRecordCount++; switch (vrl.EnterFlag) { case ViolationRecordsType.BookingTimeOut: roomDir[vrl.ReadingRoomID].VRBookingTimeOut++; break; case ViolationRecordsType.LeaveByAdmin: roomDir[vrl.ReadingRoomID].VRLeaveByAdmin++; break; case ViolationRecordsType.LeaveNotReadCard: roomDir[vrl.ReadingRoomID].VRLeaveNotReadCard++; break; case ViolationRecordsType.SeatOutTime: roomDir[vrl.ReadingRoomID].VRSeatOutTime++; break; case ViolationRecordsType.ShortLeaveByAdminOutTime: roomDir[vrl.ReadingRoomID].VRShortLeaveByAdminOutTime++; break; case ViolationRecordsType.ShortLeaveByReaderOutTime: roomDir[vrl.ReadingRoomID].VRShortLeaveByReaderOutTime++; break; case ViolationRecordsType.ShortLeaveByServiceOutTime: roomDir[vrl.ReadingRoomID].VRShortLeaveByServiceOutTime++; break; case ViolationRecordsType.ShortLeaveOutTime: roomDir[vrl.ReadingRoomID].VRShortLeaveOutTime++; break; } } //预约记录处理 foreach (BespeakLogInfo bli in bespeakLogList) { roomDir[bli.ReadingRoomNo].AllBespeakCount++; if (bli.BsepeakTime.Date == bli.SubmitTime.Date) { switch (bli.BsepeakState) { case BookingStatus.Cencaled: switch (bli.CancelPerson) { case Operation.Admin: case Operation.Reader: roomDir[bli.ReadingRoomNo].NowDayBespeakCancel++; break; case Operation.Service: roomDir[bli.ReadingRoomNo].NowDayBespeakOverTime++; break; } break; case BookingStatus.Confinmed: roomDir[bli.ReadingRoomNo].NowDayBespeakCheck++; break; } roomDir[bli.ReadingRoomNo].NowDayBespeakCount++; } else { switch (bli.BsepeakState) { case BookingStatus.Cencaled: switch (bli.CancelPerson) { case Operation.Admin: case Operation.Reader: roomDir[bli.ReadingRoomNo].BespeakCancel++; break; case Operation.Service: roomDir[bli.ReadingRoomNo].BespeakOverTime++; break; } break; case BookingStatus.Confinmed: roomDir[bli.ReadingRoomNo].BespeakCheck++; break; } roomDir[bli.ReadingRoomNo].BespeakCount++; } } foreach (EnterOutLogInfo eol in enterOutLogList) { //刷卡次数 if (!string.IsNullOrEmpty(eol.TerminalNum) && !(eol.EnterOutState == EnterOutLogType.ContinuedTime && eol.Flag == Operation.Service)) { roomDir[eol.ReadingRoomNo].RushCardOperatingCount++; } //记录类型 switch (eol.EnterOutState) { case EnterOutLogType.BookingConfirmation: roomDir[eol.ReadingRoomNo].CheckBespeakCount++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].CkeckBespeakInOtherClient++; } else { roomDir[eol.ReadingRoomNo].CheckBespeakInSeatClient++; } break; case EnterOutLogType.ComeBack: roomDir[eol.ReadingRoomNo].ComeBackCount++; switch (eol.Flag) { case Operation.Admin: roomDir[eol.ReadingRoomNo].ComeBackByAdmin++; break; case Operation.OtherReader: roomDir[eol.ReadingRoomNo].ComeBackByOtherReader++; break; case Operation.Reader: roomDir[eol.ReadingRoomNo].ComeBackByReader++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].ComeBackInOtherClient++; } else { roomDir[eol.ReadingRoomNo].ComeBackInSeatClient++; } break; } EnterOutLogInfo slEOL = enterOutLogList.FindLast(u => u.EnterOutState == EnterOutLogType.ShortLeave && u.EnterOutLogNo == eol.EnterOutLogNo && u.EnterOutTime < eol.EnterOutTime); if (slEOL != null) { roomDir[eol.ReadingRoomNo].ShortLeaveTime += (int)(slEOL.EnterOutTime - eol.EnterOutTime).TotalMinutes; } break; case EnterOutLogType.ContinuedTime: roomDir[eol.ReadingRoomNo].ContinueTimeCount++; switch (eol.Flag) { case Operation.Service: roomDir[eol.ReadingRoomNo].ContinueTimeByService++; break; case Operation.Reader: roomDir[eol.ReadingRoomNo].ContinueTimeByReader++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].ContinueTimeInOtherClient++; } else { roomDir[eol.ReadingRoomNo].ContinueTimeInSeatClient++; } break; } break; case EnterOutLogType.Leave: roomDir[eol.ReadingRoomNo].LeaveCount++; roomDir[eol.ReadingRoomNo].ReaderUsageCount++; switch (eol.Flag) { case Operation.Service: roomDir[eol.ReadingRoomNo].LeaveByService++; break; case Operation.Admin: roomDir[eol.ReadingRoomNo].LeaveByAdmin++; break; case Operation.Reader: roomDir[eol.ReadingRoomNo].LeaveByReader++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].LeaveInOtherClient++; } else { roomDir[eol.ReadingRoomNo].LeaveInSeatClient++; } break; } EnterOutLogInfo enterEOL = enterOutLogList.Find(u => (u.EnterOutState == EnterOutLogType.BookingConfirmation || u.EnterOutState == EnterOutLogType.ReselectSeat || u.EnterOutState == EnterOutLogType.SelectSeat || u.EnterOutState == EnterOutLogType.WaitingSuccess) && u.EnterOutLogNo == eol.EnterOutLogNo); if (enterEOL != null) { roomDir[eol.ReadingRoomNo].SeatUsageTime += (int)(eol.EnterOutTime - enterEOL.EnterOutTime).TotalMinutes; } break; case EnterOutLogType.ReselectSeat: roomDir[eol.ReadingRoomNo].ReselectSeatCount++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].ReselectSeatInOtherClient++; } else { roomDir[eol.ReadingRoomNo].ReselectSeatInSeatClient++; } break; case EnterOutLogType.SelectSeat: roomDir[eol.ReadingRoomNo].SelectSeatCount++; switch (eol.Flag) { case Operation.Admin: roomDir[eol.ReadingRoomNo].SelectSeatByAdmin++; break; case Operation.Reader: roomDir[eol.ReadingRoomNo].SelectSeatByReader++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].SelectSeatInOtherClient++; } else { roomDir[eol.ReadingRoomNo].SelectSeatInSeatClient++; } break; } break; case EnterOutLogType.ShortLeave: roomDir[eol.ReadingRoomNo].ShortLeaveCount++; switch (eol.Flag) { case Operation.OtherReader: roomDir[eol.ReadingRoomNo].ShortLeaveByOtherReader++; break; case Operation.Service: roomDir[eol.ReadingRoomNo].ShortLeaveByService++; break; case Operation.Admin: roomDir[eol.ReadingRoomNo].ShortLeaveByAdmin++; break; case Operation.Reader: roomDir[eol.ReadingRoomNo].ShortLeaveByReader++; if (string.IsNullOrEmpty(eol.TerminalNum)) { roomDir[eol.ReadingRoomNo].ShortLeaveInOtherClient++; } else { roomDir[eol.ReadingRoomNo].ShortLeaveInSeatClient++; } break; } break; case EnterOutLogType.WaitingSuccess: roomDir[eol.ReadingRoomNo].WaitSeatCount++; break; } } foreach (SeatManage.ClassModel.RoomUsageStatistics roomUS in roomDir.Values.Where(roomUS => !SeatUsageDataOperating.AddRoomUsageStatistics(roomUS))) { WriteLog.Write(string.Format("数据统计服务:添加阅览室:{0} {1} 数据统计出错", roomUS.ReadingRoomNo, roomUS.StatisticsDate)); throw new Exception(string.Format("数据统计服务:添加阅览室:{0} {1} 数据统计出错", roomUS.ReadingRoomNo, roomUS.StatisticsDate)); } sdt = sdt.AddDays(1); if (sdt >= ServiceDateTime.Now.Date) { break; } roomDir = null; } WriteLog.Write("数据统计服务:统计阅览室完成使用情况完成"); } catch (Exception ex) { WriteLog.Write(string.Format("数据统计服务:统计阅览室使用情况失败:{0}", 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:未知原因,预约确认失败。 } } }
/// <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); } }