using System.Reflection; 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 data = (await InvokeServiceAsync("QueryFilterPage", [filter])) as ServicePageResult; return data; } /// /// 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> Insert([FromBody] TInsertDto 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 return Failed("新增失败"); return data; } #endregion #region 更新 /// /// Ghra_Grade -- 更新数据 /// /// 主键ID /// /// [HttpPut("{Id}")] public async Task Put(long Id, [FromBody] TEditDto editModel) { var data = Success("更新成功"); var flag = Convert.ToBoolean(await InvokeServiceAsync("Update", [Id, editModel])); if (!flag) return Failed("更新失败"); return data; } #endregion #region 删除 /// /// Ghra_Grade -- 删除数据 /// /// 主键ID /// [HttpDelete("{Id}")] public async Task Delete(long Id) { var data = Success("删除成功"); var isExist = Convert.ToBoolean(await InvokeServiceAsync("AnyAsync", [Id])); if (!isExist) return Failed("删除失败"); data.success = Convert.ToBoolean(await InvokeServiceAsync("DeleteById1", [Id])); if (!data.success) return Failed("删除失败"); return data; } #endregion #endregion /// /// 反射调用service方法 /// /// /// /// [NonAction] private object InvokeService(string methodName, object[] parameters) { return _service.GetType().GetMethod(methodName).Invoke(_service, parameters); } /// /// 反射调用service方法 /// /// /// 为要调用重载的方法参数类型:new Type[] { typeof(SaveDataModel) /// /// [NonAction] private object InvokeService(string methodName, Type[] types, object[] parameters) => _service.GetType().GetMethod(methodName, types).Invoke(_service, parameters); [NonAction] 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 }; } }