protected void Page_Load(object sender, EventArgs e)
        {
            if (LoginUserInfo == null)
            {
                Response.Redirect(LoginUrl());
            }
            seatNo      = Request.QueryString["seatNo"];
            seatShortNo = Request.QueryString["seatShortNo"];
            roomNo      = Request.QueryString["roomNo"];
            timeSpan    = Request.QueryString["timeSpan"];
            if (!IsPostBack)
            {
                BindUIElement(seatNo, seatShortNo, DateTime.Parse(date), timeSpan);
            }
            string cmd = Request.Form["subCmd"];

            switch (cmd)
            {
            case "select":
                BindUIElement(seatNo, seatShortNo, DateTime.Parse(date), timeSpan);
                break;

            case "query":
                BespeakLogInfo bespeakModel = new BespeakLogInfo();
                bespeakModel.BsepeakState = BookingStatus.Waiting;
                DateTime bespeatDate = DateTime.Parse(string.Format("{0} {1}", DateTime.Parse(date).ToShortDateString(), lblBookTime.InnerText));
                bespeakModel.BsepeakTime   = bespeatDate;
                bespeakModel.CardNo        = LoginUserInfo.CardNo;
                bespeakModel.ReadingRoomNo = roomNo;
                bespeakModel.Remark        = "读者通过手机预约网站预约座位";
                bespeakModel.SeatNo        = seatNo;
                bespeakModel.SubmitTime    = bookMode.SelectedIndex == 0 ? bespeakModel.BsepeakTime : bespeakModel.SubmitTime = DateTime.Now;
                try
                {
                    string resultValue = handler.SubmitNowDayBespeakInfo(bespeakModel);    //bookSeatMessageBll.AddBespeakLogInfo(bespeakModel, Session["SchoolConnectionString"].ToString());
                    if (!string.IsNullOrEmpty(resultValue))
                    {
                        page1.Style.Add("display", "none");
                        page2.Style.Add("display", "none");
                        page3.Style.Add("display", "block");
                        MessageTip.InnerText = resultValue;
                    }
                    else
                    {
                        page1.Style.Add("display", "none");
                        page2.Style.Add("display", "none");
                        page3.Style.Add("display", "block");
                        MessageTip.InnerText = "未知错误";
                    }
                }
                catch (Exception ex)
                {
                    page1.Style.Add("display", "none");
                    page2.Style.Add("display", "none");
                    page3.Style.Add("display", "block");
                    MessageTip.InnerText = ex.Message;
                }
                break;
            }
        }
        public static HandleResult AddBespeakLogInfo(BespeakLogInfo model)
        {
            IWCFService.ISeatManageService seatService = WcfAccessProxy.ServiceProxy.CreateChannelSeatManageService();
            bool error = false;

            try
            {
                return(seatService.AddBespeakLogInfo(model));
            }
            catch (Exception ex)
            {
                error = true;
                SeatManageComm.WriteLog.Write("添加预约记录失败:" + ex.Message);
                throw ex;
            }
            finally
            {
                ICommunicationObject ICommObjectService = seatService as ICommunicationObject;
                try
                {
                    if (ICommObjectService.State == CommunicationState.Faulted)
                    {
                        ICommObjectService.Abort();
                    }
                    else
                    {
                        ICommObjectService.Close();
                    }
                }
                catch
                {
                    ICommObjectService.Abort();
                }
            }
        }
        /// <summary>
        /// 获取单条有效的预约记录
        /// </summary>
        /// <param name="cardNo"></param>
        /// <returns></returns>
        public BespeakLogInfo GetSingleBespeakLogForWait(string cardNo)
        {
            BespeakLogInfo bespeatlogs = null;
            StringBuilder  strWhere    = new StringBuilder();

            if (string.IsNullOrEmpty(cardNo))
            {
                return(bespeatlogs);
            }
            strWhere.Append(" cardNo=@cardNo ");
            strWhere.Append(" and [BespeakState]=@bookState order by BespeakTime asc");
            SqlParameter[] parameters =
            {
                new SqlParameter("@cardNo",    SqlDbType.NVarChar),
                new SqlParameter("@bookState", SqlDbType.Int),
            };
            parameters[0].Value = cardNo;
            parameters[1].Value = (int)BookingStatus.Waiting;
            try
            {
                DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), parameters);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    bespeatlogs = DataRowToBespeakLogInfo(ds.Tables[0].Rows[0]);
                }
            }
            catch
            {
            }

            return(bespeatlogs);
        }
        /// <summary>
        /// 获取所有的预约记录信息
        /// </summary>
        /// <param name="cardNo">学号</param>
        /// <param name="roomNum">阅览室号,为空则查询所有</param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetBespeakLogInfos(string cardNo, string roomNum)
        {
            List <BespeakLogInfo> bespeaklog = new List <BespeakLogInfo>();

            if (string.IsNullOrEmpty(cardNo))
            {
                return(bespeaklog);
            }
            string strWhere = "  [ReadingRoomNo]=@readingRoomNo  ";

            SqlParameter[] parameters =
            {
                new SqlParameter("@readingRoomNo", roomNum)
            };

            List <BespeakLogInfo> bookLogInfoList = new List <BespeakLogInfo>();
            DataSet ds = seatBespeakDal.GetList(strWhere, parameters);

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                if (log != null)
                {
                    bookLogInfoList.Add(log);
                }
            }
            return(bookLogInfoList);
        }
Example #5
0
 /// <summary>
 /// 根据预约记录添加违规记录
 /// </summary>
 /// <param name="blilog">预约记录</param>
 /// <param name="type">违规类型</param>
 /// <param name="note">提示信息</param>
 /// <param name="blacklistset"></param>
 private void AddViolationRecordByBookLog(BespeakLogInfo blilog, 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 = blilog.CardNo;
         vrli.SeatID = blilog.SeatNo;
         if (vrli.SeatID.Length > roomSetting.SeatNumAmount)
         {
             vrli.SeatID = vrli.SeatID.Substring(vrli.SeatID.Length - roomSetting.SeatNumAmount);
         }
         vrli.ReadingRoomID = blilog.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>
        /// <param name="seatNo"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetBespeakLogInfoBySeatNoNotCheck(string seatNo, DateTime date)
        {
            List <BespeakLogInfo> list     = new List <BespeakLogInfo>();
            StringBuilder         strWhere = new StringBuilder();

            strWhere.Append(" SeatNo=@SeatNo");
            strWhere.Append(" and BespeakTime>='" + date.Date + "' and BespeakTime<'" + date.AddDays(1).Date + "' and BespeakState=@BespeakState");
            SqlParameter[] parameters =
            {
                new SqlParameter("@SeatNo",       SqlDbType.NVarChar),
                new SqlParameter("@BespeakState", SqlDbType.Int),
            };
            parameters[0].Value = seatNo;
            parameters[1].Value = (int)BookingStatus.Waiting;
            try
            {
                DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), parameters);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    BespeakLogInfo log = DataRowToBespeakLogInfoNotCheck(ds.Tables[0].Rows[i]);
                    if (log != null)
                    {
                        list.Add(log);
                    }
                }
            }
            catch
            {
                throw;
            }

            return(list);
        }
        /// <summary>
        /// MD5 32位加密 小写
        /// </summary>
        /// <param name="pwd">明文</param>
        /// <returns>pwdMD5密文</returns>
        private static string GetBespeakMD5Key(BespeakLogInfo bespeakInfo)
        {
            List <string> keylist = new List <string>();

            keylist.Add(bespeakInfo.BsepeakTime.ToString());
            keylist.Add(bespeakInfo.SubmitTime.ToString());
            keylist.Add(bespeakInfo.SeatNo);
            keylist.Add(bespeakInfo.CardNo);
            keylist.Add("Bespeak");
            return(SeatManage.SeatManageComm.MD5Algorithm.GetMD5Str32WithListKey(keylist));
        }
        /// <summary>
        /// 添加预约记录
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public HandleResult AddBespeakLogInfo(BespeakLogInfo model)
        {
            try
            {
                model.FlagKey = GetBespeakMD5Key(model);
                List <BespeakLogInfo> list = GetBespeakLogInfoBySeatNoNotCheck(model.SeatNo, model.BsepeakTime);
                if (list.Count > 0)
                {
                    foreach (BespeakLogInfo bespeaklog in list)
                    {
                        if (GetBespeakMD5Key(bespeaklog) != bespeaklog.FlagKey)
                        {
                            bespeaklog.BsepeakState = BookingStatus.Cencaled;
                            bespeaklog.CancelPerson = Operation.Service;
                            bespeaklog.Remark       = "预约记录校验失败,系统取消此次预约";
                            bespeaklog.FlagKey      = GetBespeakMD5Key(bespeaklog);
                            UpdateBespeakLogInfo(bespeaklog);
                        }
                    }
                }
                int resultValue = seatBespeakDal.Add(model);
                if (resultValue == 0)
                {
                    List <ReadingRoomInfo> rri = GetReadingRoomInfo(new List <string>()
                    {
                        model.ReadingRoomNo
                    });
                    if (rri == null || rri.Count == 0)
                    {
                        return(HandleResult.Successed);
                    }

                    PushMsgInfo msg = new PushMsgInfo();
                    msg.Title      = "您好,您已预约成功";
                    msg.MsgType    = MsgPushType.UserOperation;
                    msg.StudentNum = model.CardNo;
                    msg.Message    = model.Remark;
                    msg.RoomName   = rri[0].Name;
                    msg.SeatNum    = SeatManage.SeatManageComm.SeatComm.SeatNoToShortSeatNo(rri[0].Setting.SeatNumAmount, model.SeatNo);
                    SendMsg(msg);
                    return(HandleResult.Successed);
                }
                else
                {
                    return(HandleResult.Failed);
                }
            }
            catch
            {
                throw;
            }
        }
        /// <summary>
        /// 分页查询预约记录,用于android客户端上拉刷新
        /// </summary>
        /// <param name="cardNo"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetBespeakLogsByPage(string cardNo, int pageIndex, int pageSize)
        {
            List <BespeakLogInfo> bespeatlogs = new List <BespeakLogInfo>();
            DataSet ds = seatBespeakDal.GetList(cardNo, pageSize, pageIndex);

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                if (log != null)
                {
                    bespeatlogs.Add(log);
                }
            }
            return(bespeatlogs);
        }
