|
@@ -15,6 +15,7 @@ using ZR.Model.Dto.Balance;
|
|
|
using ZR.Model.Models.Balance;
|
|
|
using ZR.Service.Business.OutStore;
|
|
|
using ZR.Service.Business.IBusinessService.Balance;
|
|
|
+using Aliyun.OSS;
|
|
|
|
|
|
namespace ZR.Admin.WebApi.Controllers.OutStore
|
|
|
{
|
|
@@ -157,7 +158,7 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
|
|
|
{
|
|
|
throw new CustomException(ResultCode.PARAM_ERROR, "上传的实物图片不能为空!!");
|
|
|
}
|
|
|
- SapBomRecord sapBomRecordMd = assembleDataDto.Adapt<SapBomRecord>().ToUpdate();
|
|
|
+ SapBomRecord sapBomRecordMd = assembleDataDto.Adapt<SapBomRecord>().ToUpdate(HttpContext);
|
|
|
sapBomRecordMd.AssembleQty += assembleDataDto.AssembleNum;
|
|
|
if (sapBomRecordMd.AssembleQty >= sapBomRecordMd.Qty)
|
|
|
{
|
|
@@ -186,45 +187,89 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
|
|
|
IsForAssemble = true,
|
|
|
}).Adapt<List<StkBalanceDtl>>();
|
|
|
|
|
|
+ int sumBal = list.Sum(x => x.OutQty - x.AssembleQty);
|
|
|
+
|
|
|
+ if (sumBal < assembleDataDto.AssembleNum)
|
|
|
+ {
|
|
|
+ throw new CustomException(ResultCode.INVALID_REQUEST, $"已出库的库存数量:【{sumBal}】小于本次装配需求数量:【{assembleDataDto.AssembleQty}】!!");
|
|
|
+ }
|
|
|
+
|
|
|
+ int myAssembleNum = assembleDataDto.AssembleNum;
|
|
|
int allotNum = 0;
|
|
|
- Dictionary<int, int> allocDic = new();
|
|
|
- foreach (var item in list)
|
|
|
+ List<StkBalanceDtl> allotList = new();
|
|
|
+ while (true)
|
|
|
{
|
|
|
- if ((item.BalanceQty + allotNum) <= assembleDataDto.Qty)
|
|
|
+ StkBalanceDtl? balanceDtl = list.FirstOrDefault(x => (x.OutQty - x.AssembleQty) > 0);
|
|
|
+ if (balanceDtl == null || allotNum >= myAssembleNum)
|
|
|
{
|
|
|
- allotNum += item.BalanceQty;
|
|
|
- allocDic.Add(item.BalanceId, item.BalanceQty);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- allotNum += item.BalanceQty;
|
|
|
- allocDic.Add(item.BalanceId, allotNum - assembleDataDto.Qty);
|
|
|
break;
|
|
|
}
|
|
|
- }
|
|
|
+ int tmpBalAssembleNum = balanceDtl.OutQty - balanceDtl.AssembleQty;
|
|
|
|
|
|
- int response3 = 0;
|
|
|
- foreach (var item in allocDic)
|
|
|
- {
|
|
|
- StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
|
|
|
- if (md.BalanceQty == item.Value)
|
|
|
+ if ((allotNum + tmpBalAssembleNum) > myAssembleNum)
|
|
|
{
|
|
|
- md.Status = 99;
|
|
|
- md.UpdateBy = HttpContext.GetName();
|
|
|
- md.UpdateTime = DateTime.Now;
|
|
|
- response3 += _StkBalanceDtlService.Update(md);
|
|
|
+ int realNeedNum = myAssembleNum - allotNum;
|
|
|
+ allotNum += realNeedNum;
|
|
|
+ balanceDtl.AssembleQty += realNeedNum;
|
|
|
+ balanceDtl.UpdateBy = HttpContext.GetName();
|
|
|
+ balanceDtl.UpdateTime = DateTime.Now;
|
|
|
+ allotList.Add(balanceDtl);
|
|
|
+ break;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- md.Status = 88;
|
|
|
- md.BalanceQty = item.Value;
|
|
|
- md.UpdateBy = HttpContext.GetName();
|
|
|
- md.UpdateTime = DateTime.Now;
|
|
|
- response3 += _StkBalanceDtlService.Update(md);
|
|
|
+ allotNum += tmpBalAssembleNum;
|
|
|
+ balanceDtl.AssembleQty += tmpBalAssembleNum;
|
|
|
+ balanceDtl.UpdateBy = HttpContext.GetName();
|
|
|
+ balanceDtl.UpdateTime = DateTime.Now;
|
|
|
+ balanceDtl.Status = 99;
|
|
|
+ allotList.Add(balanceDtl);
|
|
|
}
|
|
|
}
|
|
|
+ //int allotNum = 0;
|
|
|
+ //Dictionary<int, int> allocDic = new();
|
|
|
+ //foreach (var item in list)
|
|
|
+ //{
|
|
|
+ // if ((item.BalanceQty + allotNum) <= assembleDataDto.AssembleNum)
|
|
|
+ // {
|
|
|
+ // allotNum += item.BalanceQty;
|
|
|
+ // allocDic.Add(item.BalanceId, item.BalanceQty);
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // allotNum += item.BalanceQty;
|
|
|
+ // allocDic.Add(item.BalanceId, allotNum - assembleDataDto.Qty);
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ //int response3 = 0;
|
|
|
+ //foreach (var item in allocDic)
|
|
|
+ //{
|
|
|
+ // StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
|
|
|
+ // if (md.BalanceQty == item.Value)
|
|
|
+ // {
|
|
|
+ // md.Status = 99;
|
|
|
+ // md.UpdateBy = HttpContext.GetName();
|
|
|
+ // md.UpdateTime = DateTime.Now;
|
|
|
+ // response3 += _StkBalanceDtlService.Update(md);
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // md.Status = 88;
|
|
|
+ // md.BalanceQty = item.Value;
|
|
|
+ // md.UpdateBy = HttpContext.GetName();
|
|
|
+ // md.UpdateTime = DateTime.Now;
|
|
|
+ // response3 += _StkBalanceDtlService.Update(md);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
int response1 = _SapBomRecordService.Update(sapBomRecordMd);
|
|
|
int response2 = _OutAssembleRecordService.Insert(assembleRecordMd);
|
|
|
+ int response3 = 0;
|
|
|
+ foreach (var item in allotList)
|
|
|
+ {
|
|
|
+ response3 += _StkBalanceDtlService.Update(item);
|
|
|
+ }
|
|
|
return ToResponse(response1 + response2 + response3);
|
|
|
}
|
|
|
#endregion
|