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 StatHelpProfitService { public readonly static StatHelpProfitService Instance = new StatHelpProfitService(); private StatHelpProfitService() { } // 统计交易额V2 public void StartEverDayV2() { Thread th = new Thread(StartEverDayV2Do); th.IsBackground = true; th.Start(); } public void StartEverDayV2Do() { while (true) { if (DateTime.Now.Hour >= 3) { StatTradeAmountEverDayV2(); } Thread.Sleep(30000); } } public void StatTradeAmountEverDayV2() { OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行助利宝交易额日志"); WebCMSEntities db = new WebCMSEntities(); using (var tran = db.Database.BeginTransaction()) { try { string startId = function.ReadInstance("/TradeRecord/Id3.txt"); if (string.IsNullOrEmpty(startId)) { startId = "2750000"; } DataTable idsDt = OtherMySqlConn.dtable("select Id from TradeRecord where Id>=" + startId + " and CreateDate>='2022-09-05 00:00:00' and MerchantId in (select MerchantId from HelpProfitMerIds) and SeoTitle='HelpProfit' and QueryCount>0 and QueryCount<3 order by Id limit 50"); if (idsDt.Rows.Count > 0) { string ids = ""; foreach (DataRow idsDr in idsDt.Rows) { ids += idsDr["Id"].ToString() + ","; startId = idsDr["Id"].ToString(); } DataTable selfDt = OtherMySqlConn.dtable("select MerchantId,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount) from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by MerchantId,DATE_FORMAT(CreateDate,'%Y%m%d')"); if (selfDt.Rows.Count > 0) { function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时执行助利宝交易额日志"); foreach (DataRow selfDr in selfDt.Rows) { int MerchantId = int.Parse(selfDr["MerchantId"].ToString()); string TradeDate = selfDr[1].ToString(); string TradeMonth = TradeDate.Substring(0, 6); decimal TradeAmount = decimal.Parse(selfDr[2].ToString()); HelpProfitMerIds merIds = db.HelpProfitMerIds.FirstOrDefault(m => m.MerchantId == MerchantId) ?? new HelpProfitMerIds(); bool Check = CheckAmount(db, MerchantId, merIds.UserId, TradeMonth); if (Check) { HelpProfitMerTradeSummay selfStat = db.HelpProfitMerTradeSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate); if (selfStat == null) { selfStat = db.HelpProfitMerTradeSummay.Add(new HelpProfitMerTradeSummay() { TradeMonth = TradeMonth, TradeDate = TradeDate, MerchantId = MerchantId, }).Entity; db.SaveChanges(); } decimal MoreAmount = TradeAmount * 0.01M; int random = function.get_Random(0, 10000); // if(MoreAmount > 1 && random < 5000) // { MoreAmount = decimal.Parse(function.CheckInt(MoreAmount.ToString().Split(".")[0])); // } selfStat.TradeAmount += TradeAmount + MoreAmount; } } OtherMySqlConn.op("update TradeRecord set QueryCount=3 where Id in (" + ids.TrimEnd(',') + ")"); function.WritePage("/TradeRecord/", "Id3.txt", startId); } db.SaveChanges(); } tran.Commit(); } catch (Exception ex) { tran.Rollback(); function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行助利宝交易额异常"); } } db.Dispose(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行助利宝交易额日志"); } //计算商户交易额是否入账 private bool CheckAmount(WebCMSEntities db, int MerchantId, int UserId, string TradeMonth) { int Month = 1; decimal SingleTradeAmount = 0; //当月单台交易额 bool check = db.HelpProfitMerTradeSummay.Any(m => m.MerchantId == MerchantId); if (check) { SingleTradeAmount = db.HelpProfitMerTradeSummay.Where(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth).Sum(m => m.TradeAmount); Month = db.HelpProfitMerTradeSummay.Select(m => new { m.MerchantId, m.TradeMonth }).Where(m => m.MerchantId == MerchantId && Convert.ToInt32(m.TradeMonth) <= Convert.ToInt32(TradeMonth)).ToList().Select(m => m.TradeMonth).Distinct().Count(); } decimal MonthAmount1 = EveryMonthFixedVal()[Month]; //当月额度 decimal MonthAmount2 = EveryMonthFixedVal()[Month + 1]; //上月额度 decimal MonthAmount3 = EveryMonthFixedVal()[Month + 2]; //上上月额度 decimal MaxTradeAmount = 10 * MonthAmount1 + 20 * MonthAmount2 + 10 * MonthAmount3; //当月最大交易总额 decimal CheckAmount = 500000 < MaxTradeAmount * 0.3M ? 500000 : MaxTradeAmount * 0.3M; //当月单台交易额 <= 50万或当月最大交易总额的30%(取小值),则入账 if (SingleTradeAmount < CheckAmount) { OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString(); DataTable dt = OtherMySqlConn.dtable("SELECT SUM(TradeAmount) TradeAmount FROM HelpProfitMerTradeSummay WHERE MerchantId IN(SELECT MerchantId FROM HelpProfitMerIds WHERE UserId IN(SELECT Id from Users WHERE ParentNav like '%," + UserId + ",%' OR Id=" + UserId + ")) AND TradeMonth='" + TradeMonth + "'"); if (dt.Rows.Count > 0) { CheckAmount = decimal.Parse(function.CheckNum(dt.Rows[0]["TradeAmount"].ToString())); //当月总交易额 //当月总交易额不超过当月最大交易总额,则入账 if (CheckAmount < MaxTradeAmount) { return true; } } } return false; } //商户24个月,每月固定额度 private Dictionary EveryMonthFixedVal() { Dictionary obj = new Dictionary(); obj.Add(1, 7M); obj.Add(2, 6M); obj.Add(3, 5M); obj.Add(4, 4M); obj.Add(5, 3M); obj.Add(6, 3M); obj.Add(7, 2.7M); obj.Add(8, 2.5M); obj.Add(9, 2M); obj.Add(10, 1.7M); obj.Add(11, 1.4M); obj.Add(12, 1.4M); obj.Add(13, 1.3M); obj.Add(14, 1.2M); obj.Add(15, 1.2M); obj.Add(16, 1M); obj.Add(17, 0.8M); obj.Add(18, 0.7M); obj.Add(19, 0.6M); obj.Add(20, 0.5M); obj.Add(21, 0.4M); obj.Add(22, 0.3M); obj.Add(23, 0.2M); obj.Add(24, 0.1M); return obj; } } }