Browse Source

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

heteng 2 years ago
parent
commit
8a03a763fe

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

@@ -3203,10 +3203,11 @@ namespace Business.Replenishment
                 AutoCreateBomBill(param.company_id.ToString(), autoCreates);
                 pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
             }
+            AsyncItemStockFromWMS(pretreatments);
 
             //数据库快照-同步mysql库数据到mongoDB中
             await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
-
+            
             DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
             if (!planCheck)
             {
@@ -4373,5 +4374,65 @@ namespace Business.Replenishment
             }
             return result;
         }
+
+        public void AsyncItemStockFromWMS(List<b_bom_pretreatment> bom_Pretreatments)
+        {
+            //产品编码
+            var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
+            List<string> itemChildList = new List<string>();
+            itemChildList.AddRange(itemList);
+            if (!itemChildList.Any())
+            {
+                return;
+            }
+            List<string> locationList = new List<string> { "1000", "1001", "5008", "8000", "8001" };
+            //取出WMS物料记录
+            var stockList = _invMaster.Select(a => a.Domain == param.factoryId.ToString() && locationList.Contains(a.Location) && a.IsActive && itemChildList.Distinct().Contains(a.ItemNum));
+            //WMS物料记录汇总
+            var groupList = stockList.
+                GroupBy(m => new { m.ItemNum }).
+                Select(a => new { ItemNum = a.Key.ItemNum, Qty = a.Sum(c => c.QtyOnHand) }).ToList();
+
+
+            var itemNums = groupList.Select(b => b.ItemNum).ToList();//需要处理的dop物料编码集合
+            //根据WMS物料,取出DOP物料数据
+            var items = _mysql_ic_item.GetListAsync(a => itemNums.Contains(a.number) && a.factory_id == param.factoryId && a.company_id == param.company_id).Result;
+
+
+            var itemIds = items.Select(b => b.Id).ToList();//需要处理的dop物料id集合
+            List<ic_item_stock> mysqlStock = _mysql_ic_item_stock.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == param.factoryId && a.company_id == param.company_id).Result;
+            List<ic_item_stock> needAddList = new List<ic_item_stock>();
+
+            foreach (var stockWMS in groupList)
+            {
+                var num = items.Find(x => x.number == stockWMS.ItemNum);
+                if (num != null)
+                {
+                    var item = mysqlStock.Find(a => a.Id == num.Id);
+                    if (item != null)
+                    {
+                        item.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
+                    }
+                    else
+                    {
+                        ic_item_stock stock = new ic_item_stock();
+                        stock.GenerateNewId(help.NextId());
+                        stock.tenant_id = param.company_id;
+                        stock.factory_id = param.factoryId;
+                        stock.company_id = param.company_id;
+                        stock.icitem_id = num.Id;
+                        stock.icitem_number = num.number;
+                        stock.icitem_name = num.name;
+                        stock.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
+                        needAddList.Add(stock);
+                    }
+                }
+            }
+            if (needAddList.Count > 0)
+            {
+                _businessDbContext.BulkInsert(needAddList);
+            }
+            _businessDbContext.BulkUpdate(mysqlStock);
+        }
     }
 }

+ 4 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -3907,6 +3907,10 @@ namespace Business.ResourceExamineManagement
             var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
             List<string> itemChildList = new List<string>();
             itemChildList.AddRange(itemList);
+            if (!itemChildList.Any())
+            {
+                return;
+            }
             List<string> locationList = new List<string> { "1000", "1001", "5008", "8000", "8001" };
             //取出WMS物料记录
             var stockList = _invMaster.Select(a => a.Domain == param.factoryId.ToString() && locationList.Contains(a.Location) && a.IsActive && itemChildList.Distinct().Contains(a.ItemNum));