非采购上架改箱
This commit is contained in:
@@ -314,9 +314,72 @@ namespace WMS.Web.Domain.Services
|
||||
/// <param name="loginInfo"></param>
|
||||
/// <param name="isTransaction"></param>
|
||||
/// <returns></returns>
|
||||
public Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
|
||||
public async Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
|
||||
//目标箱
|
||||
var destIds = inStock.Details.GroupBy(g => g.BoxId);
|
||||
var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList();
|
||||
var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
|
||||
foreach (var detail in inStock.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user