Esempio n. 1
0
        public static Result <TicketResult> Ticket_CheckTicket(CheckTicket_Object checkTicketObject)
        {
            var data   = JsonSerializeHelper.ToJson(checkTicketObject);
            var result = HttpHelper.Post(url + "Ticket_CheckTicket", data, 60);

            return(JsonSerializeHelper.ToObject <Result <TicketResult> >(result));
        }
Esempio n. 2
0
        /// <summary>
        /// 扫描进入,请求检票
        /// </summary>
        /// <param name="obj">请求参数</param>
        public Result <TicketResult> Ticket_CheckTicket(CheckTicket_Object obj)
        {
            _log.Info("进入【请求检票】事件: Ticket_CheckTicket");
            _log.Info("得到数据: " + JsonHelper.ObjectToJsonStr(obj));

            obj.Number = obj.Number.Replace("\r", string.Empty).Replace("\n", string.Empty).Replace(" ", string.Empty);

            try
            {
                #region 判断设备是否存在
                string msg;
                bool   isState = _otaFacadeService.CheckDoorGate(obj.Device.DeviceName, out msg);
                if (!isState)
                {
                    _log.Info("设备不存在:" + obj.Device.DeviceName);
                    return(TicketDataResult.InvalidDeviceResult(msg));
                }
                #endregion
                //验票
                return(_otaFacadeService.TicketValid(obj));
            }
            catch (Exception ex)
            {
                _log.Error(ex);
                return(TicketDataResult.FailResult("系统异常,请联系管理员!"));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 验证年卡
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public Result <TicketResult> ValidYearTicket(CheckTicket_Object obj)
        {
            _log.Info("开始验证年卡");
            string msg;
            int    yearTicketUserId;
            var    isCheck = _yearTicketUserService.CheckYearTicketUser(obj.Number, out msg, out yearTicketUserId);

            _log.Info("年卡验证结果:" + msg);
            if (!isCheck)
            {
                //年卡无效
                return(TicketDataResult.TaskTerminationResult(msg, 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
                Temp_Fingerprint  = new List <Fingerprint>()
            };

            _log.Info("验证指纹状态:");
            var list = _ticketFingerPrintService.GetFingers(yearTicketUserId);

            foreach (var item in list)
            {
                var finger = new Fingerprint
                {
                    Data  = item.FingerFeature,
                    Token = item.FingerFeature
                };
                ticketSession.Temp_Fingerprint.Add(finger);
            }
            _log.Info("指纹数量" + list.Count);

            DocomSDK.Ticket.Data.Ticket ticket = new DocomSDK.Ticket.Data.Ticket
            {
                BeginDate    = DateTime.Now,                     //结束日期
                ExpiryDate   = DateTime.Now.AddDays(1),          //开始日期
                CapacitySize = 1,                                // 可用人数
                NeedIDCard   = false,                            //是否验证身份证
                NeedFinger   = true,
                UsageCount   = 1,                                //已用人数
                Number       = obj.Number,                       //门票条码
                Price        = 0,                                //价格
                TicketSource = obj.SensorSource,                 //门票来源
                TicketType   = SourceType.YearTicket.ToString(), //门票类型
                UR_Text1     = yearTicketUserId.ToString(),      //使用预留字段
            };
            _log.Info("发送指纹验证请求:" + OperationCode.VerifyFingerprints);
            return(TicketDataResult.VerifyFingerprintsResult(ticket, ticketSession, "验证指纹", "验证指纹"));
        }
Esempio n. 4
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(), //使用预留字段
            };

            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));
        }
Esempio n. 5
0
 /// <summary>
 /// 获取传感器的来源
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public SourceType GetSourceType(CheckTicket_Object obj)
 {
     //P10C1-91
     if (obj.SensorSource.Length >= 8)
     {
         var sensorSub = obj.SensorSource.Substring(6, 2);
         if (sensorSub == "30")
         {
             //印刷纸质票,条形码为11位数字,编码规则 1位年份+2位价格+8位发票号
             if (obj.Number.Length > 13)
             {
                 _log.Info("扫描方式:二维码");
                 return(SourceType.QRcode);
             }
             else
             {
                 _log.Info("扫描方式:条形码");
                 return(SourceType.BarCode);
             }
         }
         if (sensorSub == "80" || sensorSub == "20")
         {
             //验证通过即为身份证
             if (IdCardValidation.CheckIdCard(obj.Number))
             {
                 _log.Info("扫描方式:二维码");
                 return(SourceType.IdCard);
             }
             //年卡
             _log.Info("扫描方式:年卡");
             return(SourceType.YearTicket);
         }
         if (sensorSub == "91")
         {
             _log.Info("扫描方式:二维码");
             return(SourceType.PalmVein);
         }
     }
     else if (obj.SensorSource == "P10")
     {
         //验证通过即为身份证
         if (IdCardValidation.CheckIdCard(obj.Number))
         {
             _log.Info("扫描方式:二维码");
             return(SourceType.IdCard);
         }
         //年卡
         _log.Info("扫描方式:年卡");
         return(SourceType.YearTicket);
     }
     _log.Info("扫描数据类型不正确:" + obj.SensorSource);
     return(SourceType.UnFound);
 }
