From 56320f924c62ed84e3920b1466dde3bd1e353825 Mon Sep 17 00:00:00 2001
From: tongfei <244188119@qq.com>
Date: Thu, 14 Dec 2023 14:22:29 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=BA=93=E5=AD=98=E4=BC=98=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.Domain.xml | 18 +++
.../Services/BackRecordService.cs | 85 ++++++-----
.../Services/BoxInventoryService.cs | 56 +++++--
src/WMS.Web.Domain/Services/InStockService.cs | 137 +++++++++---------
4 files changed, 180 insertions(+), 116 deletions(-)
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index 725e7bac..72c4e3ba 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -3686,6 +3686,24 @@
+
+
+ 出入库回退改箱
+
+
+
+
+
+
+
+
+ 非采购入库
+
+
+
+
+
+
列表页导出
diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs
index caa4b3bb..2bc8f38e 100644
--- a/src/WMS.Web.Domain/Services/BackRecordService.cs
+++ b/src/WMS.Web.Domain/Services/BackRecordService.cs
@@ -67,7 +67,7 @@ namespace WMS.Web.Domain.Services
return Result.ReFailure(ResultCodes.ErpStockNoData);
var entity = new BackRecord();
- entity.Method =(InventoryInOutMethod)dto.Method;
+ entity.Method = (InventoryInOutMethod)dto.Method;
entity.OrgCode = dto.OrgCode;
entity.StockCode = dto.StockCode;
entity.SubStockId = dto.SubStockId;
@@ -84,51 +84,56 @@ namespace WMS.Web.Domain.Services
if (!serialNumber_result.IsSuccess)
return serialNumber_result;
- #region 需要改箱操作
- //获取目标箱和原箱信息
- var current_box_about = dto.Details.GroupBy(x => new { x.BoxId }).Select(x => new { x.Key.BoxId }).ToList();
- var current_sernub_box = dto.Details.GroupBy(x => x.SerialNumberBoxId).Select(x => x.Key).ToList();
+ //#region 需要改箱操作
+ ////获取目标箱和原箱信息
+ //var current_box_about = dto.Details.GroupBy(x => new { x.BoxId }).Select(x => new { x.Key.BoxId }).ToList();
+ //var current_sernub_box = dto.Details.GroupBy(x => x.SerialNumberBoxId).Select(x => x.Key).ToList();
- //要改箱的数据集合
- var ganenrateChangeBoxs = new List();
+ ////要改箱的数据集合
+ //var ganenrateChangeBoxs = new List();
- //遍历组装:改箱dto的头部集合
- foreach (var boxAbout in current_box_about)
- {
- foreach (var serBoxId in current_sernub_box)
- {
- if (boxAbout.BoxId != serBoxId)
- {
- var changeBox = new SaveChangeBoxRecordRequest();
- changeBox.SrcBoxId = serBoxId;
- changeBox.DestBoxId = boxAbout.BoxId;
- changeBox.SubStockId = entity.SubStockId;
- ganenrateChangeBoxs.Add(changeBox);
- }
- }
- }
+ ////遍历组装:改箱dto的头部集合
+ //foreach (var boxAbout in current_box_about)
+ //{
+ // foreach (var serBoxId in current_sernub_box)
+ // {
+ // if (boxAbout.BoxId != serBoxId)
+ // {
+ // var changeBox = new SaveChangeBoxRecordRequest();
+ // changeBox.SrcBoxId = serBoxId;
+ // changeBox.DestBoxId = boxAbout.BoxId;
+ // changeBox.SubStockId = entity.SubStockId;
+ // ganenrateChangeBoxs.Add(changeBox);
+ // }
+ // }
+ //}
- //遍历组装明细:改箱dto的明细集合
- foreach (var detItem in dto.Details)
- {
- ganenrateChangeBoxs.ForEach(x =>
- {
- if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId)
- {
- var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
- changeBoxRD.MaterialId = detItem.MaterialId;
- changeBoxRD.Qty = detItem.Qty;
- changeBoxRD.SerialNumbers = detItem.SerialNumbers;
- x.Details.Add(changeBoxRD);
- }
- });
- }
+ ////遍历组装明细:改箱dto的明细集合
+ //foreach (var detItem in dto.Details)
+ //{
+ // ganenrateChangeBoxs.ForEach(x =>
+ // {
+ // if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId)
+ // {
+ // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
+ // changeBoxRD.MaterialId = detItem.MaterialId;
+ // changeBoxRD.Qty = detItem.Qty;
+ // changeBoxRD.SerialNumbers = detItem.SerialNumbers;
+ // x.Details.Add(changeBoxRD);
+ // }
+ // });
+ //}
- //改箱保存操作:这里不需要在改箱的操作-进行库存的变更(因为会有问题),下面会去更新库存的
- var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction,false);
+ ////改箱保存操作:这里不需要在改箱的操作-进行库存的变更(因为会有问题),下面会去更新库存的
+ //var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction,false);
+ //if (!changeBoxSave_Result.IsSuccess)
+ // return changeBoxSave_Result;
+ //#endregion
+
+ //改箱保存操作
+ var changeBoxSave_Result = await _changeMoveBoxService.ChangeBox_BackRecord(entity, loginInfo, isTransaction);
if (!changeBoxSave_Result.IsSuccess)
return changeBoxSave_Result;
- #endregion
//保存成功后:变更库存
var boxInventoryResult = await _boxInventoryService.GenerateBackBox(entity, isTransaction);
diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs
index c9e1bfaa..4c3d1432 100644
--- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs
+++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs
@@ -580,6 +580,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError);
+ var delete_ids = new List();
var update_entitys = new List();
var add_entitys = new List();
var InventoryDetailsGenerateDto = new List();
@@ -621,8 +622,14 @@ namespace WMS.Web.Domain.Services
//2.2.2即时库存:修改箱库存的集合
InventoryDetailsGenerateDto.Add(inventoryDet);
}
- //2.2.1箱库存:修改箱库存的集合
- update_entitys.Add(sour_update_entity);
+
+ //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改;
+ var isAllNoInventory = sour_update_entity.Details.All(x => x.Qty == 0);
+ if (isAllNoInventory)
+ delete_ids.Add(sour_update_entity.Id);
+ else
+ //4.2添加要更新的箱库存实体
+ update_entitys.Add(sour_update_entity);
}
#endregion
@@ -690,6 +697,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
+ if (delete_ids.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ }
//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()
@@ -793,7 +805,8 @@ namespace WMS.Web.Domain.Services
}
- }//下架
+ }
+ //下架
else
{
//3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱”
@@ -881,6 +894,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError);
+ var delete_ids = new List();
var update_entitys = new List();
var add_entitys = new List();
var InventoryDetailsGenerateDto = new List();
@@ -998,7 +1012,8 @@ namespace WMS.Web.Domain.Services
}
- }//下架
+ }
+ //下架
else
{
//3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱”
@@ -1037,9 +1052,14 @@ namespace WMS.Web.Domain.Services
InventoryDetailsGenerateDto.Add(inventoryDet);
}
- update_entitys.Add(update_entity);
-
+ //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改;
+ var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
+ if (isAllNoInventory)
+ delete_ids.Add(update_entity.Id);
+ else
+ //4.2添加要更新的箱库存实体
+ update_entitys.Add(update_entity);
}
}
@@ -1055,6 +1075,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
+ if (delete_ids.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ }
//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()
@@ -1100,6 +1125,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError);
+ var delete_ids = new List();
var update_entitys = new List();
var InventoryDetailsGenerateDto = new List();
@@ -1156,7 +1182,8 @@ namespace WMS.Web.Domain.Services
//3.5要处理的修改集合
update_entitys.Add(updateEntity);
- }//出库
+ }
+ //出库
else
{
//3.1出库的时候:盘点-箱库存是存在
@@ -1193,8 +1220,14 @@ namespace WMS.Web.Domain.Services
//3.2.2即时库存:修改箱库存的集合
InventoryDetailsGenerateDto.Add(inventoryDet);
}
- //3.5要处理的修改集合
- update_entitys.Add(update_entity);
+
+ //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改;
+ var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
+ if (isAllNoInventory)
+ delete_ids.Add(update_entity.Id);
+ else
+ //4.2添加要更新的箱库存实体
+ update_entitys.Add(update_entity);
}
}
@@ -1205,6 +1238,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
+ if (delete_ids.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ }
//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()
diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs
index e1d2d62e..1a87f36d 100644
--- a/src/WMS.Web.Domain/Services/InStockService.cs
+++ b/src/WMS.Web.Domain/Services/InStockService.cs
@@ -283,7 +283,7 @@ namespace WMS.Web.Domain.Services
if (current_entityDets != null && current_entityDets.Count != 0 && x.ErpDetailId == current_entityDets.FirstOrDefault().ErpDetailId)
{
var current_entityDet_matQty = current_entityDets.Sum(x => x.Qty);
- x.DeliveredQty = x.DeliveredQty+ current_entityDet_matQty;
+ x.DeliveredQty = x.DeliveredQty + current_entityDet_matQty;
x.RealityQty = x.RealityQty + current_entityDet_matQty;
}
});
@@ -411,7 +411,7 @@ namespace WMS.Web.Domain.Services
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
- //同步金蝶后,反写任务单的已交数量
+ //反写:任务单的已交数量
if (task != null)
{
task.Details.ForEach(x =>
@@ -434,77 +434,80 @@ namespace WMS.Web.Domain.Services
//6.当按产品上架:就要调用改箱的操作;
if (dto.ShelfMethod == (int)ShelfMethod.Product)
{
- //通过序列号,获取序列号对应的箱
- var cureent_serialNumbs = await _serialNumbersRepositories.GetEntityList(dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList());
- var current_boxIds = cureent_serialNumbs.GroupBy(x => x.BoxId).Select(x => x.Key).ToList();
+ ////通过序列号,获取序列号对应的箱
+ //var cureent_serialNumbs = await _serialNumbersRepositories.GetEntityList(dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList());
+ //var current_boxIds = cureent_serialNumbs.GroupBy(x => x.BoxId).Select(x => x.Key).ToList();
- //当前序列号对应的箱的集合信息
- var current_boxs = await _boxRepositories.GetEntityList(current_boxIds);
+ ////当前序列号对应的箱的集合信息
+ //var current_boxs = await _boxRepositories.GetEntityList(current_boxIds);
- //要改箱的数据集合
- var ganenrateChangeBoxs = new List();
- //当前按产品上架的箱子
- var dto_box = dto.Boxs.FirstOrDefault();
+ ////要改箱的数据集合
+ //var ganenrateChangeBoxs = new List();
+ ////当前按产品上架的箱子
+ //var dto_box = dto.Boxs.FirstOrDefault();
- //其它还要拼装的物料明细
- var tag_dto_erpDetIds = new List();
+ ////遍历:序列号对应多个箱
+ //foreach (var boxId in current_boxIds)
+ //{
+ // if (dto_box.BoxId != boxId)
+ // {
+ // var box = current_boxs.Where(x => x.Id == boxId).FirstOrDefault();
+ // //遍历:明细
+ // var changeBox = new SaveChangeBoxRecordRequest();
+ // changeBox.DestBoxId = dto_box.BoxId;
+ // changeBox.SubStockId = dto.SubStockId;
+ // foreach (var item in dto_box.Details)
+ // {
+ // var boxDet = box.Details.Where(t => t.MaterialId == item.MaterialId).FirstOrDefault();
+ // if (boxDet != null && boxDet.MaterialId == item.MaterialId)
+ // {
+ // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
+ // changeBoxRD.MaterialId = item.MaterialId;
+ // changeBoxRD.Qty = item.Qty;
+ // changeBoxRD.SerialNumbers = item.SerialNumbers;
+ // changeBox.Details.Add(changeBoxRD);
+ // }
+ // }
+ // //当明细存在,则要有原箱的情况下进行改箱
+ // if (changeBox.Details.Count != 0)
+ // {
+ // changeBox.SrcBoxId = boxId;
+ // ganenrateChangeBoxs.Add(changeBox);
+ // }
+ // }
+ //}
+ ////没有原箱的情况下,要改箱操作对象
+ //var serialNub_isNotHaveBOx = new List();
+ //var serialNumbs = dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList();
+ //foreach (var item in serialNumbs)
+ //{
+ // var current_IsHaveBox_serialNub = cureent_serialNumbs.Where(x => x.SerialNumber == item).Any();
+ // if (!current_IsHaveBox_serialNub)
+ // serialNub_isNotHaveBOx.Add(item);
+ //}
- //遍历:序列号对应多个箱
- foreach (var boxId in current_boxIds)
- {
- if (dto_box.BoxId != boxId)
- {
- var box = current_boxs.Where(x => x.Id == boxId).FirstOrDefault();
- //遍历:明细
- var changeBox = new SaveChangeBoxRecordRequest();
- changeBox.DestBoxId = dto_box.BoxId;
- changeBox.SubStockId = dto.SubStockId;
- foreach (var item in dto_box.Details)
- {
- var boxDet= box.Details.Where(t => t.MaterialId == item.MaterialId).FirstOrDefault();
- if (boxDet != null && boxDet.MaterialId == item.MaterialId)
- {
- var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
- changeBoxRD.MaterialId = item.MaterialId;
- changeBoxRD.Qty = item.Qty;
- changeBoxRD.SerialNumbers = item.SerialNumbers;
- changeBox.Details.Add(changeBoxRD);
- }
- else
- tag_dto_erpDetIds.Add(item.ErpDetailId);
- }
- //当明细存在,则要有原箱的情况下进行改箱
- if (changeBox.Details.Count != 0)
- {
- changeBox.SrcBoxId = boxId;
- ganenrateChangeBoxs.Add(changeBox);
- }
- }
- }
- //去重复
- var tagtag_dto_erpDetIds_new= tag_dto_erpDetIds.GroupBy(id => id).Select(x=>x.Key).ToList();
- //没有原箱的情况下,要改箱操作对象
- var changeBox_tag = new SaveChangeBoxRecordRequest();
- changeBox_tag.DestBoxId = dto_box.BoxId;
- changeBox_tag.SrcBoxId = 0;
- changeBox_tag.SubStockId = dto.SubStockId;
- foreach (var item in dto_box.Details)
- {
- var current_erp_detId= tagtag_dto_erpDetIds_new.Where(id => item.ErpDetailId == id).FirstOrDefault();
- if (current_erp_detId != 0 && current_erp_detId == item.ErpDetailId)
- {
- //遍历:明细
- var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
- changeBoxRD.MaterialId = item.MaterialId;
- changeBoxRD.Qty = item.Qty;
- changeBoxRD.SerialNumbers = item.SerialNumbers;
- changeBox_tag.Details.Add(changeBoxRD);
- }
- }
- ganenrateChangeBoxs.Add(changeBox_tag);
+ //if (serialNub_isNotHaveBOx.Count != 0)
+ //{
+ // var changeBox_tag = new SaveChangeBoxRecordRequest();
+ // changeBox_tag.DestBoxId = dto_box.BoxId;
+ // changeBox_tag.SrcBoxId = 0;
+ // changeBox_tag.SubStockId = dto.SubStockId;
+ // foreach (var item in dto_box.Details)
+ // {
+
+ // //遍历:明细
+ // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
+ // changeBoxRD.MaterialId = item.MaterialId;
+ // changeBoxRD.Qty = item.Qty;
+ // changeBoxRD.SerialNumbers = item.SerialNumbers;
+ // changeBox_tag.Details.Add(changeBoxRD);
+
+ // }
+ // ganenrateChangeBoxs.Add(changeBox_tag);
+ //}
//改箱保存操作
- var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction);
+ var changeBoxSave_Result = await _changeMoveBoxService.ChangeBox_InStock(entity, loginInfo, isTransaction);
if (!changeBoxSave_Result.IsSuccess)
return changeBoxSave_Result;
}