From f247ae1107a9834b6b9a722104c4ba3a73a552e9 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Mon, 18 Dec 2023 13:53:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=BA=93=E5=AD=98=E7=9A=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 25 ++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 8 + .../Dto/Inventory/BoxTaskGenerateDto.cs | 25 ++ .../Services/BoxInventoryService.cs | 146 +++++++++--- .../InStockRepositories.cs | 181 +++++++------- .../InStockTaskRepositories.cs | 224 +++++++++--------- 6 files changed, 367 insertions(+), 242 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 2879b93a..b585d74f 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -3012,6 +3012,31 @@ 类型:1为入库,2为出库 + + + 明细 + + + + + 明细 + + + + + 物料ID + + + + + 数量 + + + + + 序列号集 + + 即时库存明细:生成dto diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index b9a13442..d5c75aa1 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3686,6 +3686,14 @@ + + + 盘点单-箱库存的变更:第二步骤,为了不是当前扫的所在箱里的序列号;如果是其它箱的需要减箱库存 + + + + + 入库单-箱库存变更 diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxTaskGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxTaskGenerateDto.cs index 11745bd0..cf2aba82 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxTaskGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxTaskGenerateDto.cs @@ -18,5 +18,30 @@ namespace WMS.Web.Core.Dto.Inventory /// 类型:1为入库,2为出库 /// public int InventoryInOutType { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } + + /// + /// 明细 + /// + public class BoxTaskDetailsGenerateDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + + /// + /// 序列号集 + /// + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index 428fd470..7af88853 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -419,7 +419,7 @@ namespace WMS.Web.Domain.Services //2.1.遍历:组装明细 generateDtoList.ForEach(x => - { + { foreach (var detItem in dtoData.Details) { //2.1箱是当前的 @@ -933,7 +933,7 @@ namespace WMS.Web.Domain.Services x.SerialNumbers.AddRange(current_box_mat_serNums); }); } - else + else { //赋值序列号 addEntity.Details.ForEach(x => @@ -1129,6 +1129,11 @@ namespace WMS.Web.Domain.Services var update_entitys = new List(); var InventoryDetailsGenerateDto = new List(); + + var serNubs = dtoDatas.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList(); + var serialNumbers = await _serialNumbersRepositories.GetEntityList(serNubs); + var out_serNubs = new List(); + //2.获取“箱库存集合” var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); @@ -1158,6 +1163,22 @@ namespace WMS.Web.Domain.Services } } }); + + //找到:序列号不属于当前箱;找到后对应的箱子进行箱库存变更序列号 + foreach (var item in updateEntity.Details) + { + foreach (var itemSerNmb in item.SerialNumbers) + { + var current_item_SerNb = serialNumbers.Where(x => x.SerialNumber == itemSerNmb).FirstOrDefault(); + if (current_item_SerNb != null && current_item_SerNb.MaterialId == item.MaterialId && current_item_SerNb.BoxId != updateEntity.BoxId) + { + out_serNubs.Add(current_item_SerNb); + } + } + + } + + //3.4明细添加新的物料 foreach (var detItem in dto.Details) { @@ -1206,6 +1227,19 @@ namespace WMS.Web.Domain.Services } } }); + //找到:序列号不属于当前箱;找到后对应的箱子进行箱库存变更序列号 + foreach (var item in update_entity.Details) + { + foreach (var itemSerNmb in item.SerialNumbers) + { + var current_item_SerNb = serialNumbers.Where(x => x.SerialNumber == itemSerNmb).FirstOrDefault(); + if (current_item_SerNb != null && current_item_SerNb.MaterialId == item.MaterialId && current_item_SerNb.BoxId != update_entity.BoxId) + { + out_serNubs.Add(current_item_SerNb); + } + } + } + //3.4明细添加新的物料 foreach (var detItem in dto.Details) { @@ -1243,6 +1277,12 @@ namespace WMS.Web.Domain.Services isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); } + + //盘点单-箱库存的变更:第二步骤,为了不是当前扫的所在箱里的序列号;如果是其它箱需要减箱库存 + var result = await this.ExeTaskBox(out_serNubs, isTransaction); + if (!result.IsSuccess) + return result; + //5.即时库存:处理 //5.1先合并相同的数据 var invDetGenDtos_in = InventoryDetailsGenerateDto.Where(x => x.InventoryInOutType == (int)InventoryInOutType.In).GroupBy(x => new { x.OrgCode, x.MaterialId, x.StockCode, x.SubStockId }).Select(x => new InventoryDetailsGenerateDto() @@ -1276,44 +1316,76 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } - private async Task ExeTaskBox(List sourceBox,List serNubs, bool isTransaction) + /// + /// 盘点单-箱库存的变更:第二步骤,为了不是当前扫的所在箱里的序列号;如果是其它箱的需要减箱库存 + /// + /// + /// + /// + private async Task ExeTaskBox(List out_SerialNumbers, bool isTransaction) { - //1.先通过序列号找到-序列号信息集合 - var serialNumbers = await _serialNumbersRepositories.GetEntityList(serNubs); - //2.找到序列号对应的boxId - var destBoxIds = serialNumbers.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); - //3.找到box对应的箱库存 - var boxInventorys = await _boxInventoryRepositories.GetList(destBoxIds); + var boxIds = out_SerialNumbers.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); - var delete_ids = new List(); - var update_entitys = new List(); + var delete_ids1 = new List(); + var update_entitys1 = new List(); + var InventoryDetailsGenerateDto1 = new List(); + foreach (var item in boxInventorys) + { + var update_entity = item; - ////遍历 - //foreach (var destBoxId in destBoxIds) - //{ - // var sourBox= sourceBox.Where(x => x.BoxId == destBoxId).FirstOrDefault(); - // var destBoxInvent= boxInventorys.Where(x => x.BoxId == destBoxId).FirstOrDefault(); - // if (sourBox==null && destBoxInvent!=null) - // { - // if(destBoxInvent) - // var updateEntity = boxInvent; - // updateEntity.Details = boxInvent.Details; - // //3.3序列号重新给值:已有的物料 - // updateEntity.Details.ForEach(x => - // { - // foreach (var detItem in dto.Details) - // { - // if (x.MaterialId == detItem.MaterialId) - // { - // x.Qty = x.Qty + detItem.Qty; - // x.SerialNumbers = detItem.SerialNumbers; - // } - // } - // }); - // } - //} - return null; + foreach (var itemDet in item.Details) + { + var current_sers_info = out_SerialNumbers.Where(x => x.BoxId == item.BoxId && x.MaterialId == itemDet.MaterialId).ToList(); + if (current_sers_info != null && current_sers_info.Count != 0) + { + var uptDet = update_entity.Details.Where(d => d.MaterialId == itemDet.MaterialId).FirstOrDefault(); + uptDet.Qty = uptDet.Qty - current_sers_info.Count; + var crrent_sers = current_sers_info.Select(x => x.SerialNumber).ToList(); + uptDet.SerialNumbers.RemoveAll(r => crrent_sers.Contains(r)); + + //3.2.2组装即时库存dto + var inventoryDet = new InventoryDetailsGenerateDto(); + inventoryDet.MaterialId = itemDet.MaterialId; + inventoryDet.OrgCode = item.OrgCode; + inventoryDet.StockCode = item.StockCode; + inventoryDet.SubStockId = item.SubStockId; + inventoryDet.Qty = current_sers_info.Count; + inventoryDet.InventoryInOutType = (int)InventoryInOutType.Out; + //3.2.2即时库存:修改的集合 + InventoryDetailsGenerateDto1.Add(inventoryDet); + } + } + + //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改; + var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0); + if (isAllNoInventory) + delete_ids1.Add(update_entity.Id); + else + //4.2添加要更新的箱库存实体 + update_entitys1.Add(update_entity); + } + + var isSuccess = true; + //4.数据库更新操作:更新和添加 + if (update_entitys1.Count != 0) + { + isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys1, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + if (delete_ids1.Count != 0) + { + isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids1, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + if (InventoryDetailsGenerateDto1.Count != 0) + { + var InventoryDetailsGenerate_result = await _inventoryDetailsService.GenerateInventoryDetails(InventoryDetailsGenerateDto1, isTransaction); + if (!InventoryDetailsGenerate_result.IsSuccess) + return InventoryDetailsGenerate_result; + } + return Result.ReSuccess(); } /// @@ -1355,7 +1427,7 @@ namespace WMS.Web.Domain.Services { MaterialId = d.Key.MaterialId, Qty = d.Sum(t => t.Qty), - SerialNumbers = d.SelectMany(t => t.SerialNumbers).ToList() + SerialNumbers = d.SelectMany(t => t.SerialNumbers).ToList() }).ToList(); //3.4明细映射:用合并过的dto数据 addEntity.Details = _mapper.Map>(dtoDets_merge); diff --git a/src/WMS.Web.Repositories/InStockRepositories.cs b/src/WMS.Web.Repositories/InStockRepositories.cs index 98310324..5cced9a0 100644 --- a/src/WMS.Web.Repositories/InStockRepositories.cs +++ b/src/WMS.Web.Repositories/InStockRepositories.cs @@ -51,99 +51,7 @@ namespace WMS.Web.Repositories _singleDataService = singleDataService; _erpBasicDataExtendService = erpBasicDataExtendService; } - - /// - /// 列表-分页 - /// - /// - /// - public async Task<(List list, int total)> GetPagedList(InStockQueryRequest dto) - { - //1.获取物料集合和组织集合和供应商的集合 - var materials_result = await _erpService.BillQueryForMaterial(); - if (!materials_result.IsSuccess) - return (new List(), 0); - var materials = materials_result.Data.ToList(); - - //组织集合 - var orgs_result = await _erpService.BillQueryForOrg(); - if (!orgs_result.IsSuccess) - return (new List(), 0); - var orgs = orgs_result.Data.ToList(); - - //供应商集合 - var suppliers_result = await _erpService.BillQueryForSupplier(); - if (!suppliers_result.IsSuccess) - return (new List(), 0); - var suppliers = suppliers_result.Data.ToList(); - - //物料集合;模糊查询后的物料集合 - if (!string.IsNullOrEmpty(dto.MaterialNumber)) - materials = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber)).ToList(); - - //var query=_context.InStockDetails - // .GroupJoin(_context.Instock, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) - // .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) - // .Where(adv => 1 == 1); - var query = _context.InStockTotalDetails - .GroupJoin(_context.Instock, detail => detail.InStockId, order => order.Id, (detail, orders) => new { detail, orders }) - .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) - .Where(adv => 1 == 1); - - if (!string.IsNullOrEmpty(dto.SourceBillNo)) - query = query.Where(w => EF.Functions.Like(w.detail.SourceBillNo, "%" + dto.SourceBillNo + "%")); - - //物料ID在模糊后的物料 - if (materials != null && materials.Count != 0 && !string.IsNullOrEmpty(dto.MaterialNumber)) - { - var mids = materials.Select(x => x.MaterialId).ToList(); - query = query.Where(w => mids.Contains(w.detail.MaterialId)); - } - - if (dto.SupplierId.HasValue) - query = query.Where(w => w.detail.SupplierId == dto.SupplierId.Value); - - if (dto.OrgId.HasValue) - query = query.Where(w => w.order.OrgId == dto.OrgId.Value); - - if (!string.IsNullOrEmpty(dto.StockCode)) - { - var splitStrs = dto.StockCode.Split("_$"); - query = query.Where(w => w.order.StockCode == splitStrs[0] && w.order.OrgCode == splitStrs[1]); - } - - if (dto.Type.HasValue) - query = query.Where(w => (int)w.order.Type == dto.Type.Value); - - if (dto.CreateBeginDate != null) - query = query.Where(w => w.order.CreateTime >= dto.CreateBeginDate.Value); - if (dto.CreateEndDate != null) - query = query.Where(w => w.order.CreateTime <= dto.CreateEndDate.Value); - - var tt= _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, "CK003" + "101"); - - int total = await query.CountAsync(); - var list = await query.Select(s => new InStockQueryResponse() - { - Id=s.order.Id, - DetailsId=s.detail.Id, - BillNo=s.order.BillNo, - Type=s.order.Type.GetRemark(), - SourceBillNo=s.detail.SourceBillNo, - Supplier= _erpBasicDataExtendService.GetSupplierName(suppliers, s.detail.SupplierId), - Org = _erpBasicDataExtendService.GetOrgName(orgs, s.order.OrgId), - MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), - MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), - Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), - Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.order.StockCode+s.order.OrgCode), - Qty =s.detail.Qty, - Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId), - CreateTime =s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), - SuccessSync = s.order.SuccessSync == SyncStatus.Success ? "成功" : "失败", - }).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); - - return (list, total); - } + /// /// 箱是否存在于入库单明细中;(箱是否被上架了) @@ -300,5 +208,92 @@ namespace WMS.Web.Repositories return res; } + + /// + /// 列表-分页 + /// + /// + /// + public async Task<(List list, int total)> GetPagedList(InStockQueryRequest dto) + { + //1.获取物料集合和组织集合和供应商的集合 + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return (new List(), 0); + var materials = materials_result.Data.ToList(); + + //组织集合 + var orgs_result = await _erpService.BillQueryForOrg(); + if (!orgs_result.IsSuccess) + return (new List(), 0); + var orgs = orgs_result.Data.ToList(); + + //供应商集合 + var suppliers_result = await _erpService.BillQueryForSupplier(); + if (!suppliers_result.IsSuccess) + return (new List(), 0); + var suppliers = suppliers_result.Data.ToList(); + + //物料集合;模糊查询后的物料集合 + if (!string.IsNullOrEmpty(dto.MaterialNumber)) + materials = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber)).ToList(); + + var query = _context.InStockTotalDetails + .GroupJoin(_context.Instock, detail => detail.InStockId, order => order.Id, (detail, orders) => new { detail, orders }) + .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) + .Where(adv => 1 == 1); + + if (!string.IsNullOrEmpty(dto.SourceBillNo)) + query = query.Where(w => EF.Functions.Like(w.detail.SourceBillNo, "%" + dto.SourceBillNo + "%")); + + //物料ID在模糊后的物料 + if (materials != null && materials.Count != 0 && !string.IsNullOrEmpty(dto.MaterialNumber)) + { + var mids = materials.Select(x => x.MaterialId).ToList(); + query = query.Where(w => mids.Contains(w.detail.MaterialId)); + } + + if (dto.SupplierId.HasValue) + query = query.Where(w => w.detail.SupplierId == dto.SupplierId.Value); + + if (dto.OrgId.HasValue) + query = query.Where(w => w.order.OrgId == dto.OrgId.Value); + + if (!string.IsNullOrEmpty(dto.StockCode)) + { + var splitStrs = dto.StockCode.Split("_$"); + query = query.Where(w => w.order.StockCode == splitStrs[0] && w.order.OrgCode == splitStrs[1]); + } + + if (dto.Type.HasValue) + query = query.Where(w => (int)w.order.Type == dto.Type.Value); + + if (dto.CreateBeginDate != null) + query = query.Where(w => w.order.CreateTime >= dto.CreateBeginDate.Value); + if (dto.CreateEndDate != null) + query = query.Where(w => w.order.CreateTime <= dto.CreateEndDate.Value); + + int total = await query.CountAsync(); + var list = await query.Select(s => new InStockQueryResponse() + { + Id = s.order.Id, + DetailsId = s.detail.Id, + BillNo = s.order.BillNo, + Type = s.order.Type.GetRemark(), + SourceBillNo = s.detail.SourceBillNo, + Supplier = _erpBasicDataExtendService.GetSupplierName(suppliers, s.detail.SupplierId), + Org = _erpBasicDataExtendService.GetOrgName(orgs, s.order.OrgId), + MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), + MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), + Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.order.StockCode + s.order.OrgCode), + Qty = s.detail.Qty, + Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId), + CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), + SuccessSync = s.order.SuccessSync == SyncStatus.Success ? "成功" : "失败", + }).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); + + return (list, total); + } } } diff --git a/src/WMS.Web.Repositories/InStockTaskRepositories.cs b/src/WMS.Web.Repositories/InStockTaskRepositories.cs index 3f3a89e7..63559136 100644 --- a/src/WMS.Web.Repositories/InStockTaskRepositories.cs +++ b/src/WMS.Web.Repositories/InStockTaskRepositories.cs @@ -54,118 +54,7 @@ namespace WMS.Web.Repositories _singleDataService = singleDataService; _loginRepositories = loginRepositories; _erpBasicDataExtendService = erpBasicDataExtendService; - } - - /// - /// 列表-分页 - /// - /// - /// - public async Task<(List list, int total)> GetPagedList(InStockTaskQueryRequest dto) - { - //1.获取物料集合和组织集合 - var materials_result = await _erpService.BillQueryForMaterial(); - if (!materials_result.IsSuccess) - return (new List(), 0); - var materials = materials_result.Data.ToList(); - //组织集合 - var orgs_result = await _erpService.BillQueryForOrg(); - if (!orgs_result.IsSuccess) - return (new List(), 0); - var orgs = orgs_result.Data.ToList(); - - //供应商集合 - var suppliers_result = await _erpService.BillQueryForSupplier(); - if (!suppliers_result.IsSuccess) - return (new List(), 0); - var suppliers = suppliers_result.Data.ToList(); - - List ids_Receiver = new List(); - List ids_Operator = new List(); - if (!string.IsNullOrEmpty(dto.Receiver) || !string.IsNullOrEmpty(dto.Operator)) - { - var staffList = await _basicsRepositories.GetStaffListAsync(_loginRepositories.CompanyId); - ids_Receiver = staffList.Where(w => w.Name.Contains(dto.Receiver)).Select(s => s.Id).ToList(); - ids_Operator = staffList.Where(w => w.Name.Contains(dto.Operator)).Select(s => s.Id).ToList(); - } - - //物料集合;模糊查询后的物料集合 - if (!string.IsNullOrEmpty(dto.MaterialNumber)) - materials = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber)).ToList(); - - var query = _context.InStockTaskDetails - .GroupJoin(_context.InStockTask, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) - .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) - .Where(adv => 1 == 1); - - if (!string.IsNullOrEmpty(dto.SourceBillNo)) - query = query.Where(w => EF.Functions.Like(w.order.SourceBillNo, "%" + dto.SourceBillNo + "%")); - - //物料ID在模糊后的物料 - if (materials != null && materials.Count != 0 && !string.IsNullOrEmpty(dto.MaterialNumber)) - { - var mids = materials.Select(x => x.MaterialId).ToList(); - query = query.Where(w => mids.Contains(w.detail.MaterialId)); - } - - if (ids_Receiver.Count() > 0) - query = query.Where(w => ids_Receiver.Contains(w.order.ReceiverId??0)); - if (ids_Operator.Count() > 0) - query = query.Where(w => ids_Operator.Contains(w.order.ShelferId??0)); - - if (dto.SupplierId.HasValue) - query = query.Where(w => w.detail.SupplierId == dto.SupplierId.Value); - - if (dto.OrgId.HasValue) - query = query.Where(w => w.detail.OrgId == dto.OrgId.Value); - - if (!string.IsNullOrEmpty(dto.StockCode)) - { - var splitStrs = dto.StockCode.Split("_$"); - query = query.Where(w => w.detail.StockCode == splitStrs[0] && w.detail.OrgCode == splitStrs[1]); - } - - if (dto.Type.HasValue) - query = query.Where(w => (int)w.order.Type == dto.Type.Value); - - if (dto.Status.HasValue) - query = query.Where(w => (int)w.order.Status == dto.Status.Value); - - if (dto.CreateBeginDate != null) - query = query.Where(w => w.order.ShelfTime.HasValue && w.order.ShelfTime.Value.Date >= dto.CreateBeginDate.Value); - if (dto.CreateEndDate != null) - query = query.Where(w =>w.order.ShelfTime.HasValue && w.order.ShelfTime.Value.Date <= dto.CreateEndDate.Value); - - - int total = await query.CountAsync(); - var list = await query.Select(s => new InStockTaskQueryResponse() - { - Id = s.order.Id, - DetailsId = s.detail.Id, - BillNo = s.order.BillNo, - Type = s.order.Type.GetRemark(), - Status = s.order.Status.GetRemark(), - SourceBillNo = s.order.SourceBillNo, - Supplier = _erpBasicDataExtendService.GetSupplierName(suppliers, s.detail.SupplierId), - Org = _erpBasicDataExtendService.GetOrgName(orgs, s.detail.OrgId), - MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), - MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), - Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), - FactoryPrice = s.detail.FactoryPrice, - Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.detail.StockCode + s.detail.OrgCode), - AccruedQty = s.detail.AccruedQty, - ReceiveQty = s.detail.ReceiveQty, - RealityQty = s.detail.RealityQty, - Receiver = s.order.ReceiverId.HasValue ? _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.ReceiverId.Value) : "", - ReceiveTime = s.order.ReceiveTime.HasValue ? s.order.ReceiveTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", - Shelfer = s.order.ShelferId.HasValue ? _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.ShelferId.Value) : "", - ShelfTime = s.order.ShelfTime.HasValue ? s.order.ShelfTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", - CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), - Remark=s.detail.Remark, - }).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); - - return (list, total); - } + } /// /// 详情 @@ -530,5 +419,116 @@ namespace WMS.Web.Repositories { return await GetPagedList(dto); } + + /// + /// 列表-分页 + /// + /// + /// + public async Task<(List list, int total)> GetPagedList(InStockTaskQueryRequest dto) + { + //1.获取物料集合和组织集合 + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return (new List(), 0); + var materials = materials_result.Data.ToList(); + //组织集合 + var orgs_result = await _erpService.BillQueryForOrg(); + if (!orgs_result.IsSuccess) + return (new List(), 0); + var orgs = orgs_result.Data.ToList(); + + //供应商集合 + var suppliers_result = await _erpService.BillQueryForSupplier(); + if (!suppliers_result.IsSuccess) + return (new List(), 0); + var suppliers = suppliers_result.Data.ToList(); + + List ids_Receiver = new List(); + List ids_Operator = new List(); + if (!string.IsNullOrEmpty(dto.Receiver) || !string.IsNullOrEmpty(dto.Operator)) + { + var staffList = await _basicsRepositories.GetStaffListAsync(_loginRepositories.CompanyId); + ids_Receiver = staffList.Where(w => w.Name.Contains(dto.Receiver)).Select(s => s.Id).ToList(); + ids_Operator = staffList.Where(w => w.Name.Contains(dto.Operator)).Select(s => s.Id).ToList(); + } + + //物料集合;模糊查询后的物料集合 + if (!string.IsNullOrEmpty(dto.MaterialNumber)) + materials = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber)).ToList(); + + var query = _context.InStockTaskDetails + .GroupJoin(_context.InStockTask, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) + .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) + .Where(adv => 1 == 1); + + if (!string.IsNullOrEmpty(dto.SourceBillNo)) + query = query.Where(w => EF.Functions.Like(w.order.SourceBillNo, "%" + dto.SourceBillNo + "%")); + + //物料ID在模糊后的物料 + if (materials != null && materials.Count != 0 && !string.IsNullOrEmpty(dto.MaterialNumber)) + { + var mids = materials.Select(x => x.MaterialId).ToList(); + query = query.Where(w => mids.Contains(w.detail.MaterialId)); + } + + if (ids_Receiver.Count() > 0) + query = query.Where(w => ids_Receiver.Contains(w.order.ReceiverId ?? 0)); + if (ids_Operator.Count() > 0) + query = query.Where(w => ids_Operator.Contains(w.order.ShelferId ?? 0)); + + if (dto.SupplierId.HasValue) + query = query.Where(w => w.detail.SupplierId == dto.SupplierId.Value); + + if (dto.OrgId.HasValue) + query = query.Where(w => w.detail.OrgId == dto.OrgId.Value); + + if (!string.IsNullOrEmpty(dto.StockCode)) + { + var splitStrs = dto.StockCode.Split("_$"); + query = query.Where(w => w.detail.StockCode == splitStrs[0] && w.detail.OrgCode == splitStrs[1]); + } + + if (dto.Type.HasValue) + query = query.Where(w => (int)w.order.Type == dto.Type.Value); + + if (dto.Status.HasValue) + query = query.Where(w => (int)w.order.Status == dto.Status.Value); + + if (dto.CreateBeginDate != null) + query = query.Where(w => w.order.ShelfTime.HasValue && w.order.ShelfTime.Value.Date >= dto.CreateBeginDate.Value); + if (dto.CreateEndDate != null) + query = query.Where(w => w.order.ShelfTime.HasValue && w.order.ShelfTime.Value.Date <= dto.CreateEndDate.Value); + + + int total = await query.CountAsync(); + var list = await query.Select(s => new InStockTaskQueryResponse() + { + Id = s.order.Id, + DetailsId = s.detail.Id, + BillNo = s.order.BillNo, + Type = s.order.Type.GetRemark(), + Status = s.order.Status.GetRemark(), + SourceBillNo = s.order.SourceBillNo, + Supplier = _erpBasicDataExtendService.GetSupplierName(suppliers, s.detail.SupplierId), + Org = _erpBasicDataExtendService.GetOrgName(orgs, s.detail.OrgId), + MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), + MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), + FactoryPrice = s.detail.FactoryPrice, + Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.detail.StockCode + s.detail.OrgCode), + AccruedQty = s.detail.AccruedQty, + ReceiveQty = s.detail.ReceiveQty, + RealityQty = s.detail.RealityQty, + Receiver = s.order.ReceiverId.HasValue ? _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.ReceiverId.Value) : "", + ReceiveTime = s.order.ReceiveTime.HasValue ? s.order.ReceiveTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", + Shelfer = s.order.ShelferId.HasValue ? _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.ShelferId.Value) : "", + ShelfTime = s.order.ShelfTime.HasValue ? s.order.ShelfTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", + CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), + Remark = s.detail.Remark, + }).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); + + return (list, total); + } } }