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 iWare.Wms.Application
{
///
/// 库区信息
///
[ApiDescriptionSettings("基础信息", Name = "WmsArea", Order = 100)]
[Route("api/[Controller]")]
public class WmsAreaService : IWmsAreaService, IDynamicApiController, ITransient
{
private readonly IRepository _wmsAreaRep;
public WmsAreaService(
IRepository wmsAreaRep
)
{
_wmsAreaRep = wmsAreaRep;
}
///
/// 分页查询库区信息
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WmsAreaSearch input)
{
var wmsAreas = await _wmsAreaRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.Areaname), u => EF.Functions.Like(u.AreaName, $"%{input.Areaname.Trim()}%"))
.Where(input.Areatype != null, u => u.AreaType == input.Areatype)
.Where(input.Areastatus != null, u => u.AreaStatus == input.Areastatus)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsAreas;
}
///
/// 增加库区信息
///
///
///
[HttpPost("add")]
public async Task Add(AddWmsAreaInput input)
{
var isExit = await _wmsAreaRep.AnyAsync(n => n.AreaName == input.Areaname);
if (isExit) throw Oops.Oh("存在的相同的库区名称!");
var wmsArea = input.Adapt();
await _wmsAreaRep.InsertAsync(wmsArea);
}
///
/// 删除库区信息
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteWmsAreaInput input)
{
var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await _wmsAreaRep.DeleteAsync(wmsArea);
}
///
/// 更新库区信息
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateWmsAreaInput input)
{
var isExist = await _wmsAreaRep.AnyAsync(u => u.Id == input.Id, false);
if (!isExist) throw Oops.Oh(ErrorCode.D3000);
var wmsArea = input.Adapt();
await _wmsAreaRep.UpdateAsync(wmsArea,ignoreNullValues:true);
}
///
/// 获取库区信息
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeWmsAreaInput input)
{
return (await _wmsAreaRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取库区信息列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] WmsAreaInput input)
{
return await _wmsAreaRep.DetachedEntities.ProjectToType().ToListAsync();
}
}
}