BaseController.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. using Infrastructure.Extensions;
  2. using Infrastructure.Model;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Mvc;
  6. using MiniExcelLibs;
  7. using Newtonsoft.Json;
  8. using Newtonsoft.Json.Serialization;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.IO;
  12. using System.Threading.Tasks;
  13. using System.Web;
  14. namespace Infrastructure.Controllers
  15. {
  16. /// <summary>
  17. /// web层通用数据处理
  18. /// </summary>
  19. //[ApiController]
  20. public class BaseController : ControllerBase
  21. {
  22. public static string TIME_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
  23. /// <summary>
  24. /// 返回成功封装
  25. /// </summary>
  26. /// <param name="data"></param>
  27. /// <param name="timeFormatStr"></param>
  28. /// <returns></returns>
  29. protected IActionResult SUCCESS(object data, string timeFormatStr = "yyyy-MM-dd HH:mm:ss")
  30. {
  31. string jsonStr = GetJsonStr(GetApiResult(data != null ? ResultCode.SUCCESS : ResultCode.NO_DATA, data), timeFormatStr);
  32. return Content(jsonStr, "application/json");
  33. }
  34. /// <summary>
  35. /// json输出带时间格式的
  36. /// </summary>
  37. /// <param name="apiResult"></param>
  38. /// <returns></returns>
  39. protected IActionResult ToResponse(ApiResult apiResult)
  40. {
  41. string jsonStr = GetJsonStr(apiResult, TIME_FORMAT_FULL);
  42. return Content(jsonStr, "application/json");
  43. }
  44. protected IActionResult ToResponse(long rows, string timeFormatStr = "yyyy-MM-dd HH:mm:ss")
  45. {
  46. string jsonStr = GetJsonStr(ToJson(rows), timeFormatStr);
  47. return Content(jsonStr, "application/json");
  48. }
  49. protected IActionResult ToResponse(ResultCode resultCode, string msg = "")
  50. {
  51. return ToResponse(new ApiResult((int)resultCode, msg));
  52. }
  53. /// <summary>
  54. /// 导出Excel
  55. /// </summary>
  56. /// <param name="path">完整文件路径</param>
  57. /// <param name="fileName">带扩展文件名</param>
  58. /// <returns></returns>
  59. protected IActionResult ExportExcel(string path, string fileName)
  60. {
  61. //var webHostEnvironment = App.WebHostEnvironment;
  62. if (!Path.Exists(path))
  63. {
  64. throw new CustomException(fileName + "文件不存在");
  65. }
  66. var stream = System.IO.File.OpenRead(path); //创建文件流
  67. Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition");
  68. return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName));
  69. }
  70. /// <summary>
  71. /// 下载文件
  72. /// </summary>
  73. /// <param name="path"></param>
  74. /// <param name="fileName">文件名,一定要带扩展名</param>
  75. /// <returns></returns>
  76. protected IActionResult DownFile(string path, string fileName)
  77. {
  78. if (!System.IO.File.Exists(path))
  79. {
  80. return ToResponse(ResultCode.CUSTOM_ERROR, "文件不存在");
  81. }
  82. var stream = System.IO.File.OpenRead(path); //创建文件流
  83. Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition");
  84. return File(stream, "application/octet-stream", HttpUtility.UrlEncode(fileName));
  85. }
  86. #region 方法
  87. /// <summary>
  88. /// 响应返回结果
  89. /// </summary>
  90. /// <param name="rows">受影响行数</param>
  91. /// <param name="data"></param>
  92. /// <returns></returns>
  93. protected ApiResult ToJson(long rows, object? data = null)
  94. {
  95. return rows > 0 ? ApiResult.Success("success", data) : GetApiResult(ResultCode.FAIL);
  96. }
  97. /// <summary>
  98. /// 全局Code使用
  99. /// </summary>
  100. /// <param name="resultCode"></param>
  101. /// <param name="data"></param>
  102. /// <returns></returns>
  103. protected ApiResult GetApiResult(ResultCode resultCode, object? data = null)
  104. {
  105. var msg = resultCode.GetDescription();
  106. return new ApiResult((int)resultCode, msg, data);
  107. }
  108. protected ApiResult Success()
  109. {
  110. return GetApiResult(ResultCode.SUCCESS);
  111. }
  112. /// <summary>
  113. ///
  114. /// </summary>
  115. /// <param name="apiResult"></param>
  116. /// <param name="timeFormatStr"></param>
  117. /// <returns></returns>
  118. private static string GetJsonStr(ApiResult apiResult, string timeFormatStr)
  119. {
  120. if (string.IsNullOrEmpty(timeFormatStr))
  121. {
  122. timeFormatStr = TIME_FORMAT_FULL;
  123. }
  124. var serializerSettings = new JsonSerializerSettings
  125. {
  126. // 设置为驼峰命名
  127. ContractResolver = new CamelCasePropertyNamesContractResolver(),
  128. DateFormatString = timeFormatStr
  129. };
  130. return JsonConvert.SerializeObject(apiResult, Formatting.Indented, serializerSettings);
  131. }
  132. #endregion
  133. /// <summary>
  134. /// 导出Excel
  135. /// </summary>
  136. /// <typeparam name="T"></typeparam>
  137. /// <param name="list"></param>
  138. /// <param name="sheetName"></param>
  139. /// <param name="fileName"></param>
  140. protected string ExportExcel<T>(List<T> list, string sheetName, string fileName)
  141. {
  142. return ExportExcelMini(list, sheetName, fileName).Item1;
  143. }
  144. /// <summary>
  145. ///
  146. /// </summary>
  147. /// <typeparam name="T"></typeparam>
  148. /// <param name="list"></param>
  149. /// <param name="sheetName"></param>
  150. /// <param name="fileName"></param>
  151. /// <returns></returns>
  152. protected (string, string) ExportExcelMini<T>(List<T> list, string sheetName, string fileName)
  153. {
  154. IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
  155. string sFileName = $"{fileName}_{DateTime.Now:MMdd_HHmmss}.xlsx";
  156. string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
  157. Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
  158. MiniExcel.SaveAs(fullPath, list, sheetName: sheetName);
  159. return (sFileName, fullPath);
  160. }
  161. protected async Task<(string, string)> ExportExcelMiniAsync<T>(List<T> list, string sheetName, string fileName)
  162. {
  163. IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
  164. string sFileName = $"{fileName}_{DateTime.Now:MMdd_HHmmss}.xlsx";
  165. string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
  166. Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
  167. await MiniExcel.SaveAsAsync(fullPath, list, sheetName: sheetName);
  168. return (sFileName, fullPath);
  169. }
  170. /// <summary>
  171. /// 导出多个工作表(Sheet)
  172. /// </summary>
  173. /// <param name="sheets"></param>
  174. /// <param name="fileName"></param>
  175. /// <returns></returns>
  176. protected (string, string) ExportExcelMini(Dictionary<string, object> sheets, string fileName)
  177. {
  178. IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
  179. string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx";
  180. string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
  181. Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
  182. MiniExcel.SaveAs(fullPath, sheets);
  183. return (sFileName, fullPath);
  184. }
  185. /// <summary>
  186. /// 下载导入模板
  187. /// </summary>
  188. /// <typeparam name="T">数据类型</typeparam>
  189. /// <param name="list">空数据类型集合</param>
  190. /// <param name="fileName">下载文件名</param>
  191. /// <returns></returns>
  192. protected (string, string) DownloadImportTemplate<T>(List<T> list, string fileName)
  193. {
  194. IWebHostEnvironment webHostEnvironment = App.WebHostEnvironment;
  195. string sFileName = $"{fileName}.xlsx";
  196. string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "ImportTemplate", sFileName);
  197. //不存在模板创建模板
  198. if (!Directory.Exists(fullPath))
  199. {
  200. Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
  201. }
  202. if (!Path.Exists(fullPath))
  203. {
  204. MiniExcel.SaveAs(fullPath, list, overwriteFile: true);
  205. }
  206. return (sFileName, fullPath);
  207. }
  208. /// <summary>
  209. /// 下载指定文件模板
  210. /// </summary>
  211. /// <param name="fileName">下载文件名</param>
  212. /// <returns></returns>
  213. protected (string, string) DownloadImportTemplate(string fileName)
  214. {
  215. IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
  216. string sFileName = $"{fileName}.xlsx";
  217. string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "ImportTemplate", sFileName);
  218. return (sFileName, fullPath);
  219. }
  220. }
  221. }