Browse Source

交易额统计更改为实时统计
增加按天统计分润

lichunlei 2 years ago
parent
commit
29e4bdc461

+ 0 - 11
AppStart/Helper/Profit/ProfitHelper.cs

@@ -2203,12 +2203,6 @@ namespace MySystem
                                                 UserLevel = rank.Rank;
                                                 UserLevel = rank.Rank;
                                             }
                                             }
                                         }
                                         }
-                                        if(level == 1)
-                                        {
-                                            function.WriteLog(user.MakerCode, "分润补贴日志");
-                                            function.WriteLog(user.UserLevel.ToString(), "分润补贴日志");
-                                            function.WriteLog(pos.PosSn, "分润补贴日志");
-                                        }
                                         if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
                                         if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
                                         {
                                         {
                                             break;
                                             break;
@@ -2220,7 +2214,6 @@ namespace MySystem
                                             {
                                             {
                                                 HelpTime = 1;
                                                 HelpTime = 1;
                                             }
                                             }
-                                            function.WriteLog("HelpTime:" + HelpTime, "分润补贴日志");
                                             int LevelKindId = GetLevelKindId(BrandId, HelpTime, 1);
                                             int LevelKindId = GetLevelKindId(BrandId, HelpTime, 1);
                                             ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
                                             ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
                                             if (objlevel != null)
                                             if (objlevel != null)
@@ -2265,13 +2258,11 @@ namespace MySystem
                                                 // 分润补贴
                                                 // 分润补贴
                                                 if (HelpTime == 1 && level == 1)
                                                 if (HelpTime == 1 && level == 1)
                                                 {
                                                 {
-                                                    function.WriteLog("满足条件", "分润补贴日志");
                                                     int SubsidyUserId = pos.BuyUserId;
                                                     int SubsidyUserId = pos.BuyUserId;
                                                     Users subuser = dbnew.Users.FirstOrDefault(m => m.Id == SubsidyUserId) ?? new Users();
                                                     Users subuser = dbnew.Users.FirstOrDefault(m => m.Id == SubsidyUserId) ?? new Users();
                                                     int subUserLevel = subuser.UserLevel;
                                                     int subUserLevel = subuser.UserLevel;
                                                     if(subUserLevel < 5)
                                                     if(subUserLevel < 5)
                                                     {
                                                     {
-                                                        function.WriteLog("1:" + subUserLevel, "分润补贴日志");
                                                         UserRankWhite subrank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == subuser.Id && m.UpdateDate > now);
                                                         UserRankWhite subrank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == subuser.Id && m.UpdateDate > now);
                                                         if (subrank != null)
                                                         if (subrank != null)
                                                         {
                                                         {
@@ -2282,11 +2273,9 @@ namespace MySystem
                                                         }
                                                         }
                                                         if(subUserLevel < 5)
                                                         if(subUserLevel < 5)
                                                         {
                                                         {
-                                                            function.WriteLog("2:" + subUserLevel, "分润补贴日志");
                                                             ProfitObjectLevels sublevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + subUserLevel); //获取当前等级参数
                                                             ProfitObjectLevels sublevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + subUserLevel); //获取当前等级参数
                                                             if (sublevel != null)
                                                             if (sublevel != null)
                                                             {
                                                             {
-                                                                function.WriteLog("3:" + sublevel.Percents, "分润补贴日志");
                                                                 decimal otherPercent = 0.001M - sublevel.Percents;
                                                                 decimal otherPercent = 0.001M - sublevel.Percents;
                                                                 decimal otherMoney = TradeAmt * otherPercent;
                                                                 decimal otherMoney = TradeAmt * otherPercent;
                                                                 if (otherMoney >= obj.MinProfitVal)
                                                                 if (otherMoney >= obj.MinProfitVal)

+ 632 - 0
AppStart/Helper/Profit/ProfitHelperV2.cs

@@ -0,0 +1,632 @@
+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 ProfitHelperV2
+    {
+        public readonly static ProfitHelperV2 Instance = new ProfitHelperV2();
+        private ProfitHelperV2()
+        {
+        }
+        
+        #region 获取分润规则Id
+
+        private 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()
+        {
+            DateTime end = DateTime.Parse("2022-06-25 00:00:00");
+            DateTime check = DateTime.Parse("2022-06-01");
+            while (check <= end)
+            {
+                StatProfitEveryDay(check.ToString("yyyyMMdd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StatProfitEveryDay(object sender)
+        {
+            string Date = sender.ToString();
+            string Month = Date.Substring(0, 6);
+            string check = function.ReadInstance("/ProfitStat/" + Date + ".txt");
+            if (!string.IsNullOrEmpty(check))
+            {
+                return;
+            }
+            function.WritePage("/ProfitStat/", Date + ".txt", DateTime.Now.ToString());
+            WebCMSEntities db = new WebCMSEntities();
+            for (int i = 1; i <= 7; i++) //品牌
+            {
+                for (int j = 0; j <= 1; j++) //卡类型
+                {
+                    List<ProfitResult> result = StartProftForPosByDate(i, j, Date);
+                    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)
+                        {
+                            decimal CreditTradeAmt = TradeAmt; //商户贷记卡交易总金额
+                            decimal QrCreditTradeAmt = 0; //商户(云闪付)贷记卡交易总金额
+                            decimal NonQrCreditTradeAmt = 0; //商户(非云闪付)贷记卡交易总金额
+                            decimal CreditProfitRate = 0; //(非云闪付)贷记卡交易分润比例
+                            decimal SubsidyProfit = 0; //商户(非云闪付)贷记卡交易分润补贴金额
+                            if (sub.QrPayFlag == 1)
+                            {
+                                QrCreditTradeAmt = TradeAmt; //商户(云闪付)贷记卡交易总金额
+                            }
+                            else
+                            { 
+                                NonQrCreditTradeAmt = TradeAmt; //商户(非云闪付)贷记卡交易总金额
+                                CreditProfitRate = ProfitRate; //(非云闪付)贷记卡交易分润比例
+                                SubsidyProfit = ProfitAmt; //商户(非云闪付)贷记卡交易分润补贴金额
+                            }
+                            MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == sub.PosSn) ?? new MachineForSnNo();
+                            PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo(); 
+                            PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == sub.MerchantId) ?? new PosMerchantInfo();
+                            db.ProfitSubsidyDetail.Add(new ProfitSubsidyDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = RecordNo, //流水号
+                                BrandId = sub.BrandId, //品牌
+                                ProductName = RelationClass.GetKqProductBrandInfo(sub.BrandId), //产品名称
+                                TradeMonth = Month, //交易月份
+                                SeoTitle = Date,
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = sub.PosSn, //渠道SN号
+                                MerRegTime = pos.BindingTime, //渠道注册时间
+                                MerStandardDate = merchant.MerStandardDate, //商户激活时间
+                                BelongUserId = merchant.UserId, //商户归属人
+                                MerHelpFlag = sub.HelpFlag == 1 ? 1u : 0u, //是否属于扶持周期内商户
+                                SubsidyUserId = sub.UserId, //补贴人
+                                SubsidyType = sub.DirectFlag, //分润补贴类型
+                                SubsidyProfitRate = sub.Money, //创客活动期内直营商户分润万分之十
+                                CreditTradeAmt = CreditTradeAmt, //商户贷记卡交易总金额
+                                QrCreditTradeAmt = QrCreditTradeAmt, //商户(云闪付)贷记卡交易总金额
+                                NonQrCreditTradeAmt = NonQrCreditTradeAmt, //商户(非云闪付)贷记卡交易总金额
+                                CreditProfitRate = CreditProfitRate, //(非云闪付)贷记卡交易分润比例
+                                SubsidyProfit = SubsidyProfit, //商户(非云闪付)贷记卡交易分润补贴金额
+                            });
+                            db.SaveChanges();
+                        }
+                        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;
+                            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
+                                    {
+                                        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.Money < 1)
+                                        {
+                                            NotHelpDebitNonCapTradeAmt = TradeAmt; //(非扶持期)(非云闪付)借记卡非封顶交易总金额
+                                            NotHelpDebitNonTradeCapProfit = ProfitAmt; //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
+                                        }
+                                        NotHelpDebitProfitRate = ProfitRate; //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
+                                    }
+                                }
+                            }
+                            db.ProfitRewardRecord.Add(new ProfitRewardRecord()
+                            {
+                                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, //交易月
+                                SeoTitle = Date,
+                                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, //(云闪付)借记卡非封顶交易分润比例或增或减
+                            });
+                            db.SaveChanges();
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+        public List<ProfitResult> StartProftForPosByDate(int BrandId, int BankCardType, string Date)
+        {
+            // 级差
+            /*   
+                
+                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,pos.SeoKeyword,p.KqSnNo,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,CreditTradeProfit,DebitTradeAmt,DebitTradeProfit,QrCreditTradeAmt,QrCreditTradeProfit from (
+                    select UserId,ProfitType,BrandId,MerchantId,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(CreditTradeProfit) as CreditTradeProfit,
+                    sum(DebitNonCapTradeAmt+DebitCapTradeAmt) as DebitTradeAmt,
+                    sum(DebitNonTradeCapProfit+DebitTradeCapProfit) as DebitTradeProfit,
+                    sum(QrCreditTradeAmt) as QrCreditTradeAmt,
+                    sum(QrCreditTradeProfit) as QrCreditTradeProfit
+                    from ProfitRewardRecord where MerchantId>0
+                    GROUP BY UserId,ProfitType,BrandId,MerchantId
+                    ) tb 
+                    left join Users u on tb.UserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join PosMerchantInfo p on tb.MerchantId=p.Id 
+                    left join MachineForSnNo fp on fp.SnNo=p.KqSnNo 
+                    left join PosMachinesTwo pos on pos.Id=fp.SnId 
+                    left join UserRankWhite r on u.Id=r.Id 
+                    ORDER BY p.KqSnNo,u.MakerCode
+
+                    //查补贴
+                    select u.MakerCode,u.RealName,u.UserLevel,r.Rank,m.KqSnNo,m.MerchantName,(case when SubsidyType=1 then '直营' else '团队' end) as DirectFlag,
+                    k.Name,CreditTradeAmt,SubsidyProfit from (
+                    select SubsidyUserId,MerchantId,BrandId,SubsidyType,
+                    sum(CreditTradeAmt) as CreditTradeAmt,
+                    sum(SubsidyProfitRate) as SubsidyProfit
+                    from ProfitSubsidyDetail 
+                    GROUP BY SubsidyUserId,MerchantId,BrandId,SubsidyType
+                    ) tb 
+                    left join Users u on tb.SubsidyUserId=u.Id 
+                    LEFT JOIN KqProducts k ON k.Id=tb.BrandId 
+                    left join PosMerchantInfo m on tb.MerchantId=m.Id 
+                    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
+
+            */
+
+
+            List<ProfitResult> result = new List<ProfitResult>();
+            ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj" + BrandId);
+            if (obj.Status == 1) //判断分润是否开启
+            {
+                DataTable dt = new DataTable();
+                if (BankCardType == 1)
+                {
+                    dt = dbconn.dtable("select UserId,QueryCount,sum(HelpDirectTradeAmt),sum(NotHelpDirectTradeAmt) from TradeDaySummary where TradeDate='" + Date + "' and BrandId=" + BrandId + " group by UserId,QueryCount having sum(HelpDirectTradeAmt)>0 or sum(NotHelpDirectTradeAmt)>0");
+                }
+                if (BankCardType == 0)
+                {
+                    dt = dbconn.dtable("select UserId,QueryCount,sum(HelpDirectDebitTradeAmt),sum(NotHelpDirectDebitTradeAmt),sum(HelpDirectDebitCapTradeAmt),sum(NotHelpDirectDebitCapTradeAmt),sum(HelpDirectDebitCapNum),sum(NotHelpDirectDebitCapNum) from TradeDaySummary where TradeDate='" + Date + "' and BrandId=" + BrandId + " group by UserId,QueryCount having sum(HelpDirectDebitTradeAmt)>0 or sum(NotHelpDirectDebitTradeAmt)>0 or sum(HelpDirectDebitCapTradeAmt)>0 or sum(NotHelpDirectDebitCapTradeAmt)>0;");
+                }
+                foreach (DataRow dr in dt.Rows)
+                {
+                    WebCMSEntities dbnew = new WebCMSEntities();
+                    try
+                    {
+                        int UserId = int.Parse(dr["UserId"].ToString());
+                        int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+                        List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
+                        Users selfUser = dbnew.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:" + BrandId + ":HelpPolicy:Days")); //天数
+                        if (BankCardType == 0)
+                        {
+                            decimal HelpDirectDebitTradeAmt = decimal.Parse(dr[2].ToString()); //借记卡扶持期交易额
+                            decimal NotHelpDirectDebitTradeAmt = decimal.Parse(dr[3].ToString()); //借记卡稳定期交易额
+                            decimal HelpDirectDebitCapTradeAmt = decimal.Parse(dr[4].ToString()); //借记卡扶持期封顶交易额
+                            decimal NotHelpDirectDebitCapTradeAmt = decimal.Parse(dr[5].ToString()); //借记卡稳定期封顶交易额
+                            int HelpDirectDebitCapNum = int.Parse(dr[6].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
+                            int NotHelpDirectDebitCapNum = int.Parse(dr[7].ToString()); //借记卡稳定期封顶交易笔数
+                            int UserLevel = selfUser.UserLevel; //当前会员等级
+                            // int LevelKindId = GetLevelKindId(BrandId, HelpTime, 0);
+                            // ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
+                            decimal getLevelProfit = (HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt - HelpDirectDebitCapTradeAmt - NotHelpDirectDebitCapTradeAmt) * 0.0006M + HelpDirectDebitCapNum + NotHelpDirectDebitCapNum;
+                            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,
+                            });
+                        }
+                        else
+                        {
+                            decimal HelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡扶持期交易额
+                            decimal NotHelpDirectTradeAmt = decimal.Parse(dr[3].ToString()); //贷记卡稳定期交易额
+                            int maxLevel = obj.MaxLevel; //最大等级
+                            decimal diffLevelProfit = 0;  //等级级差
+                            int curLevel = 0; //当前层级的会员等级
+                            string ParentNav = selfUser.ParentNav;
+                            if (string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav = ",0,";
+                            }
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                ParentNav += "," + UserId + ",";
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                Array.Reverse(ParentNavList); //反转顺序
+                                int level = 0;
+                                DateTime now = DateTime.Now;
+                                foreach (string UserIdString in ParentNavList)
+                                {
+                                    level += 1;
+                                    int uid = int.Parse(UserIdString);
+                                    Users user = dbnew.Users.FirstOrDefault(m => m.Id == uid) ?? new Users();
+                                    int UserLevel = user.UserLevel; //当前会员等级
+                                    UserRankWhite rank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == user.Id && m.UpdateDate > now);
+                                    if (rank != null)
+                                    {
+                                        if (rank.Rank > UserLevel)
+                                        {
+                                            UserLevel = rank.Rank;
+                                        }
+                                    }
+                                    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)
+                                            {
+                                                result.Add(new ProfitResult()
+                                                {
+                                                    UserId = user.Id,
+                                                    UserNav = user.ParentNav,
+                                                    Money = PublicFunction.NumberFormat(getLevelProfit),
+                                                    ProfitRate = objlevel.Percents,
+                                                    Message = "交易分润",
+                                                    BankCardType = BankCardType,
+                                                    QrPayFlag = QrPayFlag,
+                                                    DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                    IsSubsidy = 0,
+                                                    TradeAmount = HelpDirectTradeAmt,
+                                                    HelpFlag = 1,
+                                                });
+                                            }
+
+                                            // 分润补贴
+                                            if (level == 1)
+                                            {
+                                                int SubsidyUserId = selfUser.ParentUserId; // TODO: 确定是否100%是上级
+                                                Users subuser = dbnew.Users.FirstOrDefault(m => m.Id == SubsidyUserId) ?? new Users();
+                                                int subUserLevel = subuser.UserLevel;
+                                                if(subUserLevel < 5)
+                                                {
+                                                    UserRankWhite subrank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == subuser.Id && m.UpdateDate > now);
+                                                    if (subrank != null)
+                                                    {
+                                                        if (subrank.Rank > subUserLevel)
+                                                        {
+                                                            subUserLevel = subrank.Rank;
+                                                        }
+                                                    }
+                                                    if(subUserLevel < 5)
+                                                    {
+                                                        ProfitObjectLevels sublevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + subUserLevel); //获取当前等级参数
+                                                        if (sublevel != null)
+                                                        {
+                                                            decimal otherPercent = 0.001M - sublevel.Percents;
+                                                            decimal otherMoney = HelpDirectTradeAmt * otherPercent;
+                                                            if (otherMoney >= obj.MinProfitVal)
+                                                            {
+                                                                result.Add(new ProfitResult()
+                                                                {
+                                                                    UserId = subuser.Id,
+                                                                    UserNav = subuser.ParentNav,
+                                                                    Money = PublicFunction.NumberFormat(otherMoney),
+                                                                    ProfitRate = otherPercent,
+                                                                    Message = "分润补贴",
+                                                                    BankCardType = BankCardType,
+                                                                    QrPayFlag = QrPayFlag,
+                                                                    DirectFlag = 1,
+                                                                    BrandId = BrandId,
+                                                                    IsSubsidy = 1,
+                                                                    TradeAmount = HelpDirectTradeAmt,
+                                                                    HelpFlag = 1,
+                                                                });
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                    curLevel = UserLevel;
+                                }
+                                level = 0;
+                                foreach (string UserIdString in ParentNavList)
+                                {
+                                    level += 1;
+                                    int uid = int.Parse(UserIdString);
+                                    Users user = dbnew.Users.FirstOrDefault(m => m.Id == uid) ?? new Users();
+                                    int UserLevel = user.UserLevel; //当前会员等级
+                                    UserRankWhite rank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == user.Id && m.UpdateDate > now);
+                                    if (rank != null)
+                                    {
+                                        if (rank.Rank > UserLevel)
+                                        {
+                                            UserLevel = rank.Rank;
+                                        }
+                                    }
+                                    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 = BankCardType,
+                                                    QrPayFlag = QrPayFlag,
+                                                    DirectFlag = selfUser.Id == user.Id ? 1 : 0,
+                                                    IsSubsidy = 0,
+                                                    TradeAmount = NotHelpDirectTradeAmt,
+                                                    HelpFlag = 0,
+                                                });
+                                            }
+                                        }
+                                    }
+                                    curLevel = UserLevel;
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
+                    }
+                    dbnew.Dispose();
+                }
+            }
+            return result;
+        }
+        #endregion
+
+    }
+}

+ 96 - 117
AppStart/Helper/StatService.cs

@@ -1175,141 +1175,119 @@ namespace MySystem
 
 
 
 
 
 
-        // 每天统计头一天的交易额
-        public void StartEverDayV2(string date)
+        // 统计交易额V2
+        public void StartEverDayV2()
         {
         {
-            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
-            Thread th = new Thread(StatTradeAmountEverDayV2);
+            Thread th = new Thread(StartEverDayV2Do);
             th.IsBackground = true;
             th.IsBackground = true;
-            th.Start(date);
-            // Thread th = new Thread(StartEverDayV2Do);
-            // th.IsBackground = true;
-            // th.Start();
+            th.Start();
         }
         }
-        // public void StartEverDayV2Do()
-        // {
-        //     DateTime end = DateTime.Parse("2022-06-15 00:00:00");
-        //     DateTime check = DateTime.Parse("2022-06-01");
-        //     while (check <= end)
-        //     {
-        //         StatTradeAmountEverDayV2(check.ToString("yyyy-MM-dd"));
-        //         Thread.Sleep(1000);
-        //         check = check.AddDays(1);
-        //     }
-        // }
-        public void StatTradeAmountEverDayV2(object sender)
+        public void StartEverDayV2Do()
         {
         {
-            string date = sender.ToString();
-            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额V2日志");
-            WebCMSEntities db = new WebCMSEntities();
+            while (true)
+            {
+                if(DateTime.Now.Hour >= 2)
+                {
+                    StatTradeAmountEverDayV2();
+                }
+                Thread.Sleep(100);
+            }
+        }
+        public void StatTradeAmountEverDayV2()
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行交易额V2日志");
             try
             try
             {
             {
-                string TradeDate = date.Replace("-", "");
-                string TradeMonth = TradeDate.Substring(0, 6);
-                string start = date + " 00:00:00";
-                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
-                string startId = "0";
-                List<string> uids = new List<string>();
-                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
-                if (startDt.Rows.Count > 0)
+                string startId = function.ReadInstance("/TradeRecord/Id.txt");
+                if(string.IsNullOrEmpty(startId))
                 {
                 {
-                    startId = startDt.Rows[0][0].ToString();
+                    startId = "718574";
                 }
                 }
-                function.WriteLog(startId + "\n\n", "执行昨天交易额V2日志");
-                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
-                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额V2日志");
-                foreach (DataRow userDr in userDt.Rows)
+                DataTable idsDt = OtherMySqlConn.dtable("select Id from TradeRecord where Id>=" + startId + " and QueryCount=0 order by Id limit 500");
+                if(idsDt.Rows.Count > 0)
                 {
                 {
-                    int UserId = int.Parse(userDr["Id"].ToString());
-                    string ParentNav = userDr["ParentNav"].ToString();
-                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额V2日志");
-                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,sum(TradeAmount),count(Id) from TradeRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType");
-                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额V2日志");
-                    foreach (DataRow selfDr in selfdt.Rows)
+                    string ids = "";
+                    foreach (DataRow idsDr in idsDt.Rows)
                     {
                     {
-                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
-                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
-                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
-                        int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
-                        int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
-                        int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
-                        int PayType = int.Parse(selfDr["PayType"].ToString());
-                        decimal TradeAmount = decimal.Parse(selfDr[7].ToString());
-                        int TradeCount = int.Parse(selfDr[8].ToString());
-                        TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "self");
-                        if (selfStat == null)
-                        {
-                            selfStat = db.TradeDaySummary.Add(new TradeDaySummary()
-                            {
-                                UserId = UserId,
-                                TradeMonth = TradeMonth,
-                                TradeDate = TradeDate,
-                                BrandId = BrandId,
-                                QueryCount = QrPayFlag,
-                                VipFlag = VipFlag,
-                                PayType = PayType,
-                                SeoTitle = "self",
-                            }).Entity;
-                            db.SaveChanges();
-                        }
-                        if (BankCardType == 0)
+                        ids += idsDr["Id"].ToString() + ",";
+                        startId = idsDr["Id"].ToString();
+                    }
+                    DataTable selfDt = OtherMySqlConn.dtable("select UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id) from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d')");
+                    if (selfDt.Rows.Count > 0)
+                    {
+                        function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时交易额V2日志");
+                        foreach (DataRow selfDr in selfDt.Rows)
                         {
                         {
-                            if (MerHelpFlag == 1)
+                            int UserId = int.Parse(selfDr["UserId"].ToString());
+                            string ParentNav = selfDr["ParentNav"].ToString();
+                            int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                            int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                            int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                            int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
+                            int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
+                            int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
+                            int PayType = int.Parse(selfDr["PayType"].ToString());
+                            string TradeDate = selfDr[9].ToString();
+                            decimal TradeAmount = decimal.Parse(selfDr[10].ToString());
+                            int TradeCount = int.Parse(selfDr[11].ToString());
+                            string TradeMonth = TradeDate.Substring(0, 6);
+                            WebCMSEntities db = new WebCMSEntities();
+                            TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "self");
+                            if (selfStat == null)
                             {
                             {
-                                selfStat.HelpDirectDebitTradeAmt += TradeAmount;
-                                if (CapFlag == 1)
+                                selfStat = db.TradeDaySummary.Add(new TradeDaySummary()
                                 {
                                 {
-                                    selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
-                                    selfStat.HelpDirectDebitCapNum += TradeCount;
-                                }
+                                    UserId = UserId,
+                                    TradeMonth = TradeMonth,
+                                    TradeDate = TradeDate,
+                                    BrandId = BrandId,
+                                    QueryCount = QrPayFlag,
+                                    VipFlag = VipFlag,
+                                    PayType = PayType,
+                                    SeoTitle = "self",
+                                }).Entity;
+                                db.SaveChanges();
                             }
                             }
-                            else
+                            if (BankCardType == 0)
                             {
                             {
-                                selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
-                                if (CapFlag == 1)
+                                if (MerHelpFlag == 1)
+                                {
+                                    selfStat.HelpDirectDebitTradeAmt += TradeAmount;
+                                    if (CapFlag == 1)
+                                    {
+                                        selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
+                                        selfStat.HelpDirectDebitCapNum += TradeCount;
+                                    }
+                                }
+                                else
                                 {
                                 {
-                                    selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
-                                    selfStat.NotHelpDirectDebitCapNum += TradeCount;
+                                    selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
+                                    if (CapFlag == 1)
+                                    {
+                                        selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
+                                        selfStat.NotHelpDirectDebitCapNum += TradeCount;
+                                    }
                                 }
                                 }
                             }
                             }
-                        }
-                        else if (BankCardType != 0)
-                        {
-                            if (MerHelpFlag == 1)
-                            {
-                                selfStat.HelpDirectTradeAmt += TradeAmount;
-                            }
-                            else
+                            else if (BankCardType != 0)
                             {
                             {
-                                selfStat.NotHelpDirectTradeAmt += TradeAmount;
+                                if (MerHelpFlag == 1)
+                                {
+                                    selfStat.HelpDirectTradeAmt += TradeAmount;
+                                }
+                                else
+                                {
+                                    selfStat.NotHelpDirectTradeAmt += TradeAmount;
+                                }
                             }
                             }
-                        }
-                        db.SaveChanges();
-                    }
-                    if (!string.IsNullOrEmpty(ParentNav))
-                    {
-                        ParentNav += "," + UserId + ",";
-                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
-                        foreach (string NavUserIdString in ParentNavList)
-                        {
-                            if (!uids.Contains(NavUserIdString + start))
+                            ParentNav += "," + UserId + ",";
+                            if (!string.IsNullOrEmpty(ParentNav))
                             {
                             {
-                                uids.Add(NavUserIdString + start);
-                                int NavUserId = int.Parse(NavUserIdString);
-                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额V2日志");
-                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,sum(TradeAmount),count(Id) from TradeRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType");
-                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额V2日志");
-                                foreach (DataRow teamDr in teamDt.Rows)
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                foreach (string NavUserIdString in ParentNavList)
                                 {
                                 {
-                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
-                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
-                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
-                                    int MerHelpFlag = int.Parse(teamDr["MerHelpFlag"].ToString());
-                                    int CapFlag = int.Parse(teamDr["CapFlag"].ToString());
-                                    int VipFlag = int.Parse(teamDr["VipFlag"].ToString());
-                                    int PayType = int.Parse(teamDr["PayType"].ToString());
-                                    decimal TradeAmount = decimal.Parse(teamDr[7].ToString());
-                                    int TradeCount = int.Parse(teamDr[8].ToString());
+                                    int NavUserId = int.Parse(NavUserIdString);
                                     TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "team");
                                     TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "team");
                                     if (teamStat == null)
                                     if (teamStat == null)
                                     {
                                     {
@@ -1358,11 +1336,13 @@ namespace MySystem
                                             teamStat.NotHelpNonDirectTradeAmt += TradeAmount;
                                             teamStat.NotHelpNonDirectTradeAmt += TradeAmount;
                                         }
                                         }
                                     }
                                     }
-                                    db.SaveChanges();
-                                    OtherMySqlConn.op("update Users set ThisMonthTrade=ThisMonthTrade+" + TradeAmount + " where Id=" + NavUserId);
                                 }
                                 }
                             }
                             }
+                            db.SaveChanges();
+                            db.Dispose();
                         }
                         }
+                        OtherMySqlConn.op("update TradeRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
+                        function.WritePage("/TradeRecord/", "Id.txt", startId);
                     }
                     }
                 }
                 }
             }
             }
