using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Threading; using MySystem.Models; using Library; using LitJson; namespace MySystem { public class ActiveRewardService { public readonly static ActiveRewardService Instance = new ActiveRewardService(); private ActiveRewardService() { } //激活奖 public void StartAct() { Thread th = new Thread(StartActListen); th.IsBackground = true; th.Start(); } private void StartActListen() { while(true) { if(RedisDbconn.Instance.Get("ActiveRewardThreadStatus") == "1") { StartActDo(); Thread.Sleep(5000); } } } public void StartActDo() { WebCMSEntities db = new WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); DateTime yesterday = DateTime.Now.AddDays(-1); IQueryable orderList = db.MerchantDepositOrder.Where(m => m.Status == 1 && m.UpdateDate >= yesterday); foreach (MerchantDepositOrder order in orderList.ToList()) { doActiveReward(db, kxsdb, order, 300); RedisDbconn.Instance.AddList("OpenRewardQueue1", order.MerchantId); RedisDbconn.Instance.AddList("LeaderPrizeQueue1", order.MerchantId); RedisDbconn.Instance.AddList("OperatePrizeQueue1", order.MerchantId); MerchantDepositOrder edit = db.MerchantDepositOrder.FirstOrDefault(m => m.Id == order.Id); if(edit != null) { edit.Status = 2; db.SaveChanges(); } } db.Dispose(); kxsdb.Dispose(); } public void doActiveReward(WebCMSEntities db, KxsMainModels.WebCMSEntities kxsdb, MerchantDepositOrder order, decimal ActPrize) { MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantInfo(); KxsMainModels.Users user = kxsdb.Users.FirstOrDefault(m => m.Id == merchant.UserId) ?? new KxsMainModels.Users(); int GetUserId = user.Id; string ParentNav = user.ParentNav; int TopUserId = 0; if (!string.IsNullOrEmpty(ParentNav)) { TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]); } string IdBrand = GetUserId + "_0"; 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(); KxsMainModels.UserAccount account = kxsdb.UserAccount.FirstOrDefault(m => m.Id == GetUserId); if (account == null) { account = kxsdb.UserAccount.Add(new KxsMainModels.UserAccount() { Id = GetUserId, UserId = GetUserId, }).Entity; kxsdb.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; //变更后余额 KxsMainModels.UserAccountRecord userAccountRecord = kxsdb.UserAccountRecord.Add(new KxsMainModels.UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = GetUserId, //创客 ChangeType = 311, //变动类型 ChangeAmount = ActPrize, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = merchant.Id, }).Entity; kxsdb.SaveChanges(); } //开户奖 public void StartOpenReward() { Thread th = new Thread(StartOpenRewardDo); th.IsBackground = true; th.Start(); } public void StartOpenRewardDo() { while(true) { string content = RedisDbconn.Instance.RPop("OpenRewardQueue1"); if(!string.IsNullOrEmpty(content)) { try { WebCMSEntities db = new WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); function.WriteLog("\n\n" + DateTime.Now.ToString() + "\nposid:" + content, "开机奖励发放日志"); int MerchantId = int.Parse(content); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId); if (merchant != null) { function.WriteLog("商户:" + merchant.Name, "开机奖励发放日志"); KxsMainModels.Users user = kxsdb.Users.FirstOrDefault(m => m.Id == merchant.UserId); if (user != null) { function.WriteLog("所属人:" + user.MakerCode, "开机奖励发放日志"); string ParentNav = function.CheckNull(user.ParentNav) + "," + user.Id + ","; if (!string.IsNullOrEmpty(ParentNav)) { decimal Prize = 20; string[] ParentNavs = ParentNav.Trim(',').Replace(",,", ",").Split(','); for (int i = ParentNavs.Length - 1; i >= 0; i--) { int UserId = int.Parse(ParentNavs[i]); KxsMainModels.Users puser = kxsdb.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1); if (puser != null && Prize > 0) { function.WriteLog("上级:" + puser.MakerCode, "开机奖励发放日志"); function.WriteLog("条件:LeaderLevel:" + puser.LeaderLevel + ",UserType:" + puser.UserType, "开机奖励发放日志"); if(puser.LeaderLevel > 0 || puser.UserType == 1) { bool leaderOp = true; if(puser.LeaderLevel > 0 && puser.UserType == 0) { DateTime now = DateTime.Now; leaderOp = kxsdb.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now); function.WriteLog("条件:leaderOp:" + leaderOp, "开机奖励发放日志"); } if(leaderOp) { function.WriteLog("满足条件", "开机奖励发放日志"); int pTopUserId = 0; if (!string.IsNullOrEmpty(puser.ParentNav)) { pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]); } string IdBrand = puser.Id + "_0"; 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(); //账户入库 KxsMainModels.UserAccount account = kxsdb.UserAccount.FirstOrDefault(m => m.Id == puser.Id); if (account == null) { account = kxsdb.UserAccount.Add(new KxsMainModels.UserAccount() { Id = puser.Id, UserId = puser.Id, }).Entity; kxsdb.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; //变更后余额 KxsMainModels.UserAccountRecord userAccountRecord = kxsdb.UserAccountRecord.Add(new KxsMainModels.UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = puser.Id, //创客 ChangeType = 312, //变动类型 ChangeAmount = Prize, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = MerchantId, }).Entity; kxsdb.SaveChanges(); Prize = 0; } } } } } } } db.Dispose(); kxsdb.Dispose(); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "实时获取开机奖励异常"); } } else { Thread.Sleep(5000); } } } //盟主奖 public void StartLeaderReward() { Thread th = new Thread(StartLeaderRewardDo); th.IsBackground = true; th.Start(); } public void StartLeaderRewardDo() { while (true) { string content = RedisDbconn.Instance.RPop("LeaderPrizeQueue1"); if (!string.IsNullOrEmpty(content)) { try { WebCMSEntities db = new WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); function.WriteLog("\n\n" + DateTime.Now.ToString() + "\nposid:" + content, "盟主奖励发放日志"); int MerchantId = int.Parse(content); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId); if (merchant != null) { function.WriteLog("商户:" + merchant.Name, "盟主奖励发放日志"); KxsMainModels.Users user = kxsdb.Users.FirstOrDefault(m => m.Id == merchant.UserId); if (user != null) { function.WriteLog("所属人:" + user.MakerCode, "盟主奖励发放日志"); string ParentNav = function.CheckNull(user.ParentNav) + "," + user.Id + ","; if (!string.IsNullOrEmpty(ParentNav)) { decimal Prize = 10; string[] ParentNavs = ParentNav.Trim(',').Replace(",,", ",").Split(','); for (int i = ParentNavs.Length - 1; i >= 0; i--) { int UserId = int.Parse(ParentNavs[i]); KxsMainModels.Users puser = kxsdb.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1); if (puser != null && Prize > 0) { function.WriteLog("上级:" + puser.MakerCode, "盟主奖励发放日志"); function.WriteLog("条件:LeaderLevel:" + puser.LeaderLevel + ",UserType:" + puser.UserType, "盟主奖励发放日志"); if(puser.LeaderLevel == 2) { DateTime now = DateTime.Now; bool leaderOp = kxsdb.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now); function.WriteLog("条件:leaderOp:" + leaderOp, "盟主奖励发放日志"); if(leaderOp) { function.WriteLog("满足条件", "盟主奖励发放日志"); int pTopUserId = 0; if (!string.IsNullOrEmpty(puser.ParentNav)) { pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]); } string IdBrand = puser.Id + "_0"; 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(); //账户入库 KxsMainModels.UserAccount account = kxsdb.UserAccount.FirstOrDefault(m => m.Id == puser.Id); if (account == null) { account = kxsdb.UserAccount.Add(new KxsMainModels.UserAccount() { Id = puser.Id, UserId = puser.Id, }).Entity; kxsdb.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; //变更后余额 KxsMainModels.UserAccountRecord userAccountRecord = kxsdb.UserAccountRecord.Add(new KxsMainModels.UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = puser.Id, //创客 ChangeType = 313, //变动类型 ChangeAmount = Prize, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = MerchantId, }).Entity; kxsdb.SaveChanges(); Prize = 0; } } } } } } } db.Dispose(); kxsdb.Dispose(); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "盟主奖发放日志异常"); } Thread.Sleep(100); } else { Thread.Sleep(60000); } } } //运营中心奖 public void StartOperateReward() { Thread th = new Thread(StartOperateRewardDo); th.IsBackground = true; th.Start(); } public void StartOperateRewardDo() { while (true) { string content = RedisDbconn.Instance.RPop("OperatePrizeQueue1"); if (!string.IsNullOrEmpty(content)) { try { WebCMSEntities db = new WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); function.WriteLog("\n\n" + DateTime.Now.ToString() + "\nposid:" + content, "运营中心奖励发放日志"); int MerchantId = int.Parse(content); MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId); if (merchant != null) { function.WriteLog("商户:" + merchant.Name, "运营中心奖励发放日志"); KxsMainModels.Users user = kxsdb.Users.FirstOrDefault(m => m.Id == merchant.UserId); if (user != null) { function.WriteLog("所属人:" + user.MakerCode, "运营中心奖励发放日志"); string ParentNav = function.CheckNull(user.ParentNav) + "," + user.Id + ","; if (!string.IsNullOrEmpty(ParentNav)) { decimal Prize = 5; string[] ParentNavs = ParentNav.Trim(',').Replace(",,", ",").Split(','); for (int i = ParentNavs.Length - 1; i >= 0; i--) { int UserId = int.Parse(ParentNavs[i]); KxsMainModels.Users puser = kxsdb.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1); if (puser != null && Prize > 0) { function.WriteLog("上级:" + puser.MakerCode, "运营中心奖励发放日志"); function.WriteLog("条件:LeaderLevel:" + puser.LeaderLevel + ",UserType:" + puser.UserType, "运营中心奖励发放日志"); if(puser.UserType == 1) { function.WriteLog("满足条件", "运营中心奖励发放日志"); int pTopUserId = 0; if (!string.IsNullOrEmpty(puser.ParentNav)) { pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]); } string IdBrand = puser.Id + "_0"; 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(); //账户入库 KxsMainModels.UserAccount account = kxsdb.UserAccount.FirstOrDefault(m => m.Id == puser.Id); if (account == null) { account = kxsdb.UserAccount.Add(new KxsMainModels.UserAccount() { Id = puser.Id, UserId = puser.Id, }).Entity; kxsdb.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; //变更后余额 KxsMainModels.UserAccountRecord userAccountRecord = kxsdb.UserAccountRecord.Add(new KxsMainModels.UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = puser.Id, //创客 ChangeType = 314, //变动类型 ChangeAmount = Prize, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = MerchantId, }).Entity; kxsdb.SaveChanges(); Prize = 0; } } } } } } db.Dispose(); kxsdb.Dispose(); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "运营中心奖发放日志异常"); } Thread.Sleep(100); } else { Thread.Sleep(60000); } } } } }