///////////////////////////////////////////////////////////////////////////////// // 宁波拓通e智造平台 ToTong Next Builder // // https://git.tuotong-tech.com/tnb/tnb-server // ///////////////////////////////////////////////////////////////////////////////// using System.Reflection; using JNPF.Common.Security; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.Core; using Tnb.Vengine.DataAccess; using Tnb.Vengine.Domain; namespace Tnb.Vengine.AppService; /// /// 增删改查基类 /// [Authorize] //[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)] [Route("api/[area]/[controller]/[action]")] public class VengineAppService : BaseAppService where TEntity : Entity { protected readonly IDataAccess _dataAccess; protected readonly ISqlSugarClient _db; /// /// 构造函数 /// public VengineAppService(IDataAccess dataAccess) { _dataAccess = dataAccess; _db = _dataAccess.GetSqlSugar(); } protected async Task GetVmodelAsync() { var tp = typeof(TEntity); string? area = null, code = null; var vset = tp.GetCustomAttribute(); if (vset != null) { area = vset.Area; code = vset.Code; } if (string.IsNullOrEmpty(area)) { ThrowIf.IsNullOrEmpty(tp.Namespace, $"类型 {nameof(tp)} 的命名空间不可为空"); area = tp.Namespace.RemovePreFix(ModuleConst.NsPrefix + ".").Replace(".Domain", "").Replace(".Entities", "").ToKebab(); } if (string.IsNullOrEmpty(code)) { code = tp.Name.ToKebab(); } var vm = await _dataAccess.GetVmodelAsync(area, code, true); return vm; } /// /// 获取一条 数据信息 /// [HttpGet] public virtual async Task GetAsync([FromQuery] VmGetInput input) { var vm = await GetVmodelAsync(); VmListInput arg = input.Adapt(); if (input.id != null) { if (arg.q == null) arg.q = new DObject(); arg.q.Add(vm.GetPrimary().code, input.id); } var ls = await _dataAccess.QueryDataAsync(vm, arg); return ls.items.FirstOrDefault()!; } /// /// 获取多条 数据列表 /// [HttpGet] public virtual async Task GetListAsync([FromQuery] VmGetListInput input) { var vm = await GetVmodelAsync(); var ls = await _dataAccess.QueryDataAsync(vm, input.ToListInput()); return ls; } /// /// 获取多条 数据列表 /// [HttpPost] public virtual async Task ListAsync([FromBody] VmListInput input) { var vm = await GetVmodelAsync(); var ls = await _dataAccess.QueryDataAsync(vm, input); return ls; } /// /// 新增 数据 /// [HttpPost] public virtual async Task CreateAsync([FromBody] VmCreateInput input) { var vm = await GetVmodelAsync(); var ret = await _dataAccess.CreateDataAsync(vm, input); return ret; } /// /// 更新 数据 /// [HttpPut] public virtual async Task UpdateAsync([FromBody] VmUpdateInput input) { var vm = await GetVmodelAsync(); var ret = await _dataAccess.UpdateDataAsync(vm, input); return ret; } /// /// 删除 数据 /// [HttpDelete] public virtual async Task DeleteAsync([FromQuery] VmDeleteInput input) { var vm = await GetVmodelAsync(); var ret = await _dataAccess.DeleteDataAsync(vm, input); return ret; } }