Эх сурвалжийг харах

添加存量和新增分润类

lcl 1 жил өмнө
parent
commit
1ec97f16f3

+ 1061 - 0
AppStart/Helper/Profit/ProfitAfterHelper.cs

@@ -0,0 +1,1061 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using MySystem.PxcModels;
+using Library;
+using System.Threading;
+using Microsoft.Extensions.Hosting;
+using System.Threading.Tasks;
+
+namespace MySystem
+{
+    public class ProfitAfterHelper
+    {
+        public readonly static ProfitAfterHelper Instance = new ProfitAfterHelper();
+        private ProfitAfterHelper()
+        {
+        }
+        
+        #region 获取分润规则Id
+
+        public int GetLevelKindId(int BrandId, int Help, int BankCardType)
+        {
+            return RedisDbconn.Instance.Get<int>("pobjlv:kid:" + BrandId + ":" + Help + ":" + BankCardType);
+        }
+
+        #endregion
+        
+        #region POS分润算法
+        public void StatProfit()
+        {
+            Thread th = new Thread(StatProfitDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatProfitDo()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoProfitQueue");
+                if(!string.IsNullOrEmpty(content) && DateTime.Now.Day < 14)
+                {
+                    StatProfiting();
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+        public void StatProfiting()
+        {
+            string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+            string check = function.ReadInstance("/ProfitStat/" + Month + "-1.txt");
+            if (!string.IsNullOrEmpty(check))
+            {
+                return;
+            }
+            function.WritePage("/ProfitStat/", Month + "-1.txt", DateTime.Now.ToString());
+            try
+            {
+                WebCMSEntities db = new WebCMSEntities();
+                ReadModels.WebCMSEntities rdb = new ReadModels.WebCMSEntities();
+                List<int> BrandIds = rdb.KqProducts.OrderBy(m => m.Id).ToList().Select(m => m.Id).ToList();
+                foreach (int i in BrandIds) //品牌
+                {
+                    for (int j = 0; j <= 1; j++) //卡类型
+                    {
+                        int PageNum = 1;
+                        bool op = true;
+                        while(op)
+                        {
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "BrandId:" + i + ",BankCardType:" + j + ",Month:" + Month + ",PageNum:" + PageNum, "分润监控日志");
+                            List<ProfitResult> result = StartProftForPosByDate(i, j, Month, PageNum);
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "result:" + result.Count, "分润监控日志");
+                            function.WriteLog("\r\n", "分润监控日志");
+                            if(result.Count > 0)
+                            {
+                                foreach (ProfitResult sub in result)
+                                {
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(sub.UserNav))
+                                    {
+                                        string[] UserNavList = sub.UserNav.Trim(',').Replace(",,", ",").Split(',');
+                                        if (UserNavList.Length > 1)
+                                        {
+                                            TopUserId = int.Parse(UserNavList[1]);
+                                        }
+                                        else
+                                        {
+                                            TopUserId = int.Parse(UserNavList[0]);
+                                        }
+                                    }
+                                    string RecordNo = "P" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
+                                    decimal ProfitAmt = sub.Money;
+                                    decimal TradeAmt = sub.TradeAmount;
+                                    decimal ProfitRate = sub.ProfitRate;
+                                    if (sub.IsSubsidy == 1 && j == 1)
+                                    {
+                                    }
+                                    else
+                                    {
+                                        decimal CreditTradeAmt = 0;
+                                        decimal CreditTradeProfit = 0;
+                                        decimal QrCreditTradeAmt = 0;
+                                        decimal QrCreditProfitRate = 0;
+                                        decimal QrCreditProfitStandardRate = 0;
+                                        decimal QrCreditAddOrSubRate = 0;
+                                        decimal QrCreditTradeProfit = 0;
+                                        decimal NonQrCreditTradeAmt = 0;
+                                        decimal NotHelpCreditTradeAmt = 0;
+                                        decimal NotHelpCreditTradeProfit = 0;
+                                        decimal NotHelpCreditProfitRate = 0;
+                                        decimal NotHelpCreditProfitStandardRate = 0;
+                                        decimal NotHelpCreditAddOrSubRate = 0;
+                                        decimal HelpCreditTradeAmt = 0;
+                                        decimal NonQrCreditTradeProfit = 0;
+                                        decimal HelpCreditTradeProfit = 0;
+                                        decimal HelpCreditProfitRate = 0;
+                                        decimal HelpCreditProfitStandardRate = 0;
+                                        decimal HelpCreditAddOrSubRate = 0;
+                                        decimal DebitNonCapTradeAmt = 0;
+                                        decimal DebitCapTradeAmt = 0;
+                                        decimal QrDebitNotCapTradeAmt = 0;
+                                        decimal NonQrDebitNotCapTradeAmt = 0;
+                                        decimal NotHelpDebitNonCapTradeAmt = 0;
+                                        decimal HelpDebitNonCapTradeAmt = 0;
+                                        decimal DebitNonTradeCapProfit = 0;
+                                        decimal QrDebitNonTradeCapProfit = 0;
+                                        decimal NonQrDebitNonTradeCapProfit = 0;
+                                        decimal NotHelpDebitNonTradeCapProfit = 0;
+                                        decimal HelpDebitNonTradeCapProfit = 0;
+                                        decimal DebitTradeCapProfit = 0;
+                                        decimal NotHelpDebitProfitRate = 0;
+                                        decimal NotHelpDebitProfitStandardRate = 0;
+                                        decimal NotHelpDebitAddOrSubRate = 0;
+                                        decimal HelpDebitProfitRate = 0;
+                                        decimal HelpDebitProfitStandardRate = 0;
+                                        decimal HelpDebitAddOrSubRate = 0;
+                                        decimal DebitCapSingleReward = 0;
+                                        decimal QrDebitProfitRate = 0;
+                                        decimal QrDebitProfitStandardRate = 0;
+                                        decimal QrDebitAddOrSubRate = 0;
+                                        decimal ProfitCreditTradeProfit = 0;
+                                        decimal ProfitCreditProfitRate = 0;
+                                        decimal ProfitCreditTradeAmt = 0;
+                                        decimal ProfitCreditTradeProfit2 = 0;
+                                        decimal ProfitCreditProfitRate2 = 0;
+                                        decimal ProfitCreditTradeAmt2 = 0;
+                                        decimal ProfitDebitNonCapTradeAmt = 0;
+                                        decimal ProfitDebitNonTradeCapProfit = 0;
+                                        decimal ProfitDebitProfitRate = 0;
+                                        if (j == 1)
+                                        {
+                                            CreditTradeAmt = TradeAmt; //贷记卡交易总金额
+                                            CreditTradeProfit = ProfitAmt; //贷记卡分润总金额
+                                            if (sub.QrPayFlag == 1)
+                                            {
+                                                QrCreditTradeAmt = TradeAmt; //(云闪付)贷记卡交易总金额
+                                                QrCreditProfitRate = ProfitRate; //(云闪付)贷记卡交易分润比例
+                                                QrCreditTradeProfit = ProfitAmt; //(云闪付)贷记卡交易分润
+                                            }
+                                            else
+                                            {
+                                                NonQrCreditTradeAmt = TradeAmt; //(非云闪付)贷记卡交易总金额
+                                                NonQrCreditTradeProfit = ProfitAmt; //(非云闪付)贷记卡交易分润
+                                                if(sub.HelpFlag == 1)
+                                                {
+                                                    HelpCreditTradeProfit = ProfitAmt; //(扶持期)(非云闪付)贷记卡分润总金额
+                                                    HelpCreditProfitRate = ProfitRate; //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    HelpCreditTradeAmt = TradeAmt; //(扶持期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else if(sub.HelpFlag == 2)
+                                                {
+                                                    ProfitCreditTradeProfit = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
+                                                    ProfitCreditProfitRate = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    ProfitCreditTradeAmt = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else if(sub.HelpFlag == 3)
+                                                {
+                                                    ProfitCreditTradeProfit2 = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
+                                                    ProfitCreditProfitRate2 = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    ProfitCreditTradeAmt2 = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else
+                                                {
+                                                    NotHelpCreditTradeAmt = TradeAmt; //(非扶持期)(非云闪付)贷记卡交易总金额
+                                                    NotHelpCreditTradeProfit = ProfitAmt; //(非扶持期)(非云闪付)贷记卡分润总金额
+                                                    NotHelpCreditProfitRate = ProfitRate; //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                                }
+                                            }
+                                        }
+                                        if (j == 0)
+                                        {
+                                            if (sub.Money < 1)
+                                            {
+                                                DebitNonCapTradeAmt = TradeAmt; //商户非封顶借记卡交易总额
+                                                DebitNonTradeCapProfit = ProfitAmt; //借记卡非封顶交易分润总金额
+                                            }
+                                            else
+                                            {
+                                                DebitCapTradeAmt = TradeAmt; //商户借记卡封顶交易总额
+                                                DebitCapSingleReward = ProfitAmt; //借记卡合伙人直营封顶交易奖励金额
+                                                DebitTradeCapProfit = ProfitAmt; //借记卡封顶交易分润总金额
+                                            }
+                                            if (sub.QrPayFlag == 1)
+                                            {
+                                                if (sub.Money < 1)
+                                                {
+                                                    QrDebitNotCapTradeAmt = TradeAmt; //(云闪付)商户非封顶借记卡交易总额
+                                                    QrDebitProfitRate = ProfitRate; //(云闪付)借记卡非封顶交易分润比例
+                                                    QrDebitNonTradeCapProfit = ProfitAmt; //(云闪付)借记卡非封顶交易分润总金额
+                                                }
+                                            }
+                                            else
+                                            {
+                                                if (sub.Money < 1)
+                                                {
+                                                    NonQrDebitNonTradeCapProfit = ProfitAmt; //(非云闪付)借记卡非封顶交易分润总金额
+                                                    NonQrDebitNotCapTradeAmt = TradeAmt; //(非云闪付)商户非封顶借记卡交易总额
+                                                }
+                                                if (sub.HelpFlag == 1)
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        HelpDebitNonCapTradeAmt = TradeAmt; //(扶持期)(非云闪付)借记卡非封顶交易总金额
+                                                        HelpDebitNonTradeCapProfit = ProfitAmt; //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    HelpDebitProfitRate = ProfitRate; //(扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                                else if (sub.HelpFlag >= 2)
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        ProfitDebitNonCapTradeAmt = TradeAmt; //(盈利期)(非云闪付)借记卡非封顶交易总金额
+                                                        ProfitDebitNonTradeCapProfit = ProfitAmt; //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    ProfitDebitProfitRate = ProfitRate; //(盈利期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                                else
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        NotHelpDebitNonCapTradeAmt = TradeAmt; //(非扶持期)(非云闪付)借记卡非封顶交易总金额
+                                                        NotHelpDebitNonTradeCapProfit = ProfitAmt; //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    NotHelpDebitProfitRate = ProfitRate; //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                            }
+                                        }
+                                        db.ProfitRewardRecord.Add(new ProfitRewardRecord()
+                                        {
+                                            Version = 2,
+                                            CreateDate = DateTime.Now,
+                                            UpdateDate = DateTime.Now,
+                                            UserId = sub.UserId, //创客
+                                            MerchantId = sub.MerchantId, //商户
+                                            BrandId = sub.BrandId, //品牌
+                                            ProfitType = sub.DirectFlag, //创客分润类型
+                                            TradeAmt = sub.TradeAmount, //商户交易总额
+                                            TradeProfit = sub.Money, //交易分润
+                                            TradeMonth = Month, //交易月
+                                            RecordNo = RecordNo, //记录单号
+                                            TopUserId = TopUserId, //顶级创客
+                                            CreditTradeAmt = CreditTradeAmt, //贷记卡交易总金额
+                                            QrCreditTradeAmt = QrCreditTradeAmt, //(云闪付)贷记卡交易总金额
+                                            NonQrCreditTradeAmt = NonQrCreditTradeAmt, //(非云闪付)贷记卡交易总金额
+                                            NotHelpCreditTradeAmt = NotHelpCreditTradeAmt, //(非扶持期)(非云闪付)贷记卡交易总金额
+                                            HelpCreditTradeAmt = HelpCreditTradeAmt, //(扶持期)(非云闪付)贷记卡交易总金额
+                                            DebitNonCapTradeAmt = DebitNonCapTradeAmt, //商户非封顶借记卡交易总额
+                                            QrDebitNotCapTradeAmt = QrDebitNotCapTradeAmt, //(云闪付)商户非封顶借记卡交易总额
+                                            NonQrDebitNotCapTradeAmt = NonQrDebitNotCapTradeAmt, //(非云闪付)商户非封顶借记卡交易总额
+                                            NotHelpDebitNonCapTradeAmt = NotHelpDebitNonCapTradeAmt, //(非扶持期)(非云闪付)借记卡非封顶交易总金额
+                                            HelpDebitNonCapTradeAmt = HelpDebitNonCapTradeAmt, //(扶持期)(非云闪付)借记卡非封顶交易总金额
+                                            DebitCapTradeAmt = DebitCapTradeAmt, //商户借记卡封顶交易总额
+                                            CreditTradeProfit = CreditTradeProfit, //贷记卡分润总金额
+                                            QrCreditTradeProfit = QrCreditTradeProfit, //(云闪付)贷记卡交易分润
+                                            NonQrCreditTradeProfit = NonQrCreditTradeProfit, //(非云闪付)贷记卡交易分润
+                                            NotHelpCreditTradeProfit = NotHelpCreditTradeProfit, //(非扶持期)(非云闪付)贷记卡分润总金额
+                                            HelpCreditTradeProfit = HelpCreditTradeProfit, //(扶持期)(非云闪付)贷记卡分润总金额
+                                            DebitNonTradeCapProfit = DebitNonTradeCapProfit, //借记卡非封顶交易分润总金额
+                                            QrDebitNonTradeCapProfit = QrDebitNonTradeCapProfit, //(云闪付)借记卡非封顶交易分润总金额
+                                            NonQrDebitNonTradeCapProfit = NonQrDebitNonTradeCapProfit, //(非云闪付)借记卡非封顶交易分润总金额
+                                            NotHelpDebitNonTradeCapProfit = NotHelpDebitNonTradeCapProfit, //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                            HelpDebitNonTradeCapProfit = HelpDebitNonTradeCapProfit, //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                            DebitTradeCapProfit = DebitTradeCapProfit, //借记卡封顶交易分润总金额
+                                            NotHelpCreditProfitRate = NotHelpCreditProfitRate, //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                            NotHelpCreditProfitStandardRate = NotHelpCreditProfitStandardRate, //(非扶持期)(非云闪付)贷记卡标准分润比例
+                                            NotHelpCreditAddOrSubRate = NotHelpCreditAddOrSubRate, //(非扶持期)(非云闪付)贷记卡成本或增或减比例
+                                            HelpCreditProfitRate = HelpCreditProfitRate, //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                            HelpCreditProfitStandardRate = HelpCreditProfitStandardRate, //(扶持期)(非云闪付)贷记卡-标准分润比例
+                                            HelpCreditAddOrSubRate = HelpCreditAddOrSubRate, //(扶持期)(非云闪付)贷记卡成本或增或减比例
+                                            NotHelpDebitProfitRate = NotHelpDebitProfitRate, //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                            NotHelpDebitProfitStandardRate = NotHelpDebitProfitStandardRate, //(非扶持期)(非云闪付)借记卡标准分润比例
+                                            NotHelpDebitAddOrSubRate = NotHelpDebitAddOrSubRate, //(非扶持期)(非云闪付)借记卡成本或增或减比例
+                                            HelpDebitProfitRate = HelpDebitProfitRate, //(扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                            HelpDebitProfitStandardRate = HelpDebitProfitStandardRate, //(扶持期)(非云闪付)借记卡-标准分润比例
+                                            HelpDebitAddOrSubRate = HelpDebitAddOrSubRate, //(扶持期)(非云闪付)借记卡成本或增或减比例
+                                            DebitCapSingleReward = DebitCapSingleReward, //借记卡合伙人直营封顶交易奖励金额
+                                            QrCreditProfitRate = QrCreditProfitRate, //(云闪付)贷记卡交易分润比例
+                                            QrCreditProfitStandardRate = QrCreditProfitStandardRate, //(云闪付)贷记卡分润基准
+                                            QrCreditAddOrSubRate = QrCreditAddOrSubRate, //(云闪付)贷记卡分润比例或增或减
+                                            QrDebitProfitRate = QrDebitProfitRate, //(云闪付)借记卡非封顶交易分润比例
+                                            QrDebitProfitStandardRate = QrDebitProfitStandardRate, //(云闪付)借记卡非封顶交易分润基准
+                                            QrDebitAddOrSubRate = QrDebitAddOrSubRate, //(云闪付)借记卡非封顶交易分润比例或增或减
+                                            ProfitCreditTradeProfit = ProfitCreditTradeProfit,  //(盈利期)(非云闪付)贷记卡分润总金额
+                                            ProfitCreditProfitRate = ProfitCreditProfitRate, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                            ProfitCreditTradeAmt = ProfitCreditTradeAmt, //(盈利期)(非云闪付)贷记卡交易总金额
+                                            ProfitCreditTradeProfit2 = ProfitCreditTradeProfit2,  //(盈利期)(非云闪付)贷记卡分润总金额
+                                            ProfitCreditProfitRate2 = ProfitCreditProfitRate2, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                            ProfitCreditTradeAmt2 = ProfitCreditTradeAmt2, //(盈利期)(非云闪付)贷记卡交易总金额
+                                            ProfitDebitNonCapTradeAmt = ProfitDebitNonCapTradeAmt, //(盈利期)(非云闪付)借记卡非封顶交易总金额
+                                            ProfitDebitNonTradeCapProfit = ProfitDebitNonTradeCapProfit, //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
+                                            ProfitDebitProfitRate = ProfitDebitProfitRate, //(盈利期)(非云闪付)借记卡商户交易对应分润比例
+                                        });
+                                        // db.SaveChanges();
+                                    }
+                                }
+                                db.SaveChanges();
+                                PageNum += 1;
+                            }
+                            else
+                            {
+                                op = false;
+                            }
+                        }
+                    }
+                }
+                db.Dispose();
+                rdb.Dispose();
+            }
+            catch(Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "分润监控异常");
+            }
+
+            HelpProfitHelper.Instance.StatProfitEveryDay(DateTime.Now.AddMonths(-1).ToString("yyyyMM")); //助利宝分润
+            ProfitCheckHelper.Instance.Start();
+
+            // ProfitHelper.Instance.StatProfit();
+        }
+        public List<ProfitResult> StartProftForPosByDate(int BrandId, int BankCardType, string Month, int PageNum = 1)
+        {
+            // 级差
+            /*   
+                
+                K1 - K5:无大小市场要求,无押机分润比例为有押金机的70%,如K1的有押金机分润比例为万6,则无押机的分润比例为万4.2
+                                      机具激活大于90天,分润比例为原比例的70%
+
+                        if(is0y){
+                            分润比例为原比例的70%
+                        }
+                        if(ActivityDate > now - 90){
+                            分润比例为原比例的70%
+                        }
+                K6 - K9:
+                    K6:至少有1个直推大于3000万,且总交易额减去3000万大于1200万,则获得分红奖(月月红)直接级差
+                    K7:总交易额减去最大交易额的直推,大于4000万,则获得分红奖(月月红)直接级差
+                    K8:总交易额减去最大交易额的直推,大于12000万,则获得分红奖(月月红)直接级差
+                    K9:总交易额减去最大交易额的直推,大于32000万,则获得分红奖(月月红)直接级差
+
+                补贴:
+                    0押金无补贴
+                    机具激活90天内,机具所属创客获得万10置顶
+                    若创客为商户型创客,则机具UserId的创客获得万4分润
+
+                    //查分润
+                    select u.MakerCode,u.RealName,u.UserLevel,r.Rank,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,CreditTradeProfit,QrCreditTradeAmt,QrCreditTradeProfit,NonQrCreditTradeAmt,NonQrCreditTradeProfit,HelpCreditTradeAmt,HelpCreditTradeProfit,NotHelpCreditTradeAmt,NotHelpCreditTradeProfit,DebitTradeAmt,DebitTradeProfit from (
+                    select UserId,ProfitType,BrandId,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(CreditTradeProfit) as CreditTradeProfit,
+                    sum(QrCreditTradeAmt) as QrCreditTradeAmt,
+                    sum(QrCreditTradeProfit) as QrCreditTradeProfit,
+                    sum(NonQrCreditTradeAmt) as NonQrCreditTradeAmt,
+                    sum(NonQrCreditTradeProfit) as NonQrCreditTradeProfit,
+                    sum(HelpCreditTradeAmt) as HelpCreditTradeAmt,
+                    sum(HelpCreditTradeProfit) as HelpCreditTradeProfit,
+                    sum(NotHelpCreditTradeAmt) as NotHelpCreditTradeAmt,
+                    sum(NotHelpCreditTradeProfit) as NotHelpCreditTradeProfit,
+                    sum(DebitNonCapTradeAmt+DebitCapTradeAmt) as DebitTradeAmt,
+                    sum(DebitNonTradeCapProfit+DebitTradeCapProfit) as DebitTradeProfit 
+                    from ProfitRewardRecord where TradeMonth='202208' 
+                    GROUP BY UserId,ProfitType,BrandId
+                    ) tb 
+                    left join Users u on tb.UserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join UserRankWhite r on u.Id=r.Id and r.CreateDate<'2022-09-01 00:00:00' and r.UpdateDate>'2022-09-01 00:00:00' 
+                    ORDER BY u.MakerCode
+
+                    //查补贴
+                    select u.MakerCode,u.RealName,u.UserLevel,r.Rank,(case when SubsidyType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,SubsidyProfit from (
+                    select SubsidyUserId,BrandId,SubsidyType,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(SubsidyProfitRate) as SubsidyProfit
+                    from ProfitSubsidyDetail where TradeMonth='202206' 
+                    GROUP BY SubsidyUserId,BrandId,SubsidyType
+                    ) tb 
+                    left join Users u on tb.SubsidyUserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join UserRankWhite r on u.Id=r.Id 
+
+                    // TODO:做到后台查询,换绑机器遗漏交易额补差
+                    select UserId,sum(TradeAmount) from TradeRecord where SnNo in (
+                    select PosSn from PosMachinesTwo where UserId=0 and BuyUserId=0 and CreditTrade>0
+                    ) and CreateDate>='2022-04-01 00:00:00' and CreateDate<'2022-05-01 00:00:00' and UserId>0 group by UserId
+
+            */
+
+            int PageSize = 200;
+            int SkipNum = (PageNum - 1) * PageSize;
+            string LimitString = " limit " + PageSize;
+            if(PageNum > 1)
+            {
+                LimitString = " limit " + SkipNum + "," + PageSize;
+            }
+            List<ProfitResult> result = new List<ProfitResult>();
+            ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj1");
+            if (obj.Status == 1) //判断分润是否开启
+            {
+                string sqlstr = "";
+                if (BankCardType == 1)
+                {
+                    sqlstr = "select UserId,QrPayFlag,HelpDirectTradeAmt,NotHelpDirectTradeAmt,ProfitDirectTradeAmt from CreditTradeDaySummary" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                if (BankCardType == 0)
+                {
+                    sqlstr = "select UserId,QrPayFlag,HelpDirectDebitTradeAmt,NotHelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitCapNum,ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum from DebitTradeDaySummary" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "分润监控日志");
+                DataTable dt = GetDataTable(sqlstr);
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "分润监控日志");
+                if(dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        WebCMSEntities dbnew = new WebCMSEntities();
+                        try
+                        {
+                            int UserId = int.Parse(dr["UserId"].ToString());
+                            int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
+                            List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                            SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
+                            int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:1:HelpPolicy:Days")); //天数
+                            if (BankCardType == 0)
+                            {
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":借记卡", "分润监控日志");
+                                decimal HelpDirectDebitTradeAmt = decimal.Parse(dr[2].ToString()); //借记卡扶持期交易额
+                                decimal NotHelpDirectDebitTradeAmt = decimal.Parse(dr[3].ToString()); //借记卡稳定期交易额
+                                decimal ProfitDirectDebitTradeAmt = decimal.Parse(dr[8].ToString()); //借记卡扶持期交易额
+                                decimal HelpDirectDebitCapTradeAmt = decimal.Parse(dr[4].ToString()); //借记卡扶持期封顶交易额
+                                decimal NotHelpDirectDebitCapTradeAmt = decimal.Parse(dr[5].ToString()); //借记卡稳定期封顶交易额
+                                decimal ProfitDirectDebitCapTradeAmt = decimal.Parse(dr[9].ToString()); //借记卡扶持期封顶交易额
+                                int HelpDirectDebitCapNum = int.Parse(dr[6].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
+                                int NotHelpDirectDebitCapNum = int.Parse(dr[7].ToString().Split('.')[0]); //借记卡稳定期封顶交易笔数
+                                int ProfitDirectDebitCapNum = int.Parse(dr[10].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
+                                int UserLevel = selfUser.UserLevel; //当前会员等级
+                                decimal getLevelProfit = (HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt - HelpDirectDebitCapTradeAmt - NotHelpDirectDebitCapTradeAmt - ProfitDirectDebitCapTradeAmt) * 0.0006M + HelpDirectDebitCapNum + NotHelpDirectDebitCapNum + ProfitDirectDebitCapNum;
+                                result.Add(new ProfitResult()
+                                {
+                                    UserId = selfUser.Id,
+                                    UserNav = selfUser.ParentNav,
+                                    Money = PublicFunction.NumberFormat(getLevelProfit),
+                                    ProfitRate = 0.0006M,
+                                    Message = "储蓄卡分润",
+                                    BankCardType = BankCardType,
+                                    QrPayFlag = QrPayFlag,
+                                    BrandId = BrandId,
+                                    DirectFlag = 1,
+                                    IsSubsidy = 0,
+                                    TradeAmount = HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt,
+                                });
+                            }
+                            else
+                            {
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "分润监控日志");
+                                decimal HelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡扶持期交易额
+                                decimal NotHelpDirectTradeAmt = decimal.Parse(dr[3].ToString()); //贷记卡稳定期交易额
+                                decimal ProfitDirectTradeAmt = decimal.Parse(dr[4].ToString()); //贷记卡盈利期期交易额
+                                int maxLevel = obj.MaxLevel; //最大等级
+                                decimal diffLevelProfit = 0;  //等级级差
+                                int curLevel = 0; //当前层级的会员等级
+                                string ParentNav = selfUser.ParentNav;
+                                if (string.IsNullOrEmpty(ParentNav))
+                                {
+                                    ParentNav = ",0,";
+                                }
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "分润监控日志");
+                                if (!string.IsNullOrEmpty(ParentNav))
+                                {
+                                    ParentNav += "," + UserId + ",";
+                                    string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                    Array.Reverse(ParentNavList); //反转顺序
+                                    int level = 0;
+                                    DateTime now = DateTime.Now;
+                                    DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":扶持期:" + HelpDirectTradeAmt, "分润监控日志");
+                                    if (HelpDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        decimal checkProfit = HelpDirectTradeAmt * 0.0012M;
+                                        decimal curProfit = 0;
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 1, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                        getLevelProfit += HelpDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        int DirectFlag = selfUser.Id == user.Id ? 1 : 0;
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            DirectFlag = DirectFlag,
+                                                            BrandId = BrandId,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = HelpDirectTradeAmt,
+                                                            HelpFlag = 1,
+                                                        });
+                                                        curProfit += getLevelProfit;
+                                                        function.WriteLog(user.Id + "-" + UserLevel + "-" + HelpDirectTradeAmt + "-" + DirectFlag + "-扶持期分润:" + getLevelProfit, "分润监控日志");
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                        if(curProfit > checkProfit)
+                                        {
+                                            decimal more = curProfit - checkProfit;
+                                            function.WriteLog("超标了:" + more, "分润监控日志");
+                                        }
+                                    }
+                                    function.WriteLog("------------------------", "分润监控日志");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":稳定期:" + NotHelpDirectTradeAmt, "分润监控日志");
+                                    if (NotHelpDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 0, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                        getLevelProfit += NotHelpDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            BrandId = BrandId,
+                                                            DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = NotHelpDirectTradeAmt,
+                                                            HelpFlag = 0,
+                                                        });
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                    }
+                                    function.WriteLog("------------------------", "分润监控日志");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期:" + ProfitDirectTradeAmt, "分润监控日志");
+                                    if (ProfitDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 2, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            BrandId = BrandId,
+                                                            DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = ProfitDirectTradeAmt,
+                                                            HelpFlag = 2,
+                                                        });
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "分润监控日志");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
+                        }
+                        dbnew.Dispose();
+                    }
+                }
+
+
+                sqlstr = "";
+                if (BankCardType == 1)
+                {
+                    sqlstr = "select UserId,QrPayFlag,ProfitDirectTradeAmt from CreditTradeDaySummary2" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "分润监控日志");
+                dt = GetDataTable(sqlstr);
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "分润监控日志");
+                if(dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        WebCMSEntities dbnew = new WebCMSEntities();
+                        try
+                        {
+                            int UserId = int.Parse(dr["UserId"].ToString());
+                            int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
+                            List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                            SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "分润监控日志");
+                            decimal ProfitDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡盈利期期交易额
+                            int maxLevel = obj.MaxLevel; //最大等级
+                            decimal diffLevelProfit = 0;  //等级级差
+                            int curLevel = 0; //当前层级的会员等级
+                            string ParentNav = selfUser.ParentNav;
+                            if (string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav = ",0,";
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "分润监控日志");
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav += "," + UserId + ",";
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                Array.Reverse(ParentNavList); //反转顺序
+                                int level = 0;
+                                DateTime now = DateTime.Now;
+                                DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");                                
+                                function.WriteLog("------------------------", "分润监控日志");
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期2:" + ProfitDirectTradeAmt, "分润监控日志");
+                                if (ProfitDirectTradeAmt > 0)
+                                {
+                                    level = 0;
+                                    curLevel = 0;
+                                    diffLevelProfit = 0;  //等级级差
+                                    foreach (string UserIdString in ParentNavList)
+                                    {
+                                        level += 1;
+                                        int uid = int.Parse(UserIdString);
+                                        SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                        int UserLevel = GetUserLevel(user); //当前会员等级
+                                        if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                        {
+                                            break;
+                                        }
+                                        if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                        {
+                                            int LevelKindId = GetLevelKindId(1, 3, 1);
+                                            ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                            if (objlevel != null)
+                                            {
+                                                decimal getLevelProfit = 0;  //等级分润
+                                                if (objlevel.Percents > 0)
+                                                {
+                                                    getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
+                                                }
+                                                if (objlevel.AddProfitVal > 0)
+                                                {
+                                                    getLevelProfit += objlevel.AddProfitVal;
+                                                }
+                                                decimal money = getLevelProfit;
+                                                getLevelProfit -= diffLevelProfit;
+                                                if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                {
+                                                    diffLevelProfit = money;
+                                                }
+                                                if (getLevelProfit >= obj.MinProfitVal)
+                                                {
+                                                    result.Add(new ProfitResult()
+                                                    {
+                                                        UserId = user.Id,
+                                                        UserNav = user.ParentNav,
+                                                        Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                        ProfitRate = objlevel.Percents,
+                                                        Message = "交易分润",
+                                                        BankCardType = BankCardType,
+                                                        QrPayFlag = QrPayFlag,
+                                                        BrandId = BrandId,
+                                                        DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                        IsSubsidy = 0,
+                                                        TradeAmount = ProfitDirectTradeAmt,
+                                                        HelpFlag = 3,
+                                                    });
+                                                }
+                                            }
+                                        }
+                                        if(curLevel < UserLevel)
+                                        {
+                                            curLevel = UserLevel;
+                                        }
+                                    }
+                                }
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "分润监控日志");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
+                        }
+                        dbnew.Dispose();
+                    }
+                }
+            }
+            return result;
+        }
+
+        public List<ProfitResult> StartProftForSimByDate(string Month, int BrandId = 14, int PageNum = 1)
+        {
+            int PageSize = 200;
+            int SkipNum = (PageNum - 1) * PageSize;
+            string LimitString = " limit " + PageSize;
+            if(PageNum > 1)
+            {
+                LimitString = " limit " + SkipNum + "," + PageSize;
+            }
+            List<ProfitResult> result = new List<ProfitResult>();
+            ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj" + BrandId);
+            if (obj.Status == 1) //判断分润是否开启
+            {
+                string sqlstr = "select UserId,sum(HelpTradeAmount),sum(NotHelpTradeAmount) from SimCardDaySummary where TradeMonth='" + Month + "' and SeoTitle='self'" + LimitString;
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "广电卡分润监控日志");
+                DataTable dt = GetDataTable(sqlstr);
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "广电卡分润监控日志");
+                if(dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        WebCMSEntities dbnew = new WebCMSEntities();
+                        try
+                        {
+                            int UserId = int.Parse(dr["UserId"].ToString());
+                            List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                            SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
+                            int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:" + BrandId + ":HelpPolicy:Days")); //天数
+                            
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "", "广电卡分润监控日志");
+                            decimal HelpDirectTradeAmt = decimal.Parse(dr[1].ToString()); //扶持期交易额
+                            decimal NotHelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //稳定期交易额
+                            int maxLevel = obj.MaxLevel; //最大等级
+                            decimal diffLevelProfit = 0;  //等级级差
+                            int curLevel = 0; //当前层级的会员等级
+                            string ParentNav = selfUser.ParentNav;
+                            if (string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav = ",0,";
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "广电卡分润监控日志");
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav += "," + UserId + ",";
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                Array.Reverse(ParentNavList); //反转顺序
+                                int level = 0;
+                                DateTime now = DateTime.Now;
+                                DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":扶持期:" + HelpDirectTradeAmt, "广电卡分润监控日志");
+                                if (HelpDirectTradeAmt > 0)
+                                {
+                                    level = 0;
+                                    curLevel = 0;
+                                    diffLevelProfit = 0;  //等级级差
+                                    decimal curProfit = 0;
+                                    foreach (string UserIdString in ParentNavList)
+                                    {
+                                        level += 1;
+                                        int uid = int.Parse(UserIdString);
+                                        SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                        int UserLevel = GetUserLevel(user); //当前会员等级
+                                        if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                        {
+                                            break;
+                                        }
+                                        if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                        {
+                                            int LevelKindId = GetLevelKindId(BrandId, 1, 1);
+                                            ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                            if (objlevel != null)
+                                            {
+                                                decimal getLevelProfit = 0;  //等级分润
+                                                if (objlevel.Percents > 0)
+                                                {
+                                                    //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                    getLevelProfit += HelpDirectTradeAmt * objlevel.Percents;
+                                                }
+                                                if (objlevel.AddProfitVal > 0)
+                                                {
+                                                    getLevelProfit += objlevel.AddProfitVal;
+                                                }
+                                                decimal money = getLevelProfit;
+                                                getLevelProfit -= diffLevelProfit;
+                                                if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                {
+                                                    diffLevelProfit = money;
+                                                }
+                                                if (getLevelProfit >= obj.MinProfitVal)
+                                                {
+                                                    int DirectFlag = selfUser.Id == user.Id ? 1 : 0;
+                                                    result.Add(new ProfitResult()
+                                                    {
+                                                        UserId = user.Id,
+                                                        UserNav = user.ParentNav,
+                                                        Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                        ProfitRate = objlevel.Percents,
+                                                        Message = "交易分润",
+                                                        BankCardType = 0,
+                                                        QrPayFlag = 0,
+                                                        DirectFlag = DirectFlag,
+                                                        BrandId = BrandId,
+                                                        IsSubsidy = 0,
+                                                        TradeAmount = HelpDirectTradeAmt,
+                                                        HelpFlag = 1,
+                                                    });
+                                                    curProfit += getLevelProfit;
+                                                    function.WriteLog(user.Id + "-" + UserLevel + "-" + HelpDirectTradeAmt + "-" + DirectFlag + "-扶持期分润:" + getLevelProfit, "广电卡分润监控日志");
+                                                }
+                                            }
+                                        }
+                                        if(curLevel < UserLevel)
+                                        {
+                                            curLevel = UserLevel;
+                                        }
+                                    }
+                                }
+                                function.WriteLog("------------------------", "广电卡分润监控日志");
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":稳定期:" + NotHelpDirectTradeAmt, "广电卡分润监控日志");
+                                if (NotHelpDirectTradeAmt > 0)
+                                {
+                                    level = 0;
+                                    curLevel = 0;
+                                    diffLevelProfit = 0;  //等级级差
+                                    foreach (string UserIdString in ParentNavList)
+                                    {
+                                        level += 1;
+                                        int uid = int.Parse(UserIdString);
+                                        SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                        int UserLevel = GetUserLevel(user); //当前会员等级
+                                        if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                        {
+                                            break;
+                                        }
+                                        if (UserLevel <= maxLevel && UserLevel > curLevel)
+                                        {
+                                            int LevelKindId = GetLevelKindId(BrandId, 0, 1);
+                                            ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                            if (objlevel != null)
+                                            {
+                                                decimal getLevelProfit = 0;  //等级分润
+                                                if (objlevel.Percents > 0)
+                                                {
+                                                    //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                    getLevelProfit += NotHelpDirectTradeAmt * objlevel.Percents;
+                                                }
+                                                if (objlevel.AddProfitVal > 0)
+                                                {
+                                                    getLevelProfit += objlevel.AddProfitVal;
+                                                }
+                                                decimal money = getLevelProfit;
+                                                getLevelProfit -= diffLevelProfit;
+                                                if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                {
+                                                    diffLevelProfit = money;
+                                                }
+                                                if (getLevelProfit >= obj.MinProfitVal)
+                                                {
+                                                    result.Add(new ProfitResult()
+                                                    {
+                                                        UserId = user.Id,
+                                                        UserNav = user.ParentNav,
+                                                        Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                        ProfitRate = objlevel.Percents,
+                                                        Message = "交易分润",
+                                                        BankCardType = 0,
+                                                        QrPayFlag = 0,
+                                                        BrandId = BrandId,
+                                                        DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                        IsSubsidy = 0,
+                                                        TradeAmount = NotHelpDirectTradeAmt,
+                                                        HelpFlag = 0,
+                                                    });
+                                                }
+                                            }
+                                        }
+                                        if(curLevel < UserLevel)
+                                        {
+                                            curLevel = UserLevel;
+                                        }
+                                    }
+                                }
+                                function.WriteLog("------------------------", "广电卡分润监控日志");
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "广电卡分润监控日志");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "广电卡分润异常");
+                        }
+                        dbnew.Dispose();
+                    }
+                }
+            }
+            return result;
+        }
+
+        #endregion
+
+        public SubUser GetUser(int UserId, string Month)
+        {
+            SubUser user = new SubUser();
+            DataTable dt = GetDataTable("select * from Users" + Month + " where Id=" + UserId);
+            if(dt.Rows.Count > 0)
+            {
+                user.Id = int.Parse(dt.Rows[0]["Id"].ToString());
+                user.ParentUserId = int.Parse(dt.Rows[0]["ParentUserId"].ToString());
+                user.ParentNav = dt.Rows[0]["ParentNav"].ToString();
+                user.UserLevel = int.Parse(dt.Rows[0]["UserLevel"].ToString());
+                user.PreUserLevel = int.Parse(dt.Rows[0]["PreUserLevel"].ToString());
+                user.PreLeaderLevel = int.Parse(dt.Rows[0]["PreLeaderLevel"].ToString());
+                user.PreOpLevel = int.Parse(dt.Rows[0]["PreOpLevel"].ToString());
+            }
+            return user;
+        }
+
+        public int GetUserLevel(SubUser user)
+        {
+            int level = user.UserLevel;
+            if(user.PreUserLevel > level) level = user.PreUserLevel;
+            if(user.PreLeaderLevel > level) level = user.PreLeaderLevel;
+            if(user.PreOpLevel > level) level = user.PreOpLevel;
+            return level;
+        }
+
+        public DataTable GetDataTable(string sqlstr)
+        {
+            DataTable dt = CustomerSqlConn.dtable(sqlstr, Library.ConfigurationManager.AppSettings["MainSqlConnStr"].ToString());
+            return dt;
+        }
+    }
+}

