using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using iWare.Wms.Core; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; namespace @Model.NameSpace { /// /// @(@Model.BusName)服务 /// [Route("api")] [ApiDescriptionSettings("自己的业务", Name = "@Model.ClassName", Order = 100)] [Route("api/[Controller]")] public class @(@Model.ClassName)Service : I@(@Model.ClassName)Service, IDynamicApiController, ITransient { private readonly IRepository<@(@Model.ClassName),@(@Model.DatabaseName)> _@(@Model.CamelizeClassName)Rep; @foreach (var column in Model.TableField){ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnName != ""){ @:private readonly IRepository<@(@column.FkEntityName)> _@(@column.LowerFkEntityName)Rep; } } @if(@Model.IsFile) { @:private readonly IRepository _sysFileInfoRep; } public @(@Model.ClassName)Service( @foreach (var column in Model.TableField){ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnName != ""){ @:IRepository<@(@column.FkEntityName)> @(@column.LowerFkEntityName)Rep, } } IRepository<@(@Model.ClassName),@(@Model.DatabaseName)> @(@Model.CamelizeClassName)Rep @if(@Model.IsFile) { @:,IRepository sysFileInfoRep } ) { @foreach (var column in Model.TableField){ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnName != ""){ @:_@(@column.LowerFkEntityName)Rep = @(@column.LowerFkEntityName)Rep; } } _@(@Model.CamelizeClassName)Rep = @(@Model.CamelizeClassName)Rep; @if(@Model.IsFile) { @:_sysFileInfoRep = sysFileInfoRep; } } /// /// 分页查询@(@Model.BusName) /// /// /// [HttpGet("page")] public async Task> Page([FromQuery] @(@Model.ClassName)Search input) { var @(@Model.CamelizeClassName)s = await _@(@Model.CamelizeClassName)Rep.DetachedEntities @foreach (var column in Model.TableField){ if (@column.QueryWhether == "Y"){ if (@column.NetType == "string"){ if (@column.QueryType == "like"){ @:.Where(!string.IsNullOrEmpty(input.@column.ColumnName), u => EF.Functions.Like(u.@(@column.ColumnName), $"%{input.@(@column.ColumnName).Trim()}%")) } else { @:.Where(!string.IsNullOrEmpty(input.@column.ColumnName), u => u.@(@column.ColumnName) @column.QueryType input.@(@column.ColumnName)) } } else { if (@column.EffectType == "fk"){ @:.Where(input.@column.ColumnName > 0, u => u.@(@column.ColumnName) @column.QueryType input.@(@column.ColumnName)) } else { @:.Where(input.@column.ColumnName != null, u => u.@(@column.ColumnName) @column.QueryType input.@(@column.ColumnName)) } } } } .OrderBy(PageInputOrder.OrderBuilder<@(@Model.ClassName)Search>(input)) .ProjectToType<@(@Model.ClassName)Output>() .ToADPagedListAsync(input.PageNo, input.PageSize); @if(@Model.IsFile) { @:@(@Model.CamelizeClassName)s.Rows.ToList().ForEach(item => @:{ foreach (var column in Model.FileTableField){ @:item.@(@column.ColumnName) = item.@(@column.ColumnName)_Str.GetFiles(_sysFileInfoRep); } @:}); } return @(@Model.CamelizeClassName)s; } /// /// 增加@(@Model.BusName) /// /// /// [HttpPost("add")] public async Task Add(Add@(@Model.ClassName)Input input) { var @(@Model.CamelizeClassName) = input.Adapt<@(@Model.ClassName)>(); await _@(@Model.CamelizeClassName)Rep.InsertAsync(@(@Model.CamelizeClassName)); } /// /// 删除@(@Model.BusName) /// /// /// [HttpPost("delete")] public async Task Delete(Delete@(@Model.ClassName)Input input) { @foreach (var column in Model.TableField){ if (@column.ColumnKey == "True"){ @:var @(@Model.CamelizeClassName) = await _@(@Model.CamelizeClassName)Rep.FirstOrDefaultAsync(u => u.@(@column.ColumnName) == input.@(@column.ColumnName)); } } await _@(@Model.CamelizeClassName)Rep.DeleteAsync(@(@Model.CamelizeClassName)); } /// /// 更新@(@Model.BusName) /// /// /// [HttpPost("edit")] public async Task Update(Update@(@Model.ClassName)Input input) { var isExist = await _@(@Model.CamelizeClassName)Rep.AnyAsync(u => u.Id == input.Id, false); if (!isExist) throw Oops.Oh(ErrorCode.D3000); var @(@Model.CamelizeClassName) = input.Adapt<@(@Model.ClassName)>(); await _@(@Model.CamelizeClassName)Rep.UpdateAsync(@(@Model.CamelizeClassName),ignoreNullValues:true); } /// /// 获取@(@Model.BusName) /// /// /// [HttpGet("detail")] public async Task<@(@Model.ClassName)Output> Get([FromQuery] Querye@(@Model.ClassName)Input input) { @foreach (var column in Model.TableField){ if (@column.ColumnKey == "True"){ @:return (await _@(@Model.CamelizeClassName)Rep.DetachedEntities.FirstOrDefaultAsync(u => u.@(@column.ColumnName) == input.@(@column.ColumnName))).Adapt<@(@Model.ClassName)Output>(); } } } /// /// 获取@(@Model.BusName)列表 /// /// /// [HttpGet("list")] public async Task> List([FromQuery] @(@Model.ClassName)Input input) { return await _@(@Model.CamelizeClassName)Rep.DetachedEntities.ProjectToType<@(@Model.ClassName)Output>().ToListAsync(); } @foreach (var column in Model.TableField){ if(@column.EffectType == "fk" && @column.FkEntityName != "" && @column.FkColumnName != ""){ @: @:/// @:/// 获取@(@column.FkEntityName)列表 @:/// @:/// @:[HttpGet("fk@(@column.FkEntityName)")] @:public async Task Fk@(@column.FkEntityName)List() @:{ @:var list = await _@(@column.LowerFkEntityName)Rep.DetachedEntities.ToListAsync(); @:return list.Select(e => new {Code = e.Id, Name = e.@(@column.FkColumnName)}); @:} } } } }