Bläddra i källkod

生成交货单逻辑调整

heteng 2 år sedan
förälder
incheckning
c4728705c2

+ 26 - 12
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -68,6 +68,12 @@ namespace Business.Replenishment
 
         private ISqlRepository<NbrMaster> _nbrMaster;
         private ISqlRepository<NbrDetail> _nbrDetail;
+
+        /// <summary>
+        /// 送货单子表
+        /// </summary>
+        private readonly ISqlRepository<scm_shdzb> _scm_shdzb;
+
         /// <summary>
         /// 交货单异常记录表
         /// </summary>
@@ -346,6 +352,7 @@ namespace Business.Replenishment
             ISqlRepository<PurOrdDetail> PurOrdDetail,
             ISqlRepository<PurOrdMaster> PurOrdMaster,
             ISqlRepository<DeliveryExceptionMaster> DeliveryExceptionMaster,
+            ISqlRepository<scm_shdzb> scm_shdzb,
             IUnitOfWorkManager unitOfWorkManager)
         {
             _replenishmentROPWeekPlan = replenishmentROPWeekPlan;
@@ -444,6 +451,7 @@ namespace Business.Replenishment
             _PurOrdDetail = PurOrdDetail;
             _PurOrdMaster = PurOrdMaster;
             _DeliveryExceptionMaster = DeliveryExceptionMaster;
+            _scm_shdzb = scm_shdzb;
         }
         #endregion
 
@@ -6619,17 +6627,19 @@ namespace Business.Replenishment
                 return Msg;
             }
             //获取采购明细数据:未关闭,且未交货数量(需求数量-已收数量)>0
-            //DateTime endTime = Convert.ToDateTime("2024-01-01 00:00:00.000");
             List<PurOrdDetail> purOrdDetails = _PurOrdDetail.Select(p => p.Domain == domain && itemnums.Contains(p.ItemNum) && p.Status.ToUpper() != "C" && (p.QtyOrded - p.RctQty) > 0).OrderBy(p => p.DueDate).ToList();
             if (!purOrdDetails.Any())
             {
                 Msg = "NO|没有可用的采购单";
                 return Msg;
             }
+            List<string> purOrds = purOrdDetails.Select(p => p.PurOrd).Distinct().ToList();
+            //获取送货单子表数据
+            List<scm_shdzb> shdzbs = _scm_shdzb.Select(p=> purOrds.Contains(p.po_bill) && itemnums.Contains(p.sh_material_code) && string.IsNullOrEmpty(p.jhdbh)).ToList();
             //获取采购单数据
-            List<PurOrdMaster> purOrdMasters = _PurOrdMaster.Select(p => p.Domain == domain && purOrdDetails.Select(m => m.PurOrd).Distinct().Contains(p.PurOrd)).ToList();
+            List<PurOrdMaster> purOrdMasters = _PurOrdMaster.Select(p => p.Domain == domain && purOrds.Contains(p.PurOrd)).ToList();
             //获取占用可用PO明细的交货单
-            List<srm_polist_ds> dbPolistds = _srmpolistds.Select(p => purOrdDetails.Select(m => m.PurOrd).Contains(p.ponumber) && p.status.ToUpper() !="C" && p.isactive == 1).ToList();
+            List<srm_polist_ds> dbPolistds = _srmpolistds.Select(p => purOrds.Contains(p.ponumber) && p.isactive == 1).ToList();
 
             //生成交货单
             srm_polist_ds entity;
@@ -6698,15 +6708,17 @@ namespace Business.Replenishment
                 }
                 //当前采购明细对应的采购单
                 var curPurMsts = purOrdMasters.Where(p => curPurDtls.Select(m => m.PurOrd).Distinct().Contains(p.PurOrd)).ToList();
+                //当前采购明细对应的送货单
+                var curShds = shdzbs.Where(p => p.sh_material_code == demandplans[i].itemnum && curPurDtls.Select(m => m.PurOrd).Contains(p.sh_material_code)).ToList();
                 //数据库中当前采购单明细被交货单占用情况
                 var curDbOccupys = dbPolistds.Where(p => curPurDtls.Select(m => m.PurOrd).Contains(p.ponumber) && p.itemnum == demandplans[i].itemnum).ToList();
                 //本次计算中采购单明细被交货单占用情况
                 var curCalcOccupys = inserts.Where(p => curPurDtls.Select(m => m.PurOrd).Contains(p.ponumber) && p.itemnum == demandplans[i].itemnum).ToList();
                 //校验4:如果当前物料对应的采购明细可用数量不满足,则跳过
-                //采购单明细的剩余未交数量:采购明细的需求数量-已交数量
-                sumRestQty = curPurDtls.Sum(p => p.QtyOrded - p.RctQty);
-                //交货单占用数量:交货单的剩余需要采购数量
-                sumDbOccupy = curDbOccupys.Sum(p => p.restqty);
+                //采购单明细的剩余未交数量:采购明细的需求数量-送货单需求数量(不是交货单转的送货单)
+                sumRestQty = curPurDtls.Sum(p => p.QtyOrded) - curShds.Sum(p=>p.sh_delivery_quantity);
+                //交货单占用数量:交货单的需求数量
+                sumDbOccupy = curDbOccupys.Sum(p => p.schedqty);
                 //本次计算交货单占用数量:本次计算交货单的需求数量
                 sumCurOccupy = curCalcOccupys.Sum(p => p.schedqty);
                 //剩余可用数量
@@ -6789,11 +6801,13 @@ namespace Business.Replenishment
                         flag = true;
                         break;
                     }
+                    //送货单占用数量
+                    var pchShds = curShds.Where(p => pchPurMsts.Select(m => m.PurOrd).Contains(p.po_bill)).ToList();
                     //校验当前供应商的采购明细剩余可用数量是否满足供应商的配额
                     //采购单明细剩余可用数量
-                    sumRestQty = pchPurDtls.Sum(p => p.QtyOrded - p.RctQty);
+                    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.restqty);
+                    sumDbOccupy = curDbOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
                     //本次计算交货单占用数量:本次计算交货单的需求数量
                     sumCurOccupy = curCalcOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
                     //剩余可用数量
@@ -6823,11 +6837,11 @@ namespace Business.Replenishment
                             //当前供应商配额以满足,循环下一个供应商
                             break;
                         }
-                        //当前采购明细剩余数量=订单数量-已收数量
-                        decimal syQty = pchPurDtls[k].QtyOrded - pchPurDtls[k].RctQty;
+                        //当前采购明细剩余数量=订单数量-送货单数量(不是由交货单转的送货单)
+                        decimal syQty = pchPurDtls[k].QtyOrded - pchShds.Where(p => p.po_billline == pchPurDtls[k].Line).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.restqty);
+                        decimal yzyQty = occupy.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);

+ 58 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/scm_shdzb.cs

@@ -0,0 +1,58 @@
+using Business.Core.Attributes;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace Business.Domain
+{
+    /// <summary>
+    /// 收货单子表
+    /// </summary>
+    [Comment("收货单子表")]
+    public class scm_shdzb
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        [Comment("主键")]
+        [Key]
+        public long id { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        [Comment("物料编码")]
+        public string sh_material_code { get; set; }
+
+        /// <summary>
+        /// 采购单号
+        /// </summary>
+        [Comment("采购单号")]
+        public string po_bill { get; set; }
+
+        /// <summary>
+        /// 采购单行号
+        /// </summary>
+        [Comment("采购单行号")]
+        public int po_billline { get; set; }
+
+        /// <summary>
+        /// 送货数量
+        /// </summary>
+        [Comment("送货数量")]
+        public decimal sh_delivery_quantity { get; set; }
+
+        /// <summary>
+        /// 交货单号
+        /// </summary>
+        [Comment("交货单号")]
+        public string jhdbh { get; set; }
+
+        /// <summary>
+        /// 交货单行号
+        /// </summary>
+        [Comment("交货单行号")]
+        public string jhdhh { get; set; }
+    }
+}

+ 5 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs

@@ -38,6 +38,11 @@ namespace Business.EntityFrameworkCore
         /// </summary>
         public DbSet<srm_polist_ds> srm_polist_ds { get; set; }
 
+        /// <summary>
+        /// 冞億等赽桶
+        /// </summary>
+        public DbSet<scm_shdzb> scm_shdzb { get; set; }
+
         /// <summary>
         /// 蝠億等祑都暮翹
         /// </summary>