Example #10
0
 public string SubmitBespeakInfo(BespeakLogInfo bespeakInfo)
 {
     try
     {
         lock (this.client)
         {
             client.Connect();
             request            = new SocketRequest();
             request.MethodName = "SubmitBespeakInfo";
             request.Parameters.Add(bespeakInfo);
             request.SubSystem = TcpSeatManageSubSystem.WeiXinSeatBespeak;
             request.Target    = schoolNum;
             request.MsgType   = TcpMsgDataType.Relay;
             if (request != null)
             {
                 client.Send(SeatManage.SeatManageComm.ByteSerializer.ObjectToByte(request));
                 Console.WriteLine("请求客户端{0}执行{1}方法已发送,等待返回结果…", request.Target, request.MethodName);
             }
             autoConnectEvent.WaitOne(20000);
             if (response == null)
             {
                 throw new Exception("连接超时。");
             }
             else if (!isError && response.MethodName.Equals("SubmitBespeakInfo") && string.IsNullOrEmpty(response.ErrorMsg))
             {
                 return(response.Result as string);
             }
             else if (!string.IsNullOrEmpty(response.ErrorMsg))
             {
                 throw new Exception(response.ErrorMsg);
             }
             else
             {
                 return(null);
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
     finally
     {
         client.Disconnect();
         request  = null;
         response = null;
     }
 }
        /// <summary>
        /// 更改预约记录
        /// </summary>
        /// <param name="model">预约记录</param>
        /// <returns></returns>
        public static int UpdateBespeakList(BespeakLogInfo model)
        {
            IWCFService.ISeatManageService seatService = new WcfServiceForSeatManage.SeatManageDateService();
            bool error = false;

            try
            {
                return(seatService.UpdateBespeakLogInfo(model));
            }
            catch (Exception ex)
            {
                error = true;
                SeatManageComm.WriteLog.Write("更新预约记录失败:" + ex.Message);
                return(-1);
            }
        }
        public static HandleResult AddBespeakLogInfo(BespeakLogInfo model)
        {
            IWCFService.ISeatManageService seatService = new WcfServiceForSeatManage.SeatManageDateService();
            bool error = false;

            try
            {
                return(seatService.AddBespeakLogInfo(model));
            }
            catch (Exception ex)
            {
                error = true;
                SeatManageComm.WriteLog.Write("添加预约记录失败:" + ex.Message);
                throw ex;
            }
        }
Example #13
0
        /// <summary>
        /// 更新一条数据
        /// </summary>
        public int Update(BespeakLogInfo model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update T_SM_SeatBespeak set ");
            strSql.Append("CardNo=@CardNo,");
            strSql.Append("ReadingRoomNo=@ReadingRoomNo,");
            strSql.Append("SeatNo=@SeatNo,");
            strSql.Append("BespeakTime=@BespeakTime,");
            strSql.Append("BespeakState=@BespeakState,");
            strSql.Append("SubmitTime=@SubmitTime,");
            strSql.Append("CancelTime=@CancelTime,");
            strSql.Append("BespeakCancelPerson=@BespeakCancelPerson,");
            strSql.Append("Remark=@Remark,");
            strSql.Append("BespeakFlag=@BespeakFlag");
            strSql.Append(" where BespeakID=@BespeakID ");
            SqlParameter[] parameters =
            {
                new SqlParameter("@CardNo",              SqlDbType.NVarChar,   50),
                new SqlParameter("@ReadingRoomNo",       SqlDbType.NVarChar,   50),
                new SqlParameter("@SeatNo",              SqlDbType.NVarChar,  100),
                new SqlParameter("@BespeakTime",         SqlDbType.DateTime),
                new SqlParameter("@BespeakState",        SqlDbType.Int,         4),
                new SqlParameter("@SubmitTime",          SqlDbType.DateTime),
                new SqlParameter("@CancelTime",          SqlDbType.DateTime),
                new SqlParameter("@BespeakCancelPerson", SqlDbType.Int,         4),
                new SqlParameter("@Remark",              SqlDbType.Text),
                new SqlParameter("@BespeakFlag",         SqlDbType.NVarChar),
                new SqlParameter("@BespeakID",           SqlDbType.Int, 4)
            };
            parameters[0].Value  = model.CardNo;
            parameters[1].Value  = model.ReadingRoomNo;
            parameters[2].Value  = model.SeatNo;
            parameters[3].Value  = model.BsepeakTime;
            parameters[4].Value  = (int)model.BsepeakState;
            parameters[5].Value  = model.SubmitTime;
            parameters[6].Value  = model.CancelTime;
            parameters[7].Value  = (int)model.CancelPerson;
            parameters[8].Value  = model.Remark;
            parameters[9].Value  = model.FlagKey;
            parameters[10].Value = model.BsepeaklogID;

            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);

            return(rows);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (LoginUserInfo == null || UserSchoolInfo == null)
            {
                Response.Redirect(LoginUrl());
            }
            seatNo = Request.QueryString["seatNo"];
            date   = Request.QueryString["bookDate"];
            roomNo = Request.QueryString["roomNo"];
            if (!IsPostBack)
            {
                BindUIElement(seatNo, roomNo, date);
            }
            string cmd = Request.Form["subCmd"];

            switch (cmd)
            {
            case "select":
                BindUIElement(seatNo, seatShortNo, date);
                break;

            case "query":
                BespeakLogInfo bespeakModel = new BespeakLogInfo();

                DateTime bespeakTime = DateTime.Parse(string.Format("{0} {1}", DateTime.Parse(date).ToShortDateString(), lblBookTime.InnerText));
                bool     isNowDay    = bespeakTime.Date == DateTime.Now.Date;
                try
                {
                    string resultValue = weiXinService.SubmitBesapeskSeat(seatNo, roomNo, LoginUserInfo.StudentNo, bespeakTime.ToString("yyyy-MM-dd HH:mm:ss"), isNowDay, UserSchoolInfo.SchoolNo);
                    page1.Style.Add("display", "none");
                    page2.Style.Add("display", "none");
                    page3.Style.Add("display", "block");
                    MessageTip.InnerText = resultValue;
                }
                catch (Exception ex)
                {
                    page1.Style.Add("display", "none");
                    page2.Style.Add("display", "none");
                    page3.Style.Add("display", "block");
                    MessageTip.InnerText = ex.Message;
                }
                break;
            }
        }
Example #15
0
 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>
        /// 根据Id获取进出记录
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public BespeakLogInfo GetBespeaklogById(int id)
        {
            string strWhere = "  [BespeakID]=@BespeakID  ";

            SqlParameter[] parameters =
            {
                new SqlParameter("@BespeakID", id)
            };

            DataSet ds = seatBespeakDal.GetList(strWhere, parameters);

            if (ds.Tables[0].Rows.Count > 0)
            {
                BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[0]);
                return(log);
            }
            else
            {
                return(null);
            }
        }
        public int UpdateBespeakLogInfo(BespeakLogInfo bespeakLog)
        {
            try
            {
                bespeakLog.FlagKey = GetBespeakMD5Key(bespeakLog);
                int i = seatBespeakDal.Update(bespeakLog);
                if (i > 0)
                {
                    if (bespeakLog.BsepeakState == BookingStatus.Cencaled)
                    {
                        PushMsgInfo msg = new PushMsgInfo();
                        msg.Title = "您好,您的预约已取消";
                        switch (bespeakLog.CancelPerson)
                        {
                        case Operation.Admin:
                            msg.Title = string.Format(msg.Title, "您好,您的预约已被管理员取消");
                            break;

                        case Operation.Service:
                            msg.Title = string.Format(msg.Title, "您好,您的预约已超时");
                            break;
                        }
                        msg.MsgType    = MsgPushType.UserOperation;
                        msg.StudentNum = bespeakLog.CardNo;
                        msg.Message    = bespeakLog.Remark;
                        msg.RoomName   = bespeakLog.ReadingRoomName;
                        msg.SeatNum    = bespeakLog.ShortSeatNum;
                        SendMsg(msg);
                    }
                }
                return(i);
            }
            catch
            {
                throw;
            }
        }
        /// <summary>
        /// 获取预约记录信息
        /// </summary>
        /// <param name="cardNo"></param>
        /// <param name="shortDate"></param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetBespeakLogInfo(string cardNo, DateTime shortDate)
        {
            List <BespeakLogInfo> bespeatlogs = new List <BespeakLogInfo>();
            StringBuilder         strWhere    = new StringBuilder();

            if (string.IsNullOrEmpty(cardNo))
            {
                return(bespeatlogs);
            }
            strWhere.Append(" cardNo=@cardNo ");
            strWhere.Append(" and BespeakTime>='" + shortDate.Date + "' and BespeakTime<'" + shortDate.AddDays(1).Date + "' ");
            strWhere.Append(" and [BespeakState]=@bookState");
            SqlParameter[] parameters =
            {
                new SqlParameter("@cardNo",    SqlDbType.NVarChar),
                new SqlParameter("@bookState", SqlDbType.Int),
            };
            parameters[0].Value = cardNo;
            parameters[1].Value = (int)BookingStatus.Waiting;
            try
            {
                DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), parameters);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                    if (log != null)
                    {
                        bespeatlogs.Add(log);
                    }
                }
            }
            catch
            {
            }

            return(bespeatlogs);
        }
