lichunlei пре 4 година
родитељ
комит
5191df0a34

+ 275 - 0
AppStart/Helper/SycnProfitServiceV2.cs

@@ -0,0 +1,275 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    public class SycnProfitServiceV2
+    {
+        public readonly static SycnProfitServiceV2 Instance = new SycnProfitServiceV2();
+        private SycnProfitServiceV2()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("SycnProfitQueue2");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "同步分润数据");
+                        string[] data = content.Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                        int BrandId = int.Parse(data[0]);
+                        string date = data[1];
+                        int OpType = int.Parse(data[2]);
+                        string SysUserName = data[3];
+                        if (OpType == 0)
+                        {
+                            DoTradeProfit(BrandId, date, SysUserName);
+                            DoSubsidyProfit(BrandId, date);
+                        }
+                        else if (OpType == 1)
+                        {
+                            DoTradeProfit2(BrandId, date, SysUserName);
+                            DoSubsidyProfit2(BrandId, date);
+                        }
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "同步分润数据");
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "同步分润数据异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+
+        private void DoTradeProfit(int BrandId, string date, string SysUserName)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            OtherMySqlConn.op("insert into ProfitRecord (CreateDate,CreateMan,SeoTitle,ParentNav,BrandId,UserId,DirectFlag,ProfitAmount) select now(),'root','" + date + "',(select ParentNav from Users where Id=p.UserId)," + BrandId + ",UserId,ProfitType,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord p where CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "' group by UserId,ProfitType order by UserId");
+            DataTable dt = OtherMySqlConn.dtable("select UserId,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord where CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "' group by UserId");
+            function.WriteLog("分润:" + BrandId + ":" + dt.Rows.Count, "同步分润数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["UserId"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[1].ToString());
+                try
+                {
+                    string IdBrand = UserId + "_" + BrandId;
+                    UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                    if (MachineData == null)
+                    {
+                        MachineData = db.UserMachineData.Add(new UserMachineData()
+                        {
+                            IdBrand = IdBrand,
+                        }).Entity;
+                        db.SaveChanges();
+                    }
+                    MachineData.TradeProfit += ProfitMoney;
+                    db.SaveChanges();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步到余额异常");
+                }
+                function.WriteLog(index.ToString(), "同步分润数据");
+            }
+            OtherMySqlConn.op("update ProfitRewardRecord set CheckStatus=1 where CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "'");
+                
+            db.Dispose();
+        }
+        private void DoTradeProfit2(int BrandId, string date, string SysUserName)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            
+            DataTable dt = OtherMySqlConn.dtable("select UserId,DirectFlag,ProfitAmount from ProfitRecord where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Version=0 and UserId>0");
+            function.WriteLog("分润:" + BrandId + ":" + dt.Rows.Count, "同步分润数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["UserId"].ToString());
+                int DirectFlag = int.Parse(dr["DirectFlag"].ToString());
+                decimal ProfitAmount = decimal.Parse(dr["ProfitAmount"].ToString());
+                var tran = db.Database.BeginTransaction();
+                try
+                {
+                    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();
+                    }
+                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                    account.BalanceAmount += ProfitAmount;
+                    account.TotalAmount += ProfitAmount;
+                    decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                    decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                    decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                    UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+                    {
+                        CreateDate = DateTime.Now,
+                        UpdateDate = DateTime.Now,
+                        UserId = UserId, //创客
+                        ProductType = BrandId,
+                        ChangeType = 1, //变动类型
+                        ChangeAmount = ProfitAmount, //变更金额
+                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                        Remark = DirectFlag == 1 ? "直拓商户分润" : "品牌推广服务费",
+                    }).Entity;
+                    db.SaveChanges();
+                    tran.Commit();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitAmount + "\n" + ex.ToString(), "同步到余额异常");
+                    tran.Rollback();
+                }
+                function.WriteLog(index.ToString(), "同步分润数据");
+            }
+            OtherMySqlConn.dtable("update ProfitRecord set Version=1 where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Version=0 and UserId>0");
+                
+            db.Dispose();
+        }
+
+
+        //分润补贴
+        private void DoSubsidyProfit(int BrandId, string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            
+            DataTable dt = OtherMySqlConn.dtable("select SubsidyUserId,sum(SubsidyProfitRate) from ProfitSubsidyDetail where Status=0 and BrandId=" + BrandId + " and TradeMonth='" + date + "' GROUP BY SubsidyUserId");
+            function.WriteLog("补贴:" + BrandId + ":" + dt.Rows.Count, "同步补贴数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["SubsidyUserId"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[1].ToString());
+                try
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                    string IdBrand = UserId + "_" + BrandId;
+                    UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                    if (MachineData == null)
+                    {
+                        MachineData = db.UserMachineData.Add(new UserMachineData()
+                        {
+                            IdBrand = IdBrand,
+                        }).Entity;
+                        db.SaveChanges();
+                    }
+                    MachineData.OtherProfit += ProfitMoney;
+                    db.SaveChanges();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步到补贴异常");
+                }
+                function.WriteLog(index.ToString(), "同步补贴数据");
+            }
+            OtherMySqlConn.dtable("update ProfitSubsidyDetail set Status=1 where Status=0 and BrandId=" + BrandId + " and TradeMonth='" + date + "'");
+                
+            db.Dispose();
+        }
+
+        private void DoSubsidyProfit2(int BrandId, string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            
+            DataTable dt = OtherMySqlConn.dtable("select SubsidyUserId,sum(SubsidyProfitRate) from ProfitSubsidyDetail where Status=1 and BrandId=" + BrandId + " and TradeMonth='" + date + "' GROUP BY SubsidyUserId");
+            function.WriteLog("补贴:" + BrandId + ":" + dt.Rows.Count, "同步补贴数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["SubsidyUserId"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[1].ToString());
+                var tran = db.Database.BeginTransaction();
+                try
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                    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();
+                    }
+                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                    account.BalanceAmount += ProfitMoney;
+                    account.TotalAmount += ProfitMoney;
+                    decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                    decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                    decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                    UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+                    {
+                        CreateDate = DateTime.Now,
+                        UpdateDate = DateTime.Now,
+                        UserId = UserId, //创客
+                        ProductType = BrandId,
+                        ChangeType = 111, //变动类型
+                        ChangeAmount = ProfitMoney, //变更金额
+                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                        Remark = "直拓商户补贴",
+                    }).Entity;
+                    db.SaveChanges();
+                    tran.Commit();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步到补贴异常");
+                    tran.Rollback();
+                }
+                function.WriteLog(index.ToString(), "同步补贴数据");
+            }
+            OtherMySqlConn.dtable("update ProfitSubsidyDetail set Status=2 where Status=1 and BrandId=" + BrandId + " and TradeMonth='" + date + "'");
+                
+            db.Dispose();
+        }
+    }
+}

+ 1 - 1
Areas/Admin/Controllers/MainServer/ProfitRewardRecordController.cs

@@ -525,7 +525,7 @@ namespace MySystem.Areas.Admin.Controllers
                 function.WritePage("/Balance/" + BrandId + "/", date + OpTypeString + ".txt", DateTime.Now.ToString());
                 // DoTradeProfit(BrandId, date, OpType);
                 // DoSubsidyProfit(BrandId, date, OpType);
-                RedisDbconn.Instance.AddList("SycnProfitQueue", BrandId + "#cut#" + date + "#cut#" + OpType + "#cut#" + SysUserName);
+                RedisDbconn.Instance.AddList("SycnProfitQueue2", BrandId + "#cut#" + date + "#cut#" + OpType + "#cut#" + SysUserName);
                 return "success";
             }
             return date + "分润已同步,请勿重复操作";

+ 1 - 1
Startup.cs

@@ -135,7 +135,7 @@ namespace MySystem
 
             ResetUserTradeService.Instance.Start();
             ResetMerchantTradeService.Instance.Start();
-            SycnProfitService.Instance.Start();
+            SycnProfitServiceV2.Instance.Start();
             ExcelHelper.Instance.Start();
             TestHelper.Instance.Start();
         }