SysProcService.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. namespace Admin.NET.Core.Service;
  5. /// <summary>
  6. /// 系统存储过程服务(适用于导出、图表查询)
  7. /// </summary>
  8. public class SysProcService : IDynamicApiController, ITransient
  9. {
  10. /// <summary>
  11. /// 根据模板导出存储过程数据
  12. /// </summary>
  13. /// <param name="input"></param>
  14. /// <returns></returns>
  15. public async Task<IActionResult> ExportPocByTemp(ExportProcByTempInput input)
  16. {
  17. var dt = await GetProcTable(input);
  18. var excelExporter = new ExcelExporter();
  19. var template = AppDomain.CurrentDomain.BaseDirectory + "/wwwroot/Template/" + input.Template + ".xlsx";
  20. var byteData = await excelExporter.ExportBytesByTemplate(dt, template);
  21. return new FileContentResult(byteData, "application/octet-stream") { FileDownloadName = input.ProcId + ".xlsx" };
  22. }
  23. /// <summary>
  24. /// 导出存储过程数据(指定导出列,没有指定的字段会被隐藏)
  25. /// </summary>
  26. /// <param name="input"></param>
  27. /// <returns></returns>
  28. public async Task<IActionResult> ExportPocByColumn(ExportProcInput input)
  29. {
  30. var dt = await GetProcTable(input);
  31. var excelExporter = new ExcelExporter();
  32. var headers = new Dictionary<string, Tuple<string, int>>();
  33. var index = 1;
  34. foreach (var val in input.EHeader)
  35. {
  36. headers.Add(val.Key.ToUpper(), new Tuple<string, int>(val.Value, index));
  37. index++;
  38. }
  39. var byteData = await excelExporter.ExportAsByteArray(dt, new ProcExporterHeaderFilter(headers));
  40. return new FileContentResult(byteData, "application/octet-stream") { FileDownloadName = input.ProcId + ".xlsx" };
  41. }
  42. /// <summary>
  43. /// 读取存储过程返回表(Oracle、达梦参数顺序不能错)
  44. /// </summary>
  45. /// <param name="input"></param>
  46. /// <returns></returns>
  47. private async Task<DataTable> GetProcTable(BaseProcInput input)
  48. {
  49. var db = SqlSugarSetup.ITenant.GetConnectionScope(input.ConfigId);
  50. return await db.Ado.UseStoredProcedure().GetDataTableAsync(input.ProcId, input.ProcParams);
  51. }
  52. /// <summary>
  53. /// 读取存储过程返回数据集(Oracle、达梦参数顺序不能错)
  54. /// </summary>
  55. /// <param name="input"></param>
  56. /// <returns></returns>
  57. private async Task<DataSet> GetProcDataSet(BaseProcInput input)
  58. {
  59. var db = SqlSugarSetup.ITenant.GetConnectionScope(input.ConfigId);
  60. return await db.Ado.UseStoredProcedure().GetDataSetAllAsync(input.ProcId, input.ProcParams);
  61. }
  62. ///// <summary>
  63. ///// 根据配置表读取对映存储过程
  64. ///// </summary>
  65. ///// <param name="input"></param>
  66. ///// <returns></returns>
  67. //public async Task<DataTable> ProcEnitybyConfig(BaseProcInput input)
  68. //{
  69. // string key = "ProcConfig";
  70. // var ds = _sysCacheService.Get<Dictionary<string, string>>(key);
  71. // if (ds == null || ds.Count == 0 || !ds.ContainsKey(input.ProcId))
  72. // {
  73. // var datas = await _db.Queryable<ProcConfig>().ToListAsync();
  74. // ds = datas.ToDictionary(m => m.ProcId, m => m.ProcName);
  75. // _sysCacheService.Set(key, ds);
  76. // }
  77. // string procName = ds[input.ProcId];
  78. // return await _db.Ado.UseStoredProcedure()
  79. // .GetDataTableAsync(procName, input.ProcParams);
  80. //}
  81. }