Example #19
0
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public int Add(BespeakLogInfo model)
        {
            SqlParameter[] parameters =
            {
                new SqlParameter("@ExcResult",     SqlDbType.Int,       4),
                new SqlParameter("@CardNo",        SqlDbType.NVarChar),
                new SqlParameter("@ReadingRoomNo", SqlDbType.NVarChar),
                new SqlParameter("@SeatNo",        SqlDbType.NVarChar),
                new SqlParameter("@BespeakTime",   SqlDbType.DateTime),
                new SqlParameter("@BespeakState",  SqlDbType.Int),
                new SqlParameter("@Remark",        SqlDbType.Text),
                new SqlParameter("@SubmitTime",    SqlDbType.DateTime),
                new SqlParameter("@BespeakFlag",   SqlDbType.NVarChar)
            };


            parameters[0].Direction = ParameterDirection.Output;
            parameters[1].Value     = model.CardNo;
            parameters[2].Value     = model.ReadingRoomNo;
            parameters[3].Value     = model.SeatNo;
            parameters[4].Value     = model.BsepeakTime;
            parameters[5].Value     = (int)model.BsepeakState;
            parameters[6].Value     = model.Remark;
            parameters[7].Value     = model.SubmitTime;
            parameters[8].Value     = model.FlagKey;
            try
            {
                DbHelperSQL.Execute_Proc("Proc_AddNewBookLog", parameters);
                int result = (int)parameters[0].Value;
                return(result);
            }
            catch
            {
                throw;
            }
        }
