using System; using System.Collections.Generic; using Library; using LitJson; using System.Linq; using System.Data; using System.Threading; using MySystem.Models; namespace MySystem { public class OperatePrizeService { public readonly static OperatePrizeService Instance = new OperatePrizeService(); private OperatePrizeService() { } public void Start() { Thread th = new Thread(dosomething); th.IsBackground = true; th.Start(); } public void dosomething() { while (true) { string data = RedisDbconn.Instance.RPop("OperatePrizeQueue"); if (!string.IsNullOrEmpty(data)) { try { int PosId = int.Parse(function.CheckInt(data)); WebCMSEntities db = new WebCMSEntities(); PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId); if (pos != null) { int OpId = 0; int UserId = pos.BuyUserId; while(UserId > 0) { Users user = db.Users.FirstOrDefault(m => m.Id == UserId); if(user != null) { if(user.UserType == 1) { OpId = user.Id; UserId = 0; } else { UserId = user.ParentUserId; } } else { UserId = 0; } } if(OpId > 0) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == OpId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = OpId, UserId = OpId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += 5; account.TotalAmount += 5; 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 = OpId, //创客 ChangeType = 121, //变动类型 ChangeAmount = 5, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = PosId, }).Entity; db.SaveChanges(); } } db.Dispose(); } catch (Exception ex) { LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "运营中心奖励异常"); } Thread.Sleep(100); } else { Thread.Sleep(60000); } } } } }