CustomQueryDoController.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /*
  2. * 自定义查询
  3. */
  4. using System;
  5. using System.Web;
  6. using System.Collections.Generic;
  7. using System.Diagnostics;
  8. using System.Linq;
  9. using System.Data;
  10. using System.Threading.Tasks;
  11. using System.Text.RegularExpressions;
  12. using Microsoft.AspNetCore.Mvc;
  13. using Microsoft.AspNetCore.Http;
  14. using Microsoft.Extensions.Logging;
  15. using Microsoft.Extensions.Options;
  16. using MySystem.Models;
  17. using Library;
  18. using LitJson;
  19. using MySystemLib;
  20. namespace MySystem.Areas.Admin.Controllers
  21. {
  22. [Area("Admin")]
  23. [Route("Admin/[controller]/[action]")]
  24. public class CustomQueryDoController : BaseController
  25. {
  26. public CustomQueryDoController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  27. {
  28. OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  29. }
  30. #region 自定义查询列表
  31. /// <summary>
  32. /// 根据条件查询自定义查询列表
  33. /// </summary>
  34. /// <returns></returns>
  35. public IActionResult Index(int Id, string right)
  36. {
  37. ViewBag.RightInfo = RightInfo;
  38. ViewBag.right = right;
  39. ViewBag.Id = Id.ToString();
  40. Dictionary<string, string> query = new Dictionary<string, string>();
  41. CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
  42. string sql = item.SqlContent;
  43. MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
  44. foreach(Match m in mc)
  45. {
  46. string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
  47. string fieldName = fieldData[0];
  48. string Title = fieldData[1];
  49. if(!query.ContainsKey(fieldName))
  50. {
  51. query.Add(fieldName, Title);
  52. }
  53. }
  54. ViewBag.query = query;
  55. string[] fieldList = item.SeoDescription.Split(',');
  56. string cols = "";
  57. foreach(string Title in fieldList)
  58. {
  59. cols += ",{field:'" + Title + "', width: 200, title:'" + Title + "'}";
  60. }
  61. ViewBag.cols = cols;
  62. return View();
  63. }
  64. #endregion
  65. #region 根据条件查询自定义查询列表
  66. /// <summary>
  67. /// 自定义查询列表
  68. /// </summary>
  69. /// <returns></returns>
  70. public JsonResult IndexData(int Id, int page = 1, int limit = 30)
  71. {
  72. CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
  73. string sql = item.SqlContent;
  74. MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
  75. foreach(Match m in mc)
  76. {
  77. string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
  78. string fieldName = fieldData[0];
  79. sql = sql.Replace(m.Value, Request.Query[fieldName].ToString());
  80. }
  81. if(page > 1)
  82. {
  83. int skip = (page - 1) * limit;
  84. sql += " limit " + skip + "," + limit;
  85. }
  86. else
  87. {
  88. sql += " limit " + limit;
  89. }
  90. DataTable dt = CustomerSqlConn.dtable(sql, MysqlConn.connstr);
  91. List<Dictionary<string, string>> diclist = new List<Dictionary<string, string>>();
  92. foreach(DataRow dr in dt.Rows)
  93. {
  94. Dictionary<string, string> row = new Dictionary<string, string>();
  95. foreach(DataColumn dc in dt.Columns)
  96. {
  97. if (dc.DataType == typeof(DateTime))
  98. {
  99. row.Add(dc.ColumnName, string.IsNullOrEmpty(dr[dc.ColumnName].ToString()) ? "" : DateTime.Parse(dr[dc.ColumnName].ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
  100. }
  101. else
  102. {
  103. row.Add(dc.ColumnName, dr[dc.ColumnName].ToString());
  104. }
  105. }
  106. diclist.Add(row);
  107. }
  108. Dictionary<string, object> obj = new Dictionary<string, object>();
  109. obj.Add("code", 0);
  110. obj.Add("msg", "");
  111. obj.Add("count", 300);
  112. obj.Add("data", diclist);
  113. return Json(obj);
  114. }
  115. #endregion
  116. #region 导出Excel
  117. /// <summary>
  118. /// 导出Excel
  119. /// </summary>
  120. /// <returns></returns>
  121. public string ExportExcel(int Id)
  122. {
  123. var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
  124. CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
  125. string sql = item.SqlContent;
  126. MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
  127. foreach(Match m in mc)
  128. {
  129. string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
  130. string fieldName = fieldData[0];
  131. sql = sql.Replace(m.Value, Request.Query[fieldName].ToString());
  132. }
  133. var FileName = item.Title + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  134. string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"" + FileName + "\",\"MaxCount\":\"0\"}";
  135. RedisDbconn.Instance.AddList("ExportQueue", SendData);
  136. return "success";
  137. }
  138. #endregion
  139. }
  140. }