/// <summary>
        /// 验证身份证是否存在
        /// </summary>
        /// <param name="idCard">身份证</param>
        /// <param name="msg">返回的消息</param>
        /// <param name="model">票的信息</param>
        /// <returns>存在true,不存在false</returns>
        public bool CheckTicketIdCard(string idCard, out string msg, out TicketTestingModel model)
        {
            model = new TicketTestingModel();
            var orderDetail = _orderDetailService.GetByIDCard(idCard);

            if (orderDetail != null)
            {
                if (orderDetail.OrderStatus == (int)OrderDetailsDataStatus.Canncel || orderDetail.OrderStatus == (int)OrderDetailsDataStatus.Refund)
                {
                    msg = MessageKey.TicketRefund;
                    return(false);
                }
                model.ValidityDateStart = orderDetail.ValidityDateStart;
                model.ValidityDateEnd   = orderDetail.ValidityDateEnd;
                model.DelayCheckTime    = orderDetail.DelayCheckTime;
                model.Price             = orderDetail.Price;
            }
            var entity  = _ticketTestingRepository.FirstOrDefault(a => a.IDCard == idCard);
            var isValid = CheckTicket(entity, out msg);

            if (isValid)
            {
                model.TicketTestingId = entity.TicketTestingId;
                model.Quantity        = entity.Quantity.Value;
                model.UsedQuantity    = entity.UsedQuantity;
            }
            return(isValid);
        }
        /// <summary>
        /// 验证二维码是否存在
        /// </summary>
        /// <param name="qRcode">二维码</param>
        /// <param name="deviceName">设备名,唯一标识符</param>
        /// <param name="msg">返回的消息</param>
        /// <param name="model">票的信息</param>
        /// <returns>存在true,不存在false</returns>
        public bool CheckTicketQrCode(string qRcode, string deviceName, out string msg, out TicketTestingModel model)
        {
            model = new TicketTestingModel();
            var orderDetail = _orderDetailService.GetByQRcode(qRcode);

            if (orderDetail == null)
            {
                msg = MessageKey.InvalidTicket;
                return(false);
            }
            if (orderDetail.OrderStatus == (int)OrderDetailsDataStatus.Canncel || orderDetail.OrderStatus == (int)OrderDetailsDataStatus.Refund)
            {
                msg = MessageKey.TicketRefund;
                return(false);
            }
            if (orderDetail.OrderStatus == (int)OrderDetailsDataStatus.Consume)
            {
                msg = MessageKey.TicketEmploy;
                return(false);
            }
            var isCheckTicket = _ticketService.CheckTicketIsDoorGate(orderDetail, deviceName);

            if (!isCheckTicket)
            {
                msg = MessageKey.TicketNoValidate;
                return(false);
            }

            model.ValidityDateStart = orderDetail.ValidityDateStart;
            model.ValidityDateEnd   = orderDetail.ValidityDateEnd;
            model.DelayCheckTime    = orderDetail.DelayCheckTime;
            model.Price             = orderDetail.Price;
            model.TicketId          = orderDetail.TicketId;

            var entity  = Get(orderDetail.OrderNo, qRcode);
            var isValid = CheckTicket(entity, out msg);

            if (isValid)
            {
                model.TicketTestingId = entity.TicketTestingId;
                model.Quantity        = entity.Quantity.Value;
                model.UsedQuantity    = entity.UsedQuantity;
                UpdateForCheckDate(entity);
            }
            return(isValid);
        }
Beispiel #3
0
        /// <summary>
        /// 验票的判断方法
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="type"></param>
        /// <param name="model"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        private Result <TicketResult> TicketResult(CheckTicket_Object obj, SourceType type, TicketTestingModel model, string msg)
        {
            var ticketSession = new TicketSession
            {
                OrderID           = Guid.NewGuid().ToString("N"),
                Fingerprint_Pass  = false,
                Fingerprint_Token = string.Empty,
                IDCard_Number     = string.Empty,
                IDCard_Pass       = false,
                TicketNo_Pass     = false,
                Ticket_No         = obj.Number,
                CallCount         = 0,
                //ParkID = "罗湖山5A",//可以用于景区id
                DeviceID = obj.Device.DeviceName//可以用于设备id
            };

            DocomSDK.Ticket.Data.Ticket ticket = new DocomSDK.Ticket.Data.Ticket()
            {
                BeginDate    = model.ValidityDateStart,          //开始日期
                ExpiryDate   = model.ValidityDateEnd,            //结束日期
                CapacitySize = model.Quantity,                   //总人数
                UsageCount   = model.UsedQuantity,               // 已入园人数
                NeedIDCard   = false,                            //是否验证身份证
                NeedFinger   = false,
                Number       = obj.Number,                       //门票条码
                Price        = 0,                                //价格
                TicketSource = obj.SensorSource,                 //门票来源
                TicketType   = type.ToString(),                  //门票类型
                UR_Text1     = model.TicketTestingId.ToString(), //使用预留字段
            };

            //var isCheckTicket = _ticketService.CheckTicketIsDoorGate(model.TicketId, obj.Device.DeviceName);
            //if (!isCheckTicket)
            //{
            //    //门票在该通道不可使用(设置了闸机不验此票时提示)
            //    return TicketDataResult.CheckTicketIsDoorGateResult(ticket);
            //}

            DateTime now = DateTime.Now;

            if (ticket.ExpiryDate.Date < now.Date)
            {
                //提示已超出有效日期
                return(TicketDataResult.TicketOverdueResult(ticket));
            }
            if (ticket.CapacitySize <= ticket.UsageCount)
            {
                //提示该票已用完
                return(TicketDataResult.TicketOffResult(ticket, ticketSession));
            }
            if (ticket.BeginDate.Date > now.Date)
            {
                //提示未到生效日期
                return(TicketDataResult.TicketNotEnableResult(ticket));
            }
            if (model.DelayCheckTime > now)
            {
                //该票未到入园时间
                return(TicketDataResult.TicketNotDelayCheckTimeResult(ticket));
            }
            //验证通过,通知开闸
            return(TicketDataResult.VerifyPassResult(ticket, ticketSession, msg, msg));
        }