StatBusinessService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. using System;
  2. using System.Collections.Generic;
  3. using Library;
  4. using LitJson;
  5. using System.Linq;
  6. using System.Data;
  7. using System.Threading;
  8. using MySystem.PxcModels;
  9. namespace MySystem
  10. {
  11. public class StatBusinessService
  12. {
  13. public readonly static StatBusinessService Instance = new StatBusinessService();
  14. private StatBusinessService()
  15. { }
  16. // 统计交易额V2
  17. public void StartEverDayV2()
  18. {
  19. Thread th = new Thread(StartEverDayV2Do);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. public void StartEverDayV2Do()
  24. {
  25. while (true)
  26. {
  27. if(DateTime.Now.Hour >= 3)
  28. {
  29. StatTradeAmountEverDayV2();
  30. }
  31. Thread.Sleep(30000);
  32. }
  33. }
  34. public void StatTradeAmountEverDayV2()
  35. {
  36. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  37. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行企业交易额日志");
  38. WebCMSEntities db = new WebCMSEntities();
  39. using (var tran = db.Database.BeginTransaction())
  40. {
  41. try
  42. {
  43. string startId = function.ReadInstance("/TradeRecord/Id2.txt");
  44. if(string.IsNullOrEmpty(startId))
  45. {
  46. startId = "867041";
  47. }
  48. DataTable idsDt = OtherMySqlConn.dtable("select Id from TradeRecord where Id>=" + startId + " and CreateDate>='2022-08-16 00:00:00' and UserId in (select Id from Users where BusinessFlag=1) and QueryCount=1 order by Id limit 50");
  49. if(idsDt.Rows.Count > 0)
  50. {
  51. string ids = "";
  52. foreach (DataRow idsDr in idsDt.Rows)
  53. {
  54. ids += idsDr["Id"].ToString() + ",";
  55. startId = idsDr["Id"].ToString();
  56. }
  57. DataTable selfDt = OtherMySqlConn.dtable("select UserId,MerchantId,BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id) from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,MerchantId,BrandId,BankCardType,QrPayFlag,MerHelpFlag,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d')");
  58. if (selfDt.Rows.Count > 0)
  59. {
  60. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时执行企业交易额日志");
  61. foreach (DataRow selfDr in selfDt.Rows)
  62. {
  63. int UserId = int.Parse(selfDr["UserId"].ToString());
  64. int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
  65. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  66. BusinessPartnerMerchant merchant = db.BusinessPartnerMerchant.FirstOrDefault(m => m.MerchantId == MerchantId) ?? new BusinessPartnerMerchant();
  67. int PartnerId = merchant.PartnerId;
  68. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  69. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  70. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  71. int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
  72. int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
  73. int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
  74. int PayType = int.Parse(selfDr["PayType"].ToString());
  75. string TradeDate = selfDr[9].ToString();
  76. decimal TradeAmount = decimal.Parse(selfDr[10].ToString());
  77. int TradeCount = int.Parse(selfDr[11].ToString());
  78. string TradeMonth = TradeDate.Substring(0, 6);
  79. BusinessTradeSummary selfStat = db.BusinessTradeSummary.FirstOrDefault(m => m.UserId == UserId && m.PartnerId == PartnerId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType);
  80. if (selfStat == null)
  81. {
  82. selfStat = db.BusinessTradeSummary.Add(new BusinessTradeSummary()
  83. {
  84. UserId = UserId,
  85. PartnerId = PartnerId,
  86. TradeMonth = TradeMonth,
  87. TradeDate = TradeDate,
  88. BrandId = BrandId,
  89. QueryCount = QrPayFlag,
  90. VipFlag = VipFlag,
  91. PayType = PayType,
  92. }).Entity;
  93. db.SaveChanges();
  94. }
  95. if (BankCardType == 0)
  96. {
  97. if (MerHelpFlag == 1)
  98. {
  99. selfStat.HelpDirectDebitTradeAmt += TradeAmount;
  100. if (CapFlag == 1)
  101. {
  102. selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  103. selfStat.HelpDirectDebitCapNum += TradeCount;
  104. }
  105. }
  106. else
  107. {
  108. selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
  109. if (CapFlag == 1)
  110. {
  111. selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  112. selfStat.NotHelpDirectDebitCapNum += TradeCount;
  113. }
  114. }
  115. }
  116. else if (BankCardType != 0)
  117. {
  118. if (MerHelpFlag == 1)
  119. {
  120. selfStat.HelpDirectTradeAmt += TradeAmount;
  121. }
  122. else
  123. {
  124. selfStat.NotHelpDirectTradeAmt += TradeAmount;
  125. }
  126. }
  127. }
  128. OtherMySqlConn.op("update TradeRecord set QueryCount=2 where Id in (" + ids.TrimEnd(',') + ")");
  129. function.WritePage("/TradeRecord/", "Id2.txt", startId);
  130. }
  131. db.SaveChanges();
  132. }
  133. tran.Commit();
  134. }
  135. catch (Exception ex)
  136. {
  137. tran.Rollback();
  138. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行企业交易额异常");
  139. }
  140. }
  141. db.Dispose();
  142. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行企业交易额日志");
  143. }
  144. // 统计创客激活数
  145. public void StartPosActNum()
  146. {
  147. Thread th = new Thread(StartPosActNumFor);
  148. th.IsBackground = true;
  149. th.Start();
  150. }
  151. public void StartPosActNumFor()
  152. {
  153. while (true)
  154. {
  155. if(DateTime.Now.Hour >= 3)
  156. {
  157. StartPosActNumEverTime();
  158. }
  159. Thread.Sleep(120000);
  160. }
  161. }
  162. public void StartPosActNumEverTime()
  163. {
  164. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  165. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行企业激活数日志");
  166. WebCMSEntities db = new WebCMSEntities();
  167. try
  168. {
  169. DataTable idsDt = OtherMySqlConn.dtable("select Id from PosMachinesTwo where QueryCount=1 and BuyUserId in (select Id from Users where BusinessFlag=1) and ActivationState=1 and ActivationTime is not null and ActivationTime>='2022-08-16 00:00:00' and BuyUserId>0 limit 50");
  170. if(idsDt.Rows.Count > 0)
  171. {
  172. string ids = "";
  173. foreach (DataRow idsDr in idsDt.Rows)
  174. {
  175. ids += idsDr["Id"].ToString() + ",";
  176. }
  177. DataTable userDt = OtherMySqlConn.dtable("select Id,BuyUserId,BrandId,ActivationTime from PosMachinesTwo where Id in (" + ids.TrimEnd(',') + ")");
  178. if (userDt.Rows.Count > 0)
  179. {
  180. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行企业激活数日志");
  181. foreach (DataRow userDr in userDt.Rows)
  182. {
  183. int Id = int.Parse(userDr["Id"].ToString());
  184. int UserId = int.Parse(userDr["BuyUserId"].ToString());
  185. int BrandId = int.Parse(userDr["BrandId"].ToString());
  186. string TradeDate = DateTime.Parse(userDr["ActivationTime"].ToString()).ToString("yyyyMMdd");
  187. int ActCount = 1;
  188. string TradeMonth = TradeDate.Substring(0, 6);
  189. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  190. string start = date + " 00:00:00";
  191. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  192. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  193. BusinessPartnerPos pos = db.BusinessPartnerPos.FirstOrDefault(m => m.PosId == Id) ?? new BusinessPartnerPos();
  194. int PartnerId = pos.PartnerId;
  195. BusinessActSummary selfStat = db.BusinessActSummary.FirstOrDefault(m => m.UserId == UserId && m.PartnerId == PartnerId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId);
  196. if (selfStat == null)
  197. {
  198. selfStat = db.BusinessActSummary.Add(new BusinessActSummary()
  199. {
  200. UserId = UserId,
  201. PartnerId = PartnerId,
  202. TradeMonth = TradeMonth,
  203. SeoKeyword = TradeDate,
  204. BrandId = BrandId,
  205. }).Entity;
  206. db.SaveChanges();
  207. }
  208. selfStat.ActCount += ActCount;
  209. }
  210. db.SaveChanges();
  211. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=2 where Id in (" + ids.TrimEnd(',') + ")");
  212. }
  213. }
  214. }
  215. catch (Exception ex)
  216. {
  217. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行企业激活数异常");
  218. }
  219. db.Dispose();
  220. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行企业激活数日志");
  221. }
  222. }
  223. }