using System.Collections.Generic; using System.Reflection; using Tiobon.Core.Model; namespace Tiobon.Core.Controllers { public class BaseController : Controller { #region 初始化 protected IServiceBase _service; /// /// /// public BaseController(IServiceBase service) { _service = service; } #endregion #region 基础接口 #region 查询 /// /// Ghra_Grade -- 根据条件查询数据 /// /// 条件 /// [HttpGet] public async Task>> QueryByFilter([FromFilter] QueryFilter filter) { var response = (await InvokeServiceAsync("QueryFilterPage", [filter])) as PageModel; return new ServiceResult>() { msg = "获取成功", success = true, response = response }; } /// /// Ghra_Grade -- 根据Id查询数据 /// /// 主键ID /// [HttpGet("{Id}")] public async Task> QueryById(long Id) { var entity = (await InvokeServiceAsync("QueryById", [Id])); if (entity == null) return Failed("获取失败"); else return Success(entity, "获取成功"); } #endregion #region 新增 /// /// Ghra_Grade -- 新增数据 /// /// /// [HttpPost] public async Task> Post([FromBody] TEditDto insertModel) { var data = Success(null, "新增成功"); var id = Convert.ToInt64(await InvokeServiceAsync("Add", [insertModel])); data.success = id > 0; if (data.success) data.response = id.ObjToString(); else data.msg = "新增失败"; return data; } #endregion #region 更新 /// /// Ghra_Grade -- 更新数据 /// /// /// /// [HttpPut("{Id}")] public async Task Put(long Id, [FromBody] TEditDto editModel) { var data = Success("更新成功"); var id = Convert.ToInt64(await InvokeServiceAsync("Update", [Id, editModel])); if (!data.success) data.msg = "更新失败"; return data; } #endregion #region 删除 /// /// Ghra_Grade -- 删除数据 /// /// /// [HttpDelete("{Id}")] public async Task Delete(long Id) { var data = Success("删除成功"); var entity = await QueryById(Id); if (entity == null) return Failed("删除失败"); //entity.IsEnable = 0; data.success = Convert.ToBoolean(await InvokeServiceAsync("Update", [entity])); if (!data.success) data.msg = "删除失败"; return data; } #endregion #endregion /// /// 反射调用service方法 /// /// /// /// private object InvokeService(string methodName, object[] parameters) { return _service.GetType().GetMethod(methodName).Invoke(_service, parameters); } /// /// 反射调用service方法 /// /// /// 为要调用重载的方法参数类型:new Type[] { typeof(SaveDataModel) /// /// private object InvokeService(string methodName, Type[] types, object[] parameters) => _service.GetType().GetMethod(methodName, types).Invoke(_service, parameters); private async Task InvokeServiceAsync(string methodName, object[] parameters) { var task = _service.GetType().InvokeMember(methodName, BindingFlags.InvokeMethod, null, _service, parameters) as Task; if (task != null) await task; var result = task?.GetType().GetProperty("Result")?.GetValue(task); return result; } [NonAction] public ServiceResult Success(T data, string msg = "成功") { return new ServiceResult() { success = true, msg = msg, response = data, }; } // [NonAction] //public ServiceResult Success(T data, string msg = "成功",bool success = true) //{ // return new ServiceResult() // { // success = success, // msg = msg, // response = data, // }; //} [NonAction] public ServiceResult Success(string msg = "成功") { return new ServiceResult() { success = true, msg = msg, response = null, }; } [NonAction] public ServiceResult Failed(string msg = "失败", int status = 500) { return new ServiceResult() { success = false, status = status, msg = msg, response = null, }; } [NonAction] public ServiceResult Failed(string msg = "失败", int status = 500) { return new ServiceResult() { success = false, status = status, msg = msg, response = default, }; } [NonAction] public ServiceResult> SuccessPage(int page, int dataCount, int pageSize, List data, int pageCount, string msg = "获取成功") { return new ServiceResult>() { success = true, msg = msg, response = new PageModel(page, dataCount, pageSize, data) }; } [NonAction] public ServiceResult> SuccessPage(PageModel pageModel, string msg = "获取成功") { return new ServiceResult>() { success = true, msg = msg, response = pageModel }; } } }