소스 검색

交货单生成调整:先PO,按照交货日期从小到大占用;后DO,按照交货日期从小到大占用

heteng 2 년 전
부모
커밋
712dccfbca
1개의 변경된 파일28개의 추가작업 그리고 3개의 파일을 삭제
  1. 28 3
      MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

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

@@ -6693,7 +6693,7 @@ namespace Business.Replenishment
             string Msg = "OK|交货单生成成功";
             //获取已发布且净需求数量大于0的交货计划数据
             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 demandplans = _icdemandschedule.GetListAsync(p => p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.itemnum == "93000169" && p.tosechedqty > 0 && !p.IsDeleted).Result.OrderBy(p => p.arrivaldate).ToList();
+            //var demandplans = _icdemandschedule.GetListAsync(p => p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.itemnum == "94000266" && 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>();
@@ -6956,8 +6956,9 @@ namespace Business.Replenishment
                         break;
                     }
 
-                    //采购单按照需求日期从小到大排
-                    pchPurDtls = pchPurDtls.OrderBy(p => p.DueDate).ToList();
+                    //采购单明细优先级:先PO,按照交货日期从早到晚占用;再DO,按照交货日期从早到晚占用
+                    //pchPurDtls = pchPurDtls.OrderBy(p => p.DueDate).ToList();
+                    pchPurDtls = CalcPurDetailPriority(pchPurDtls);
                     for (int k = 0; k < pchPurDtls.Count; k++)
                     {
                         if (sumNeedQty >= needQty)
@@ -7088,5 +7089,29 @@ namespace Business.Replenishment
             }
             return Msg;
         }
+
+        /// <summary>
+        /// 计算采购单明细的占用优先级
+        /// </summary>
+        /// <param name="details"></param>
+        /// <returns></returns>
+        public List<PurOrdDetail> CalcPurDetailPriority(List<PurOrdDetail> details)
+        { 
+            List<PurOrdDetail> newDetails = new List<PurOrdDetail>();
+            //获取DO
+            var doLists = details.Where(p => p.PurOrd.StartsWith("DO")).OrderBy(p=>p.DueDate).ToList();
+            //获取PO
+            var poLists = details.Where(p => !doLists.Select(m => m.PurOrd).Contains(p.PurOrd)).OrderBy(p => p.DueDate).ToList();
+            foreach (var item in poLists)
+            {
+                newDetails.Add(item);
+            }
+            foreach (var item in doLists)
+            {
+                newDetails.Add(item);
+            }
+            return newDetails;
+        }
+
     }
 }