Example #1
0
        /// <summary>
        /// 增加开闭馆记录
        /// </summary>
        /// <param name="model">开闭馆记录</param>
        /// <param name="new_id">返回的新的记录id</param>
        /// <returns></returns>
        public static int AddNewReadingRoomOClog(ReadingRoomOpenCloseLogInfo model, ref int new_id)
        {
            IWCFService.ISeatManageService seatService = WcfAccessProxy.ServiceProxy.CreateChannelSeatManageService();
            bool error = false;

            try
            {
                return(seatService.AddReadingRoomOClog(model, ref new_id));
            }
            catch (Exception ex)
            {
                error = true;
                SeatManageComm.WriteLog.Write("添加开闭馆计划失败:" + ex.Message);
                return(-1);
            }
            finally
            {
                ICommunicationObject ICommObjectService = seatService as ICommunicationObject;
                try
                {
                    if (ICommObjectService.State == CommunicationState.Faulted)
                    {
                        ICommObjectService.Abort();
                    }
                    else
                    {
                        ICommObjectService.Close();
                    }
                }
                catch
                {
                    ICommObjectService.Abort();
                }
            }
        }
 /// <summary>
 /// 增加开闭馆记录
 /// </summary>
 /// <param name="model">开闭馆记录</param>
 /// <returns></returns>
 public int AddReadingRoomOClog(ReadingRoomOpenCloseLogInfo model, ref int newid)
 {
     try
     {
         return(t_sm_rropencloselog.Add(model, ref newid));
     }
     catch
     {
         throw;
     }
 }
        private ReadingRoomOpenCloseLogInfo DataRowToReadingRoomOpenCloseLogInfo(DataRow dr)
        {
            //id,ReadingRoomNo,OperateTime,OperateNo,OpenCloseState,OpenCloseType
            ReadingRoomOpenCloseLogInfo model = new ReadingRoomOpenCloseLogInfo();

            model.ID             = dr["id"].ToString();
            model.ReadingRoomNo  = dr["ReadingRoomNo"].ToString();
            model.OperateNo      = dr["OperateNo"].ToString();
            model.OperateTime    = DateTime.Parse(dr["OperateTime"].ToString());
            model.OpenCloseState = (ReadingRoomStatus)int.Parse(dr["OpenCloseState"].ToString());
            model.Logstatus      = (LogStatus)int.Parse(dr["OpenCloseType"].ToString());
            return(model);
        }
        /// <summary>
        /// 增加开闭馆记录
        /// </summary>
        /// <param name="model">开闭馆记录</param>
        /// <param name="new_id">返回的新的记录id</param>
        /// <returns></returns>
        public static int AddNewReadingRoomOClog(ReadingRoomOpenCloseLogInfo model, ref int new_id)
        {
            IWCFService.ISeatManageService seatService = new WcfServiceForSeatManage.SeatManageDateService();
            bool error = false;

            try
            {
                return(seatService.AddReadingRoomOClog(model, ref new_id));
            }
            catch (Exception ex)
            {
                error = true;
                SeatManageComm.WriteLog.Write("添加开闭馆计划失败:" + ex.Message);
                return(-1);
            }
        }
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public int Add(ReadingRoomOpenCloseLogInfo model, ref int newLogId)
        {
            //TODO:不跟据阅览室状态添加进出记录
            SqlParameter[] parameters = new SqlParameter[8];
            parameters[0]           = new SqlParameter("@ExcResult", SqlDbType.Int);
            parameters[0].Direction = ParameterDirection.Output;

            parameters[1]           = new SqlParameter("@id", model.ID);
            parameters[2]           = new SqlParameter("@ReadingRoomNo", model.ReadingRoomNo);
            parameters[3]           = new SqlParameter("@OperateTime", model.OperateTime);
            parameters[4]           = new SqlParameter("@OperateNo", model.OperateNo);
            parameters[5]           = new SqlParameter("@OpenCloseState", (int)model.OpenCloseState);
            parameters[6]           = new SqlParameter("@OpenCloseType", (int)model.Logstatus);
            parameters[7]           = new SqlParameter("RETURN_VALUE", SqlDbType.Int);
            parameters[7].Direction = ParameterDirection.ReturnValue;
            DbHelperSQL.Execute_Proc("Proc_AddRROpenCloseLog", parameters);
            string id = parameters[7].Value.ToString();

            if (!string.IsNullOrEmpty(id))
            {
                newLogId = int.Parse(id);
            }
            return((int)parameters[0].Value);
        }
        /// <summary>
        /// 执行阅览室开闭馆处理
        /// </summary>
        /// <param name="RoomsStatus">阅览室状态</param>
        public void OpenCloseReadingRoom()
        {
            try
            {
                DateTime nowDateTime = ServiceDateTime.Now;
                List <ReadingRoomOpenCloseLogInfo> rrocList = T_SM_RROpenCloseLog.GetReadingRoomOClog(null, LogStatus.Valid, null, null);
                //遍历所有阅览室
                foreach (ReadingRoomInfo rri in roomList.Values.Where(rri => rri.Setting != null))
                {
                    //获取阅览室状态
                    ReadingRoomOpenCloseLogInfo rroc = rrocList.OrderByDescending(u => u.OperateTime).ToList().Find(u => u.ReadingRoomNo == rri.No);
                    if (rroc == null)
                    {
                        rroc = new ReadingRoomOpenCloseLogInfo();
                        rroc.OpenCloseState = ReadingRoomStatus.Close;
                        rroc.ReadingRoomNo  = rri.No;
                        rroc.OperateNo      = SeatComm.RndNum();
                        rroc.OperateTime    = nowDateTime;
                        rroc.Logstatus      = LogStatus.Valid;
                    }

                    int new_id = 0;
                    //如果启用24小时模式
                    if (rri.Setting.RoomOpenSet.UninterruptibleModel)
                    {
                        if (rroc.OpenCloseState == ReadingRoomStatus.Close)
                        {
                            rroc.OpenCloseState = ReadingRoomStatus.Open;
                            rroc.OperateTime    = nowDateTime;
                            T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                            WriteLog.Write(string.Format("监控服务:{0},开启", rri.Name));
                        }
                        continue;
                    }
                    ReadingRoomStatus nowState = rri.Setting.ReadingRoomOpenState(nowDateTime);
                    //判断状态
                    if (rroc.OpenCloseState == nowState)
                    {
                        continue;
                    }
                    switch (nowState)
                    {
                    case ReadingRoomStatus.Open:
                        rroc.OpenCloseState = ReadingRoomStatus.Open;
                        rroc.OperateTime    = ServiceDateTime.Now;
                        rroc.OperateNo      = SeatComm.RndNum();
                        T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                        WriteLog.Write(string.Format("监控服务:{0},开启", rri.Name));
                        break;

                    case ReadingRoomStatus.Close:
                        CloseReadingRoom(rri);
                        rroc.OpenCloseState = ReadingRoomStatus.Close;
                        rroc.OperateTime    = ServiceDateTime.Now;
                        T_SM_RROpenCloseLog.AddNewReadingRoomOClog(rroc, ref new_id);
                        WriteLog.Write(string.Format("监控服务:{0},关闭", rri.Name));
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog.Write(string.Format("监控服务:执行阅览室开闭馆处理遇到错误:{0}", ex.Message));
            }
        }