public bool ProcessStatusReport(IDataAdapter httpRequestLog, bool statusOk, out RequestErrorType requestError, out string errorMessage) { requestError = RequestErrorType.NoError; errorMessage = ""; string linkid = GetLinkID(httpRequestLog); if (string.IsNullOrEmpty(linkid)) { requestError = RequestErrorType.NoLinkID; errorMessage = " 通道 ‘" + Name + "’ 请求失败:没有LinkID ."; return(false); } if (!statusOk) { return(true); } SPRecordWrapper record = SPRecordWrapper.FindByChannelIDAndLinkID(linkid, this); if (!record.IsStatOK) { record.IsStatOK = statusOk; SPRecordWrapper.Update(record); record.SycnToClient(); return(true); } return(false); }
private bool CaculteIsIntercept(SPCodeWrapper matchCode, SPClientCodeRelationWrapper clientCodeRelation) { if (clientCodeRelation == null) { return(false); } int addRate = 50; int maxInterceptRate = 80; if (clientCodeRelation.SycnNotInterceptCount > 0) { clientCodeRelation.SycnNotInterceptCount = clientCodeRelation.SycnNotInterceptCount - 1; SPClientCodeRelationWrapper.Update(clientCodeRelation); return(false); } int interceptRate = 0; interceptRate = Convert.ToInt32(clientCodeRelation.InterceptRate); //return CaculteRandom(interceptRate); if (interceptRate == 0) { return(false); } decimal rate = SPRecordWrapper.CaculteActualInterceptRate(clientCodeRelation, System.DateTime.Now.Date); if (rate < Convert.ToDecimal(interceptRate)) { return(CaculteRandom(Math.Min(interceptRate + addRate, maxInterceptRate))); } else { return(false); } }
public string GenerateSendMOUrl(SPRecordWrapper record) { if (!this.SyncData) { return(""); } if (this.SyncDataSetting == null) { return(""); } SPRecordExtendInfoWrapper spRecordExtendInfo = record.ExtendInfo; NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty); List <SPChannelSycnParamsWrapper> channelSycnParams = record.ChannelID.GetAllSycnParams(); foreach (SPChannelSycnParamsWrapper channelSycnParam in channelSycnParams) { switch (channelSycnParam.MappingParams) { case DictionaryConst.Dictionary_SPField_LinkID_Key: BulidParams(queryString, channelSycnParam.Name, record.LinkID); break; case DictionaryConst.Dictionary_SPField_MO_Key: BulidParams(queryString, channelSycnParam.Name, record.Mo); break; case DictionaryConst.Dictionary_SPField_Mobile_Key: BulidParams(queryString, channelSycnParam.Name, record.Mobile); break; case DictionaryConst.Dictionary_SPField_SpNumber_Key: BulidParams(queryString, channelSycnParam.Name, record.SpNumber); break; case DictionaryConst.Dictionary_SPField_CreateDate_Key: BulidParams(queryString, channelSycnParam.Name, record.CreateDate.ToString("yyyyMMddhhmmss")); break; case DictionaryConst.Dictionary_SPField_City_Key: BulidParams(queryString, channelSycnParam.Name, record.City); break; case DictionaryConst.Dictionary_SPField_Province_Key: BulidParams(queryString, channelSycnParam.Name, record.Province); break; case DictionaryConst.Dictionary_SPField_FeeTime_Key: BulidParams(queryString, channelSycnParam.Name, "1"); break; case DictionaryConst.Dictionary_SPField_StartTime_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.StartTime); break; case DictionaryConst.Dictionary_SPField_EndTime_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.EndTime); break; case DictionaryConst.Dictionary_SPField_ExtendField1_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField1); break; case DictionaryConst.Dictionary_SPField_ExtendField2_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField2); break; case DictionaryConst.Dictionary_SPField_ExtendField3_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField3); break; case DictionaryConst.Dictionary_SPField_ExtendField4_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField4); break; case DictionaryConst.Dictionary_SPField_ExtendField5_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField5); break; case DictionaryConst.Dictionary_SPField_ExtendField6_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField6); break; case DictionaryConst.Dictionary_SPField_ExtendField7_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField7); break; case DictionaryConst.Dictionary_SPField_ExtendField8_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField8); break; case DictionaryConst.Dictionary_SPField_ExtendField9_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField9); break; case DictionaryConst.Dictionary_SPField_ExtendField10_Key: BulidParams(queryString, channelSycnParam.Name, spRecordExtendInfo.ExtendField10); break; } } Uri uri = new Uri(this.SyncDataSetting.SycnMOUrl); if (string.IsNullOrEmpty(queryString.ToString())) { return(this.SyncDataSetting.SycnMOUrl); } if (!string.IsNullOrEmpty(uri.Query.Trim())) { return(string.Format("{0}&{1}", this.SyncDataSetting.SycnMOUrl, queryString.ToString())); } return(string.Format("{0}?{1}", this.SyncDataSetting.SycnMOUrl, queryString.ToString())); }
public static List <SPRecordExtendInfoWrapper> FindAllByRecordID(SPRecordWrapper recordID) { return(ConvertToWrapperList(businessProxy.FindAllByRecordID(recordID.Entity))); }
public static List <SPRecordExtendInfoWrapper> FindAllByOrderByAndFilterAndRecordID(string orderByColumnName, bool isDesc, SPRecordWrapper recordID, PageQueryParams pageQueryParams) { return(ConvertToWrapperList(businessProxy.FindAllByOrderByAndFilterAndRecordID(orderByColumnName, isDesc, recordID.Entity, pageQueryParams))); }
public bool ProcessRequest(IDataAdapter httpRequestLog, bool statusOk, out RequestErrorType requestError, out string errorMessage) { requestError = RequestErrorType.NoError; errorMessage = ""; string linkid = GetLinkID(httpRequestLog); if (string.IsNullOrEmpty(linkid)) { requestError = RequestErrorType.NoLinkID; errorMessage = " 通道 ‘" + Name + "’ 请求失败:没有LinkID ."; return(false); } if (this.CheckLinkIDIsExisted(linkid)) { requestError = RequestErrorType.RepeatLinkID; errorMessage = " 通道 ‘" + Name + "’ 请求失败:重复的LinkID (缓存检查) ."; return(false); } string mo = this.ChannelParams.MoFromRequset(httpRequestLog); if (this.ChannelType == DictionaryConst.Dictionary_ChannelType_IVRChannel_Key) { mo = "ivr"; } string spcode = this.ChannelParams.SPCodeFromRequset(httpRequestLog); string mobile = this.ChannelParams.MobileFromRequset(httpRequestLog); string province = ""; string city = ""; string mobileOperator = ""; PhoneArea phoneArea = this.GetProvinceAndCity(mobile); if (phoneArea != null) { if (!string.IsNullOrEmpty(phoneArea.Province)) { province = phoneArea.Province; } else { province = ""; } if (!string.IsNullOrEmpty(phoneArea.City)) { city = phoneArea.City; } else { city = ""; } if (!string.IsNullOrEmpty(phoneArea.OperatorType)) { mobileOperator = phoneArea.OperatorType; } else { mobileOperator = ""; } } SPCodeWrapper matchCode = null; if (this.ChannelType == DictionaryConst.Dictionary_ChannelType_IVRChannel_Key) { matchCode = this.GetMatchCodeFromIVRRequest(httpRequestLog, spcode, province, city); } else { matchCode = this.GetMatchCodeFromRequest(httpRequestLog, mo, spcode, province, city); } if (matchCode == null) { requestError = RequestErrorType.NoChannelClientSetting; errorMessage = "请求失败:通道‘" + Name + "’请求未能找到匹配的代码设置。"; return(false); } SPClientCodeRelationWrapper clientCodeRelation = matchCode.GetRelateClientCodeRelation(); //如果存在指令,但是不存在对应的分配关系,转到默认匹配 if (clientCodeRelation == null) { clientCodeRelation = this.GetDefaultClientCodeRelation(); //如果是指令没有分配下家如何处理。 //matchCode = clientCodeRelation.CodeID; } SPRecordWrapper record = new SPRecordWrapper(); record.ChannelID = this; record.CodeID = matchCode; record.ClientID = clientCodeRelation.ClientID; record.ClientCodeRelationID = clientCodeRelation; record.Mo = mo; record.Mobile = mobile; record.LinkID = linkid; record.SpNumber = spcode; record.Province = province; record.City = city; record.OperatorType = mobileOperator; record.CreateDate = GetRecordTime(httpRequestLog); record.IsReport = false; record.IsStatOK = statusOk; record.IsIntercept = this.CaculteIsIntercept(matchCode, clientCodeRelation); if (record.IsIntercept) { record.IsSycnToClient = false; record.IsSycnSuccessed = false; record.SycnRetryTimes = 0; } else { if (!clientCodeRelation.SyncData) { record.IsSycnToClient = false; record.IsSycnSuccessed = false; record.SycnRetryTimes = 0; } else { record.IsSycnToClient = true; record.IsSycnSuccessed = false; record.SycnRetryTimes = 0; } } record.Price = clientCodeRelation.Price; record.Count = GetRecordCount(httpRequestLog); SPRecordExtendInfoWrapper spRecordExtendInfo = new SPRecordExtendInfoWrapper(); spRecordExtendInfo.StartTime = this.ChannelParams.StartTimeFromRequset(httpRequestLog); spRecordExtendInfo.EndTime = this.ChannelParams.EndTimeFromRequset(httpRequestLog); spRecordExtendInfo.FeeTime = this.ChannelParams.FeeTimeFromRequset(httpRequestLog); spRecordExtendInfo.State = this.ChannelParams.StateFromRequset(httpRequestLog); spRecordExtendInfo.Ip = httpRequestLog.RequestIp; spRecordExtendInfo.RequestContent = httpRequestLog.RequestData; spRecordExtendInfo.ExtendField1 = this.ChannelParams.ExtendField1FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField2 = this.ChannelParams.ExtendField2FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField3 = this.ChannelParams.ExtendField3FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField4 = this.ChannelParams.ExtendField4FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField5 = this.ChannelParams.ExtendField5FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField6 = this.ChannelParams.ExtendField6FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField7 = this.ChannelParams.ExtendField7FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField8 = this.ChannelParams.ExtendField8FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField9 = this.ChannelParams.ExtendField9FromRequset(httpRequestLog); spRecordExtendInfo.ExtendField10 = this.ChannelParams.ExtendField10FromRequset(httpRequestLog); try { bool result = SPRecordWrapper.InsertPayment(record, spRecordExtendInfo, out requestError, out errorMessage); if (!result && requestError == RequestErrorType.RepeatLinkID) { requestError = RequestErrorType.RepeatLinkID; errorMessage = " 通道 ‘" + Name + "’ 请求失败:重复的LinkID(查询排重 异常排重) ."; return(false); } requestError = RequestErrorType.NoError; errorMessage = ""; try { CacheProviderFactory.GetLinkIDCache().AddLinkIDs(linkid, this.Id); } catch (Exception ex) { Logger.Error(ex.Message); } record.SycnToClient(); return(true); } catch (Exception ex) { requestError = RequestErrorType.DataSaveError; errorMessage = "请求失败:插入数据失败,错误信息:" + ex.Message; return(false); } }