@@ -1370,8 +1350,7 @@ namespace MySystem
             {
             {
                 function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天交易额V2异常");
                 function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天交易额V2异常");
             }
             }
-            db.Dispose();
-            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额V2日志");
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行交易额V2日志");
         }
         }
 
 
 
 

+ 22 - 22
Startup.cs

@@ -90,9 +90,9 @@ namespace MySystem
             // services.AddHostedService<PopService>();
             // services.AddHostedService<PopService>();
             // services.AddHostedService<SycnSpTimer>(); //同步SP数据
             // services.AddHostedService<SycnSpTimer>(); //同步SP数据
 
 
-            services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
-            services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
-            services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+            // services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            // services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            // services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
 
 
             //services.AddHttpContextAccessor();
             //services.AddHttpContextAccessor();
 
 
@@ -190,29 +190,29 @@ namespace MySystem
             // TradeStatTimer2.Instance.Start(); //交易统计
             // TradeStatTimer2.Instance.Start(); //交易统计
 
 
             //必须打开的
             //必须打开的
-            ActiveRewardTimer.Instance.Start(); //实时处理激活记录
-            TradeStatTimer.Instance.Start(); //交易统计
-            ChangePosTimer.Instance.Start(); //售后换新执行机具数据转移
-            MakeReferenceQrCodeService.Instance.StartListen(); //生成创客邀请二维码
-            SycnSpBindService.Instance.Start(); //同步SP绑定数据
-            SycnSpMerchantService.Instance.Start(); //同步SP商户数据
-            SycnSpActiveService.Instance.Start(); //同步SP激活数据
-            SycnSpTradeService.Instance.Start(); //同步SP交易数据
-            SycnSpChangeBindService.Instance.Start(); //同步SP换绑数据
-            SycnSpUnBindService.Instance.Start(); //同步SP解绑数据
-            RedPackageHelper.Instance.Start(); //每天生成300个红包
-            RedPackageHelper.Instance.StartStatTop10(); //红包活动统计排行
-            RedPackageHelper.Instance.StartSendPrize(); //红包活动发奖
+            // ActiveRewardTimer.Instance.Start(); //实时处理激活记录
+            // TradeStatTimer.Instance.Start(); //交易统计
+            // ChangePosTimer.Instance.Start(); //售后换新执行机具数据转移
+            // MakeReferenceQrCodeService.Instance.StartListen(); //生成创客邀请二维码
+            // SycnSpBindService.Instance.Start(); //同步SP绑定数据
+            // SycnSpMerchantService.Instance.Start(); //同步SP商户数据
+            // SycnSpActiveService.Instance.Start(); //同步SP激活数据
+            // SycnSpTradeService.Instance.Start(); //同步SP交易数据
+            // SycnSpChangeBindService.Instance.Start(); //同步SP换绑数据
+            // SycnSpUnBindService.Instance.Start(); //同步SP解绑数据
+            // RedPackageHelper.Instance.Start(); //每天生成300个红包
+            // RedPackageHelper.Instance.StartStatTop10(); //红包活动统计排行
+            // RedPackageHelper.Instance.StartSendPrize(); //红包活动发奖
             //必须打开的
             //必须打开的
 
 
-            StatService.Instance.StartPosActNum(); //实时统计激活数
-            StatService.Instance.StartNewUserNum(); //实时统计新增创客数
-            StatService.Instance.StatProfit(); //实时统计创客收益
-            LeaderPrizeService.Instance.Start(); //大盟主奖励发奖
-            MessageCenterService.Instance.Start(); // 消息队列
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            // StatService.Instance.StatProfit(); //实时统计创客收益
+            // LeaderPrizeService.Instance.Start(); //大盟主奖励发奖
+            // MessageCenterService.Instance.Start(); // 消息队列
             // StatServiceTmp.Instance.Start();
             // StatServiceTmp.Instance.Start();
             // StatService.Instance.StartEverDay("");
             // StatService.Instance.StartEverDay("");
-            // StatService.Instance.StartEverDayV2("");
+            StatService.Instance.StartEverDayV2();
             // RedPackageHelper.Instance.Start();
             // RedPackageHelper.Instance.Start();
             // StatService.Instance.StatUserLevel();
             // StatService.Instance.StatUserLevel();
             // ProfitHelper.Instance.StatProfit("202205"); //统计分润
             // ProfitHelper.Instance.StatProfit("202205"); //统计分润