|
|
@@ -93,6 +93,18 @@ namespace MySystem
|
|
|
MoreAmount = decimal.Parse(function.CheckInt(MoreAmount.ToString().Split(".")[0]));
|
|
|
// }
|
|
|
selfStat.TradeAmount += TradeAmount + MoreAmount;
|
|
|
+
|
|
|
+ HelpProfitAmountSummary profitStat = db.HelpProfitAmountSummary.FirstOrDefault(m => m.UserId == merIds.UserId && m.TradeMonth == TradeMonth);
|
|
|
+ if (profitStat == null)
|
|
|
+ {
|
|
|
+ profitStat = db.HelpProfitAmountSummary.Add(new HelpProfitAmountSummary()
|
|
|
+ {
|
|
|
+ TradeMonth = TradeMonth,
|
|
|
+ UserId = merIds.UserId,
|
|
|
+ }).Entity;
|
|
|
+ db.SaveChanges();
|
|
|
+ }
|
|
|
+ profitStat.TradeAmount += TradeAmount;
|
|
|
}
|
|
|
}
|
|
|
OtherMySqlConn.op("update TradeRecord set QueryCount=3 where Id in (" + ids.TrimEnd(',') + ")");
|
|
|
@@ -112,35 +124,108 @@ namespace MySystem
|
|
|
function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行助利宝交易额日志");
|
|
|
}
|
|
|
|
|
|
+ // 统计创客商机台数
|
|
|
+ public void StartUserTrade()
|
|
|
+ {
|
|
|
+ Thread th = new Thread(StartUserTradeDo);
|
|
|
+ th.IsBackground = true;
|
|
|
+ th.Start();
|
|
|
+ }
|
|
|
+ public void StartUserTradeDo()
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ if (DateTime.Now.Hour >= 3)
|
|
|
+ {
|
|
|
+ StartUserTradeGo();
|
|
|
+ }
|
|
|
+ Thread.Sleep(30000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void StartUserTradeGo()
|
|
|
+ {
|
|
|
+ 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/HelpProfitMerchantForUserId.txt");
|
|
|
+ if (string.IsNullOrEmpty(startId))
|
|
|
+ {
|
|
|
+ startId = "0";
|
|
|
+ }
|
|
|
+ DataTable idsDt = OtherMySqlConn.dtable("select Id from HelpProfitMerchantForUser where Id>=" + startId + " and Status=0 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 UserId,DATE_FORMAT(CreateDate,'%Y%m'),count(Id) from HelpProfitMerchantForUser where Id in (" + ids.TrimEnd(',') + ") group by UserId,DATE_FORMAT(CreateDate,'%Y%m')");
|
|
|
+ if (selfDt.Rows.Count > 0)
|
|
|
+ {
|
|
|
+ function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时统计助利宝创客交易额日志");
|
|
|
+ foreach (DataRow selfDr in selfDt.Rows)
|
|
|
+ {
|
|
|
+ int UserId = int.Parse(selfDr["UserId"].ToString());
|
|
|
+ string TradeMonth = selfDr[1].ToString();
|
|
|
+ int MerCount = int.Parse(selfDr[2].ToString());
|
|
|
+ HelpProfitAmountSummary selfStat = db.HelpProfitAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth);
|
|
|
+ if (selfStat == null)
|
|
|
+ {
|
|
|
+ selfStat = db.HelpProfitAmountSummary.Add(new HelpProfitAmountSummary()
|
|
|
+ {
|
|
|
+ TradeMonth = TradeMonth,
|
|
|
+ UserId = UserId,
|
|
|
+ }).Entity;
|
|
|
+ db.SaveChanges();
|
|
|
+ }
|
|
|
+ selfStat.MerCount += MerCount;
|
|
|
+ selfStat.MaxAmount += EveryMonthFixedVal()[selfStat.QueryCount] * MerCount;
|
|
|
+ }
|
|
|
+ OtherMySqlConn.op("update HelpProfitMerchantForUser set Status=1 where Id in (" + ids.TrimEnd(',') + ")");
|
|
|
+ function.WritePage("/TradeRecord/", "HelpProfitMerchantForUserId.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)
|
|
|
+ HelpProfitAmountSummary Summary = db.HelpProfitAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth) ?? new HelpProfitAmountSummary();
|
|
|
+ decimal MaxTradeAmount = Summary.MaxAmount; //当月最大交易总额
|
|
|
+ decimal CheckAmount = 500000 < MaxTradeAmount * 0.3M ? 500000 : MaxTradeAmount * 0.3M;
|
|
|
+ //当月单台交易额 <= 50万或当月最大交易总额的30%(取小值),则入账
|
|
|
+ decimal SingleTradeAmount = 0;
|
|
|
+ bool MerCheck = db.HelpProfitMerTradeSummay.Any(m => m.MerchantId == MerchantId && m.TradeMonth == TradeMonth);
|
|
|
+ if(MerCheck)
|
|
|
{
|
|
|
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)
|
|
|
+ //当月总交易额不超过当月最大交易总额,则入账
|
|
|
+ if (Summary.TradeAmount < CheckAmount)
|
|
|
{
|
|
|
- CheckAmount = decimal.Parse(function.CheckNum(dt.Rows[0]["TradeAmount"].ToString())); //当月总交易额
|
|
|
- //当月总交易额不超过当月最大交易总额,则入账
|
|
|
- if (CheckAmount < MaxTradeAmount)
|
|
|
- {
|
|
|
- return true;
|
|
|
- }
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
@@ -150,6 +235,7 @@ namespace MySystem
|
|
|
private Dictionary<int, decimal> EveryMonthFixedVal()
|
|
|
{
|
|
|
Dictionary<int, decimal> obj = new Dictionary<int, decimal>();
|
|
|
+ obj.Add(0, 0M);
|
|
|
obj.Add(1, 7M);
|
|
|
obj.Add(2, 6M);
|
|
|
obj.Add(3, 5M);
|
|
|
@@ -176,5 +262,109 @@ namespace MySystem
|
|
|
obj.Add(24, 0.1M);
|
|
|
return obj;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ #region 每月重置最大交易总额
|
|
|
+ public void ResetMaxTradeAmount()
|
|
|
+ {
|
|
|
+ Thread th = new Thread(ResetMaxTradeAmountDo);
|
|
|
+ th.IsBackground = true;
|
|
|
+ th.Start();
|
|
|
+ }
|
|
|
+ public void ResetMaxTradeAmountDo()
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ if (DateTime.Now.Hour > 0 && DateTime.Now.Hour < 3)
|
|
|
+ {
|
|
|
+ ResetMaxTradeAmountGo();
|
|
|
+ }
|
|
|
+ Thread.Sleep(30000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void ResetMaxTradeAmountGo()
|
|
|
+ {
|
|
|
+ while(true)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string TradeMonth = DateTime.Now.ToString("yyyyMM");
|
|
|
+ string CheckExist = function.ReadInstance("/HelpProfitAmountSummary/" + TradeMonth + ".txt");
|
|
|
+ if(string.IsNullOrEmpty(CheckExist))
|
|
|
+ {
|
|
|
+ function.WritePage("/HelpProfitAmountSummary/", TradeMonth + ".txt", DateTime.Now.ToString());
|
|
|
+ string StartDate = DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00";
|
|
|
+ string EndDate = DateTime.Now.AddMonths(1).ToString("yyyy-MM") + "-01 00:00:00";
|
|
|
+ WebCMSEntities db = new WebCMSEntities();
|
|
|
+ OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
|
|
|
+ DataTable userlist = OtherMySqlConn.dtable("select DISTINCT UserId from HelpProfitMerchantForUser order by UserId desc");
|
|
|
+ foreach (DataRow user in userlist.Rows)
|
|
|
+ {
|
|
|
+ int UserId = int.Parse(user[0].ToString());
|
|
|
+ int Month = db.HelpProfitAmountSummary.Count(m => m.UserId == UserId);
|
|
|
+ if(Month > 24)
|
|
|
+ {
|
|
|
+ Month = 24;
|
|
|
+ }
|
|
|
+ decimal MonthAmount2 = 0; //上月额度
|
|
|
+ decimal MonthAmount3 = 0; //上上月额度
|
|
|
+ if(Month > 1)
|
|
|
+ {
|
|
|
+ MonthAmount2 = EveryMonthFixedVal()[Month - 1]; //上月额度
|
|
|
+ }
|
|
|
+ if(Month > 2)
|
|
|
+ {
|
|
|
+ MonthAmount3 = EveryMonthFixedVal()[Month - 2]; //上上月额度
|
|
|
+ }
|
|
|
+ List<int> MerCounts = new List<int>(); //近2月月台数,不包含当月
|
|
|
+ int MerCount2 = 0; //上月台数
|
|
|
+ int MerCount3 = 0; //上上月台数
|
|
|
+ List<HelpProfitAmountSummary> Summarys = db.HelpProfitAmountSummary.Where(m => m.UserId == UserId).OrderByDescending(m => m.TradeMonth).ToList();
|
|
|
+ foreach(HelpProfitAmountSummary Summary in Summarys)
|
|
|
+ {
|
|
|
+ if(Summary.MerCount > 0 && MerCounts.Count < 3)
|
|
|
+ {
|
|
|
+ MerCounts.Add(Summary.MerCount);
|
|
|
+ }
|
|
|
+ if(MerCounts.Count >= 3)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(MerCounts.Count > 0)
|
|
|
+ {
|
|
|
+ MerCount2 = MerCounts[0];
|
|
|
+ }
|
|
|
+ if(MerCounts.Count > 1)
|
|
|
+ {
|
|
|
+ MerCount3 = MerCounts[1];
|
|
|
+ }
|
|
|
+ decimal MaxTradeAmount = MerCount2 * MonthAmount2 + MerCount3 * MonthAmount3; //当月最大交易总额
|
|
|
+ HelpProfitAmountSummary selfStat = db.HelpProfitAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth);
|
|
|
+ if (selfStat == null)
|
|
|
+ {
|
|
|
+ selfStat = db.HelpProfitAmountSummary.Add(new HelpProfitAmountSummary()
|
|
|
+ {
|
|
|
+ TradeMonth = TradeMonth,
|
|
|
+ UserId = UserId,
|
|
|
+ QueryCount = Month,
|
|
|
+ }).Entity;
|
|
|
+ db.SaveChanges();
|
|
|
+ }
|
|
|
+ selfStat.MaxAmount = MaxTradeAmount;
|
|
|
+ }
|
|
|
+ db.SaveChanges();
|
|
|
+ db.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(Exception ex)
|
|
|
+ {
|
|
|
+ function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月重置最大交易总额异常");
|
|
|
+ }
|
|
|
+ Thread.Sleep(600000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|