فهرست منبع

增加统计激活数量,新增创客数
增加盛付通相关逻辑

lichunlei 3 سال پیش
والد
کامیت
d77ef412ae
38فایلهای تغییر یافته به همراه14673 افزوده شده و 178 حذف شده
  1. 1891 0
      .history/AppStart/Helper/StatService_20220524003252.cs
  2. 1891 0
      .history/AppStart/Helper/StatService_20220524191613.cs
  3. 1891 0
      .history/AppStart/Helper/StatService_20220524191614.cs
  4. 1891 0
      .history/AppStart/Helper/StatService_20220525164444.cs
  5. 1891 0
      .history/AppStart/Helper/StatService_20220525164445.cs
  6. 108 0
      .history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220502130035.cs
  7. 108 0
      .history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190450.cs
  8. 108 0
      .history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190518.cs
  9. 108 0
      .history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190519.cs
  10. 409 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220522141932.cs
  11. 421 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524190809.cs
  12. 421 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191030.cs
  13. 421 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191031.cs
  14. 421 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191112.cs
  15. 421 0
      .history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524213842.cs
  16. 266 0
      .history/Startup_20220523234811.cs
  17. 266 0
      .history/Startup_20220525102702.cs
  18. 266 0
      .history/Startup_20220525102707.cs
  19. 266 0
      .history/Startup_20220525102708.cs
  20. 266 0
      .history/Startup_20220525155548.cs
  21. 266 0
      .history/Startup_20220525155550.cs
  22. 39 0
      .history/appsettings_20220520215259.json
  23. 39 0
      .history/appsettings_20220525155728.json
  24. 39 0
      .history/appsettings_20220525155741.json
  25. 39 0
      .history/appsettings_20220525155742.json
  26. 39 0
      .history/appsettings_20220525160001.json
  27. 1 1
      AppStart/Helper/AlipayPayBack2Service.cs
  28. 1 1
      AppStart/Helper/DelMySql/DeleteMySqlDataService.cs
  29. 4 4
      AppStart/Helper/Profit/ProfitHelper.cs
  30. 359 146
      AppStart/Helper/StatService.cs
  31. 1 1
      AppStart/Helper/SycnMysql/PublicTableHelper.cs
  32. 2 2
      AppStart/Helper/SycnSpServer/SycnSpActiveService.cs
  33. 12 0
      AppStart/Helper/SycnSpServer/SycnSpTradeService.cs
  34. 1 1
      AppStart/Helper/TestService.cs
  35. 1 1
      AppStart/Timer/TestHelper.cs
  36. 91 15
      Controllers/HomeController.cs
  37. 3 1
      Startup.cs
  38. 5 5
      appsettings.json

+ 1891 - 0
.history/AppStart/Helper/StatService_20220524003252.cs

