Murphy 2 жил өмнө
parent
commit
8520adf24d

+ 28 - 37
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -1161,13 +1161,14 @@ namespace Business.ResourceExamineManagement
         {
             List<mo_srm_po_main> polist = new List<mo_srm_po_main>();
             List<mo_srm_po_list> podetaillist = new List<mo_srm_po_list>();
+            var itemList = _ic_item.Find(a => a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
             //将PR按供应商和物料和日期(一周内)进行合并,生成PO
             //1.按照供应商、需求日期排序
             //2.判断是不是同一个供应商,不是的话就新建一个PO;是的话判断是不是同一周,不是的话就新建一个PO,是的话判断有没有相同物料,有的话合并物料数量价格,没有的话新建一条明细
             list = list.OrderBy(a => a.pr_purchaseid).ThenBy(b => b.pr_rarrive_date).ToList();
             long? supplierId = -1;
             DateTime supplierDate = DateTime.Now;
-            foreach (var item in list)
+            foreach (mo_srm_pr_main item in list)
             {
                 if (item.pr_purchaseid != supplierId)
                 {
@@ -1216,6 +1217,7 @@ namespace Business.ResourceExamineManagement
                     podetail.pr_purchase_id = po_Main.supplier_id;
                     podetail.pr_purchase_name = po_Main.supplier_name;
                     podetail.icitem_id = item.icitem_id;
+                    podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                     podetail.icitem_name = item.icitem_name;
                     podetail.qty = item.pr_aqty;
                     podetail.netprice = item.pr_price;
@@ -1270,6 +1272,7 @@ namespace Business.ResourceExamineManagement
                             podetail.pr_purchase_id = pomain.supplier_id;
                             podetail.pr_purchase_name = pomain.supplier_name;
                             podetail.icitem_id = item.icitem_id;
+                            podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                             podetail.icitem_name = item.icitem_name;
                             podetail.qty = item.pr_aqty;
                             podetail.netprice = item.pr_price;
@@ -1340,6 +1343,7 @@ namespace Business.ResourceExamineManagement
                         podetail.pr_purchase_id = po_Main.supplier_id;
                         podetail.pr_purchase_name = po_Main.supplier_name;
                         podetail.icitem_id = item.icitem_id;
+                        podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                         podetail.icitem_name = item.icitem_name;
                         podetail.qty = item.pr_aqty;
                         podetail.netprice = item.pr_price;
@@ -1375,6 +1379,7 @@ namespace Business.ResourceExamineManagement
         {
             List<mo_srm_po_main> polist = new List<mo_srm_po_main>();
             List<mo_srm_po_list> podetaillist = new List<mo_srm_po_list>();
+            var itemList = _ic_item.Find(a => a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
             //将PR按供应商和物料和日期(一周内)进行合并,生成PO
             //1.按照供应商、需求日期排序
             //2.判断是不是同一个供应商,不是的话就新建一个PO;是的话判断是不是同一周,不是的话就新建一个PO,是的话判断有没有相同物料,有的话合并物料数量价格,没有的话新建一条明细
@@ -1430,6 +1435,7 @@ namespace Business.ResourceExamineManagement
                     podetail.pr_purchase_id = po_Main.supplier_id;
                     podetail.pr_purchase_name = po_Main.supplier_name;
                     podetail.icitem_id = item.icitem_id;
+                    podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                     podetail.icitem_name = item.icitem_name;
                     podetail.qty = item.pr_aqty;
                     podetail.netprice = item.pr_price;
@@ -1484,6 +1490,7 @@ namespace Business.ResourceExamineManagement
                             podetail.pr_purchase_id = pomain.supplier_id;
                             podetail.pr_purchase_name = pomain.supplier_name;
                             podetail.icitem_id = item.icitem_id;
+                            podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                             podetail.icitem_name = item.icitem_name;
                             podetail.qty = item.pr_aqty;
                             podetail.netprice = item.pr_price;
@@ -1554,6 +1561,7 @@ namespace Business.ResourceExamineManagement
                         podetail.pr_purchase_id = po_Main.supplier_id;
                         podetail.pr_purchase_name = po_Main.supplier_name;
                         podetail.icitem_id = item.icitem_id;
+                        podetail.ItemNum = itemList.First(a => a.mysql_id == item.icitem_id).number;
                         podetail.icitem_name = item.icitem_name;
                         podetail.qty = item.pr_aqty;
                         podetail.netprice = item.pr_price;
@@ -2131,19 +2139,10 @@ namespace Business.ResourceExamineManagement
                     itemList?.ForEach(a =>
                     {
                         var find = itemLocList?.Find(c => c.ItemNum == a.ComponentItem);
-                        var packfind = itemPackList?.Find(c => c.ItemNum == a.ComponentItem);
                         string LocationTo = "";
-                        bool TraceDetail = false;
-                        decimal TraceDetailQty = 0m;
                         if (find!=null)
                         {
                             LocationTo=find.Location;
-                            TraceDetail=find.TraceDetail;
-                            //TraceDetail为true指按需求量,否则按标签
-                            if (!TraceDetail)
-                            {
-                                TraceDetailQty = packfind.PackingQty.GetValueOrDefault();
-                            }
                         }
                         //相同物料汇总
                         var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem);
@@ -2160,8 +2159,8 @@ namespace Business.ResourceExamineManagement
                                 LocationFrom = LocationTo,
                                 LocationTo = "",
                                 WorkOrd = workord,
-                                QtyOrd = TraceDetail?QtyOrdSum * a.Qty: TraceDetailQty,
-                                CurrQtyOpened = TraceDetail ? QtyOrdSum * a.Qty : TraceDetailQty,
+                                QtyOrd =QtyOrdSum * a.Qty,
+                                CurrQtyOpened = QtyOrdSum * a.Qty ,
                                 Line = i,
                                 IsActive = true,
                                 CreateTmie = DateTime.Now,
@@ -2176,42 +2175,34 @@ namespace Business.ResourceExamineManagement
                             nbrDetailList.First( b=> b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd= itemComponent.QtyOrd+ QtyOrdSum * a.Qty;
                             nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + QtyOrdSum * a.Qty;
                         }
-                        
-                        if (dictItemQty.ContainsKey(a.ComponentItem))
+                    });
+                    nbrDetailList.ForEach(a => 
+                    {
+                        var find = itemLocList?.Find(c => c.ItemNum == a.ItemNum);
+                        var packfind = itemPackList?.Find(c => c.ItemNum == a.ItemNum);
+                        if(find!=null && !find.TraceDetail && packfind!=null && packfind.PackingQty>0)
                         {
-                            if(TraceDetail)
-                            {
-                                dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + QtyOrdSum * a.Qty;
-                            }else
-                            {
-                                dictItemQty[a.ComponentItem] = dictItemQty[a.ComponentItem] + TraceDetailQty;
-                            }
+                            a.CurrQtyOpened = Math.Ceiling(a.CurrQtyOpened.GetValueOrDefault() / packfind.PackingQty.GetValueOrDefault()) * packfind.PackingQty;
+                            dictItemQty.Add(a.ItemNum, QtyOrdSum * itemList.First(b => b.ComponentItem == a.ItemNum).Qty);
                         }
                         else
                         {
-                            if (TraceDetail)
-                            {
-                                dictItemQty.Add(a.ComponentItem, QtyOrdSum * a.Qty);
-                            }
-                            else
-                            {
-                                dictItemQty.Add(a.ComponentItem, TraceDetailQty);
-                            }
+                            dictItemQty.Add(a.ItemNum, QtyOrdSum * itemList.First(b => b.ComponentItem == a.ItemNum).Qty);
                         }
                     });
-
                     List<string> itemKeys = dictItemQty.Keys.ToList();
-                    var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
-                    var itemIds = items.Select(b => b.Id).ToList();
-                    var leadTimes = GetLeadTime(itemIds, 1000, 1001).Max(a=>a.ordissu_days.GetValueOrDefault());
+                    //var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
+                    //var itemIds = items.Select(b => b.Id).ToList();
+                    //var leadTimes = GetLeadTime(itemIds, 1000, 1001).Max(a=>a.ordissu_days.GetValueOrDefault());
+                    decimal leadTimes=itemLocList.Select(a => a.MFGMTTR).Max();
                     //没有维护备料提前期,默认取7天
-                    if (leadTimes == 0.0M)
-                    { 
-                        nbrMasterList.First(a=>a.Nbr==Nbr).Date= dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
+                    if (leadTimes > 0)
+                    {
+                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1 * Convert.ToDouble(leadTimes));
                     }
                     else
                     {
-                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-1*Convert.ToDouble(leadTimes));
+                        nbrMasterList.First(a => a.Nbr == Nbr).Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate).GetValueOrDefault().AddDays(-7);
                     }
                     //TODO:
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。

+ 31 - 31
MicroServices/Business/Business.Application/SyncDataManagement/SyncMySQLDataAppService.cs

@@ -173,39 +173,39 @@ namespace Business.SyncDataManagement
         public async void SyncBaseDataToMongoDB()
         {
             //同步物料Bom数据
-            //var icBoms = _mysql_ic_bom.GetListAsync().Result;
-            //if (icBoms.Count > 0)
-            //{
-            //    //先清空表数据
-            //    await _ic_bom.Delete(p => p.mysql_id != -1);
-            //    var moIcBoms = ObjectMapper.Map<List<ic_bom>, List<mo_ic_bom>>(icBoms);
-            //    moIcBoms.ForEach(s => s.id = help.NextId());
-            //    //插入数据
-            //    await _ic_bom.InsertMany(moIcBoms);
-            //}
+            var icBoms = _mysql_ic_bom.GetListAsync().Result;
+            if (icBoms.Count > 0)
+            {
+                //先清空表数据
+                await _ic_bom.Delete(p => p.mysql_id != -1);
+                var moIcBoms = ObjectMapper.Map<List<ic_bom>, List<mo_ic_bom>>(icBoms);
+                moIcBoms.ForEach(s => s.id = help.NextId());
+                //插入数据
+                await _ic_bom.InsertMany(moIcBoms);
+            }
 
-            ////同步物料BOM明细数据
-            //var icbom_childs = _mysql_ic_bom_child.GetListAsync().Result;
-            //if (icbom_childs.Count > 0)
-            //{
-            //    //先清空表数据
-            //    await _ic_bom_child.Delete(p => p.mysql_id != -1);
-            //    var moIcbom_childs = ObjectMapper.Map<List<ic_bom_child>, List<mo_ic_bom_child>>(icbom_childs);
-            //    moIcbom_childs.ForEach(s => s.id = help.NextId());
-            //    //插入数据
-            //    await _ic_bom_child.InsertMany(moIcbom_childs);
-            //}
+            //同步物料BOM明细数据
+            var icbom_childs = _mysql_ic_bom_child.GetListAsync().Result;
+            if (icbom_childs.Count > 0)
+            {
+                //先清空表数据
+                await _ic_bom_child.Delete(p => p.mysql_id != -1);
+                var moIcbom_childs = ObjectMapper.Map<List<ic_bom_child>, List<mo_ic_bom_child>>(icbom_childs);
+                moIcbom_childs.ForEach(s => s.id = help.NextId());
+                //插入数据
+                await _ic_bom_child.InsertMany(moIcbom_childs);
+            }
 
-            ////工厂物料明细表
-            //var ic_factory_details = _mysql_ic_factory_details.GetListAsync().Result;
-            //if (ic_factory_details.Count > 0)
-            //{
-            //    //先清空表数据
-            //    await _ic_factory_details.Delete(p => p.mysql_id != -1);
-            //    var moIc_factory_details = ObjectMapper.Map<List<ic_factory_details>, List<mo_ic_factory_details>>(ic_factory_details);
-            //    moIc_factory_details.ForEach(s => s.id = help.NextId());
-            //    await _ic_factory_details.InsertMany(moIc_factory_details);
-            //}
+            //工厂物料明细表
+            var ic_factory_details = _mysql_ic_factory_details.GetListAsync().Result;
+            if (ic_factory_details.Count > 0)
+            {
+                //先清空表数据
+                await _ic_factory_details.Delete(p => p.mysql_id != -1);
+                var moIc_factory_details = ObjectMapper.Map<List<ic_factory_details>, List<mo_ic_factory_details>>(ic_factory_details);
+                moIc_factory_details.ForEach(s => s.id = help.NextId());
+                await _ic_factory_details.InsertMany(moIc_factory_details);
+            }
 
             //同步物料数据
             var icItems = _mysql_ic_item.GetListAsync().Result;

+ 1 - 1
MicroServices/Business/Business.Host/BusinessHostModule.cs

@@ -113,7 +113,7 @@ namespace Business
                 q.AddTrigger(opts => opts
                     .ForJob(jobKey)
                     .WithIdentity("SyncDataJob-trigger")
-                    .WithCronSchedule("0 29 1 * * ?")
+                    .WithCronSchedule("0 38 10 * * ?")
                     .WithDescription("定时同步MySQL基础数据到MongoDB"));
 
                 var NLogJobKey = new JobKey("NLogJob");

+ 1 - 0
MicroServices/Business/Bussiness.Model/MES/IC/ItemMaster.cs

@@ -72,6 +72,7 @@ namespace Business.Model.MES.IC
         public string? DefaultShelf { get; set; }
         public decimal? MaxOrd { get; set; }
         public decimal? MinOrd { get; set; }
+        public decimal MFGMTTR { get; set; }
         /// <summary>
         /// 是否有效:1-有效;0-无效
         /// </summary>

+ 9 - 0
MicroServices/Business/Bussiness.Model/SRM/srm_po_list.cs

@@ -77,6 +77,15 @@ namespace Business.Model.SRM
         [Required]
         [Comment("物料id")]
         public long? icitem_id { get; set; }
+
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        [StringLength(100)]
+        [Comment("物料编码")]
+        public string? ItemNum { get; set; }
+
         /// <summary>
         /// 物料名称
         /// </summary>

+ 8 - 0
MicroServices/Business/Bussiness.MongoModel/SRM/mo_srm_po_list.cs

@@ -79,6 +79,14 @@ namespace Business.MongoModel.SRM
         [Required]
         [Comment("物料id")]
         public long? icitem_id { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        [StringLength(100)]
+        [Comment("物料编码")]
+        public string? ItemNum { get; set; }
+
         /// <summary>
         /// 物料名称
         /// </summary>