Exemplo n.º 1
0
 public M_Article GetArticleById(int id, decimal transitionFactor)
 {
     if (!_cache.TryGetValue(key: id, value: out M_Article obj))
     {
         using (var ctx = MasterDBContext.GetContext(connectionString: _connectionString))
         {
             obj = ctx.Articles.Include(navigationPropertyPath: x => x.ArticleType)
                   .Include(navigationPropertyPath: x => x.Unit)
                   .Include(navigationPropertyPath: x => x.Operations)
                   .ThenInclude(navigationPropertyPath: x => x.ResourceSkill)
                   .ThenInclude(x => x.ResourceSetups)
                   .ThenInclude(x => x.ResourceTool)
                   .Include(navigationPropertyPath: x => x.Operations)
                   .ThenInclude(navigationPropertyPath: x => x.ResourceSkill)
                   .ThenInclude(x => x.ResourceSetups)
                   .ThenInclude(x => x.Resource)
                   .Include(navigationPropertyPath: x => x.Operations)
                   .ThenInclude(navigationPropertyPath: x => x.ArticleBoms)
                   .ThenInclude(navigationPropertyPath: x => x.ArticleChild)
                   .ThenInclude(x => x.ArticleType)
                   .Include(navigationPropertyPath: x => x.ArticleBoms)
                   .ThenInclude(navigationPropertyPath: x => x.ArticleChild)
                   .ThenInclude(x => x.ArticleType)
                   .Single(predicate: (x => x.Id == id));
             _cache.Add(key: id, value: obj);
             ctx.Dispose();
         }
     }
     // TODO: Update Transition Times more Granular.
     UpdateTransitionTime(article: obj, factor: transitionFactor);
     return(obj);
 }
Exemplo n.º 2
0
        private static void ConsolidateMachineWorkload(MasterDBContext context, int simulationId,
                                                       SimulationType simType)
        {
            var kpis = context.Kpis.Where(x => x.SimulationConfigurationId == simulationId &&
                                          x.SimulationType == simType &&
                                          x.KpiType == KpiType.MachineUtilization &&
                                          x.IsKpi && x.IsFinal).ToList();
            var machines = kpis.Select(x => x.Name).Distinct();
            var summary  = (from machine in machines
                            let machineValues = kpis.Where(x => x.Name == machine).ToList()
                                                select new Kpi()
            {
                Name = machine,
                Value = Math.Round(machineValues.Sum(x => x.Value) / machineValues.Count, 2),
                ValueMin = 0,
                ValueMax = 0,
                IsKpi = true,
                KpiType = KpiType.MachineUtilization,
                SimulationConfigurationId = simulationId,
                SimulationType = simType,
                SimulationNumber = 0,
                IsFinal = true
            }).ToList();

            context.Kpis.AddRange(summary);
            context.SaveChanges();
        }
Exemplo n.º 3
0
        private static void ExtractStockExchanges(MasterDBContext inMemmoryContext, ProductionDomainContext productionDomainContext)
        {
            var se = inMemmoryContext.StockExchanges.AsNoTracking().ToList().Select(x => { x.Id = 0; return(x); }).ToList();

            productionDomainContext.StockExchanges.AddRange(se);
            productionDomainContext.SaveChanges();
        }
Exemplo n.º 4
0
        private static void ConsolidateTimeliness(MasterDBContext context, int simulationId, SimulationType simType)
        {
            var kpis = context.Kpis.Where(x => x.SimulationConfigurationId == simulationId &&
                                          x.SimulationType == simType &&
                                          x.KpiType == KpiType.Timeliness &&
                                          x.IsKpi && x.IsFinal).ToList();
            var articles = kpis.Select(x => x.Name).Distinct();
            var summary  = (from article in articles
                            let articleValues = kpis.Where(x => x.Name == article).ToList()
                                                select new Kpi()
            {
                Name = article,
                Value = Math.Round(articleValues.Sum(x => x.Value) / articleValues.Count, 2),
                ValueMin = Math.Round(articleValues.Sum(x => x.Value) / articleValues.Count, 2),
                ValueMax = Math.Round(articleValues.Sum(x => x.Value) / articleValues.Count, 2),
                IsKpi = true,
                KpiType = KpiType.Timeliness,
                SimulationConfigurationId = simulationId,
                SimulationType = simType,
                SimulationNumber = 0,
                IsFinal = true,
            }).ToList();

            context.Kpis.AddRange(summary);
            context.SaveChanges();
        }
