Explorar el Código

修复补贴逻辑
改造小分仓额度重置功能

lichunlei hace 2 años
padre
commit
ee08f1bcd2

+ 1 - 1
AppStart/Helper/AlipayPayBack2Service.cs

@@ -92,7 +92,7 @@ namespace MySystem
                 {
                     int total = db.Orders.Count(m => m.ParentOrderId == order.ParentOrderId);
                     int paycount = db.Orders.Count(m => m.ParentOrderId == order.ParentOrderId && m.Status > 0);
-                    if(paycount + 1 >= total)
+                    if(paycount >= total)
                     {
                         // order = db.Orders.FirstOrDefault(m => m.Id == order.ParentOrderId && m.Status == 0);
                         // if (order != null)

+ 1 - 1
AppStart/Helper/DepositReturnService.cs

@@ -61,7 +61,7 @@ namespace MySystem
                 PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == item.MerchantId) ?? new PosMerchantInfo();
                 string Name = item.OperateMan;
                 string AccountNo = item.AlipayAccountNo;
-                string Amount = item.ReturnAmount.ToString("f2");
+                string Amount = "0.01"; //item.ReturnAmount.ToString("f2");
                 PublicAccountSet set = db.PublicAccountSet.FirstOrDefault() ?? new PublicAccountSet();
                 string result = new Alipay.AlipayPublicMethod().TransferToAccount(set.AlipayAppId, set.AlipayPrivateKey,set.AlipayPublicKey, AccountNo, Amount, "押金返还", Name, "机具SN:" + mer.KqSnNo + ";商户姓名:" + mer.MerRealName);
                 if(result.StartsWith("success"))

+ 39 - 14
AppStart/Helper/DepositReturnStatService.cs

@@ -27,23 +27,30 @@ namespace MySystem
         {
             while(true)
             {
-                if(DateTime.Now.Day == 1 && DateTime.Now.Hour == 1)
-                {
-                    StartEverDayDo();
-                }
-                Thread.Sleep(60000);
+                // if(DateTime.Now.Day == 1 && DateTime.Now.Hour == 1)
+                // {
+                    try
+                    {
+                        StartEverDayDo();
+                    }
+                    catch(Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计押金达标数据异常");
+                    }
+                // }
+                Thread.Sleep(1000);
             }
         }
 
         public void StartEverDayDo()
         {
             string Month = DateTime.Now.ToString("yyyyMM");
-            string chk = function.ReadInstance("/DepositReturn/" + Month + ".txt");
-            if(!string.IsNullOrEmpty(chk))
-            {
-                return;
-            }
-            function.WritePage("/DepositReturn/", Month + ".txt", DateTime.Now.ToString());
+            // string chk = function.ReadInstance("/DepositReturn/" + Month + ".txt");
+            // if(!string.IsNullOrEmpty(chk))
+            // {
+            //     return;
+            // }
+            // function.WritePage("/DepositReturn/", Month + ".txt", DateTime.Now.ToString());
             WebCMSEntities db = new WebCMSEntities();
             int startid = int.Parse(function.CheckInt(function.ReadInstance("/DepositReturn/MerchantId.txt")));
             List<PosMerchantInfo> merchants = db.PosMerchantInfo.Where(m => m.Id > startid && m.StandardStatus == 0).OrderBy(m => m.Id).Take(50).ToList();
@@ -51,9 +58,22 @@ namespace MySystem
             {
                 if(merchant.ActiveStatus == 1)
                 {
+                    string start = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                     int StandardMonths = merchant.StandardMonths;
-                    int StandardStatus = merchant.StandardStatus;
-                    DateTime ActDate = merchant.MerStandardDate.Value;
+                    int StandardStatus = merchant.StandardStatus;                    
+                    DateTime ActDate = merchant.CreateDate.Value;
+                    if(merchant.MerStandardDate == null)
+                    {
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == merchant.KqSnNo && m.ActivationState == 1 && m.ActivationTime != null);
+                        if(pos != null)
+                        {
+                            ActDate = pos.ActivationTime.Value;
+                        }
+                    }
+                    else
+                    {
+                        ActDate = merchant.MerStandardDate.Value;
+                    }
                     int MonthNum = StandardMonths;
                     for (int i = StandardMonths + 1; i <= 10; i++)
                     {
@@ -77,13 +97,18 @@ namespace MySystem
                             }
                         }
                     }
+                    if(MonthNum >= 10)
+                    {
+                        StandardStatus = 4;
+                    }
                     PosMerchantInfo edit = db.PosMerchantInfo.FirstOrDefault(m => m.Id == merchant.Id);
                     if(edit != null)
                     {
                         edit.StandardMonths = MonthNum;
                         edit.StandardStatus = StandardStatus;
-                        db.Dispose();
+                        db.SaveChanges();
                     }
+                    string end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                 }
                 startid = merchant.Id;
             }

