using Learn.Archives.API.Expand; using Learn.Archives.Core.Common; using Learn.Archives.Core.Common.Expand; using Learn.Archives.Core.Model.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; using SqlSugar; using UserCenter.Model.Interface; namespace Learn.Archives.API.Controllers { [ApiController] public class _BaseController : ControllerBase { } /// /// 管理员接口 /// [Authorize(AuthenticationSchemes = Authentication.Admin)] [Route("api/[controller]/[action]")] public abstract class BackBaseController : _BaseController { } /// /// 管理员的公共接口 /// /// public abstract class BackController : BackBaseController where T : class, IDFilter, new() { readonly Repository _baseRepository; /// /// /// /// public BackController(Repository baseService) : base() { _baseRepository = baseService; } /// /// 详情 /// /// /// [HttpGet, Route("{id}")] public virtual async Task Info(long id) { return await _baseRepository.GetByIdAsync(id); } /// /// 新增/修改 /// id=0 时新增 /// /// /// [HttpPost, Route("edit")] [HttpLogEnable] public virtual async Task Edit([FromBody] T model) { if (model.Id == 0) return await _baseRepository.InsertAsync(model); else return await _baseRepository.UpdateAsync(model); } /// /// 删除 /// /// /// [HttpPost, Route("delete")] [HttpLogEnable] public virtual async Task Del([FromBody] params long[] ids) { var db = _baseRepository; int sum = 0; if (typeof(T).IsAssignableFrom(typeof(IDeletedFilter))) { if(ids.Length==1) return await db.DeleteByIdAsync(ids.First()); else return await db.DeleteByIdsAsync(ids.Select(s=>(dynamic)s).ToArray()); } try { db.Context.Ado.BeginTran(); foreach (var item in ids) sum += await db.AsUpdateable().SetColumns("DeleteState", true) .Where("Id=" + item).ExecuteCommandAsync(); db.Context.Ado.CommitTran(); } catch { db.Context.Ado.RollbackTran(); throw; } return true; } /// /// 分页/全查 的基础查询函数 /// /// /// /// [NonAction] public virtual ISugarQueryable BaseQuery(QueryDto model) { List where = [.. model.Conditions]; var d = _baseRepository.AsQueryable() .Where(where); if ((typeof(T)).GetProperty("DeleteState") != null) d = d.Where("DeleteState=0"); if (!string.IsNullOrEmpty(model.OrderBy)) return d.OrderByPropertyName(model.OrderBy, model.OrderByType); return d; } /// /// 分页查询 /// /// /// [HttpPost, Route("pagelist")] public virtual async Task GetPageList([FromBody] QueryRequestBase model) { var sqlquery = BaseQuery(model); RefAsync total = 0; var data = await sqlquery.ToPageListAsync(model.PageIndex + 1, model.PageSize, total); return new PageResult() { Data = data, Total = total }; } /// /// 查询下拉列表 /// /// /// [HttpPost, Route("querycombo")] public virtual async Task> QueryCombo([FromBody] QueryCombo model) { if (string.IsNullOrEmpty(model.ValueName) || string.IsNullOrEmpty(model.TextName)) Oh.ModelError("ValueName TextName 是必填项"); var sqlquery = BaseQuery(model); var res = await sqlquery.Select($"{model.TextName} as Text , {model.ValueName} as Value").ToListAsync(); return res; } } }