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