using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
namespace Admin.NET.Application
{
///
/// 库存信息服务
///
[ApiDescriptionSettings("仓库作业", Name = "WmsMaterialStock", Order = 106)]
[Route("api/[Controller]")]
public class MaterialStockService : IDynamicApiController, ITransient
{
private readonly IRepository _wmsMaterialStockRep;
private readonly IRepository _wmsAreaRep;
///
/// 构造函数
///
public MaterialStockService(
IRepository wmsAreaRep,
IRepository wmsMaterialStockRep
)
{
_wmsAreaRep = wmsAreaRep;
_wmsMaterialStockRep = wmsMaterialStockRep;
}
///
/// 分页查询库存表
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WmsMaterialStockSearch input)
{
var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.MaterialNo), u => EF.Functions.Like(u.MaterialNo, $"%{input.MaterialNo.Trim()}%"))
.Where(input.MaterialType != null, u => u.MaterialType == input.MaterialType)
.Where(!string.IsNullOrEmpty(input.MaterialBatch), u => EF.Functions.Like(u.MaterialBatch, $"%{input.MaterialBatch.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.MaterialSpec), u => EF.Functions.Like(u.MaterialSpec, $"%{input.MaterialSpec.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.MaterialDensity), u => EF.Functions.Like(u.MaterialDensity, $"%{input.MaterialDensity.Trim()}%"))
.Where(u => u.StockNumber != 0)
.Where(!string.IsNullOrEmpty(input.PlaceCode), u => EF.Functions.Like(u.PlaceCode, $"%{input.PlaceCode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%"))
.Where(input.AreaId > 0, u => u.AreaId == input.AreaId)
.Where(input.SearchBeginTime != null && input.SearchEndTime != null, u => u.CreatedTime >= DateTime.Parse(input.SearchBeginTime.Trim()) &&
u.CreatedTime <= DateTime.Parse(input.SearchEndTime.Trim()))
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
//根据id获取名称
foreach (var item in wmsMaterialStocks.Rows)
{
//根据库区id获取库区名称
var data = await _wmsAreaRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == item.AreaId);
if (data != null) item.AreaName = data.AreaName;
}
return wmsMaterialStocks;
}
///
/// 增加库存表
///
///
///
[HttpPost("add")]
public async Task Add(AddMaterialStockInput input)
{
var wmsMaterialStock = input.Adapt();
await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock);
}
///
/// 删除库存表
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteMaterialStockInput input)
{
var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock);
}
///
/// 更新库存表
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateMaterialStockInput input)
{
var isExist = await _wmsMaterialStockRep.AnyAsync(u => u.Id == input.Id, false);
if (!isExist) throw Oops.Oh(ErrorCode.D3000);
var wmsMaterialStock = input.Adapt();
await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock, ignoreNullValues: true);
}
///
/// 获取库存表
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeMaterialStockInput input)
{
return (await _wmsMaterialStockRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取库存表列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] MaterialStockInput input)
{
return await _wmsMaterialStockRep.DetachedEntities.ProjectToType().ToListAsync();
}
///
/// 获取WmsArea列表
///
///
[HttpGet("WmsArea")]
public async Task FkWmsAreaList()
{
var list = await _wmsAreaRep.DetachedEntities.ToListAsync();
return list.Select(e => new { Code = e.Id, Name = e.AreaName });
}
}
}