コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }