Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }