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

优化分润补贴导出结果效率

lichunlei 2 жил өмнө
parent
commit
521a6f83d6

+ 22 - 2
AppStart/Helper/Profit/ProfitCheckHelper.cs

@@ -41,8 +41,11 @@ namespace MySystem
             string StartId = function.CheckInt(function.ReadInstance("/PublicParam/ProfitRewardRecordId/" + Month + ".txt"));
             OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
             DataTable dt = OtherMySqlConn.dtable("select u.MakerCode,u.RealName,u.UserLevel,r.Rank,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,k.Name,BrandId,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 Id>=" + StartId + " and TradeMonth='" + Month + "' 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<'" + DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00' and r.UpdateDate>'" + DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00' ORDER BY u.MakerCode");
+            function.WriteLog(DateTime.Now.ToString() + ":" + dt.Rows.Count, "分润结果检查");
+            int index = 0;
             foreach(DataRow dr in dt.Rows)
             {
+                index += 1;
                 string MakerCode = dr["MakerCode"].ToString();
                 string RealName = dr["RealName"].ToString();
                 int UserLevel = int.Parse(function.CheckInt(dr["UserLevel"].ToString()));
@@ -86,8 +89,13 @@ namespace MySystem
                     DebitTradeAmt = DebitTradeAmt,
                     DebitTradeProfit = DebitTradeProfit,
                 });
-                db.SaveChanges();
+                if(index % 200 == 0)
+                {
+                    db.SaveChanges();
+                }
+                function.WriteLog(DateTime.Now.ToString() + ":" + index, "分润结果检查");
             }
+            db.SaveChanges();
             db.Dispose();
         }
 
@@ -98,8 +106,11 @@ namespace MySystem
             string StartId = function.CheckInt(function.ReadInstance("/PublicParam/ProfitSubsidyDetailId/" + Month + ".txt"));
             OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
             DataTable dt = OtherMySqlConn.dtable("select u.MakerCode,u.RealName,u.UserLevel,r.Rank,m.KqSnNo,m.MerchantName,(case when SubsidyType=1 then '直营' else '团队' end) as DirectFlag,k.Name,tb.BrandId,CreditTradeAmt,SubsidyProfit from (select SubsidyUserId,MerchantId,BrandId,SubsidyType,sum(CreditTradeAmt) as CreditTradeAmt,sum(SubsidyProfitRate) as SubsidyProfit from ProfitSubsidyDetail where Id>=" + StartId + " and TradeMonth='" + Month + "' 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 and r.CreateDate<'" + DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00' and r.UpdateDate>'" + DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00'");
+            function.WriteLog(DateTime.Now.ToString() + ":" + dt.Rows.Count, "分润结果检查");
+            int index = 0;
             foreach(DataRow dr in dt.Rows)
             {
+                index += 1;
                 string MakerCode = dr["MakerCode"].ToString();
                 string RealName = dr["RealName"].ToString();
                 int UserLevel = int.Parse(function.CheckInt(dr["UserLevel"].ToString()));
@@ -127,8 +138,13 @@ namespace MySystem
                     CreditTradeAmt = CreditTradeAmt,
                     SubsidyProfit = SubsidyProfit,
                 });
-                db.SaveChanges();
+                if(index % 200 == 0)
+                {
+                    db.SaveChanges();
+                }
+                function.WriteLog(DateTime.Now.ToString() + ":" + index, "分润结果检查");
             }
+            db.SaveChanges();
             db.Dispose();
         }
 
@@ -143,10 +159,13 @@ namespace MySystem
             {
                 List<int> ids = new List<int>();
                 List<ProfitRewardExport> list = db.ProfitRewardExport.Where(m => m.SeoTitle == Month && m.Id > StartId && m.Status == 0).OrderBy(m => m.MakerCode).ThenBy(m => m.DirectFlag).ThenBy(m => m.BrandName).ThenBy(m => m.Id).Take(50).ToList();
+                function.WriteLog(DateTime.Now.ToString() + ":" + list.Count, "分润结果检查");
                 if(list.Count > 0)
                 {
+                    int index = 0;
                     foreach(ProfitRewardExport sub in list)
                     {
+                        index += 1;
                         int BrandId = sub.Sort;
                         string MakerCode = sub.MakerCode;
                         decimal TotalProfit = 0;
@@ -348,6 +367,7 @@ namespace MySystem
                             db.SaveChanges();
                         }
                         StartId = sub.Id;
+                        function.WriteLog(DateTime.Now.ToString() + "-" + index, "分润结果检查");
                     }
                 }
                 else

+ 1 - 1
AppStart/Helper/Profit/ProfitHelperV2.cs

@@ -37,7 +37,7 @@ namespace MySystem
         {
             while (true)
             {
-                string content = "1"; //RedisDbconn.Instance.RPop<string>("DoProfitQueue");
+                string content = RedisDbconn.Instance.RPop<string>("DoProfitQueue");
                 if(!string.IsNullOrEmpty(content))
                 {
                     StatProfiting();

+ 8 - 10
AppStart/Helper/StatService.cs

@@ -1641,15 +1641,13 @@ namespace MySystem
             {
                 if(DateTime.Now.Day == 3 && DateTime.Now.Hour > 4)
                 {
-                    // string Month = DateTime.Now.AddDays(-1).ToString("yyyy-MM");
-                    // string flag = function.ReadInstance("/ProfitFlag/" + Month + ".txt");
-                    // if (string.IsNullOrEmpty(flag))
-                    // {
-                    //     function.WritePage("/ProfitFlag/", Month + ".txt", DateTime.Now.ToString("HH:mm:ss"));
-                    //     StatUserLevelStart();
-                    // }
-                    // ProfitHelperV2.Instance.StatProfit();
-                    RedisDbconn.Instance.AddList("DoTableEveryMonthQueue", "1");
+                    string Month = DateTime.Now.AddDays(-1).ToString("yyyy-MM");
+                    string flag = function.ReadInstance("/ProfitFlag/" + Month + ".txt");
+                    if (string.IsNullOrEmpty(flag))
+                    {
+                        function.WritePage("/ProfitFlag/", Month + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                        StatUserLevelStart();
+                    }
                 }
                 Thread.Sleep(600000);
             }
@@ -1780,7 +1778,7 @@ namespace MySystem
             }
             db.Dispose();
 
-            ProfitHelperV2.Instance.StatProfit(); //统计分润
+            RedisDbconn.Instance.AddList("DoTableEveryMonthQueue", "1");
         }
 
 

+ 2 - 2
Startup.cs

@@ -203,8 +203,8 @@ namespace MySystem
             // RecommendActStatService.Instance.Start(); //推荐王奖励数据统计
             // StoreApplyHelper.Instance.Start(); // 每月1号重置仓库额度
             // StoreApplyHelper.Instance.StartEverTime();
-            // StatService.Instance.StatUserLevel(); //升级并分润
-            ProfitHelperV2.Instance.StatProfit();
+            StatService.Instance.StatUserLevel(); //升级并分润
+            // ProfitHelperV2.Instance.StatProfit();
             //必须打开的
 
             // HelpProfitHelper.Instance.Start(); //助利宝分润