ProcService.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace Admin.NET.Core.Service;
  15. /// <summary>
  16. /// 存储过程服务
  17. /// 适用于导出、图表查询
  18. /// </summary>
  19. public class ProcService : IDynamicApiController, ITransient
  20. {
  21. /// <summary>
  22. /// Post导出存储过程数据,指定导出列,没有指定的字段会被隐藏
  23. /// </summary>
  24. /// <returns></returns>
  25. [HttpGet]
  26. [HttpPost]
  27. public async Task<IActionResult> PocExport2(ExportProcInput input)
  28. {
  29. ISqlSugarClient _db = App.GetService<ISqlSugarClient>();
  30. var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
  31. var rs = await db.Ado.UseStoredProcedure()
  32. .GetDataTableAsync(input.ProcId, input.ProcParams);
  33. var excelExporter = new Magicodes.ExporterAndImporter.Excel.ExcelExporter();
  34. Dictionary<string, Tuple<string, int>> headers = new Dictionary<string, Tuple<string, int>>();
  35. var i = 1;
  36. foreach (var val in input.EHeader)
  37. {
  38. headers.Add(val.Key.ToUpper(), new Tuple<string, int>(val.Value, i));
  39. i++;
  40. }
  41. var da = await excelExporter.ExportAsByteArray(rs, new ProcExporterHeaderFilter(headers));
  42. return new FileContentResult(da, "application/octet-stream") { FileDownloadName = input.ProcId + ".xlsx" };
  43. }
  44. /// <summary>
  45. /// 根据模板导出存储过程数据
  46. /// </summary>
  47. /// <returns></returns>
  48. [HttpGet]
  49. [HttpPost]
  50. public async Task<IActionResult> PocExport(ExportProcByTMPInput input)
  51. {
  52. ISqlSugarClient _db = App.GetService<ISqlSugarClient>();
  53. var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
  54. var rs = await db.Ado.UseStoredProcedure()
  55. .GetDataTableAsync(input.ProcId, input.ProcParams);
  56. var excelExporter = new Magicodes.ExporterAndImporter.Excel.ExcelExporter();
  57. string template = AppDomain.CurrentDomain.BaseDirectory + "/wwwroot/Template/" + input.Template + ".xlsx";
  58. var bs = await excelExporter.ExportBytesByTemplate(rs, template);
  59. return new FileContentResult(bs, "application/octet-stream") { FileDownloadName = input.ProcId + ".xlsx" };
  60. }
  61. /// <summary>
  62. /// 读取存储过程返回表
  63. /// 注意Oracle,达梦参数顺序不能错
  64. /// </summary>
  65. /// <param name="input"></param>
  66. /// <returns></returns>
  67. [HttpPost]
  68. public async Task<DataTable> ProcTable(BaseProcInput input)
  69. {
  70. ISqlSugarClient _db = App.GetService<ISqlSugarClient>();
  71. var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
  72. return await db.Ado.UseStoredProcedure()
  73. .GetDataTableAsync(input.ProcId, input.ProcParams);
  74. }
  75. /// <summary>
  76. /// 读取存储过程返回数据集
  77. /// 注意Oracle,达梦参数顺序不能错;Oracle 返回table、table1,其他返回table1、table2
  78. /// 适用于报表、复杂详细页面等
  79. /// </summary>
  80. /// <param name="input"></param>
  81. /// <returns></returns>
  82. [HttpPost]
  83. public async Task<DataSet> CommonDataSet(BaseProcInput input)
  84. {
  85. ISqlSugarClient _db = App.GetService<ISqlSugarClient>();
  86. var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
  87. return await db.Ado.UseStoredProcedure()
  88. .GetDataSetAllAsync(input.ProcId, input.ProcParams);
  89. }
  90. /*
  91. *
  92. //根据配置表读取对映存储过程
  93. public async Task<DataTable> ProcEnitybyConfig(BaseProcInput input)
  94. {
  95. string key = "ProcConfig";
  96. var ds = _sysCacheService.Get<Dictionary<string, string>>(key);
  97. if (ds == null || ds.Count == 0 || !ds.ContainsKey(input.ProcId))
  98. {
  99. var datas = await _db.Queryable<ProcConfig>().ToListAsync();
  100. ds = datas.ToDictionary(m => m.ProcId, m => m.ProcName);
  101. _sysCacheService.Set(key, ds);
  102. }
  103. string procName = ds[input.ProcId];
  104. return await _db.Ado.UseStoredProcedure()
  105. .GetDataTableAsync(procName, input.ProcParams);
  106. }
  107. */
  108. }