|
|
@@ -6865,6 +6865,11 @@ namespace Business.Replenishment
|
|
|
List<PurOrdMaster> purOrdMasters = _PurOrdMaster.Select(p => p.Domain == domain && purOrds.Contains(p.PurOrd)).ToList();
|
|
|
//获取占用可用PO明细的交货单
|
|
|
List<srm_polist_ds> dbPolistds = _srmpolistds.Select(p => purOrds.Contains(p.ponumber) && p.isactive == 1).ToList();
|
|
|
+ //获取已完成的送货单子表数据
|
|
|
+ var purOrdNos = purOrds.JoinAsString("','");
|
|
|
+ var itemnumNos = itemnums.JoinAsString("','");
|
|
|
+ string sql = $"select b.id,[po_billline],[jhdbh],isnull([shzt],'待收') shzt,[jhdhh] ,b.sh_material_code,b.sh_material_name,b.po_bill,b.sh_delivery_quantity from scm_shd a left join scm_shdzb b on a.id=b.glid where po_bill in ('{purOrdNos}') and sh_material_code in ('{itemnumNos}') and jhdbh!='' and shzt='完成'";
|
|
|
+ var Endshdzbs = _businessDbContext.scm_shdzbDto.FromSqlRaw(sql).ToList();
|
|
|
|
|
|
//过滤PO、DO:
|
|
|
//1、PO只有采购组为110,160的采购订单能使用
|
|
|
@@ -7012,11 +7017,14 @@ namespace Business.Replenishment
|
|
|
sumRestQty = pchPurDtls.Sum(p => p.QtyOrded) - pchShds.Sum(p=>p.sh_delivery_quantity);
|
|
|
//交货单占用数量:交货单的剩余需要采购数量
|
|
|
var pchDbOccupys = curDbOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).ToList();
|
|
|
- sumDbOccupy = pchDbOccupys.Where(p=>p.status.ToUpper() == "C").Sum(p=>p.sentqty) + pchDbOccupys.Where(p => p.status.ToUpper() != "C").Sum(p => p.schedqty);
|
|
|
+ //未关闭交货单需求数量和交货数量两者取最大值,避免交货单需求数量小于送货数量
|
|
|
+ sumDbOccupy = pchDbOccupys.Where(p=>p.status.ToUpper() == "C").Sum(p=>p.sentqty) + pchDbOccupys.Where(p => p.status.ToUpper() != "C").Sum(p => (p.schedqty>= p.sentqty? p.schedqty: p.sentqty));
|
|
|
//本次计算交货单占用数量:本次计算交货单的需求数量
|
|
|
sumCurOccupy = curCalcOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
|
|
|
+ //交货单已关闭,但已交数量和送货单送货数量不一致
|
|
|
+ var shTotal= Endshdzbs.Where(p => pchDbOccupys.Where(m=>m.status.ToUpper() == "C" && m.sentqty==0).Select(m => m.dsnum).Contains(p.jhdbh)).Sum(p => p.sh_delivery_quantity);
|
|
|
//剩余可用数量
|
|
|
- restQty = sumRestQty - sumDbOccupy - sumCurOccupy;
|
|
|
+ restQty = sumRestQty - sumDbOccupy - sumCurOccupy- shTotal;
|
|
|
restQty = restQty < 0 ? 0 : restQty;
|
|
|
if (restQty < needQty)
|
|
|
{
|