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