修复bug
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
/// 生成单据号
|
/// 生成单据号
|
||||||
@@ -171,10 +190,10 @@ namespace WMS.Web.Domain.Entitys
|
|||||||
foreach (var erpd in d.ErpDetails)
|
foreach (var erpd in d.ErpDetails)
|
||||||
{
|
{
|
||||||
var cd = erpd.Clone();
|
var cd = erpd.Clone();
|
||||||
cd.Id = 0;cd.DetailId = 0;
|
cd.Id = 0; cd.DetailId = 0;
|
||||||
detail_new.ErpDetails.Add(cd);
|
detail_new.ErpDetails.Add(cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
details_new.Add(d);
|
details_new.Add(d);
|
||||||
|
|||||||
@@ -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>();
|
||||||
|
|||||||
@@ -54,30 +54,40 @@ namespace WMS.Web.Domain.Services
|
|||||||
public async Task<Result> Save(SaveOutStockRequest dto, LoginInDto loginInfo)
|
public async Task<Result> Save(SaveOutStockRequest dto, LoginInDto loginInfo)
|
||||||
{
|
{
|
||||||
var outStockTask = await _outStockTaskRepositories.Get(dto.TaskId);
|
var outStockTask = await _outStockTaskRepositories.Get(dto.TaskId);
|
||||||
if(outStockTask.Status== OutStockStatus.Already)
|
if (outStockTask.Status == OutStockStatus.Already)
|
||||||
return Result.ReFailure(ResultCodes.OutStockTaskAlready);
|
return Result.ReFailure(ResultCodes.OutStockTaskAlready);
|
||||||
if (outStockTask.Status == OutStockStatus.Repeal)
|
if (outStockTask.Status == OutStockStatus.Repeal)
|
||||||
return Result.ReFailure(ResultCodes.OutStockTaskRepeal);
|
return Result.ReFailure(ResultCodes.OutStockTaskRepeal);
|
||||||
//上传的物料在任务单里没有找到不能出库
|
//上传的物料在任务单里没有找到不能出库
|
||||||
var ex = dto.Details.Select(s=>s.MaterialId).Except(outStockTask.Details.Select(s=>s.MaterialId)).ToList();
|
var ex = dto.Details.Select(s => s.MaterialId).Except(outStockTask.Details.Select(s => s.MaterialId)).ToList();
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +124,7 @@ namespace WMS.Web.Domain.Services
|
|||||||
{
|
{
|
||||||
//下推金蝶
|
//下推金蝶
|
||||||
var res = await _erpService.Push(new Core.Dto.Erp.ErpPushDto() { });
|
var res = await _erpService.Push(new Core.Dto.Erp.ErpPushDto() { });
|
||||||
entity.Sync(new List<string>(),res.IsSuccess, loginInfo.UserInfo.StaffId, res.Message);
|
entity.Sync(new List<string>(), res.IsSuccess, loginInfo.UserInfo.StaffId, res.Message);
|
||||||
}
|
}
|
||||||
var isSuccess = await _outStockRepositories.EditEntityList(list, true);
|
var isSuccess = await _outStockRepositories.EditEntityList(list, true);
|
||||||
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
|
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
|
||||||
|
|||||||
Reference in New Issue
Block a user