Esempio n. 6
0
        /// <summary>
        /// 验证身份证
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public Result <TicketResult> ValidIdCard(CheckTicket_Object obj)
        {
            string             msg;
            TicketTestingModel ticketTestingModel;
            var isCheck = _ticketTestingService.CheckTicketIdCard(obj.Number, out msg, out ticketTestingModel);

            if (!isCheck)
            {
                return(TicketDataResult.TaskTerminationResult(msg, msg));
            }
            return(TicketResult(obj, SourceType.IdCard, ticketTestingModel, msg));
        }
Esempio n. 7
0
        /// <summary>
        /// 验证掌静脉
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public Result <TicketResult> ValidPalmVein(CheckTicket_Object obj)
        {
            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,
                DeviceID          = obj.Device.DeviceName//可以用于设备id
            };

            DocomSDK.Ticket.Data.Ticket ticket = new DocomSDK.Ticket.Data.Ticket()
            {
                BeginDate    = DateTime.Now,                  //开始日期
                ExpiryDate   = DateTime.Now,                  //结束日期
                CapacitySize = 1,                             //总人数
                UsageCount   = 1,                             // 已入园人数
                NeedIDCard   = false,                         //是否验证身份证
                NeedFinger   = false,
                Number       = obj.Number,                    //门票条码
                Price        = 0,                             //价格
                TicketSource = obj.SensorSource,              //门票来源
                TicketType   = SourceType.PalmVein.ToString() //门票类型
            };


            if (obj.Device.DeviceName == "2f0fae9db03e9b73")
            {
                TestHelper.IsAction = false;
                //添加掌静脉特征
                var isAdd = _venaService.CreateFeature(obj.Number);
                if (!isAdd)
                {
                    return(TicketDataResult.TaskTerminationResult("采集失败", "采集失败"));
                }
                return(TicketDataResult.VerifyPassResult(ticket, ticketSession, "采集成功", "采集成功"));
            }
            TestHelper.IsAction = true;
            //比对掌静脉特征
            var result = _venaService.SearchFeature(obj.Number);

            if (!result)
            {
                return(TicketDataResult.TaskTerminationResult("验证失败", "验证失败"));
            }
            return(TicketDataResult.VerifyPassResult(ticket, ticketSession, "验证成功,欢迎光临", "验证成功,欢迎光临"));
        }
Esempio n. 8
0
        /// <summary>
        /// 验证条形码
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public Result <TicketResult> ValidBarCode(CheckTicket_Object obj)
        {
            _log.Info("开始验证条形码");
            string             msg;
            TicketTestingModel ticketTestingModel;
            var isCheck = _ticketTestingService.CheckTicketBarCode(obj.Number, out msg, out ticketTestingModel);

            _log.Info("条形码验证结果:" + msg);
            if (!isCheck)
            {
                return(TicketDataResult.TaskTerminationResult(msg, msg));
            }
            return(TicketResult(obj, SourceType.BarCode, ticketTestingModel, msg));
        }
        private void CheckTicket()
        {
            CheckTicket_Object obj = new CheckTicket_Object
            {
                SensorSource = "number30",
                Number       = "2145215236",
                Device       = new DeviceStatus
                {
                    DeviceName = "dd3f2a00-5ecb-4a76-8388-8eba15c62471",
                    Startup    = DateTime.Now
                }
            };

            var result = 闸机类.Post(obj, "Ticket_CheckTicket").Result;



            textBox2.Text = JsonHelper.ObjectToJson(result);
        }
