修复bug

This commit is contained in:
18942506660
2023-11-16 14:20:27 +08:00
parent 2989739e30
commit d980cdb6a6
4 changed files with 54 additions and 20 deletions

View File

@@ -1138,7 +1138,7 @@
</member> </member>
<member name="M:WMS.Web.Domain.Entitys.OutStockTask.OutStock(System.Int32,System.Decimal)"> <member name="M:WMS.Web.Domain.Entitys.OutStockTask.OutStock(System.Int32,System.Decimal)">
<summary> <summary>
出库 反写 任务单 出库 反写 任务单(返回 这个物料下面的来源单号出了多少数量)
</summary> </summary>
<param name="materialId"></param> <param name="materialId"></param>
<param name="qty"></param> <param name="qty"></param>

View File

@@ -76,22 +76,41 @@ namespace WMS.Web.Domain.Entitys
this.CreateTime = createTime; this.CreateTime = createTime;
} }
/// <summary> /// <summary>
/// 出库 反写 任务单 /// 出库 反写 任务单(返回 这个物料下面的来源单号出了多少数量)
/// </summary> /// </summary>
/// <param name="materialId"></param> /// <param name="materialId"></param>
/// <param name="qty"></param> /// <param name="qty"></param>
/// <returns></returns> /// <returns></returns>
public Result OutStock(int materialId, decimal qty) public Result<List<(string sourceBillNo, decimal qty)>> OutStock(int materialId, decimal qty)
{ {
if (this.Status == OutStockStatus.Already) if (this.Status == OutStockStatus.Already)
return Result.ReFailure(ResultCodes.OutStockTaskAlready); return Result<List<(string sourceBillNo, decimal qty)>>.ReFailure(ResultCodes.OutStockTaskAlready);
if (this.Status == OutStockStatus.Repeal) if (this.Status == OutStockStatus.Repeal)
return Result.ReFailure(ResultCodes.OutStockTaskRepeal); return Result<List<(string sourceBillNo, decimal qty)>>.ReFailure(ResultCodes.OutStockTaskRepeal);
var detail = this.Details.FirstOrDefault(f => f.MaterialId == materialId); var detail = this.Details.FirstOrDefault(f => f.MaterialId == materialId);
if (detail == null) return Result.ReFailure(ResultCodes.OrderNoData); if (detail == null) return Result<List<(string sourceBillNo, decimal qty)>>.ReFailure(ResultCodes.OrderNoData);
if ((detail.AccruedQty - detail.RealityQty) < qty) if ((detail.AccruedQty - detail.RealityQty) < qty)
return Result.ReFailure(ResultCodes.OutStockQtyError); return Result<List<(string sourceBillNo, decimal qty)>>.ReFailure(ResultCodes.OutStockQtyError);
List<(string sourceBillNo, decimal qty)> resList = new List<(string sourceBillNo, decimal qty)>();
var mQty = qty;
foreach (var d in detail.ErpDetails)
{
if ((d.AccruedQty - d.RealityQty) >= mQty)
{
d.RealityQty += qty;
resList.Add((d.SourceBillNo, mQty));
break;//本次出库数量已经分配完毕 调出循环
}
else
{
//代表这一个来源单号对应的物料 能全部出掉,并且还有剩余 进行下一个来源单的出货
var cQty = d.AccruedQty - d.RealityQty;//本次出货数量
mQty -= cQty;
d.RealityQty = d.AccruedQty;
resList.Add((d.SourceBillNo, cQty));
}
}
if (detail.RealityQty <= 0) if (detail.RealityQty <= 0)
detail.OutStockBeginTime = DateTime.Now; detail.OutStockBeginTime = DateTime.Now;
@@ -106,7 +125,7 @@ namespace WMS.Web.Domain.Entitys
else else
this.Status = OutStockStatus.Part; this.Status = OutStockStatus.Part;
return Result.ReSuccess(); return Result<List<(string sourceBillNo, decimal qty)>>.ReSuccess(resList);
} }
/// <summary> /// <summary>
/// 生成单据号 /// 生成单据号

View File

@@ -21,12 +21,17 @@ namespace WMS.Web.Domain.Mappers
CreateMap<OutStockDetails, OutStockDetails>(); CreateMap<OutStockDetails, OutStockDetails>();
CreateMap<OutStockErpDetails, OutStockErpDetails>(); CreateMap<OutStockErpDetails, OutStockErpDetails>();
CreateMap<SaveOutStockRequest, OutStockDetails>(); CreateMap<SaveOutStockRequest, OutStockDetails>();
CreateMap<OutStockTaskDetails, OutStockDetails>() CreateMap<OutStockTaskDetails, OutStockDetails>()
.ForMember(x => x.Id, ops => ops.Ignore()) .ForMember(x => x.Id, ops => ops.Ignore())
.ForMember(x => x.Fid, ops => ops.Ignore()) .ForMember(x => x.Fid, ops => ops.Ignore())
.ForMember(x => x.Qty, ops => ops.Ignore()); .ForMember(x => x.Qty, ops => ops.Ignore());
CreateMap<OutStockTaskErpDetails, OutStockErpDetails>()
.ForMember(x => x.Id, ops => ops.Ignore())
.ForMember(x => x.DetailId, ops => ops.Ignore())
.ForMember(x => x.Qty, ops => ops.Ignore());
CreateMap<OutStockTask, GetOutStockTaskByNoResponse>(); CreateMap<OutStockTask, GetOutStockTaskByNoResponse>();

View File

@@ -63,21 +63,31 @@ namespace WMS.Web.Domain.Services
if (ex.Count() > 0) if (ex.Count() > 0)
return Result.ReFailure(ResultCodes.OutStockMaterialError); return Result.ReFailure(ResultCodes.OutStockMaterialError);
var mIds = dto.Details.GroupBy(g => g.MaterialId).Select(s => s.Key).ToList();
OutStock entity = new OutStock(); OutStock entity = new OutStock();
entity.Create(loginInfo.UserInfo.StaffId, outStockTask); entity.Create(loginInfo.UserInfo.StaffId, outStockTask);
foreach (var d in dto.Details) foreach (var mid in mIds)
{ {
//任务单明细 //任务单明细
var tDetail = outStockTask.Details.FirstOrDefault(f => f.MaterialId == d.MaterialId); var tDetail = outStockTask.Details.FirstOrDefault(f => f.MaterialId == mid);
var dtoDetails = dto.Details.Where(w => w.MaterialId == mid);
var qty = dtoDetails.Sum(s => s.Qty);
if (tDetail == null) continue; if (tDetail == null) continue;
var res = outStockTask.OutStock(d.MaterialId, d.Qty); var res = outStockTask.OutStock(mid, qty);
if (!res.IsSuccess) return res; if (!res.IsSuccess) return res;
var outd = _mapper.Map<OutStockDetails>(tDetail); var outd = _mapper.Map<OutStockDetails>(tDetail);
//循环添加erp同步明细
outd.Qty = d.Qty; foreach (var c in res.Data)
outd.SerialNumbers = d.SerialNumbers; {
var tErpDetail = tDetail.ErpDetails.FirstOrDefault(f => f.SourceBillNo.Equals(c.sourceBillNo));
var oErpDetail = _mapper.Map<OutStockErpDetails>(tErpDetail);
oErpDetail.Qty = c.qty;
outd.ErpDetails.Add(oErpDetail);
}
outd.Qty = qty;
outd.SerialNumbers.AddRange(dtoDetails.SelectMany(s => s.SerialNumbers));
entity.Details.Add(outd); entity.Details.Add(outd);
} }