Przeglądaj źródła

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

zhengly 2 lat temu
rodzic
commit
630b0beaac

+ 80 - 51
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -255,17 +255,17 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 工单工序表
         /// </summary>
-        private readonly ISqlRepository<WorkOrdRouting> _workOrdRouting;
+        private ISqlRepository<WorkOrdRouting> _workOrdRouting;
 
         /// <summary>
         /// 工单主表
         /// </summary>
-        private readonly ISqlRepository<WorkOrdMaster> _workOrdMaster;
+        private ISqlRepository<WorkOrdMaster> _workOrdMaster;
 
         /// <summary>
         /// 工单物料明细
         /// </summary>
-        private readonly ISqlRepository<WorkOrdDetail> _workOrdDetail;
+        private ISqlRepository<WorkOrdDetail> _workOrdDetail;
 
         private readonly ISqlRepository<rf_serialnumber> _rf_serialnumber;
         private readonly ISqlRepository<LocationDetail> _locationDetail;
@@ -325,6 +325,36 @@ namespace Business.ResourceExamineManagement
         /// 产能检查
         /// </summary>
         private readonly ProductExamineAppService _productExamineAppService;
+
+        /// <summary>
+        /// 生产线明细表
+        /// </summary>
+        public List<ProdLineDetail> prodLines = new List<ProdLineDetail>();
+
+        /// <summary>
+        /// 标准工艺路径表
+        /// </summary>
+        public List<RoutingOpDetail> routingOps = new List<RoutingOpDetail>();
+
+        /// <summary>
+        /// 排产记录表
+        /// </summary>
+        public List<PeriodSequenceDet> periodSequences = new List<PeriodSequenceDet>();
+
+        /// <summary>
+        /// 工作日历
+        /// </summary>
+        public List<ShopCalendarWorkCtr> calendarWorks = new List<ShopCalendarWorkCtr>();
+
+        /// <summary>
+        /// 休息时间段
+        /// </summary>
+        public List<QualityLineWorkDetail> qualityLineWorks = new List<QualityLineWorkDetail>();
+
+        /// <summary>
+        /// 节假日
+        /// </summary>
+        public List<HolidayMaster> holidays = new List<HolidayMaster>();
         #endregion
 
         #region 构造函数
@@ -1161,13 +1191,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 +1247,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 +1302,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 +1373,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 +1409,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 +1465,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 +1520,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 +1591,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;
@@ -1916,16 +1954,16 @@ namespace Business.ResourceExamineManagement
             //产品物料编码
             List<string> itemnums = pretreatments.Where(p => p.level == 1).Select(p => p.item_number).Distinct().ToList();
             //产线明细
-            List<ProdLineDetail> prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
-            //标工序
-            List<RoutingOpDetail> routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
+            prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
+            //标工序
+            routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
             List<string> lines = prodLines.Select(p=>p.Line).Distinct().ToList();
             //工作日历
-            List<ShopCalendarWorkCtr> calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
+            calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
             //休息日
-            List<QualityLineWorkDetail> qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
+            qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
             //节假日
-            List<HolidayMaster> holidays = _holidayMaster.Select(p => p.Dated >= DateTime.Now.Date);
+            holidays = _holidayMaster.Select(p => p.Dated >= DateTime.Now.Date);
 
             //主工单
             List<mo_mes_morder> mo_Mes_Morders = _mes_morder.GetManyByCondition(x => boms.Select(p => p.bom_number).Contains(x.bom_number) && (x.morder_state != MorderEnum.Accomplish_state || x.morder_state != MorderEnum.Close_state
@@ -2131,19 +2169,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,14 +2189,15 @@ 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,
                                 UpdateTmie = DateTime.Now,
                                 CreateUser = "1001",
-                                UpdateUser = "1001"
+                                UpdateUser = "1001",
+                                UM = a.UM
                             });
                             i++;
                         }
@@ -2176,42 +2206,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:
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
@@ -2221,7 +2243,7 @@ namespace Business.ResourceExamineManagement
                     {
                         nbrDetailList.ForEach(b =>
                         {
-                            if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom)
+                            if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom && a.QtyOnHand - dictItemQty[a.ItemNum] > 0)
                             {
                                 a.QtyOnHand = a.QtyOnHand - dictItemQty[a.ItemNum];
                             }
@@ -2390,6 +2412,7 @@ namespace Business.ResourceExamineManagement
             List<RoutingOpDetail> allRoutings = _routingOpDetail.Select(p => morders.Select(m => m.product_code).Contains(p.RoutingCode));
             //获取标准BOM数据
             List<ProductStructureMaster> productStructures = GetProductStructure(morders.Select(p => p.product_code).Distinct().ToList());
+
             //工单主表
             List<WorkOrdMaster> workOrds = new List<WorkOrdMaster>();
             WorkOrdMaster workOrd;
@@ -2412,11 +2435,11 @@ namespace Business.ResourceExamineManagement
                 workOrd.RoutingCode = item.product_code;
                 workOrd.Period = 1;
                 workOrd.Priority = item.urgent;
-                workOrd.Status = "";
+                workOrd.Status = " ";
                 workOrd.IsActive = true;
                 workOrd.IsConfirm = true;
                 workOrds.Add(workOrd);
-
+                
                 //添加工单工艺路线数据
                 var curRoutings = allRoutings.Where(p => p.RoutingCode == item.product_code).ToList();
                 foreach (var dtl in curRoutings)
@@ -2455,7 +2478,6 @@ namespace Business.ResourceExamineManagement
                     workOrdDetails.Add(woDetail);
                 }
             }
-
             _workOrdMaster.Insert(workOrds);
             _workOrdRouting.Insert(workOrdRoutings);
             _workOrdDetail.Insert(workOrdDetails);
@@ -2528,6 +2550,13 @@ namespace Business.ResourceExamineManagement
             List<string> itemNums = sentrys.Select(p=>p.item_number).Distinct().ToList();
             DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
             List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
+
+            //资源检查添加产线工序等数据
+            _productExamineAppService.prodLines = prodLines;
+            _productExamineAppService.routingOps = routingOps;
+            _productExamineAppService.calendarWorks = calendarWorks;
+            _productExamineAppService.qualityLineWorks = qualityLineWorks;
+            _productExamineAppService.holidays = holidays;
             _productExamineAppService.periodSequences = periodSequences;
             if (sentrys.Count() == 0)
             {

+ 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>