+ 15 - 1
AppStart/Helper/Profit/ProfitHelper.cs

@@ -1917,8 +1917,9 @@ namespace MySystem
                 DataTable dt = new DataTable();
                 if (BankCardType == 1)
                 {
-                    dt = ProfitHelperV2.Instance.GetDataTable("select SnNo,UserId,QrPayFlag,MerHelpFlag,TradeAmount,Version from TradeRecord" + Month + " where BrandId=" + BrandId + LimitString);
+                    dt = ProfitHelperV2.Instance.GetDataTable("select SnNo,UserId,QrPayFlag,MerHelpFlag,TradeAmount,Version from TradeRecord" + Month + " where MerHelpFlag=1 and Version=0 and BrandId=" + BrandId + LimitString);
                 }
+                function.WriteLog("记录页数:" + PageNum.ToString(), "老规则分润日志");
                 function.WriteLog("记录条数:" + dt.Rows.Count.ToString(), "老规则分润日志");
                 foreach (DataRow dr in dt.Rows)
                 {
@@ -1928,11 +1929,15 @@ namespace MySystem
                         string SnNo = dr["SnNo"].ToString();
                         int UserId = int.Parse(dr["UserId"].ToString());
                         int HelpTime = int.Parse(dr["Version"].ToString()) == 1 ? 2 : int.Parse(dr["MerHelpFlag"].ToString());
+                        function.WriteLog("SnNo:" + SnNo, "老规则分润日志");
+                        function.WriteLog("UserId:" + UserId, "老规则分润日志");
+                        function.WriteLog("HelpTime:" + HelpTime, "老规则分润日志");
                         MachineForSnNo forSnNo = dbnew.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
                         PosMachinesTwo pos = dbnew.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
                         decimal Deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
                         if (pos.BindingState == 1)
                         {
+                            function.WriteLog("BindingState:" + pos.BindingState, "老规则分润日志");
                             int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
                             decimal TradeAmt = decimal.Parse(dr[4].ToString());
                             List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
@@ -1971,6 +1976,8 @@ namespace MySystem
                                         }
                                         if (UserLevel <= maxLevel && UserLevel > curLevel)
                                         {
+                                            function.WriteLog("UserLevel:" + UserLevel, "老规则分润日志");
+                                            function.WriteLog("curLevel:" + curLevel, "老规则分润日志");
                                             int LevelKindId = GetLevelKindId(BrandId, HelpTime, 1);
                                             ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
                                             if (objlevel != null)
@@ -1995,18 +2002,24 @@ namespace MySystem
                                                 // 分润补贴
                                                 if (HelpTime == 1 && level == 1)
                                                 {
+                                                    function.WriteLog("ok", "老规则分润日志");
                                                     int SubsidyUserId = pos.BuyUserId;
                                                     SubUser subuser = ProfitHelperV2.Instance.GetUser(SubsidyUserId, Month) ?? new SubUser();
                                                     int subUserLevel = subuser.PreUserLevel > subuser.UserLevel ? subuser.PreUserLevel : subuser.UserLevel;
+                                                    function.WriteLog("subUserLevel:" + subUserLevel, "老规则分润日志");
                                                     if(subUserLevel < 5)
                                                     {
+                                                        function.WriteLog("sub:ok:", "老规则分润日志");
                                                         ProfitObjectLevels sublevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + subUserLevel); //获取当前等级参数
                                                         if (sublevel != null)
                                                         {
                                                             decimal otherPercent = 0.001M - sublevel.Percents;
                                                             decimal otherMoney = TradeAmt * otherPercent;
+                                                            function.WriteLog("otherPercent:" + otherPercent, "老规则分润日志");
+                                                            function.WriteLog("otherMoney:" + otherMoney, "老规则分润日志");
                                                             if (otherMoney >= obj.MinProfitVal)
                                                             {
+                                                                function.WriteLog("finish:" + SnNo, "老规则分润日志");
                                                                 result.Add(new ProfitResult()
                                                                 {
                                                                     UserId = subuser.Id,
@@ -2035,6 +2048,7 @@ namespace MySystem
                                 }
                             }
                         }
+                        function.WriteLog("\n\n", "老规则分润日志");
                     }
                     catch (Exception ex)
                     {

+ 106 - 59
AppStart/Timer/ResetSmallStoreHelper.cs

@@ -29,7 +29,7 @@ public class ResetSmallStoreHelper
         {
             function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "计算小分仓额度日志");
             WebCMSEntities db = new WebCMSEntities();
-            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
             try
             {
                 string content = RedisDbconn.Instance.RPop<string>("ResetSmallStoreQueue");
@@ -41,69 +41,14 @@ public class ResetSmallStoreHelper
                     if(string.IsNullOrEmpty(check))
                     {
                         function.WritePage("/ResetSmallStore/", Month + ".txt", DateTime.Now.ToString());
-                        OtherMySqlConn.op("update UserAccount set ThisMonthPreAmount=0,ValidPreAmount=0 where ThisMonthPreAmount>0");
+                        CustomerSqlConn.op("update UserAccount set ThisMonthPreAmount=0,ValidPreAmount=0 where ThisMonthPreAmount>0", connstr);
                         string minId = "0";
-                        DataTable minIdDt = OtherMySqlConn.dtable("select min(Id) from ProfitRewardRecord where TradeMonth='" + PreMonth + "'");
+                        DataTable minIdDt = CustomerSqlConn.dtable("select min(Id) from ProfitRewardRecord where TradeMonth='" + PreMonth + "'", connstr);
                         if(minIdDt.Rows.Count > 0)
                         {
                             minId = minIdDt.Rows[0][0].ToString();
                         }
-                        DataTable dt = OtherMySqlConn.dtable("select UserId,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord where Id>=" + minId + " and UserId>0 and TradeMonth='" + PreMonth + "' group by UserId");
-                        function.WriteLog("总数" + dt.Rows.Count, "计算小分仓额度日志");
-                        int index = 0;
-                        foreach(DataRow dr in dt.Rows)
-                        {
-                            index += 1;
-                            int UserId = int.Parse(function.CheckInt(dr["UserId"].ToString()));
-                            decimal ProfitAmount = decimal.Parse(function.CheckNum(dr[1].ToString()));
-                            decimal PreProfitAmount = ProfitAmount;
-                            var prelist = db.PreSendStockDetail.Select(m => new { m.Id, m.BrandId, m.ToUserId, m.Status, m.ApplyFlag }).Where(m => m.ToUserId == UserId && m.Status == 1 && m.ApplyFlag == 0).ToList();
-                            foreach(var prepos in prelist)
-                            {
-                                if(prepos.BrandId == 1 || prepos.BrandId == 2 || prepos.BrandId == 4 || prepos.BrandId == 6 || prepos.BrandId == 7 || prepos.BrandId == 8)
-                                {
-                                    if(ProfitAmount > 200)
-                                    {
-                                        ProfitAmount -= 200;
-                                        PreSendStockDetail edit = db.PreSendStockDetail.FirstOrDefault(m => m.Id == prepos.Id);
-                                        if(edit != null)
-                                        {
-                                            edit.AuthFlag = 1;
-                                        }
-                                    }
-                                }
-                                else if(prepos.BrandId == 3 || prepos.BrandId == 5 || prepos.BrandId == 9)
-                                {
-                                    if(ProfitAmount > 300)
-                                    {
-                                        ProfitAmount -= 300;
-                                        PreSendStockDetail edit = db.PreSendStockDetail.FirstOrDefault(m => m.Id == prepos.Id);
-                                        if(edit != null)
-                                        {
-                                            edit.AuthFlag = 1;
-                                        }
-                                    }
-                                }
-                            }
-                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
-                            if (account == null)
-                            {
-                                account = db.UserAccount.Add(new UserAccount()
-                                {
-                                    Id = UserId,
-                                    UserId = UserId,
-                                }).Entity;
-                                db.SaveChanges();
-                            }
-                            account.ThisMonthPreAmount = PreProfitAmount;
-                            account.ValidPreAmount = ProfitAmount;
-                            if(index % 200 == 0)
-                            {
-                                db.SaveChanges();
-                            }
-                            function.WriteLog(index.ToString(), "计算小分仓额度日志");
-                        }
-                        db.SaveChanges();
+                        DoMethod(db, PreMonth, minId);
                     }
                 }
             }
@@ -116,4 +61,106 @@ public class ResetSmallStoreHelper
             Thread.Sleep(60000);
         }
     }
+
+    public void StartReset()
+    {
+        Thread th = new Thread(DoWorksReset);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void DoWorksReset()
+    {
+        while (true)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string content = RedisDbconn.Instance.RPop<string>("ResetSmallStoreByUserIdQueue");
+                if(!string.IsNullOrEmpty(content))
+                {
+                    string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                    string PreMonth = DateTime.Now.AddMonths(-2).ToString("yyyyMM");                    
+                    string minId = "0";
+                    DoMethod(db, PreMonth, minId, content);
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重置小分仓额度异常");
+            }
+            db.Dispose();
+            Thread.Sleep(60000);
+        }
+    }
+
+    public void DoMethod(WebCMSEntities db, string PreMonth, string minId = "0", string UId = "")
+    {
+        string sql = "";
+        if(string.IsNullOrEmpty(UId))
+        {
+            sql = "select UserId,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord where Id>=" + minId + " and UserId>0 and TradeMonth='" + PreMonth + "' group by UserId";
+        }
+        else
+        {
+            sql = "select UserId,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord where UserId=" + UId + " and TradeMonth='" + PreMonth + "' group by UserId";
+        }
+        string connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+        DataTable dt = CustomerSqlConn.dtable(sql, connstr);
+        function.WriteLog("总数" + dt.Rows.Count, "计算小分仓额度日志");
+        int index = 0;
+        foreach (DataRow dr in dt.Rows)
+        {
+            index += 1;
+            int UserId = int.Parse(function.CheckInt(dr["UserId"].ToString()));
+            decimal ProfitAmount = decimal.Parse(function.CheckNum(dr[1].ToString()));
+            decimal PreProfitAmount = ProfitAmount;
+            var prelist = db.PreSendStockDetail.Select(m => new { m.Id, m.BrandId, m.ToUserId, m.Status, m.ApplyFlag, m.AuthFlag }).Where(m => m.ToUserId == UserId && m.Status == 1 && m.ApplyFlag == 0 && m.AuthFlag == 1).ToList();
+            foreach (var prepos in prelist)
+            {
+                if (prepos.BrandId == 1 || prepos.BrandId == 2 || prepos.BrandId == 4 || prepos.BrandId == 6 || prepos.BrandId == 7 || prepos.BrandId == 8)
+                {
+                    if (ProfitAmount > 200)
+                    {
+                        ProfitAmount -= 200;
+                        PreSendStockDetail edit = db.PreSendStockDetail.FirstOrDefault(m => m.Id == prepos.Id);
+                        if (edit != null)
+                        {
+                            edit.AuthFlag = 1;
+                        }
+                    }
+                }
+                else if (prepos.BrandId == 3 || prepos.BrandId == 5 || prepos.BrandId == 9)
+                {
+                    if (ProfitAmount > 300)
+                    {
+                        ProfitAmount -= 300;
+                        PreSendStockDetail edit = db.PreSendStockDetail.FirstOrDefault(m => m.Id == prepos.Id);
+                        if (edit != null)
+                        {
+                            edit.AuthFlag = 1;
+                        }
+                    }
+                }
+            }
+            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
+            if (account == null)
+            {
+                account = db.UserAccount.Add(new UserAccount()
+                {
+                    Id = UserId,
+                    UserId = UserId,
+                }).Entity;
+                db.SaveChanges();
+            }
+            account.ThisMonthPreAmount = PreProfitAmount;
+            account.ValidPreAmount = ProfitAmount;
+            if (index % 200 == 0)
+            {
+                db.SaveChanges();
+            }
+            function.WriteLog(index.ToString(), "计算小分仓额度日志");
+        }
+        db.SaveChanges();
+    }
 }