@@ -0,0 +1,1891 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class StatService
+    {
+        public readonly static StatService Instance = new StatService();
+        private StatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
+                if (string.IsNullOrEmpty(flag))
+                {
+                    function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                    dosomething1(doDate);
+                    dosomething11(doDate);
+                    // dosomething2(doDate);
+                    StartEverDay(doDate);
+                    dosomething4(doDate);
+                    ListenFluxRecord(doDate);
+                }
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+        public void ActiveReward(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething3();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+                function.WritePage("/static/", "act.txt", DateTime.Now.ToString());
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public void clear()
+        {
+            RedisDbconn.Instance.Clear("TotalAmount*");
+            RedisDbconn.Instance.Clear("TotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TotalPosAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalPosAmount*");
+
+            // RedisDbconn.Instance.Clear("TotalUser*");
+            // RedisDbconn.Instance.Clear("TeamTotalUser*");
+            // RedisDbconn.Instance.Clear("AddUser*");
+            // RedisDbconn.Instance.Clear("TeamAddUser*");
+
+            // RedisDbconn.Instance.Clear("TotalPosMerchant*");
+            // RedisDbconn.Instance.Clear("TeamTotalPosMerchant*");
+
+            RedisDbconn.Instance.Clear("MerTotalAmount*");
+        }
+
+
+        // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
+        public void dosomething1(string date)
+        {
+            // TODO: 每天扫描非商户型创客的持有机具数量
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
+            foreach (SpModels.BindRecord bind in binds)
+            {
+                string Mobile = bind.MerNewSnNo;
+                string MerNo = bind.MerNo;
+                string BeforeNum = "";
+                string AfterNum = "";
+                if (Mobile.Contains("****") && Mobile.Length == 11)
+                {
+                    BeforeNum = Mobile.Substring(0, 3);
+                    AfterNum = Mobile.Substring(7);
+                }
+                string Name = bind.MerName;
+                if (bind.ProductType == "2")
+                {
+                    if (Name.Contains("-"))
+                    {
+                        Name = Name.Split('-')[1];
+                    }
+                    else if (Name.Contains("_"))
+                    {
+                        Name = Name.Split('_')[1];
+                    }
+                }
+                else if (bind.ProductType == "4")
+                {
+                    Name = bind.SeoTitle;
+                }
+                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
+                if (user != null)
+                {
+                    bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
+                    if (!checkPos)
+                    {
+                        PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
+                        if (pos != null)
+                        {
+                            pos.UserId = user.Id;
+                            user.MerchantType = 1;
+                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
+                            merchant.UserId = user.Id;
+                            merchant.MerUserType = 1;
+                            pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
+                            RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("Users:" + user.Id, user);
+                            RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                        }
+                    }
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+        }
+
+        // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
+        public void dosomething11(string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
+            foreach (var user in users)
+            {
+                int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
+                int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
+                if (machineCount + couponCount >= 3)
+                {
+                    Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
+                    if (edit != null)
+                    {
+                        edit.MerchantType = 0;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.Set("Users:" + user.Id, edit);
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        
+        public void testStatTrade(string date)
+        {
+            string yesterday = date + " 00:00:00";
+            string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+            string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
+            string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
+            DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
+                int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
+                int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
+                int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
+                int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
+                decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
+                string content = "{";
+                content += "\"DateString\":\"" + date + "\",";
+                content += "\"UserId\":\"" + UserId + "\",";
+                content += "\"BrandId\":\"" + BrandId + "\",";
+                content += "\"MerchantId\":\"" + MerchantId + "\",";
+                content += "\"BankCardType\":\"" + BankCardType + "\",";
+                content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
+                content += "\"TradeAmount\":\"" + TradeAmount + "\"";
+                content += "}";
+                RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
+            }
+        }
+
+        // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething3(int posid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddDays(-1);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (posid > 0)
+            { 
+                posList = posList.Where(m => m.Id == posid);
+            }
+            else
+            {
+                posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
+            }
+            foreach (PosMachinesTwo pos in posList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if (merchant != null)
+                {
+                    // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                    // if (otherInfo != null)
+                    // {
+                    //     otherInfo.PrizeFlag1 = 1;
+                    //     db.SaveChanges();
+                    string ParentNav = "";
+                    Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                    if (user != null)
+                    {
+                        int GetUserId = user.Id;
+                        ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                        if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                        {
+                            ActPrize = ActPrize / 100;
+                        }
+                        if (ActPrize > 0)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            else if (ActPrize == 249)
+                            {
+                                ActPrize = 260;
+                            }
+                            if (GetUserId > 0)
+                            {
+                                doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
+                            }
+                        }
+                    }
+                    // }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0)
+        {
+            bool check = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo && m.RewardAmount == ActPrize);
+            if (!check)
+            {
+                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                db.ActiveReward.Add(new ActiveReward()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    MerchantId = pos.BindMerchantId, //商户
+                    StandardDate = pos.ActivationTime, //达标日期
+                    RewardAmount = ActPrize, //奖励金额
+                    BrandId = pos.BrandId, //品牌
+                    UserNav = ParentNav, //创客父级
+                    DirectBuddyNo = merchant.UserId, //商户直属创客
+                    KqMerNo = merchant.KqMerNo, //渠道商户编号
+                    KqSnNo = pos.PosSn, //渠道SN号
+                    SnType = pos.PosSnType, //机具类型
+                    SnApplyUserId = pos.BuyUserId, //机具申请创客
+                    ActType = 0, //激活类型
+                    SnStoreId = pos.StoreId, //SN仓库
+                    RewardTips = "激活奖励", //奖励描述
+                    Remark = "激活奖励", //备注
+                    ActDate = pos.ActivationTime, //激活时间
+                    TopUserId = TopUserId, //顶级创客
+                    SeoTitle = machineUser.RealName,
+                });
+                db.SaveChanges();
+                string IdBrand = GetUserId + "_" + pos.BrandId;
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.ActProfit += ActPrize;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = db.UserAccount.Add(new UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += ActPrize;
+                account.TotalAmount += ActPrize;
+                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 = GetUserId, //创客
+                    ChangeType = ChangeType, //变动类型
+                    ProductType = pos.BrandId, //产品类型
+                    ChangeAmount = ActPrize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                // 激活奖励列表
+                List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                if (!dates.Contains(dateString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                if (!months.Contains(monthString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                // 激活奖励详情
+                List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                if (!actPrizeList.Contains(pos.BindMerchantId))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                //收支明细
+                RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                RedisDbconn.Instance.Clear("UserAccount:Income:" + GetUserId + ":" + monthString);
+            }
+        }
+
+
+        //根据商户信息发放激活奖励
+        public void dosomething32(int merid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddHours(-3);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (merid > 0)
+            { 
+                merList = merList.Where(m => m.Id == merid);
+            }
+            else
+            {
+                merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
+            }
+            foreach (PosMerchantInfo merchant in merList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                // if (otherInfo != null)
+                // {
+                //     otherInfo.PrizeFlag1 = 1;
+                //     db.SaveChanges();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                string ParentNav = "";
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                if (user != null)
+                {
+                    int GetUserId = user.Id;
+                    ParentNav = user.ParentNav;
+                    int TopUserId = 0;
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                    }
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                    {
+                        ActPrize = ActPrize / 100;
+                    }
+                    if (ActPrize > 0)
+                    {
+                        bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
+                        if (!check)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            db.ActiveReward.Add(new ActiveReward()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                StandardDate = pos.ActivationTime, //达标日期
+                                RewardAmount = ActPrize, //奖励金额
+                                BrandId = pos.BrandId, //品牌
+                                UserNav = ParentNav, //创客父级
+                                DirectBuddyNo = merchant.UserId, //商户直属创客
+                                KqMerNo = merchant.KqMerNo, //渠道商户编号
+                                KqSnNo = pos.PosSn, //渠道SN号
+                                SnType = pos.PosSnType, //机具类型
+                                SnApplyUserId = pos.BuyUserId, //机具申请创客
+                                ActType = 0, //激活类型
+                                SnStoreId = pos.StoreId, //SN仓库
+                                RewardTips = "激活奖励", //奖励描述
+                                Remark = "激活奖励", //备注
+                                ActDate = pos.ActivationTime, //激活时间
+                                TopUserId = TopUserId, //顶级创客
+                                SeoTitle = machineUser.RealName,
+                            });
+                            db.SaveChanges();
+                            string IdBrand = GetUserId + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.ActProfit += ActPrize;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += ActPrize;
+                            account.TotalAmount += ActPrize;
+                            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 = GetUserId, //创客
+                                ChangeType = 0, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = ActPrize, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                            string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                            string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                            // 激活奖励列表
+                            List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                            if (!dates.Contains(dateString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                            if (!months.Contains(monthString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                            // 激活奖励详情
+                            List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                            if (!actPrizeList.Contains(pos.BindMerchantId))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            //收支明细
+                            RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                            RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                        }
+                    }
+                }
+                // }
+            }
+            db.Dispose();
+        }
+
+        
+
+        //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething4(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
+            foreach (PosMachinesTwo pos in posList)
+            {
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20))
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                        if (merchant != null)
+                        {
+                            // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                            // if (otherInfo != null)
+                            // {
+                            //     otherInfo.PrizeFlag2 = 1;
+                            //     db.SaveChanges();
+                                // 从机具所属人上级开始分开机奖励
+                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                                if (user != null)
+                                {
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        decimal Prize = 20;
+                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        {
+                                            int UserId = int.Parse(ParentNavs[i]);
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                            if (puser != null && Prize > 0)
+                                            {
+                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                {
+                                                    int pTopUserId = 0;
+                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
+                                                    {
+                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                    }
+                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = yesterday, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                        MerchantId = pos.BindMerchantId, //商户
+                                                        DirectUserId = merchant.UserId, //商户直属人
+                                                        SnNo = pos.PosSn, //SN号
+                                                        MerNo = merchant.KqMerNo, //渠道商户号
+                                                        SnType = pos.PosSnType, //机具类型
+                                                        StandardDate = pos.ActivationTime, //商户的激活日期
+                                                        SnStoreId = pos.StoreId, //SN仓库
+                                                        MerBuddyType = puser.MerchantType, //商户创客类型
+                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                        RewardTips = "开机奖励", //奖励描述
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                        SeoTitle = machineUser.RealName,
+                                                    }).Entity;
+                                                    db.OpenReward.Add(new OpenReward()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = DateTime.Now, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        RewardType = 2, //奖励类型
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                    });
+                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                    if (userData == null)
+                                                    {
+                                                        userData = db.UserMachineData.Add(new UserMachineData()
+                                                        {
+                                                            IdBrand = IdBrand,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    userData.OpenProfit += Prize;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                    //账户入库
+                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                    if (account == null)
+                                                    {
+                                                        account = db.UserAccount.Add(new UserAccount()
+                                                        {
+                                                            Id = puser.Id,
+                                                            UserId = puser.Id,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    //收支明细入库
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    account.BalanceAmount += Prize;
+                                                    account.TotalAmount += Prize;
+                                                    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 = puser.Id, //创客
+                                                        ChangeType = 50, //变动类型
+                                                        ProductType = pos.BrandId, //产品类型
+                                                        ChangeAmount = Prize, //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                                    string dateString = yesterday.ToString("yyyyMMdd");
+                                                    string monthString = yesterday.ToString("yyyyMM");
+                                                    // 开机奖励列表
+                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!dates.Contains(dateString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!months.Contains(monthString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                                    // 开机奖励详情
+                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                                    //收支明细
+                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                                    Prize -= 10;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            // }
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void dosomething42(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
+            foreach (PosMerchantInfo merchant in merList)
+            {
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                        // if (otherInfo != null)
+                        // {
+                        //     otherInfo.PrizeFlag2 = 1;
+                        //     db.SaveChanges();
+                        // 从机具所属人上级开始分开机奖励
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                        if (user != null)
+                        {
+                            if (!string.IsNullOrEmpty(user.ParentNav))
+                            {
+                                decimal Prize = 20;
+                                string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                {
+                                    int UserId = int.Parse(ParentNavs[i]);
+                                    Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                    if (puser != null && Prize > 0)
+                                    {
+                                        int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                        int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                        int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                        // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                        // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                        if (machineCount + ActiveCount + couponCount >= 3)
+                                        {
+                                            int pTopUserId = 0;
+                                            if (!string.IsNullOrEmpty(puser.ParentNav))
+                                            {
+                                                pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                            }
+                                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                            OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = yesterday, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                MerchantId = pos.BindMerchantId, //商户
+                                                DirectUserId = merchant.UserId, //商户直属人
+                                                SnNo = pos.PosSn, //SN号
+                                                MerNo = merchant.KqMerNo, //渠道商户号
+                                                SnType = pos.PosSnType, //机具类型
+                                                StandardDate = pos.ActivationTime, //商户的激活日期
+                                                SnStoreId = pos.StoreId, //SN仓库
+                                                MerBuddyType = puser.MerchantType, //商户创客类型
+                                                RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                RewardTips = "开机奖励", //奖励描述
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                                SeoTitle = machineUser.RealName,
+                                            }).Entity;
+                                            db.OpenReward.Add(new OpenReward()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = DateTime.Now, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                RewardType = 2, //奖励类型
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                            });
+                                            string IdBrand = puser.Id + "_" + pos.BrandId;
+                                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                            if (userData == null)
+                                            {
+                                                userData = db.UserMachineData.Add(new UserMachineData()
+                                                {
+                                                    IdBrand = IdBrand,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            userData.OpenProfit += Prize;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                            //账户入库
+                                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                            if (account == null)
+                                            {
+                                                account = db.UserAccount.Add(new UserAccount()
+                                                {
+                                                    Id = puser.Id,
+                                                    UserId = puser.Id,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            //收支明细入库
+                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                            account.BalanceAmount += Prize;
+                                            account.TotalAmount += Prize;
+                                            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 = puser.Id, //创客
+                                                ChangeType = 50, //变动类型
+                                                ProductType = pos.BrandId, //产品类型
+                                                ChangeAmount = Prize, //变更金额
+                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                            }).Entity;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                            string dateString = yesterday.ToString("yyyyMMdd");
+                                            string monthString = yesterday.ToString("yyyyMM");
+                                            // 开机奖励列表
+                                            List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                            if (!dates.Contains(dateString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                            List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                            if (!months.Contains(monthString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                            // 开机奖励详情
+                                            RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                            //收支明细
+                                            RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                            RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                            Prize -= 10;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+
+        // 4. 前一天的流量卡记录和匹配
+        public void ListenFluxRecord(string date)
+        { 
+            Thread th = new Thread(CheckFluxForTrade);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void doFluxRecord(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= yesterday && m.CreateDate < today && m.Status == 1).ToList();
+            foreach (SpModels.TradeFluxRecord trade in trades)
+            {
+                try
+                {
+                    string OrderNo = trade.TradeSerialNo; //单号
+                    DateTime TradeDate = trade.CreateDate.Value;
+                    string TradeMonth = TradeDate.ToString("yyyyMM");
+                    decimal FeeAmount = trade.FeeAmount; //流量费
+                    if (trade.ProductType == "1" || trade.ProductType == "4")
+                    {
+                        FeeAmount = FeeAmount / 100;
+                    }
+                    string TradeSnNo = trade.TradeSnNo; //机具SN
+                    decimal FluxProfit = 0;
+                    if (trade.ProductType == "1" && FeeAmount == 60)
+                    {
+                        FluxProfit = 24;
+                    }
+                    else if (trade.ProductType != "1" && FeeAmount == 48)
+                    {
+                        FluxProfit = 12;
+                    }
+                    if (FluxProfit > 0)
+                    {
+                        MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                        bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
+                        if (!checkExist)
+                        {
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            int GetUserId = user.Id;
+                            int TopUserId = 0;
+                            string ParentNav = user.ParentNav;
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                if (ParentNavList.Length > 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[1]);
+                                }
+                                else if (ParentNavList.Length == 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[0]);
+                                }
+                            }
+                            FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
+                            if (fluxProfit == null)
+                            {
+                                fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UpdateDate = DateTime.Now,
+                                    UserId = GetUserId, //创客
+                                    BrandId = pos.BrandId,
+                                    TopUserId = TopUserId, //顶级创客
+                                    TradeMonth = TradeMonth, //交易月
+                                    MerUserType = user.MerchantType, //商户创客类型
+                                    Remark = "流量卡分佣", //备注
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
+                            db.FluxProfitDetail.Add(new FluxProfitDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = OrderNo, //单号
+                                TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
+                                TradeTime = TradeDate.ToString("HHmmss"), //交易时间
+                                TradeMonth = TradeMonth, //交易月
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                MerchantUserId = pos.UserId, //商户直属人
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = pos.PosSn, //渠道SN号
+                                FluxOrderNo = OrderNo, //流量扣费单号
+                                TradeOrderNo = OrderNo, //交易流水号
+                                TradeAmt = trade.TradeAmount, //商户交易额
+                                FluxFeeAmt = FeeAmount, //流量费
+                                FluxProfitAmt = FluxProfit, //流量分润总金额
+                                PosType = pos.PosSnType.ToString(), //POS类型
+                                Remark = "流量卡分佣", //备注
+                                BrandId = pos.BrandId, //品牌
+                                TopUserId = TopUserId, //顶级创客
+                                MerUserType = user.MerchantType, //商户创客类型
+                            });
+                            string IdBrand = user.Id + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.FluxProfit += FluxProfit;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserMachineData:" + IdBrand);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += FluxProfit;
+                            account.TotalAmount += FluxProfit;
+                            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 = GetUserId, //创客
+                                ChangeType = 60, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = FluxProfit, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserAccount:" + GetUserId);
+                        }
+                        SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                            spdb.SaveChanges();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
+        }
+        public void CheckFluxForTrade(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString(), "扫描金控交易记录中的流量费");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            DateTime start = DateTime.Parse(date + " 00:00:00");
+            DateTime end = start.AddDays(1);
+            var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType }).Where(m => m.CreateDate > start && m.CreateDate < end && m.ProductType == "1").OrderBy(m => m.CreateDate);
+            foreach (var sub in list.ToList())
+            {
+                try
+                {
+                    SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
+                    if (trade != null)
+                    {
+                        string content = trade.SeoDescription;
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            content = System.Web.HttpUtility.UrlDecode(content);
+                            JsonData jsonObj = JsonMapper.ToObject(content);
+                            decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
+                            if (terminalDataFlowFee > 0)
+                            {
+                                spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
+                                {
+                                    SeoDescription = trade.TradeSerialNo,
+                                    FeeAmount = terminalDataFlowFee,
+                                    TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
+                                    CreateDate = trade.CreateDate,
+                                    TradeSnNo = trade.TradeSnNo,
+                                    ProductType = trade.ProductType,
+                                    Status = 1,
+                                });
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描金控交易记录中的流量费异常");
+                }
+            }
+            spdb.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "扫描金控交易记录中的流量费");
+
+            doFluxRecord(date);
+        }
+
+
+
+
+
+
+        // 每天统计头一天的交易额
+        public void StartEverDay(string date)
+        { 
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
+            // DateTime check = DateTime.Parse("2022-03-11");
+            // while (check <= end)
+            // {
+            //     Thread th = new Thread(StatTradeAmountEverDay);
+            //     th.IsBackground = true;
+            //     th.Start(check.ToString("yyyy-MM-dd"));
+            //     check = check.AddDays(1);
+            // }
+            Thread th = new Thread(StatTradeAmountEverDay);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void StatTradeAmountEverDay(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+
+        public void StatTradeAmountEverDay2(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                
+                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                Models.WebCMSEntities maindb = new Models.WebCMSEntities();
+                DateTime StartDate = DateTime.Parse(start);
+                DateTime EndDate = DateTime.Parse(end);
+                int StartTradeId = int.Parse(function.CheckInt(startId));
+                bool op = true;
+                while (op)
+                {
+                    List<TradeRecord> list = db.TradeRecord.Where(m => m.Id > StartTradeId && m.CreateDate >= StartDate && m.CreateDate < EndDate).OrderBy(m => m.Id).Take(500).ToList();
+                    if (list.Count > 0)
+                    {
+                        foreach (TradeRecord sub in list)
+                        {
+                            maindb.TradeRecord.Add(new Models.TradeRecord()
+                            {
+                                CreateDate = sub.CreateDate,
+                                UpdateDate = sub.UpdateDate,
+                                RecordNo = sub.RecordNo, //单号
+                                UserId = sub.UserId, //创客
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = sub.MerNo, //渠道商户编号
+                                MerHelpFlag = sub.MerHelpFlag, //是否属于扶持周期内商户
+                                HelpMonthCount = sub.HelpMonthCount, //扶持第几个月
+                                MerBuddyType = sub.MerBuddyType, //商户创客类型
+                                SnNo = sub.SnNo, //渠道SN号
+                                TradeDate = sub.TradeDate, //交易日期
+                                ClearDate = sub.ClearDate, //清算日期
+                                TradeSerialNo = sub.TradeSerialNo, //交易流水号
+                                TradeAmount = sub.TradeAmount, //交易金额
+                                BankCardType = sub.BankCardType, //银行卡类型
+                                QrPayFlag = sub.QrPayFlag, //云闪付标识
+                                CapFlag = sub.CapFlag, //借记卡封顶交易标志
+                                DirectFlag = sub.DirectFlag, //是否直营
+                                BrandId = sub.BrandId, //品牌
+                                Remark = sub.Remark, //备注
+                                TopUserId = sub.TopUserId, //顶级创客
+                                MerUserId = sub.MerUserId, //商户直属创客
+                            });
+                            StartTradeId = sub.Id;
+                        }
+                        maindb.SaveChanges();
+                    }
+                    else
+                    {
+                        op = false;
+                    }
+                }
+                maindb.Dispose();
+                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+        public void StatTradeAmountEverDaySum()
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
+            // string html = "<table>";
+            // foreach (DataRow dr in dt.Rows)
+            // {
+            //     html += "<tr>";
+            //     string TradeDate = dr["TradeDate"].ToString();
+            //     string TradeMonth = dr["TradeMonth"].ToString();
+            //     int UserId = int.Parse(dr["UserId"].ToString());
+            //     int BrandId = int.Parse(dr["BrandId"].ToString());
+            //     int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+            //     decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
+            //     decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
+            //     decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
+            //     decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
+            //     decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
+
+            //     CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
+            //     CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
+            //     CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
+            //     CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
+            //     decimal TotalPosAmount = 0;
+            //     decimal TotalCloudPayAmount = 0;
+            //     decimal TeamTotalPosAmount = 0;
+            //     decimal TeamTotalCloudPayAmount = 0;
+            //     if (QrPayFlag == 1)
+            //     {
+            //         TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //         TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //     }
+            //     else
+            //     {
+            //         TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //         TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //     }
+            //     Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            //     html += "<td>应得</td>";
+            //     html += "<td>" + user.MakerCode + "</td>";
+            //     html += "<td>" + user.RealName + "</td>";
+            //     html += "<td>" + user.Mobile + "</td>";
+            //     html += "<td>" + BrandId + "</td>";
+            //     html += "<td>" + QrPayFlag + "</td>";
+            //     html += "<td>" + DirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + DirectTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectTradeAmt + "</td>";
+            //     html += "</tr>";
+
+            //     html += "<tr>";
+            //     html += "<td>当前</td>";
+            //     html += "<td></td>";
+            //     html += "<td></td>";
+            //     html += "<td>当天品牌:" + CurAmount + "</td>";
+            //     html += "<td>总交易:" + CurTotalAmount + "</td>";
+            //     html += "<td>当月:" + CurMonthAmount + "</td>";
+            //     html += "<td>当天:" + CurDayAmount + "</td>";
+            //     html += "<td>" + TotalPosAmount + "</td>";
+            //     html += "<td>" + TotalCloudPayAmount + "</td>";
+            //     html += "<td>" + TeamTotalPosAmount + "</td>";
+            //     html += "<td>" + TeamTotalCloudPayAmount + "</td>";
+            //     html += "</tr>";
+            // }
+            // html += "</table>";
+            // db.Dispose();
+            // // OtherMySqlConn.connstr = ;
+            // function.WritePage("/html/", "1.html", html);
+        }
+
+
+        //统计商户交易额
+        private void StatMerchantTrade(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
+            // WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate)  select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "").Substring(0, 6)); //商户当月交易
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "")); //商户当日交易
+                // foreach (DataRow selfDr in selfdt.Rows)
+                // {
+                //     int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                //     int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
+                //     string TradeDate = selfDr["TradeDate"].ToString();
+                //     TradeDate = TradeDate.Replace("-", "");
+                //     string TradeMonth = TradeDate.Substring(0, 6);
+                //     decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
+                //     PosMerchantTradeSummay merStat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
+                //     if (merStat == null)
+                //     {
+                //         merStat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
+                //         {
+                //             MerchantId = MerchantId,
+                //             TradeMonth = TradeMonth,
+                //             TradeDate = TradeDate,
+                //             BrandId = BrandId,
+                //         }).Entity;
+                //         db.SaveChanges();
+                //     }
+                //     merStat.TradeAmount += TradeAmount;
+                //     db.SaveChanges();                    
+                // }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
+            }
+            // db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
+        }
+
+
+        // 5. 创客升级
+        public void StatUserLevel()
+        { 
+            Thread th = new Thread(StatUserLevelDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatUserLevelDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+                DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+                DateTime end = start.AddDays(1);
+                string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                List<UserLevelSet> sets = db.UserLevelSet.ToList();
+                var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.AuthFlag == 1).ToList();
+                function.WriteLog(users.Count.ToString(), "创客升级日志");
+                foreach (var subuser in users)
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
+                    if (user != null)
+                    {
+                        int BeforeLevel = user.UserLevel;
+                        int AfterLevel = 0;
+                        decimal TradeAmount = 0;
+                        bool check = db.UserTradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
+                        if (check)
+                        {
+                            TradeAmount = db.UserTradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.NonDirectTradeAmt);
+                        }
+                        UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
+                        if (set != null)
+                        {
+                            AfterLevel = set.Id;
+                        }
+                        if (AfterLevel > BeforeLevel && AfterLevel > 1)
+                        {
+                            user.UserLevel = AfterLevel;
+                            db.UserRank.Add(new UserRank()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = user.Id, //创客
+                                WhiteRank = BeforeLevel,
+                                Rank = AfterLevel, //当前等级
+                                StatYear = DateTime.Now.Year, //统计年份
+                                StatMonth = DateTime.Now.Month, //统计月份
+                                TradeAmt = TradeAmount, //团队交易总额
+                                UpgradeFlag = 1, //升级标识
+                                OperateDate = DateTime.Now, //操作时间
+                            });
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserLevelData:" + user.Id, BeforeLevel + "#" + AfterLevel);
+                        }
+                    }
+                }
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+            }
+            catch (Exception ex)
+            { 
+                function.WriteLog(ex.ToString(), "创客升级异常");
+            }
+            db.Dispose();
+
+            
+            ProfitHelper.Instance.StatProfit("202204");
+        }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        { 
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        { 
+            DateTime end = DateTime.Parse("2022-05-24 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        { 
+            Thread th = new Thread(StartNewUserNumDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumDo()
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                DataTable dt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d'),count(Id) from Users where QueryCount=0 and ParentUserId>0 and AuthFlag=1 GROUP BY ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d')");
+                if (dt.Rows.Count > 0)
+                {
+                    OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and ParentUserId>0 and AuthFlag=1");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        int UserId = int.Parse(dr["ParentUserId"].ToString());
+                        string StatDate = dr[1].ToString();
+                        string StatMonth = StatDate.Substring(0, 6);
+                        int NewCount = int.Parse(dr[2].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += NewCount;
+                        db.SaveChanges();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        string ParentNav = user.ParentNav;
+                        ParentNav += "," + UserId + ",";
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                            foreach (string NavUserIdString in ParentNavList)
+                            {
+                                int NavUserId = int.Parse(NavUserIdString);
+                                PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                if (teamStat == null)
+                                {
+                                    teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                    {
+                                        UserId = NavUserId,
+                                        StatMonth = StatMonth,
+                                        StatDate = StatDate,
+                                        SeoTitle = "team",
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                teamStat.RecUserAuthNum += NewCount;
+                                db.SaveChanges();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
+    }
+}

+ 1891 - 0
.history/AppStart/Helper/StatService_20220524191613.cs

@@ -0,0 +1,1891 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class StatService
+    {
+        public readonly static StatService Instance = new StatService();
+        private StatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
+                if (string.IsNullOrEmpty(flag))
+                {
+                    function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                    dosomething1(doDate);
+                    dosomething11(doDate);
+                    // dosomething2(doDate);
+                    StartEverDay(doDate);
+                    dosomething4(doDate);
+                    ListenFluxRecord(doDate);
+                }
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+        public void ActiveReward(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething3();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+                function.WritePage("/static/", "act.txt", DateTime.Now.ToString());
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public void clear()
+        {
+            RedisDbconn.Instance.Clear("TotalAmount*");
+            RedisDbconn.Instance.Clear("TotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TotalPosAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalPosAmount*");
+
+            // RedisDbconn.Instance.Clear("TotalUser*");
+            // RedisDbconn.Instance.Clear("TeamTotalUser*");
+            // RedisDbconn.Instance.Clear("AddUser*");
+            // RedisDbconn.Instance.Clear("TeamAddUser*");
+
+            // RedisDbconn.Instance.Clear("TotalPosMerchant*");
+            // RedisDbconn.Instance.Clear("TeamTotalPosMerchant*");
+
+            RedisDbconn.Instance.Clear("MerTotalAmount*");
+        }
+
+
+        // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
+        public void dosomething1(string date)
+        {
+            // TODO: 每天扫描非商户型创客的持有机具数量
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
+            foreach (SpModels.BindRecord bind in binds)
+            {
+                string Mobile = bind.MerNewSnNo;
+                string MerNo = bind.MerNo;
+                string BeforeNum = "";
+                string AfterNum = "";
+                if (Mobile.Contains("****") && Mobile.Length == 11)
+                {
+                    BeforeNum = Mobile.Substring(0, 3);
+                    AfterNum = Mobile.Substring(7);
+                }
+                string Name = bind.MerName;
+                if (bind.ProductType == "2")
+                {
+                    if (Name.Contains("-"))
+                    {
+                        Name = Name.Split('-')[1];
+                    }
+                    else if (Name.Contains("_"))
+                    {
+                        Name = Name.Split('_')[1];
+                    }
+                }
+                else if (bind.ProductType == "4")
+                {
+                    Name = bind.SeoTitle;
+                }
+                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
+                if (user != null)
+                {
+                    bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
+                    if (!checkPos)
+                    {
+                        PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
+                        if (pos != null)
+                        {
+                            pos.UserId = user.Id;
+                            user.MerchantType = 1;
+                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
+                            merchant.UserId = user.Id;
+                            merchant.MerUserType = 1;
+                            pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
+                            RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("Users:" + user.Id, user);
+                            RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                        }
+                    }
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+        }
+
+        // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
+        public void dosomething11(string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
+            foreach (var user in users)
+            {
+                int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
+                int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
+                if (machineCount + couponCount >= 3)
+                {
+                    Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
+                    if (edit != null)
+                    {
+                        edit.MerchantType = 0;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.Set("Users:" + user.Id, edit);
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        
+        public void testStatTrade(string date)
+        {
+            string yesterday = date + " 00:00:00";
+            string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+            string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
+            string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
+            DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
+                int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
+                int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
+                int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
+                int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
+                decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
+                string content = "{";
+                content += "\"DateString\":\"" + date + "\",";
+                content += "\"UserId\":\"" + UserId + "\",";
+                content += "\"BrandId\":\"" + BrandId + "\",";
+                content += "\"MerchantId\":\"" + MerchantId + "\",";
+                content += "\"BankCardType\":\"" + BankCardType + "\",";
+                content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
+                content += "\"TradeAmount\":\"" + TradeAmount + "\"";
+                content += "}";
+                RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
+            }
+        }
+
+        // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething3(int posid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddDays(-1);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (posid > 0)
+            { 
+                posList = posList.Where(m => m.Id == posid);
+            }
+            else
+            {
+                posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
+            }
+            foreach (PosMachinesTwo pos in posList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if (merchant != null)
+                {
+                    // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                    // if (otherInfo != null)
+                    // {
+                    //     otherInfo.PrizeFlag1 = 1;
+                    //     db.SaveChanges();
+                    string ParentNav = "";
+                    Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                    if (user != null)
+                    {
+                        int GetUserId = user.Id;
+                        ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                        if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                        {
+                            ActPrize = ActPrize / 100;
+                        }
+                        if (ActPrize > 0)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            else if (ActPrize == 249)
+                            {
+                                ActPrize = 260;
+                            }
+                            if (GetUserId > 0)
+                            {
+                                doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
+                            }
+                        }
+                    }
+                    // }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0)
+        {
+            bool check = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo && m.RewardAmount == ActPrize);
+            if (!check)
+            {
+                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                db.ActiveReward.Add(new ActiveReward()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    MerchantId = pos.BindMerchantId, //商户
+                    StandardDate = pos.ActivationTime, //达标日期
+                    RewardAmount = ActPrize, //奖励金额
+                    BrandId = pos.BrandId, //品牌
+                    UserNav = ParentNav, //创客父级
+                    DirectBuddyNo = merchant.UserId, //商户直属创客
+                    KqMerNo = merchant.KqMerNo, //渠道商户编号
+                    KqSnNo = pos.PosSn, //渠道SN号
+                    SnType = pos.PosSnType, //机具类型
+                    SnApplyUserId = pos.BuyUserId, //机具申请创客
+                    ActType = 0, //激活类型
+                    SnStoreId = pos.StoreId, //SN仓库
+                    RewardTips = "激活奖励", //奖励描述
+                    Remark = "激活奖励", //备注
+                    ActDate = pos.ActivationTime, //激活时间
+                    TopUserId = TopUserId, //顶级创客
+                    SeoTitle = machineUser.RealName,
+                });
+                db.SaveChanges();
+                string IdBrand = GetUserId + "_" + pos.BrandId;
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.ActProfit += ActPrize;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = db.UserAccount.Add(new UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += ActPrize;
+                account.TotalAmount += ActPrize;
+                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 = GetUserId, //创客
+                    ChangeType = ChangeType, //变动类型
+                    ProductType = pos.BrandId, //产品类型
+                    ChangeAmount = ActPrize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                // 激活奖励列表
+                List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                if (!dates.Contains(dateString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                if (!months.Contains(monthString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                // 激活奖励详情
+                List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                if (!actPrizeList.Contains(pos.BindMerchantId))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                //收支明细
+                RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                RedisDbconn.Instance.Clear("UserAccount:Income:" + GetUserId + ":" + monthString);
+            }
+        }
+
+
+        //根据商户信息发放激活奖励
+        public void dosomething32(int merid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddHours(-3);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (merid > 0)
+            { 
+                merList = merList.Where(m => m.Id == merid);
+            }
+            else
+            {
+                merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
+            }
+            foreach (PosMerchantInfo merchant in merList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                // if (otherInfo != null)
+                // {
+                //     otherInfo.PrizeFlag1 = 1;
+                //     db.SaveChanges();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                string ParentNav = "";
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                if (user != null)
+                {
+                    int GetUserId = user.Id;
+                    ParentNav = user.ParentNav;
+                    int TopUserId = 0;
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                    }
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                    {
+                        ActPrize = ActPrize / 100;
+                    }
+                    if (ActPrize > 0)
+                    {
+                        bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
+                        if (!check)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            db.ActiveReward.Add(new ActiveReward()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                StandardDate = pos.ActivationTime, //达标日期
+                                RewardAmount = ActPrize, //奖励金额
+                                BrandId = pos.BrandId, //品牌
+                                UserNav = ParentNav, //创客父级
+                                DirectBuddyNo = merchant.UserId, //商户直属创客
+                                KqMerNo = merchant.KqMerNo, //渠道商户编号
+                                KqSnNo = pos.PosSn, //渠道SN号
+                                SnType = pos.PosSnType, //机具类型
+                                SnApplyUserId = pos.BuyUserId, //机具申请创客
+                                ActType = 0, //激活类型
+                                SnStoreId = pos.StoreId, //SN仓库
+                                RewardTips = "激活奖励", //奖励描述
+                                Remark = "激活奖励", //备注
+                                ActDate = pos.ActivationTime, //激活时间
+                                TopUserId = TopUserId, //顶级创客
+                                SeoTitle = machineUser.RealName,
+                            });
+                            db.SaveChanges();
+                            string IdBrand = GetUserId + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.ActProfit += ActPrize;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += ActPrize;
+                            account.TotalAmount += ActPrize;
+                            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 = GetUserId, //创客
+                                ChangeType = 0, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = ActPrize, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                            string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                            string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                            // 激活奖励列表
+                            List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                            if (!dates.Contains(dateString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                            if (!months.Contains(monthString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                            // 激活奖励详情
+                            List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                            if (!actPrizeList.Contains(pos.BindMerchantId))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            //收支明细
+                            RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                            RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                        }
+                    }
+                }
+                // }
+            }
+            db.Dispose();
+        }
+
+        
+
+        //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething4(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
+            foreach (PosMachinesTwo pos in posList)
+            {
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20))
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                        if (merchant != null)
+                        {
+                            // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                            // if (otherInfo != null)
+                            // {
+                            //     otherInfo.PrizeFlag2 = 1;
+                            //     db.SaveChanges();
+                                // 从机具所属人上级开始分开机奖励
+                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                                if (user != null)
+                                {
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        decimal Prize = 20;
+                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        {
+                                            int UserId = int.Parse(ParentNavs[i]);
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                            if (puser != null && Prize > 0)
+                                            {
+                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                {
+                                                    int pTopUserId = 0;
+                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
+                                                    {
+                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                    }
+                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = yesterday, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                        MerchantId = pos.BindMerchantId, //商户
+                                                        DirectUserId = merchant.UserId, //商户直属人
+                                                        SnNo = pos.PosSn, //SN号
+                                                        MerNo = merchant.KqMerNo, //渠道商户号
+                                                        SnType = pos.PosSnType, //机具类型
+                                                        StandardDate = pos.ActivationTime, //商户的激活日期
+                                                        SnStoreId = pos.StoreId, //SN仓库
+                                                        MerBuddyType = puser.MerchantType, //商户创客类型
+                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                        RewardTips = "开机奖励", //奖励描述
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                        SeoTitle = machineUser.RealName,
+                                                    }).Entity;
+                                                    db.OpenReward.Add(new OpenReward()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = DateTime.Now, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        RewardType = 2, //奖励类型
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                    });
+                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                    if (userData == null)
+                                                    {
+                                                        userData = db.UserMachineData.Add(new UserMachineData()
+                                                        {
+                                                            IdBrand = IdBrand,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    userData.OpenProfit += Prize;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                    //账户入库
+                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                    if (account == null)
+                                                    {
+                                                        account = db.UserAccount.Add(new UserAccount()
+                                                        {
+                                                            Id = puser.Id,
+                                                            UserId = puser.Id,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    //收支明细入库
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    account.BalanceAmount += Prize;
+                                                    account.TotalAmount += Prize;
+                                                    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 = puser.Id, //创客
+                                                        ChangeType = 50, //变动类型
+                                                        ProductType = pos.BrandId, //产品类型
+                                                        ChangeAmount = Prize, //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                                    string dateString = yesterday.ToString("yyyyMMdd");
+                                                    string monthString = yesterday.ToString("yyyyMM");
+                                                    // 开机奖励列表
+                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!dates.Contains(dateString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!months.Contains(monthString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                                    // 开机奖励详情
+                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                                    //收支明细
+                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                                    Prize -= 10;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            // }
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void dosomething42(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
+            foreach (PosMerchantInfo merchant in merList)
+            {
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                        // if (otherInfo != null)
+                        // {
+                        //     otherInfo.PrizeFlag2 = 1;
+                        //     db.SaveChanges();
+                        // 从机具所属人上级开始分开机奖励
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                        if (user != null)
+                        {
+                            if (!string.IsNullOrEmpty(user.ParentNav))
+                            {
+                                decimal Prize = 20;
+                                string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                {
+                                    int UserId = int.Parse(ParentNavs[i]);
+                                    Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                    if (puser != null && Prize > 0)
+                                    {
+                                        int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                        int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                        int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                        // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                        // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                        if (machineCount + ActiveCount + couponCount >= 3)
+                                        {
+                                            int pTopUserId = 0;
+                                            if (!string.IsNullOrEmpty(puser.ParentNav))
+                                            {
+                                                pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                            }
+                                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                            OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = yesterday, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                MerchantId = pos.BindMerchantId, //商户
+                                                DirectUserId = merchant.UserId, //商户直属人
+                                                SnNo = pos.PosSn, //SN号
+                                                MerNo = merchant.KqMerNo, //渠道商户号
+                                                SnType = pos.PosSnType, //机具类型
+                                                StandardDate = pos.ActivationTime, //商户的激活日期
+                                                SnStoreId = pos.StoreId, //SN仓库
+                                                MerBuddyType = puser.MerchantType, //商户创客类型
+                                                RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                RewardTips = "开机奖励", //奖励描述
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                                SeoTitle = machineUser.RealName,
+                                            }).Entity;
+                                            db.OpenReward.Add(new OpenReward()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = DateTime.Now, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                RewardType = 2, //奖励类型
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                            });
+                                            string IdBrand = puser.Id + "_" + pos.BrandId;
+                                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                            if (userData == null)
+                                            {
+                                                userData = db.UserMachineData.Add(new UserMachineData()
+                                                {
+                                                    IdBrand = IdBrand,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            userData.OpenProfit += Prize;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                            //账户入库
+                                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                            if (account == null)
+                                            {
+                                                account = db.UserAccount.Add(new UserAccount()
+                                                {
+                                                    Id = puser.Id,
+                                                    UserId = puser.Id,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            //收支明细入库
+                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                            account.BalanceAmount += Prize;
+                                            account.TotalAmount += Prize;
+                                            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 = puser.Id, //创客
+                                                ChangeType = 50, //变动类型
+                                                ProductType = pos.BrandId, //产品类型
+                                                ChangeAmount = Prize, //变更金额
+                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                            }).Entity;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                            string dateString = yesterday.ToString("yyyyMMdd");
+                                            string monthString = yesterday.ToString("yyyyMM");
+                                            // 开机奖励列表
+                                            List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                            if (!dates.Contains(dateString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                            List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                            if (!months.Contains(monthString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                            // 开机奖励详情
+                                            RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                            //收支明细
+                                            RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                            RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                            Prize -= 10;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+
+        // 4. 前一天的流量卡记录和匹配
+        public void ListenFluxRecord(string date)
+        { 
+            Thread th = new Thread(CheckFluxForTrade);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void doFluxRecord(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= yesterday && m.CreateDate < today && m.Status == 1).ToList();
+            foreach (SpModels.TradeFluxRecord trade in trades)
+            {
+                try
+                {
+                    string OrderNo = trade.TradeSerialNo; //单号
+                    DateTime TradeDate = trade.CreateDate.Value;
+                    string TradeMonth = TradeDate.ToString("yyyyMM");
+                    decimal FeeAmount = trade.FeeAmount; //流量费
+                    if (trade.ProductType == "1" || trade.ProductType == "4")
+                    {
+                        FeeAmount = FeeAmount / 100;
+                    }
+                    string TradeSnNo = trade.TradeSnNo; //机具SN
+                    decimal FluxProfit = 0;
+                    if (trade.ProductType == "1" && FeeAmount == 60)
+                    {
+                        FluxProfit = 24;
+                    }
+                    else if (trade.ProductType != "1" && FeeAmount == 48)
+                    {
+                        FluxProfit = 12;
+                    }
+                    if (FluxProfit > 0)
+                    {
+                        MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                        bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
+                        if (!checkExist)
+                        {
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            int GetUserId = user.Id;
+                            int TopUserId = 0;
+                            string ParentNav = user.ParentNav;
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                if (ParentNavList.Length > 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[1]);
+                                }
+                                else if (ParentNavList.Length == 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[0]);
+                                }
+                            }
+                            FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
+                            if (fluxProfit == null)
+                            {
+                                fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UpdateDate = DateTime.Now,
+                                    UserId = GetUserId, //创客
+                                    BrandId = pos.BrandId,
+                                    TopUserId = TopUserId, //顶级创客
+                                    TradeMonth = TradeMonth, //交易月
+                                    MerUserType = user.MerchantType, //商户创客类型
+                                    Remark = "流量卡分佣", //备注
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
+                            db.FluxProfitDetail.Add(new FluxProfitDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = OrderNo, //单号
+                                TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
+                                TradeTime = TradeDate.ToString("HHmmss"), //交易时间
+                                TradeMonth = TradeMonth, //交易月
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                MerchantUserId = pos.UserId, //商户直属人
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = pos.PosSn, //渠道SN号
+                                FluxOrderNo = OrderNo, //流量扣费单号
+                                TradeOrderNo = OrderNo, //交易流水号
+                                TradeAmt = trade.TradeAmount, //商户交易额
+                                FluxFeeAmt = FeeAmount, //流量费
+                                FluxProfitAmt = FluxProfit, //流量分润总金额
+                                PosType = pos.PosSnType.ToString(), //POS类型
+                                Remark = "流量卡分佣", //备注
+                                BrandId = pos.BrandId, //品牌
+                                TopUserId = TopUserId, //顶级创客
+                                MerUserType = user.MerchantType, //商户创客类型
+                            });
+                            string IdBrand = user.Id + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.FluxProfit += FluxProfit;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserMachineData:" + IdBrand);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += FluxProfit;
+                            account.TotalAmount += FluxProfit;
+                            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 = GetUserId, //创客
+                                ChangeType = 60, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = FluxProfit, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserAccount:" + GetUserId);
+                        }
+                        SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                            spdb.SaveChanges();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
+        }
+        public void CheckFluxForTrade(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString(), "扫描金控交易记录中的流量费");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            DateTime start = DateTime.Parse(date + " 00:00:00");
+            DateTime end = start.AddDays(1);
+            var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType }).Where(m => m.CreateDate > start && m.CreateDate < end && m.ProductType == "1").OrderBy(m => m.CreateDate);
+            foreach (var sub in list.ToList())
+            {
+                try
+                {
+                    SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
+                    if (trade != null)
+                    {
+                        string content = trade.SeoDescription;
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            content = System.Web.HttpUtility.UrlDecode(content);
+                            JsonData jsonObj = JsonMapper.ToObject(content);
+                            decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
+                            if (terminalDataFlowFee > 0)
+                            {
+                                spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
+                                {
+                                    SeoDescription = trade.TradeSerialNo,
+                                    FeeAmount = terminalDataFlowFee,
+                                    TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
+                                    CreateDate = trade.CreateDate,
+                                    TradeSnNo = trade.TradeSnNo,
+                                    ProductType = trade.ProductType,
+                                    Status = 1,
+                                });
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描金控交易记录中的流量费异常");
+                }
+            }
+            spdb.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "扫描金控交易记录中的流量费");
+
+            doFluxRecord(date);
+        }
+
+
+
+
+
+
+        // 每天统计头一天的交易额
+        public void StartEverDay(string date)
+        { 
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
+            // DateTime check = DateTime.Parse("2022-03-11");
+            // while (check <= end)
+            // {
+            //     Thread th = new Thread(StatTradeAmountEverDay);
+            //     th.IsBackground = true;
+            //     th.Start(check.ToString("yyyy-MM-dd"));
+            //     check = check.AddDays(1);
+            // }
+            Thread th = new Thread(StatTradeAmountEverDay);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void StatTradeAmountEverDay(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+
+        public void StatTradeAmountEverDay2(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                
+                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                Models.WebCMSEntities maindb = new Models.WebCMSEntities();
+                DateTime StartDate = DateTime.Parse(start);
+                DateTime EndDate = DateTime.Parse(end);
+                int StartTradeId = int.Parse(function.CheckInt(startId));
+                bool op = true;
+                while (op)
+                {
+                    List<TradeRecord> list = db.TradeRecord.Where(m => m.Id > StartTradeId && m.CreateDate >= StartDate && m.CreateDate < EndDate).OrderBy(m => m.Id).Take(500).ToList();
+                    if (list.Count > 0)
+                    {
+                        foreach (TradeRecord sub in list)
+                        {
+                            maindb.TradeRecord.Add(new Models.TradeRecord()
+                            {
+                                CreateDate = sub.CreateDate,
+                                UpdateDate = sub.UpdateDate,
+                                RecordNo = sub.RecordNo, //单号
+                                UserId = sub.UserId, //创客
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = sub.MerNo, //渠道商户编号
+                                MerHelpFlag = sub.MerHelpFlag, //是否属于扶持周期内商户
+                                HelpMonthCount = sub.HelpMonthCount, //扶持第几个月
+                                MerBuddyType = sub.MerBuddyType, //商户创客类型
+                                SnNo = sub.SnNo, //渠道SN号
+                                TradeDate = sub.TradeDate, //交易日期
+                                ClearDate = sub.ClearDate, //清算日期
+                                TradeSerialNo = sub.TradeSerialNo, //交易流水号
+                                TradeAmount = sub.TradeAmount, //交易金额
+                                BankCardType = sub.BankCardType, //银行卡类型
+                                QrPayFlag = sub.QrPayFlag, //云闪付标识
+                                CapFlag = sub.CapFlag, //借记卡封顶交易标志
+                                DirectFlag = sub.DirectFlag, //是否直营
+                                BrandId = sub.BrandId, //品牌
+                                Remark = sub.Remark, //备注
+                                TopUserId = sub.TopUserId, //顶级创客
+                                MerUserId = sub.MerUserId, //商户直属创客
+                            });
+                            StartTradeId = sub.Id;
+                        }
+                        maindb.SaveChanges();
+                    }
+                    else
+                    {
+                        op = false;
+                    }
+                }
+                maindb.Dispose();
+                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+        public void StatTradeAmountEverDaySum()
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
+            // string html = "<table>";
+            // foreach (DataRow dr in dt.Rows)
+            // {
+            //     html += "<tr>";
+            //     string TradeDate = dr["TradeDate"].ToString();
+            //     string TradeMonth = dr["TradeMonth"].ToString();
+            //     int UserId = int.Parse(dr["UserId"].ToString());
+            //     int BrandId = int.Parse(dr["BrandId"].ToString());
+            //     int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+            //     decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
+            //     decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
+            //     decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
+            //     decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
+            //     decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
+
+            //     CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
+            //     CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
+            //     CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
+            //     CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
+            //     decimal TotalPosAmount = 0;
+            //     decimal TotalCloudPayAmount = 0;
+            //     decimal TeamTotalPosAmount = 0;
+            //     decimal TeamTotalCloudPayAmount = 0;
+            //     if (QrPayFlag == 1)
+            //     {
+            //         TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //         TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //     }
+            //     else
+            //     {
+            //         TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //         TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //     }
+            //     Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            //     html += "<td>应得</td>";
+            //     html += "<td>" + user.MakerCode + "</td>";
+            //     html += "<td>" + user.RealName + "</td>";
+            //     html += "<td>" + user.Mobile + "</td>";
+            //     html += "<td>" + BrandId + "</td>";
+            //     html += "<td>" + QrPayFlag + "</td>";
+            //     html += "<td>" + DirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + DirectTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectTradeAmt + "</td>";
+            //     html += "</tr>";
+
+            //     html += "<tr>";
+            //     html += "<td>当前</td>";
+            //     html += "<td></td>";
+            //     html += "<td></td>";
+            //     html += "<td>当天品牌:" + CurAmount + "</td>";
+            //     html += "<td>总交易:" + CurTotalAmount + "</td>";
+            //     html += "<td>当月:" + CurMonthAmount + "</td>";
+            //     html += "<td>当天:" + CurDayAmount + "</td>";
+            //     html += "<td>" + TotalPosAmount + "</td>";
+            //     html += "<td>" + TotalCloudPayAmount + "</td>";
+            //     html += "<td>" + TeamTotalPosAmount + "</td>";
+            //     html += "<td>" + TeamTotalCloudPayAmount + "</td>";
+            //     html += "</tr>";
+            // }
+            // html += "</table>";
+            // db.Dispose();
+            // // OtherMySqlConn.connstr = ;
+            // function.WritePage("/html/", "1.html", html);
+        }
+
+
+        //统计商户交易额
+        private void StatMerchantTrade(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
+            // WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate)  select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "").Substring(0, 6)); //商户当月交易
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "")); //商户当日交易
+                // foreach (DataRow selfDr in selfdt.Rows)
+                // {
+                //     int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                //     int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
+                //     string TradeDate = selfDr["TradeDate"].ToString();
+                //     TradeDate = TradeDate.Replace("-", "");
+                //     string TradeMonth = TradeDate.Substring(0, 6);
+                //     decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
+                //     PosMerchantTradeSummay merStat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
+                //     if (merStat == null)
+                //     {
+                //         merStat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
+                //         {
+                //             MerchantId = MerchantId,
+                //             TradeMonth = TradeMonth,
+                //             TradeDate = TradeDate,
+                //             BrandId = BrandId,
+                //         }).Entity;
+                //         db.SaveChanges();
+                //     }
+                //     merStat.TradeAmount += TradeAmount;
+                //     db.SaveChanges();                    
+                // }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
+            }
+            // db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
+        }
+
+
+        // 5. 创客升级
+        public void StatUserLevel()
+        { 
+            Thread th = new Thread(StatUserLevelDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatUserLevelDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+                DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+                DateTime end = start.AddDays(1);
+                string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                List<UserLevelSet> sets = db.UserLevelSet.ToList();
+                var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.AuthFlag == 1).ToList();
+                function.WriteLog(users.Count.ToString(), "创客升级日志");
+                foreach (var subuser in users)
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
+                    if (user != null)
+                    {
+                        int BeforeLevel = user.UserLevel;
+                        int AfterLevel = 0;
+                        decimal TradeAmount = 0;
+                        bool check = db.UserTradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
+                        if (check)
+                        {
+                            TradeAmount = db.UserTradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.NonDirectTradeAmt);
+                        }
+                        UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
+                        if (set != null)
+                        {
+                            AfterLevel = set.Id;
+                        }
+                        if (AfterLevel > BeforeLevel && AfterLevel > 1)
+                        {
+                            user.UserLevel = AfterLevel;
+                            db.UserRank.Add(new UserRank()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = user.Id, //创客
+                                WhiteRank = BeforeLevel,
+                                Rank = AfterLevel, //当前等级
+                                StatYear = DateTime.Now.Year, //统计年份
+                                StatMonth = DateTime.Now.Month, //统计月份
+                                TradeAmt = TradeAmount, //团队交易总额
+                                UpgradeFlag = 1, //升级标识
+                                OperateDate = DateTime.Now, //操作时间
+                            });
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserLevelData:" + user.Id, BeforeLevel + "#" + AfterLevel);
+                        }
+                    }
+                }
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+            }
+            catch (Exception ex)
+            { 
+                function.WriteLog(ex.ToString(), "创客升级异常");
+            }
+            db.Dispose();
+
+            
+            ProfitHelper.Instance.StatProfit("202204");
+        }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        { 
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        { 
+            DateTime end = DateTime.Parse("2022-05-24 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        { 
+            Thread th = new Thread(StartNewUserNumDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumDo()
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                DataTable dt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d'),count(Id) from Users where QueryCount=0 and ParentUserId>0 and AuthFlag=1 GROUP BY ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d')");
+                if (dt.Rows.Count > 0)
+                {
+                    OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and ParentUserId>0 and AuthFlag=1");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        int UserId = int.Parse(dr["ParentUserId"].ToString());
+                        string StatDate = dr[1].ToString();
+                        string StatMonth = StatDate.Substring(0, 6);
+                        int NewCount = int.Parse(dr[2].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += NewCount;
+                        db.SaveChanges();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        string ParentNav = user.ParentNav;
+                        ParentNav += "," + UserId + ",";
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                            foreach (string NavUserIdString in ParentNavList)
+                            {
+                                int NavUserId = int.Parse(NavUserIdString);
+                                PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                if (teamStat == null)
+                                {
+                                    teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                    {
+                                        UserId = NavUserId,
+                                        StatMonth = StatMonth,
+                                        StatDate = StatDate,
+                                        SeoTitle = "team",
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                teamStat.RecUserAuthNum += NewCount;
+                                db.SaveChanges();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
+    }
+}

+ 1891 - 0
.history/AppStart/Helper/StatService_20220524191614.cs

@@ -0,0 +1,1891 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class StatService
+    {
+        public readonly static StatService Instance = new StatService();
+        private StatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
+                if (string.IsNullOrEmpty(flag))
+                {
+                    function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                    dosomething1(doDate);
+                    dosomething11(doDate);
+                    // dosomething2(doDate);
+                    StartEverDay(doDate);
+                    dosomething4(doDate);
+                    ListenFluxRecord(doDate);
+                }
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+        public void ActiveReward(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething3();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+                function.WritePage("/static/", "act.txt", DateTime.Now.ToString());
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public void clear()
+        {
+            RedisDbconn.Instance.Clear("TotalAmount*");
+            RedisDbconn.Instance.Clear("TotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TotalPosAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalPosAmount*");
+
+            // RedisDbconn.Instance.Clear("TotalUser*");
+            // RedisDbconn.Instance.Clear("TeamTotalUser*");
+            // RedisDbconn.Instance.Clear("AddUser*");
+            // RedisDbconn.Instance.Clear("TeamAddUser*");
+
+            // RedisDbconn.Instance.Clear("TotalPosMerchant*");
+            // RedisDbconn.Instance.Clear("TeamTotalPosMerchant*");
+
+            RedisDbconn.Instance.Clear("MerTotalAmount*");
+        }
+
+
+        // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
+        public void dosomething1(string date)
+        {
+            // TODO: 每天扫描非商户型创客的持有机具数量
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
+            foreach (SpModels.BindRecord bind in binds)
+            {
+                string Mobile = bind.MerNewSnNo;
+                string MerNo = bind.MerNo;
+                string BeforeNum = "";
+                string AfterNum = "";
+                if (Mobile.Contains("****") && Mobile.Length == 11)
+                {
+                    BeforeNum = Mobile.Substring(0, 3);
+                    AfterNum = Mobile.Substring(7);
+                }
+                string Name = bind.MerName;
+                if (bind.ProductType == "2")
+                {
+                    if (Name.Contains("-"))
+                    {
+                        Name = Name.Split('-')[1];
+                    }
+                    else if (Name.Contains("_"))
+                    {
+                        Name = Name.Split('_')[1];
+                    }
+                }
+                else if (bind.ProductType == "4")
+                {
+                    Name = bind.SeoTitle;
+                }
+                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
+                if (user != null)
+                {
+                    bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
+                    if (!checkPos)
+                    {
+                        PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
+                        if (pos != null)
+                        {
+                            pos.UserId = user.Id;
+                            user.MerchantType = 1;
+                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
+                            merchant.UserId = user.Id;
+                            merchant.MerUserType = 1;
+                            pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
+                            RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("Users:" + user.Id, user);
+                            RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                        }
+                    }
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+        }
+
+        // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
+        public void dosomething11(string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
+            foreach (var user in users)
+            {
+                int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
+                int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
+                if (machineCount + couponCount >= 3)
+                {
+                    Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
+                    if (edit != null)
+                    {
+                        edit.MerchantType = 0;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.Set("Users:" + user.Id, edit);
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        
+        public void testStatTrade(string date)
+        {
+            string yesterday = date + " 00:00:00";
+            string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+            string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
+            string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
+            DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
+                int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
+                int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
+                int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
+                int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
+                decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
+                string content = "{";
+                content += "\"DateString\":\"" + date + "\",";
+                content += "\"UserId\":\"" + UserId + "\",";
+                content += "\"BrandId\":\"" + BrandId + "\",";
+                content += "\"MerchantId\":\"" + MerchantId + "\",";
+                content += "\"BankCardType\":\"" + BankCardType + "\",";
+                content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
+                content += "\"TradeAmount\":\"" + TradeAmount + "\"";
+                content += "}";
+                RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
+            }
+        }
+
+        // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething3(int posid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddDays(-1);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (posid > 0)
+            { 
+                posList = posList.Where(m => m.Id == posid);
+            }
+            else
+            {
+                posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
+            }
+            foreach (PosMachinesTwo pos in posList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if (merchant != null)
+                {
+                    // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                    // if (otherInfo != null)
+                    // {
+                    //     otherInfo.PrizeFlag1 = 1;
+                    //     db.SaveChanges();
+                    string ParentNav = "";
+                    Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                    if (user != null)
+                    {
+                        int GetUserId = user.Id;
+                        ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                        if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                        {
+                            ActPrize = ActPrize / 100;
+                        }
+                        if (ActPrize > 0)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            else if (ActPrize == 249)
+                            {
+                                ActPrize = 260;
+                            }
+                            if (GetUserId > 0)
+                            {
+                                doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
+                            }
+                        }
+                    }
+                    // }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0)
+        {
+            bool check = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo && m.RewardAmount == ActPrize);
+            if (!check)
+            {
+                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                db.ActiveReward.Add(new ActiveReward()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    MerchantId = pos.BindMerchantId, //商户
+                    StandardDate = pos.ActivationTime, //达标日期
+                    RewardAmount = ActPrize, //奖励金额
+                    BrandId = pos.BrandId, //品牌
+                    UserNav = ParentNav, //创客父级
+                    DirectBuddyNo = merchant.UserId, //商户直属创客
+                    KqMerNo = merchant.KqMerNo, //渠道商户编号
+                    KqSnNo = pos.PosSn, //渠道SN号
+                    SnType = pos.PosSnType, //机具类型
+                    SnApplyUserId = pos.BuyUserId, //机具申请创客
+                    ActType = 0, //激活类型
+                    SnStoreId = pos.StoreId, //SN仓库
+                    RewardTips = "激活奖励", //奖励描述
+                    Remark = "激活奖励", //备注
+                    ActDate = pos.ActivationTime, //激活时间
+                    TopUserId = TopUserId, //顶级创客
+                    SeoTitle = machineUser.RealName,
+                });
+                db.SaveChanges();
+                string IdBrand = GetUserId + "_" + pos.BrandId;
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.ActProfit += ActPrize;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = db.UserAccount.Add(new UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += ActPrize;
+                account.TotalAmount += ActPrize;
+                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 = GetUserId, //创客
+                    ChangeType = ChangeType, //变动类型
+                    ProductType = pos.BrandId, //产品类型
+                    ChangeAmount = ActPrize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                // 激活奖励列表
+                List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                if (!dates.Contains(dateString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                if (!months.Contains(monthString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                // 激活奖励详情
+                List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                if (!actPrizeList.Contains(pos.BindMerchantId))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                //收支明细
+                RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                RedisDbconn.Instance.Clear("UserAccount:Income:" + GetUserId + ":" + monthString);
+            }
+        }
+
+
+        //根据商户信息发放激活奖励
+        public void dosomething32(int merid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddHours(-3);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (merid > 0)
+            { 
+                merList = merList.Where(m => m.Id == merid);
+            }
+            else
+            {
+                merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
+            }
+            foreach (PosMerchantInfo merchant in merList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                // if (otherInfo != null)
+                // {
+                //     otherInfo.PrizeFlag1 = 1;
+                //     db.SaveChanges();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                string ParentNav = "";
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                if (user != null)
+                {
+                    int GetUserId = user.Id;
+                    ParentNav = user.ParentNav;
+                    int TopUserId = 0;
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                    }
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                    {
+                        ActPrize = ActPrize / 100;
+                    }
+                    if (ActPrize > 0)
+                    {
+                        bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
+                        if (!check)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            db.ActiveReward.Add(new ActiveReward()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                StandardDate = pos.ActivationTime, //达标日期
+                                RewardAmount = ActPrize, //奖励金额
+                                BrandId = pos.BrandId, //品牌
+                                UserNav = ParentNav, //创客父级
+                                DirectBuddyNo = merchant.UserId, //商户直属创客
+                                KqMerNo = merchant.KqMerNo, //渠道商户编号
+                                KqSnNo = pos.PosSn, //渠道SN号
+                                SnType = pos.PosSnType, //机具类型
+                                SnApplyUserId = pos.BuyUserId, //机具申请创客
+                                ActType = 0, //激活类型
+                                SnStoreId = pos.StoreId, //SN仓库
+                                RewardTips = "激活奖励", //奖励描述
+                                Remark = "激活奖励", //备注
+                                ActDate = pos.ActivationTime, //激活时间
+                                TopUserId = TopUserId, //顶级创客
+                                SeoTitle = machineUser.RealName,
+                            });
+                            db.SaveChanges();
+                            string IdBrand = GetUserId + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.ActProfit += ActPrize;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += ActPrize;
+                            account.TotalAmount += ActPrize;
+                            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 = GetUserId, //创客
+                                ChangeType = 0, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = ActPrize, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                            string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                            string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                            // 激活奖励列表
+                            List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                            if (!dates.Contains(dateString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                            if (!months.Contains(monthString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                            // 激活奖励详情
+                            List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                            if (!actPrizeList.Contains(pos.BindMerchantId))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            //收支明细
+                            RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                            RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                        }
+                    }
+                }
+                // }
+            }
+            db.Dispose();
+        }
+
+        
+
+        //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething4(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
+            foreach (PosMachinesTwo pos in posList)
+            {
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20))
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                        if (merchant != null)
+                        {
+                            // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                            // if (otherInfo != null)
+                            // {
+                            //     otherInfo.PrizeFlag2 = 1;
+                            //     db.SaveChanges();
+                                // 从机具所属人上级开始分开机奖励
+                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                                if (user != null)
+                                {
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        decimal Prize = 20;
+                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        {
+                                            int UserId = int.Parse(ParentNavs[i]);
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                            if (puser != null && Prize > 0)
+                                            {
+                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                {
+                                                    int pTopUserId = 0;
+                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
+                                                    {
+                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                    }
+                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = yesterday, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                        MerchantId = pos.BindMerchantId, //商户
+                                                        DirectUserId = merchant.UserId, //商户直属人
+                                                        SnNo = pos.PosSn, //SN号
+                                                        MerNo = merchant.KqMerNo, //渠道商户号
+                                                        SnType = pos.PosSnType, //机具类型
+                                                        StandardDate = pos.ActivationTime, //商户的激活日期
+                                                        SnStoreId = pos.StoreId, //SN仓库
+                                                        MerBuddyType = puser.MerchantType, //商户创客类型
+                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                        RewardTips = "开机奖励", //奖励描述
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                        SeoTitle = machineUser.RealName,
+                                                    }).Entity;
+                                                    db.OpenReward.Add(new OpenReward()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = DateTime.Now, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        RewardType = 2, //奖励类型
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                    });
+                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                    if (userData == null)
+                                                    {
+                                                        userData = db.UserMachineData.Add(new UserMachineData()
+                                                        {
+                                                            IdBrand = IdBrand,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    userData.OpenProfit += Prize;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                    //账户入库
+                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                    if (account == null)
+                                                    {
+                                                        account = db.UserAccount.Add(new UserAccount()
+                                                        {
+                                                            Id = puser.Id,
+                                                            UserId = puser.Id,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    //收支明细入库
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    account.BalanceAmount += Prize;
+                                                    account.TotalAmount += Prize;
+                                                    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 = puser.Id, //创客
+                                                        ChangeType = 50, //变动类型
+                                                        ProductType = pos.BrandId, //产品类型
+                                                        ChangeAmount = Prize, //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                                    string dateString = yesterday.ToString("yyyyMMdd");
+                                                    string monthString = yesterday.ToString("yyyyMM");
+                                                    // 开机奖励列表
+                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!dates.Contains(dateString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!months.Contains(monthString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                                    // 开机奖励详情
+                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                                    //收支明细
+                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                                    Prize -= 10;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            // }
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void dosomething42(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
+            foreach (PosMerchantInfo merchant in merList)
+            {
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                        // if (otherInfo != null)
+                        // {
+                        //     otherInfo.PrizeFlag2 = 1;
+                        //     db.SaveChanges();
+                        // 从机具所属人上级开始分开机奖励
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                        if (user != null)
+                        {
+                            if (!string.IsNullOrEmpty(user.ParentNav))
+                            {
+                                decimal Prize = 20;
+                                string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                {
+                                    int UserId = int.Parse(ParentNavs[i]);
+                                    Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                    if (puser != null && Prize > 0)
+                                    {
+                                        int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                        int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                        int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                        // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                        // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                        if (machineCount + ActiveCount + couponCount >= 3)
+                                        {
+                                            int pTopUserId = 0;
+                                            if (!string.IsNullOrEmpty(puser.ParentNav))
+                                            {
+                                                pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                            }
+                                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                            OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = yesterday, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                MerchantId = pos.BindMerchantId, //商户
+                                                DirectUserId = merchant.UserId, //商户直属人
+                                                SnNo = pos.PosSn, //SN号
+                                                MerNo = merchant.KqMerNo, //渠道商户号
+                                                SnType = pos.PosSnType, //机具类型
+                                                StandardDate = pos.ActivationTime, //商户的激活日期
+                                                SnStoreId = pos.StoreId, //SN仓库
+                                                MerBuddyType = puser.MerchantType, //商户创客类型
+                                                RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                RewardTips = "开机奖励", //奖励描述
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                                SeoTitle = machineUser.RealName,
+                                            }).Entity;
+                                            db.OpenReward.Add(new OpenReward()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = DateTime.Now, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                RewardType = 2, //奖励类型
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                            });
+                                            string IdBrand = puser.Id + "_" + pos.BrandId;
+                                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                            if (userData == null)
+                                            {
+                                                userData = db.UserMachineData.Add(new UserMachineData()
+                                                {
+                                                    IdBrand = IdBrand,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            userData.OpenProfit += Prize;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                            //账户入库
+                                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                            if (account == null)
+                                            {
+                                                account = db.UserAccount.Add(new UserAccount()
+                                                {
+                                                    Id = puser.Id,
+                                                    UserId = puser.Id,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            //收支明细入库
+                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                            account.BalanceAmount += Prize;
+                                            account.TotalAmount += Prize;
+                                            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 = puser.Id, //创客
+                                                ChangeType = 50, //变动类型
+                                                ProductType = pos.BrandId, //产品类型
+                                                ChangeAmount = Prize, //变更金额
+                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                            }).Entity;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                            string dateString = yesterday.ToString("yyyyMMdd");
+                                            string monthString = yesterday.ToString("yyyyMM");
+                                            // 开机奖励列表
+                                            List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                            if (!dates.Contains(dateString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                            List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                            if (!months.Contains(monthString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                            // 开机奖励详情
+                                            RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                            //收支明细
+                                            RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                            RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                            Prize -= 10;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+
+        // 4. 前一天的流量卡记录和匹配
+        public void ListenFluxRecord(string date)
+        { 
+            Thread th = new Thread(CheckFluxForTrade);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void doFluxRecord(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= yesterday && m.CreateDate < today && m.Status == 1).ToList();
+            foreach (SpModels.TradeFluxRecord trade in trades)
+            {
+                try
+                {
+                    string OrderNo = trade.TradeSerialNo; //单号
+                    DateTime TradeDate = trade.CreateDate.Value;
+                    string TradeMonth = TradeDate.ToString("yyyyMM");
+                    decimal FeeAmount = trade.FeeAmount; //流量费
+                    if (trade.ProductType == "1" || trade.ProductType == "4")
+                    {
+                        FeeAmount = FeeAmount / 100;
+                    }
+                    string TradeSnNo = trade.TradeSnNo; //机具SN
+                    decimal FluxProfit = 0;
+                    if (trade.ProductType == "1" && FeeAmount == 60)
+                    {
+                        FluxProfit = 24;
+                    }
+                    else if (trade.ProductType != "1" && FeeAmount == 48)
+                    {
+                        FluxProfit = 12;
+                    }
+                    if (FluxProfit > 0)
+                    {
+                        MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                        bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
+                        if (!checkExist)
+                        {
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            int GetUserId = user.Id;
+                            int TopUserId = 0;
+                            string ParentNav = user.ParentNav;
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                if (ParentNavList.Length > 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[1]);
+                                }
+                                else if (ParentNavList.Length == 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[0]);
+                                }
+                            }
+                            FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
+                            if (fluxProfit == null)
+                            {
+                                fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UpdateDate = DateTime.Now,
+                                    UserId = GetUserId, //创客
+                                    BrandId = pos.BrandId,
+                                    TopUserId = TopUserId, //顶级创客
+                                    TradeMonth = TradeMonth, //交易月
+                                    MerUserType = user.MerchantType, //商户创客类型
+                                    Remark = "流量卡分佣", //备注
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
+                            db.FluxProfitDetail.Add(new FluxProfitDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = OrderNo, //单号
+                                TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
+                                TradeTime = TradeDate.ToString("HHmmss"), //交易时间
+                                TradeMonth = TradeMonth, //交易月
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                MerchantUserId = pos.UserId, //商户直属人
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = pos.PosSn, //渠道SN号
+                                FluxOrderNo = OrderNo, //流量扣费单号
+                                TradeOrderNo = OrderNo, //交易流水号
+                                TradeAmt = trade.TradeAmount, //商户交易额
+                                FluxFeeAmt = FeeAmount, //流量费
+                                FluxProfitAmt = FluxProfit, //流量分润总金额
+                                PosType = pos.PosSnType.ToString(), //POS类型
+                                Remark = "流量卡分佣", //备注
+                                BrandId = pos.BrandId, //品牌
+                                TopUserId = TopUserId, //顶级创客
+                                MerUserType = user.MerchantType, //商户创客类型
+                            });
+                            string IdBrand = user.Id + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.FluxProfit += FluxProfit;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserMachineData:" + IdBrand);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += FluxProfit;
+                            account.TotalAmount += FluxProfit;
+                            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 = GetUserId, //创客
+                                ChangeType = 60, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = FluxProfit, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserAccount:" + GetUserId);
+                        }
+                        SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                            spdb.SaveChanges();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
+        }
+        public void CheckFluxForTrade(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString(), "扫描金控交易记录中的流量费");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            DateTime start = DateTime.Parse(date + " 00:00:00");
+            DateTime end = start.AddDays(1);
+            var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType }).Where(m => m.CreateDate > start && m.CreateDate < end && m.ProductType == "1").OrderBy(m => m.CreateDate);
+            foreach (var sub in list.ToList())
+            {
+                try
+                {
+                    SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
+                    if (trade != null)
+                    {
+                        string content = trade.SeoDescription;
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            content = System.Web.HttpUtility.UrlDecode(content);
+                            JsonData jsonObj = JsonMapper.ToObject(content);
+                            decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
+                            if (terminalDataFlowFee > 0)
+                            {
+                                spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
+                                {
+                                    SeoDescription = trade.TradeSerialNo,
+                                    FeeAmount = terminalDataFlowFee,
+                                    TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
+                                    CreateDate = trade.CreateDate,
+                                    TradeSnNo = trade.TradeSnNo,
+                                    ProductType = trade.ProductType,
+                                    Status = 1,
+                                });
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描金控交易记录中的流量费异常");
+                }
+            }
+            spdb.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "扫描金控交易记录中的流量费");
+
+            doFluxRecord(date);
+        }
+
+
+
+
+
+
+        // 每天统计头一天的交易额
+        public void StartEverDay(string date)
+        { 
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
+            // DateTime check = DateTime.Parse("2022-03-11");
+            // while (check <= end)
+            // {
+            //     Thread th = new Thread(StatTradeAmountEverDay);
+            //     th.IsBackground = true;
+            //     th.Start(check.ToString("yyyy-MM-dd"));
+            //     check = check.AddDays(1);
+            // }
+            Thread th = new Thread(StatTradeAmountEverDay);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void StatTradeAmountEverDay(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+
+        public void StatTradeAmountEverDay2(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                
+                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                Models.WebCMSEntities maindb = new Models.WebCMSEntities();
+                DateTime StartDate = DateTime.Parse(start);
+                DateTime EndDate = DateTime.Parse(end);
+                int StartTradeId = int.Parse(function.CheckInt(startId));
+                bool op = true;
+                while (op)
+                {
+                    List<TradeRecord> list = db.TradeRecord.Where(m => m.Id > StartTradeId && m.CreateDate >= StartDate && m.CreateDate < EndDate).OrderBy(m => m.Id).Take(500).ToList();
+                    if (list.Count > 0)
+                    {
+                        foreach (TradeRecord sub in list)
+                        {
+                            maindb.TradeRecord.Add(new Models.TradeRecord()
+                            {
+                                CreateDate = sub.CreateDate,
+                                UpdateDate = sub.UpdateDate,
+                                RecordNo = sub.RecordNo, //单号
+                                UserId = sub.UserId, //创客
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = sub.MerNo, //渠道商户编号
+                                MerHelpFlag = sub.MerHelpFlag, //是否属于扶持周期内商户
+                                HelpMonthCount = sub.HelpMonthCount, //扶持第几个月
+                                MerBuddyType = sub.MerBuddyType, //商户创客类型
+                                SnNo = sub.SnNo, //渠道SN号
+                                TradeDate = sub.TradeDate, //交易日期
+                                ClearDate = sub.ClearDate, //清算日期
+                                TradeSerialNo = sub.TradeSerialNo, //交易流水号
+                                TradeAmount = sub.TradeAmount, //交易金额
+                                BankCardType = sub.BankCardType, //银行卡类型
+                                QrPayFlag = sub.QrPayFlag, //云闪付标识
+                                CapFlag = sub.CapFlag, //借记卡封顶交易标志
+                                DirectFlag = sub.DirectFlag, //是否直营
+                                BrandId = sub.BrandId, //品牌
+                                Remark = sub.Remark, //备注
+                                TopUserId = sub.TopUserId, //顶级创客
+                                MerUserId = sub.MerUserId, //商户直属创客
+                            });
+                            StartTradeId = sub.Id;
+                        }
+                        maindb.SaveChanges();
+                    }
+                    else
+                    {
+                        op = false;
+                    }
+                }
+                maindb.Dispose();
+                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+        public void StatTradeAmountEverDaySum()
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
+            // string html = "<table>";
+            // foreach (DataRow dr in dt.Rows)
+            // {
+            //     html += "<tr>";
+            //     string TradeDate = dr["TradeDate"].ToString();
+            //     string TradeMonth = dr["TradeMonth"].ToString();
+            //     int UserId = int.Parse(dr["UserId"].ToString());
+            //     int BrandId = int.Parse(dr["BrandId"].ToString());
+            //     int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+            //     decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
+            //     decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
+            //     decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
+            //     decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
+            //     decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
+
+            //     CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
+            //     CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
+            //     CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
+            //     CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
+            //     decimal TotalPosAmount = 0;
+            //     decimal TotalCloudPayAmount = 0;
+            //     decimal TeamTotalPosAmount = 0;
+            //     decimal TeamTotalCloudPayAmount = 0;
+            //     if (QrPayFlag == 1)
+            //     {
+            //         TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //         TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //     }
+            //     else
+            //     {
+            //         TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //         TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //     }
+            //     Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            //     html += "<td>应得</td>";
+            //     html += "<td>" + user.MakerCode + "</td>";
+            //     html += "<td>" + user.RealName + "</td>";
+            //     html += "<td>" + user.Mobile + "</td>";
+            //     html += "<td>" + BrandId + "</td>";
+            //     html += "<td>" + QrPayFlag + "</td>";
+            //     html += "<td>" + DirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + DirectTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectTradeAmt + "</td>";
+            //     html += "</tr>";
+
+            //     html += "<tr>";
+            //     html += "<td>当前</td>";
+            //     html += "<td></td>";
+            //     html += "<td></td>";
+            //     html += "<td>当天品牌:" + CurAmount + "</td>";
+            //     html += "<td>总交易:" + CurTotalAmount + "</td>";
+            //     html += "<td>当月:" + CurMonthAmount + "</td>";
+            //     html += "<td>当天:" + CurDayAmount + "</td>";
+            //     html += "<td>" + TotalPosAmount + "</td>";
+            //     html += "<td>" + TotalCloudPayAmount + "</td>";
+            //     html += "<td>" + TeamTotalPosAmount + "</td>";
+            //     html += "<td>" + TeamTotalCloudPayAmount + "</td>";
+            //     html += "</tr>";
+            // }
+            // html += "</table>";
+            // db.Dispose();
+            // // OtherMySqlConn.connstr = ;
+            // function.WritePage("/html/", "1.html", html);
+        }
+
+
+        //统计商户交易额
+        private void StatMerchantTrade(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
+            // WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate)  select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "").Substring(0, 6)); //商户当月交易
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "")); //商户当日交易
+                // foreach (DataRow selfDr in selfdt.Rows)
+                // {
+                //     int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                //     int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
+                //     string TradeDate = selfDr["TradeDate"].ToString();
+                //     TradeDate = TradeDate.Replace("-", "");
+                //     string TradeMonth = TradeDate.Substring(0, 6);
+                //     decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
+                //     PosMerchantTradeSummay merStat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
+                //     if (merStat == null)
+                //     {
+                //         merStat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
+                //         {
+                //             MerchantId = MerchantId,
+                //             TradeMonth = TradeMonth,
+                //             TradeDate = TradeDate,
+                //             BrandId = BrandId,
+                //         }).Entity;
+                //         db.SaveChanges();
+                //     }
+                //     merStat.TradeAmount += TradeAmount;
+                //     db.SaveChanges();                    
+                // }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
+            }
+            // db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
+        }
+
+
+        // 5. 创客升级
+        public void StatUserLevel()
+        { 
+            Thread th = new Thread(StatUserLevelDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatUserLevelDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+                DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+                DateTime end = start.AddDays(1);
+                string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                List<UserLevelSet> sets = db.UserLevelSet.ToList();
+                var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.AuthFlag == 1).ToList();
+                function.WriteLog(users.Count.ToString(), "创客升级日志");
+                foreach (var subuser in users)
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
+                    if (user != null)
+                    {
+                        int BeforeLevel = user.UserLevel;
+                        int AfterLevel = 0;
+                        decimal TradeAmount = 0;
+                        bool check = db.UserTradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
+                        if (check)
+                        {
+                            TradeAmount = db.UserTradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.NonDirectTradeAmt);
+                        }
+                        UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
+                        if (set != null)
+                        {
+                            AfterLevel = set.Id;
+                        }
+                        if (AfterLevel > BeforeLevel && AfterLevel > 1)
+                        {
+                            user.UserLevel = AfterLevel;
+                            db.UserRank.Add(new UserRank()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = user.Id, //创客
+                                WhiteRank = BeforeLevel,
+                                Rank = AfterLevel, //当前等级
+                                StatYear = DateTime.Now.Year, //统计年份
+                                StatMonth = DateTime.Now.Month, //统计月份
+                                TradeAmt = TradeAmount, //团队交易总额
+                                UpgradeFlag = 1, //升级标识
+                                OperateDate = DateTime.Now, //操作时间
+                            });
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserLevelData:" + user.Id, BeforeLevel + "#" + AfterLevel);
+                        }
+                    }
+                }
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+            }
+            catch (Exception ex)
+            { 
+                function.WriteLog(ex.ToString(), "创客升级异常");
+            }
+            db.Dispose();
+
+            
+            ProfitHelper.Instance.StatProfit("202204");
+        }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        { 
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        { 
+            DateTime end = DateTime.Parse("2022-05-24 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        { 
+            Thread th = new Thread(StartNewUserNumDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumDo()
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                DataTable dt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d'),count(Id) from Users where QueryCount=0 and ParentUserId>0 and AuthFlag=1 GROUP BY ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d')");
+                if (dt.Rows.Count > 0)
+                {
+                    OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and ParentUserId>0 and AuthFlag=1");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        int UserId = int.Parse(dr["ParentUserId"].ToString());
+                        string StatDate = dr[1].ToString();
+                        string StatMonth = StatDate.Substring(0, 6);
+                        int NewCount = int.Parse(dr[2].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += NewCount;
+                        db.SaveChanges();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        string ParentNav = user.ParentNav;
+                        ParentNav += "," + UserId + ",";
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                            foreach (string NavUserIdString in ParentNavList)
+                            {
+                                int NavUserId = int.Parse(NavUserIdString);
+                                PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                if (teamStat == null)
+                                {
+                                    teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                    {
+                                        UserId = NavUserId,
+                                        StatMonth = StatMonth,
+                                        StatDate = StatDate,
+                                        SeoTitle = "team",
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                teamStat.RecUserAuthNum += NewCount;
+                                db.SaveChanges();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
+    }
+}

+ 1891 - 0
.history/AppStart/Helper/StatService_20220525164444.cs

@@ -0,0 +1,1891 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class StatService
+    {
+        public readonly static StatService Instance = new StatService();
+        private StatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
+                if (string.IsNullOrEmpty(flag))
+                {
+                    function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                    dosomething1(doDate);
+                    dosomething11(doDate);
+                    // dosomething2(doDate);
+                    StartEverDay(doDate);
+                    dosomething4(doDate);
+                    ListenFluxRecord(doDate);
+                }
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+        public void ActiveReward(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething3();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+                function.WritePage("/static/", "act.txt", DateTime.Now.ToString());
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public void clear()
+        {
+            RedisDbconn.Instance.Clear("TotalAmount*");
+            RedisDbconn.Instance.Clear("TotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TotalPosAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalPosAmount*");
+
+            // RedisDbconn.Instance.Clear("TotalUser*");
+            // RedisDbconn.Instance.Clear("TeamTotalUser*");
+            // RedisDbconn.Instance.Clear("AddUser*");
+            // RedisDbconn.Instance.Clear("TeamAddUser*");
+
+            // RedisDbconn.Instance.Clear("TotalPosMerchant*");
+            // RedisDbconn.Instance.Clear("TeamTotalPosMerchant*");
+
+            RedisDbconn.Instance.Clear("MerTotalAmount*");
+        }
+
+
+        // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
+        public void dosomething1(string date)
+        {
+            // TODO: 每天扫描非商户型创客的持有机具数量
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
+            foreach (SpModels.BindRecord bind in binds)
+            {
+                string Mobile = bind.MerNewSnNo;
+                string MerNo = bind.MerNo;
+                string BeforeNum = "";
+                string AfterNum = "";
+                if (Mobile.Contains("****") && Mobile.Length == 11)
+                {
+                    BeforeNum = Mobile.Substring(0, 3);
+                    AfterNum = Mobile.Substring(7);
+                }
+                string Name = bind.MerName;
+                if (bind.ProductType == "2")
+                {
+                    if (Name.Contains("-"))
+                    {
+                        Name = Name.Split('-')[1];
+                    }
+                    else if (Name.Contains("_"))
+                    {
+                        Name = Name.Split('_')[1];
+                    }
+                }
+                else if (bind.ProductType == "4")
+                {
+                    Name = bind.SeoTitle;
+                }
+                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
+                if (user != null)
+                {
+                    bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
+                    if (!checkPos)
+                    {
+                        PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
+                        if (pos != null)
+                        {
+                            pos.UserId = user.Id;
+                            user.MerchantType = 1;
+                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
+                            merchant.UserId = user.Id;
+                            merchant.MerUserType = 1;
+                            pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
+                            RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("Users:" + user.Id, user);
+                            RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                        }
+                    }
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+        }
+
+        // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
+        public void dosomething11(string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
+            foreach (var user in users)
+            {
+                int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
+                int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
+                if (machineCount + couponCount >= 3)
+                {
+                    Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
+                    if (edit != null)
+                    {
+                        edit.MerchantType = 0;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.Set("Users:" + user.Id, edit);
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        
+        public void testStatTrade(string date)
+        {
+            string yesterday = date + " 00:00:00";
+            string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+            string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
+            string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
+            DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
+                int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
+                int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
+                int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
+                int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
+                decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
+                string content = "{";
+                content += "\"DateString\":\"" + date + "\",";
+                content += "\"UserId\":\"" + UserId + "\",";
+                content += "\"BrandId\":\"" + BrandId + "\",";
+                content += "\"MerchantId\":\"" + MerchantId + "\",";
+                content += "\"BankCardType\":\"" + BankCardType + "\",";
+                content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
+                content += "\"TradeAmount\":\"" + TradeAmount + "\"";
+                content += "}";
+                RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
+            }
+        }
+
+        // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething3(int posid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddDays(-1);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (posid > 0)
+            { 
+                posList = posList.Where(m => m.Id == posid);
+            }
+            else
+            {
+                posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
+            }
+            foreach (PosMachinesTwo pos in posList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if (merchant != null)
+                {
+                    // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                    // if (otherInfo != null)
+                    // {
+                    //     otherInfo.PrizeFlag1 = 1;
+                    //     db.SaveChanges();
+                    string ParentNav = "";
+                    Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                    if (user != null)
+                    {
+                        int GetUserId = user.Id;
+                        ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                        if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                        {
+                            ActPrize = ActPrize / 100;
+                        }
+                        if (ActPrize > 0)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            else if (ActPrize == 249)
+                            {
+                                ActPrize = 260;
+                            }
+                            if (GetUserId > 0)
+                            {
+                                doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
+                            }
+                        }
+                    }
+                    // }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0)
+        {
+            bool check = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo && m.RewardAmount == ActPrize);
+            if (!check)
+            {
+                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                db.ActiveReward.Add(new ActiveReward()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    MerchantId = pos.BindMerchantId, //商户
+                    StandardDate = pos.ActivationTime, //达标日期
+                    RewardAmount = ActPrize, //奖励金额
+                    BrandId = pos.BrandId, //品牌
+                    UserNav = ParentNav, //创客父级
+                    DirectBuddyNo = merchant.UserId, //商户直属创客
+                    KqMerNo = merchant.KqMerNo, //渠道商户编号
+                    KqSnNo = pos.PosSn, //渠道SN号
+                    SnType = pos.PosSnType, //机具类型
+                    SnApplyUserId = pos.BuyUserId, //机具申请创客
+                    ActType = 0, //激活类型
+                    SnStoreId = pos.StoreId, //SN仓库
+                    RewardTips = "激活奖励", //奖励描述
+                    Remark = "激活奖励", //备注
+                    ActDate = pos.ActivationTime, //激活时间
+                    TopUserId = TopUserId, //顶级创客
+                    SeoTitle = machineUser.RealName,
+                });
+                db.SaveChanges();
+                string IdBrand = GetUserId + "_" + pos.BrandId;
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.ActProfit += ActPrize;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = db.UserAccount.Add(new UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += ActPrize;
+                account.TotalAmount += ActPrize;
+                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 = GetUserId, //创客
+                    ChangeType = ChangeType, //变动类型
+                    ProductType = pos.BrandId, //产品类型
+                    ChangeAmount = ActPrize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                // 激活奖励列表
+                List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                if (!dates.Contains(dateString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                if (!months.Contains(monthString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                // 激活奖励详情
+                List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                if (!actPrizeList.Contains(pos.BindMerchantId))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                //收支明细
+                RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                RedisDbconn.Instance.Clear("UserAccount:Income:" + GetUserId + ":" + monthString);
+            }
+        }
+
+
+        //根据商户信息发放激活奖励
+        public void dosomething32(int merid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddHours(-3);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (merid > 0)
+            { 
+                merList = merList.Where(m => m.Id == merid);
+            }
+            else
+            {
+                merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
+            }
+            foreach (PosMerchantInfo merchant in merList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                // if (otherInfo != null)
+                // {
+                //     otherInfo.PrizeFlag1 = 1;
+                //     db.SaveChanges();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                string ParentNav = "";
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                if (user != null)
+                {
+                    int GetUserId = user.Id;
+                    ParentNav = user.ParentNav;
+                    int TopUserId = 0;
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                    }
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                    {
+                        ActPrize = ActPrize / 100;
+                    }
+                    if (ActPrize > 0)
+                    {
+                        bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
+                        if (!check)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            db.ActiveReward.Add(new ActiveReward()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                StandardDate = pos.ActivationTime, //达标日期
+                                RewardAmount = ActPrize, //奖励金额
+                                BrandId = pos.BrandId, //品牌
+                                UserNav = ParentNav, //创客父级
+                                DirectBuddyNo = merchant.UserId, //商户直属创客
+                                KqMerNo = merchant.KqMerNo, //渠道商户编号
+                                KqSnNo = pos.PosSn, //渠道SN号
+                                SnType = pos.PosSnType, //机具类型
+                                SnApplyUserId = pos.BuyUserId, //机具申请创客
+                                ActType = 0, //激活类型
+                                SnStoreId = pos.StoreId, //SN仓库
+                                RewardTips = "激活奖励", //奖励描述
+                                Remark = "激活奖励", //备注
+                                ActDate = pos.ActivationTime, //激活时间
+                                TopUserId = TopUserId, //顶级创客
+                                SeoTitle = machineUser.RealName,
+                            });
+                            db.SaveChanges();
+                            string IdBrand = GetUserId + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.ActProfit += ActPrize;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += ActPrize;
+                            account.TotalAmount += ActPrize;
+                            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 = GetUserId, //创客
+                                ChangeType = 0, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = ActPrize, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                            string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                            string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                            // 激活奖励列表
+                            List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                            if (!dates.Contains(dateString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                            if (!months.Contains(monthString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                            // 激活奖励详情
+                            List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                            if (!actPrizeList.Contains(pos.BindMerchantId))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            //收支明细
+                            RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                            RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                        }
+                    }
+                }
+                // }
+            }
+            db.Dispose();
+        }
+
+        
+
+        //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething4(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
+            foreach (PosMachinesTwo pos in posList)
+            {
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20))
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                        if (merchant != null)
+                        {
+                            // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                            // if (otherInfo != null)
+                            // {
+                            //     otherInfo.PrizeFlag2 = 1;
+                            //     db.SaveChanges();
+                                // 从机具所属人上级开始分开机奖励
+                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                                if (user != null)
+                                {
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        decimal Prize = 20;
+                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        {
+                                            int UserId = int.Parse(ParentNavs[i]);
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                            if (puser != null && Prize > 0)
+                                            {
+                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                {
+                                                    int pTopUserId = 0;
+                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
+                                                    {
+                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                    }
+                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = yesterday, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                        MerchantId = pos.BindMerchantId, //商户
+                                                        DirectUserId = merchant.UserId, //商户直属人
+                                                        SnNo = pos.PosSn, //SN号
+                                                        MerNo = merchant.KqMerNo, //渠道商户号
+                                                        SnType = pos.PosSnType, //机具类型
+                                                        StandardDate = pos.ActivationTime, //商户的激活日期
+                                                        SnStoreId = pos.StoreId, //SN仓库
+                                                        MerBuddyType = puser.MerchantType, //商户创客类型
+                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                        RewardTips = "开机奖励", //奖励描述
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                        SeoTitle = machineUser.RealName,
+                                                    }).Entity;
+                                                    db.OpenReward.Add(new OpenReward()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = DateTime.Now, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        RewardType = 2, //奖励类型
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                    });
+                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                    if (userData == null)
+                                                    {
+                                                        userData = db.UserMachineData.Add(new UserMachineData()
+                                                        {
+                                                            IdBrand = IdBrand,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    userData.OpenProfit += Prize;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                    //账户入库
+                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                    if (account == null)
+                                                    {
+                                                        account = db.UserAccount.Add(new UserAccount()
+                                                        {
+                                                            Id = puser.Id,
+                                                            UserId = puser.Id,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    //收支明细入库
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    account.BalanceAmount += Prize;
+                                                    account.TotalAmount += Prize;
+                                                    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 = puser.Id, //创客
+                                                        ChangeType = 50, //变动类型
+                                                        ProductType = pos.BrandId, //产品类型
+                                                        ChangeAmount = Prize, //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                                    string dateString = yesterday.ToString("yyyyMMdd");
+                                                    string monthString = yesterday.ToString("yyyyMM");
+                                                    // 开机奖励列表
+                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!dates.Contains(dateString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!months.Contains(monthString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                                    // 开机奖励详情
+                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                                    //收支明细
+                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                                    Prize -= 10;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            // }
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void dosomething42(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
+            foreach (PosMerchantInfo merchant in merList)
+            {
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                        // if (otherInfo != null)
+                        // {
+                        //     otherInfo.PrizeFlag2 = 1;
+                        //     db.SaveChanges();
+                        // 从机具所属人上级开始分开机奖励
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                        if (user != null)
+                        {
+                            if (!string.IsNullOrEmpty(user.ParentNav))
+                            {
+                                decimal Prize = 20;
+                                string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                {
+                                    int UserId = int.Parse(ParentNavs[i]);
+                                    Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                    if (puser != null && Prize > 0)
+                                    {
+                                        int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                        int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                        int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                        // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                        // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                        if (machineCount + ActiveCount + couponCount >= 3)
+                                        {
+                                            int pTopUserId = 0;
+                                            if (!string.IsNullOrEmpty(puser.ParentNav))
+                                            {
+                                                pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                            }
+                                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                            OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = yesterday, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                MerchantId = pos.BindMerchantId, //商户
+                                                DirectUserId = merchant.UserId, //商户直属人
+                                                SnNo = pos.PosSn, //SN号
+                                                MerNo = merchant.KqMerNo, //渠道商户号
+                                                SnType = pos.PosSnType, //机具类型
+                                                StandardDate = pos.ActivationTime, //商户的激活日期
+                                                SnStoreId = pos.StoreId, //SN仓库
+                                                MerBuddyType = puser.MerchantType, //商户创客类型
+                                                RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                RewardTips = "开机奖励", //奖励描述
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                                SeoTitle = machineUser.RealName,
+                                            }).Entity;
+                                            db.OpenReward.Add(new OpenReward()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = DateTime.Now, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                RewardType = 2, //奖励类型
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                            });
+                                            string IdBrand = puser.Id + "_" + pos.BrandId;
+                                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                            if (userData == null)
+                                            {
+                                                userData = db.UserMachineData.Add(new UserMachineData()
+                                                {
+                                                    IdBrand = IdBrand,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            userData.OpenProfit += Prize;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                            //账户入库
+                                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                            if (account == null)
+                                            {
+                                                account = db.UserAccount.Add(new UserAccount()
+                                                {
+                                                    Id = puser.Id,
+                                                    UserId = puser.Id,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            //收支明细入库
+                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                            account.BalanceAmount += Prize;
+                                            account.TotalAmount += Prize;
+                                            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 = puser.Id, //创客
+                                                ChangeType = 50, //变动类型
+                                                ProductType = pos.BrandId, //产品类型
+                                                ChangeAmount = Prize, //变更金额
+                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                            }).Entity;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                            string dateString = yesterday.ToString("yyyyMMdd");
+                                            string monthString = yesterday.ToString("yyyyMM");
+                                            // 开机奖励列表
+                                            List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                            if (!dates.Contains(dateString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                            List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                            if (!months.Contains(monthString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                            // 开机奖励详情
+                                            RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                            //收支明细
+                                            RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                            RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                            Prize -= 10;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+
+        // 4. 前一天的流量卡记录和匹配
+        public void ListenFluxRecord(string date)
+        { 
+            Thread th = new Thread(CheckFluxForTrade);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void doFluxRecord(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= yesterday && m.CreateDate < today && m.Status == 1).ToList();
+            foreach (SpModels.TradeFluxRecord trade in trades)
+            {
+                try
+                {
+                    string OrderNo = trade.TradeSerialNo; //单号
+                    DateTime TradeDate = trade.CreateDate.Value;
+                    string TradeMonth = TradeDate.ToString("yyyyMM");
+                    decimal FeeAmount = trade.FeeAmount; //流量费
+                    if (trade.ProductType == "1" || trade.ProductType == "4")
+                    {
+                        FeeAmount = FeeAmount / 100;
+                    }
+                    string TradeSnNo = trade.TradeSnNo; //机具SN
+                    decimal FluxProfit = 0;
+                    if (trade.ProductType == "1" && FeeAmount == 60)
+                    {
+                        FluxProfit = 24;
+                    }
+                    else if (trade.ProductType != "1" && FeeAmount == 48)
+                    {
+                        FluxProfit = 12;
+                    }
+                    if (FluxProfit > 0)
+                    {
+                        MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                        bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
+                        if (!checkExist)
+                        {
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            int GetUserId = user.Id;
+                            int TopUserId = 0;
+                            string ParentNav = user.ParentNav;
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                if (ParentNavList.Length > 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[1]);
+                                }
+                                else if (ParentNavList.Length == 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[0]);
+                                }
+                            }
+                            FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
+                            if (fluxProfit == null)
+                            {
+                                fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UpdateDate = DateTime.Now,
+                                    UserId = GetUserId, //创客
+                                    BrandId = pos.BrandId,
+                                    TopUserId = TopUserId, //顶级创客
+                                    TradeMonth = TradeMonth, //交易月
+                                    MerUserType = user.MerchantType, //商户创客类型
+                                    Remark = "流量卡分佣", //备注
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
+                            db.FluxProfitDetail.Add(new FluxProfitDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = OrderNo, //单号
+                                TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
+                                TradeTime = TradeDate.ToString("HHmmss"), //交易时间
+                                TradeMonth = TradeMonth, //交易月
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                MerchantUserId = pos.UserId, //商户直属人
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = pos.PosSn, //渠道SN号
+                                FluxOrderNo = OrderNo, //流量扣费单号
+                                TradeOrderNo = OrderNo, //交易流水号
+                                TradeAmt = trade.TradeAmount, //商户交易额
+                                FluxFeeAmt = FeeAmount, //流量费
+                                FluxProfitAmt = FluxProfit, //流量分润总金额
+                                PosType = pos.PosSnType.ToString(), //POS类型
+                                Remark = "流量卡分佣", //备注
+                                BrandId = pos.BrandId, //品牌
+                                TopUserId = TopUserId, //顶级创客
+                                MerUserType = user.MerchantType, //商户创客类型
+                            });
+                            string IdBrand = user.Id + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.FluxProfit += FluxProfit;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserMachineData:" + IdBrand);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += FluxProfit;
+                            account.TotalAmount += FluxProfit;
+                            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 = GetUserId, //创客
+                                ChangeType = 60, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = FluxProfit, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserAccount:" + GetUserId);
+                        }
+                        SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                            spdb.SaveChanges();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
+        }
+        public void CheckFluxForTrade(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString(), "扫描金控交易记录中的流量费");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            DateTime start = DateTime.Parse(date + " 00:00:00");
+            DateTime end = start.AddDays(1);
+            var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType }).Where(m => m.CreateDate > start && m.CreateDate < end && m.ProductType == "1").OrderBy(m => m.CreateDate);
+            foreach (var sub in list.ToList())
+            {
+                try
+                {
+                    SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
+                    if (trade != null)
+                    {
+                        string content = trade.SeoDescription;
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            content = System.Web.HttpUtility.UrlDecode(content);
+                            JsonData jsonObj = JsonMapper.ToObject(content);
+                            decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
+                            if (terminalDataFlowFee > 0)
+                            {
+                                spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
+                                {
+                                    SeoDescription = trade.TradeSerialNo,
+                                    FeeAmount = terminalDataFlowFee,
+                                    TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
+                                    CreateDate = trade.CreateDate,
+                                    TradeSnNo = trade.TradeSnNo,
+                                    ProductType = trade.ProductType,
+                                    Status = 1,
+                                });
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描金控交易记录中的流量费异常");
+                }
+            }
+            spdb.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "扫描金控交易记录中的流量费");
+
+            doFluxRecord(date);
+        }
+
+
+
+
+
+
+        // 每天统计头一天的交易额
+        public void StartEverDay(string date)
+        { 
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
+            // DateTime check = DateTime.Parse("2022-03-11");
+            // while (check <= end)
+            // {
+            //     Thread th = new Thread(StatTradeAmountEverDay);
+            //     th.IsBackground = true;
+            //     th.Start(check.ToString("yyyy-MM-dd"));
+            //     check = check.AddDays(1);
+            // }
+            Thread th = new Thread(StatTradeAmountEverDay);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void StatTradeAmountEverDay(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+
+        public void StatTradeAmountEverDay2(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                
+                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                Models.WebCMSEntities maindb = new Models.WebCMSEntities();
+                DateTime StartDate = DateTime.Parse(start);
+                DateTime EndDate = DateTime.Parse(end);
+                int StartTradeId = int.Parse(function.CheckInt(startId));
+                bool op = true;
+                while (op)
+                {
+                    List<TradeRecord> list = db.TradeRecord.Where(m => m.Id > StartTradeId && m.CreateDate >= StartDate && m.CreateDate < EndDate).OrderBy(m => m.Id).Take(500).ToList();
+                    if (list.Count > 0)
+                    {
+                        foreach (TradeRecord sub in list)
+                        {
+                            maindb.TradeRecord.Add(new Models.TradeRecord()
+                            {
+                                CreateDate = sub.CreateDate,
+                                UpdateDate = sub.UpdateDate,
+                                RecordNo = sub.RecordNo, //单号
+                                UserId = sub.UserId, //创客
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = sub.MerNo, //渠道商户编号
+                                MerHelpFlag = sub.MerHelpFlag, //是否属于扶持周期内商户
+                                HelpMonthCount = sub.HelpMonthCount, //扶持第几个月
+                                MerBuddyType = sub.MerBuddyType, //商户创客类型
+                                SnNo = sub.SnNo, //渠道SN号
+                                TradeDate = sub.TradeDate, //交易日期
+                                ClearDate = sub.ClearDate, //清算日期
+                                TradeSerialNo = sub.TradeSerialNo, //交易流水号
+                                TradeAmount = sub.TradeAmount, //交易金额
+                                BankCardType = sub.BankCardType, //银行卡类型
+                                QrPayFlag = sub.QrPayFlag, //云闪付标识
+                                CapFlag = sub.CapFlag, //借记卡封顶交易标志
+                                DirectFlag = sub.DirectFlag, //是否直营
+                                BrandId = sub.BrandId, //品牌
+                                Remark = sub.Remark, //备注
+                                TopUserId = sub.TopUserId, //顶级创客
+                                MerUserId = sub.MerUserId, //商户直属创客
+                            });
+                            StartTradeId = sub.Id;
+                        }
+                        maindb.SaveChanges();
+                    }
+                    else
+                    {
+                        op = false;
+                    }
+                }
+                maindb.Dispose();
+                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+        public void StatTradeAmountEverDaySum()
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
+            // string html = "<table>";
+            // foreach (DataRow dr in dt.Rows)
+            // {
+            //     html += "<tr>";
+            //     string TradeDate = dr["TradeDate"].ToString();
+            //     string TradeMonth = dr["TradeMonth"].ToString();
+            //     int UserId = int.Parse(dr["UserId"].ToString());
+            //     int BrandId = int.Parse(dr["BrandId"].ToString());
+            //     int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+            //     decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
+            //     decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
+            //     decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
+            //     decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
+            //     decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
+
+            //     CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
+            //     CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
+            //     CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
+            //     CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
+            //     decimal TotalPosAmount = 0;
+            //     decimal TotalCloudPayAmount = 0;
+            //     decimal TeamTotalPosAmount = 0;
+            //     decimal TeamTotalCloudPayAmount = 0;
+            //     if (QrPayFlag == 1)
+            //     {
+            //         TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //         TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //     }
+            //     else
+            //     {
+            //         TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //         TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //     }
+            //     Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            //     html += "<td>应得</td>";
+            //     html += "<td>" + user.MakerCode + "</td>";
+            //     html += "<td>" + user.RealName + "</td>";
+            //     html += "<td>" + user.Mobile + "</td>";
+            //     html += "<td>" + BrandId + "</td>";
+            //     html += "<td>" + QrPayFlag + "</td>";
+            //     html += "<td>" + DirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + DirectTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectTradeAmt + "</td>";
+            //     html += "</tr>";
+
+            //     html += "<tr>";
+            //     html += "<td>当前</td>";
+            //     html += "<td></td>";
+            //     html += "<td></td>";
+            //     html += "<td>当天品牌:" + CurAmount + "</td>";
+            //     html += "<td>总交易:" + CurTotalAmount + "</td>";
+            //     html += "<td>当月:" + CurMonthAmount + "</td>";
+            //     html += "<td>当天:" + CurDayAmount + "</td>";
+            //     html += "<td>" + TotalPosAmount + "</td>";
+            //     html += "<td>" + TotalCloudPayAmount + "</td>";
+            //     html += "<td>" + TeamTotalPosAmount + "</td>";
+            //     html += "<td>" + TeamTotalCloudPayAmount + "</td>";
+            //     html += "</tr>";
+            // }
+            // html += "</table>";
+            // db.Dispose();
+            // // OtherMySqlConn.connstr = ;
+            // function.WritePage("/html/", "1.html", html);
+        }
+
+
+        //统计商户交易额
+        private void StatMerchantTrade(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
+            // WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate)  select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "").Substring(0, 6)); //商户当月交易
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "")); //商户当日交易
+                // foreach (DataRow selfDr in selfdt.Rows)
+                // {
+                //     int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                //     int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
+                //     string TradeDate = selfDr["TradeDate"].ToString();
+                //     TradeDate = TradeDate.Replace("-", "");
+                //     string TradeMonth = TradeDate.Substring(0, 6);
+                //     decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
+                //     PosMerchantTradeSummay merStat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
+                //     if (merStat == null)
+                //     {
+                //         merStat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
+                //         {
+                //             MerchantId = MerchantId,
+                //             TradeMonth = TradeMonth,
+                //             TradeDate = TradeDate,
+                //             BrandId = BrandId,
+                //         }).Entity;
+                //         db.SaveChanges();
+                //     }
+                //     merStat.TradeAmount += TradeAmount;
+                //     db.SaveChanges();                    
+                // }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
+            }
+            // db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
+        }
+
+
+        // 5. 创客升级
+        public void StatUserLevel()
+        { 
+            Thread th = new Thread(StatUserLevelDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatUserLevelDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+                DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+                DateTime end = start.AddDays(1);
+                string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                List<UserLevelSet> sets = db.UserLevelSet.ToList();
+                var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.AuthFlag == 1).ToList();
+                function.WriteLog(users.Count.ToString(), "创客升级日志");
+                foreach (var subuser in users)
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
+                    if (user != null)
+                    {
+                        int BeforeLevel = user.UserLevel;
+                        int AfterLevel = 0;
+                        decimal TradeAmount = 0;
+                        bool check = db.UserTradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
+                        if (check)
+                        {
+                            TradeAmount = db.UserTradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.NonDirectTradeAmt);
+                        }
+                        UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
+                        if (set != null)
+                        {
+                            AfterLevel = set.Id;
+                        }
+                        if (AfterLevel > BeforeLevel && AfterLevel > 1)
+                        {
+                            user.UserLevel = AfterLevel;
+                            db.UserRank.Add(new UserRank()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = user.Id, //创客
+                                WhiteRank = BeforeLevel,
+                                Rank = AfterLevel, //当前等级
+                                StatYear = DateTime.Now.Year, //统计年份
+                                StatMonth = DateTime.Now.Month, //统计月份
+                                TradeAmt = TradeAmount, //团队交易总额
+                                UpgradeFlag = 1, //升级标识
+                                OperateDate = DateTime.Now, //操作时间
+                            });
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserLevelData:" + user.Id, BeforeLevel + "#" + AfterLevel);
+                        }
+                    }
+                }
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+            }
+            catch (Exception ex)
+            { 
+                function.WriteLog(ex.ToString(), "创客升级异常");
+            }
+            db.Dispose();
+
+            
+            ProfitHelper.Instance.StatProfit("202204");
+        }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        { 
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        { 
+            DateTime end = DateTime.Parse("2022-05-24 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        { 
+            Thread th = new Thread(StartNewUserNumDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumDo()
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                DataTable dt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d'),count(Id) from Users where QueryCount=0 and ParentUserId>0 and AuthFlag=1 GROUP BY ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d')");
+                if (dt.Rows.Count > 0)
+                {
+                    OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and ParentUserId>0 and AuthFlag=1");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        int UserId = int.Parse(dr["ParentUserId"].ToString());
+                        string StatDate = dr[1].ToString();
+                        string StatMonth = StatDate.Substring(0, 6);
+                        int NewCount = int.Parse(dr[2].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += NewCount;
+                        db.SaveChanges();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        string ParentNav = user.ParentNav;
+                        ParentNav += "," + UserId + ",";
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                            foreach (string NavUserIdString in ParentNavList)
+                            {
+                                int NavUserId = int.Parse(NavUserIdString);
+                                PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                if (teamStat == null)
+                                {
+                                    teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                    {
+                                        UserId = NavUserId,
+                                        StatMonth = StatMonth,
+                                        StatDate = StatDate,
+                                        SeoTitle = "team",
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                teamStat.RecUserAuthNum += NewCount;
+                                db.SaveChanges();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
+    }
+}

+ 1891 - 0
.history/AppStart/Helper/StatService_20220525164445.cs

@@ -0,0 +1,1891 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class StatService
+    {
+        public readonly static StatService Instance = new StatService();
+        private StatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
+                if (string.IsNullOrEmpty(flag))
+                {
+                    function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                    dosomething1(doDate);
+                    dosomething11(doDate);
+                    // dosomething2(doDate);
+                    StartEverDay(doDate);
+                    dosomething4(doDate);
+                    ListenFluxRecord(doDate);
+                }
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+        public void ActiveReward(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething3();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+                function.WritePage("/static/", "act.txt", DateTime.Now.ToString());
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err");
+                }
+                else
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service");
+                }
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public void clear()
+        {
+            RedisDbconn.Instance.Clear("TotalAmount*");
+            RedisDbconn.Instance.Clear("TotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TotalPosAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount*");
+            RedisDbconn.Instance.Clear("TeamTotalPosAmount*");
+
+            // RedisDbconn.Instance.Clear("TotalUser*");
+            // RedisDbconn.Instance.Clear("TeamTotalUser*");
+            // RedisDbconn.Instance.Clear("AddUser*");
+            // RedisDbconn.Instance.Clear("TeamAddUser*");
+
+            // RedisDbconn.Instance.Clear("TotalPosMerchant*");
+            // RedisDbconn.Instance.Clear("TeamTotalPosMerchant*");
+
+            RedisDbconn.Instance.Clear("MerTotalAmount*");
+        }
+
+
+        // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
+        public void dosomething1(string date)
+        {
+            // TODO: 每天扫描非商户型创客的持有机具数量
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
+            foreach (SpModels.BindRecord bind in binds)
+            {
+                string Mobile = bind.MerNewSnNo;
+                string MerNo = bind.MerNo;
+                string BeforeNum = "";
+                string AfterNum = "";
+                if (Mobile.Contains("****") && Mobile.Length == 11)
+                {
+                    BeforeNum = Mobile.Substring(0, 3);
+                    AfterNum = Mobile.Substring(7);
+                }
+                string Name = bind.MerName;
+                if (bind.ProductType == "2")
+                {
+                    if (Name.Contains("-"))
+                    {
+                        Name = Name.Split('-')[1];
+                    }
+                    else if (Name.Contains("_"))
+                    {
+                        Name = Name.Split('_')[1];
+                    }
+                }
+                else if (bind.ProductType == "4")
+                {
+                    Name = bind.SeoTitle;
+                }
+                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
+                if (user != null)
+                {
+                    bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
+                    if (!checkPos)
+                    {
+                        PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
+                        if (pos != null)
+                        {
+                            pos.UserId = user.Id;
+                            user.MerchantType = 1;
+                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
+                            merchant.UserId = user.Id;
+                            merchant.MerUserType = 1;
+                            pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
+                            RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("Users:" + user.Id, user);
+                            RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                        }
+                    }
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+        }
+
+        // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
+        public void dosomething11(string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
+            foreach (var user in users)
+            {
+                int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
+                int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
+                if (machineCount + couponCount >= 3)
+                {
+                    Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
+                    if (edit != null)
+                    {
+                        edit.MerchantType = 0;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.Set("Users:" + user.Id, edit);
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        
+        public void testStatTrade(string date)
+        {
+            string yesterday = date + " 00:00:00";
+            string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+            string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
+            string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
+            DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
+                int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
+                int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
+                int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
+                int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
+                decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
+                string content = "{";
+                content += "\"DateString\":\"" + date + "\",";
+                content += "\"UserId\":\"" + UserId + "\",";
+                content += "\"BrandId\":\"" + BrandId + "\",";
+                content += "\"MerchantId\":\"" + MerchantId + "\",";
+                content += "\"BankCardType\":\"" + BankCardType + "\",";
+                content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
+                content += "\"TradeAmount\":\"" + TradeAmount + "\"";
+                content += "}";
+                RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
+            }
+        }
+
+        // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething3(int posid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddDays(-1);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (posid > 0)
+            { 
+                posList = posList.Where(m => m.Id == posid);
+            }
+            else
+            {
+                posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
+            }
+            foreach (PosMachinesTwo pos in posList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if (merchant != null)
+                {
+                    // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                    // if (otherInfo != null)
+                    // {
+                    //     otherInfo.PrizeFlag1 = 1;
+                    //     db.SaveChanges();
+                    string ParentNav = "";
+                    Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                    if (user != null)
+                    {
+                        int GetUserId = user.Id;
+                        ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                        if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                        {
+                            ActPrize = ActPrize / 100;
+                        }
+                        if (ActPrize > 0)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            else if (ActPrize == 249)
+                            {
+                                ActPrize = 260;
+                            }
+                            if (GetUserId > 0)
+                            {
+                                doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
+                            }
+                        }
+                    }
+                    // }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0)
+        {
+            bool check = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo && m.RewardAmount == ActPrize);
+            if (!check)
+            {
+                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                db.ActiveReward.Add(new ActiveReward()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    MerchantId = pos.BindMerchantId, //商户
+                    StandardDate = pos.ActivationTime, //达标日期
+                    RewardAmount = ActPrize, //奖励金额
+                    BrandId = pos.BrandId, //品牌
+                    UserNav = ParentNav, //创客父级
+                    DirectBuddyNo = merchant.UserId, //商户直属创客
+                    KqMerNo = merchant.KqMerNo, //渠道商户编号
+                    KqSnNo = pos.PosSn, //渠道SN号
+                    SnType = pos.PosSnType, //机具类型
+                    SnApplyUserId = pos.BuyUserId, //机具申请创客
+                    ActType = 0, //激活类型
+                    SnStoreId = pos.StoreId, //SN仓库
+                    RewardTips = "激活奖励", //奖励描述
+                    Remark = "激活奖励", //备注
+                    ActDate = pos.ActivationTime, //激活时间
+                    TopUserId = TopUserId, //顶级创客
+                    SeoTitle = machineUser.RealName,
+                });
+                db.SaveChanges();
+                string IdBrand = GetUserId + "_" + pos.BrandId;
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.ActProfit += ActPrize;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = db.UserAccount.Add(new UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += ActPrize;
+                account.TotalAmount += ActPrize;
+                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 = GetUserId, //创客
+                    ChangeType = ChangeType, //变动类型
+                    ProductType = pos.BrandId, //产品类型
+                    ChangeAmount = ActPrize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                db.SaveChanges();
+                RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                // 激活奖励列表
+                List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                if (!dates.Contains(dateString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                if (!months.Contains(monthString))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                // 激活奖励详情
+                List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                if (!actPrizeList.Contains(pos.BindMerchantId))
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                }
+                RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                //收支明细
+                RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                RedisDbconn.Instance.Clear("UserAccount:Income:" + GetUserId + ":" + monthString);
+            }
+        }
+
+
+        //根据商户信息发放激活奖励
+        public void dosomething32(int merid = 0)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Now.AddHours(-3);
+            DateTime today = DateTime.Now;
+            IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
+            if (merid > 0)
+            { 
+                merList = merList.Where(m => m.Id == merid);
+            }
+            else
+            {
+                merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
+            }
+            foreach (PosMerchantInfo merchant in merList.ToList())
+            {
+                // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
+                // if (otherInfo != null)
+                // {
+                //     otherInfo.PrizeFlag1 = 1;
+                //     db.SaveChanges();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                string ParentNav = "";
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                if (user != null)
+                {
+                    int GetUserId = user.Id;
+                    ParentNav = user.ParentNav;
+                    int TopUserId = 0;
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                    }
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                    {
+                        ActPrize = ActPrize / 100;
+                    }
+                    if (ActPrize > 0)
+                    {
+                        bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
+                        if (!check)
+                        {
+                            if (ActPrize == 99)
+                            {
+                                ActPrize = 100;
+                            }
+                            else if (ActPrize == 199)
+                            {
+                                ActPrize = 200;
+                            }
+                            else if (ActPrize == 299)
+                            {
+                                ActPrize = 300;
+                            }
+                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            db.ActiveReward.Add(new ActiveReward()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                StandardDate = pos.ActivationTime, //达标日期
+                                RewardAmount = ActPrize, //奖励金额
+                                BrandId = pos.BrandId, //品牌
+                                UserNav = ParentNav, //创客父级
+                                DirectBuddyNo = merchant.UserId, //商户直属创客
+                                KqMerNo = merchant.KqMerNo, //渠道商户编号
+                                KqSnNo = pos.PosSn, //渠道SN号
+                                SnType = pos.PosSnType, //机具类型
+                                SnApplyUserId = pos.BuyUserId, //机具申请创客
+                                ActType = 0, //激活类型
+                                SnStoreId = pos.StoreId, //SN仓库
+                                RewardTips = "激活奖励", //奖励描述
+                                Remark = "激活奖励", //备注
+                                ActDate = pos.ActivationTime, //激活时间
+                                TopUserId = TopUserId, //顶级创客
+                                SeoTitle = machineUser.RealName,
+                            });
+                            db.SaveChanges();
+                            string IdBrand = GetUserId + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.ActProfit += ActPrize;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += ActPrize;
+                            account.TotalAmount += ActPrize;
+                            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 = GetUserId, //创客
+                                ChangeType = 0, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = ActPrize, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserAccount:" + GetUserId, account);
+
+                            string dateString = pos.ActivationTime.Value.ToString("yyyyMMdd");
+                            string monthString = pos.ActivationTime.Value.ToString("yyyyMM");
+                            // 激活奖励列表
+                            List<string> dates = RedisDbconn.Instance.GetList<string>("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId);
+                            if (!dates.Contains(dateString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDay:" + GetUserId + ":" + pos.BrandId, dateString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            List<string> months = RedisDbconn.Instance.GetList<string>("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId);
+                            if (!months.Contains(monthString))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardMonth:" + GetUserId + ":" + pos.BrandId, monthString);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:" + GetUserId + ":" + pos.BrandId + ":" + monthString, ActPrize);
+
+                            // 激活奖励详情
+                            List<int> actPrizeList = RedisDbconn.Instance.GetList<int>("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString);
+                            if (!actPrizeList.Contains(pos.BindMerchantId))
+                            {
+                                RedisDbconn.Instance.AddList("ActiveRewardDetail:" + GetUserId + ":" + pos.BrandId + ":" + dateString, pos.BindMerchantId);
+                            }
+                            RedisDbconn.Instance.AddNumber("ActiveRewardAmt:mer:" + pos.BindMerchantId + ":" + pos.BrandId + ":" + dateString, ActPrize);
+
+                            //收支明细
+                            RedisDbconn.Instance.AddList("UserAccountRecord:" + GetUserId + ":1:" + monthString, userAccountRecord);
+                            RedisDbconn.Instance.AddNumber("UserAccount:" + GetUserId + ":1:" + monthString, ActPrize);
+                        }
+                    }
+                }
+                // }
+            }
+            db.Dispose();
+        }
+
+        
+
+        //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
+        public void dosomething4(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
+            foreach (PosMachinesTwo pos in posList)
+            {
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20))
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                        if (merchant != null)
+                        {
+                            // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                            // if (otherInfo != null)
+                            // {
+                            //     otherInfo.PrizeFlag2 = 1;
+                            //     db.SaveChanges();
+                                // 从机具所属人上级开始分开机奖励
+                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                                if (user != null)
+                                {
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        decimal Prize = 20;
+                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        {
+                                            int UserId = int.Parse(ParentNavs[i]);
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                            if (puser != null && Prize > 0)
+                                            {
+                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                {
+                                                    int pTopUserId = 0;
+                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
+                                                    {
+                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                    }
+                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = yesterday, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                        MerchantId = pos.BindMerchantId, //商户
+                                                        DirectUserId = merchant.UserId, //商户直属人
+                                                        SnNo = pos.PosSn, //SN号
+                                                        MerNo = merchant.KqMerNo, //渠道商户号
+                                                        SnType = pos.PosSnType, //机具类型
+                                                        StandardDate = pos.ActivationTime, //商户的激活日期
+                                                        SnStoreId = pos.StoreId, //SN仓库
+                                                        MerBuddyType = puser.MerchantType, //商户创客类型
+                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                        RewardTips = "开机奖励", //奖励描述
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                        SeoTitle = machineUser.RealName,
+                                                    }).Entity;
+                                                    db.OpenReward.Add(new OpenReward()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                        TradeDate = DateTime.Now, //达标日期
+                                                        UserId = puser.Id, //创客
+                                                        BrandId = pos.BrandId, //品牌
+                                                        RewardType = 2, //奖励类型
+                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                        RewardDesc = "开机奖励", //奖励描述
+                                                        TopUserId = pTopUserId, //顶级创客
+                                                    });
+                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                    if (userData == null)
+                                                    {
+                                                        userData = db.UserMachineData.Add(new UserMachineData()
+                                                        {
+                                                            IdBrand = IdBrand,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    userData.OpenProfit += Prize;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                    //账户入库
+                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                    if (account == null)
+                                                    {
+                                                        account = db.UserAccount.Add(new UserAccount()
+                                                        {
+                                                            Id = puser.Id,
+                                                            UserId = puser.Id,
+                                                        }).Entity;
+                                                        db.SaveChanges();
+                                                    }
+                                                    //收支明细入库
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    account.BalanceAmount += Prize;
+                                                    account.TotalAmount += Prize;
+                                                    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 = puser.Id, //创客
+                                                        ChangeType = 50, //变动类型
+                                                        ProductType = pos.BrandId, //产品类型
+                                                        ChangeAmount = Prize, //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                                    string dateString = yesterday.ToString("yyyyMMdd");
+                                                    string monthString = yesterday.ToString("yyyyMM");
+                                                    // 开机奖励列表
+                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!dates.Contains(dateString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                    if (!months.Contains(monthString))
+                                                    {
+                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                    }
+                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                                    // 开机奖励详情
+                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                                    //收支明细
+                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                                    Prize -= 10;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            // }
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void dosomething42(string date)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
+            foreach (PosMerchantInfo merchant in merList)
+            {
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
+                if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
+                {
+                    decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
+                    if (ActPrize > 0)
+                    {
+                        // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
+                        // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
+                        // if (otherInfo != null)
+                        // {
+                        //     otherInfo.PrizeFlag2 = 1;
+                        //     db.SaveChanges();
+                        // 从机具所属人上级开始分开机奖励
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                        if (user != null)
+                        {
+                            if (!string.IsNullOrEmpty(user.ParentNav))
+                            {
+                                decimal Prize = 20;
+                                string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                {
+                                    int UserId = int.Parse(ParentNavs[i]);
+                                    Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                    if (puser != null && Prize > 0)
+                                    {
+                                        int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                        int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                        int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                        // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                        // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                        if (machineCount + ActiveCount + couponCount >= 3)
+                                        {
+                                            int pTopUserId = 0;
+                                            if (!string.IsNullOrEmpty(puser.ParentNav))
+                                            {
+                                                pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                            }
+                                            Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                            OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = yesterday, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                MerchantId = pos.BindMerchantId, //商户
+                                                DirectUserId = merchant.UserId, //商户直属人
+                                                SnNo = pos.PosSn, //SN号
+                                                MerNo = merchant.KqMerNo, //渠道商户号
+                                                SnType = pos.PosSnType, //机具类型
+                                                StandardDate = pos.ActivationTime, //商户的激活日期
+                                                SnStoreId = pos.StoreId, //SN仓库
+                                                MerBuddyType = puser.MerchantType, //商户创客类型
+                                                RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                RewardTips = "开机奖励", //奖励描述
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                                SeoTitle = machineUser.RealName,
+                                            }).Entity;
+                                            db.OpenReward.Add(new OpenReward()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                UpdateDate = DateTime.Now,
+                                                TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                TradeDate = DateTime.Now, //达标日期
+                                                UserId = puser.Id, //创客
+                                                BrandId = pos.BrandId, //品牌
+                                                RewardType = 2, //奖励类型
+                                                CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                RewardDesc = "开机奖励", //奖励描述
+                                                TopUserId = pTopUserId, //顶级创客
+                                            });
+                                            string IdBrand = puser.Id + "_" + pos.BrandId;
+                                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                            if (userData == null)
+                                            {
+                                                userData = db.UserMachineData.Add(new UserMachineData()
+                                                {
+                                                    IdBrand = IdBrand,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            userData.OpenProfit += Prize;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                            //账户入库
+                                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                            if (account == null)
+                                            {
+                                                account = db.UserAccount.Add(new UserAccount()
+                                                {
+                                                    Id = puser.Id,
+                                                    UserId = puser.Id,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                            }
+                                            //收支明细入库
+                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                            account.BalanceAmount += Prize;
+                                            account.TotalAmount += Prize;
+                                            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 = puser.Id, //创客
+                                                ChangeType = 50, //变动类型
+                                                ProductType = pos.BrandId, //产品类型
+                                                ChangeAmount = Prize, //变更金额
+                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                            }).Entity;
+                                            db.SaveChanges();
+                                            RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+
+                                            string dateString = yesterday.ToString("yyyyMMdd");
+                                            string monthString = yesterday.ToString("yyyyMM");
+                                            // 开机奖励列表
+                                            List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                            if (!dates.Contains(dateString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+
+                                            List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                            if (!months.Contains(monthString))
+                                            {
+                                                RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                            }
+                                            RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+
+                                            // 开机奖励详情
+                                            RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+
+                                            //收支明细
+                                            RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                            RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+
+                                            Prize -= 10;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+
+        // 4. 前一天的流量卡记录和匹配
+        public void ListenFluxRecord(string date)
+        { 
+            Thread th = new Thread(CheckFluxForTrade);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void doFluxRecord(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime yesterday = DateTime.Parse(date + " 00:00:00");
+            DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
+            List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= yesterday && m.CreateDate < today && m.Status == 1).ToList();
+            foreach (SpModels.TradeFluxRecord trade in trades)
+            {
+                try
+                {
+                    string OrderNo = trade.TradeSerialNo; //单号
+                    DateTime TradeDate = trade.CreateDate.Value;
+                    string TradeMonth = TradeDate.ToString("yyyyMM");
+                    decimal FeeAmount = trade.FeeAmount; //流量费
+                    if (trade.ProductType == "1" || trade.ProductType == "4")
+                    {
+                        FeeAmount = FeeAmount / 100;
+                    }
+                    string TradeSnNo = trade.TradeSnNo; //机具SN
+                    decimal FluxProfit = 0;
+                    if (trade.ProductType == "1" && FeeAmount == 60)
+                    {
+                        FluxProfit = 24;
+                    }
+                    else if (trade.ProductType != "1" && FeeAmount == 48)
+                    {
+                        FluxProfit = 12;
+                    }
+                    if (FluxProfit > 0)
+                    {
+                        MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
+                        PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                        bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
+                        if (!checkExist)
+                        {
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                            int GetUserId = user.Id;
+                            int TopUserId = 0;
+                            string ParentNav = user.ParentNav;
+                            if (!string.IsNullOrEmpty(ParentNav))
+                            {
+                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                if (ParentNavList.Length > 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[1]);
+                                }
+                                else if (ParentNavList.Length == 1)
+                                {
+                                    TopUserId = int.Parse(ParentNavList[0]);
+                                }
+                            }
+                            FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
+                            if (fluxProfit == null)
+                            {
+                                fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UpdateDate = DateTime.Now,
+                                    UserId = GetUserId, //创客
+                                    BrandId = pos.BrandId,
+                                    TopUserId = TopUserId, //顶级创客
+                                    TradeMonth = TradeMonth, //交易月
+                                    MerUserType = user.MerchantType, //商户创客类型
+                                    Remark = "流量卡分佣", //备注
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
+                            db.FluxProfitDetail.Add(new FluxProfitDetail()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                RecordNo = OrderNo, //单号
+                                TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
+                                TradeTime = TradeDate.ToString("HHmmss"), //交易时间
+                                TradeMonth = TradeMonth, //交易月
+                                UserId = GetUserId, //创客
+                                MerchantId = pos.BindMerchantId, //商户
+                                MerchantUserId = pos.UserId, //商户直属人
+                                MerNo = merchant.KqMerNo, //渠道商户编号
+                                SnNo = pos.PosSn, //渠道SN号
+                                FluxOrderNo = OrderNo, //流量扣费单号
+                                TradeOrderNo = OrderNo, //交易流水号
+                                TradeAmt = trade.TradeAmount, //商户交易额
+                                FluxFeeAmt = FeeAmount, //流量费
+                                FluxProfitAmt = FluxProfit, //流量分润总金额
+                                PosType = pos.PosSnType.ToString(), //POS类型
+                                Remark = "流量卡分佣", //备注
+                                BrandId = pos.BrandId, //品牌
+                                TopUserId = TopUserId, //顶级创客
+                                MerUserType = user.MerchantType, //商户创客类型
+                            });
+                            string IdBrand = user.Id + "_" + pos.BrandId;
+                            UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (userData == null)
+                            {
+                                userData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            userData.FluxProfit += FluxProfit;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserMachineData:" + IdBrand);
+                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                            if (account == null)
+                            {
+                                account = db.UserAccount.Add(new UserAccount()
+                                {
+                                    Id = GetUserId,
+                                    UserId = GetUserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                            account.BalanceAmount += FluxProfit;
+                            account.TotalAmount += FluxProfit;
+                            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 = GetUserId, //创客
+                                ChangeType = 60, //变动类型
+                                ProductType = pos.BrandId, //产品类型
+                                ChangeAmount = FluxProfit, //变更金额
+                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                            }).Entity;
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Clear("UserAccount:" + GetUserId);
+                        }
+                        SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                            spdb.SaveChanges();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
+                }
+            }
+            spdb.Dispose();
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
+        }
+        public void CheckFluxForTrade(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString(), "扫描金控交易记录中的流量费");
+            SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+            DateTime start = DateTime.Parse(date + " 00:00:00");
+            DateTime end = start.AddDays(1);
+            var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType }).Where(m => m.CreateDate > start && m.CreateDate < end && m.ProductType == "1").OrderBy(m => m.CreateDate);
+            foreach (var sub in list.ToList())
+            {
+                try
+                {
+                    SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
+                    if (trade != null)
+                    {
+                        string content = trade.SeoDescription;
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            content = System.Web.HttpUtility.UrlDecode(content);
+                            JsonData jsonObj = JsonMapper.ToObject(content);
+                            decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
+                            if (terminalDataFlowFee > 0)
+                            {
+                                spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
+                                {
+                                    SeoDescription = trade.TradeSerialNo,
+                                    FeeAmount = terminalDataFlowFee,
+                                    TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
+                                    CreateDate = trade.CreateDate,
+                                    TradeSnNo = trade.TradeSnNo,
+                                    ProductType = trade.ProductType,
+                                    Status = 1,
+                                });
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描金控交易记录中的流量费异常");
+                }
+            }
+            spdb.Dispose();
+            function.WriteLog(DateTime.Now.ToString() + "\n", "扫描金控交易记录中的流量费");
+
+            doFluxRecord(date);
+        }
+
+
+
+
+
+
+        // 每天统计头一天的交易额
+        public void StartEverDay(string date)
+        { 
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
+            // DateTime check = DateTime.Parse("2022-03-11");
+            // while (check <= end)
+            // {
+            //     Thread th = new Thread(StatTradeAmountEverDay);
+            //     th.IsBackground = true;
+            //     th.Start(check.ToString("yyyy-MM-dd"));
+            //     check = check.AddDays(1);
+            // }
+            Thread th = new Thread(StatTradeAmountEverDay);
+            th.IsBackground = true;
+            th.Start(date);
+        }
+        public void StatTradeAmountEverDay(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+
+        public void StatTradeAmountEverDay2(object sender)
+        {
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                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", endId = "9999999999";
+                List<string> uids = new List<string>();
+                DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
+                if (startDt.Rows.Count > 0)
+                {
+                    startId = startDt.Rows[0][0].ToString();
+                }
+                function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
+                // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
+                // if (endDt.Rows.Count > 0)
+                // {
+                //     endId = endDt.Rows[0][0].ToString();
+                // }
+                
+                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                Models.WebCMSEntities maindb = new Models.WebCMSEntities();
+                DateTime StartDate = DateTime.Parse(start);
+                DateTime EndDate = DateTime.Parse(end);
+                int StartTradeId = int.Parse(function.CheckInt(startId));
+                bool op = true;
+                while (op)
+                {
+                    List<TradeRecord> list = db.TradeRecord.Where(m => m.Id > StartTradeId && m.CreateDate >= StartDate && m.CreateDate < EndDate).OrderBy(m => m.Id).Take(500).ToList();
+                    if (list.Count > 0)
+                    {
+                        foreach (TradeRecord sub in list)
+                        {
+                            maindb.TradeRecord.Add(new Models.TradeRecord()
+                            {
+                                CreateDate = sub.CreateDate,
+                                UpdateDate = sub.UpdateDate,
+                                RecordNo = sub.RecordNo, //单号
+                                UserId = sub.UserId, //创客
+                                MerchantId = sub.MerchantId, //商户
+                                MerNo = sub.MerNo, //渠道商户编号
+                                MerHelpFlag = sub.MerHelpFlag, //是否属于扶持周期内商户
+                                HelpMonthCount = sub.HelpMonthCount, //扶持第几个月
+                                MerBuddyType = sub.MerBuddyType, //商户创客类型
+                                SnNo = sub.SnNo, //渠道SN号
+                                TradeDate = sub.TradeDate, //交易日期
+                                ClearDate = sub.ClearDate, //清算日期
+                                TradeSerialNo = sub.TradeSerialNo, //交易流水号
+                                TradeAmount = sub.TradeAmount, //交易金额
+                                BankCardType = sub.BankCardType, //银行卡类型
+                                QrPayFlag = sub.QrPayFlag, //云闪付标识
+                                CapFlag = sub.CapFlag, //借记卡封顶交易标志
+                                DirectFlag = sub.DirectFlag, //是否直营
+                                BrandId = sub.BrandId, //品牌
+                                Remark = sub.Remark, //备注
+                                TopUserId = sub.TopUserId, //顶级创客
+                                MerUserId = sub.MerUserId, //商户直属创客
+                            });
+                            StartTradeId = sub.Id;
+                        }
+                        maindb.SaveChanges();
+                    }
+                    else
+                    {
+                        op = false;
+                    }
+                }
+                maindb.Dispose();
+                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
+                function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行昨天交易额日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
+                        int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
+                        decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        if (BankCardType == 0)
+                        {
+                            selfStat.DirectDebitTradeAmt += TradeAmount;
+                        }
+                        else if (BankCardType != 0)
+                        {
+                            selfStat.DirectTradeAmt += TradeAmount;
+                        }
+                        db.SaveChanges();
+                    }
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate);
+                    // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate);
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行昨天交易额日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " 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");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
+                                    int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
+                                    decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    if (BankCardType == 0)
+                                    {
+                                        teamStat.NonDirectDebitTradeAmt += TradeAmount;
+                                    }
+                                    else if (BankCardType != 0)
+                                    {
+                                        teamStat.NonDirectTradeAmt += TradeAmount;
+                                    }
+                                    db.SaveChanges();
+                                }
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate);
+                                // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
+
+            StatMerchantTrade(date);
+        }
+
+        public void StatTradeAmountEverDaySum()
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
+            // string html = "<table>";
+            // foreach (DataRow dr in dt.Rows)
+            // {
+            //     html += "<tr>";
+            //     string TradeDate = dr["TradeDate"].ToString();
+            //     string TradeMonth = dr["TradeMonth"].ToString();
+            //     int UserId = int.Parse(dr["UserId"].ToString());
+            //     int BrandId = int.Parse(dr["BrandId"].ToString());
+            //     int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
+            //     decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
+            //     decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
+            //     decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
+            //     decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
+            //     decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
+
+            //     CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
+            //     CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
+            //     CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
+            //     CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
+            //     decimal TotalPosAmount = 0;
+            //     decimal TotalCloudPayAmount = 0;
+            //     decimal TeamTotalPosAmount = 0;
+            //     decimal TeamTotalCloudPayAmount = 0;
+            //     if (QrPayFlag == 1)
+            //     {
+            //         TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //         TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //     }
+            //     else
+            //     {
+            //         TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
+            //         TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
+            //     }
+            //     Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            //     html += "<td>应得</td>";
+            //     html += "<td>" + user.MakerCode + "</td>";
+            //     html += "<td>" + user.RealName + "</td>";
+            //     html += "<td>" + user.Mobile + "</td>";
+            //     html += "<td>" + BrandId + "</td>";
+            //     html += "<td>" + QrPayFlag + "</td>";
+            //     html += "<td>" + DirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + DirectTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectDebitTradeAmt + "</td>";
+            //     html += "<td>" + NonDirectTradeAmt + "</td>";
+            //     html += "</tr>";
+
+            //     html += "<tr>";
+            //     html += "<td>当前</td>";
+            //     html += "<td></td>";
+            //     html += "<td></td>";
+            //     html += "<td>当天品牌:" + CurAmount + "</td>";
+            //     html += "<td>总交易:" + CurTotalAmount + "</td>";
+            //     html += "<td>当月:" + CurMonthAmount + "</td>";
+            //     html += "<td>当天:" + CurDayAmount + "</td>";
+            //     html += "<td>" + TotalPosAmount + "</td>";
+            //     html += "<td>" + TotalCloudPayAmount + "</td>";
+            //     html += "<td>" + TeamTotalPosAmount + "</td>";
+            //     html += "<td>" + TeamTotalCloudPayAmount + "</td>";
+            //     html += "</tr>";
+            // }
+            // html += "</table>";
+            // db.Dispose();
+            // // OtherMySqlConn.connstr = ;
+            // function.WritePage("/html/", "1.html", html);
+        }
+
+
+        //统计商户交易额
+        private void StatMerchantTrade(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
+            // WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate)  select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*");
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "").Substring(0, 6)); //商户当月交易
+                RedisDbconn.Instance.Clear("PosMerchantAmount:*:" + date.Replace("-", "")); //商户当日交易
+                // foreach (DataRow selfDr in selfdt.Rows)
+                // {
+                //     int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                //     int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
+                //     string TradeDate = selfDr["TradeDate"].ToString();
+                //     TradeDate = TradeDate.Replace("-", "");
+                //     string TradeMonth = TradeDate.Substring(0, 6);
+                //     decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
+                //     PosMerchantTradeSummay merStat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
+                //     if (merStat == null)
+                //     {
+                //         merStat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
+                //         {
+                //             MerchantId = MerchantId,
+                //             TradeMonth = TradeMonth,
+                //             TradeDate = TradeDate,
+                //             BrandId = BrandId,
+                //         }).Entity;
+                //         db.SaveChanges();
+                //     }
+                //     merStat.TradeAmount += TradeAmount;
+                //     db.SaveChanges();                    
+                // }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
+            }
+            // db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
+        }
+
+
+        // 5. 创客升级
+        public void StatUserLevel()
+        { 
+            Thread th = new Thread(StatUserLevelDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StatUserLevelDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+                DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+                DateTime end = start.AddDays(1);
+                string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+                List<UserLevelSet> sets = db.UserLevelSet.ToList();
+                var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.AuthFlag == 1).ToList();
+                function.WriteLog(users.Count.ToString(), "创客升级日志");
+                foreach (var subuser in users)
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
+                    if (user != null)
+                    {
+                        int BeforeLevel = user.UserLevel;
+                        int AfterLevel = 0;
+                        decimal TradeAmount = 0;
+                        bool check = db.UserTradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
+                        if (check)
+                        {
+                            TradeAmount = db.UserTradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.NonDirectTradeAmt);
+                        }
+                        UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
+                        if (set != null)
+                        {
+                            AfterLevel = set.Id;
+                        }
+                        if (AfterLevel > BeforeLevel && AfterLevel > 1)
+                        {
+                            user.UserLevel = AfterLevel;
+                            db.UserRank.Add(new UserRank()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                UserId = user.Id, //创客
+                                WhiteRank = BeforeLevel,
+                                Rank = AfterLevel, //当前等级
+                                StatYear = DateTime.Now.Year, //统计年份
+                                StatMonth = DateTime.Now.Month, //统计月份
+                                TradeAmt = TradeAmount, //团队交易总额
+                                UpgradeFlag = 1, //升级标识
+                                OperateDate = DateTime.Now, //操作时间
+                            });
+                            db.SaveChanges();
+                            RedisDbconn.Instance.Set("UserLevelData:" + user.Id, BeforeLevel + "#" + AfterLevel);
+                        }
+                    }
+                }
+                function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
+            }
+            catch (Exception ex)
+            { 
+                function.WriteLog(ex.ToString(), "创客升级异常");
+            }
+            db.Dispose();
+
+            
+            ProfitHelper.Instance.StatProfit("202204");
+        }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        { 
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        { 
+            DateTime end = DateTime.Parse("2022-05-24 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        { 
+            Thread th = new Thread(StartNewUserNumDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumDo()
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+                DataTable dt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d'),count(Id) from Users where QueryCount=0 and ParentUserId>0 and AuthFlag=1 GROUP BY ParentUserId,DATE_FORMAT(AuthDate,'%Y%m%d')");
+                if (dt.Rows.Count > 0)
+                {
+                    OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and ParentUserId>0 and AuthFlag=1");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        int UserId = int.Parse(dr["ParentUserId"].ToString());
+                        string StatDate = dr[1].ToString();
+                        string StatMonth = StatDate.Substring(0, 6);
+                        int NewCount = int.Parse(dr[2].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += NewCount;
+                        db.SaveChanges();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                        string ParentNav = user.ParentNav;
+                        ParentNav += "," + UserId + ",";
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                            foreach (string NavUserIdString in ParentNavList)
+                            {
+                                int NavUserId = int.Parse(NavUserIdString);
+                                PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                if (teamStat == null)
+                                {
+                                    teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                    {
+                                        UserId = NavUserId,
+                                        StatMonth = StatMonth,
+                                        StatDate = StatDate,
+                                        SeoTitle = "team",
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                teamStat.RecUserAuthNum += NewCount;
+                                db.SaveChanges();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
+    }
+}

+ 108 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220502130035.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpActiveService
+    {
+        public readonly static SycnSpActiveService Instance = new SycnSpActiveService();
+        private SycnSpActiveService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    string Month = DateTime.Now.ToString("yyyyMM");
+                    string Date = DateTime.Now.ToString("yyyyMMdd");
+                    DateTime start = DateTime.Now.AddDays(-5);
+                    IQueryable<ActivateRecord> acts = spdb.ActivateRecord;
+                    acts = acts.Where(m => m.ActivateDate >= start && m.Status == 1);
+                    acts = acts.OrderByDescending(m => m.Id);
+                    foreach (ActivateRecord act in acts.ToList())
+                    {
+                        bool op = false;
+                        if (act.ActivateStatus == "00" && act.ProductType == "1")
+                        {
+                            op = true;
+                        }
+                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6")
+                        {
+                            op = true;
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == act.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                // pos.ActivationState = 1;
+                                // pos.ActivationTime = DateTime.Now;
+                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                                {
+                                    pos.SeoKeyword = act.SeoTitle;
+                                    pos.IsPurchase = 0;
+                                    db.SaveChanges();
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.PosSn, pos);
+                                }
+
+                                // PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                // if (merchant != null)
+                                // {
+                                //     merchant.ActiveStatus = 1;
+                                //     merchant.MerStandardDate = DateTime.Now;
+                                //     db.SaveChanges();
+                                //     RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                // }
+
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+
+                                // 激活奖励
+                                // ProfitHelper.Instance.StartListenActiveDo(pos);
+                            }
+                            pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId && m.ActivationState == 1);
+                            if (pos != null)
+                            {
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                            }
+                        }
+                    }
+                    spdb.SaveChanges();
+                    spdb.Dispose();
+                    db.SaveChanges();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP激活数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 108 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190450.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpActiveService
+    {
+        public readonly static SycnSpActiveService Instance = new SycnSpActiveService();
+        private SycnSpActiveService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    string Month = DateTime.Now.ToString("yyyyMM");
+                    string Date = DateTime.Now.ToString("yyyyMMdd");
+                    DateTime start = DateTime.Now.AddDays(-5);
+                    IQueryable<ActivateRecord> acts = spdb.ActivateRecord;
+                    acts = acts.Where(m => m.ActivateDate >= start && m.Status == 1);
+                    acts = acts.OrderByDescending(m => m.Id);
+                    foreach (ActivateRecord act in acts.ToList())
+                    {
+                        bool op = false;
+                        if (act.ActivateStatus == "00" && act.ProductType == "1")
+                        {
+                            op = true;
+                        }
+                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6")
+                        {
+                            op = true;
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == act.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                // pos.ActivationState = 1;
+                                // pos.ActivationTime = DateTime.Now;
+                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6 || pos.BrandId == 7)
+                                {
+                                    pos.SeoKeyword = act.SeoTitle;
+                                    pos.IsPurchase = 0;
+                                    db.SaveChanges();
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.PosSn, pos);
+                                }
+
+                                // PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                // if (merchant != null)
+                                // {
+                                //     merchant.ActiveStatus = 1;
+                                //     merchant.MerStandardDate = DateTime.Now;
+                                //     db.SaveChanges();
+                                //     RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                // }
+
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+
+                                // 激活奖励
+                                // ProfitHelper.Instance.StartListenActiveDo(pos);
+                            }
+                            pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId && m.ActivationState == 1);
+                            if (pos != null)
+                            {
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                            }
+                        }
+                    }
+                    spdb.SaveChanges();
+                    spdb.Dispose();
+                    db.SaveChanges();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP激活数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 108 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190518.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpActiveService
+    {
+        public readonly static SycnSpActiveService Instance = new SycnSpActiveService();
+        private SycnSpActiveService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    string Month = DateTime.Now.ToString("yyyyMM");
+                    string Date = DateTime.Now.ToString("yyyyMMdd");
+                    DateTime start = DateTime.Now.AddDays(-5);
+                    IQueryable<ActivateRecord> acts = spdb.ActivateRecord;
+                    acts = acts.Where(m => m.ActivateDate >= start && m.Status == 1);
+                    acts = acts.OrderByDescending(m => m.Id);
+                    foreach (ActivateRecord act in acts.ToList())
+                    {
+                        bool op = false;
+                        if (act.ActivateStatus == "00" && act.ProductType == "1")
+                        {
+                            op = true;
+                        }
+                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6" || act.ProductType == "7")
+                        {
+                            op = true;
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == act.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                // pos.ActivationState = 1;
+                                // pos.ActivationTime = DateTime.Now;
+                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6 || pos.BrandId == 7)
+                                {
+                                    pos.SeoKeyword = act.SeoTitle;
+                                    pos.IsPurchase = 0;
+                                    db.SaveChanges();
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.PosSn, pos);
+                                }
+
+                                // PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                // if (merchant != null)
+                                // {
+                                //     merchant.ActiveStatus = 1;
+                                //     merchant.MerStandardDate = DateTime.Now;
+                                //     db.SaveChanges();
+                                //     RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                // }
+
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+
+                                // 激活奖励
+                                // ProfitHelper.Instance.StartListenActiveDo(pos);
+                            }
+                            pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId && m.ActivationState == 1);
+                            if (pos != null)
+                            {
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                            }
+                        }
+                    }
+                    spdb.SaveChanges();
+                    spdb.Dispose();
+                    db.SaveChanges();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP激活数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 108 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpActiveService_20220524190519.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpActiveService
+    {
+        public readonly static SycnSpActiveService Instance = new SycnSpActiveService();
+        private SycnSpActiveService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    string Month = DateTime.Now.ToString("yyyyMM");
+                    string Date = DateTime.Now.ToString("yyyyMMdd");
+                    DateTime start = DateTime.Now.AddDays(-5);
+                    IQueryable<ActivateRecord> acts = spdb.ActivateRecord;
+                    acts = acts.Where(m => m.ActivateDate >= start && m.Status == 1);
+                    acts = acts.OrderByDescending(m => m.Id);
+                    foreach (ActivateRecord act in acts.ToList())
+                    {
+                        bool op = false;
+                        if (act.ActivateStatus == "00" && act.ProductType == "1")
+                        {
+                            op = true;
+                        }
+                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6" || act.ProductType == "7")
+                        {
+                            op = true;
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == act.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                // pos.ActivationState = 1;
+                                // pos.ActivationTime = DateTime.Now;
+                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6 || pos.BrandId == 7)
+                                {
+                                    pos.SeoKeyword = act.SeoTitle;
+                                    pos.IsPurchase = 0;
+                                    db.SaveChanges();
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
+                                    RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.PosSn, pos);
+                                }
+
+                                // PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                // if (merchant != null)
+                                // {
+                                //     merchant.ActiveStatus = 1;
+                                //     merchant.MerStandardDate = DateTime.Now;
+                                //     db.SaveChanges();
+                                //     RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                // }
+
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+
+                                // 激活奖励
+                                // ProfitHelper.Instance.StartListenActiveDo(pos);
+                            }
+                            pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId && m.ActivationState == 1);
+                            if (pos != null)
+                            {
+                                ActivateRecord edit = spdb.ActivateRecord.FirstOrDefault(m => m.Id == act.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                            }
+                        }
+                    }
+                    spdb.SaveChanges();
+                    spdb.Dispose();
+                    db.SaveChanges();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP激活数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 409 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220522141932.cs

@@ -0,0 +1,409 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 421 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524190809.cs

@@ -0,0 +1,421 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 421 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191030.cs

@@ -0,0 +1,421 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "CC" || trade.BankCardType == "SCC")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 421 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191031.cs

@@ -0,0 +1,421 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "CC" || trade.BankCardType == "SCC")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 421 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524191112.cs

@@ -0,0 +1,421 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "CC" || trade.BankCardType == "SCC")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 421 - 0
.history/AppStart/Helper/SycnSpServer/SycnSpTradeService_20220524213842.cs

@@ -0,0 +1,421 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.SpModels;
+using Library;
+using LitJson;
+using System.Threading;
+
+namespace MySystem
+{
+    public class SycnSpTradeService
+    {
+        public readonly static SycnSpTradeService Instance = new SycnSpTradeService();
+        private SycnSpTradeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    WebCMSEntities spdb = new WebCMSEntities();
+                    PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime start = DateTime.Now.AddDays(-30);
+                    IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                    trades = trades.Where(m => m.CreateDate >= start && m.Status == 1);
+                    trades = trades.OrderBy(m => m.CreateDate);
+                    foreach (TradeRecord trade in trades.ToList())
+                    {
+                        bool op = true;
+                        if (trade.SerEntryMode == "N")
+                        {
+                            if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                            {
+                                op = false;
+                                PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                                PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                                if (pos != null)
+                                {
+                                    if (trade.SerEntryMode == "N" && trade.ProductType == "1")
+                                    {
+                                        pos.SeoKeyword = trade.TradeAmount.ToString("f2");
+                                        pos.IsPurchase = 0;
+                                        db.SaveChanges();
+                                    }
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                        if (trade.DiscountRateFlag == "True")
+                        { 
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                        if (op)
+                        {
+                            PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                            PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                            if (pos != null)
+                            {
+                                if (pos.BindMerchantId > 0)
+                                {
+                                    PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                    int TopUserId = 0;
+                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    {
+                                        TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                    }
+                                    bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                    if (!check)
+                                    {
+                                        decimal TradeAmount = trade.TradeAmount;
+                                        int BankCardType = -1;
+                                        int QrPayFlag = 0;
+                                        if (pos.BrandId == 1 || pos.BrandId == 3)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            BankCardType = int.Parse(trade.BankCardType);
+                                            if (trade.TradeType == "02") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 2)
+                                        {
+                                            if (trade.TradeType == "CREDIT_BY_CARD")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.TradeType == "DEBIT_BY_CARD")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "100")
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                            else if (trade.BankCardType == "200")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            if (trade.TradeType == "200") QrPayFlag = 1;
+                                        }
+                                        else if (pos.BrandId == 6)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "01" || trade.BankCardType == "11")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "CC" || trade.BankCardType == "SCC")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
+                                        int BrandId = int.Parse(trade.ProductType);
+                                        if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
+                                        {
+                                            BrandId = 3;
+                                        }
+                                        if (BrandId == 4 && trade.DeviceType == "200")
+                                        { 
+                                            BrandId = 5;
+                                        }
+                                        db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                        {
+                                            CreateDate = trade.CreateDate,
+                                            UpdateDate = trade.UpdateDate,
+                                            RecordNo = trade.TradeSerialNo, //单号
+                                            UserId = pos.UserId, //创客
+                                            MerchantId = pos.BindMerchantId, //商户
+                                            MerNo = trade.MerNo, //渠道商户编号
+                                            MerHelpFlag = 0, //是否属于扶持周期内商户
+                                            HelpMonthCount = 0, //扶持第几个月
+                                            MerBuddyType = user.MerchantType, //商户创客类型
+                                            SnNo = trade.TradeSnNo, //渠道SN号
+                                            // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                            TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                            TradeAmount = TradeAmount, //交易金额
+                                            BankCardType = BankCardType, //银行卡类型
+                                            QrPayFlag = QrPayFlag, //云闪付标识
+                                            BrandId = BrandId, //品牌
+                                            Remark = trade.Remark, //备注
+                                            TopUserId = TopUserId, //顶级创客
+                                            MerUserId = pos.UserId, //商户直属创客
+                                            ParentNav = user.ParentNav,
+                                        });
+                                        decimal CheckMoney = 1000;
+                                        int CheckDays = 20;
+                                        if (pos.BrandId == 6)
+                                        { 
+                                            CheckMoney = 5000;
+                                            CheckDays = 30;
+                                        }
+                                        if (BankCardType == 1 || (BankCardType == 2 && pos.BrandId == 1) || (BankCardType == 2 && pos.BrandId == 3))
+                                        {
+                                            pos.CreditTrade += TradeAmount;
+                                        }
+                                        else if (BankCardType == 0)
+                                        {
+                                            pos.DebitCardTrade += TradeAmount;
+                                        }
+                                        if (pos.CreditTrade < CheckMoney)
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit > 0)
+                                            { 
+                                                pos.IsPurchase = 0;
+                                            }
+                                            else
+                                            {
+                                                pos.IsPurchase = 99;
+                                            }
+                                        }
+                                        else if (pos.CreditTrade >= CheckMoney && pos.ActivationState == 0 && pos.BindingTime > DateTime.Now.AddDays(-CheckDays))
+                                        {
+                                            decimal deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
+                                            if (deposit == 0)
+                                            {
+                                                pos.IsPurchase = 0;
+                                            }
+                                            pos.ActivationState = 1;
+                                            pos.ActivationTime = DateTime.Now;
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                                            if (merchant != null)
+                                            {
+                                                merchant.ActiveStatus = 1;
+                                                merchant.MerStandardDate = DateTime.Now;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+                                            }
+                                        }
+                                        // 立刷60天内刷满10000,再返40
+                                        if (pos.BrandId == 6 && pos.CreditTrade >= 10000 && pos.BindingTime > DateTime.Now.AddDays(-60))
+                                        {
+                                            PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
+                                            PxcModels.Users getUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new PxcModels.Users();
+                                            int BuyTopUserId = 0;
+                                            string ParentNav = getUser.ParentNav;
+                                            if (!string.IsNullOrEmpty(ParentNav))
+                                            {
+                                                string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                                if (ParentNavList.Length > 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[1]);
+                                                }
+                                                else if (ParentNavList.Length == 1)
+                                                {
+                                                    BuyTopUserId = int.Parse(ParentNavList[0]);
+                                                }
+                                            }
+                                            StatService.Instance.doActiveReward(db, merchant, pos, getUser.Id, getUser.ParentNav, BuyTopUserId, 40, 12);
+                                        }
+                                        db.SaveChanges();
+                                    }
+                                    TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                    if (edit != null)
+                                    {
+                                        edit.Status = 2;
+                                    }
+                                    spdb.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    spdb.Dispose();
+                    db.Dispose();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+
+        public void StartTest()
+        { 
+            DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+            DateTime check = DateTime.Parse("2022-04-19");
+            while (check <= today)
+            {
+                Thread th = new Thread(StartTestDo);
+                th.IsBackground = true;
+                th.Start(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartTestDo(object sender)
+        {
+            string date = sender.ToString();
+            DateTime start = DateTime.Parse(date);
+            DateTime end = start.AddDays(1);
+            try
+            {
+                WebCMSEntities spdb = new WebCMSEntities();
+                PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                IQueryable<TradeRecord> trades = spdb.TradeRecord;
+                trades = trades.Where(m => m.CreateDate >= start && m.CreateDate < end);
+                trades = trades.OrderBy(m => m.Id);
+                foreach (TradeRecord trade in trades.ToList())
+                {
+                    bool op = true;
+                    if (trade.SerEntryMode == "N")
+                    {
+                        if (trade.TradeAmount == 9900 || trade.TradeAmount == 19900 || trade.TradeAmount == 29900)
+                        {
+                            op = false;
+                            TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                            if (edit != null)
+                            {
+                                edit.Status = 2;
+                            }
+                            spdb.SaveChanges();
+                        }
+                    }
+                    if (trade.DiscountRateFlag == "True")
+                    { 
+                        op = false;
+                        TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                        if (edit != null)
+                        {
+                            edit.Status = 2;
+                        }
+                        spdb.SaveChanges();
+                    }
+                    if (op)
+                    {
+                        PxcModels.MachineForMerNo posFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == trade.MerNo) ?? new PxcModels.MachineForMerNo();
+                        PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posFor.SnId);
+                        if (pos != null)
+                        {
+                            if (pos.BindMerchantId > 0)
+                            {
+                                PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new PxcModels.Users();
+                                int TopUserId = 0;
+                                if (!string.IsNullOrEmpty(user.ParentNav))
+                                {
+                                    TopUserId = int.Parse(user.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                }
+                                bool check = db.TradeRecord.Any(m => m.RecordNo == trade.TradeSerialNo);
+                                if (!check)
+                                {
+                                    decimal TradeAmount = trade.TradeAmount;
+                                    int BankCardType = -1;
+                                    int QrPayFlag = 0;
+                                    if (pos.BrandId == 1 || pos.BrandId == 3)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        BankCardType = int.Parse(trade.BankCardType);
+                                        if (trade.TradeType == "02") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 2)
+                                    {
+                                        if (trade.TradeType == "CREDIT_BY_CARD")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.TradeType == "DEBIT_BY_CARD")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    }
+                                    else if (pos.BrandId == 4 || pos.BrandId == 5)
+                                    {
+                                        TradeAmount = TradeAmount / 100;
+                                        if (trade.BankCardType == "100")
+                                        {
+                                            BankCardType = 1;
+                                        }
+                                        else if (trade.BankCardType == "200")
+                                        {
+                                            BankCardType = 0;
+                                        }
+                                        if (trade.TradeType == "200") QrPayFlag = 1;
+                                    }
+                                    int BrandId = int.Parse(trade.ProductType);
+                                    if (trade.MerNo.StartsWith("M900"))
+                                    {
+                                        BrandId = 3;
+                                    }
+                                    db.TradeRecord.Add(new PxcModels.TradeRecord()
+                                    {
+                                        CreateDate = trade.CreateDate,
+                                        UpdateDate = trade.UpdateDate,
+                                        RecordNo = trade.TradeSerialNo, //单号
+                                        UserId = pos.UserId, //创客
+                                        MerchantId = pos.BindMerchantId, //商户
+                                        MerNo = trade.MerNo, //渠道商户编号
+                                        MerHelpFlag = 0, //是否属于扶持周期内商户
+                                        HelpMonthCount = 0, //扶持第几个月
+                                        MerBuddyType = user.MerchantType, //商户创客类型
+                                        SnNo = trade.TradeSnNo, //渠道SN号
+                                                                // TradeDate = DateTime.Parse(trade.TradeTime), //交易日期
+                                        TradeSerialNo = trade.ChannelSerial, //交易流水号
+                                        TradeAmount = TradeAmount, //交易金额
+                                        BankCardType = BankCardType, //银行卡类型
+                                        QrPayFlag = QrPayFlag, //云闪付标识
+                                        BrandId = BrandId, //品牌
+                                        Remark = trade.Remark, //备注
+                                        TopUserId = TopUserId, //顶级创客
+                                        MerUserId = pos.UserId, //商户直属创客
+                                    });
+                                    db.SaveChanges();
+                                }
+                                TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
+                                if (edit != null)
+                                {
+                                    edit.Status = 2;
+                                }
+                                spdb.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                spdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
+            }
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220523234811.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            // services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            // services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            // services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220525102702.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            // services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            // services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            // services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220525102707.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220525102708.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220525155548.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            // services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            // services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            // services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 266 - 0
.history/Startup_20220525155550.cs

@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.AspNetCore.Rewrite;
+using Microsoft.AspNetCore.StaticFiles;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
+using Microsoft.Extensions.Hosting;
+using MySystem.PublicClass.GraphQL;
+using System.Text;
+using Microsoft.IdentityModel.Tokens;
+using System.Linq;
+
+namespace MySystem
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddControllersWithViews();
+            services.AddRouting(options =>
+            {
+                options.LowercaseUrls = true;
+            });
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+            services.Configure<Setting>(Configuration.GetSection("Setting"));
+            services.AddCors(option => option.AddPolicy("cors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().SetIsOriginAllowed(_ => true)));
+            services.AddMvc(options =>
+            {
+                options.EnableEndpointRouting = false;
+                options.Filters.Add(typeof(GlobalExceptions));
+            });
+            services.AddSession(options =>
+            {
+                // 设置 Session 过期时间
+                options.IdleTimeout = TimeSpan.FromHours(1);
+                options.Cookie.HttpOnly = true;
+            });
+            services.AddSingleton<IRepository, Repository>();
+            services.Configure<FormOptions>(x =>
+            {
+                x.MultipartBodyLengthLimit = 50 * 1024 * 1024;//不到300M
+            });
+            //生成密钥
+            var symmetricKeyAsBase64 = Configuration["Setting:JwtSecret"];
+            var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
+            var signingKey = new SymmetricSecurityKey(keyByteArray);
+            //认证参数
+            services.AddAuthentication("Bearer").AddJwtBearer(o =>
+            {
+                o.TokenValidationParameters = new TokenValidationParameters
+                {
+                    ValidateIssuerSigningKey = true,//是否验证签名,不验证的画可以篡改数据,不安全
+                    IssuerSigningKey = signingKey,//解密的密钥
+                    ValidateIssuer = true,//是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数
+                    // ValidIssuer = Configuration["Setting:JwtIss"],//发行人
+                    IssuerValidator = (m, n, z) =>
+                    {
+                        return n.Issuer;
+                    },
+                    ValidateAudience = true,//是否验证订阅人,就是验证载荷中的Aud是否对应ValidAudience参数
+                    // ValidAudience = Configuration["Setting:JwtAud"],//订阅人
+                    AudienceValidator = (m, n, z) =>
+                    {
+                        string check = RedisDbconn.Instance.Get<string>("utoken:" + n.Issuer);
+                        return m != null && m.FirstOrDefault().Equals(check);
+                    },
+                    ValidateLifetime = true,//是否验证过期时间,过期了就拒绝访问
+                    ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
+                    RequireExpirationTime = true,
+                };
+            });
+
+            // services.AddHostedService<TradeService>();
+            // services.AddHostedService<TeamTopService>();
+            // services.AddHostedService<PopService>();
+            // services.AddHostedService<SycnSpTimer>(); //同步SP数据
+            
+            // services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
+            // services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
+            // services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
+
+            //services.AddHttpContextAccessor();
+
+            string appkey = Configuration["Setting:AppKey"];
+            string appid = Configuration["Setting:AppId"];
+            string checkurl = Configuration["Setting:CheckUrl"];
+            string serviceurl = Configuration["Setting:WebServiceUrl"];
+            string schemeurl = Configuration["Setting:DbSchemeUrl"];
+            MySystemLib.SystemPublicFuction.appkey = appkey;
+            MySystemLib.SystemPublicFuction.appid = appid;
+            MySystemLib.SystemPublicFuction.checkurl = checkurl;
+            MySystemLib.SystemPublicFuction.appcheck = "success";
+            // var binding = new BasicHttpBinding();
+            // binding.MaxReceivedMessageSize = 2147483647;
+            // var endpoint = new EndpointAddress(Configuration["Setting:WebServiceUrl"]);
+            // var factory = new ChannelFactory<GetDataBaseSoap>(binding, endpoint);
+            // var callClient = factory.CreateChannel();
+            // DataBaseRequestBody body = new DataBaseRequestBody();
+            // body.appid = appid;
+            // body.appkey = appkey;
+            // var request = new DataBaseRequest(body);
+            // var wait = callClient.DataBaseAsync(request);
+            // wait.Wait();
+            // tempuri.org.CustomerTables[] servicetable = wait.Result.Body.DataBaseResult;
+            // Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            // foreach (tempuri.org.CustomerTables subtable in servicetable)
+            // {
+            //     Dictionary<string, string> Columns = new Dictionary<string, string>();
+            //     foreach (tempuri.org.CustomerColumns subcolumn in subtable.Columns)
+            //     {
+            //         Columns.Add(subcolumn.FieldName, subcolumn.FieldType);
+            //     }
+            //     tables.Add(subtable.TableName, Columns);
+            // }
+            // servicetable = null;
+            // string database = Library.function.GetWebRequest(serviceurl + "?appid=" + appid + "&appkey=" + appkey);
+            // Dictionary<string, Dictionary<string, string>> tables = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(database);
+            // MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            // string schemeString = Library.function.GetWebRequest(schemeurl + "?appid=" + appid + "&appkey=" + appkey);
+            // RedisDbconn.Instance.Set("dbscheme", Newtonsoft.Json.JsonConvert.DeserializeObject<List<MySystem.DbScheme>>(schemeString));
+            Dictionary<string, Dictionary<string, string>> tables = new Dictionary<string, Dictionary<string, string>>();
+            System.Data.DataTable tablecollection = Library.dbconn.dtable("select DISTINCT TABLE_NAME from information_schema.columns where table_schema = 'KxsMainServer'");
+            foreach (System.Data.DataRow subtable in tablecollection.Rows)
+            {
+                Dictionary<string, string> Columns = new Dictionary<string, string>();
+                System.Data.DataTable columncollection = Library.dbconn.dtable("select COLUMN_NAME,DATA_TYPE from information_schema.columns where table_schema = 'KxsMainServer' and TABLE_NAME='" + subtable["TABLE_NAME"].ToString() + "'");
+                foreach (System.Data.DataRow column in columncollection.Rows)
+                {
+                    string datatype = column["DATA_TYPE"].ToString();
+                    if (datatype == "decimal")
+                    {
+                        datatype = "numeric";
+                    }
+                    Columns.Add(column["COLUMN_NAME"].ToString(), datatype);
+                }
+                tables.Add(subtable["TABLE_NAME"].ToString(), Columns);
+            }
+            MySystemLib.SystemPublicFuction.dbtables = tables;
+
+            RedisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:RedisConnStr"]);
+            TendisDbconn.csredis = new CSRedis.CSRedisClient(Configuration["Setting:TendisConnStr"]);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                // app.UseExceptionHandler("/Home/Error");
+            }
+            else
+            {
+                app.UseExceptionHandler("/Home/Error");
+                app.UseHsts();
+            }
+            Library.function.WritePage("/", "WebRootPath.txt", env.WebRootPath);
+            // app.UseStatusCodePagesWithReExecute("/public/errpage/pc/{0}.html");
+
+            // RequestDelegate handler = async context =>
+            // {
+            //     var response = context.Response;
+            //     if (response.StatusCode < 500)
+            //     {
+            //         response.("/public/errpage/pc/{0}.html");
+            //     }
+            // };
+            // app.UseStatusCodePages(builder => builder.Run(handler));
+            app.UseStaticFiles();
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/static"),
+            //     RequestPath = "/static"
+            // });
+            // app.UseStaticFiles(new StaticFileOptions
+            // {
+            //     FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory + "/" + Configuration["Setting:Database"]),
+            //     RequestPath = "/" + Configuration["Setting:Database"]
+            // });
+            app.UseStaticFiles(new StaticFileOptions
+            {
+                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
+                {
+                      { ".apk", "application/vnd.android.package-archive" }
+                })
+            });
+
+            app.UseCors("cors");
+            app.UseAuthentication();
+            app.UseRouting();
+            app.UseAuthorization();
+            app.UseSession();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllerRoute(
+                    name: "default",
+                    pattern: "{controller=Home}/{action=Index}/{Id?}");
+            });
+
+            // app.UseMiddleware<GraphQLMiddleware>();
+
+
+            // 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交易数据
+            // StatService.Instance.StartPosActNum(); //实时统计激活数
+            // StatService.Instance.StartNewUserNum(); //实时统计新增创客数
+            //必须打开的
+
+
+            // StatService.Instance.StatUserLevel();
+            // StatService.Instance.StartEverDay("2022-05-11");
+            // ProfitHelper.Instance.StatProfit("202204"); //统计分润
+            // StatService.Instance.ListenFluxRecord();
+            // StatService.Instance.StartEverDay2();
+            // TestHelper.Instance.Start();
+            // StatService.Instance.StartEverDay();
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnDo");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+
+
+            // 备用,暂时不放开的
+            // StatStoreDataService.Instance.Start();
+            // RabbitMQClient.Instance.StartReceive("SycnTableData");
+            // PayHelper.Instance.Start();
+            // OrderHelper.Instance.Start();
+            // OrderRefundHelper.Instance.Start();
+            // ProductCommentHelper.Instance.Start();
+            // TimedTaskHelper.Instance.Start();
+            // TaskFlowHelper.Instance.Start();
+        }
+    }
+}

+ 39 - 0
.history/appsettings_20220520215259.json

@@ -0,0 +1,39 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*",
+  "Setting": {
+    "AppKey": "8a3789362ef25d9f46a9d1c626e9e9f0",
+    "AppId": "1000000166",
+    "CheckUrl": "http://auth.yunmuit.com/Api/ProjectCheck/CheckRight",
+    "ConnectionStrings": "",
+    "WebServiceUrl": "http://auth.yunmuit.com/Api/ProjectCheck/DataBase",
+    "DbSchemeUrl": "http://auth.yunmuit.com/Api/ProjectCheck/GetDbScheme",
+    "Host": "http://localhost:5047/",
+    "SourceHost": "http://bs.kexiaoshuang.com/",
+    "Database": "KxsMainServer",
+    "SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=localhost;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "localhost:6379,password=,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "localhost:6379,password=,DefaultDatabase=15,poolsize=500,preheat=50,asyncPipeline=true",
+    "IOSAppVersion": "1.0.0",
+    "AndroidAppVersion": "1.0.0",
+    "OSSKey": "iL9dWgBunZRwGbHQ",
+    "OSSSecret": "Q6P2vSNEY2LBNdygO8gUCkBZQpiswZ",
+    "OSSEndpoint": "oss-cn-hangzhou.aliyuncs.com",
+    "OSSBucketName": "yunmuit",
+    "AppSource": "/skin/app/default/",
+    "JwtSecret": "JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0",
+    "JwtIss": "KxsMainServer",
+    "JwtAud": "api",
+    "MqUserName": "skb@rabbitmq",
+    "MqPassword": "skb@rabbitmq",
+    "MqHostName": "47.108.231.170:5672,47.108.225.92:5672"
+  }
+}

+ 39 - 0
.history/appsettings_20220525155728.json

@@ -0,0 +1,39 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*",
+  "Setting": {
+    "AppKey": "8a3789362ef25d9f46a9d1c626e9e9f0",
+    "AppId": "1000000166",
+    "CheckUrl": "http://auth.yunmuit.com/Api/ProjectCheck/CheckRight",
+    "ConnectionStrings": "",
+    "WebServiceUrl": "http://auth.yunmuit.com/Api/ProjectCheck/DataBase",
+    "DbSchemeUrl": "http://auth.yunmuit.com/Api/ProjectCheck/GetDbScheme",
+    "Host": "http://localhost:5047/",
+    "SourceHost": "http://bs.kexiaoshuang.com/",
+    "Database": "KxsMainServer",
+    "SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "server=47.109.31.237:6379,password=,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "server=47.109.31.237:6379,password=,DefaultDatabase=15,poolsize=500,preheat=50,asyncPipeline=true",
+    "IOSAppVersion": "1.0.0",
+    "AndroidAppVersion": "1.0.0",
+    "OSSKey": "iL9dWgBunZRwGbHQ",
+    "OSSSecret": "Q6P2vSNEY2LBNdygO8gUCkBZQpiswZ",
+    "OSSEndpoint": "oss-cn-hangzhou.aliyuncs.com",
+    "OSSBucketName": "yunmuit",
+    "AppSource": "/skin/app/default/",
+    "JwtSecret": "JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0",
+    "JwtIss": "KxsMainServer",
+    "JwtAud": "api",
+    "MqUserName": "skb@rabbitmq",
+    "MqPassword": "skb@rabbitmq",
+    "MqHostName": "47.108.231.170:5672,47.108.225.92:5672"
+  }
+}

+ 39 - 0
.history/appsettings_20220525155741.json

@@ -0,0 +1,39 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*",
+  "Setting": {
+    "AppKey": "8a3789362ef25d9f46a9d1c626e9e9f0",
+    "AppId": "1000000166",
+    "CheckUrl": "http://auth.yunmuit.com/Api/ProjectCheck/CheckRight",
+    "ConnectionStrings": "",
+    "WebServiceUrl": "http://auth.yunmuit.com/Api/ProjectCheck/DataBase",
+    "DbSchemeUrl": "http://auth.yunmuit.com/Api/ProjectCheck/GetDbScheme",
+    "Host": "http://localhost:5047/",
+    "SourceHost": "http://bs.kexiaoshuang.com/",
+    "Database": "KxsMainServer",
+    "SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "IOSAppVersion": "1.0.0",
+    "AndroidAppVersion": "1.0.0",
+    "OSSKey": "iL9dWgBunZRwGbHQ",
+    "OSSSecret": "Q6P2vSNEY2LBNdygO8gUCkBZQpiswZ",
+    "OSSEndpoint": "oss-cn-hangzhou.aliyuncs.com",
+    "OSSBucketName": "yunmuit",
+    "AppSource": "/skin/app/default/",
+    "JwtSecret": "JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0",
+    "JwtIss": "KxsMainServer",
+    "JwtAud": "api",
+    "MqUserName": "skb@rabbitmq",
+    "MqPassword": "skb@rabbitmq",
+    "MqHostName": "47.108.231.170:5672,47.108.225.92:5672"
+  }
+}

+ 39 - 0
.history/appsettings_20220525155742.json

@@ -0,0 +1,39 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*",
+  "Setting": {
+    "AppKey": "8a3789362ef25d9f46a9d1c626e9e9f0",
+    "AppId": "1000000166",
+    "CheckUrl": "http://auth.yunmuit.com/Api/ProjectCheck/CheckRight",
+    "ConnectionStrings": "",
+    "WebServiceUrl": "http://auth.yunmuit.com/Api/ProjectCheck/DataBase",
+    "DbSchemeUrl": "http://auth.yunmuit.com/Api/ProjectCheck/GetDbScheme",
+    "Host": "http://localhost:5047/",
+    "SourceHost": "http://bs.kexiaoshuang.com/",
+    "Database": "KxsMainServer",
+    "SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "IOSAppVersion": "1.0.0",
+    "AndroidAppVersion": "1.0.0",
+    "OSSKey": "iL9dWgBunZRwGbHQ",
+    "OSSSecret": "Q6P2vSNEY2LBNdygO8gUCkBZQpiswZ",
+    "OSSEndpoint": "oss-cn-hangzhou.aliyuncs.com",
+    "OSSBucketName": "yunmuit",
+    "AppSource": "/skin/app/default/",
+    "JwtSecret": "JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0",
+    "JwtIss": "KxsMainServer",
+    "JwtAud": "api",
+    "MqUserName": "skb@rabbitmq",
+    "MqPassword": "skb@rabbitmq",
+    "MqHostName": "47.108.231.170:5672,47.108.225.92:5672"
+  }
+}

+ 39 - 0
.history/appsettings_20220525160001.json

@@ -0,0 +1,39 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*",
+  "Setting": {
+    "AppKey": "8a3789362ef25d9f46a9d1c626e9e9f0",
+    "AppId": "1000000166",
+    "CheckUrl": "http://auth.yunmuit.com/Api/ProjectCheck/CheckRight",
+    "ConnectionStrings": "",
+    "WebServiceUrl": "http://auth.yunmuit.com/Api/ProjectCheck/DataBase",
+    "DbSchemeUrl": "http://auth.yunmuit.com/Api/ProjectCheck/GetDbScheme",
+    "Host": "http://localhost:5047/",
+    "SourceHost": "http://bs.kexiaoshuang.com/",
+    "Database": "KxsMainServer",
+    "SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "IOSAppVersion": "1.0.0",
+    "AndroidAppVersion": "1.0.0",
+    "OSSKey": "iL9dWgBunZRwGbHQ",
+    "OSSSecret": "Q6P2vSNEY2LBNdygO8gUCkBZQpiswZ",
+    "OSSEndpoint": "oss-cn-hangzhou.aliyuncs.com",
+    "OSSBucketName": "yunmuit",
+    "AppSource": "/skin/app/default/",
+    "JwtSecret": "JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0",
+    "JwtIss": "KxsMainServer",
+    "JwtAud": "api",
+    "MqUserName": "skb@rabbitmq",
+    "MqPassword": "skb@rabbitmq",
+    "MqHostName": "47.108.231.170:5672,47.108.225.92:5672"
+  }
+}

+ 1 - 1
AppStart/Helper/AlipayPayBack2Service.cs

@@ -184,7 +184,7 @@ namespace MySystem
                                 {
                                     SelfBuy = int.Parse(function.CheckInt(stat.Rows[0][0].ToString()));
                                 }
-                                OtherMySqlConn.connstr = "";
+                                // OtherMySqlConn.connstr = ;
                                 function.WriteLog("OrderId:" + OrderId, "推荐下单奖励监控日志");
                                 function.WriteLog("checkPrize:" + checkPrize, "推荐下单奖励监控日志");
                                 function.WriteLog("SelfBuy:" + SelfBuy, "推荐下单奖励监控日志");

+ 1 - 1
AppStart/Helper/DelMySql/DeleteMySqlDataService.cs

@@ -22,7 +22,7 @@ namespace MySystem
                 dbconn.op("delete from " + Table + " where Id=" + Id);
                 OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
                 OtherMySqlConn.op("delete from " + Table + " where Id=" + Id);
-                OtherMySqlConn.connstr = "";
+                // OtherMySqlConn.connstr = ;
             }
             catch (Exception ex)
             {

+ 4 - 4
AppStart/Helper/Profit/ProfitHelper.cs

@@ -872,7 +872,7 @@ namespace MySystem
                                     {
                                         totalTradeMoney = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
                                     }
-                                    OtherMySqlConn.connstr = "";
+                                    // OtherMySqlConn.connstr = ;
                                     if (totalTradeMoney >= FinishNumber && ProfitMoney >= obj.MinProfitVal)  //达到完成数,发放奖励
                                     {
                                         result.Add(new ProfitResult()
@@ -915,7 +915,7 @@ namespace MySystem
                                     {
                                         totalTradeMoney = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
                                     }
-                                    OtherMySqlConn.connstr = "";
+                                    // OtherMySqlConn.connstr = ;
                                     if (totalTradeMoney >= FinishNumber && ProfitMoney >= obj.MinProfitVal)  //达到完成数,发放奖励
                                     {
                                         result.Add(new ProfitResult()
@@ -2101,11 +2101,11 @@ namespace MySystem
                 DataTable dt = new DataTable();
                 if (BankCardType == 1)
                 {
-                    dt = dbconn.dtable("select SnNo,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' and BankCardType>=1 and BankCardType<=2 and BrandId=" + BrandId + " group by SnNo,QrPayFlag");
+                    dt = dbconn.dtable("select SnNo,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' and BankCardType>=1 and BankCardType<=2 and BrandId=" + BrandId + " and UserId=55244 group by SnNo,QrPayFlag");
                 }
                 if (BankCardType == 0)
                 {
-                    dt = dbconn.dtable("select SnNo,QrPayFlag,TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' and BankCardType=0 and BrandId=" + BrandId + "");
+                    dt = dbconn.dtable("select SnNo,QrPayFlag,TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' and BankCardType=0 and BrandId=" + BrandId + " and UserId=55244");
                 }
                 foreach (DataRow dr in dt.Rows)
                 {

+ 359 - 146
AppStart/Helper/StatService.cs

@@ -201,7 +201,7 @@ namespace MySystem
             db.Dispose();
         }
 
-        
+
         public void testStatTrade(string date)
         {
             string yesterday = date + " 00:00:00";
@@ -238,7 +238,7 @@ namespace MySystem
             DateTime today = DateTime.Now;
             IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
             if (posid > 0)
-            { 
+            {
                 posList = posList.Where(m => m.Id == posid);
             }
             else
@@ -422,7 +422,7 @@ namespace MySystem
             DateTime today = DateTime.Now;
             IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
             if (merid > 0)
-            { 
+            {
                 merList = merList.Where(m => m.Id == merid);
             }
             else
@@ -582,11 +582,11 @@ namespace MySystem
             db.Dispose();
         }
 
-        
+
 
         //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
         public void dosomething4(string date)
-        { 
+        {
             WebCMSEntities db = new WebCMSEntities();
             DateTime yesterday = DateTime.Parse(date + " 00:00:00");
             DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
@@ -607,155 +607,155 @@ namespace MySystem
                             // {
                             //     otherInfo.PrizeFlag2 = 1;
                             //     db.SaveChanges();
-                                // 从机具所属人上级开始分开机奖励
-                                Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
-                                if (user != null)
+                            // 从机具所属人上级开始分开机奖励
+                            Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
+                            if (user != null)
+                            {
+                                if (!string.IsNullOrEmpty(user.ParentNav))
                                 {
-                                    if (!string.IsNullOrEmpty(user.ParentNav))
+                                    decimal Prize = 20;
+                                    string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                                    for (int i = ParentNavs.Length - 1; i >= 0; i--)
                                     {
-                                        decimal Prize = 20;
-                                        string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
-                                        for (int i = ParentNavs.Length - 1; i >= 0; i--)
+                                        int UserId = int.Parse(ParentNavs[i]);
+                                        Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
+                                        if (puser != null && Prize > 0)
                                         {
-                                            int UserId = int.Parse(ParentNavs[i]);
-                                            Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
-                                            if (puser != null && Prize > 0)
+                                            int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
+                                            int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
+                                            int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
+                                                                                                                              // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
+                                                                                                                              // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
+                                            if (machineCount + ActiveCount + couponCount >= 3)
                                             {
-                                                int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买机
-                                                int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
-                                                int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
-                                                // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
-                                                // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
-                                                if (machineCount + ActiveCount + couponCount >= 3)
+                                                int pTopUserId = 0;
+                                                if (!string.IsNullOrEmpty(puser.ParentNav))
                                                 {
-                                                    int pTopUserId = 0;
-                                                    if (!string.IsNullOrEmpty(puser.ParentNav))
-                                                    {
-                                                        pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
-                                                    }
-                                                    Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
-                                                    OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                    pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                                                }
+                                                Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                                                OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
+                                                {
+                                                    CreateDate = DateTime.Now,
+                                                    UpdateDate = DateTime.Now,
+                                                    TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                    TradeDate = yesterday, //达标日期
+                                                    UserId = puser.Id, //创客
+                                                    BrandId = pos.BrandId, //品牌
+                                                    ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
+                                                    MerchantId = pos.BindMerchantId, //商户
+                                                    DirectUserId = merchant.UserId, //商户直属人
+                                                    SnNo = pos.PosSn, //SN号
+                                                    MerNo = merchant.KqMerNo, //渠道商户号
+                                                    SnType = pos.PosSnType, //机具类型
+                                                    StandardDate = pos.ActivationTime, //商户的激活日期
+                                                    SnStoreId = pos.StoreId, //SN仓库
+                                                    MerBuddyType = puser.MerchantType, //商户创客类型
+                                                    RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
+                                                    RewardTips = "开机奖励", //奖励描述
+                                                    CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                    DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                    CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                    RewardDesc = "开机奖励", //奖励描述
+                                                    TopUserId = pTopUserId, //顶级创客
+                                                    SeoTitle = machineUser.RealName,
+                                                }).Entity;
+                                                db.OpenReward.Add(new OpenReward()
+                                                {
+                                                    CreateDate = DateTime.Now,
+                                                    UpdateDate = DateTime.Now,
+                                                    TradeMonth = yesterday.ToString("yyyyMM"), //交易月
+                                                    TradeDate = DateTime.Now, //达标日期
+                                                    UserId = puser.Id, //创客
+                                                    BrandId = pos.BrandId, //品牌
+                                                    RewardType = 2, //奖励类型
+                                                    CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
+                                                    DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
+                                                    CreditRewardAmount = Prize, //贷记卡交易奖励金额
+                                                    RewardDesc = "开机奖励", //奖励描述
+                                                    TopUserId = pTopUserId, //顶级创客
+                                                });
+                                                string IdBrand = puser.Id + "_" + pos.BrandId;
+                                                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                                                if (userData == null)
+                                                {
+                                                    userData = db.UserMachineData.Add(new UserMachineData()
                                                     {
-                                                        CreateDate = DateTime.Now,
-                                                        UpdateDate = DateTime.Now,
-                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
-                                                        TradeDate = yesterday, //达标日期
-                                                        UserId = puser.Id, //创客
-                                                        BrandId = pos.BrandId, //品牌
-                                                        ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
-                                                        MerchantId = pos.BindMerchantId, //商户
-                                                        DirectUserId = merchant.UserId, //商户直属人
-                                                        SnNo = pos.PosSn, //SN号
-                                                        MerNo = merchant.KqMerNo, //渠道商户号
-                                                        SnType = pos.PosSnType, //机具类型
-                                                        StandardDate = pos.ActivationTime, //商户的激活日期
-                                                        SnStoreId = pos.StoreId, //SN仓库
-                                                        MerBuddyType = puser.MerchantType, //商户创客类型
-                                                        RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
-                                                        RewardTips = "开机奖励", //奖励描述
-                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
-                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
-                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
-                                                        RewardDesc = "开机奖励", //奖励描述
-                                                        TopUserId = pTopUserId, //顶级创客
-                                                        SeoTitle = machineUser.RealName,
+                                                        IdBrand = IdBrand,
                                                     }).Entity;
-                                                    db.OpenReward.Add(new OpenReward()
-                                                    {
-                                                        CreateDate = DateTime.Now,
-                                                        UpdateDate = DateTime.Now,
-                                                        TradeMonth = yesterday.ToString("yyyyMM"), //交易月
-                                                        TradeDate = DateTime.Now, //达标日期
-                                                        UserId = puser.Id, //创客
-                                                        BrandId = pos.BrandId, //品牌
-                                                        RewardType = 2, //奖励类型
-                                                        CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
-                                                        DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
-                                                        CreditRewardAmount = Prize, //贷记卡交易奖励金额
-                                                        RewardDesc = "开机奖励", //奖励描述
-                                                        TopUserId = pTopUserId, //顶级创客
-                                                    });
-                                                    string IdBrand = puser.Id + "_" + pos.BrandId;
-                                                    UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
-                                                    if (userData == null)
-                                                    {
-                                                        userData = db.UserMachineData.Add(new UserMachineData()
-                                                        {
-                                                            IdBrand = IdBrand,
-                                                        }).Entity;
-                                                        db.SaveChanges();
-                                                    }
-                                                    userData.OpenProfit += Prize;
                                                     db.SaveChanges();
-                                                    RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
-                                                    //账户入库
-                                                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
-                                                    if (account == null)
-                                                    {
-                                                        account = db.UserAccount.Add(new UserAccount()
-                                                        {
-                                                            Id = puser.Id,
-                                                            UserId = puser.Id,
-                                                        }).Entity;
-                                                        db.SaveChanges();
-                                                    }
-                                                    //收支明细入库
-                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
-                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
-                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-                                                    account.BalanceAmount += Prize;
-                                                    account.TotalAmount += Prize;
-                                                    decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
-                                                    decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
-                                                    decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
-                                                    UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+                                                }
+                                                userData.OpenProfit += Prize;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, userData);
+                                                //账户入库
+                                                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
+                                                if (account == null)
+                                                {
+                                                    account = db.UserAccount.Add(new UserAccount()
                                                     {
-                                                        CreateDate = DateTime.Now,
-                                                        UpdateDate = DateTime.Now,
-                                                        UserId = puser.Id, //创客
-                                                        ChangeType = 50, //变动类型
-                                                        ProductType = pos.BrandId, //产品类型
-                                                        ChangeAmount = Prize, //变更金额
-                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
-                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
-                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
-                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
-                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
-                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                        Id = puser.Id,
+                                                        UserId = puser.Id,
                                                     }).Entity;
                                                     db.SaveChanges();
-                                                    RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
+                                                }
+                                                //收支明细入库
+                                                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                account.BalanceAmount += Prize;
+                                                account.TotalAmount += Prize;
+                                                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 = puser.Id, //创客
+                                                    ChangeType = 50, //变动类型
+                                                    ProductType = pos.BrandId, //产品类型
+                                                    ChangeAmount = Prize, //变更金额
+                                                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                }).Entity;
+                                                db.SaveChanges();
+                                                RedisDbconn.Instance.Set("UserAccount:" + puser.Id, account);
 
-                                                    string dateString = yesterday.ToString("yyyyMMdd");
-                                                    string monthString = yesterday.ToString("yyyyMM");
-                                                    // 开机奖励列表
-                                                    List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
-                                                    if (!dates.Contains(dateString))
-                                                    {
-                                                        RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
-                                                    }
-                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
+                                                string dateString = yesterday.ToString("yyyyMMdd");
+                                                string monthString = yesterday.ToString("yyyyMM");
+                                                // 开机奖励列表
+                                                List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
+                                                if (!dates.Contains(dateString))
+                                                {
+                                                    RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
+                                                }
+                                                RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
 
-                                                    List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
-                                                    if (!months.Contains(monthString))
-                                                    {
-                                                        RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
-                                                    }
-                                                    RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
+                                                List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
+                                                if (!months.Contains(monthString))
+                                                {
+                                                    RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
+                                                }
+                                                RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
 
-                                                    // 开机奖励详情
-                                                    RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
+                                                // 开机奖励详情
+                                                RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
 
-                                                    //收支明细
-                                                    RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
-                                                    RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
+                                                //收支明细
+                                                RedisDbconn.Instance.AddList("UserAccountRecord:" + puser.Id + ":1:" + monthString, userAccountRecord);
+                                                RedisDbconn.Instance.AddNumber("UserAccount:" + puser.Id + ":1:" + monthString, Prize);
 
-                                                    Prize -= 10;
-                                                }
+                                                Prize -= 10;
                                             }
                                         }
                                     }
                                 }
+                            }
                             // }
                         }
                     }
@@ -765,7 +765,7 @@ namespace MySystem
         }
 
         public void dosomething42(string date)
-        { 
+        {
             WebCMSEntities db = new WebCMSEntities();
             DateTime yesterday = DateTime.Parse(date + " 00:00:00");
             DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
@@ -944,7 +944,7 @@ namespace MySystem
 
         // 4. 前一天的流量卡记录和匹配
         public void ListenFluxRecord(string date)
-        { 
+        {
             Thread th = new Thread(CheckFluxForTrade);
             th.IsBackground = true;
             th.Start(date);
@@ -1166,7 +1166,7 @@ namespace MySystem
 
         // 每天统计头一天的交易额
         public void StartEverDay(string date)
-        { 
+        {
             OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
             // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
             // DateTime check = DateTime.Parse("2022-03-11");
@@ -1346,8 +1346,8 @@ namespace MySystem
                 // {
                 //     endId = endDt.Rows[0][0].ToString();
                 // }
-                
-                function.WriteLog("ap到main开始:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+
+                function.WriteLog("ap到main开始:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
                 Models.WebCMSEntities maindb = new Models.WebCMSEntities();
                 DateTime StartDate = DateTime.Parse(start);
                 DateTime EndDate = DateTime.Parse(end);
@@ -1395,7 +1395,7 @@ namespace MySystem
                     }
                 }
                 maindb.Dispose();
-                function.WriteLog("ap到main结束:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
+                function.WriteLog("ap到main结束:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
 
                 OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
                 DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
@@ -1580,7 +1580,7 @@ namespace MySystem
             // }
             // html += "</table>";
             // db.Dispose();
-            // OtherMySqlConn.connstr = "";
+            // // OtherMySqlConn.connstr = ;
             // function.WritePage("/html/", "1.html", html);
         }
 
@@ -1631,11 +1631,9 @@ namespace MySystem
         }
 
 
-
-
         // 5. 创客升级
         public void StatUserLevel()
-        { 
+        {
             Thread th = new Thread(StatUserLevelDo);
             th.IsBackground = true;
             th.Start();
@@ -1694,13 +1692,228 @@ namespace MySystem
                 function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
             }
             catch (Exception ex)
-            { 
+            {
                 function.WriteLog(ex.ToString(), "创客升级异常");
             }
             db.Dispose();
 
-            
+
             ProfitHelper.Instance.StatProfit("202204");
         }
+
+
+        // 统计创客激活数
+        public void StartPosActNum()
+        {
+            Thread th = new Thread(StartPosActNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartPosActNumFor()
+        {
+            DateTime end = DateTime.Parse("2022-05-26 00:00:00");
+            DateTime check = DateTime.Parse("2022-03-11");
+            while (check <= end)
+            {
+                StartPosActNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartPosActNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            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";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行创客激活数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int BrandId = int.Parse(selfDr["BrandId"].ToString());
+                        int QrPayFlag = 0;
+                        int ActCount = int.Parse(selfDr[1].ToString());
+                        UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                            {
+                                UserId = UserId,
+                                TradeMonth = TradeMonth,
+                                TradeDate = TradeDate,
+                                BrandId = BrandId,
+                                QueryCount = QrPayFlag,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.DirectDebitCapNum += ActCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行创客激活数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int BrandId = int.Parse(teamDr["BrandId"].ToString());
+                                    int QrPayFlag = 0;
+                                    int ActCount = int.Parse(teamDr[1].ToString());
+                                    UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
+                                        {
+                                            UserId = NavUserId,
+                                            TradeMonth = TradeMonth,
+                                            TradeDate = TradeDate,
+                                            BrandId = BrandId,
+                                            QueryCount = QrPayFlag,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.NonDirectDebitCapNum += ActCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
+            Thread.Sleep(60000);
+        }
+
+        // 统计新增创客数
+        public void StartNewUserNum()
+        {
+            Thread th = new Thread(StartNewUserNumFor);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartNewUserNumFor()
+        {
+            DateTime end = DateTime.Parse("2022-05-26 00:00:00");
+            DateTime check = DateTime.Parse("2022-02-20");
+            while (check <= end)
+            {
+                StartNewUserNumDo(check.ToString("yyyy-MM-dd"));
+                check = check.AddDays(1);
+            }
+        }
+        public void StartNewUserNumDo(object sender)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            string date = sender.ToString();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
+            WebCMSEntities db = new WebCMSEntities();
+            try
+            {
+                string StatDate = date.Replace("-", "");
+                string StatMonth = StatDate.Substring(0, 6);
+                string start = date + " 00:00:00";
+                string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
+                List<string> uids = new List<string>();
+                DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
+                function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行新增创客数日志");
+                foreach (DataRow userDr in userDt.Rows)
+                {
+                    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", "执行新增创客数日志");
+                    DataTable selfdt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentUserId=" + UserId + "");
+                    function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+                    foreach (DataRow selfDr in selfdt.Rows)
+                    {
+                        int AddCount = int.Parse(selfDr[0].ToString());
+                        PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
+                        if (selfStat == null)
+                        {
+                            selfStat = db.PullnewSummary.Add(new PullnewSummary()
+                            {
+                                UserId = UserId,
+                                StatMonth = StatMonth,
+                                StatDate = StatDate,
+                                SeoTitle = "self",
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        selfStat.RecUserAuthNum += AddCount;
+                        db.SaveChanges();
+                    }
+                    if (!string.IsNullOrEmpty(ParentNav))
+                    {
+                        ParentNav += "," + UserId + ",";
+                        string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                        foreach (string NavUserIdString in ParentNavList)
+                        {
+                            if (!uids.Contains(NavUserIdString + start))
+                            {
+                                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", "执行新增创客数日志");
+                                DataTable teamDt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentNav like '%," + NavUserId + ",%'");
+                                function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+                                foreach (DataRow teamDr in teamDt.Rows)
+                                {
+                                    int AddCount = int.Parse(teamDr[0].ToString());
+                                    PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
+                                    if (teamStat == null)
+                                    {
+                                        teamStat = db.PullnewSummary.Add(new PullnewSummary()
+                                        {
+                                            UserId = NavUserId,
+                                            StatMonth = StatMonth,
+                                            StatDate = StatDate,
+                                            SeoTitle = "team",
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    teamStat.RecUserAuthNum += AddCount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                }
+                OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
+            }
+            db.Dispose();
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
+            Thread.Sleep(60000);
+        }
     }
 }

+ 1 - 1
AppStart/Helper/SycnMysql/PublicTableHelper.cs

@@ -108,7 +108,7 @@ namespace MySystem
                     RedisDbconn.Instance.AddList(table + ":Error", msg);
                 }
             }
-            OtherMySqlConn.connstr = "";
+            // OtherMySqlConn.connstr = ;
             return result;
         }
     }

+ 2 - 2
AppStart/Helper/SycnSpServer/SycnSpActiveService.cs

@@ -42,7 +42,7 @@ namespace MySystem
                         {
                             op = true;
                         }
-                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6")
+                        else if (act.ProductType == "2" || act.ProductType == "4" || act.ProductType == "6" || act.ProductType == "7")
                         {
                             op = true;
                         }
@@ -54,7 +54,7 @@ namespace MySystem
                             {
                                 // pos.ActivationState = 1;
                                 // pos.ActivationTime = DateTime.Now;
-                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6)
+                                if (pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 5 || pos.BrandId == 6 || pos.BrandId == 7)
                                 {
                                     pos.SeoKeyword = act.SeoTitle;
                                     pos.IsPurchase = 0;

+ 12 - 0
AppStart/Helper/SycnSpServer/SycnSpTradeService.cs

@@ -133,6 +133,18 @@ namespace MySystem
                                                 BankCardType = 1;
                                             }
                                         }
+                                        else if (pos.BrandId == 7)
+                                        {
+                                            TradeAmount = TradeAmount / 100;
+                                            if (trade.BankCardType == "CC" || trade.BankCardType == "SCC")
+                                            {
+                                                BankCardType = 0;
+                                            }
+                                            else
+                                            {
+                                                BankCardType = 1;
+                                            }
+                                        }
                                         int BrandId = int.Parse(trade.ProductType);
                                         if (BrandId == 1 && trade.MerNo.StartsWith("M900"))
                                         {

+ 1 - 1
AppStart/Helper/TestService.cs

@@ -320,7 +320,7 @@ namespace MySystem
                     RedisDbconn.Instance.AddList("TmpResetUserTradeQueue", pos.UserId + "#cut#2022-04-01 00:00:00#cut#2022-05-11 00:00:00#cut#" + pos.BrandId);
                 }
             }
-            // OtherMySqlConn.connstr = "";
+            // // OtherMySqlConn.connstr = ;
             db.Dispose();
         }
 

+ 1 - 1
AppStart/Timer/TestHelper.cs

@@ -246,7 +246,7 @@ public class TestHelper
         //     string UserId = dr["UserId"].ToString();
         //     OtherMySqlConn.op("update TradeRecord set UserId=" + UserId + " where SnNo='" + PosSn + "' and CreateDate>='2022-04-01 00:00:00'");
         // }
-        // OtherMySqlConn.connstr = "";
+        // // OtherMySqlConn.connstr = ;
 
         // StatService.Instance.StartEverDay2();
     }

+ 91 - 15
Controllers/HomeController.cs

@@ -57,7 +57,7 @@ namespace MySystem.Controllers
         }
 
         public string setqrcode(int uid = 0)
-        {            
+        {
             return "ok";
         }
 
@@ -93,7 +93,7 @@ namespace MySystem.Controllers
             th.Start();
         }
         private void th1do()
-        { 
+        {
             WebCMSEntities db = new WebCMSEntities();
             Users user = db.Users.FirstOrDefault(m => m.Id == 2);
             if (user != null)
@@ -106,13 +106,13 @@ namespace MySystem.Controllers
             db.Dispose();
         }
         private void th2()
-        { 
+        {
             Thread th = new Thread(th2do);
             th.IsBackground = true;
             th.Start();
         }
         private void th2do()
-        { 
+        {
             Thread.Sleep(2000);
             WebCMSEntities db = new WebCMSEntities();
             Users user = db.Users.FirstOrDefault(m => m.Id == 2);
@@ -217,7 +217,7 @@ namespace MySystem.Controllers
         }
 
         public string scanMerchant()
-        { 
+        {
             SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
             PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
             var Mers = spdb.Merchants.OrderBy(m => m.Id).ToList();
@@ -333,7 +333,7 @@ namespace MySystem.Controllers
                                 {
                                     TradeAmount = TradeAmount / 100;
                                     BankCardType = int.Parse(trade.BankCardType);
-                                    if(trade.TradeType == "02") QrPayFlag = 1;
+                                    if (trade.TradeType == "02") QrPayFlag = 1;
                                 }
                                 else if (pos.BrandId == 2)
                                 {
@@ -345,7 +345,7 @@ namespace MySystem.Controllers
                                     {
                                         BankCardType = 0;
                                     }
-                                    if(trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
+                                    if (trade.TradeType == "CLOUD_PAY") QrPayFlag = 1;
                                 }
                                 int BrandId = int.Parse(trade.ProductType);
                                 if (trade.MerNo.StartsWith("M900"))
@@ -562,7 +562,7 @@ namespace MySystem.Controllers
                     RedisDbconn.Instance.AddInt("TotalUser:Auth:" + uid);
                 }
                 else
-                { 
+                {
                     RedisDbconn.Instance.AddList("MyMakerForNotAuth:" + uid, new MyMakerItem()
                     {
                         UserId = user.Id,
@@ -578,7 +578,7 @@ namespace MySystem.Controllers
         }
 
         public string resetpos(int uid, int kind)
-        { 
+        {
             WebCMSEntities db = new WebCMSEntities();
             string IdBrand = uid + "_" + kind;
             UserMachineData machineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
@@ -648,7 +648,7 @@ namespace MySystem.Controllers
         //重置本月团队交易额
         public string resetMonthTrade()
         {
-            
+
             return "";
         }
 
@@ -663,7 +663,7 @@ namespace MySystem.Controllers
             {
                 OtherMySqlConn.op("delete from TradeRecord where Id<" + id + ";insert into TradeRecord (Id,Sort,QueryCount,Status,Version,CreateDate,UpdateDate,CreateMan,UpdateMan,SeoTitle,SeoKeyword,SeoDescription,MerUserId,TopUserId,Remark,BrandId,DirectFlag,CapFlag,QrPayFlag,BankCardType,TradeAmount,TradeSerialNo,ClearDate,TradeDate,SnNo,MerBuddyType,HelpMonthCount,MerHelpFlag,MerNo,MerchantId,UserId,RecordNo) select Id,Sort,QueryCount,Status,Version,CreateDate,UpdateDate,CreateMan,UpdateMan,SeoTitle,SeoKeyword,SeoDescription,MerUserId,TopUserId,Remark,BrandId,DirectFlag,CapFlag,QrPayFlag,BankCardType,TradeAmount,TradeSerialNo,ClearDate,TradeDate,SnNo,MerBuddyType,HelpMonthCount,MerHelpFlag,MerNo,MerchantId,UserId,RecordNo from TradeRecordTest order by Id;");
             }
-            OtherMySqlConn.connstr = "";
+            // OtherMySqlConn.connstr = ;
             return "ok";
         }
 
@@ -690,9 +690,9 @@ namespace MySystem.Controllers
                 string SnNo = dr["SnNo"].ToString();
                 string MerNo = dr["MerNo"].ToString();
                 string RecordNo = dr["RecordNo"].ToString();
-                
+
                 MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
-                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo(); 
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
                 PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo();
                 ProfitSubsidyDetail item = db.ProfitSubsidyDetail.FirstOrDefault(m => m.SubsidyUserId == SubsidyUserId && m.TradeMonth == TradeMonth && m.MerchantId == MerchantId && m.SnNo == SnNo);
                 if (item == null)
@@ -735,7 +735,7 @@ namespace MySystem.Controllers
                     }
                 }
             }
-            OtherMySqlConn.connstr = "";
+            // OtherMySqlConn.connstr = ;
             db.Dispose();
             return result;
         }
@@ -797,9 +797,85 @@ namespace MySystem.Controllers
                     db.SaveChanges();
                 }
             }
-            OtherMySqlConn.connstr = "";
+            // OtherMySqlConn.connstr = ;
             db.Dispose();
             return result;
         }
+
+
+        public string prize888()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;";
+            List<Users> users = new List<Users>();
+            string preMonth = "2022-04";
+            string thisMonth = "2022-05";
+            string nextMonth = "2022-06";
+            var orders = db.Orders.Select(m => new { m.UserId, m.TotalPrice, m.Status }).Where(m => m.TotalPrice == 88 && m.Status > 0).ToList();
+            foreach (var order in orders)
+            {
+                int uid = order.UserId;
+                Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId) ?? new Users();
+                DataTable dt = OtherMySqlConn.dtable("select sum(TradeAmount) from TradeRecord where CreateDate>='" + preMonth + "-01 00:00:00' and CreateDate<'" + thisMonth + "-01 00:00:00' and UserId in (select Id from Users where ParentNav like '%," + uid + ",%' or Id=" + uid + ")");
+                if (dt.Rows.Count > 0)
+                {
+                    user.ActiveRewardAmount = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+                }
+                dt = OtherMySqlConn.dtable("select sum(TradeAmount) from TradeRecord where CreateDate>='" + thisMonth + "-01 00:00:00' and CreateDate<'" + nextMonth + "-01 00:00:00' and UserId in (select Id from Users where ParentNav like '%," + uid + ",%' or Id=" + uid + ")");
+                if (dt.Rows.Count > 0)
+                {
+                    user.ProfitRewardRate = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+                }
+                users.Add(user);
+            }
+            List<int> gotList = new List<int>();
+            foreach (Users user in users)
+            {
+                decimal preMonthAmt = user.ActiveRewardAmount;
+                decimal thisMonthAmt = user.ProfitRewardRate;
+                if (thisMonthAmt >= 2000000 && thisMonthAmt >= preMonthAmt * 2)
+                {
+                    List<Users> subusers = users.Where(m => m.ParentUserId == user.Id).ToList();
+                    if (subusers.Count > 0)
+                    {
+                        decimal thisMonthAmtSelf = user.ProfitRewardRate;
+                        foreach (Users subuser in subusers)
+                        {
+                            if (subuser.ProfitRewardRate >= 2000000 && subuser.ProfitRewardRate >= subuser.ActiveRewardAmount * 2)
+                            {
+                                thisMonthAmtSelf -= subuser.ProfitRewardRate;
+                            }
+                        }
+                        if (thisMonthAmtSelf >= 2000000 && thisMonthAmtSelf >= preMonthAmt * 2)
+                        {
+                            if (!gotList.Contains(user.Id))
+                            {
+                                function.WriteLog(user.RealName + "--" + user.MakerCode + "--满足条件--上月交易:" + preMonthAmt + "--本月交易:" + thisMonthAmt, "888奖励日志");
+                                gotList.Add(user.Id);
+                            }
+                        }
+                        else
+                        {
+                            function.WriteLog(user.RealName + "--" + user.MakerCode + "--未满足条件--上月交易:" + preMonthAmt + "--本月交易:" + thisMonthAmt, "888奖励日志");
+                        }
+                    }
+                    else
+                    {
+                        if (!gotList.Contains(user.Id))
+                        {
+                            function.WriteLog(user.RealName + "--" + user.MakerCode + "--满足条件--上月交易:" + preMonthAmt + "--本月交易:" + thisMonthAmt, "888奖励日志");
+                            gotList.Add(user.Id);
+                        }
+                    }
+                }
+                else
+                {
+                    function.WriteLog(user.RealName + "--" + user.MakerCode + "--未满足条件--上月交易:" + preMonthAmt + "--本月交易:" + thisMonthAmt, "888奖励日志");
+                }
+            }
+            db.Dispose();
+            return "ok";
+        }
+
     }
 }

+ 3 - 1
Startup.cs

@@ -89,7 +89,7 @@ namespace MySystem
             // services.AddHostedService<TeamTopService>();
             // services.AddHostedService<PopService>();
             // services.AddHostedService<SycnSpTimer>(); //同步SP数据
-            
+
             services.AddHostedService<TimerStatTimer>(); //实时统计创客、激活商户数
             services.AddHostedService<PosTradeStatTimer>(); // 统计头天的交易额、商户型创客、激活奖励、开机奖励
             services.AddHostedService<AlipayPayBack2Timer>(); //支付宝回调处理
@@ -228,6 +228,8 @@ namespace MySystem
             SycnSpMerchantService.Instance.Start(); //同步SP商户数据
             SycnSpActiveService.Instance.Start(); //同步SP激活数据
             SycnSpTradeService.Instance.Start(); //同步SP交易数据
+            StatService.Instance.StartPosActNum(); //实时统计激活数
+            StatService.Instance.StartNewUserNum(); //实时统计新增创客数
             //必须打开的
 
 

+ 5 - 5
appsettings.json

@@ -17,11 +17,11 @@
     "Host": "http://localhost:5047/",
     "SourceHost": "http://bs.kexiaoshuang.com/",
     "Database": "KxsMainServer",
-    "SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "Pxc1SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "SpSqlConnStr": "server=localhost;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
-    "RedisConnStr": "localhost:6379,password=,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
-    "TendisConnStr": "localhost:6379,password=,DefaultDatabase=15,poolsize=500,preheat=50,asyncPipeline=true",
+    "SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.109.31.237;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=47.109.31.237;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
+    "TendisConnStr": "47.109.31.237:6379,password=klm@redis,DefaultDatabase=1,poolsize=500,preheat=50,asyncPipeline=true",
     "IOSAppVersion": "1.0.0",
     "AndroidAppVersion": "1.0.0",
     "OSSKey": "iL9dWgBunZRwGbHQ",