/// <summary>
        /// 验证企业风控
        /// </summary>
        /// <returns></returns>
        private bool VerifyRisk()
        {
            var result = true;

            if (1 > _manageRiskModels.Keys.Count)
            {
                return(false);
            }
            _travelRisks = TravelRiskRep.GetTravelRiskByEnterpriseIDs(_manageRiskModels.Keys.ToList()).GroupBy(t => t.EnterpriseID).ToDictionary(t => t.Key.Value, t => t.FirstOrDefault());

            _manageRiskModels.Foreach(item =>
            {
                var riskModel = _travelRisks.ContainsKey((int)item.Key) ? _travelRisks[(int)item.Key] : null;

                if (null == riskModel)
                {
                    //TODO
                    this._verifyResults.Add(new Tuple <string, string>("", "" + item.Key));
                    return;
                }
                //企业最低条数
                var riskCount = riskModel.UploadLowCount ?? 0;


                //风控类型
                item.Value.ForEach(entity =>
                {
                    entity.TravelRiskType = riskModel.TravelRiskType ?? 0;
                    entity.EtermType      = riskModel.EtermType ?? 0;
                });

                //验证上传条数与风控条数
                if (item.Value.Any() && item.Value.Count < riskCount)
                {
                    _verifyResults.Add(new Tuple <string, string>("", string.Format("{0},上传票数不能低于{1}张", item.Value.FirstOrDefault().EnterpriseName, riskCount)));
                }
            });

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// 黑屏接口验证
        /// </summary>
        public void CheckEterm()
        {
            string      TravelBatchId  = ManageRisk.TravelBatchId;
            long        EnterpriseID   = ManageRisk.EnterpriseID;
            int         TravelRiskType = ManageRisk.baseRiskModelList[0].TravelRiskType;
            UserAccount userAccount    = new UserAccountRep().GetUserAccount(new UserAccount()
            {
                PayCenterCode = ManageRisk.PayCenterCode
            });
            var interfaceAccount = new InterfaceAccountRep().GetInterfaceAccount(new InterfaceAccount()
            {
                MerchantCode = userAccount.MerchantCode
            });
            var travelRisk = new TravelRiskRep().GetTravelRiskByEnterpriseID(new TravelRisk()
            {
                EnterpriseID = Convert.ToInt32(ManageRisk.baseRiskModelList[0].EnterpriseID), PayCenterCode = ManageRisk.PayCenterCode
            });

            if (!string.IsNullOrWhiteSpace(interfaceAccount.SuspendedServiceUrl))
            {
                string strEtermSuccess    = ""; //黑屏接口调用成功的票号集合
                string strOrderPrice      = ""; //票价验证失败票号集合
                string strOrderPersonName = ""; //黑屏规则验证成功票号集合
                string strNoPersonName    = ""; //黑屏规则验证失败票号集合
                foreach (var item in ManageRisk.baseRiskModelList)
                {
                    var commandArgs = new CommandArgs()
                    {
                        Airline    = item.FlightNo,
                        Catelog    = "Ticket",
                        Command    = "Checkinfo",
                        TicketType = "BSP",
                        Args       = new OperateArgs()
                        {
                            TicketNo = item.TicketNum
                        }
                    };
                    var ticketProcessor = new TicketProcessor(commandArgs, interfaceAccount.SuspendedServiceUrl).Execute();
                    if (ticketProcessor.Success)
                    {
                        strEtermSuccess += "'" + item.TicketNum + "',";
                        item.EtermStatus = 1;    //修改实体黑屏接口调用状态为成功
                        if (item.EtermType != 0) //包含黑屏
                        {
                            //验证订单金额
                            if (Convert.ToDecimal(ticketProcessor.Result.ticketData.Price) * travelRisk.TicketMultiple != 0 && Convert.ToDecimal(ticketProcessor.Result.ticketData.Price) * travelRisk.TicketMultiple < item.OrderAmount)//刨除票价验证失败订单(需取表字段配置)
                            {
                                strOrderPrice += "'" + item.TicketNum + "',";
                            }
                            else if (item.TravelRiskType != 1) //验价成功 且 风控规则不是纯白名单验证的 验证姓名
                            {
                                //验证姓名
                                if (item.PersonName.Trim() == ticketProcessor.Result.ticketData.Name.Trim())
                                {
                                    strOrderPersonName   += "'" + item.TicketNum + "',";
                                    item.BlackResultState = 1; //设置黑屏验证结果为成功
                                }
                                else
                                {
                                    strNoPersonName += "'" + item.TicketNum + "',";
                                    item.FailReason  = "姓名验证失败(hp)|";
                                }
                            }
                        }
                    }
                    else
                    {
                        //验证包含黑屏接口
                        if (item.EtermType != 0)
                        {
                            strOrderPrice  += "'" + item.TicketNum + "',";//添加验票价失败订单
                            item.FailReason = ticketProcessor.Message + "(hp)|";
                        }
                    }
                }
                if (!string.IsNullOrWhiteSpace(strEtermSuccess))//黑屏接口调用成功的票号
                {
                    strEtermSuccess = strEtermSuccess.Substring(0, strEtermSuccess.Length - 1);
                    //修改黑屏接口调用状态为成功
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strEtermSuccess, "", 0, 0, "", 0, 0, 1, "");
                    LoggerFactory.Instance.Logger_Debug("黑屏接口调用成功:" + strEtermSuccess, "CheckEtermService");
                }
                //票价验证失败的票号
                if (!string.IsNullOrWhiteSpace(strOrderPrice))
                {
                    strOrderPrice = strOrderPrice.Substring(0, strOrderPrice.Length - 1);
                    ManageRisk.baseRiskModelList.RemoveAll(i => strOrderPrice.Contains(i.TicketNum));
                    //记录验证票价失败的订单
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strOrderPrice, "", 0, 0, "", 0, 0, 0, "票价验证失败(hp)");
                    //记录验证票价失败的订单日志
                    LoggerFactory.Instance.Logger_Debug("验证票价失败:" + strOrderPrice, "CheckEtermService");

                    //清除缓存
                    new RemoneyNotifyService().ModifyTicketCache(new List <string>(strOrderPrice.Substring(1, strOrderPrice.Length - 2).Split("','")));
                }
                //黑屏姓名验证成功的票号
                if (!string.IsNullOrWhiteSpace(strOrderPersonName))
                {
                    strOrderPersonName = strOrderPersonName.Substring(0, strOrderPersonName.Length - 1);
                    //修改黑屏验证成功状态
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strOrderPersonName, "", 0, 1, "", 0, 0, 0, "");
                    //修改黑屏验证成功状态日志
                    LoggerFactory.Instance.Logger_Debug("黑屏姓名验证成功" + strOrderPersonName, "CheckEtermService");
                }
                //黑屏姓名验证失败的票号
                if (!string.IsNullOrWhiteSpace(strNoPersonName))
                {
                    strNoPersonName = strNoPersonName.Substring(0, strNoPersonName.Length - 1);
                    //修改黑屏验证失败原因
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strNoPersonName, "", 0, 1, "", 0, 0, 0, "姓名验证失败(hp)|");
                }
                if (TravelRiskType != 0 && ManageRisk.baseRiskModelList.Count > 0)//判断风控规则不是 纯黑屏
                {
                    //调用白名单验证
                    new CheckEnterpriseWhiteListService(ManageRisk).Execute();
                }
                //调用王帅核算比率返现接口
                LoggerFactory.Instance.Logger_Debug("调用王帅核算比率返现,list集合:" + JsonConvert.SerializeObject(ManageRisk), "CheckEtermService");
                try {
                    new RemoneyService(ManageRisk).Execute();
                }
                catch (Exception ex) {
                    LoggerFactory.Instance.Logger_Debug("返现报错:" + ex.Message, "CheckEtermService");
                }
            }
            else //黑屏地址为空
            {
                //记录验证失败原因
                ManageRisk.baseRiskModelList.ForEach(i => i.FailReason = "黑屏验证失败(hp地址为空)|");
                new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, "", "", 0, 0, "", 0, 0, 0, "黑屏验证失败(hp地址为空)|");
                //调用王帅核算比率返现接口
                LoggerFactory.Instance.Logger_Debug("调用王帅核算比率返现,list集合:" + JsonConvert.SerializeObject(ManageRisk), "CheckEtermService");
                try {
                    new RemoneyService(ManageRisk).Execute();
                }
                catch (Exception ex) {
                    LoggerFactory.Instance.Logger_Debug("返现报错:" + ex.Message, "CheckEtermService");
                }
            }
        }
        public void XHCheckTicketResult(ManageRiskModel ManageRisk, List <TicketDetailResult> ResultList, string uuid, bool IsOK)
        {
            string TravelBatchId      = ManageRisk.TravelBatchId;
            long   EnterpriseID       = ManageRisk.EnterpriseID;
            int    TravelRiskType     = ManageRisk.baseRiskModelList[0].TravelRiskType;
            string strOrderPrice      = ""; //票价验证失败票号集合
            string strOrderPersonName = ""; //黑屏规则验证成功票号集合
            var    travelRisk         = new TravelRiskRep().GetTravelRiskByEnterpriseID(new TravelRisk()
            {
                EnterpriseID = Convert.ToInt32(ManageRisk.EnterpriseID), PayCenterCode = ManageRisk.PayCenterCode
            });

            if (IsOK)//小何接口验证成功
            {
                //修改票号集合的小何验证结果状态
                ManageRisk.baseRiskModelList.ForEach(i => i.CheckStatus = 1);
                //根据批次号和企业编号 修改数据库票号集合的小何验证结果状态
                new TravelBatchOrderRep().UpdateTravelBatchOrder(ManageRisk.TravelBatchId, ManageRisk.EnterpriseID, "", "", 0, 0, "", 0, 1, 0, "");

                if (ManageRisk.baseRiskModelList[0].EtermType != 1)//包含小何接口
                {
                    foreach (var item in ManageRisk.baseRiskModelList)
                    {
                        foreach (var result in ResultList)
                        {
                            if (item.TicketNum == result.ticketno)
                            {
                                //验证订单金额
                                if (Convert.ToDecimal(result.fare) * travelRisk.TicketMultiple < item.OrderAmount)//刨除票价验证失败订单(需取表字段配置)
                                {
                                    strOrderPrice += "'" + item.TicketNum + "',";
                                }
                                else if (item.TravelRiskType != 1) //验价成功 且 风控规则不是纯白名单验证的 验证姓名
                                {
                                    if (item.PersonName.Trim() == result.name.Trim())
                                    {
                                        strOrderPersonName   += "'" + item.TicketNum + "',";
                                        item.BlackResultState = 1; //设置黑屏验证结果为成功
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
                //票价验证失败
                if (!string.IsNullOrWhiteSpace(strOrderPrice))
                {
                    strOrderPrice = strOrderPrice.Substring(0, strOrderPrice.Length - 1);
                    ManageRisk.baseRiskModelList.RemoveAll(i => strOrderPrice.Contains(i.TicketNum));
                    //记录验证票价失败的订单
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strOrderPrice, "", 0, 0, "", 0, 0, 0, "票价验证失败(xh)");
                    //记录验证票价失败的订单日志
                    LoggerFactory.Instance.Logger_Debug("XH验证票价失败的票号:" + strOrderPrice, "XHCheckTicketNotifyService");
                    //清除缓存
                    new RemoneyNotifyService().ModifyTicketCache(new List <string>(strOrderPrice.Substring(1, strOrderPrice.Length - 2).Split("','")));
                }
                //姓名验证
                if (!string.IsNullOrWhiteSpace(strOrderPersonName))
                {
                    strOrderPersonName = strOrderPersonName.Substring(0, strOrderPersonName.Length - 1);
                    //修改黑屏验证状态
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, strOrderPersonName, "", 0, 1, "", 0, 0, 0, "");
                    //修改黑屏验证状态日志
                    LoggerFactory.Instance.Logger_Debug("修改黑屏验证状态为成功:" + strOrderPrice, "XHCheckTicketNotifyService");

                    ManageRisk.baseRiskModelList.FindAll(i => !strOrderPersonName.Contains(i.TicketNum)).ForEach(i => i.FailReason = "姓名验证失败(xh)|");
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, "", strOrderPersonName, 0, 1, "", 0, 0, 0, "姓名验证失败(xh)|");
                }
                if (TravelRiskType != 0 && ManageRisk.baseRiskModelList.Count > 0)//判断风控规则不是 纯黑屏
                {
                    //调用白名单验证
                    new CheckEnterpriseWhiteListService(ManageRisk).Execute();
                }
                //调用王帅核算比率返现接口
                LoggerFactory.Instance.Logger_Debug("调用王帅核算比率返现接口:" + JsonConvert.SerializeObject(ManageRisk), "XHCheckTicketNotifyService");
                try
                {
                    new RemoneyService(ManageRisk).Execute();
                }
                catch (Exception ex)
                {
                    LoggerFactory.Instance.Logger_Debug("返现报错:" + ex.Message, "XHCheckTicketNotifyService");
                }
            }
            else
            {
                switch (ManageRisk.baseRiskModelList[0].EtermType)
                {
                case 0:     //0小何验证
                    //记录验证票价失败的订单(全部)
                    ManageRisk.baseRiskModelList.ForEach(i => i.FailReason = "票价验证失败(xh)|");
                    new TravelBatchOrderRep().UpdateTravelBatchOrder(TravelBatchId, EnterpriseID, "", "", 0, 0, "", 0, 0, 0, "票价验证失败(xh)|");
                    //记录验证票价失败的订单日志(全部)
                    LoggerFactory.Instance.Logger_Debug("验证票价失败的订单(全部),批次号:" + TravelBatchId + " ,企业ID:" + EnterpriseID.ToString(), "XHCheckTicketNotifyService");
                    break;

                case 1:     //黑屏
                    //记录黑屏配置错误日志
                    LoggerFactory.Instance.Logger_Debug("黑屏配置错误:" + ManageRisk.baseRiskModelList[0].EtermType.ToString(), "XHCheckTicketNotifyService");
                    break;

                case 2:     //小何+黑屏
                    //调用黑屏验证
                    new CheckEtermService(ManageRisk).CheckEterm();
                    break;

                default:
                    //记录风控规则不正确
                    LoggerFactory.Instance.Logger_Debug("风控规则错误:" + ManageRisk.baseRiskModelList[0].EtermType.ToString(), "XHCheckTicketNotifyService");
                    break;
                }
            }
        }