Example #20
0
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="bespeakInfo"></param>
        /// <returns></returns>
        public string SubmitNowDayBespeakInfo(BespeakLogInfo bespeakInfo)
        {
            string returnValue = "";
            List <BespeakLogInfo>  seatbespeak = seatManage.GetBespeakLogInfoBySeatNo(bespeakInfo.SeatNo, bespeakInfo.BsepeakTime);
            List <ReadingRoomInfo> rooms       = seatManage.GetReadingRooms(new List <string>()
            {
                bespeakInfo.ReadingRoomNo
            }, null, null);

            if (rooms.Count == 0)
            {
                throw new SeatBespeakException.BespeakSeatFailed("获取阅览室信息失败。");
            }
            List <BespeakLogInfo> bespeak = seatManage.GetBespeakLogs(bespeakInfo.CardNo, null, bespeakInfo.BsepeakTime, 0, new List <SeatManage.EnumType.BookingStatus> {
                SeatManage.EnumType.BookingStatus.Confinmed, SeatManage.EnumType.BookingStatus.Waiting
            });                                                                                                                                                                                                                                                    //.GetBespeakList(this.LoginId, null, date, 0, bespeakStatus);

            if (bespeak.Count >= rooms[0].Setting.SeatBespeak.BespeakSeatCount)
            {
                throw new SeatBespeakException.BespeakSeatFailed("对不起,您一天最多预约" + rooms[0].Setting.SeatBespeak.BespeakSeatCount + "个座位。");
            }
            //判断读者是否有座位
            if (!rooms[0].Setting.SeatBespeak.BespeatWithOnSeat)
            {
                SeatManage.ClassModel.EnterOutLogInfo eol = seatManage.GetEnterOutLogInfoByCardNo(bespeakInfo.CardNo);
                if (eol != null && eol.EnterOutState != SeatManage.EnumType.EnterOutLogType.Leave)
                {
                    throw new SeatBespeakException.BespeakSeatFailed("您已有座位,不能再预约座位");
                }
            }
            if (rooms[0].Setting.SeatBespeak.CanBookMultiSpan && rooms[0].Setting.SeatBespeak.SpecifiedTime)
            {
                foreach (BespeakLogInfo b in seatbespeak)
                {
                    if (b.BsepeakTime == bespeakInfo.BsepeakTime)
                    {
                        throw new SeatBespeakException.BespeakSeatFailed("对不起,此时间段已被预约。");
                    }
                }
                foreach (BespeakLogInfo b in bespeak)
                {
                    if (b.BsepeakTime == bespeakInfo.BsepeakTime && b.BsepeakState == BookingStatus.Waiting)
                    {
                        throw new SeatBespeakException.BespeakSeatFailed("对不起,同一时间段只能预约一个座位。");
                    }
                }
                if (bespeakInfo.SubmitTime == bespeakInfo.BsepeakTime)
                {
                    foreach (BespeakLogInfo b in bespeak)
                    {
                        if (b.BsepeakTime == b.SubmitTime && b.BsepeakState == BookingStatus.Waiting)
                        {
                            throw new SeatBespeakException.BespeakSeatFailed("对不起,只能同时进行一次及时预约。");
                        }
                    }
                }
            }
            else
            {
                foreach (BespeakLogInfo b in bespeak)
                {
                    if (b.BsepeakState == BookingStatus.Waiting)
                    {
                        throw new SeatBespeakException.BespeakSeatFailed("对不起,您已有等待签到的座位。");
                    }
                }
                foreach (BespeakLogInfo b in seatbespeak)
                {
                    if (b.BsepeakState == EnumType.BookingStatus.Waiting)
                    {
                        throw new Exception("所选座位已经被预约。");
                    }
                }
            }
            List <BlackListInfo> blackLog = seatManage.GetBlacklistInfo(bespeakInfo.CardNo);

            if (blackLog.Count > 0)
            {
                throw new SeatBespeakException.BespeakSeatFailed("你已被记录黑名单,无法预约座位。");
            }

            if (rooms.Count > 0)
            {
                ReadingRoomInfo       r      = rooms[0];
                EnumType.HandleResult result = seatManage.AddBespeakLogInfo(bespeakInfo);
                if (result == EnumType.HandleResult.Successed)
                {
                    string beginTime;
                    string endTime;
                    if (bespeakInfo.SubmitTime == bespeakInfo.BsepeakTime)
                    {
                        beginTime = bespeakInfo.BsepeakTime.ToShortTimeString();
                        endTime   = bespeakInfo.BsepeakTime.AddMinutes(r.Setting.SeatBespeak.SeatKeepTime).ToShortTimeString();
                    }
                    else
                    {
                        beginTime = bespeakInfo.BsepeakTime.AddMinutes(-double.Parse(r.Setting.SeatBespeak.ConfirmTime.BeginTime)).ToShortTimeString();
                        endTime   = bespeakInfo.BsepeakTime.AddMinutes(double.Parse(r.Setting.SeatBespeak.ConfirmTime.EndTime)).ToShortTimeString();
                    }
                    returnValue = string.Format("座位预约成功,请在{0}至{1}到图书馆刷卡确认", beginTime, endTime);
                }
                else
                {
                    throw new SeatBespeakException.BespeakSeatFailed("所选座位已经被预约。");
                }
            }
            return(returnValue);
        }