Exemplo n.º 5
0
        private static void ExtractWorkSchedules(MasterDBContext inMemmoryContext, ProductionDomainContext productionDomainContext)
        {
            var sw = inMemmoryContext.SimulationWorkschedules.AsNoTracking().ToList().Select(x => { x.Id = 0; return(x); }).ToList();

            productionDomainContext.SimulationWorkschedules.AddRange(sw);
            productionDomainContext.SaveChanges();
        }
        /// <summary>
        /// 获取context
        /// </summary>
        /// <returns></returns>
        internal MasterDBContext GetDBContext()
        {
            try
            {
                var context = new MasterDBContext();

                if (!context.Database.Exists())
                {
                    context.Database.Create();

                    var dbInitializer = new MigrateDatabaseToLatestVersion <MasterDBContext, Migrations.Configuration>(true);
                    dbInitializer.InitializeDatabase(context);
                }

                if (!context.Database.CompatibleWithModel(false))
                {
                    var dbInitializer = new MigrateDatabaseToLatestVersion <MasterDBContext, Migrations.Configuration>(true);
                    dbInitializer.InitializeDatabase(context);
                }

                return(context);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Exemplo n.º 7
0
        public static void Init(List <Dictionary <long, Node> > nodesPerLevel, MasterDBContext context)
        {
            List <List <M_Article> > articles = new List <List <M_Article> >();
            var currentList = new List <M_Article>();

            articles.Add(currentList);
            var counter = 0;

            foreach (var article in nodesPerLevel.SelectMany(articleSet => articleSet.Values))
            {
                currentList.Add(article.Article);
                counter++;
                if (counter == Int32.MaxValue)
                {
                    currentList = new List <M_Article>();
                    articles.Add(currentList);
                    counter = 0;
                }
            }

            foreach (var articleSet in articles)
            {
                context.Articles.AddRange(entities: articleSet);
                context.SaveChanges();
            }
        }
Exemplo n.º 8
0
        internal M_Operation[] Init(MasterDBContext context)
        {
            var operations = new M_Operation[] {
                BODENPLATTE_BOHREN,
                BODENPLATTE_ZUSAMMENBAUEN,
                ABLAGE_ZUSAMMENBAUEN,
                DECKPLATTE_BOHREN,
                SEITENWAND_BOHREN,
                RÜCKWAND_ZUSAMMENBAUEN,
                SCHRANKTÜR_BOHREN,
                SCHRANKTÜR_ZUSAMMENBAUEN,

                RAHMEN_ZUSAMMENBAUEN,
                RÜCKWAND_MONTIEREN,
                REGAL_DÜBEL_ANBRINGEN,
                REGAL_ABLAGEN_EINBAUEN,
                SCHRANK_KLEIDERSTANGENHALTERUNGEN_ANBRINGEN,
                SCHRANK_KLEIDERSTANGE_EINBAUEN,
                SCHRANKTÜR_BEFESTIGEN
            };

            context.Operations.AddRange(entities: operations);
            context.SaveChanges();
            return(operations);
        }
Exemplo n.º 9
0
        public static void DbInitialize(MasterDBContext context, ModelSize resourceModelSize, ModelSize setupModelSize, ModelSize operatorsModelSize, int numberOfWorkersForProcessing, bool secondResource, bool distributeSetupsExponentially = false)
        {
            context.Database.EnsureCreated();

            // Look for any Entrys.
            if (context.Articles.Any())
            {
                return;   // DB has been seeded
            }
            var resourceCapabilities = MasterTableResourceCapability(context, resourceModelSize, setupModelSize, operatorsModelSize, numberOfWorkersForProcessing, secondResource);

            // Article Definitions
            var units = new MasterTableUnit();

            units.Init(context);
            var articleTypes = new MasterTableArticleType();

            articleTypes.Init(context);

            // requires Units and Article Types
            var articleTable = new MasterTableArticle(articleTypes, units);
            var articles     = articleTable.Init(context);

            MasterTableStock.Init(context, articles);

            var operations = new MasterTableOperation(articleTable, resourceCapabilities, distributeSetupsExponentially);

            operations.Init(context);

            var boms = new MasterTableBom();

            boms.Init(context, articleTable, operations);

            var businessPartner = new MasterTableBusinessPartner();

            businessPartner.Init(context);

            context.SaveChanges();

            var articleToBusinessPartner = new MasterTableArticleToBusinessPartner();

            articleToBusinessPartner.Init(context, businessPartner, articleTable);

            var updateArticleLotSize = context.Articles
                                       .Include(x => x.ArticleType)
                                       .Include(x => x.ArticleToBusinessPartners)
                                       .ToList();

            // TODO noch gemogelt LotSize != PackSize
            foreach (var article in updateArticleLotSize)
            {
                if (article.ToPurchase)
                {
                    article.LotSize = article.ArticleToBusinessPartners.First().PackSize;
                }
            }
            DbUtils.InsertOrUpdateRange(updateArticleLotSize, context.Articles, context);
            context.SaveChanges();
        }
 internal M_ResourceCapability[] CreateToolingCapabilities(MasterDBContext context
                                                           , int numberOfSawTools
                                                           , int numberOfDrillingTools
                                                           , int numberOfAssemblingTools)
 {
     CreateToolingCapabilities(context, CUTTING, numberOfSawTools);
     CreateToolingCapabilities(context, DRILLING, numberOfDrillingTools);
     CreateToolingCapabilities(context, ASSEMBLING, numberOfAssemblingTools);
     return(Capabilities.ToArray());
 }
Exemplo n.º 11
0
        internal M_BusinessPartner[] Init(MasterDBContext context)
        {
            var businessPartner = new[]
            {
                DEBITOR_TOYS_R_US,
                KREDITOR_MATERIAL_WHOLSALE
            };

            context.BusinessPartners.AddRange(businessPartner);
            context.SaveChanges();
            return(businessPartner);
        }
Exemplo n.º 12
0
        public static Task ConsolidateRuns(MasterDBContext context, int simulationId)
        {
            var task = Task.Run(() =>
            {
                ConsolidateMachineWorkload(context, simulationId, SimulationType.Decentral);
                ConsolidateLeadTime(context, simulationId, SimulationType.Decentral);
                ConsolidateTimeliness(context, simulationId, SimulationType.Decentral);
                ConsolidateLayTime(context, simulationId, SimulationType.Decentral);
            });

            return(task);
        }
Exemplo n.º 13
0
        public void CheckOrganizationDegreeFromResults()
        {
            var simNumber      = 9;
            var dbContext      = MasterDBContext.GetContext(testCtxString);
            var dbResultCtx    = ResultContext.GetContext(testResultCtxString);
            var dbGeneratorCtx = DataGeneratorContext.GetContext(testGeneratorCtxString);

            var transitionMatrixGeneratorVerifier = new TransitionMatrixGeneratorVerifier();

            transitionMatrixGeneratorVerifier.VerifySimulatedData(dbContext, dbGeneratorCtx, dbResultCtx, simNumber);

            Assert.True(true);
        }
        internal M_ResourceCapability[] InitBasicCapabilities(MasterDBContext context)
        {
            Capabilities = new List <M_ResourceCapability>
            {
                CUTTING,
                DRILLING,
                ASSEMBLING,
            };

            context.ResourceCapabilities.AddRange(Capabilities);
            context.SaveChanges();
            return(Capabilities.ToArray());
        }
        internal M_ResourceSkill[] Init(MasterDBContext context)
        {
            var resourceSkills = new M_ResourceSkill[]
            {
                CUTTING,
                DRILLING,
                ASSEMBLING,
            };

            context.ResourceSkills.AddRange(resourceSkills);
            context.SaveChanges();
            return(resourceSkills);
        }
        internal M_Operation[] Init(MasterDBContext context)
        {
            var operations = new M_Operation[] {
                DUMP_TRUCK_WEDDING,
                GLUE_TRUCK_BED,
                RACE_TRUCK_WEDDING,
                GLUE_RACE_WING,

                DUMP_TRUCK_ASSEMBLE_LAMPS,
                DUMP_TRUCK_MOUNT_ENGINE,

                RACE_TRUCK_ASSEMBLE_LAMPS,
                RACE_TRUCK_MOUNT_ENGINE_EXTENSION,
                RACE_TRUCK_MOUNT_ENGINE,

                MOUNT_AXIS,
                SCREW_WHEELS,
                GLUE_SEMITRAILER,

                GLUE_SIDEWALLS,
                MOUNT_HATCHBACK,

                RACE_WING_CUT,
                RACE_WING_DRILL,

                RACE_EXTENSION_CUT,
                RACE_EXTENSION_DRILL,

                SIDEWALL_LONG_CUT,
                SIDEWALL_LONG_DRILL,

                SIDEWALL_SHORT_CUT,
                SIDEWALL_SHORT_DRILL,

                BASEPLATE_TRUCK_BED_CUT,
                BASEPLATE_TRUCK_BED_DRILL,

                ENGINE_BLOCK_CUT,
                ENGINE_BLOCK_DRILL,

                CABIN_CUT,
                CABIN_DRILL,

                BASE_PLATE_CUT,
                BASE_PLATE_DRILL
            };

            context.Operations.AddRange(entities: operations);
            context.SaveChanges();
            return(operations);
        }
        internal M_ArticleType[] Init(MasterDBContext context)
        {
            var articleTypes = new M_ArticleType[]
            {
                ASSEMBLY,
                MATERIAL,
                CONSUMABLE,
                PRODUCT
            };

            context.ArticleTypes.AddRange(entities: articleTypes);
            context.SaveChanges();
            return(articleTypes);
        }
Exemplo n.º 18
0
        private static void ExtractKpis(MasterDBContext inMemmoryContext, ProductionDomainContext productionDomainContext)
        {
            //List<Kpi> kpis = new List<Kpi>();
            //inMemmoryContext.Kpis.AsNoTracking().ToList();
            // foreach (var item in inMemmoryContext.Kpis.ToList())
            // {
            //     kpis.Add(item.CopyDbPropertiesWithoutId());
            // }
            var kpis = inMemmoryContext.Kpis.AsNoTracking().ToList().Select(x => { x.Id = 0; return(x); }).ToList();


            productionDomainContext.Kpis.AddRange(kpis);
            productionDomainContext.SaveChanges();
        }
Exemplo n.º 19
0
        public static MasterTableResourceCapability Initialize(MasterDBContext context, List <ResourceProperty> resourceProperties)
        {
            var resourceCapabilities = new MasterTableResourceCapability();

            resourceCapabilities.CreateCapabilities(context, resourceProperties);

            var resources = new MasterTableResource(resourceCapabilities);

            resources.CreateModel(resourceProperties);
            resources.CreateResourceTools(resourceProperties);

            resources.SaveToDB(context);
            return(resourceCapabilities);
        }
Exemplo n.º 20
0
        internal M_Resource[] Init(MasterDBContext context)
        {
            var resources = new M_Resource[] {
                SAW_1,
                SAW_2,
                DRILL_1,
                ASSEMBLY_1,
                ASSEMBLY_2
            };

            context.Resources.AddRange(entities: resources);
            context.SaveChanges();
            return(resources);
        }
Exemplo n.º 21
0
        internal M_Unit[] Init(MasterDBContext context)
        {
            // Units
            var units = new M_Unit[]
            {
                KILO,
                LITER,
                PIECES
            };

            context.Units.AddRange(entities: units);
            context.SaveChanges();
            return(units);
        }
Exemplo n.º 22
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app
                              , IWebHostEnvironment env
                              , HangfireDBContext hangfireContext
                              , MasterDBContext context
                              , ResultContext contextResults
                              , ProductionDomainContext productionDomainContext)
        {
            MasterDbInitializerTable.DbInitialize(context: context);
            ResultDBInitializerBasic.DbInitialize(context: contextResults);

            #region Hangfire

            HangfireDBInitializer.DbInitialize(context: hangfireContext);
            GlobalConfiguration.Configuration
            .UseFilter(filter: new AutomaticRetryAttribute {
                Attempts = 0
            })
            .UseSqlServerStorage(nameOrConnectionString: Configuration.GetConnectionString(name: "Hangfire"))
            .UseConsole();
            app.UseHangfireDashboard();

            #endregion

            var options = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >();
            app.UseRequestLocalization(options: options.Value);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler(errorHandlingPath: "/Home/Error");
            }

            app.UseCors("CorsPolicy");
            app.UseFileServer();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseEndpoints(router => { router.MapHub <MessageHub>("/MessageHub"); });

            app.UseMvc(configureRoutes: routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
Exemplo n.º 23
0
        public void ResetResultsDB(string connectionString, string resultConnectionString)

        {
            MasterDBContext masterCtx = MasterDBContext.GetContext(connectionString);

            masterCtx.Database.EnsureDeleted();
            masterCtx.Database.EnsureCreated();
            MasterDBInitializerTruck.DbInitialize(masterCtx, ModelSize.Medium, ModelSize.Small, ModelSize.Small, 3, true);

            ResultContext results = ResultContext.GetContext(resultCon: resultConnectionString);

            results.Database.EnsureDeleted();
            results.Database.EnsureCreated();
            ResultDBInitializerBasic.DbInitialize(results);
        }
        internal M_ResourceTool[] Init(MasterDBContext context)
        {
            var resourceTools = new M_ResourceTool[]
            {
                SAW_BLADE_BIG,
                SAW_BLADE_SMALL,
                DRILL_HEAD_M6,
                DRILL_HEAD_M4,
                ASSEMBLY_SCREWDRIVER
            };

            context.ResourceTools.AddRange(entities: resourceTools);
            context.SaveChanges();
            return(resourceTools);
        }
        public M_ResourceSetup[] Init(MasterDBContext context)
        {
            var resourceSetups = new M_ResourceSetup[] {
                SAW_1_BLADE_BIG,
                SAW_2_BLADE_BIG,
                SAW_2_BLADE_SMALL,
                DRILL_1_M4,
                DRILL_1_M6,
                ASSEMBLY_1_SCREWDRIVER,
                ASSEMBLY_2_SCREWDRIVER
            };

            context.ResourceSetups.AddRange(entities: resourceSetups);
            context.SaveChanges();
            return(resourceSetups);
        }
Exemplo n.º 26
0
        public static void Init(List <Dictionary <long, Node> > nodesPerLevel, MasterDBContext context)
        {
            List <List <List <M_ArticleBom> > > boms = new List <List <List <M_ArticleBom> > >();
            var currentList1 = new List <List <M_ArticleBom> >();

            boms.Add(currentList1);
            var currentList2 = new List <M_ArticleBom>();

            currentList1.Add(currentList2);
            var counter1 = 0;
            var counter2 = 0;

            foreach (var article in nodesPerLevel.SelectMany(articleSet => articleSet.Values))
            {
                foreach (var operation in article.Operations)
                {
                    foreach (var bom in operation.Bom)
                    {
                        currentList2.Add(bom);
                        counter2++;
                        if (counter2 == Int32.MaxValue)
                        {
                            currentList2 = new List <M_ArticleBom>();
                            currentList1.Add(currentList2);
                            counter2 = 0;
                            counter1++;
                            if (counter1 == Int32.MaxValue)
                            {
                                currentList1 = new List <List <M_ArticleBom> >();
                                boms.Add(currentList1);
                                counter1 = 0;
                            }
                        }
                    }
                }
            }

            foreach (var bomSet1 in boms)
            {
                foreach (var bomSet2 in bomSet1)
                {
                    context.ArticleBoms.AddRange(bomSet2);
                    context.SaveChanges();
                }
            }
        }
Exemplo n.º 27
0
        public static void ExtractSimulationOrders(MasterDBContext inMemmoryContext, ProductionDomainContext productionDomainContext,
                                                   int simId, int simNo, SimulationType simType)
        {
            List <SimulationOrder> so = new List <SimulationOrder>();

            foreach (var item in inMemmoryContext.Orders.ToList())
            {
                SimulationOrder set = new SimulationOrder();
                item.CopyPropertiesTo <IOrder>(set);
                set.SimulationConfigurationId = simId;
                set.SimulationNumber          = simNo;
                set.SimulationType            = simType;
                set.OriginId = item.Id;
                so.Add(set);
            }
            productionDomainContext.SimulationOrders.AddRange(so);
            productionDomainContext.SaveChanges();
        }
Exemplo n.º 28
0
        public static void InsertOrUpdateRange <TEntity>(IEnumerable <TEntity> entities,
                                                         DbSet <TEntity> dbSet, MasterDBContext masterDBContext) where TEntity : BaseEntity
        {
            if (entities.Any() == false)
            {
                throw new SystemException("Collection to persist is empty.");
            }

            // dbSet.AddRange(entities);
            foreach (var entity in entities)
            {
                // e.g. if it is a PrBom which is toPurchase
                if (entity != null)
                {
                    InsertOrUpdate(entity, dbSet, masterDBContext);
                }
            }
        }
Exemplo n.º 29
0
 public static void Init(MasterDBContext context, M_Article[] articles)
 {
     // create Stock Entrys for each Article
     foreach (var article in articles)
     {
         var stock = new M_Stock
         {
             ArticleForeignKey = article.Id,
             Name       = "Stock: " + article.Name,
             Min        = (article.ToPurchase) ? 1000 : 0,
             Max        = (article.ToPurchase) ? 2000 : 0,
             Current    = (article.ToPurchase) ? 1000 : 0,
             StartValue = (article.ToPurchase) ? 1000 : 0,
         };
         context.Stocks.Add(entity: stock);
         context.SaveChanges();
     }
 }
Exemplo n.º 30
0
        private Installation MigrateMaster(InstallConfig install)
        {
            var result = new Installation {
                Success = false, Message = string.Empty
            };

            if (install.TenantName == TenantNames.Master)
            {
                using (var scope = _serviceScopeFactory.CreateScope())
                {
                    var sql = scope.ServiceProvider.GetRequiredService <ISqlRepository>();

                    var installation = IsInstalled();
                    try
                    {
                        UpdateConnectionString(install.ConnectionString);
                        UpdateDatabaseType(install.DatabaseType);

                        using (var masterDbContext = new MasterDBContext(new DbContextOptions <MasterDBContext>(), null, _config))
                        {
                            if (installation.Success && (install.DatabaseType == Constants.DefaultDBType))
                            {
                                UpgradeSqlServer(sql, install.ConnectionString, install.DatabaseType, true);
                            }
                            // Push latest model into database
                            masterDbContext.Database.Migrate();
                            result.Success = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        result.Message = ex.Message;
                        _filelogger.LogError(Utilities.LogMessage(this, result.Message));
                    }
                }
            }
            else
            {
                result.Success = true;
            }

            return(result);
        }