/// <summary> /// 计算费率 /// </summary> /// <param name="totalAmount">金额(元)</param> /// <param name="rate">费率%</param> /// <returns></returns> public static decimal CalcFee(decimal totalAmount, MerchantChannelModel merchObj) { var svc = new CommonPayService(); var payChannelObj = svc.GetPayChannelDetail(merchObj); var monthTotalAmt = svc.GetMonthTotalTradeAmt(DateTime.Now, merchObj.MchId); decimal rst = payChannelObj.SingleServFeeLowLimit; var curMonthTotalAmt = monthTotalAmt + totalAmount; if (curMonthTotalAmt > payChannelObj.MonthFreeTradeAmount) { //计算费率 var freeAmt = totalAmount; if (monthTotalAmt < payChannelObj.MonthFreeTradeAmount) { freeAmt = curMonthTotalAmt - payChannelObj.MonthFreeTradeAmount; } if (freeAmt > 0) { decimal per = 0.01m; rst = freeAmt * payChannelObj.OverServiceRate * per; if (rst < payChannelObj.SingleServFeeLowLimit) { rst = payChannelObj.SingleServFeeLowLimit; } if (rst > payChannelObj.SingleServFeeUpLimit) { rst = payChannelObj.SingleServFeeUpLimit; } return(rst); } return(rst); } return(rst); }
/// <summary> /// 根据商户及门店号获得商户门店信息 /// </summary> /// <param name="merchObj"></param> /// <param name="sid"></param> /// <returns></returns> public MerchantStoreChannelModel GetMerchStore(MerchantChannelModel merchObj, string sid) { var query = from tstore in _tStoreRepost.GetQuery() where tstore.CID == merchObj.MchId && tstore.StoreNum == sid && tstore.State == (short)TraderStoreState.Enabled select new MerchantStoreChannelModel() { SID = tstore.StoreNum, StoreId3 = tstore.StoreNum3 }; var store = query.FirstOrDefault(); if (store != null) { var obj = new MerchantStoreChannelModel(merchObj); obj.SID = store.SID; obj.StoreId3 = store.StoreId3; return(obj); } return(null); }
/// <summary> /// 根据ApiNo获取收单渠道细目信息 /// </summary> /// <param name="merchObj"></param> /// <returns></returns> public PayChannelModel GetPayChannelDetail(MerchantChannelModel merchObj) { PayChannelMgRepost = new BaseRepository <PayChannelManage>(); PayChannelDetailRepost = new BaseRepository <PayChannelDetail>(); var query = from pcd in PayChannelDetailRepost.GetQuery() join jpcm in PayChannelMgRepost.GetQuery() on pcd.ChannelNo equals jpcm.ChannelNo into ipcm from pcm in ipcm.DefaultIfEmpty() where pcd.ChannelNo == merchObj.ChannelNo && pcm.State == (short)PayChannelState.Enabled && pcd.ChannelPayMode == merchObj.ChannelPayMode && (pcd.OptType.Contains(merchObj.OptType.ToString()) || pcd.OptType.Contains("0")) select new PayChannelModel() { ApiNo = merchObj.ApiNo, OptType = merchObj.OptType, ChannelPayMode = merchObj.ChannelPayMode, MonthFreeTradeAmount = pcd.MonthFreeTradeAmount, OverServiceRate = pcd.OverServiceRate, SingleServFeeLowLimit = pcd.SingleServFeeLowLimit, SingleServFeeUpLimit = pcd.SingleServFeeUpLimit }; var rst = query.FirstOrDefault(); return(rst); }