diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2
index d681219a..5ad8fcf9 100644
Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs
index 78aeb46c..42a762b4 100644
--- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs
+++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs
@@ -10,6 +10,12 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord
///
public class SaveChangeBoxRecordRequest
{
+ public SaveChangeBoxRecordRequest() { }
+ public SaveChangeBoxRecordRequest(int srcBoxId, int destBoxId)
+ {
+ this.SrcBoxId = srcBoxId;
+ this.DestBoxId = destBoxId;
+ }
///
/// 原箱子ID
///
@@ -34,6 +40,19 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord
///
public class SaveChangeBoxRecordDetailsRequest
{
+ public SaveChangeBoxRecordDetailsRequest() { }
+ public SaveChangeBoxRecordDetailsRequest(int materialId, decimal qty, List serialNumbers)
+ {
+ this.MaterialId = materialId;
+ this.Qty = qty;
+ this.SerialNumbers = serialNumbers;
+ }
+ public SaveChangeBoxRecordDetailsRequest(int materialId, decimal qty, string serialNumber)
+ {
+ this.MaterialId = materialId;
+ this.Qty = qty;
+ this.SerialNumbers.Add(serialNumber);
+ }
///
/// 物料ID
///
diff --git a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs
index c4183075..ca438771 100644
--- a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs
+++ b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs
@@ -7,6 +7,7 @@ using WMS.Web.Core.Dto.ChangeBoxRecord;
using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Dto.MoveBoxRecord;
using WMS.Web.Core.Internal.Results;
+using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Services;
namespace WMS.Web.Domain.IService
@@ -20,6 +21,10 @@ namespace WMS.Web.Domain.IService
Task ChangeBoxSave(List dto, LoginInDto loginInfo, bool isTransaction=true,bool IsInventory=true);
//移箱保存
Task MoveBoxSave(List dto, bool IsUp, LoginInDto loginInfo);
-
+ //出库回退
+ Task ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, bool isTransaction = true);
+ //出库回退
+ Task ChangeBox_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true);
+
}
}
diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs
index f4982290..72257fba 100644
--- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs
+++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs
@@ -11,6 +11,7 @@ using WMS.Web.Core.Dto.ChangeBoxRecord;
using WMS.Web.Core.Dto.Inventory;
using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Dto.MoveBoxRecord;
+using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
@@ -232,5 +233,84 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess();
}
+ ///
+ /// 出入库回退改箱
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task ChangeBox_BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true)
+ {
+ List dtoList = new List();
+ //目标箱
+ var destIds = backRecord.Details.GroupBy(g => g.BoxId);
+ var serialNumbers = backRecord.Details.SelectMany(s => s.SerialNumbers).ToList();
+ var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
+ foreach (var detail in backRecord.Details)
+ {
+ if (detail.Qty == 0) continue;
+ var detailClone = detail.Clone();
+ //处理序列号
+ var sList = serialNumberList.Where(w => detailClone.SerialNumbers.Contains(w.SerialNumber)).ToList();
+ foreach (var s in sList)
+ {
+ //原箱和目标箱一样不处理
+ if (s.BoxId == detailClone.BoxId)
+ {
+ detailClone.Qty = detailClone.Qty - 1;
+ detailClone.SerialNumbers.Remove(s.SerialNumber);
+ continue;
+ }
+
+ var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId);
+ if (d == null)
+ {
+ d = new SaveChangeBoxRecordRequest(0, detail.BoxId);
+ d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detail.MaterialId, 1, s.SerialNumber));
+ }
+ else
+ {
+ var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detail.MaterialId);
+ if (dtoDetail == null)
+ d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detail.MaterialId, 1, s.SerialNumber));
+ else
+ {
+ dtoDetail.Qty += 1;
+ dtoDetail.SerialNumbers.Add(s.SerialNumber);
+ }
+ }
+ detailClone.Qty = detailClone.Qty - 1;
+ detailClone.SerialNumbers.Remove(s.SerialNumber);
+ }
+
+ //处理非序列号的数据
+ if (detailClone.Qty <= 0) continue;
+ var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detail.BoxId && f.SrcBoxId == 0);
+ if (dto == null)
+ {
+ dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId);
+ dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
+ }
+ else
+ {
+ var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
+ if (dtoDetail == null)
+ dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
+ else
+ {
+ dtoDetail.Qty += detailClone.Qty;
+ dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers);
+ }
+ }
+ }
+
+ return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false);
+ }
+
+ public Task ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
+ {
+ throw new NotImplementedException();
+ }
}
}