Przeglądaj źródła

增加损耗率和固定损耗量计算逻辑。

tangdi 2 lat temu
rodzic
commit
f378c49bbf

+ 18 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/BomChildExamineDto.cs

@@ -252,10 +252,15 @@ namespace Business.ResourceExamineManagement.Dto
         public int stock_state { get; set; }
 
         /// <summary>
-        /// 单个产品总需要用量
+        /// 单个产品总需要用量(含损耗率+固定损耗量)
         /// </summary>
         public decimal needCount { get; set; }
 
+        /// <summary>
+        /// 单个产品总需要用量(不含损耗率和固定损耗量)
+        /// </summary>
+        public decimal? needCountNoloss { get; set; }
+
         /// <summary>
         /// 是否使用此物料
         /// </summary>
@@ -275,6 +280,18 @@ namespace Business.ResourceExamineManagement.Dto
         /// 供应提前期
         /// </summary>
         public int PurLT { get; set; }
+
+        /// <summary>
+        /// 损耗率
+        /// </summary>
+        [Comment("损耗率")]
+        public decimal? Scrap { get; set; }
+
+        /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Comment("固定损耗量")]
+        public decimal? wastage { get; set; }
     }
 
     /// <summary>

+ 2 - 1
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -1504,7 +1504,8 @@ namespace Business.Replenishment
                 //循环平铺整个资源检查的物料库存情况、缺料情况,子集缺料需要用父级缺料*子集使用数量-
                 var parent = returnlist.Find(s => s.fid == item.parent_id);
                 //当前物料总共需要数量
-                item.needCount = parent.needCount * item.qty;
+                item.needCount = Math.Ceiling(parent.needCount * item.qty * (1 + (item.Scrap.GetValueOrDefault() / 100)) + item.wastage.GetValueOrDefault());
+                item.needCountNoloss = parent.needCount * item.qty;
             }
         }
 

+ 3 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -543,7 +543,8 @@ namespace Business.ResourceExamineManagement
                 //循环平铺整个资源检查的物料库存情况、缺料情况,子集缺料需要用父级缺料*子集使用数量-
                 var parent = returnlist.Find(s => s.fid == item.parent_id);
                 //当前物料总共需要数量
-                item.needCount = parent.needCount * item.qty;
+                item.needCount = Math.Ceiling(parent.needCount * item.qty * (1 + (item.Scrap.GetValueOrDefault() / 100)) + item.wastage.GetValueOrDefault());
+                item.needCountNoloss = parent.needCount * item.qty;
             }
         }
 
@@ -590,7 +591,7 @@ namespace Business.ResourceExamineManagement
             else
             {
                 //判断缺料数量
-                item.self_lack_qty = parent.lack_qty * item.qty;
+                item.self_lack_qty = Math.Ceiling(parent.lack_qty * item.qty * (1 + (item.Scrap.GetValueOrDefault() / 100)) + item.wastage.GetValueOrDefault());
                 item.lack_qty = item.self_lack_qty - item.sqty;
                 item.lack_qty = item.lack_qty < 0 ? 0 : item.lack_qty;
                 //判断状态

+ 5 - 3
MicroServices/Business/Business.Application/ResourceExamineManagement/PretreatmentAppService.cs

@@ -130,6 +130,8 @@ namespace Business.ResourceExamineManagement
                     cdto.Op = c.Op;
                     cdto.clean_leadtime = icitem.clean_leadtime;
                     cdto.PurLT = icitem.PurLT;
+                    cdto.Scrap = c.scrap.GetValueOrDefault();
+                    cdto.wastage = c.wastage.GetValueOrDefault();
                     //递归寻找子级
                     GetBomList(bomlist, bomchildlist, icitemlist, cdto, returnlist, type, orderNum);
                 }
@@ -164,9 +166,12 @@ namespace Business.ResourceExamineManagement
                         childDto.item_number = icitem.number;
                         childDto.Op = c.Op;
                         childDto.clean_leadtime = icitem.clean_leadtime;
+                        childDto.Scrap = c.scrap.GetValueOrDefault();
+                        childDto.wastage = c.wastage.GetValueOrDefault();
                         returnlist.Add(childDto);
                     }
                 }
+                idx++;
             }
 
         }
