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)});
@:}
}
}
}
}