Esempio n. 10
0
        /// <summary>
        /// 验证二维码
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public Result <TicketResult> ValidQRcode(CheckTicket_Object obj)
        {
            _log.Info("开始验证二维码");
            var qrCode = _ticketTestingService.QrCodeDecrypt(obj.Number);

            if (string.IsNullOrEmpty(qrCode))
            {
                _log.Info("解密二维码失败");
                return(TicketDataResult.TaskTerminationResult(MessageKey.InvalidTicket, MessageKey.InvalidTicket));
            }
            _log.Info("解密二维码成功");
            string             msg;
            TicketTestingModel ticketTestingModel;
            var isCheck = _ticketTestingService.CheckTicketQrCode(qrCode, out msg, out ticketTestingModel);

            _log.Info("二维码验证结果:" + msg);
            if (!isCheck)
            {
                return(TicketDataResult.TaskTerminationResult(msg, msg));
            }
            return(TicketResult(obj, SourceType.QRcode, ticketTestingModel, msg));
        }
Esempio n. 11
0
 /// <summary>
 /// 检票
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public Result <TicketResult> TicketValid(CheckTicket_Object obj)
 {
     return(ValidQRcode(obj));
     //var sourceType = GetSourceType(obj);
     //switch (sourceType)
     //{
     //    //条形码
     //    case SourceType.BarCode:
     //        return ValidBarCode(obj);
     //    //二维码
     //    case SourceType.QRcode:
     //        return ValidQRcode(obj);
     //    //年卡
     //    case SourceType.YearTicket:
     //        return ValidYearTicket(obj);
     //    //身份证
     //    case SourceType.IdCard:
     //        return ValidIdCard(obj);
     //    //掌静脉
     //    case SourceType.PalmVein:
     //        return ValidPalmVein(obj);
     //}
     //return TicketDataResult.FailResult("系统异常,请联系管理员!");
 }
Esempio n. 12
0
        private void CheckTicket()
        {
            var number             = SecurityExtension.DesEncrypt(textBox1.Text, DesKey.QrCodeKey);
            CheckTicket_Object obj = new CheckTicket_Object
            {
                SensorSource = "number30",
                Number       = number,
                Device       = new DeviceStatus
                {
                    DeviceName = comboBox1.Text.Split(',')[0],
                    Startup    = DateTime.Now
                }
            };
            var result = 闸机类.Ticket_CheckTicket(obj);

            textBox2.Text += "\r\n\r\n 开始验票。。。。。。。";
            textBox2.Text += "\r\n\r\n 验票结果:" + result.Description;

            if (result.State == Result_Code.OK && result.Data.Code == OperationCode.VerifyPass)
            {
                textBox2.Text += "\r\n\r\n 正在提交过闸。。。。。。。。。。";
                var result2 = 闸机类.Ticket_SubmitWalkPast(new SubmitWalkPast_Object
                {
                    Session   = result.Data.Session,
                    Ticket    = result.Data.TicketData,
                    Count     = 1,
                    EventDate = DateTime.Now,
                    Device    = new DeviceStatus
                    {
                        DeviceName = result.Data.Session.DeviceID,
                        Startup    = DateTime.Now
                    }
                });
                if (result2.State == Result_Code.OK)
                {
                    textBox2.Text += "\r\n\r\n 过闸结果:" + result2.Description;
                    var  count  = 1;
                    bool isTrue = result2.Data.Code == OperationCode.VerifyPass;
                    while (isTrue)
                    {
                        count++;
                        textBox2.Text += "\r\n\r\n 第" + count + "次,提交过闸。。。。。。。。。。";
                        var result3 = 闸机类.Ticket_SubmitWalkPast(new SubmitWalkPast_Object
                        {
                            Session   = result2.Data.Session,
                            Ticket    = result2.Data.TicketData,
                            Count     = 1,
                            EventDate = DateTime.Now,
                            Device    = new DeviceStatus
                            {
                                DeviceName = result2.Data.Session.DeviceID,
                                Startup    = DateTime.Now
                            }
                        });
                        if (result3.State == Result_Code.OK && result3.Data.Code == OperationCode.VerifyPass)
                        {
                            result2 = result3;
                        }
                        else
                        {
                            isTrue = false;
                        }
                        textBox2.Text += "\r\n\r\n 过闸结果:" + result3.Description;
                    }
                }
                else
                {
                    textBox2.Text += "\r\n\r\n 过闸结果:" + result2.Description;
                }
            }
        }