using Infrastructure; using Infrastructure.Model; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System.Web; using FF = System.IO; namespace ZR.Admin.WebApi.Controllers { /// /// WebApi 基类 /// public class BaseController : ControllerBase { /// /// Json字符串自定义的时间格式化 /// public const string TIME_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss.fff"; /// /// 封装 WebApi接口操作成功的返回结果 /// /// /// /// protected IActionResult SUCCESS(object data, string timeFormatStr = TIME_FORMAT_FULL) { string jsonStr = GetJsonStr(GetApiResult(data != null ? ResultCode.SUCCESS : ResultCode.FAIL, data), timeFormatStr); return Content(jsonStr, "application/json"); } /// /// 封装 WebApi接口操作的返回结果 /// json输出的字符串带有自定义的时间格式 /// /// 返回结果对象 /// 自定义的时间格式 /// protected IActionResult ToResponse(ApiResult apiResult, string timeFormatStr = TIME_FORMAT_FULL) { string jsonStr = GetJsonStr(apiResult, timeFormatStr); return Content(jsonStr, "application/json"); } /// /// 封装 WebApi接口操作的返回结果 /// json输出的字符串带有自定义的时间格式 /// /// 受影响行数 /// 自定义的时间格式 /// protected IActionResult ToResponse(long rows, string timeFormatStr = TIME_FORMAT_FULL) { string jsonStr = GetJsonStr(ToJson(rows), timeFormatStr); return Content(jsonStr, "application/json"); } /// /// 封装 WebApi接口操作的返回结果 /// json输出的字符串带有自定义的时间格式 /// /// 返回的状态码 /// 返回信息 /// protected IActionResult ToResponse(ResultCode resultCode, string msg = "") { return ToResponse(GetApiResult(resultCode, msg)); } /// /// 导出Excel /// /// 完整文件路径 /// 带扩展文件名 /// protected IActionResult ExportExcel(string path, string fileName) { //IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); //string fileDir = Path.Combine(webHostEnvironment.WebRootPath, path, fileName); var stream = FF.File.OpenRead(path); //创建文件流 return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName)); } #region 方法 /// /// 响应返回结果 /// /// 受影响行数 /// protected ApiResult ToJson(long rows) { return rows > 0 ? GetApiResult(ResultCode.SUCCESS) : GetApiResult(ResultCode.FAIL); } /// /// 响应返回结果 /// /// 受影响行数 /// /// protected ApiResult ToJson(long rows, object data) { return rows > 0 ? GetApiResult(ResultCode.SUCCESS, data) : GetApiResult(ResultCode.FAIL); } /// /// 全局Code使用 /// /// /// /// protected ApiResult GetApiResult(ResultCode resultCode, object? data = null) { ApiResult apiResult = new((int)resultCode, resultCode.ToString()) { Data = data }; return apiResult; } /// /// /// /// /// /// protected ApiResult GetApiResult(ResultCode resultCode, string msg) { return new ApiResult((int)resultCode, msg); } private static string GetJsonStr(ApiResult apiResult, string timeFormatStr) { if (string.IsNullOrEmpty(timeFormatStr)) { timeFormatStr = TIME_FORMAT_FULL; } var serializerSettings = new JsonSerializerSettings { // 设置为驼峰命名 ContractResolver = new CamelCasePropertyNamesContractResolver(), DateFormatString = timeFormatStr }; return JsonConvert.SerializeObject(apiResult, Formatting.Indented, serializerSettings); } #endregion /// /// 导出Excel /// /// /// /// /// protected string ExportExcel(List list, string sheetName, string fileName) { return ExportExcelMini(list, sheetName, fileName).Item1; } /// /// /// /// /// /// /// /// protected (string, string) ExportExcelMini(List list, string sheetName, string fileName) { IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx"; string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName); Directory.CreateDirectory(Path.GetDirectoryName(fullPath)); MiniExcel.SaveAs(fullPath, list, sheetName: sheetName); return (sFileName, fullPath); } /// /// 导出多个工作表(Sheet) /// /// /// /// protected (string, string) ExportExcelMini(Dictionary sheets, string fileName) { IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx"; string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName); Directory.CreateDirectory(Path.GetDirectoryName(fullPath)); MiniExcel.SaveAs(fullPath, sheets); return (sFileName, fullPath); } /// /// 下载导入模板 /// /// /// /// /// 下载文件名 /// protected (string,string) DownloadImportTemplate(List list,Stream stream, string fileName) { IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = $"{fileName}模板.xlsx"; string sFilePath = Path.Combine(webHostEnvironment.WebRootPath, "importTemplate"); string fullPath = Path.Combine(sFilePath, sFileName); //判断模板路径是否存在 2023年4月24日 赵 if (!Directory.Exists(sFilePath)) { Directory.CreateDirectory(Path.GetDirectoryName(sFilePath)); } //判断模板文件是否存在 2023年4月24日 赵 if (!FF.File.Exists(fullPath)) { //在服务器生成模板文件,用来提供下载 2023年4月24日 赵 MiniExcel.SaveAs(fullPath, list); } return (fullPath,sFileName); } } }