@@ -222,9 +227,6 @@ namespace Business.ResourceExamineManagement
                                 dtlitem.haveicsubs = 1;
                             }
                         }
-
-
-
                     }
                 }
             }

+ 6 - 13
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -995,7 +995,8 @@ namespace Business.ResourceExamineManagement
                     }
                     if (bomExamineList.Any())
                     {
-                        _businessBangDbContext.BulkInsert(bomExamineList.OrderBy(s => s.num_order).ToList());
+                        await _mysql_bom_child_examine.InsertManyAsync(bomExamineList);
+                        //_businessBangDbContext.BulkInsert(bomExamineList.OrderBy(s => s.num_order).ToList());
                     }
                     if (mooccupyList.Any())
                     {
@@ -4249,20 +4250,12 @@ namespace Business.ResourceExamineManagement
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
-                            decimal needCount = caleList.Sum(c => c.needCount.GetValueOrDefault());
-                            foreach (var structure in caleList)
-                            {
-                                if (woDetail.Op > structure.Op)
-                                {
-                                    woDetail.Op = structure.Op;
-                                }
-                                var psm = productStructureMs.Find(x => x.ParentItem == item.morder_no && x.ComponentItem == structure.item_number);
-                                woDetail.Yield = psm == null ? 0 : psm.Scrap / 100;
-                                woDetail.QtyRequired += structure.needCount.GetValueOrDefault() * (1 + woDetail.Yield);
-                            }
+                            woDetail.QtyRequired= caleList.Sum(c => c.needCount.GetValueOrDefault());
+                            woDetail.Yield = caleList.Max(x => x.Scrap.GetValueOrDefault());
+                            decimal needCount = caleList.Sum(c => c.needCountNoloss.GetValueOrDefault());
                             if (needCount != 0)
                             {
-                                woDetail.FrozenBOMQty = woDetail.QtyRequired / needCount;
+                                woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / needCount, 8);
                             }
                             workOrdDetails.Add(woDetail);
                         }

+ 10 - 32
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -599,19 +599,10 @@ namespace Business.SystemJobManagement
         //同步物料
         public void SyncItemMaster()
         {
-            bool isAll = true;//是否同步所有物料
+            //bool isAll = true;//是否同步所有物料
             var ic_itemList = _mysql_ic_item.GetListAsync().Result;
             List<ItemMaster> custList = new List<ItemMaster>();
-            if (isAll)
-            {
-                custList = _itemMaster.Select(a => a.IsActive);
-            }
-            else
-            {
-                //格努产品编码同步子级物料
-                List<string> childItems = GetChildItemNumber("", new List<string>());
-                custList = _itemMaster.Select(a => a.IsActive && childItems.Distinct().Contains(a.ItemNum));
-            }
+            custList = _itemMaster.Select(a => a.IsActive);
             List<ic_item> ItemsAdd = new List<ic_item>();
             List<ic_item_stock> stockAdd = new List<ic_item_stock>();
             List<ic_item> ItemsUpd = new List<ic_item>();
@@ -791,8 +782,8 @@ namespace Business.SystemJobManagement
                     if (icbom == null)
                     {
                         long domain = Convert.ToInt64(ItemList.First().Domain);
-                        long factory_id = domain % 1000;
-                        long tenant_id = domain - factory_id;
+                        long factory_id = domain % 8010;
+                        //long tenant_id = domain - factory_id;
                         var bom = new ic_bom(help.NextId())
                         {
                             bom_number = c,
@@ -832,7 +823,8 @@ namespace Business.SystemJobManagement
                                 IsDeleted = false,
                                 Op = child.Op,
                                 use_status = 1,
-                                scrap = child.Scrap
+                                scrap = child.Scrap,
+                                wastage = child.QtyConsumed
                             };
                             childItemsAdd.Add(bomchild);
                         }
@@ -867,7 +859,8 @@ namespace Business.SystemJobManagement
                                     IsDeleted = false,
                                     Op = child.Op,
                                     use_status = 1,
-                                    scrap = child.Scrap
+                                    scrap = child.Scrap,
+                                    wastage = child.QtyConsumed
                                 };
                                 childItemsAdd.Add(bomchild);
                             }
@@ -883,12 +876,11 @@ namespace Business.SystemJobManagement
                                 icbomchild.tenant_id = item.company_id;
                                 icbomchild.Op = child.Op;
                                 icbomchild.scrap = child.Scrap;
