WebApi ControllerBase 的扩展

  1 public class BaseController : ControllerBase
  2 {
  3     public static string TIME_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
  4 
  5     /// <summary>
  6     /// 返回成功封装
  7     /// </summary>
  8     /// <param name="data"></param>
  9     /// <param name="timeFormatStr"></param>
 10     /// <returns></returns>
 11     protected IActionResult SUCCESS(object data, string timeFormatStr = "yyyy-MM-dd HH:mm:ss")
 12     {
 13         string jsonStr = GetJsonStr(GetApiResult(data != null ? ResultCode.SUCCESS : ResultCode.NO_DATA, data), timeFormatStr);
 14         return Content(jsonStr, "application/json");
 15     }
 16 
 17     /// <summary>
 18     /// json输出带时间格式的
 19     /// </summary>
 20     /// <param name="apiResult"></param>
 21     /// <returns></returns>
 22     protected IActionResult ToResponse(ApiResult apiResult)
 23     {
 24         string jsonStr = GetJsonStr(apiResult, TIME_FORMAT_FULL);
 25 
 26         return Content(jsonStr, "application/json");
 27     }
 28 
 29     protected IActionResult ToResponse(long rows, string timeFormatStr = "yyyy-MM-dd HH:mm:ss")
 30     {
 31         string jsonStr = GetJsonStr(ToJson(rows), timeFormatStr);
 32 
 33         return Content(jsonStr, "application/json");
 34     }
 35 
 36     protected IActionResult ToResponse(ResultCode resultCode, string msg = "")
 37     {
 38         return ToResponse(new ApiResult((int)resultCode, msg));
 39     }
 40 
 41     /// <summary>
 42     /// 导出Excel
 43     /// </summary>
 44     /// <param name="path">完整文件路径</param>
 45     /// <param name="fileName">带扩展文件名</param>
 46     /// <returns></returns>
 47     protected IActionResult ExportExcel(string path, string fileName)
 48     {
 49         //var webHostEnvironment = App.WebHostEnvironment;
 50         if (!Path.Exists(path))
 51         {
 52             throw new CustomException.CustomException(fileName + "文件不存在");
 53         }
 54         var stream = System.IO.File.OpenRead(path);  //创建文件流
 55 
 56         Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
 57         return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName));
 58     }
 59 
 60     #region 方法
 61 
 62     /// <summary>
 63     /// 响应返回结果
 64     /// </summary>
 65     /// <param name="rows">受影响行数</param>
 66     /// <param name="data"></param>
 67     /// <returns></returns>
 68     protected ApiResult ToJson(long rows, object data = null)
 69     {
 70         return rows > 0 ? ApiResult.Success("success", data) : GetApiResult(ResultCode.FAIL);
 71     }
 72 
 73     /// <summary>
 74     /// 全局Code使用
 75     /// </summary>
 76     /// <param name="resultCode"></param>
 77     /// <param name="data"></param>
 78     /// <returns></returns>
 79     protected ApiResult GetApiResult(ResultCode resultCode, object data = null)
 80     {
 81         var msg = resultCode.GetDescription();
 82 
 83         return new ApiResult((int)resultCode, msg, data);
 84     }
 85 
 86     /// <summary>
 87     /// </summary>
 88     /// <param name="apiResult"></param>
 89     /// <param name="timeFormatStr"></param>
 90     /// <returns></returns>
 91     private static string GetJsonStr(ApiResult apiResult, string timeFormatStr)
 92     {
 93         if (string.IsNullOrEmpty(timeFormatStr))
 94         {
 95             timeFormatStr = TIME_FORMAT_FULL;
 96         }
 97         var serializerSettings = new JsonSerializerSettings
 98         {
 99             // 设置为驼峰命名
100             ContractResolver = new CamelCasePropertyNamesContractResolver(),
101             DateFormatString = timeFormatStr
102         };
103 
104         return JsonConvert.SerializeObject(apiResult, Formatting.Indented, serializerSettings);
105     }
106 
107     #endregion 方法
108 
109     /// <summary>
110     /// 导出Excel
111     /// </summary>
112     /// <typeparam name="T"></typeparam>
113     /// <param name="list"></param>
114     /// <param name="sheetName"></param>
115     /// <param name="fileName"></param>
116     protected string ExportExcel<T>(List<T> list, string sheetName, string fileName)
117     {
118         return ExportExcelMini(list, sheetName, fileName).Item1;
119     }
120 
121     /// <summary>
122     /// </summary>
123     /// <typeparam name="T"></typeparam>
124     /// <param name="list"></param>
125     /// <param name="sheetName"></param>
126     /// <param name="fileName"></param>
127     /// <returns></returns>
128     protected (string, string) ExportExcelMini<T>(List<T> list, string sheetName, string fileName)
129     {
130         IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
131         string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx";
132         string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
133 
134         Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
135 
136         MiniExcel.SaveAs(fullPath, list, sheetName: sheetName);
137         return (sFileName, fullPath);
138     }
139 
140     /// <summary>
141     /// 导出多个工作表(Sheet)
142     /// </summary>
143     /// <param name="sheets"></param>
144     /// <param name="fileName"></param>
145     /// <returns></returns>
146     protected (string, string) ExportExcelMini(Dictionary<string, object> sheets, string fileName)
147     {
148         IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
149         string sFileName = $"{fileName}{DateTime.Now:MM-dd-HHmmss}.xlsx";
150         string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName);
151 
152         Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
153 
154         MiniExcel.SaveAs(fullPath, sheets);
155         return (sFileName, fullPath);
156     }
157 
158     /// <summary>
159     /// 下载导入模板
160     /// </summary>
161     /// <typeparam name="T">数据类型</typeparam>
162     /// <param name="list">空数据类型集合</param>
163     /// <param name="fileName">下载文件名</param>
164     /// <returns></returns>
165     protected (string, string) DownloadImportTemplate<T>(List<T> list, string fileName)
166     {
167         IWebHostEnvironment webHostEnvironment = App.App.WebHostEnvironment;
168         string sFileName = $"{fileName}.xlsx";
169         string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "ImportTemplate", sFileName);
170 
171         //不存在模板创建模板
172         if (!Directory.Exists(fullPath))
173         {
174             Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
175             MiniExcel.SaveAs(fullPath, list, overwriteFile: true);
176         }
177         return (sFileName, fullPath);
178     }
179 
180     /// <summary>
181     /// 下载指定文件模板
182     /// </summary>
183     /// <param name="fileName">下载文件名</param>
184     /// <returns></returns>
185     protected (string, string) DownloadImportTemplate(string fileName)
186     {
187         IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
188         string sFileName = $"{fileName}.xlsx";
189         string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "ImportTemplate", sFileName);
190 
191         return (sFileName, fullPath);
192     }
193 }
  1 public class ApiResult
  2 {
  3     public int Code { get; set; }
  4     public string Msg { get; set; }
  5     /// <summary>
  6     /// 如果data值为null,则忽略序列化将不会返回data字段
  7     /// </summary>
  8     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
  9     public object Data { get; set; }
 10 
 11     /// <summary>
 12     /// 初始化一个新创建的APIResult对象,使其表示一个空消息
 13     /// </summary>
 14     public ApiResult()
 15     {
 16     }
 17 
 18     /// <summary>
 19     /// 初始化一个新创建的 ApiResult 对象
 20     /// </summary>
 21     /// <param name="code"></param>
 22     /// <param name="msg"></param>
 23     public ApiResult(int code, string msg)
 24     {
 25         Code = code;
 26         Msg = msg;
 27     }
 28 
 29     /// <summary>
 30     /// 初始化一个新创建的 ApiResult 对象
 31     /// </summary>
 32     /// <param name="code"></param>
 33     /// <param name="msg"></param>
 34     public ApiResult(int code, string msg, object data)
 35     {
 36         Code = code;
 37         Msg = msg;
 38         if (data != null)
 39         {
 40             Data = data;
 41         }
 42     }
 43 
 44     /// <summary>
 45     /// 返回成功消息
 46     /// </summary>
 47     /// <returns></returns>
 48     public ApiResult Success()
 49     {
 50         Code = (int)ResultCode.SUCCESS;
 51         Msg = "success";
 52         return this;
 53     }
 54 
 55     ///// <summary>
 56     ///// 返回成功消息
 57     ///// </summary>
 58     ///// <param name = "data" > 数据对象 </ param >
 59     ///// < returns > 成功消息 </ returns >
 60     //public static ApiResult Success(object data) { return new ApiResult(HttpStatus.SUCCESS, "success", data); }
 61 
 62     /// <summary>
 63     /// 返回成功消息
 64     /// </summary>
 65     /// <param name="msg">返回内容</param>
 66     /// <returns>成功消息</returns>
 67     public static ApiResult Success(string msg) { return new ApiResult(HttpStatus.SUCCESS, msg, null); }
 68 
 69     /// <summary>
 70     /// 返回成功消息
 71     /// </summary>
 72     /// <param name="msg">返回内容</param>
 73     /// <param name="data">数据对象</param>
 74     /// <returns>成功消息</returns>
 75     public static ApiResult Success(string msg, object data) { return new ApiResult(HttpStatus.SUCCESS, msg, data); }
 76 
 77     /// <summary>
 78     /// 访问被拒
 79     /// </summary>
 80     /// <returns></returns>
 81     public ApiResult On401()
 82     {
 83         Code = (int)ResultCode.DENY;
 84         Msg = "access denyed";
 85         return this;
 86     }
 87     public ApiResult Error(ResultCode resultCode, string msg = "")
 88     {
 89         Code = (int)resultCode;
 90         Msg = msg;
 91         return this;
 92     }
 93 
 94     /// <summary>
 95     /// 返回失败消息
 96     /// </summary>
 97     /// <param name="code"></param>
 98     /// <param name="msg"></param>
 99     /// <returns></returns>
100     public static ApiResult Error(int code, string msg) { return new ApiResult(code, msg); }
101 
102     /// <summary>
103     /// 返回失败消息
104     /// </summary>
105     /// <param name="msg"></param>
106     /// <returns></returns>
107     public static ApiResult Error(string msg) { return new ApiResult((int)ResultCode.CUSTOM_ERROR, msg); }
108 
109     public override string ToString()
110     {
111         return $"msg={Msg},data={Data}";
112     }
113 }
114 
115 public class ApiResult<T> : ApiResult
116 {
117     public T Result { get; set; }
118 }

ControllerBase 导出Excel 需要导入MiniExcelLibs

posted @ 2024-06-24 15:26  乐 乐——1128  阅读(1)  评论(0编辑  收藏  举报