using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Data; using System.Web; using System.Text; using Admin.NET.Core; namespace Admin.NET.Application; /// /// 库位视图服务 /// [ApiDescriptionSettings(ApplicationConst.ReportCenterGroupName, Order = 100)] public class WmsPlaceContainerInfoService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _v_wms_location_view_detailsRep; public WmsPlaceContainerInfoService(SqlSugarRepository rep, SqlSugarRepository v_wms_location_view_detailsRep) { _rep = rep; _v_wms_location_view_detailsRep = v_wms_location_view_detailsRep; } /// /// 不分页查询库位视图 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] [Description("WmsPlaceContainerInfo/List")] public async Task List([FromQuery] WmsPlaceContainerInfoInput input) { var query = await CommonPageFilter(input).ToListAsync(); InventoryByLocationOutput output = new InventoryByLocationOutput(); int EmptyLocation = 0;//空库位数量 int EmptyContainerLocation = 0;//空托数量 int MaterialLocation = 0;//满托数量 int LockedLocation = 0;// 锁定库位数量 int DisableLocation = 0;//封存库位数量 //分组 var groups = query.GroupBy(x => new { x.WareLocationCode }); foreach (var gg in groups) { //判断状态,是空托,还是 满托,还是空库位 var stocks = gg.ToList(); //有物料(非RQ)的容器集合 var materialContinerList = stocks.Where(x => !string.IsNullOrWhiteSpace(x.MaterialCode) && x.MaterialCode != ApplicationConst.DefaultContinerMaterialCode).ToList(); //有货库位 if (materialContinerList.Count() > 0) { //有货库位(物料) MaterialLocation++; foreach (var ss in stocks) { ss.InventoryType = 2; } }else //只有一条容器库位关系记录 //空库位 if (stocks.Count == 1 && string.IsNullOrEmpty(stocks.First().WareContainerCode) && string.IsNullOrEmpty(stocks.First().MaterialCode)) { //空库位 EmptyLocation++; foreach (var ss in stocks) { ss.InventoryType = 0; } } else { // 物料是容器的空容器(叠托)或容器没有物料 EmptyContainerLocation++; foreach (var ss in stocks) { ss.InventoryType = 1; } } var item = stocks.First(); // ----------- ly0729 -库位状态-1显示 0隐藏 if (input.InventoryType != null) { if (input.InventoryType == 0) { item.ShowInventoryType = item.InventoryType == 0 ? "1" : "0"; } else if (input.InventoryType == 1) { item.ShowInventoryType = item.InventoryType == 1 ? "1" : "0"; } else if (input.InventoryType == 2) { item.ShowInventoryType = item.InventoryType == 2 ? "1" : "0"; } else { item.ShowInventoryType = "0"; } } else { item.ShowInventoryType = "1"; } // ----------- ly-库位状态-1显示 0隐藏 if (item.Status == PlaceStatusEnum.封存) { DisableLocation++; } else if (item.Status == PlaceStatusEnum.锁定) { LockedLocation++; } if (output.Lanes != null) { var tempInventoryByLocationOutput = output.Lanes.Where(x => x.LaneCode == item.Lane).FirstOrDefault(); if (tempInventoryByLocationOutput == null) { List rowLocations = new List() { item }; List rows = new List() { new Row() { RowCode = item.Row, RowLocations = rowLocations } }; Lane lane = new Lane() { LaneCode = item.Lane, Rows = rows }; output.Lanes.Add(lane); } else { var temp2 = output.Lanes.Where(x => x.LaneCode == item.Lane && x.Rows.Where(u => u.RowCode == item.Row).ToList().Count > 0).FirstOrDefault(); if (temp2 == null) { List rowLocations = new List() { item }; Row row = new Row() { RowCode = item.Row, RowLocations = rowLocations }; tempInventoryByLocationOutput.Rows.Add(row); } else { tempInventoryByLocationOutput.Rows.Where(u => u.RowCode == item.Row).FirstOrDefault().RowLocations.Add(item); } } } else { List rowLocations = new List() { item }; List rows = new List() { new Row() { RowCode = item.Row, RowLocations = rowLocations } }; List lanes = new List() { new Lane() { LaneCode = item.Lane, Rows = rows } }; output = new InventoryByLocationOutput() { Lanes = lanes }; } } output.EmptyLocation = EmptyLocation; output.EmptyContainerLocation = EmptyContainerLocation; output.MaterialLocation = MaterialLocation; output.LockedLocation = LockedLocation; output.DisableLocation = DisableLocation; return output; } /// /// 不分页查询库位视图 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [Description("WmsPlaceContainerInfo/Detail")] public async Task> Detail([FromQuery] WmsStockQuanInput input) { var query = _v_wms_location_view_detailsRep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCode), u => u.PlaceCode.Contains(input.PlaceCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.ContainerCode), u => u.ContainerCode.Contains(input.ContainerCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.MaterialCode), u => u.MaterialCode.Contains(input.MaterialCode.Trim())) .Select(); return await query.OrderBuilder(input, "", "MaterialCode").ToPagedListAsync(input.Page, input.PageSize); } #region 私有方法 /// /// 公共查询事务记录条件 /// /// /// private ISugarQueryable CommonPageFilter(WmsPlaceContainerInfoInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.WareLocationCode.Contains(input.SearchKey.Trim()) || u.WareContainerCode.Contains(input.SearchKey.Trim()) //|| u.Lane==input.Lane //|| u.Row==input.Row ) .WhereIF(!string.IsNullOrWhiteSpace(input.AreaCode), u => u.AreaCode.Contains(input.AreaCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.WareContainerCode), u => u.WareContainerCode.Contains(input.WareContainerCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.WareLocationCode), u => u.WareLocationCode.Contains(input.WareLocationCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.WareLocationName), u => u.WareLocationName.Contains(input.WareLocationName.Trim())) .WhereIF(input.Lane.HasValue, u => u.Lane == input.Lane) .WhereIF(input.Row.HasValue, u => u.Row == input.Row) .WhereIF(input.Status.HasValue, u => u.Status == input.Status) .OrderBy(u => u.Lane).OrderBy(u => u.Row) .OrderBy(u => u.Column) .OrderBy(u => u.Layer) .Select(); return query; } #endregion }