/// <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); }
/// <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; } } }