+                                icbomchild.wastage = child.QtyConsumed;
                                 childItemsUpd.Add(icbomchild);
                             }
                         }
                     }
-
-
                 }
                 _businessDbContext.BulkInsert(ItemsAdd);
                 _businessDbContext.BulkInsert(childItemsAdd);
@@ -896,21 +888,7 @@ namespace Business.SystemJobManagement
             }
         }
 
-        //循环获取子级物料编码,包括产品本身,有重复的结果去重即可
-        public List<string> GetChildItemNumber(string itemNum, List<string> list)
-        {
-            list.Add(itemNum);
-            var productStructures = _productStructureMaster.Select(p => p.ParentItem == itemNum && p.Domain == "1001" && p.IsActive);
-            list.AddRange(productStructures.Select(a => a.ComponentItem));
-            foreach (var item in productStructures)
-            {
-                if (item.StructureType.ToUpper() == "X")
-                {
-                    GetChildItemNumber(item.ComponentItem, list);
-                }
-            }
-            return list;
-        }
+        
 
         public string DoProductScheduleJob()
         {

+ 6 - 0
MicroServices/Business/Business.Domain/MongoDB/MES/IC/mo_ic_bom_child.cs

@@ -67,6 +67,12 @@ namespace Business.Domain
         [Comment("损耗率")]
         public decimal? scrap { get; set; }
         /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("固定损耗量")]
+        public decimal? wastage { get; set; }
+        /// <summary>
         /// 是否倒冲
         /// </summary>
         [Comment("是否倒冲")]

+ 22 - 1
MicroServices/Business/Business.Domain/StructuredDB/Bang/b_bom_child_examine.cs

@@ -278,12 +278,19 @@ namespace Business.Domain
         public int? stock_state { get; set; }
 
         /// <summary>
-        /// 单个产品总需要用量
+        /// 单个产品总需要用量(含损耗率和固定损耗量)
         /// </summary>
         [Comment("单个产品总需要用量")]
         [Precision(23, 10)]
         public decimal? needCount { get; set; }
 
+        /// <summary>
+        /// 单个产品总需要用量(不含损耗率和固定损耗量)
+        /// </summary>
+        [Comment("总需要用量")]
+        [Precision(23, 10)]
+        public decimal? needCountNoloss { get; set; }
+
         /// <summary>
         /// 是否使用此物料
         /// </summary>
@@ -295,5 +302,19 @@ namespace Business.Domain
         /// </summary>
         [Comment("工序")]
         public int Op { get; set; }
+
+        /// <summary>
+        /// 损耗率
+        /// </summary>
+        [Comment("损耗率")]
+        [Precision(23, 10)]
+        public decimal? Scrap { get; set; }
+
+        /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Comment("固定损耗量")]
+        [Precision(12, 5)]
+        public decimal? wastage { get; set; }
     }
 }

+ 12 - 0
MicroServices/Business/Business.Domain/StructuredDB/Bang/b_bom_pretreatment.cs

@@ -188,5 +188,17 @@ namespace Business.Domain
         [StringLength(80)]
         [Comment("供应提前期")]
         public int PurLT { get; set; }
+
+        /// <summary>
+        /// 损耗率
+        /// </summary>
+        [Comment("损耗率")]
+        public decimal? Scrap { get; set; }
+
+        /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Comment("固定损耗量")]
+        public decimal? wastage { get; set; }
     }
 }

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ProductStructureMaster.cs

@@ -81,6 +81,12 @@ namespace Business.Domain
         [Comment("损耗率")]
         public decimal Scrap { get; set; }
 
+        /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Comment("固定损耗量")]
+        public decimal QtyConsumed { get; set; }
+
         /// <summary>
         /// 版本
         /// </summary>

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ic_bom_child.cs

@@ -70,6 +70,12 @@ namespace Business.Domain
         [Comment("损耗率")]
         public decimal? scrap { get; set; }
         /// <summary>
+        /// 固定损耗量
+        /// </summary>
+        [Precision(12, 5)]
+        [Comment("固定损耗量")]
+        public decimal? wastage { get; set; }
+        /// <summary>
         /// 是否倒冲
         /// </summary>
         [Comment("是否倒冲")]