Example #21
0
        /// <summary>
        /// 预约等待
        /// </summary>
        public void BespeakSeatWait()
        {
            DateTime nowDate = ServiceDateTime.Now;

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

                    if (seatUsedInfo != null && seatUsedInfo.EnterOutState != EnterOutLogType.Leave)
                    { //条件满足,说明座位正在使用。
                        seatUsedInfo.EnterOutState = EnterOutLogType.Leave;
                        seatUsedInfo.EnterOutType  = LogStatus.Valid;
                        seatUsedInfo.Remark        = string.Format("预约该座位的读者在离开终端刷卡确认入座,设置在座读者离开");
                        seatUsedInfo.Flag          = Operation.OtherReader;
                        int newId = -1;
                        EnterOutOperate.AddEnterOutLog(seatUsedInfo, ref newId);
                    }
                    EnterOutLogInfo newEnterOutLog = new EnterOutLogInfo();//构造
                    newEnterOutLog.CardNo                    = bespeaklog.CardNo;
                    newEnterOutLog.EnterOutLogNo             = SeatComm.RndNum();
                    newEnterOutLog.EnterOutState             = EnterOutLogType.BookingConfirmation;
                    newEnterOutLog.EnterOutType              = LogStatus.Valid;
                    newEnterOutLog.Flag                      = Operation.Reader;
                    newEnterOutLog.ReadingRoomNo             = bespeaklog.ReadingRoomNo;
                    newEnterOutLog.ReadingRoomName           = bespeaklog.ReadingRoomName;
                    newEnterOutLog.ShortSeatNo               = bespeaklog.ShortSeatNum;
                    newEnterOutLog.SeatNo                    = bespeaklog.SeatNo;
                    newEnterOutLog.Remark                    = string.Format("在离开终端刷卡,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                    clientobject.EnterOutLogData.EnterOutlog = newEnterOutLog;
                    int          logid  = -1;
                    HandleResult result = EnterOutOperate.AddEnterOutLog(newEnterOutLog, ref logid); //添加入座记录
                    if (result == HandleResult.Successed)
                    {
                        bespeaklog.BsepeakState = BookingStatus.Confinmed;
                        bespeaklog.CancelPerson = Operation.Reader;
                        bespeaklog.CancelTime   = nowDate;
                        bespeaklog.Remark       = string.Format("在离开终端刷卡,入座预约的{0} {1}号座位", bespeaklog.ReadingRoomName, bespeaklog.ShortSeatNum);
                        T_SM_SeatBespeak.UpdateBespeakList(bespeaklog);
                    }
                    if (popMessage != null)
                    {
                        popMessage(this, new PopMessage(TipType.BespeatSeatConfirmSuccess, "预约签到成功"));
                    }
                }
                else if (nowDate.CompareTo(dtBegin) < 0)
                {
                    if (popMessage != null)
                    {
                        popMessage(this, new PopMessage(TipType.BookConfirmWarn, "没到签到时间"));
                    }
                }
                else if (nowDate.CompareTo(dtEnd) < 0)
                {
                    //TODO:最迟确认时间为:dtEnd。
                }
                else
                {
                    //TODO:未知原因,预约确认失败。
                }
            }
        }
        /// <summary>
        /// 根据学号模糊查询获取全部的记录,为空就是不设条件查询
        /// </summary>
        /// <param name="cardNo">学号</param>
        /// <param name="roomNum">阅览室编号</param>
        /// <param name="date">查询当前日期的记录</param>
        /// /// <param name="status">预约状态</param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetBespeakLogs_ByFuzzySearch(string cardNo, string roomNum, DateTime date, int spanDays, List <BookingStatus> status)
        {
            List <BespeakLogInfo> bespeatlogs = new List <BespeakLogInfo>();
            StringBuilder         strWhere    = new StringBuilder();

            if (!string.IsNullOrEmpty(cardNo))
            {
                if (String.IsNullOrEmpty(strWhere.ToString()))
                {
                    strWhere.Append(string.Format(" cardNo like '%{0}%'", cardNo));
                }
                else
                {
                    strWhere.Append(string.Format(" and cardNo like '%{0}%'", cardNo));
                }
            }
            if (!string.IsNullOrEmpty(roomNum))
            {
                if (String.IsNullOrEmpty(strWhere.ToString()))
                {
                    strWhere.Append(string.Format(" readingRoomNo='{0}'", roomNum));
                }
                else
                {
                    strWhere.Append(string.Format(" and readingRoomNo='{0}'", roomNum));
                }
            }
            if (status != null)
            {
                for (int i = 0; i < status.Count; i++)
                {
                    if (i == 0)
                    {
                        if (String.IsNullOrEmpty(strWhere.ToString()))
                        {
                            strWhere.Append(string.Format(" BespeakState in ('{0}' ", (int)status[i]));
                        }
                        else
                        {
                            strWhere.Append(string.Format(" and BespeakState in ('{0}'", (int)status[i]));
                        }
                    }
                    else if (i != status.Count - 1)
                    {
                        strWhere.Append(string.Format(",'{0}'", (int)status[i]));
                    }
                    if (i == status.Count - 1)
                    {
                        strWhere.Append(string.Format(" ,'{0}') ", (int)status[i]));
                    }
                }
            }
            if (date.CompareTo(DateTime.Parse("1900-1-1")) != 0)
            {
                if (String.IsNullOrEmpty(strWhere.ToString()))
                {
                    strWhere.Append(" BespeakTime>='" + date.Date + "' and BespeakTime<'" + date.AddDays(spanDays + 1).Date + "' ");
                }
                else
                {
                    strWhere.Append(" and BespeakTime>='" + date.Date + "' and BespeakTime<'" + date.AddDays(spanDays + 1).Date + "' ");
                }
            }
            //SqlParameter[] parameters = {
            //                            new SqlParameter("@shortDate",SqlDbType.DateTime),
            //                            new SqlParameter("@spanDays",SqlDbType.Int)
            //                          };
            //parameters[0].Value = date;
            //parameters[1].Value = spanDays;
            try
            {
                DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), null);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                    if (log != null)
                    {
                        bespeatlogs.Add(log);
                    }
                }
            }
            catch
            {
                throw;
            }

            return(bespeatlogs);
        }
 /// <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="roomNum"></param>
        /// <param name="date"></param>
        /// <returns></returns>
        public List <BespeakLogInfo> GetNotCheckedBespeakLogInfo(List <string> roomNum, DateTime date)
        {
            List <BespeakLogInfo> list = new List <BespeakLogInfo>();

            //StringBuilder strWhere = new StringBuilder();
            //if (roomNum != null)
            //{
            //    for (int i = 0; i < roomNum.Count; i++)
            //    {

            //        if (i == 0)
            //        {
            //            strWhere.Append(string.Format(" ReadingRoomNo in ('{0}'", roomNum[i]));
            //        }
            //        else if (i != roomNum.Count - 1)
            //        {
            //            strWhere.Append(string.Format(",'{0}'  ", roomNum[i]));
            //        }
            //        if (i == roomNum.Count - 1)
            //        {
            //            strWhere.Append(string.Format(" ,'{0}')", roomNum[i]));
            //        }
            //    }
            //}
            //if (string.IsNullOrEmpty(strWhere.ToString()))
            //{
            //    strWhere.Append(" datediff(day, BespeakTime,@shortDate)>=0 and BespeakState=@BespeakState");
            //}
            //else
            //{
            //    strWhere.Append(" and datediff(day, BespeakTime,@shortDate)>=0 and BespeakState=@BespeakState");
            //}
            //SqlParameter[] parameters = {
            //                             new SqlParameter("@shortDate",SqlDbType.DateTime),
            //                             new SqlParameter("@BespeakState",SqlDbType.Int),
            //                            };
            //parameters[0].Value = date;
            //parameters[1].Value = (int)BookingStatus.Waiting;
            try
            {
                if (roomNum != null && roomNum.Count > 0)
                {
                    for (int k = 0; k < roomNum.Count; k++)
                    {
                        StringBuilder strWhere = new StringBuilder();
                        strWhere.Append(string.Format(" ReadingRoomNo = '{0}'", roomNum[k]));
                        strWhere.Append(" and  BespeakTime>='" + date.Date + "' and BespeakTime<'" + date.AddDays(1).Date + "' and BespeakState='" + (int)BookingStatus.Waiting + "'");
                        DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), null);
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                            if (log != null)
                            {
                                list.Add(log);
                            }
                        }
                    }
                }
                else
                {
                    StringBuilder strWhere = new StringBuilder();
                    strWhere.Append(" BespeakTime>='" + date.Date + "' and BespeakTime<'" + date.AddDays(1).Date + "' and BespeakState='" + (int)BookingStatus.Waiting + "'");
                    DataSet ds = seatBespeakDal.GetList(strWhere.ToString(), null);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        BespeakLogInfo log = DataRowToBespeakLogInfo(ds.Tables[0].Rows[i]);
                        if (log != null)
                        {
                            list.Add(log);
                        }
                    }
                }
            }
            catch
            {
                throw;
            }

            return(list);
        }
        /// <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:未知原因,预约确认失败。
                }
            }
        }
Example #26
0
        /// <summary>
        /// 预约签到
        /// </summary>
        /// <param name="bookNo"></param>
        /// <returns></returns>
        public string ConfigSeat(int bookNo)
        {
            try
            {
                DateTime       nowDate    = DateTime.Now;
                BespeakLogInfo bespeaklog = seatManage.GetBespeaklogById(bookNo);
                if (bespeaklog == null)
                {
                    return("获取预约记录失败");
                }
                if (bespeaklog.BsepeakState != BookingStatus.Waiting)
                {
                    return("此条记录状态无效,请查询刷新页面");
                }

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