using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using iWare.Wms.Core; using iWare.Wms.Core.Enum; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; using System.Linq.Dynamic.Core; namespace iWare.Wms.Application { /// /// 库位视图 /// [ApiDescriptionSettings("统计查询", Name = "LocationView", Order = 100)] [Route("api/[Controller]")] public class LocationViewService : ILocationViewService, IDynamicApiController, ITransient { private readonly IRepository _wmsContainerRep; private readonly IRepository _wmsMaterialRep; private readonly IRepository _wmsMaterialContainerRep; private readonly IRepository _wmsAreaRep; private readonly IRepository _wmsPlaceRep; private readonly IRepository _wmsTaskRep; private readonly IRepository _wmsMaterialStockRep; private readonly IRepository _wmsContainerPlaceRep; private readonly IRepository _wareLocationVsContainer; private readonly IRepository _v_ware_inventory_by_container; public LocationViewService( IRepository wmsContainerRep, IRepository wmsMaterialRep, IRepository wmsMaterialContainerRep, IRepository wmsAreaRep, IRepository wmsPlaceRep, IRepository wmsTaskRep, IRepository wmsMaterialStockRep, IRepository wmsContainerPlaceRep, IRepository wareLocationVsContainer, IRepository v_ware_inventory_by_container ) { _wmsContainerRep = wmsContainerRep; _wmsMaterialRep = wmsMaterialRep; _wmsMaterialContainerRep = wmsMaterialContainerRep; _wmsAreaRep = wmsAreaRep; _wmsPlaceRep = wmsPlaceRep; _wmsTaskRep = wmsTaskRep; _wmsMaterialStockRep = wmsMaterialStockRep; _wmsContainerPlaceRep = wmsContainerPlaceRep; _wareLocationVsContainer = wareLocationVsContainer; _v_ware_inventory_by_container = v_ware_inventory_by_container; } /// /// 获取库区信息 /// /// /// [HttpGet("GetArea")] public async Task> GetArea() { var areaList = await _wmsAreaRep.Where(n => n.AreaStatus == CommonStatus.ENABLE).ToListAsync(); return areaList; } /// /// 根据库区获取排 /// /// /// [HttpGet("GetPalceRowno")] public async Task GetPalceRowno([FromQuery] GetPalceRownoInput input) { return await _wmsPlaceRep.Where(n => n.AreaId == input.Areaid).Select(n => n.RowNo).Distinct().ToListAsync(); } /// /// 根据库区 排获取库位信息 /// /// /// [HttpGet("GetPalceList")] public async Task GetPalceList([FromQuery] GetPalceListInput input) { //var palceList = await _wmsPlaceRep.Where(p => p.AreaId == input.Areaid && p.RowNo == input.Rowno).ToListAsync(); var palceList = await _wmsPlaceRep.DetachedEntities.AsQueryable().ToListAsync(); var lvc = await _wareLocationVsContainer.DetachedEntities.AsQueryable().ToListAsync(); foreach (var item in palceList) { if (lvc.Any(u => u.WareLocationCode == item.PlaceCode)) { item.PlaceStatus = PlaceStatus.CUNHUO; } else { item.PlaceStatus = PlaceStatus.KONGXIAN; } } return new PalceInfoOtput() { countNum = palceList.Count, cunhuoNum = palceList.Where(n => n.PlaceStatus == Core.Enum.PlaceStatus.CUNHUO).Count(), emptyNum = palceList.Where(n => n.PlaceStatus == Core.Enum.PlaceStatus.KONGXIAN).Count(), emptyContainerNum = palceList.Where(p => p.EmptyContainer == YesOrNot.Y && p.PlaceStatus == Core.Enum.PlaceStatus.CUNHUO).Count(), materialNum = palceList.Where(p => p.EmptyContainer == YesOrNot.N && p.PlaceStatus == Core.Enum.PlaceStatus.CUNHUO).Count(), lockNum = palceList.Where(p => p.Islock == YesOrNot.Y).Count(), PalceDetails = palceList.Adapt>() }; } /// /// 根据库位获取对应信息 /// /// /// [HttpGet("GetMaterialDetail")] [UnifyResult(typeof(MaterialDetailsOutput))] public async Task GetMaterialDetail([FromQuery] GetMaterialDetailInput input) { var palceModel = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.Id == input.ID); if (palceModel == null) return XnRestfulResultProvider.RESTfulMesaage("库位信息不存在!"); var MaterialStockList = await _v_ware_inventory_by_container.Where(p => p.WareLocationCode == palceModel.PlaceCode).ToListAsync(); var model = new MaterialDetailsOutput() { PalceDetails = palceModel.Adapt() }; if (MaterialStockList.Count>0) { model.Containercode = MaterialStockList.FirstOrDefault().WareContainerCode; model.WmsMaterialStocks = MaterialStockList.Adapt>() ; } return XnRestfulResultProvider.RESTfulResult(model); } /// /// 修改库位锁定信息 /// /// /// [HttpGet("UpdatePalceIslock")] [UnifyResult(typeof(object))] public async Task UpdatePalceIslock([FromQuery] GetMaterialDetailInput input) { var palceModel = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.Id == input.ID); if (palceModel == null) return XnRestfulResultProvider.RESTfulMesaage("库位信息不存在!"); if (palceModel.Islock == YesOrNot.Y) { palceModel.Islock = YesOrNot.N; } else { palceModel.Islock = YesOrNot.Y; } await _wmsPlaceRep.UpdateAsync(palceModel); return XnRestfulResultProvider.RESTfulResult(); } } }