/// <summary> /// 判断当前时间阅览室选座状态 /// </summary> /// <param name="set"></param> /// <param name="time"></param> /// <returns></returns> public static SelectSeatMode RoomSelectSeatMode(SeatChooseMethodSet set, DateTime date) { SelectSeatMode chooseMethod = set.DefaultChooseMethod; //判断是否启用高级设置 if (set.UsedAdvancedSet) { DayOfWeek day = date.DayOfWeek; try { SeatChooseMethodPlan plan = set.AdvancedSelectSeatMode[day]; DateTime strDate = date; //遍历当天的时间段,判断是是否有满足当前时间的设置项 foreach (SeatChooseMethodOption option in plan.PlanOption) { DateTime beginDatetime = DateTime.Parse(strDate.ToShortDateString() + " " + option.UsedTime.BeginTime); DateTime endDatetime = DateTime.Parse(strDate.ToShortDateString() + " " + option.UsedTime.EndTime); if (DateTimeOperate.DateAccord(beginDatetime, endDatetime, date))//判断当前时间是否满足项 { chooseMethod = option.ChooseMethod; break; } } } catch { chooseMethod = set.DefaultChooseMethod; } } return(chooseMethod); }
/// <summary> /// 判断当前时间是否可以预约座位 /// </summary> /// <param name="s"></param> /// <returns></returns> public static bool IsCanBespeakSeat(SeatBespeakSet bespeakSet, DateTime time) { if (bespeakSet.Used) { foreach (TimeSpace ts in bespeakSet.NoBespeakDates) { DateTime begintime = DateTime.Parse(time.Year + "-" + ts.BeginTime); DateTime endtime = DateTime.Parse(time.Year + "-" + ts.EndTime); //判断读者选择的时间是否在不允许预约的时间范围内 if (DateTimeOperate.DateAccord(begintime, endtime, time)) { return(false); } } //指定的时间减去提前预约的天数, DateTime begindate = time.AddDays(-bespeakSet.BespeakBeforeDays); if (DateTimeOperate.DateAccord(begindate, time, DateTime.Now)) { //当前时间在允许预约的时间之间,返回允许预约 DateTime canBespeakBegin = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + bespeakSet.CanBespeatTimeSpace.BeginTime); DateTime canBespeakEnd = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + bespeakSet.CanBespeatTimeSpace.EndTime); if (DateTimeOperate.DateAccord(canBespeakBegin, canBespeakEnd, DateTime.Now)) { return(true); } return(false); } return(false); } return(false); }
/// <summary> /// 计算座位保留时长 /// </summary> /// <param name="set">设置</param> /// <param name="time"></param> /// <returns></returns> public static double GetSeatHoldTime(SeatHoldTimeSet set, DateTime time) { if (set.UsedAdvancedSet) { foreach (SeatHoldTimeOption option in set.AdvancedSeatHoldTime) { if (option.Used) { //判断指定的时间是否在开始时间和结束时间中间 DateTime begintime = DateTime.Parse(time.ToShortDateString() + " " + option.UsedTime.BeginTime); DateTime endtime = DateTime.Parse(time.ToShortDateString() + " " + option.UsedTime.EndTime); if (DateTimeOperate.DateAccord(begintime, endtime, time)) { return(option.HoldTimeLength); } } } //遍历结束没有返回,则返回默认保留时长 return(set.DefaultHoldTimeLength); } else { //没有启用阅览室设置,则返回默认保留时长 return(set.DefaultHoldTimeLength); } }
/// <summary> /// 根据时间计算阅览室的状态 /// </summary> /// <param name="beginTime">开馆时间</param> /// <param name="endTime">闭馆时间</param> /// <param name="datetime">要判断开放状态的时间</param> /// <param name="openBeforeTimeLength">开馆预处理</param> /// <param name="closeBeforeTimeLength">闭馆预处理</param> /// <returns></returns> private static ReadingRoomStatus calcRoomState(string beginTime, string endTime, DateTime datetime, double openBeforeTimeLength, double closeBeforeTimeLength) { DateTime begindate = DateTime.Parse(datetime.ToShortDateString() + " " + beginTime); DateTime enddate = DateTime.Parse(datetime.ToShortDateString() + " " + endTime); if (DateTimeOperate.DateAccord(enddate.AddMinutes(-closeBeforeTimeLength), enddate, datetime))//判断是否符合闭馆预处理 { return(ReadingRoomStatus.BeforeClose); } if (DateTimeOperate.DateAccord(begindate, enddate, datetime)) { return(ReadingRoomStatus.Open); } if (DateTimeOperate.DateAccord(begindate.AddMinutes(-openBeforeTimeLength), begindate, datetime))//判断是否符合开馆预处理 { return(ReadingRoomStatus.BeforeOpen); } return(ReadingRoomStatus.Close);//条件都不符合,则为闭馆。 }
void BindUIElement(string seatNo, string seatShortNo) { DateTime nowDateTime = DateTime.Now; if (ReadingRoomList[roomNo].Setting.SeatHoldTime.UsedAdvancedSet) { for (int i = 0; i < ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime.Count; i++) { if (ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime[i].Used) { DateTime startDate = DateTime.Parse(nowDateTime.ToShortDateString() + " " + ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime[i].UsedTime.BeginTime); DateTime endDate = DateTime.Parse(nowDateTime.ToShortDateString() + " " + ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime[i].UsedTime.EndTime); if (DateTimeOperate.DateAccord(startDate, endDate, nowDateTime)) { lblWaitTime.InnerText = ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime[i].HoldTimeLength.ToString(); lblGetSeatTime.InnerText = nowDateTime.AddMinutes(ReadingRoomList[roomNo].Setting.SeatHoldTime.AdvancedSeatHoldTime[i].HoldTimeLength).ToShortTimeString(); break; } } } } else { lblWaitTime.InnerText = ReadingRoomList[roomNo].Setting.SeatHoldTime.DefaultHoldTimeLength.ToString(); lblGetSeatTime.InnerText = nowDateTime.AddMinutes(ReadingRoomList[roomNo].Setting.SeatHoldTime.DefaultHoldTimeLength).ToShortTimeString(); } lblSeatNo.InnerText = seatShortNo; lblReadingRoomName.InnerText = ReadingRoomList[roomNo].Name; lblSeatNo_Booked.InnerText = seatShortNo; //判断自己是否已经预约座位 //this.LoginUserInfo = handler1.GetReaderInfo(this.UserSchoolInfo,this.LoginUserInfo.CardNo); //List<SeatManage.ClassModel.BespeakLogInfo> readerBespeaklist =this.LoginUserInfo.BespeakLog; //if (readerBespeaklist.Count > 0) //{ // page1.Style.Add("display", "none"); // page2.Style.Add("display", "none"); // page3.Style.Add("display", "block"); // MessageTip.InnerText = "您选择的日期已经预约了座位,请先取消原来的预约。"; // return; //} }
private void Tip_ShortLeave_Load(object sender, EventArgs e) { string roomNum = clientobject.EnterOutLogData.EnterOutlog.ReadingRoomNo; ReadingRoomInfo room = clientobject.EnterOutLogData.Student.AtReadingRoom; if (room.Setting.SeatHoldTime.UsedAdvancedSet) { for (int i = 0; i < room.Setting.SeatHoldTime.AdvancedSeatHoldTime.Count; i++) { if (room.Setting.SeatHoldTime.AdvancedSeatHoldTime[i].Used) { DateTime startDate = DateTime.Parse(_NowDate.ToShortDateString() + " " + room.Setting.SeatHoldTime.AdvancedSeatHoldTime[i].UsedTime.BeginTime); DateTime endDate = DateTime.Parse(_NowDate.ToShortDateString() + " " + room.Setting.SeatHoldTime.AdvancedSeatHoldTime[i].UsedTime.EndTime); if (DateTimeOperate.DateAccord(startDate, endDate, _NowDate)) { lblMinutes.Text = room.Setting.SeatHoldTime.AdvancedSeatHoldTime[i].HoldTimeLength.ToString(); return; } } } } lblMinutes.Text = room.Setting.SeatHoldTime.DefaultHoldTimeLength.ToString(); }
/// <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> /// <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> 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:未知原因,预约确认失败。 } } }
public string QRcodeOperation(string codeStr, string studentNo) { try { AJM_HandleResult result = new AJM_HandleResult(); string[] scanResultArray = codeStr.Split('?'); ClientCheckCodeParamModel scancode = null; if (scanResultArray.Length >= 2) { string[] strParam = scanResultArray[1].Split('='); if (strParam.Length >= 2) { scancode = ClientCheckCodeParamModel.Prase(strParam[1]);//兼容url的二维码。 } } else { scancode = ClientCheckCodeParamModel.Prase(codeStr); } DateTime ndt = DateTime.Now; if (scancode == null) { result.Result = false; result.Msg = "对不起,二维码错误!"; return(JSONSerializer.Serialize(result)); } if (scancode.CodeTime.AddMinutes(1) <= ndt) { result.Result = false; result.Msg = "对不起,二维码超时!"; return(JSONSerializer.Serialize(result)); } if (string.IsNullOrEmpty(studentNo)) { result.Result = false; result.Msg = "读者学号为空。"; return(JSONSerializer.Serialize(result)); } ReaderInfo reader = SeatManageDateService.GetReader(studentNo, true); if (reader == null) { result.Result = false; result.Msg = "获取读者信息失败。"; return(JSONSerializer.Serialize(result)); } if (reader.EnterOutLog == null && reader.BespeakLog.Count < 1) { result.Result = false; result.Msg = "对不起,您还没有座位,请先选择或预约一个座位。"; } if (reader.EnterOutLog != null) { switch (reader.EnterOutLog.EnterOutState) { case EnterOutLogType.BookingConfirmation: //预约入座 case EnterOutLogType.SelectSeat: //选座 case EnterOutLogType.ContinuedTime: //续时 case EnterOutLogType.ComeBack: //暂离回来 case EnterOutLogType.ReselectSeat: //重新选座 case EnterOutLogType.WaitingSuccess: //等待入座 result.Result = false; result.Msg = "您当前已有座位。"; break; case EnterOutLogType.ShortLeave: reader.EnterOutLog.EnterOutState = EnterOutLogType.ComeBack; reader.EnterOutLog.Remark = string.Format("您在选座终端{0}扫描二维码恢复在座,本次暂离时长{1}分钟。", scancode.ClientNo, ((int)(ndt - reader.EnterOutLog.EnterOutTime).TotalMinutes)); reader.EnterOutLog.Flag = Operation.Reader; reader.EnterOutLog.EnterOutTime = ndt; result.Result = true; int newId = -1; if (SeatManageDateService.AddEnterOutLogInfo(reader.EnterOutLog, ref newId) != HandleResult.Successed) { result.Result = false; result.Msg = "对不起,暂离回来失败!"; return(JSONSerializer.Serialize(result)); } result.Result = true; result.Msg = reader.EnterOutLog.Remark; List <WaitSeatLogInfo> waitSeatLogs = SeatManageDateService.GetWaitLogList("", reader.EnterOutLog.EnterOutLogID, null, null, null); if (waitSeatLogs.Count > 0) { WaitSeatLogInfo waitSeatLog = waitSeatLogs[0]; waitSeatLog.NowState = LogStatus.Fail; waitSeatLog.OperateType = Operation.OtherReader; waitSeatLog.WaitingState = EnterOutLogType.WaitingCancel; SeatManageDateService.UpdateWaitLog(waitSeatLog); } break; case EnterOutLogType.Leave: result.Result = false; result.Msg = "对不起,您还没有座位,请先选择或预约一个座位。"; break; default: result.Result = false; result.Msg = "对不起,您还没有座位,请先选择或预约一个座位。"; break; } return(JSONSerializer.Serialize(result)); } ReadingRoomSetting set = reader.AtReadingRoom.Setting; DateTime dtBegin = reader.BespeakLog[0].BsepeakTime.AddMinutes(-double.Parse(set.SeatBespeak.ConfirmTime.BeginTime)); DateTime dtEnd = reader.BespeakLog[0].BsepeakTime.AddMinutes(double.Parse(set.SeatBespeak.ConfirmTime.EndTime)); if (!DateTimeOperate.DateAccord(dtBegin, dtEnd, ndt) && (!set.SeatBespeak.NowDayBespeak || reader.BespeakLog[0].SubmitTime != reader.BespeakLog[0].BsepeakTime)) { result.Result = false; result.Msg = "对不起,您预约的座位没有到达签到时间"; return(JSONSerializer.Serialize(result)); } EnterOutLogInfo seatUsedInfo = SeatManageDateService.GetEnterOutLogInfoBySeatNum(reader.BespeakLog[0].SeatNo); if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave) { //条件满足,说明座位正在使用。 seatUsedInfo.EnterOutState = EnterOutLogType.Leave; seatUsedInfo.EnterOutType = LogStatus.Valid; seatUsedInfo.Remark = "您正在使用的座位已被原预约的读者"; seatUsedInfo.Flag = Operation.OtherReader; int newId = -1; if (SeatManageDateService.AddEnterOutLogInfo(seatUsedInfo, ref newId) != HandleResult.Successed) { result.Result = false; result.Msg = "对不起,此阅览室尚未开放。"; return(JSONSerializer.Serialize(result)); } List <WaitSeatLogInfo> waitInfoList = SeatManageDateService.GetWaitLogList(null, seatUsedInfo.EnterOutLogID, null, null, null); if (waitInfoList.Count > 0) { WaitSeatLogInfo waitSeatLogModel = waitInfoList[0]; waitSeatLogModel.OperateType = Operation.Reader; waitSeatLogModel.WaitingState = EnterOutLogType.WaitingCancel; waitSeatLogModel.NowState = LogStatus.Valid; SeatManageDateService.UpdateWaitLog(waitSeatLogModel); } } EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造 newEnterOutLog.CardNo = reader.BespeakLog[0].CardNo; newEnterOutLog.EnterOutLogNo = SeatComm.RndNum(); newEnterOutLog.EnterOutState = EnterOutLogType.BookingConfirmation; newEnterOutLog.EnterOutType = LogStatus.Valid; newEnterOutLog.Flag = Operation.Reader; newEnterOutLog.ReadingRoomNo = reader.BespeakLog[0].ReadingRoomNo; newEnterOutLog.ReadingRoomName = reader.BespeakLog[0].ReadingRoomName; newEnterOutLog.ShortSeatNo = reader.BespeakLog[0].ShortSeatNum; newEnterOutLog.SeatNo = reader.BespeakLog[0].SeatNo; newEnterOutLog.Remark = string.Format("您在选座终端{0}扫描二维码,签到入座预约的{1} {2}号座位", scancode.ClientNo, reader.BespeakLog[0].ReadingRoomName, reader.BespeakLog[0].ShortSeatNum); int logid = -1; if (SeatManageDateService.AddEnterOutLogInfo(newEnterOutLog, ref logid) == HandleResult.Successed) { reader.BespeakLog[0].BsepeakState = BookingStatus.Confinmed; reader.BespeakLog[0].CancelPerson = Operation.Reader; reader.BespeakLog[0].CancelTime = ndt; reader.BespeakLog[0].Remark = newEnterOutLog.Remark; SeatManageDateService.UpdateBespeakLogInfo(reader.BespeakLog[0]); } result.Result = true; result.Msg = newEnterOutLog.Remark; return(JSONSerializer.Serialize(result)); } catch (Exception ex) { WriteLog.Write("读者签到/回来遇到异常:" + ex.Message); AJM_HandleResult result = new AJM_HandleResult(); result.Result = false; result.Msg = "执行遇到异常"; return(JSONSerializer.Serialize(result)); } }
/// <summary> /// 预约等待 /// </summary> 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); } }