+ 10 - 1
Controllers/HomeController.cs

@@ -1158,7 +1158,16 @@ namespace MySystem.Controllers
         public string test5()
         {
             WebCMSEntities db = new WebCMSEntities();
-            StoreApplyHelper.Instance.DoSomething(db);
+            string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+            string PreMonth = DateTime.Now.AddMonths(-2).ToString("yyyyMM");
+            string minId = "0";
+            string connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            DataTable minIdDt = CustomerSqlConn.dtable("select min(Id) from ProfitRewardRecord where TradeMonth='" + PreMonth + "'", connstr);
+            if(minIdDt.Rows.Count > 0)
+            {
+                minId = minIdDt.Rows[0][0].ToString();
+            }
+            ResetSmallStoreHelper.Instance.DoMethod(db, PreMonth, minId, "10115");
             db.Dispose();
             return "ok";
         }

+ 3 - 1
Startup.cs

@@ -135,13 +135,14 @@ namespace MySystem
             {
                 app.UseDeveloperExceptionPage();
                 // app.UseExceptionHandler("/Home/Error");
+                Library.ConfigurationManager.EnvironmentFlag = 1;
             }
             else
             {
                 app.UseExceptionHandler("/Home/Error");
                 app.UseHsts();
+                Library.ConfigurationManager.EnvironmentFlag = 2;
             }
