internal void CreateJobsFromArticle(FArticle fArticle) { var lastDue = fArticle.DueTime; var sumOperationDurations = fArticle.RemainingDuration; var numberOfOperations = fArticle.Article.Operations.Count(); var operationCounter = 0; foreach (var operation in fArticle.Article.Operations.OrderByDescending(keySelector: x => x.HierarchyNumber)) { operationCounter++; var fJob = operation.ToOperationItem(dueTime: lastDue , customerDue: fArticle.CustomerDue , productionAgent: Agent.Context.Self , firstOperation: (operationCounter == numberOfOperations) , currentTime: Agent.CurrentTime , remainingWork: sumOperationDurations); Agent.DebugMessage( msg: $"Origin {fArticle.Article.Name} CustomerDue: {fArticle.CustomerDue} remainingDuration: {fArticle.RemainingDuration} Created operation: {operation.Name} | Prio {fJob.Priority.Invoke(Agent.CurrentTime)} | Remaining Work {sumOperationDurations} " + $"| BackwardStart {fJob.BackwardStart} | BackwardEnd:{fJob.BackwardEnd} Key: {fJob.Key} ArticleKey: {fArticle.Key}" + $"Precondition test: {operation.Name} | {fJob.StartConditions.PreCondition} ? {operationCounter} == {numberOfOperations} " + $"| Key: {fJob.Key} ArticleKey: {fArticle.Key}", CustomLogger.SCHEDULING, LogLevel.Warn); sumOperationDurations += operation.Duration; lastDue = fJob.BackwardStart - operation.AverageTransitionDuration; OperationManager.AddOperation(fJob); // send update to collector var pub = new FCreateSimulationJob(job: fJob , jobType: JobType.OPERATION , customerOrderId: fArticle.CustomerOrderId.ToString() , isHeadDemand: fArticle.IsHeadDemand , fArticleKey: fArticle.Key , fArticleName: fArticle.Article.Name , productionAgent: this.Agent.Name , articleType: fArticle.Article.ArticleType.Name , start: fJob.Start , end: fJob.End); Agent.Context.System.EventStream.Publish(@event: pub); } _articleToProduce = fArticle; SetForwardScheduling(); }
private void CreateJob(FCreateSimulationJob simJob) { //var fOperation = ((FOperation)simJob.Job); var simulationJob = new Job { JobId = simJob.Key, JobName = simJob.OperationName, JobType = simJob.JobType, DueTime = (int)simJob.DueTime, SimulationConfigurationId = Collector.simulationId.Value, SimulationNumber = Collector.simulationNumber.Value, SimulationType = Collector.simulationKind.Value, CreatedForOrderId = string.Empty, Article = simJob.ArticleName, OrderId = "[" + simJob.CustomerOrderId + "]", HierarchyNumber = simJob.OperationHierarchyNumber, //Remember this is now a fArticleKey (Guid) ProductionOrderId = simJob.ProductionAgent, Parent = simJob.IsHeadDemand.ToString(), FArticleKey = simJob.fArticleKey.ToString(), Time = (int)(Collector.Time), ExpectedDuration = simJob.OperationDuration, ArticleType = simJob.ArticleType, CapabilityName = simJob.RequiredCapabilityName, Start = simJob.Start, End = simJob.End, }; var edit = _updatedSimulationJob.FirstOrDefault(predicate: x => x.Job.Key.Equals(simJob.Key)); if (edit != null) { simulationJob.Start = (int)edit.Start; simulationJob.End = (int)(edit.Start + edit.Duration); simulationJob.CapabilityProvider = edit.CapabilityProvider; _updatedSimulationJob.Remove(item: edit); } simulationJobs.Add(item: simulationJob); }
public static FCreateSimulationJob ToSimulationJob(this GptblProductionorderOperationActivity activity, long start, long duration, string requiredCapabilityName) { var simulationJob = new FCreateSimulationJob( key: activity.GetKey , dueTime: activity.InfoDateLatestEndMaterial.Value.ToSimulationTime() , articleName: activity.Productionorder.MaterialId , operationName: activity.Name , operationHierarchyNumber: Int32.Parse(activity.OperationId) , operationDuration: duration , requiredCapabilityName: requiredCapabilityName , jobType: activity.ActivityId.Equals(2) ? JobType.SETUP : JobType.OPERATION , customerOrderId: string.Empty , isHeadDemand: false , fArticleKey: Guid.Empty , fArticleName: string.Empty , productionAgent: string.Empty , articleType: string.Empty , start: start , end: start + duration ); return(simulationJob); }
public static FCreateSimulationJob ToSimulationJob(this FOperation fOperation, string jobType, FArticle fArticle, string productionAgent) { var simulationJob = new FCreateSimulationJob( key: fOperation.Key.ToString() , dueTime: fOperation.DueTime , articleName: fOperation.Operation.Article.Name , operationName: fOperation.Operation.Name , operationHierarchyNumber: fOperation.Operation.HierarchyNumber , operationDuration: fOperation.Operation.Duration , requiredCapabilityName: fOperation.Operation.ResourceCapability.Name , jobType: jobType.ToString() , customerOrderId: fArticle.CustomerOrderId.ToString() , isHeadDemand: fArticle.IsHeadDemand , fArticleKey: fArticle.Key , fArticleName: fArticle.Article.Name , productionAgent: productionAgent , articleType: fArticle.Article.ArticleType.Name , start: fOperation.Start , end: fOperation.End ); return(simulationJob); }