using System; using System.Collections.Generic; using System.Linq; using System.Data; using MySystem.PxcModels; using Library; using System.Threading; using Microsoft.Extensions.Hosting; using System.Threading.Tasks; namespace MySystem { public class HelpProfitHelper { public readonly static HelpProfitHelper Instance = new HelpProfitHelper(); private HelpProfitHelper() { } public void Start() { Thread th = new Thread(StartFor); th.IsBackground = true; th.Start(); } public void StartFor() { while (true) { if(DateTime.Now.Hour >= 2)// && DateTime.Now.Hour <= 3) { StatProfitEveryDay(DateTime.Now.AddDays(-1).ToString("yyyyMMdd")); } Thread.Sleep(600000); } } public void StatProfitEveryDay(string Date) { string check = function.ReadInstance("/HelpProfitStat/" + Date + ".txt"); if (!string.IsNullOrEmpty(check)) { return; } function.WritePage("/HelpProfitStat/", Date + ".txt", DateTime.Now.ToString()); WebCMSEntities db = new WebCMSEntities(); List list = db.HelpProfitMerTradeSummay.Where(m => m.TradeDate == Date).ToList(); foreach(HelpProfitMerTradeSummay sub in list) { int MerchantId = sub.MerchantId; decimal TradeAmount = sub.TradeAmount; HelpProfitMerchantForUser merchant = db.HelpProfitMerchantForUser.FirstOrDefault(m => m.MerchantId == MerchantId); if(merchant != null) { int UserId = merchant.UserId; PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo(); MachineForMerNo merFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == mer.KqMerNo) ?? new MachineForMerNo(); PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == merFor.SnId) ?? new PosMachinesTwo(); string Name = mer.MerchantName; if (mer.BrandId == 2) { if (Name.Contains("-")) { Name = Name.Split('-')[1]; } else if (Name.Contains("_")) { Name = Name.Split('_')[1]; } } Name = Name.Replace("个体户", ""); Name = Name.Replace("个体商户", ""); Name = Name.Replace("企业户", ""); Name = Name.Replace("企业商户", ""); Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users(); Users puser = db.Users.FirstOrDefault(m => m.Id == user.ParentUserId) ?? new Users(); decimal money = TradeAmount * 0.0005M; decimal money2 = TradeAmount * 0.00005M; UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.HelpProfitBalanceAmount += money; decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额 UserAccountRecord accountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Sort = MerchantId, UserId = UserId, //创客 ProductType = 101, //产品类型 ChangeType = 1, ChangeAmount = money, //变更金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 Remark = Name.Substring(0, 1) + "**:" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "交易" + TradeAmount.ToString("f2"), }).Entity; AddProfitRecord(db, user, pos, mer, money, DateTime.Now.AddDays(-1), 1); db.SaveChanges(); account = db.UserAccount.FirstOrDefault(m => m.Id == user.ParentUserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = user.ParentUserId, UserId = user.ParentUserId, }).Entity; db.SaveChanges(); } BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.HelpProfitBalanceAmount += money2; AfterBalanceAmount = account.BalanceAmount; //变更后余额 accountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Sort = MerchantId, UserId = user.ParentUserId, //创客 ProductType = 101, //产品类型 ChangeType = 112, ChangeAmount = money2, //变更金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 Remark = Name.Substring(0, 1) + "**:" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "交易" + TradeAmount.ToString("f2"), }).Entity; AddProfitRecord(db, puser, pos, mer, money, DateTime.Now.AddDays(-1), 112); db.SaveChanges(); string Month = Date.Substring(0, 6); HelpProfitRebateDetail selfStat = db.HelpProfitRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == Month && m.TradeDate == Date); if (selfStat == null) { selfStat = db.HelpProfitRebateDetail.Add(new HelpProfitRebateDetail() { TradeMonth = Month, TradeDate = Date, UserId = UserId, }).Entity; db.SaveChanges(); } selfStat.CreditRewardAmount += money; selfStat = db.HelpProfitRebateDetail.FirstOrDefault(m => m.UserId == user.ParentUserId && m.TradeMonth == Month && m.TradeDate == Date); if (selfStat == null) { selfStat = db.HelpProfitRebateDetail.Add(new HelpProfitRebateDetail() { TradeMonth = Month, TradeDate = Date, UserId = user.ParentUserId, }).Entity; db.SaveChanges(); } selfStat.CreditRewardAmount += money2; db.SaveChanges(); } } db.Dispose(); } private void AddProfitRecord(WebCMSEntities db, Users puser, PosMachinesTwo pos, PosMerchantInfo merchant, decimal Prize, DateTime yesterday, int RewardType) { string RewardDesc = "助利宝分润"; if(RewardType == 112) { RewardDesc = "助利宝推荐分润"; } 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 = RewardType, //奖励类型 RewardTips = RewardDesc, //奖励描述 CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额 DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额 CreditRewardAmount = Prize, //贷记卡交易奖励金额 RewardDesc = RewardDesc, //奖励描述 }).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 = RewardType, //奖励类型 CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额 DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额 CreditRewardAmount = Prize, //贷记卡交易奖励金额 RewardDesc = RewardDesc, //奖励描述 }); } } }