-            Library.ConfigurationManager.EnvironmentFlag = 2;
             Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
             // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
 
@@ -225,6 +226,7 @@ namespace MySystem
             LeaderApplyCouponsHelper.Instance.Start(); //盟主储蓄金申请机具券打标记
             // UserMonthFeeHelper.Instance.Start(); //每月创客服务费
             UserMonthFeeHelper.Instance.Start2(); //临时扣创客服务费
+            DepositReturnService.Instance.Start(); //退押金到支付宝余额
 
             // StatService.Instance.StartPosActNum(); //实时统计激活数
             // StatService.Instance.StartNewUserNum(); //实时统计新增创客数

+ 3 - 3
appsettings.Development.json

@@ -17,9 +17,9 @@
     "Host": "http://localhost:5047/",
     "SourceHost": "http://bs.kexiaoshuang.com/",
     "Database": "KxsMainServer",
-    "SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer2;password=FrW8ZfxlcaVdm1r0;database=KxsMainServer2;charset=utf8;",
-    "Pxc1SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer2;password=FrW8ZfxlcaVdm1r0;database=KxsMainServer2;charset=utf8;",
-    "MainSqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer2;password=FrW8ZfxlcaVdm1r0;database=KxsStatServer;charset=utf8;",
+    "SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=FrW8ZfxlcaVdm1r0;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=FrW8ZfxlcaVdm1r0;database=KxsMainServer;charset=utf8;",
+    "MainSqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=FrW8ZfxlcaVdm1r0;database=KxsStatServer;charset=utf8;",
     "SpSqlConnStr": "server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
     "OpSqlConnStr": "server=47.109.31.237;port=3306;user=KxsOpServer;password=r7jwZ8ydLoeswDR4;database=KxsOpServer;charset=utf8;",
     "RedisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",