Browse Source

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

tangdi 2 years ago
parent
commit
b63c6b7c51

+ 28 - 7
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -4435,7 +4435,7 @@ namespace Business.Replenishment
                 //周计划没有生成周工单的不校验优先级重复
                 if(weekPlan!=null && !string.IsNullOrEmpty(weekPlan.ProductionOrder))
                 {
-                    var isExistSamePriority = _workOrdMaster.Select(a => a.WorkOrd !=weekPlan.ProductionOrder && (string.IsNullOrEmpty(a.Status) || a.Status.ToUpper()=="P") && a.Priority == newpriority);
+                    var isExistSamePriority = _workOrdMaster.Select(a => a.WorkOrd !=weekPlan.ProductionOrder && (string.IsNullOrEmpty(a.Status) || a.Status.ToUpper()=="P") && (string.IsNullOrEmpty(a.Typed) || (!string.IsNullOrEmpty(a.Typed) && a.Typed.ToUpper() != "PW" && a.BusinessID > 0)) && a.Priority == newpriority);
                     if (isExistSamePriority.Any())
                         return "优先级重复,请重新调整。";
                 }
@@ -6684,6 +6684,7 @@ namespace Business.Replenishment
             var demandplans = _icdemandschedule.GetListAsync(p => p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.tosechedqty > 0 && !p.IsDeleted).Result.OrderBy(p => p.arrivaldate).ToList();
             //获取已以生成交货单的交货计划
             var alreadys = _srmpolistds.Select(p => p.domain == domain && demandplans.Select(m => m.Id).Contains(p.icdsid) && p.isactive == 1).ToList();
+            List<ic_demandschedule> newPlans = new List<ic_demandschedule>();
             if (alreadys.Any())
             {
                 //交货计划存在已发布或者已关闭状态的交货单
@@ -6696,9 +6697,28 @@ namespace Business.Replenishment
                     //删除未发布的交货单
                     _srmpolistds.Update(wfbDs);
                 }
-                //过滤掉存在已发布或者已关闭交货单的交货计划
-                demandplans = demandplans.Where(p => !yfbIds.Contains(p.Id)).ToList();
+                //未发布交货单的交货计划
+                var wfbPlans = demandplans.Where(p => !yfbIds.Contains(p.Id)).ToList();
+                if (wfbPlans.Any())
+                {
+                    newPlans.AddRange(wfbPlans);
+                }
+                //如果已生成交货单的数量小于交货计划的净需求数量,则需要重新生成交货单
+                var yfbJhds = alreadys.Where(p => yfbIds.Contains(p.icdsid)).ToList();
+                var yfbPlans = demandplans.Where(p => yfbIds.Contains(p.Id)).ToList();
+                foreach (var item in yfbPlans)
+                {
+                    var curJhds = yfbJhds.Where(p=>p.icdsid == item.Id).ToList();
+                    decimal sumQty = curJhds.Where(p => p.status.ToUpper() == "C").Sum(p => p.sentqty) + curJhds.Where(p => p.status.ToUpper() != "C").Sum(p => p.schedqty);
+                    if (item.tosechedqty <= sumQty)
+                    {
+                        continue;
+                    }
+                    item.tosechedqty = item.tosechedqty - sumQty;
+                    newPlans.Add(item);
+                }
             }
+            demandplans = newPlans;
             if (!demandplans.Any())
             {
                 Msg = "OK|没有需要生成的交货单";
@@ -6804,7 +6824,7 @@ namespace Business.Replenishment
                 //采购单明细的剩余未交数量:采购明细的需求数量-送货单需求数量(不是交货单转的送货单)
                 sumRestQty = curPurDtls.Sum(p => p.QtyOrded) - curShds.Sum(p=>p.sh_delivery_quantity);
                 //交货单占用数量:交货单的需求数量
-                sumDbOccupy = curDbOccupys.Sum(p => p.schedqty);
+                sumDbOccupy = curDbOccupys.Where(p=>p.status.ToUpper() == "C").Sum(p => p.sentqty) + curDbOccupys.Where(p=>p.status.ToUpper() != "C").Sum(p=>p.schedqty);
                 //本次计算交货单占用数量:本次计算交货单的需求数量
                 sumCurOccupy = curCalcOccupys.Sum(p => p.schedqty);
                 //剩余可用数量
@@ -6893,7 +6913,8 @@ namespace Business.Replenishment
                     //采购单明细剩余可用数量
                     sumRestQty = pchPurDtls.Sum(p => p.QtyOrded) - pchShds.Sum(p=>p.sh_delivery_quantity);
                     //交货单占用数量:交货单的剩余需要采购数量
-                    sumDbOccupy = curDbOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
+                    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);
                     //本次计算交货单占用数量:本次计算交货单的需求数量
                     sumCurOccupy = curCalcOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
                     //剩余可用数量
@@ -6926,8 +6947,8 @@ namespace Business.Replenishment
                         //当前采购明细剩余数量=订单数量-送货单数量(不是由交货单转的送货单)
                         decimal syQty = pchPurDtls[k].QtyOrded - pchShds.Where(p => p.po_billline == pchPurDtls[k].Line.ToString()).Sum(p=>p.sh_delivery_quantity);
                         //当前采购明细被占用数量(已占用数量)
-                        var occupy = curDbOccupys.Where(p => p.ponumber == pchPurDtls[k].PurOrd && p.itemnum == pchPurDtls[k].ItemNum && p.poline == pchPurDtls[k].Line).ToList();
-                        decimal yzyQty = occupy.Sum(p => p.schedqty);
+                        var occupy = pchDbOccupys.Where(p => p.ponumber == pchPurDtls[k].PurOrd && p.itemnum == pchPurDtls[k].ItemNum && p.poline == pchPurDtls[k].Line).ToList();
+                        decimal yzyQty = occupy.Where(p=>p.status.ToUpper() == "C").Sum(p => p.sentqty) + occupy.Where(p=>p.status.ToUpper() != "C").Sum(p=>p.schedqty);
                         //当前计算中采购明细被占用数量(本次计算占用数量)
                         var calcs = inserts.Where(p => p.ponumber == pchPurDtls[k].PurOrd && p.itemnum == pchPurDtls[k].ItemNum && p.poline == pchPurDtls[k].Line).ToList();
                         decimal bzyQty = calcs.Sum(p => p.schedqty);