ReportController.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using molilian.core;
  2. using dodohold.core;
  3. using Microsoft.AspNetCore.Mvc;
  4. using System.Text.Json;
  5. using static molilian.core.ChartDataCore;
  6. using Org.BouncyCastle.Asn1;
  7. namespace molilian.api.Controllers
  8. {
  9. [ApiController]
  10. [MyAuthorize("admin")]
  11. [Route("api/[controller]/[action]")]
  12. public class ReportController : ControllerBase
  13. {
  14. readonly IAuthorizationProvider provider = new AdminProvider();
  15. protected IHttpContextAccessor _accessor;
  16. public ReportController(IHttpContextAccessor accessor)
  17. {
  18. _accessor = accessor;
  19. }
  20. [HttpPost]
  21. public async Task<ActionResult> daily_list([FromBody] JsonElement form)
  22. {
  23. var token = provider.Get(_accessor.HttpContext);
  24. int page = form.Read("current", 1);
  25. int size = form.Read("pageSize", 10);
  26. bool getTotal = form.Read("getTotal", true);
  27. string sort = form.Read<string>("sort");
  28. string order = form.Read<string>("order");
  29. string filter = string.Empty;
  30. var log_date = form.PathReadArray<string>("query_date[]");
  31. var accountName = form.Read("accountName", string.Empty);
  32. int channel = form.Read("channel", -1);
  33. if (!string.IsNullOrEmpty(accountName))
  34. {
  35. filter += $" AND accountName=@accountName";
  36. }
  37. else
  38. {
  39. filter += $" AND accountName!='all'";
  40. }
  41. DateTime stime = DateTime.MinValue, etime = DateTime.MinValue;
  42. if (log_date.Count == 2)
  43. {
  44. if (DateTime.TryParse(log_date[0], out stime) && DateTime.TryParse(log_date[1], out etime))
  45. {
  46. etime = etime.AddDays(1).AddSeconds(-1);
  47. if (etime > DateTime.Now) etime = DateTime.Now;
  48. filter += $" AND log_date BETWEEN @stime AND @etime";
  49. }
  50. }
  51. if (channel != -1)
  52. {
  53. filter += $" AND channel=@channel";
  54. }
  55. filter = filter.StringTrimStart(" AND ");
  56. //排序
  57. string orderBy = "id DESC";
  58. if (!string.IsNullOrEmpty(order))
  59. {
  60. order = "descending".Equals(order) ? "DESC" : "ASC";
  61. orderBy = sort switch
  62. {
  63. _ => $"{sort} {order}",
  64. };
  65. }
  66. using var conn = CenterHub.GetOpenConnection();
  67. var result = new DBContext.Table(conn, "center_daily_logs")
  68. .Where(filter, new { channel, accountName, stime, etime })
  69. .Page(size, page)
  70. .Order(orderBy)
  71. .PageList<DailyLogsDTO>(getTotal);
  72. var jd_accounts = new DBContext.Table("jd_pool").Select<JdPoolDTO>();
  73. var jd_hide_ids = jd_accounts.Where(e => e.is_hide).Select(e => e.id).ToList();
  74. result.List = result.List.Where(e => e.channel != 1 || !jd_hide_ids.Contains(e.accountId));
  75. var tb_accounts = new DBContext.Table("tk_pool").Select<TkPoolDTO>();
  76. var tb_hide_ids = tb_accounts.Where(e => e.is_hide).Select(e => e.id).ToList();
  77. result.List = result.List.Where(e => e.channel != 0 || !tb_hide_ids.Contains(e.accountId));
  78. var pdd_accounts = new DBContext.Table("pdd_pool").Select<PddPoolDTO>();
  79. var pdd_hide_ids = pdd_accounts.Where(e => e.is_hide).Select(e => e.id).ToList();
  80. result.List = result.List.Where(e => e.channel != 3 || !pdd_hide_ids.Contains(e.accountId));
  81. return new APIResult(new { data = result });
  82. }
  83. [HttpPost]
  84. public async Task<ActionResult> chartData([FromBody] JsonElement form)
  85. {
  86. var result = new ChartDataRes();
  87. var report_date = form.PathReadArray<string>("query_date[]");
  88. var accountName = form.Read("accountName", string.Empty);
  89. var isHourtrend = form.Read<bool>("isLeaf", false);
  90. var total_key = form.Read("total_key", "total");
  91. DateTime stime = DateTime.MinValue;
  92. if (!DateTime.TryParse(report_date[0], out stime)) return new APIResult(result);
  93. string _report_date = stime.ToString("yyyyMMdd");
  94. if (isHourtrend) _report_date = stime.ToString("yyyyMMddHH");
  95. if (string.IsNullOrEmpty(accountName)) accountName = "tb";
  96. switch (total_key)
  97. {
  98. case "tool_total":
  99. result = await GetToolDataAsync(total_key, accountName, _report_date);
  100. break;
  101. case "total":
  102. case "parse_total":
  103. case "coupon_total":
  104. result = await GetTaobaoDataAsync(total_key, accountName, _report_date);
  105. break;
  106. case "jd_parse_total":
  107. result = await GetJdDataAsync(total_key, accountName, _report_date);
  108. break;
  109. }
  110. return new APIResult(result);
  111. }
  112. }
  113. }