소스 검색

性能优化

Murphy 2 년 전
부모
커밋
51e4eeab43

+ 141 - 138
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -1788,148 +1788,145 @@ namespace Business.Replenishment
                 weekTime = weekTime.AddDays(7 * k);
                 string kMonth = $"{weekTime.Year}-{weekTime.Month.ToString("00")}";
                 var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
-                var ropList = planList.Select(t => t.number).Distinct().ToList();
+                var ropList = planList.Where(t=>shipPlanList.Select(s => s.SAPItemNumber).ToList().Contains(t.number)).Select(t => t.number).Distinct().ToList();
                 foreach (var itemSeq in ropList)
                 {
-                    if (shipPlanList.Select(s => s.SAPItemNumber).ToList().Contains(itemSeq))
+                    var monthPlanItem = monthPlan.Find(x => x.ItemNumber == itemSeq);
+                    //瑞奇国科海王
+                    var monthPlanTotal = monthWeekPlan.Where(x => x.number == itemSeq).ToList();
+                    if (monthPlanTotal != null && monthPlanTotal.Count > 0)
                     {
-                        var monthPlanItem = monthPlan.Find(x => x.ItemNumber == itemSeq);
-                        //瑞奇国科海王
-                        var monthPlanTotal = monthWeekPlan.Where(x => x.number == itemSeq).ToList();
-                        if (monthPlanTotal != null && monthPlanTotal.Count > 0)
+                        var item = monthPlanTotal[0];
+                        //瑞奇补货计划!Y5 + 瑞奇补货计划!Z5 + 国科补货计划!Y5 + 国科补货计划!Z5 + 海王补货计划!Y4 + 海王补货计划!Z4
+                        var itemQty = monthPlanTotal.Sum(a => a.montheop1) + monthPlanTotal.Sum(a => a.montheop2);
+                        //每次都是发布12周,每个月4周,不用判断存不存在(退市的可能没有)
+                        int days = 15;
+                        if (item.area != "国内" && item.area != "中国")
                         {
-                            var item = monthPlanTotal[0];
-                            //瑞奇补货计划!Y5 + 瑞奇补货计划!Z5 + 国科补货计划!Y5 + 国科补货计划!Z5 + 海王补货计划!Y4 + 海王补货计划!Z4
-                            var itemQty = monthPlanTotal.Sum(a => a.montheop1) + monthPlanTotal.Sum(a => a.montheop2);
-                            //每次都是发布12周,每个月4周,不用判断存不存在(退市的可能没有)
-                            int days = 15;
-                            if (item.area != "国内" && item.area != "中国")
+                            days = 8;
+                        }
+                        if (itemQty > 0)
+                        {
+                            var bom = bomList.Find(b => b.item_number == itemSeq);
+                            var ic_item = itemList.Find(b => b.number == itemSeq);
+                            mes_morder mes_Morder = new mes_morder();
+                            mes_Morder.GenerateNewId(help.NextId());
+                            mes_Morder.morder_type = MorderEnum.JhMorder;
+                            mes_Morder.work_order_type = MorderEnum.CgMorder;
+                            mes_Morder.morder_state = "";
+                            mes_Morder.morder_no = Guid.NewGuid().ToString();
+                            mes_Morder.fms_number = ic_item.fms_number;
+                            mes_Morder.bom_number = bom.bom_number;
+                            mes_Morder.fmodel = ic_item.model;
+                            mes_Morder.moentry_startup_status = 0;
+                            mes_Morder.tenant_id = input.tenant_id;
+                            mes_Morder.factory_id = input.factory_id;
+                            mes_Morder.company_id = input.company_id;
+                            mes_Morder.org_id = input.org_id;
+                            mes_Morder.product_code = ic_item.number;
+                            mes_Morder.product_name = ic_item.name;
+                            mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
+                            mes_Morder.moentry_prd = null;
+                            mes_Morder.moentry_prdname = null;
+                            mes_Morder.moentry_wrkc = null;
+                            mes_Morder.moentry_wrkcname = null;
+                            mes_Morder.picking_qty = 0;
+                            mes_Morder.unit = ic_item.unit;
+                            mes_Morder.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
+                            mes_Morder.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
+                            //成品半成品取周一为入库时间开始往前推
+                            mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
+                            mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
+                            mes_Morder.remaining_number = 0;
+                            mes_Morder.create_time = DateTime.Now;
+                            mes_Morder.bang_id = bang_id;
+                            //生成工单子表数据
+                            mes_moentry mes_Moentry = new mes_moentry();
+                            mes_Moentry.GenerateNewId(help.NextId());
+                            mes_Moentry.moentry_moid = mes_Morder.Id;
+                            mes_Moentry.moentry_mono = mes_Morder.morder_no;
+                            mes_Moentry.unit = ic_item.unit;
+                            mes_Moentry.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
+                            mes_Moentry.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
+                            mes_Moentry.remaining_number = 0;
+                            mes_Moentry.tenant_id = input.tenant_id;
+                            mes_Moentry.factory_id = input.factory_id;
+                            mes_Moentry.company_id = input.company_id;
+                            mes_Moentry.org_id = input.org_id;
+                            mes_Moentry.create_time = DateTime.Now;
+                            mes_Moentry.bang_id = bang_id;
+
+                            ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
+                            weekItem.Priority = 1;
+                            weekItem.Area = item.area;
+                            weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
+                            weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
+                            weekItem.OrderNO = Guid.NewGuid().ToString();
+                            weekItem.ProductionOrder = mes_Morder.morder_no;
+                            weekItem.SAPOrderNO = "";
+                            weekItem.OrderType = "量产";
+                            weekItem.ProductionBatch = "";
+                            weekItem.ProductionStatus = "";
+                            weekItem.ProdLine = item.ProdLine;
+                            weekItem.ProdRange = item.ProdRange;
+                            weekItem.Line = monthPlanItem?.WorkshopLine;
+                            weekItem.ItemNumber = item.number;
+                            weekItem.Model = item.model;
+                            weekItem.Languages = item.Languages;
+                            weekItem.Qty = mes_Morder.morder_production_number.Value;
+                            weekItem.ItemStatus = "";
+                            weekItem.PlanKittingDate = DateTime.Now;
+                            weekItem.Year = weekTime.Year;
+                            weekItem.Month = weekTime.Month;
+                            weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
+                            weekItem.PlanMonth = kMonth;
+                            weekItem.tenant_id = input.tenant_id;
+                            weekItem.factory_id = input.factory_id;
+                            weekItem.company_id = input.company_id;
+                            weekItem.org_id = input.org_id;
+                            weekItem.create_time = DateTime.Now;
+                            weekItem.DistributionChannel = item.distributionchannel;
+                            weekItem.IsReplenishmentModel = "N";
+                            if (item.area == "国内" || item.area == "中国")
                             {
-                                days = 8;
+                                weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
+                                weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
                             }
-                            if (itemQty > 0)
+                            else
                             {
-                                var bom = bomList.Find(b => b.item_number == itemSeq);
-                                var ic_item = itemList.Find(b => b.number == itemSeq);
-                                mes_morder mes_Morder = new mes_morder();
-                                mes_Morder.GenerateNewId(help.NextId());
-                                mes_Morder.morder_type = MorderEnum.JhMorder;
-                                mes_Morder.work_order_type = MorderEnum.CgMorder;
-                                mes_Morder.morder_state = "";
-                                mes_Morder.morder_no = Guid.NewGuid().ToString();
-                                mes_Morder.fms_number = ic_item.fms_number;
-                                mes_Morder.bom_number = bom.bom_number;
-                                mes_Morder.fmodel = ic_item.model;
-                                mes_Morder.moentry_startup_status = 0;
-                                mes_Morder.tenant_id = input.tenant_id;
-                                mes_Morder.factory_id = input.factory_id;
-                                mes_Morder.company_id = input.company_id;
-                                mes_Morder.org_id = input.org_id;
-                                mes_Morder.product_code = ic_item.number;
-                                mes_Morder.product_name = ic_item.name;
-                                mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
-                                mes_Morder.moentry_prd = null;
-                                mes_Morder.moentry_prdname = null;
-                                mes_Morder.moentry_wrkc = null;
-                                mes_Morder.moentry_wrkcname = null;
-                                mes_Morder.picking_qty = 0;
-                                mes_Morder.unit = ic_item.unit;
-                                mes_Morder.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
-                                mes_Morder.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
-                                //成品半成品取周一为入库时间开始往前推
-                                mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
-                                mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
-                                mes_Morder.remaining_number = 0;
-                                mes_Morder.create_time = DateTime.Now;
-                                mes_Morder.bang_id = bang_id;
-                                //生成工单子表数据
-                                mes_moentry mes_Moentry = new mes_moentry();
-                                mes_Moentry.GenerateNewId(help.NextId());
-                                mes_Moentry.moentry_moid = mes_Morder.Id;
-                                mes_Moentry.moentry_mono = mes_Morder.morder_no;
-                                mes_Moentry.unit = ic_item.unit;
-                                mes_Moentry.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
-                                mes_Moentry.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
-                                mes_Moentry.remaining_number = 0;
-                                mes_Moentry.tenant_id = input.tenant_id;
-                                mes_Moentry.factory_id = input.factory_id;
-                                mes_Moentry.company_id = input.company_id;
-                                mes_Moentry.org_id = input.org_id;
-                                mes_Moentry.create_time = DateTime.Now;
-                                mes_Moentry.bang_id = bang_id;
-
-                                ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
-                                weekItem.Priority = 1;
-                                weekItem.Area = item.area;
-                                weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
-                                weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
-                                weekItem.OrderNO = Guid.NewGuid().ToString();
-                                weekItem.ProductionOrder = mes_Morder.morder_no;
-                                weekItem.SAPOrderNO = "";
-                                weekItem.OrderType = "量产";
-                                weekItem.ProductionBatch = "";
-                                weekItem.ProductionStatus = "";
-                                weekItem.ProdLine = item.ProdLine;
-                                weekItem.ProdRange = item.ProdRange;
-                                weekItem.Line = monthPlanItem?.WorkshopLine;
-                                weekItem.ItemNumber = item.number;
-                                weekItem.Model = item.model;
-                                weekItem.Languages = item.Languages;
-                                weekItem.Qty = mes_Morder.morder_production_number.Value;
-                                weekItem.ItemStatus = "";
-                                weekItem.PlanKittingDate = DateTime.Now;
-                                weekItem.Year = weekTime.Year;
-                                weekItem.Month = weekTime.Month;
-                                weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
-                                weekItem.PlanMonth = kMonth;
-                                weekItem.tenant_id = input.tenant_id;
-                                weekItem.factory_id = input.factory_id;
-                                weekItem.company_id = input.company_id;
-                                weekItem.org_id = input.org_id;
-                                weekItem.create_time = DateTime.Now;
-                                weekItem.DistributionChannel = item.distributionchannel;
-                                weekItem.IsReplenishmentModel = "N";
-                                if (item.area == "国内" || item.area == "中国")
-                                {
-                                    weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
-                                    weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
-                                }
-                                else
-                                {
-                                    weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
-                                    weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
-                                }
-                                weekItem.AssembleHours = 0;
-                                weekItem.HeatSealHours = 0;
-                                weekItem.PackageHours = 0;
-                                weekItem.TotalHours = 0;
-                                //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
-                                if(!weekProductPlanList.Any(a=>a.ItemNumber==item.number && a.Week== weekItem.Week))
+                                weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
+                                weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
+                            }
+                            weekItem.AssembleHours = 0;
+                            weekItem.HeatSealHours = 0;
+                            weekItem.PackageHours = 0;
+                            weekItem.TotalHours = 0;
+                            //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
+                            if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
+                            {
+                                weekPlan.Add(weekItem);
+                                moList.Add(mes_Morder);
+                                moentryList.Add(mes_Moentry);
+
+                                var planBOM = boms.Find(b => b.item_number == itemSeq);
+                                var pretreament = pretreatments.Where(c => c.sourceid == planBOM.mysql_id).ToList();
+                                var returnlist = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(pretreament);
+                                returnlist = returnlist.OrderBy(s => s.num_order).ToList();
+                                var level1Dto = returnlist[0];
+                                level1Dto.needCount = itemQty.GetValueOrDefault();
+                                CaclMaterialShortage(returnlist);
+                                foreach (var r in returnlist)
                                 {
-                                    weekPlan.Add(weekItem);
-                                    moList.Add(mes_Morder);
-                                    moentryList.Add(mes_Moentry);
-
-                                    var planBOM = boms.Find(b => b.item_number == itemSeq);
-                                    var pretreament = pretreatments.Where(c => c.sourceid == planBOM.mysql_id).ToList();
-                                    var returnlist = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(pretreament);
-                                    returnlist = returnlist.OrderBy(s => s.num_order).ToList();
-                                    var level1Dto = returnlist[0];
-                                    level1Dto.needCount = itemQty.GetValueOrDefault();
-                                    CaclMaterialShortage(returnlist);
-                                    foreach (var r in returnlist)
+                                    if (r.item_number != itemSeq && r.erp_cls == 1 && !string.IsNullOrEmpty(r.bom_number))
                                     {
-                                        if (r.item_number != itemSeq && r.erp_cls == 1 && !string.IsNullOrEmpty(r.bom_number))
+                                        if (subProductItem.ContainsKey(r.item_number))
                                         {
-                                            if (subProductItem.ContainsKey(r.item_number))
-                                            {
-                                                subProductItem[r.item_number] += r.needCount;
-                                            }
-                                            else
-                                            {
-                                                subProductItem.Add(r.item_number, r.needCount);
-                                                subProductItemModel.Add(r.item_number, r);
-                                            }
+                                            subProductItem[r.item_number] += r.needCount;
+                                        }
+                                        else
+                                        {
+                                            subProductItem.Add(r.item_number, r.needCount);
+                                            subProductItemModel.Add(r.item_number, r);
                                         }
                                     }
                                 }
@@ -3743,8 +3740,14 @@ namespace Business.Replenishment
                 await MongoHelper<mo_srm_pr_main>.InsertManyAsync(moSrm_pr_main);
 
                 //采购申请占用详情
-                var srm_pr_occupy=_businessDbContext.srm_po_occupy.Where(x => x.company_id == companyId && x.factory_id == factoryId && srm_pr_main.Select(c => c.Id).Contains(x.polist_id.Value)).ToList();
-                //var srm_pr_occupy = _mysql_srm_po_occupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_pr_main.Select(c => c.Id).Contains(x.polist_id.GetValueOrDefault())).Result;
+                var occupyList = _businessDbContext.srm_po_occupy.Join(_businessDbContext.srm_pr_main.Where(x => x.company_id == companyId && x.factory_id == factoryId && x.state != 0 && itemIds.ToArray().Any(a => a == x.icitem_id.GetValueOrDefault())), p => p.polist_id, pr => pr.Id, (p, pr) => new { p, pr }).ToList();
+                List<srm_po_occupy> srm_pr_occupy = new List<srm_po_occupy>();
+                for (int i = 0; i < occupyList.Count; i++)
+                {
+                    srm_pr_occupy.Add(occupyList[i].p);
+                }
+                //var srm_pr_occupy=_businessDbContext.srm_po_occupy.Where(x => x.company_id == companyId && x.factory_id == factoryId && srm_pr_main.Select(c => c.Id).Contains(x.polist_id.Value)).ToList();
+                //var srm_pr_occupy = _mysql_srm_po_occupy.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_pr_main.Select(c => c.Id).Any(a=>a==x.polist_id.GetValueOrDefault())).Result;
                 if (srm_pr_occupy.Count > 0)
                 {
                     var moSrm_pr_occupy = ObjectMapper.Map<List<srm_po_occupy>, List<mo_srm_po_occupy>>(srm_pr_occupy);
@@ -3761,7 +3764,7 @@ namespace Business.Replenishment
         public async Task ClearSnapShot(long bangid)
         {
             //清除物料库存数据
-            await _ic_item_stock.DeleteAsync(p => p.bang_id == bangid);
+            await MongoHelper<mo_ic_item_stock>.DeleteManyAsync(p => p.bang_id == bangid);
 
             //清除工单占用记录表
             //await _mes_mooccupy.DeleteAsync(p => p.bang_id == bangid);
@@ -3773,16 +3776,16 @@ namespace Business.Replenishment
             //await _mes_moentry.Delete(p => p.bang_id == bangid);
 
             //清除采购订单
-            await _srm_po_main.DeleteAsync(p => p.bang_id == bangid);
+            await MongoHelper<mo_srm_po_main>.DeleteManyAsync(p => p.bang_id == bangid);
 
             //清除采购订单明细
-            await _srm_po_list.DeleteAsync(p => p.bang_id == bangid);
+            await MongoHelper<mo_srm_po_list>.DeleteManyAsync(p => p.bang_id == bangid);
 
             //清除采购订单占用详情
             //await _srm_po_occupy.DeleteAsync(p => p.bang_id == bangid);
 
             //清除PR
-            await _srm_pr_main.DeleteAsync(p => p.bang_id == bangid);
+            await MongoHelper<mo_srm_pr_main>.DeleteManyAsync(p => p.bang_id == bangid);
         }
 
 

+ 4 - 4
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -780,7 +780,7 @@ namespace Business.SystemJobManagement
             }
             _businessDbContext.BulkInsert(ItemsAdd);
             _businessDbContext.BulkInsert(stockAdd);
-            _businessDbContext.ic_item.UpdateRange(ItemsUpd);
+            _businessDbContext.BulkUpdate(ItemsUpd);
         }
 
         public void SyncBom()
@@ -909,7 +909,7 @@ namespace Business.SystemJobManagement
                 }
                 _businessDbContext.BulkInsert(ItemsAdd);
                 _businessDbContext.BulkInsert(childItemsAdd);
-                _businessDbContext.ic_bom_child.UpdateRange(childItemsUpd);
+                _businessDbContext.BulkUpdate(childItemsUpd);
             }
         }
 
@@ -1019,8 +1019,8 @@ namespace Business.SystemJobManagement
                         }
                     }
                 }
-                await _mysql_mes_morder.UpdateManyAsync(updateList);
-                await _mysql_mes_moentry.UpdateManyAsync(updateMoentryList);
+                await _businessDbContext.BulkUpdateAsync(updateList);
+                await _businessDbContext.BulkUpdateAsync(updateMoentryList);
             }
             catch (Exception e)
             {