PlatformDataService.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Dapper;
  6. using Datory;
  7. using GxPress.Common.Tools;
  8. using GxPress.Repository.Interface;
  9. using GxPress.Result.DataCenter;
  10. using GxPress.Service.Interface.PlatformData;
  11. namespace GxPress.Service.Implement.PlatformData
  12. {
  13. public class PlatformDataService : IPlatformDataService
  14. {
  15. private readonly IUserRepository userRepository;
  16. public PlatformDataService(IUserRepository userRepository)
  17. {
  18. this.userRepository = userRepository;
  19. }
  20. /// <summary>
  21. /// 平台运营数据
  22. /// </summary>
  23. /// <returns></returns>
  24. public async Task<PlatformOperationDataResult> GetPlatformDataAsync()
  25. {
  26. var newUserTime = DateTime.Now.ToString("yyyy-MM-dd");
  27. var onlineUserTime = DateTime.Now.AddMinutes(-10).ToString("yyyy-MM-dd HH:mm:ss");
  28. var activityUserTime = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd HH:mm:ss");
  29. var sql = $@"SELECT
  30. (SELECT
  31. COUNT(1)
  32. FROM
  33. tede_user) AS SumUserCount,
  34. (SELECT
  35. COUNT(1)
  36. FROM
  37. tede_user
  38. WHERE
  39. CreatedDate > '{newUserTime}') AS NewUserCount,
  40. (SELECT
  41. COUNT(1)
  42. FROM
  43. tede_user
  44. WHERE
  45. LoginTime > '{onlineUserTime}') AS OnlineUserCount,
  46. (SELECT
  47. COUNT(1)
  48. FROM
  49. tede_user
  50. WHERE
  51. LoginTime > '{activityUserTime}') AS ActivityUserCount";
  52. var connectionString = ConfigHelper.GetValue("Database:ConnectionString");
  53. var database = new Database(DatabaseType.MySql, connectionString);
  54. var connection = database.GetConnection();
  55. var result = await connection.QueryFirstAsync<PlatformOperationDataResult>(sql);
  56. return result;
  57. }
  58. /// <summary>
  59. /// 用户总数增长趋势
  60. /// </summary>
  61. /// <returns></returns>
  62. public async Task<UserIncreaseResult> GetUserIncreaseResult()
  63. {
  64. var result = new UserIncreaseResult();
  65. result.MonthData = new List<string>();
  66. result.ExpectedData = new List<int>();
  67. var nowTime = DateTime.Now;
  68. for (int i = 0; i < 12; i++)
  69. {
  70. result.MonthData.Add(nowTime.AddMonths(-i).Month + "月");
  71. result.ExpectedData.Add(await userRepository.GetUserCount(nowTime.AddMonths(-i).ToString("yyyy-MM-01"), nowTime.AddMonths(-i + 1).ToString("yyyy-MM-01")));
  72. }
  73. return result;
  74. }
  75. /// <summary>
  76. /// 用户地区分布
  77. /// </summary>
  78. /// <value></value>
  79. public async Task<List<UserAreaDistributingResult>> GetUserAreaDistributingResults()
  80. {
  81. var sql = "SELECT province as Name,count(1) as Value FROM ccpph_tede.tede_user group by province";
  82. var connectionString = ConfigHelper.GetValue("Database:ConnectionString");
  83. var database = new Database(DatabaseType.MySql, connectionString);
  84. var connection = database.GetConnection();
  85. var list = await connection.QueryAsync<UserAreaDistributingResult>(sql);
  86. foreach (var item in list)
  87. {
  88. if (string.IsNullOrEmpty(item.Name))
  89. item.Name = "未知";
  90. }
  91. return list.ToList();
  92. }
  93. /// <summary>
  94. /// 会员用户占比
  95. /// </summary>
  96. /// <returns></returns>
  97. public async Task<UserVipProportionResult> GetUserVipProportionResult()
  98. {
  99. var sql = "SELECT (select count(1) from tede_user where IsVip=1)/(select count(1) from tede_user) as value";
  100. var connectionString = ConfigHelper.GetValue("Database:ConnectionString");
  101. var database = new Database(DatabaseType.MySql, connectionString);
  102. var connection = database.GetConnection();
  103. var result = await connection.QueryFirstAsync<UserVipProportionResult>(sql);
  104. return result;
  105. }
  106. /// <summary>
  107. /// 实时在线人数
  108. /// </summary>
  109. /// <returns></returns>
  110. public async Task<OnlineUserResult> GetOnlineUserResult()
  111. {
  112. var result = new OnlineUserResult();
  113. result.ActualData = new List<int>();
  114. result.ExpectedData = new List<int>();
  115. //时间
  116. result.MonthData = new List<string>();
  117. var connectionString = ConfigHelper.GetValue("Database:ConnectionString");
  118. var database = new Database(DatabaseType.MySql, connectionString);
  119. var connection = database.GetConnection();
  120. var nowTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));
  121. for (int i = 0; i <= 6; i++)
  122. {
  123. var monthData = "";
  124. if ((i * 4).ToString().Length < 2)
  125. monthData = "0";
  126. monthData += (i * 4).ToString() + ":00";
  127. result.MonthData.Add(monthData);
  128. var sql = $"SELECT count(1) FROM tede_user_login where CreatedDate>='{nowTime.AddHours(i - 4).ToString("yyyy-MM-dd hh:mm:ss")}' and CreatedDate<='{nowTime.AddHours(i).ToString("yyyy-MM-dd hh:mm:ss")}'";
  129. result.ActualData.Add(await connection.ExecuteScalarAsync<int>(sql));
  130. sql = $"SELECT count(1) FROM tede_user_login where CreatedDate>='{nowTime.AddDays(-1).AddHours(i - 4).ToString("yyyy-MM-dd hh:mm:ss")}' and CreatedDate<='{nowTime.AddDays(-1).AddHours(i).ToString("yyyy-MM-dd hh:mm:ss")}'";
  131. result.ExpectedData.Add(await connection.ExecuteScalarAsync<int>(sql));
  132. }
  133. return result;
  134. }
  135. /// <summary>
  136. /// 平台内容数据
  137. /// </summary>
  138. /// <returns></returns>
  139. public async Task<PlatformContentDataResult> GetPlatformContentDataResult()
  140. {
  141. var connectionString = ConfigHelper.GetValue("Database:ConnectionString");
  142. var database = new Database(DatabaseType.MySql, connectionString);
  143. var connection = database.GetConnection();
  144. var nowTime = DateTime.Now.ToString("yyyy-MM-dd");
  145. var sql = $@"SELECT
  146. (SELECT
  147. COUNT(1)
  148. FROM
  149. tede_media) AS SumContentCount,
  150. (SELECT
  151. COUNT(1)
  152. FROM
  153. tede_media
  154. WHERE
  155. CreatedDate > '{nowTime}') AS NewContentCount,
  156. (SELECT
  157. COUNT(1)
  158. FROM
  159. tede_media
  160. WHERE
  161. IsChecked=1 and IsDelete=0) AS OnlineContentCount,
  162. (SELECT
  163. COUNT(1)
  164. FROM
  165. tede_media
  166. WHERE
  167. FreeProportion>0) AS PayContentCount";
  168. return await connection.QueryFirstAsync<PlatformContentDataResult>(sql);
  169. }
  170. }
  171. }