+ 864 - 0
AppStart/Helper/Profit/ProfitBeforeHelper.cs

@@ -0,0 +1,864 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using MySystem.PxcModels;
+using Library;
+using System.Threading;
+using Microsoft.Extensions.Hosting;
+using System.Threading.Tasks;
+
+namespace MySystem
+{
+    public class ProfitBeforeHelper
+    {
+        public readonly static ProfitBeforeHelper Instance = new ProfitBeforeHelper();
+        private ProfitBeforeHelper()
+        {
+        }
+        
+        #region 获取分润规则Id
+
+        public int GetLevelKindId(int BrandId, int Help, int BankCardType)
+        {
+            return RedisDbconn.Instance.Get<int>("pobjlv:kid:" + BrandId + ":" + Help + ":" + BankCardType);
+        }
+
+        #endregion
+        
+        #region POS分润算法
+        public void StatProfit()
+        {
+            Thread th = new Thread(StatProfitDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatProfitDo()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoProfitQueue");
+                if(!string.IsNullOrEmpty(content) && DateTime.Now.Day < 14)
+                {
+                    StatProfiting();
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+        public void StatProfiting()
+        {
+            string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+            string check = function.ReadInstance("/ProfitStat/" + Month + "-1.txt");
+            if (!string.IsNullOrEmpty(check))
+            {
+                return;
+            }
+            function.WritePage("/ProfitStat/", Month + "-1.txt", DateTime.Now.ToString());
+            try
+            {
+                WebCMSEntities db = new WebCMSEntities();
+                ReadModels.WebCMSEntities rdb = new ReadModels.WebCMSEntities();
+                List<int> BrandIds = rdb.KqProducts.OrderBy(m => m.Id).ToList().Select(m => m.Id).ToList();
+                foreach (int i in BrandIds) //品牌
+                {
+                    for (int j = 0; j <= 1; j++) //卡类型
+                    {
+                        int PageNum = 1;
+                        bool op = true;
+                        while(op)
+                        {
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "BrandId:" + i + ",BankCardType:" + j + ",Month:" + Month + ",PageNum:" + PageNum, "分润监控日志");
+                            List<ProfitResult> result = result = StartProftForPosByDate(i, j, Month, PageNum);
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "result:" + result.Count, "分润监控日志");
+                            function.WriteLog("\r\n", "分润监控日志");
+                            if(result.Count > 0)
+                            {
+                                foreach (ProfitResult sub in result)
+                                {
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(sub.UserNav))
+                                    {
+                                        string[] UserNavList = sub.UserNav.Trim(',').Replace(",,", ",").Split(',');
+                                        if (UserNavList.Length > 1)
+                                        {
+                                            TopUserId = int.Parse(UserNavList[1]);
+                                        }
+                                        else
+                                        {
+                                            TopUserId = int.Parse(UserNavList[0]);
+                                        }
+                                    }
+                                    string RecordNo = "P" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
+                                    decimal ProfitAmt = sub.Money;
+                                    decimal TradeAmt = sub.TradeAmount;
+                                    decimal ProfitRate = sub.ProfitRate;
+                                    if (sub.IsSubsidy == 1 && j == 1)
+                                    {
+                                    }
+                                    else
+                                    {
+                                        decimal CreditTradeAmt = 0;
+                                        decimal CreditTradeProfit = 0;
+                                        decimal QrCreditTradeAmt = 0;
+                                        decimal QrCreditProfitRate = 0;
+                                        decimal QrCreditProfitStandardRate = 0;
+                                        decimal QrCreditAddOrSubRate = 0;
+                                        decimal QrCreditTradeProfit = 0;
+                                        decimal NonQrCreditTradeAmt = 0;
+                                        decimal NotHelpCreditTradeAmt = 0;
+                                        decimal NotHelpCreditTradeProfit = 0;
+                                        decimal NotHelpCreditProfitRate = 0;
+                                        decimal NotHelpCreditProfitStandardRate = 0;
+                                        decimal NotHelpCreditAddOrSubRate = 0;
+                                        decimal HelpCreditTradeAmt = 0;
+                                        decimal NonQrCreditTradeProfit = 0;
+                                        decimal HelpCreditTradeProfit = 0;
+                                        decimal HelpCreditProfitRate = 0;
+                                        decimal HelpCreditProfitStandardRate = 0;
+                                        decimal HelpCreditAddOrSubRate = 0;
+                                        decimal DebitNonCapTradeAmt = 0;
+                                        decimal DebitCapTradeAmt = 0;
+                                        decimal QrDebitNotCapTradeAmt = 0;
+                                        decimal NonQrDebitNotCapTradeAmt = 0;
+                                        decimal NotHelpDebitNonCapTradeAmt = 0;
+                                        decimal HelpDebitNonCapTradeAmt = 0;
+                                        decimal DebitNonTradeCapProfit = 0;
+                                        decimal QrDebitNonTradeCapProfit = 0;
+                                        decimal NonQrDebitNonTradeCapProfit = 0;
+                                        decimal NotHelpDebitNonTradeCapProfit = 0;
+                                        decimal HelpDebitNonTradeCapProfit = 0;
+                                        decimal DebitTradeCapProfit = 0;
+                                        decimal NotHelpDebitProfitRate = 0;
+                                        decimal NotHelpDebitProfitStandardRate = 0;
+                                        decimal NotHelpDebitAddOrSubRate = 0;
+                                        decimal HelpDebitProfitRate = 0;
+                                        decimal HelpDebitProfitStandardRate = 0;
+                                        decimal HelpDebitAddOrSubRate = 0;
+                                        decimal DebitCapSingleReward = 0;
+                                        decimal QrDebitProfitRate = 0;
+                                        decimal QrDebitProfitStandardRate = 0;
+                                        decimal QrDebitAddOrSubRate = 0;
+                                        decimal ProfitCreditTradeProfit = 0;
+                                        decimal ProfitCreditProfitRate = 0;
+                                        decimal ProfitCreditTradeAmt = 0;
+                                        decimal ProfitCreditTradeProfit2 = 0;
+                                        decimal ProfitCreditProfitRate2 = 0;
+                                        decimal ProfitCreditTradeAmt2 = 0;
+                                        decimal ProfitDebitNonCapTradeAmt = 0;
+                                        decimal ProfitDebitNonTradeCapProfit = 0;
+                                        decimal ProfitDebitProfitRate = 0;
+                                        if (j == 1)
+                                        {
+                                            CreditTradeAmt = TradeAmt; //贷记卡交易总金额
+                                            CreditTradeProfit = ProfitAmt; //贷记卡分润总金额
+                                            if (sub.QrPayFlag == 1)
+                                            {
+                                                QrCreditTradeAmt = TradeAmt; //(云闪付)贷记卡交易总金额
+                                                QrCreditProfitRate = ProfitRate; //(云闪付)贷记卡交易分润比例
+                                                QrCreditTradeProfit = ProfitAmt; //(云闪付)贷记卡交易分润
+                                            }
+                                            else
+                                            {
+                                                NonQrCreditTradeAmt = TradeAmt; //(非云闪付)贷记卡交易总金额
+                                                NonQrCreditTradeProfit = ProfitAmt; //(非云闪付)贷记卡交易分润
+                                                if(sub.HelpFlag == 1)
+                                                {
+                                                    HelpCreditTradeProfit = ProfitAmt; //(扶持期)(非云闪付)贷记卡分润总金额
+                                                    HelpCreditProfitRate = ProfitRate; //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    HelpCreditTradeAmt = TradeAmt; //(扶持期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else if(sub.HelpFlag == 2)
+                                                {
+                                                    ProfitCreditTradeProfit = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
+                                                    ProfitCreditProfitRate = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    ProfitCreditTradeAmt = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else if(sub.HelpFlag == 3)
+                                                {
+                                                    ProfitCreditTradeProfit2 = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
+                                                    ProfitCreditProfitRate2 = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                                    ProfitCreditTradeAmt2 = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
+                                                }
+                                                else
+                                                {
+                                                    NotHelpCreditTradeAmt = TradeAmt; //(非扶持期)(非云闪付)贷记卡交易总金额
+                                                    NotHelpCreditTradeProfit = ProfitAmt; //(非扶持期)(非云闪付)贷记卡分润总金额
+                                                    NotHelpCreditProfitRate = ProfitRate; //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                                }
+                                            }
+                                        }
+                                        if (j == 0)
+                                        {
+                                            if (sub.Money < 1)
+                                            {
+                                                DebitNonCapTradeAmt = TradeAmt; //商户非封顶借记卡交易总额
+                                                DebitNonTradeCapProfit = ProfitAmt; //借记卡非封顶交易分润总金额
+                                            }
+                                            else
+                                            {
+                                                DebitCapTradeAmt = TradeAmt; //商户借记卡封顶交易总额
+                                                DebitCapSingleReward = ProfitAmt; //借记卡合伙人直营封顶交易奖励金额
+                                                DebitTradeCapProfit = ProfitAmt; //借记卡封顶交易分润总金额
+                                            }
+                                            if (sub.QrPayFlag == 1)
+                                            {
+                                                if (sub.Money < 1)
+                                                {
+                                                    QrDebitNotCapTradeAmt = TradeAmt; //(云闪付)商户非封顶借记卡交易总额
+                                                    QrDebitProfitRate = ProfitRate; //(云闪付)借记卡非封顶交易分润比例
+                                                    QrDebitNonTradeCapProfit = ProfitAmt; //(云闪付)借记卡非封顶交易分润总金额
+                                                }
+                                            }
+                                            else
+                                            {
+                                                if (sub.Money < 1)
+                                                {
+                                                    NonQrDebitNonTradeCapProfit = ProfitAmt; //(非云闪付)借记卡非封顶交易分润总金额
+                                                    NonQrDebitNotCapTradeAmt = TradeAmt; //(非云闪付)商户非封顶借记卡交易总额
+                                                }
+                                                if (sub.HelpFlag == 1)
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        HelpDebitNonCapTradeAmt = TradeAmt; //(扶持期)(非云闪付)借记卡非封顶交易总金额
+                                                        HelpDebitNonTradeCapProfit = ProfitAmt; //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    HelpDebitProfitRate = ProfitRate; //(扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                                else if (sub.HelpFlag >= 2)
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        ProfitDebitNonCapTradeAmt = TradeAmt; //(盈利期)(非云闪付)借记卡非封顶交易总金额
+                                                        ProfitDebitNonTradeCapProfit = ProfitAmt; //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    ProfitDebitProfitRate = ProfitRate; //(盈利期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                                else
+                                                {
+                                                    if (sub.Money < 1)
+                                                    {
+                                                        NotHelpDebitNonCapTradeAmt = TradeAmt; //(非扶持期)(非云闪付)借记卡非封顶交易总金额
+                                                        NotHelpDebitNonTradeCapProfit = ProfitAmt; //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                                    }
+                                                    NotHelpDebitProfitRate = ProfitRate; //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                                }
+                                            }
+                                        }
+                                        db.ProfitRewardRecord.Add(new ProfitRewardRecord()
+                                        {
+                                            Version = 1,
+                                            CreateDate = DateTime.Now,
+                                            UpdateDate = DateTime.Now,
+                                            UserId = sub.UserId, //创客
+                                            MerchantId = sub.MerchantId, //商户
+                                            BrandId = sub.BrandId, //品牌
+                                            ProfitType = sub.DirectFlag, //创客分润类型
+                                            TradeAmt = sub.TradeAmount, //商户交易总额
+                                            TradeProfit = sub.Money, //交易分润
+                                            TradeMonth = Month, //交易月
+                                            RecordNo = RecordNo, //记录单号
+                                            TopUserId = TopUserId, //顶级创客
+                                            CreditTradeAmt = CreditTradeAmt, //贷记卡交易总金额
+                                            QrCreditTradeAmt = QrCreditTradeAmt, //(云闪付)贷记卡交易总金额
+                                            NonQrCreditTradeAmt = NonQrCreditTradeAmt, //(非云闪付)贷记卡交易总金额
+                                            NotHelpCreditTradeAmt = NotHelpCreditTradeAmt, //(非扶持期)(非云闪付)贷记卡交易总金额
+                                            HelpCreditTradeAmt = HelpCreditTradeAmt, //(扶持期)(非云闪付)贷记卡交易总金额
+                                            DebitNonCapTradeAmt = DebitNonCapTradeAmt, //商户非封顶借记卡交易总额
+                                            QrDebitNotCapTradeAmt = QrDebitNotCapTradeAmt, //(云闪付)商户非封顶借记卡交易总额
+                                            NonQrDebitNotCapTradeAmt = NonQrDebitNotCapTradeAmt, //(非云闪付)商户非封顶借记卡交易总额
+                                            NotHelpDebitNonCapTradeAmt = NotHelpDebitNonCapTradeAmt, //(非扶持期)(非云闪付)借记卡非封顶交易总金额
+                                            HelpDebitNonCapTradeAmt = HelpDebitNonCapTradeAmt, //(扶持期)(非云闪付)借记卡非封顶交易总金额
+                                            DebitCapTradeAmt = DebitCapTradeAmt, //商户借记卡封顶交易总额
+                                            CreditTradeProfit = CreditTradeProfit, //贷记卡分润总金额
+                                            QrCreditTradeProfit = QrCreditTradeProfit, //(云闪付)贷记卡交易分润
+                                            NonQrCreditTradeProfit = NonQrCreditTradeProfit, //(非云闪付)贷记卡交易分润
+                                            NotHelpCreditTradeProfit = NotHelpCreditTradeProfit, //(非扶持期)(非云闪付)贷记卡分润总金额
+                                            HelpCreditTradeProfit = HelpCreditTradeProfit, //(扶持期)(非云闪付)贷记卡分润总金额
+                                            DebitNonTradeCapProfit = DebitNonTradeCapProfit, //借记卡非封顶交易分润总金额
+                                            QrDebitNonTradeCapProfit = QrDebitNonTradeCapProfit, //(云闪付)借记卡非封顶交易分润总金额
+                                            NonQrDebitNonTradeCapProfit = NonQrDebitNonTradeCapProfit, //(非云闪付)借记卡非封顶交易分润总金额
+                                            NotHelpDebitNonTradeCapProfit = NotHelpDebitNonTradeCapProfit, //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                            HelpDebitNonTradeCapProfit = HelpDebitNonTradeCapProfit, //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                            DebitTradeCapProfit = DebitTradeCapProfit, //借记卡封顶交易分润总金额
+                                            NotHelpCreditProfitRate = NotHelpCreditProfitRate, //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                            NotHelpCreditProfitStandardRate = NotHelpCreditProfitStandardRate, //(非扶持期)(非云闪付)贷记卡标准分润比例
+                                            NotHelpCreditAddOrSubRate = NotHelpCreditAddOrSubRate, //(非扶持期)(非云闪付)贷记卡成本或增或减比例
+                                            HelpCreditProfitRate = HelpCreditProfitRate, //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
+                                            HelpCreditProfitStandardRate = HelpCreditProfitStandardRate, //(扶持期)(非云闪付)贷记卡-标准分润比例
+                                            HelpCreditAddOrSubRate = HelpCreditAddOrSubRate, //(扶持期)(非云闪付)贷记卡成本或增或减比例
+                                            NotHelpDebitProfitRate = NotHelpDebitProfitRate, //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                            NotHelpDebitProfitStandardRate = NotHelpDebitProfitStandardRate, //(非扶持期)(非云闪付)借记卡标准分润比例
+                                            NotHelpDebitAddOrSubRate = NotHelpDebitAddOrSubRate, //(非扶持期)(非云闪付)借记卡成本或增或减比例
+                                            HelpDebitProfitRate = HelpDebitProfitRate, //(扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                            HelpDebitProfitStandardRate = HelpDebitProfitStandardRate, //(扶持期)(非云闪付)借记卡-标准分润比例
+                                            HelpDebitAddOrSubRate = HelpDebitAddOrSubRate, //(扶持期)(非云闪付)借记卡成本或增或减比例
+                                            DebitCapSingleReward = DebitCapSingleReward, //借记卡合伙人直营封顶交易奖励金额
+                                            QrCreditProfitRate = QrCreditProfitRate, //(云闪付)贷记卡交易分润比例
+                                            QrCreditProfitStandardRate = QrCreditProfitStandardRate, //(云闪付)贷记卡分润基准
+                                            QrCreditAddOrSubRate = QrCreditAddOrSubRate, //(云闪付)贷记卡分润比例或增或减
+                                            QrDebitProfitRate = QrDebitProfitRate, //(云闪付)借记卡非封顶交易分润比例
+                                            QrDebitProfitStandardRate = QrDebitProfitStandardRate, //(云闪付)借记卡非封顶交易分润基准
+                                            QrDebitAddOrSubRate = QrDebitAddOrSubRate, //(云闪付)借记卡非封顶交易分润比例或增或减
+                                            ProfitCreditTradeProfit = ProfitCreditTradeProfit,  //(盈利期)(非云闪付)贷记卡分润总金额
+                                            ProfitCreditProfitRate = ProfitCreditProfitRate, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                            ProfitCreditTradeAmt = ProfitCreditTradeAmt, //(盈利期)(非云闪付)贷记卡交易总金额
+                                            ProfitCreditTradeProfit2 = ProfitCreditTradeProfit2,  //(盈利期)(非云闪付)贷记卡分润总金额
+                                            ProfitCreditProfitRate2 = ProfitCreditProfitRate2, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
+                                            ProfitCreditTradeAmt2 = ProfitCreditTradeAmt2, //(盈利期)(非云闪付)贷记卡交易总金额
+                                            ProfitDebitNonCapTradeAmt = ProfitDebitNonCapTradeAmt, //(盈利期)(非云闪付)借记卡非封顶交易总金额
+                                            ProfitDebitNonTradeCapProfit = ProfitDebitNonTradeCapProfit, //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
+                                            ProfitDebitProfitRate = ProfitDebitProfitRate, //(盈利期)(非云闪付)借记卡商户交易对应分润比例
+                                        });
+                                        // db.SaveChanges();
+                                    }
+                                }
+                                db.SaveChanges();
+                                PageNum += 1;
+                            }
+                            else
+                            {
+                                op = false;
+                            }
+                        }
+                    }
+                }
+                db.Dispose();
+                rdb.Dispose();
+            }
+            catch(Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "分润监控异常");
+            }
+
+            HelpProfitHelper.Instance.StatProfitEveryDay(DateTime.Now.AddMonths(-1).ToString("yyyyMM")); //助利宝分润
+            ProfitCheckHelper.Instance.Start();
+
+            // ProfitHelper.Instance.StatProfit();
+        }
+        public List<ProfitResult> StartProftForPosByDate(int BrandId, int BankCardType, string Month, int PageNum = 1)
+        {
+            // 级差
+            /*   
+                
+                K1 - K5:无大小市场要求,无押机分润比例为有押金机的70%,如K1的有押金机分润比例为万6,则无押机的分润比例为万4.2
+                                      机具激活大于90天,分润比例为原比例的70%
+
+                        if(is0y){
+                            分润比例为原比例的70%
+                        }
+                        if(ActivityDate > now - 90){
+                            分润比例为原比例的70%
+                        }
+                K6 - K9:
+                    K6:至少有1个直推大于3000万,且总交易额减去3000万大于1200万,则获得分红奖(月月红)直接级差
+                    K7:总交易额减去最大交易额的直推,大于4000万,则获得分红奖(月月红)直接级差
+                    K8:总交易额减去最大交易额的直推,大于12000万,则获得分红奖(月月红)直接级差
+                    K9:总交易额减去最大交易额的直推,大于32000万,则获得分红奖(月月红)直接级差
+
+                补贴:
+                    0押金无补贴
+                    机具激活90天内,机具所属创客获得万10置顶
+                    若创客为商户型创客,则机具UserId的创客获得万4分润
+
+                    //查分润
+                    select u.MakerCode,u.RealName,u.UserLevel,r.Rank,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,CreditTradeProfit,QrCreditTradeAmt,QrCreditTradeProfit,NonQrCreditTradeAmt,NonQrCreditTradeProfit,HelpCreditTradeAmt,HelpCreditTradeProfit,NotHelpCreditTradeAmt,NotHelpCreditTradeProfit,DebitTradeAmt,DebitTradeProfit from (
+                    select UserId,ProfitType,BrandId,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(CreditTradeProfit) as CreditTradeProfit,
+                    sum(QrCreditTradeAmt) as QrCreditTradeAmt,
+                    sum(QrCreditTradeProfit) as QrCreditTradeProfit,
+                    sum(NonQrCreditTradeAmt) as NonQrCreditTradeAmt,
+                    sum(NonQrCreditTradeProfit) as NonQrCreditTradeProfit,
+                    sum(HelpCreditTradeAmt) as HelpCreditTradeAmt,
+                    sum(HelpCreditTradeProfit) as HelpCreditTradeProfit,
+                    sum(NotHelpCreditTradeAmt) as NotHelpCreditTradeAmt,
+                    sum(NotHelpCreditTradeProfit) as NotHelpCreditTradeProfit,
+                    sum(DebitNonCapTradeAmt+DebitCapTradeAmt) as DebitTradeAmt,
+                    sum(DebitNonTradeCapProfit+DebitTradeCapProfit) as DebitTradeProfit 
+                    from ProfitRewardRecord where TradeMonth='202208' 
+                    GROUP BY UserId,ProfitType,BrandId
+                    ) tb 
+                    left join Users u on tb.UserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join UserRankWhite r on u.Id=r.Id and r.CreateDate<'2022-09-01 00:00:00' and r.UpdateDate>'2022-09-01 00:00:00' 
+                    ORDER BY u.MakerCode
+
+                    //查补贴
+                    select u.MakerCode,u.RealName,u.UserLevel,r.Rank,(case when SubsidyType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,SubsidyProfit from (
+                    select SubsidyUserId,BrandId,SubsidyType,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(SubsidyProfitRate) as SubsidyProfit
+                    from ProfitSubsidyDetail where TradeMonth='202206' 
+                    GROUP BY SubsidyUserId,BrandId,SubsidyType
+                    ) tb 
+                    left join Users u on tb.SubsidyUserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join UserRankWhite r on u.Id=r.Id 
+
+                    // TODO:做到后台查询,换绑机器遗漏交易额补差
+                    select UserId,sum(TradeAmount) from TradeRecord where SnNo in (
+                    select PosSn from PosMachinesTwo where UserId=0 and BuyUserId=0 and CreditTrade>0
+                    ) and CreateDate>='2022-04-01 00:00:00' and CreateDate<'2022-05-01 00:00:00' and UserId>0 group by UserId
+
+            */
+
+            int PageSize = 200;
+            int SkipNum = (PageNum - 1) * PageSize;
+            string LimitString = " limit " + PageSize;
+            if(PageNum > 1)
+            {
+                LimitString = " limit " + SkipNum + "," + PageSize;
+            }
+            List<ProfitResult> result = new List<ProfitResult>();
+            ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj1");
+            if (obj.Status == 1) //判断分润是否开启
+            {
+                string sqlstr = "";
+                if (BankCardType == 1)
+                {
+                    sqlstr = "select UserId,QrPayFlag,HelpDirectTradeAmt,NotHelpDirectTradeAmt,ProfitDirectTradeAmt from CreditTradeDaySummaryBefore" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                if (BankCardType == 0)
+                {
+                    sqlstr = "select UserId,QrPayFlag,HelpDirectDebitTradeAmt,NotHelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitCapNum,ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum from DebitTradeDaySummaryBefore" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "分润监控日志");
+                DataTable dt = GetDataTable(sqlstr);
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "分润监控日志");
+                if(dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        WebCMSEntities dbnew = new WebCMSEntities();
+                        try
+                        {
+                            int UserId = int.Parse(dr["UserId"].ToString());
+                            int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
+                            List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                            SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
+                            int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:1:HelpPolicy:Days")); //天数
+                            if (BankCardType == 0)
+                            {
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":借记卡", "分润监控日志");
+                                decimal HelpDirectDebitTradeAmt = decimal.Parse(dr[2].ToString()); //借记卡扶持期交易额
+                                decimal NotHelpDirectDebitTradeAmt = decimal.Parse(dr[3].ToString()); //借记卡稳定期交易额
+                                decimal ProfitDirectDebitTradeAmt = decimal.Parse(dr[8].ToString()); //借记卡扶持期交易额
+                                decimal HelpDirectDebitCapTradeAmt = decimal.Parse(dr[4].ToString()); //借记卡扶持期封顶交易额
+                                decimal NotHelpDirectDebitCapTradeAmt = decimal.Parse(dr[5].ToString()); //借记卡稳定期封顶交易额
+                                decimal ProfitDirectDebitCapTradeAmt = decimal.Parse(dr[9].ToString()); //借记卡扶持期封顶交易额
+                                int HelpDirectDebitCapNum = int.Parse(dr[6].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
+                                int NotHelpDirectDebitCapNum = int.Parse(dr[7].ToString().Split('.')[0]); //借记卡稳定期封顶交易笔数
+                                int ProfitDirectDebitCapNum = int.Parse(dr[10].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
+                                int UserLevel = selfUser.UserLevel; //当前会员等级
+                                decimal getLevelProfit = (HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt - HelpDirectDebitCapTradeAmt - NotHelpDirectDebitCapTradeAmt - ProfitDirectDebitCapTradeAmt) * 0.0006M + HelpDirectDebitCapNum + NotHelpDirectDebitCapNum + ProfitDirectDebitCapNum;
+                                result.Add(new ProfitResult()
+                                {
+                                    UserId = selfUser.Id,
+                                    UserNav = selfUser.ParentNav,
+                                    Money = PublicFunction.NumberFormat(getLevelProfit),
+                                    ProfitRate = 0.0006M,
+                                    Message = "储蓄卡分润",
+                                    BankCardType = BankCardType,
+                                    QrPayFlag = QrPayFlag,
+                                    BrandId = BrandId,
+                                    DirectFlag = 1,
+                                    IsSubsidy = 0,
+                                    TradeAmount = HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt,
+                                });
+                            }
+                            else
+                            {
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "分润监控日志");
+                                decimal HelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡扶持期交易额
+                                decimal NotHelpDirectTradeAmt = decimal.Parse(dr[3].ToString()); //贷记卡稳定期交易额
+                                decimal ProfitDirectTradeAmt = decimal.Parse(dr[4].ToString()); //贷记卡盈利期期交易额
+                                int maxLevel = obj.MaxLevel; //最大等级
+                                decimal diffLevelProfit = 0;  //等级级差
+                                int curLevel = 0; //当前层级的会员等级
+                                string ParentNav = selfUser.ParentNav;
+                                if (string.IsNullOrEmpty(ParentNav))
+                                {
+                                    ParentNav = ",0,";
+                                }
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "分润监控日志");
+                                if (!string.IsNullOrEmpty(ParentNav))
+                                {
+                                    ParentNav += "," + UserId + ",";
+                                    string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                    Array.Reverse(ParentNavList); //反转顺序
+                                    int level = 0;
+                                    DateTime now = DateTime.Now;
+                                    DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":扶持期:" + HelpDirectTradeAmt, "分润监控日志");
+                                    if (HelpDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        decimal checkProfit = HelpDirectTradeAmt * 0.0012M;
+                                        decimal curProfit = 0;
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 1, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                        getLevelProfit += HelpDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        int DirectFlag = selfUser.Id == user.Id ? 1 : 0;
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            DirectFlag = DirectFlag,
+                                                            BrandId = BrandId,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = HelpDirectTradeAmt,
+                                                            HelpFlag = 1,
+                                                        });
+                                                        curProfit += getLevelProfit;
+                                                        function.WriteLog(user.Id + "-" + UserLevel + "-" + HelpDirectTradeAmt + "-" + DirectFlag + "-扶持期分润:" + getLevelProfit, "分润监控日志");
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                        if(curProfit > checkProfit)
+                                        {
+                                            decimal more = curProfit - checkProfit;
+                                            function.WriteLog("超标了:" + more, "分润监控日志");
+                                        }
+                                    }
+                                    function.WriteLog("------------------------", "分润监控日志");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":稳定期:" + NotHelpDirectTradeAmt, "分润监控日志");
+                                    if (NotHelpDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 0, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
+                                                        getLevelProfit += NotHelpDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            BrandId = BrandId,
+                                                            DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = NotHelpDirectTradeAmt,
+                                                            HelpFlag = 0,
+                                                        });
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                    }
+                                    function.WriteLog("------------------------", "分润监控日志");
+                                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期:" + ProfitDirectTradeAmt, "分润监控日志");
+                                    if (ProfitDirectTradeAmt > 0)
+                                    {
+                                        level = 0;
+                                        curLevel = 0;
+                                        diffLevelProfit = 0;  //等级级差
+                                        foreach (string UserIdString in ParentNavList)
+                                        {
+                                            level += 1;
+                                            int uid = int.Parse(UserIdString);
+                                            SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                            int UserLevel = GetUserLevel(user); //当前会员等级
+                                            if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                            {
+                                                break;
+                                            }
+                                            if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                            {
+                                                int LevelKindId = GetLevelKindId(1, 2, 1);
+                                                ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                                if (objlevel != null)
+                                                {
+                                                    decimal getLevelProfit = 0;  //等级分润
+                                                    if (objlevel.Percents > 0)
+                                                    {
+                                                        getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
+                                                    }
+                                                    if (objlevel.AddProfitVal > 0)
+                                                    {
+                                                        getLevelProfit += objlevel.AddProfitVal;
+                                                    }
+                                                    decimal money = getLevelProfit;
+                                                    getLevelProfit -= diffLevelProfit;
+                                                    if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                    {
+                                                        diffLevelProfit = money;
+                                                    }
+                                                    if (getLevelProfit >= obj.MinProfitVal)
+                                                    {
+                                                        result.Add(new ProfitResult()
+                                                        {
+                                                            UserId = user.Id,
+                                                            UserNav = user.ParentNav,
+                                                            Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                            ProfitRate = objlevel.Percents,
+                                                            Message = "交易分润",
+                                                            BankCardType = BankCardType,
+                                                            QrPayFlag = QrPayFlag,
+                                                            BrandId = BrandId,
+                                                            DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                            IsSubsidy = 0,
+                                                            TradeAmount = ProfitDirectTradeAmt,
+                                                            HelpFlag = 2,
+                                                        });
+                                                    }
+                                                }
+                                            }
+                                            if(curLevel < UserLevel)
+                                            {
+                                                curLevel = UserLevel;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "分润监控日志");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
+                        }
+                        dbnew.Dispose();
+                    }
+                }
+
+
+                sqlstr = "";
+                if (BankCardType == 1)
+                {
+                    sqlstr = "select UserId,QrPayFlag,ProfitDirectTradeAmt from CreditTradeDaySummaryBefore2" + Month + " where BrandId=" + BrandId + LimitString;
+                }
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "分润监控日志");
+                dt = GetDataTable(sqlstr);
+                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "分润监控日志");
+                if(dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        WebCMSEntities dbnew = new WebCMSEntities();
+                        try
+                        {
+                            int UserId = int.Parse(dr["UserId"].ToString());
+                            int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
+                            List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                            SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "分润监控日志");
+                            decimal ProfitDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡盈利期期交易额
+                            int maxLevel = obj.MaxLevel; //最大等级
+                            decimal diffLevelProfit = 0;  //等级级差
+                            int curLevel = 0; //当前层级的会员等级
+                            string ParentNav = selfUser.ParentNav;
+                            if (string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav = ",0,";
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "分润监控日志");
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav += "," + UserId + ",";
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                Array.Reverse(ParentNavList); //反转顺序
+                                int level = 0;
+                                DateTime now = DateTime.Now;
+                                DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");                                
+                                function.WriteLog("------------------------", "分润监控日志");
+                                function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期2:" + ProfitDirectTradeAmt, "分润监控日志");
+                                if (ProfitDirectTradeAmt > 0)
+                                {
+                                    level = 0;
+                                    curLevel = 0;
+                                    diffLevelProfit = 0;  //等级级差
+                                    foreach (string UserIdString in ParentNavList)
+                                    {
+                                        level += 1;
+                                        int uid = int.Parse(UserIdString);
+                                        SubUser user = GetUser(uid, Month) ?? new SubUser();
+                                        int UserLevel = GetUserLevel(user); //当前会员等级
+                                        if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
+                                        {
+                                            break;
+                                        }
+                                        if (UserLevel <= maxLevel && UserLevel >= curLevel)
+                                        {
+                                            int LevelKindId = GetLevelKindId(1, 3, 1);
+                                            ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                                            if (objlevel != null)
+                                            {
+                                                decimal getLevelProfit = 0;  //等级分润
+                                                if (objlevel.Percents > 0)
+                                                {
+                                                    getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
+                                                }
+                                                if (objlevel.AddProfitVal > 0)
+                                                {
+                                                    getLevelProfit += objlevel.AddProfitVal;
+                                                }
+                                                decimal money = getLevelProfit;
+                                                getLevelProfit -= diffLevelProfit;
+                                                if (objlevel.LevelDiff == 1)  //判断是否有级差
+                                                {
+                                                    diffLevelProfit = money;
+                                                }
+                                                if (getLevelProfit >= obj.MinProfitVal)
+                                                {
+                                                    result.Add(new ProfitResult()
+                                                    {
+                                                        UserId = user.Id,
+                                                        UserNav = user.ParentNav,
+                                                        Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                        ProfitRate = objlevel.Percents,
+                                                        Message = "交易分润",
+                                                        BankCardType = BankCardType,
+                                                        QrPayFlag = QrPayFlag,
+                                                        BrandId = BrandId,
+                                                        DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                        IsSubsidy = 0,
+                                                        TradeAmount = ProfitDirectTradeAmt,
+                                                        HelpFlag = 3,
+                                                    });
+                                                }
+                                            }
+                                        }
+                                        if(curLevel < UserLevel)
+                                        {
+                                            curLevel = UserLevel;
+                                        }
+                                    }
+                                }
+                            }
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "分润监控日志");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
+                        }
+                        dbnew.Dispose();
+                    }
+                }
+            }
+            return result;
+        }
+
+        #endregion
+
+        public SubUser GetUser(int UserId, string Month)
+        {
+            SubUser user = new SubUser();
+            DataTable dt = GetDataTable("select * from Users" + Month + " where Id=" + UserId);
+            if(dt.Rows.Count > 0)
+            {
+                user.Id = int.Parse(dt.Rows[0]["Id"].ToString());
+                user.ParentUserId = int.Parse(dt.Rows[0]["ParentUserId"].ToString());
+                user.ParentNav = dt.Rows[0]["ParentNav"].ToString();
+                user.UserLevel = int.Parse(dt.Rows[0]["UserLevel"].ToString());
+                user.PreUserLevel = int.Parse(dt.Rows[0]["PreUserLevel"].ToString());
+                user.PreLeaderLevel = int.Parse(dt.Rows[0]["PreLeaderLevel"].ToString());
+                user.PreOpLevel = int.Parse(dt.Rows[0]["PreOpLevel"].ToString());
+            }
+            return user;
+        }
+
+        public int GetUserLevel(SubUser user)
+        {
+            int level = user.UserLevel;
+            if(user.PreUserLevel > level) level = user.PreUserLevel;
+            if(user.PreLeaderLevel > level) level = user.PreLeaderLevel;
+            if(user.PreOpLevel > level) level = user.PreOpLevel;
+            return level;
+        }
+
+        public DataTable GetDataTable(string sqlstr)
+        {
+            DataTable dt = CustomerSqlConn.dtable(sqlstr, Library.ConfigurationManager.AppSettings["MainSqlConnStr"].ToString());
+            return dt;
+        }
+    }
+}