소스 검색

交货计划累计在途总队总,先扣库存再扣在途

Murphy 2 년 전
부모
커밋
8e5e3875bf

+ 83 - 11
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -5751,6 +5751,32 @@ namespace Business.ResourceExamineManagement
         {
         {
             try
             try
             {
             {
+                var demanddeletedList = _mysql_ic_demandschedule.GetListAsync(a => a.ishistoryversion != "Y" && a.status != "P").Result;
+                demanddeletedList.ForEach(ds =>
+                {
+                    ds.IsDeleted = true;
+                    ds.update_time = DateTime.Now;
+                    ds.remarks = $"{DateTime.Now.ToString()},重新生成交货计划把未发布交货计划软删除";
+                });
+                await _businessDbContext.BulkUpdateAsync(demanddeletedList);
+
+                var dsdeletedList = _srm_polist_ds.Select(a => a.isactive == 1 && a.status == "N");
+                dsdeletedList.ForEach(ds =>
+                {
+                    ds.isactive = 0;
+                    ds.updatetime = DateTime.Now;
+                    ds.remarks = $"{DateTime.Now.ToString()},重新生成交货计划把未发布交货单禁用";
+                });
+                await _businessDbContext.BulkUpdateAsync(dsdeletedList);
+                var historyversionList = _mysql_ic_demandschedule.GetListAsync(a => a.ishistoryversion != "Y").Result;
+                historyversionList.ForEach(a =>
+                {
+                    a.ishistoryversion = "Y";
+                    a.historyversionTime = DateTime.Now;
+                });
+                await _businessDbContext.BulkUpdateAsync(historyversionList);
+
+
                 var weekday = (int)DateTime.Now.DayOfWeek;
                 var weekday = (int)DateTime.Now.DayOfWeek;
                 int adddays = weekday==0?1:8-weekday;
                 int adddays = weekday==0?1:8-weekday;
                 DateTime beginTime = Convert.ToDateTime(DateTime.Now.AddDays(adddays).ToString("yyyy-MM-dd 00:00:00.000"));
                 DateTime beginTime = Convert.ToDateTime(DateTime.Now.AddDays(adddays).ToString("yyyy-MM-dd 00:00:00.000"));
@@ -5775,7 +5801,7 @@ namespace Business.ResourceExamineManagement
                 var examineIds = workExamineResult.Select(s => s.examineId).ToList();
                 var examineIds = workExamineResult.Select(s => s.examineId).ToList();
                 var examines=_mysql_bom_child_examine.GetListAsync(a => examineIds.Contains(a.examine_id.Value) && (a.erp_cls==3 || a.erp_cls==2) && a.is_use && a.factory_id.ToString() == domain).Result;
                 var examines=_mysql_bom_child_examine.GetListAsync(a => examineIds.Contains(a.examine_id.Value) && (a.erp_cls==3 || a.erp_cls==2) && a.is_use && a.factory_id.ToString() == domain).Result;
                 var pickBills = _nbrDetail.Select(a => workordListPickBill.Contains(a.WorkOrd) && a.Type.ToUpper()=="SM" && (a.QtyOrd - a.QtyRec)>0 && a.Domain == domain && a.Status.ToUpper()!="C");
                 var pickBills = _nbrDetail.Select(a => workordListPickBill.Contains(a.WorkOrd) && a.Type.ToUpper()=="SM" && (a.QtyOrd - a.QtyRec)>0 && a.Domain == domain && a.Status.ToUpper()!="C");
-                var dsList=_srm_polist_ds.Select(a => a.requestdate <= endTime && a.domain==domain && a.isactive==1);
+                var dsList=_srm_polist_ds.Select(a =>a.domain==domain && a.isactive==1 &&a.status=="P");
                 var items = examines.Select(e => e.item_number).Distinct().ToList();
                 var items = examines.Select(e => e.item_number).Distinct().ToList();
                 var itempickbills=pickBills.Select(s => s.ItemNum);
                 var itempickbills=pickBills.Select(s => s.ItemNum);
                 items.AddRange(itempickbills);
                 items.AddRange(itempickbills);
@@ -5791,6 +5817,7 @@ namespace Business.ResourceExamineManagement
                 var itemListStock = _SAPInv.Select(a => items.Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
                 var itemListStock = _SAPInv.Select(a => items.Contains(a.MATNR) && locationList.Contains(a.LGORT) && a.WERKS == domain);
                 List<ic_demandschedule> ds = new List<ic_demandschedule>();
                 List<ic_demandschedule> ds = new List<ic_demandschedule>();
                 Dictionary<string, decimal> weekStockQty = new Dictionary<string, decimal>();
                 Dictionary<string, decimal> weekStockQty = new Dictionary<string, decimal>();
+                Dictionary<string, decimal> weekdsQty = new Dictionary<string, decimal>();
                 foreach (var item in itemListStock)
                 foreach (var item in itemListStock)
                 {
                 {
                     if(!weekStockQty.ContainsKey(item.MATNR))
                     if(!weekStockQty.ContainsKey(item.MATNR))
@@ -5801,6 +5828,17 @@ namespace Business.ResourceExamineManagement
                         weekStockQty[item.MATNR] += (item.LABST + item.INSME);
                         weekStockQty[item.MATNR] += (item.LABST + item.INSME);
                     }
                     }
                 }
                 }
+                foreach(var item in dsList)
+                {
+                    if (!weekdsQty.ContainsKey(item.itemnum))
+                    {
+                        weekdsQty.Add(item.itemnum, item.schedqty - item.sentqty);
+                    }
+                    else
+                    {
+                        weekdsQty[item.itemnum] += (item.schedqty - item.sentqty);
+                    }
+                }
                 for (int i=0;i<8;i++)
                 for (int i=0;i<8;i++)
                 {
                 {
                     var itemBegin = beginTime.AddDays(i*7);
                     var itemBegin = beginTime.AddDays(i*7);
@@ -5863,23 +5901,41 @@ namespace Business.ResourceExamineManagement
                                 {
                                 {
                                     itemds.mesqty = d.NeedQty;
                                     itemds.mesqty = d.NeedQty;
                                 }
                                 }
-                                //库存需要做扣减
-                                if(weekStockQty.ContainsKey(d.ItemNum))
+                                //库存扣减量
+                                decimal stockDeduction = 0;
+                                if (weekStockQty.ContainsKey(d.ItemNum))
                                 {
                                 {
                                     itemds.locqty = weekStockQty[d.ItemNum];
                                     itemds.locqty = weekStockQty[d.ItemNum];
                                     if(itemds.mesqty>= itemds.locqty)
                                     if(itemds.mesqty>= itemds.locqty)
                                     {
                                     {
                                         weekStockQty[d.ItemNum] = 0;
                                         weekStockQty[d.ItemNum] = 0;
-                                    }else
+                                        stockDeduction = itemds.locqty;
+                                    }
+                                    else
                                     {
                                     {
                                         weekStockQty[d.ItemNum] -= itemds.mesqty;
                                         weekStockQty[d.ItemNum] -= itemds.mesqty;
+                                        stockDeduction = itemds.mesqty;
                                     }
                                     }
                                 }else
                                 }else
                                 {
                                 {
                                     itemds.locqty = 0;
                                     itemds.locqty = 0;
                                 }
                                 }
-                                //累计在途数量
-                                itemds.sechedqty = dsList.Where(a => a.requestdate<itemds.arrivaldate && a.itemnum==d.ItemNum).Sum(a=>a.schedqty-a.sentqty);
+                                if (weekdsQty.ContainsKey(d.ItemNum))
+                                {
+                                    itemds.sechedqty = weekdsQty[d.ItemNum];
+                                    //优先扣减库存,库存不够扣减交货单在途
+                                    if(itemds.mesqty-stockDeduction- itemds.sechedqty>=0)
+                                    {
+                                        weekdsQty[d.ItemNum] = 0;
+                                    }else
+                                    {
+                                        weekdsQty[d.ItemNum] -= itemds.mesqty - stockDeduction;
+                                    }
+                                }
+                                else
+                                {
+                                    itemds.sechedqty = 0;
+                                }
                                 itemds.tosechedqty = itemds.mesqty-(itemds.locqty + itemds.sechedqty);
                                 itemds.tosechedqty = itemds.mesqty-(itemds.locqty + itemds.sechedqty);
                                 itemds.status = "";
                                 itemds.status = "";
                                 itemds.remarks = "";
                                 itemds.remarks = "";
@@ -5907,25 +5963,43 @@ namespace Business.ResourceExamineManagement
                             itemds.arrivaldate = itemBegin.AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
                             itemds.arrivaldate = itemBegin.AddDays(-1).AddDays(-itemNum.InsLT).AddDays(-(int)Math.Ceiling(itemNum.MFGMTTR));
                             itemds.shortqty = 0;
                             itemds.shortqty = 0;
                             itemds.mesqty = pickBills.Where(a => a.ItemNum == item).Sum(q => q.QtyOrd - q.QtyRec);
                             itemds.mesqty = pickBills.Where(a => a.ItemNum == item).Sum(q => q.QtyOrd - q.QtyRec);
-                            //库存需要做扣减
+                            //库存扣减量
+                            decimal stockDeduction = 0;
                             if (weekStockQty.ContainsKey(item))
                             if (weekStockQty.ContainsKey(item))
                             {
                             {
                                 itemds.locqty = weekStockQty[item];
                                 itemds.locqty = weekStockQty[item];
                                 if (itemds.mesqty >= itemds.locqty)
                                 if (itemds.mesqty >= itemds.locqty)
                                 {
                                 {
                                     weekStockQty[item] = 0;
                                     weekStockQty[item] = 0;
+                                    stockDeduction = itemds.locqty;
                                 }
                                 }
                                 else
                                 else
                                 {
                                 {
                                     weekStockQty[item] -= itemds.mesqty;
                                     weekStockQty[item] -= itemds.mesqty;
+                                    stockDeduction = itemds.mesqty;
                                 }
                                 }
                             }
                             }
                             else
                             else
                             {
                             {
                                 itemds.locqty = 0;
                                 itemds.locqty = 0;
                             }
                             }
-                            //累计在途数量
-                            itemds.sechedqty = dsList.Where(a => a.requestdate < itemds.arrivaldate && a.itemnum == item).Sum(a => a.schedqty - a.sentqty);
+                            if (weekdsQty.ContainsKey(item))
+                            {
+                                itemds.sechedqty = weekdsQty[item];
+                                //优先扣减库存,库存不够扣减交货单在途
+                                if (itemds.mesqty - stockDeduction - itemds.sechedqty >= 0)
+                                {
+                                    weekdsQty[item] = 0;
+                                }
+                                else
+                                {
+                                    weekdsQty[item] -= itemds.mesqty - stockDeduction;
+                                }
+                            }
+                            else
+                            {
+                                itemds.sechedqty = 0;
+                            }
                             itemds.tosechedqty = itemds.mesqty - (itemds.locqty + itemds.sechedqty);
                             itemds.tosechedqty = itemds.mesqty - (itemds.locqty + itemds.sechedqty);
                             itemds.status = "";
                             itemds.status = "";
                             itemds.remarks = "";
                             itemds.remarks = "";
@@ -5938,8 +6012,6 @@ namespace Business.ResourceExamineManagement
                         }
                         }
                     }
                     }
                 }
                 }
-                await _mysql_ic_demandschedule.HardDeleteAsync(a => a.status != "P");
-                _srm_polist_ds.Delete(a=>a.status=="N");
                 await _businessDbContext.BulkInsertAsync(ds);
                 await _businessDbContext.BulkInsertAsync(ds);
                 return "ok";
                 return "ok";
             }
             }

+ 13 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ic_demandschedule.cs

@@ -99,5 +99,18 @@ namespace Business.Domain
         [Comment("备注")]
         [Comment("备注")]
         [StringLength(500)]
         [StringLength(500)]
         public string remarks { get; set; }
         public string remarks { get; set; }
+
+        /// <summary>
+        /// 是否历史版本(Y/N)
+        /// </summary>
+        [Comment("是否历史版本(Y/N)")]
+        [StringLength(2)]
+        public string? ishistoryversion { get; set; }
+        /// <summary>
+        /// 改为历史版本的时间
+        /// </summary>
+        [Comment("改为历史版本的时间")]
+
+        public DateTime? historyversionTime { get; set; }
     }
     }
 }
 }