예제 #1
0
 public IConfirmation GetFirstIfSatisfied(long currentTime, M_ResourceCapability resourceCapability = null)
 {
     var(key, confirmation) = GetFirst();
     if (confirmation != null && ((FBucket)confirmation.Job).HasSatisfiedJob)
     {
         return(confirmation);
     }
     return(null);
 }
예제 #2
0
        private void CreateResourceGroup(int numberOfResources, M_ResourceCapability capability)
        {
            List <M_Resource> resourceGroup = new List <M_Resource>();

            for (int i = 1; i <= numberOfResources; i++)
            {
                var resource = CreateNewResource(capability.Name, true, false, i);
                resourceGroup.Add(resource);
            }
            CapabilityToResourceDict.Add(capability.Name, resourceGroup);
        }
 internal MasterTableResourceCapability()
 {
     Capabilities = new List <M_ResourceCapability>();
     CUTTING      = new M_ResourceCapability {
         Name = "Cutting"
     };
     DRILLING = new M_ResourceCapability {
         Name = "Drilling"
     };
     ASSEMBLING = new M_ResourceCapability {
         Name = "Assembling"
     };
 }
예제 #4
0
        internal CapabilityDefinition GetCapabilityDefinition(M_ResourceCapability capability)
        {
            var capabilityDefinition =
                _capabilityDefinitions.SingleOrDefault(x => x.ResourceCapability.Id == capability.Id);

            if (capabilityDefinition != null)
            {
                return(capabilityDefinition);
            }
            // else create a new one
            capabilityDefinition = new CapabilityDefinition(capability);
            _capabilityDefinitions.Add(capabilityDefinition);
            return(capabilityDefinition);
        }
예제 #5
0
        /// <summary>
        /// Loop through all capabilities the hub provides.
        /// </summary>
        /// <param name="hubRef"></param>
        /// <param name="capability"></param>
        /// <returns></returns>
        public bool AddOrCreateRelation(IActorRef hubRef, M_ResourceCapability capability)
        {
            AddOrCreateRelation(hubRef, capability.Name);
            bool trueForAll = true;

            if (capability.ChildResourceCapabilities == null)
            {
                return(trueForAll);
            }
            foreach (var item in capability.ChildResourceCapabilities)
            {
                trueForAll = trueForAll && AddOrCreateRelation(hubRef, item);
            }
            return(trueForAll);
        }
예제 #6
0
        public void AddOrUpdateBucketSize(M_ResourceCapability capability, long duration)
        {
            if (CapabilityBucketSizeDictionary.TryGetValue(capability.Id, out var value)) // update
            {
                value.Duration += duration;
                CalculateBucketSize();
                return;
            }
            // Create
            var bucketSize = new BucketSize {
                Duration = duration, Size = duration, Capability = capability
            };

            CapabilityBucketSizeDictionary.Add(capability.Id, bucketSize);
            CalculateBucketSize();
        }
        private void CreateToolingCapabilities(MasterDBContext context, M_ResourceCapability parent, ResourceProperty resource)
        {
            var newCapas = new List <M_ResourceCapability>();

            parent.ChildResourceCapabilities = new List <M_ResourceCapability>();
            for (int i = 1; i <= resource.ToolCount; i++)
            {
                var capability = new M_ResourceCapability
                {
                    Name = parent.Name + " Tool Nr " + i,
                    ParentResourceCapabilityId = parent.Id
                };

                Capabilities.Add(capability);
                newCapas.Add(capability);
                parent.ChildResourceCapabilities.Add(capability);
            }

            context.ResourceCapabilities.AddRange(newCapas);
            context.SaveChanges();
        }
예제 #8
0
        private M_ResourceSetup CreatePhysicalToolResource(List <M_Resource> resourceToolsToAssign, M_ResourceCapability subCapability, List <M_ResourceSetup> setups,
                                                           M_ResourceCapabilityProvider capabilityProvider)
        {
            var toolObject =
                resourceToolsToAssign.Single(x => x.Name.Equals(subCapability.Name));

            return(CreateNewSetup(toolObject, capabilityProvider, true, true, 0));
        }
예제 #9
0
 public IConfirmation GetFirstIfSatisfiedAndSetReadyAtIsSmallerOrEqualThan(long currentTime, M_ResourceCapability resourceCapability = null)
 {
     var(key, confirmation) = GetFirst();
     if (confirmation != null &&
         ((FBucket)confirmation.Job).HasSatisfiedJob &&
         confirmation.ScopeConfirmation.SetReadyAt <= currentTime)
     {
         return(confirmation);
     }
     return(null);
 }
예제 #10
0
 public IConfirmation DequeueFirstSatisfied(long currentTime, M_ResourceCapability resourceCapability = null)
 {
     var(key, value) = GetFirstSatisfied(currentTime);
     this.Remove(key);
     return(value);
 }
예제 #11
0
 public bool HasCapability(M_ResourceCapability resourceCapability)
 {
     return(ResourceCapability.Id == resourceCapability.Id);
 }
예제 #12
0
 private void GetCapabilitiesRecursive(M_ResourceCapability capability)
 {
     capability.ChildResourceCapabilities = _dBContext.ResourceCapabilities.Where(x => x.ParentResourceCapabilityId == capability.Id).ToList();
     capability.ChildResourceCapabilities.ForEach(GetCapabilitiesRecursive);
 }
예제 #13
0
        public static FOperation CreateDummyFOperationItem(string jobName, int jobDuration, int averageTransitionDuration = 20, bool preCondition = true, bool materialsProvide = true,
                                                           int dueTime      = 50, long customerDue   = 100L, M_ResourceCapability capability = null,
                                                           M_ArticleBom bom = null, long currentTime = 0L)
        {
            var operation = new M_Operation()
            {
                ArticleId = 10,
                AverageTransitionDuration = averageTransitionDuration,
                Duration        = jobDuration,
                HierarchyNumber = 10,
                Id          = 1,
                Name        = jobName,
                ArticleBoms = new List <M_ArticleBom> {
                    bom
                },
                ResourceCapability = new M_ResourceCapability {
                    Name = "Cutting"
                }
            };

            return(MessageFactory.ToOperationItem(operation, dueTime: dueTime, customerDue: customerDue, productionAgent: ActorRefs.Nobody, firstOperation: preCondition, currentTime: currentTime, remainingWork: 0));
        }
예제 #14
0
        //was sind operators? -> Personen, die Maschinen umrüsten
        private void CreateTools(M_ResourceCapability capability, long setupTime, int numberOfOperators)
        {
            List <M_Resource>      tools  = new List <M_Resource>();
            List <M_ResourceSetup> setups = new List <M_ResourceSetup>();
            List <M_ResourceCapabilityProvider> capabilityProviders = new List <M_ResourceCapabilityProvider>();
            List <M_Resource> operators = new List <M_Resource>();

            for (int i = 1; i < 1 + numberOfOperators; i++)
            {
                operators.Add(CreateNewResource(capability.Name + " Operator " + i, true));
            }

            foreach (var resource in CapabilityToResourceDict.Single(x => x.Key == capability.Name).Value)
            {
                if (operators.Count > 0)
                {
                    foreach (var op in operators)
                    {
                        foreach (var subCapability in _capability.Capabilities
                                 .Single(x => x.Name == capability.Name)
                                 .ChildResourceCapabilities)
                        {
                            var capabilityProvider = new M_ResourceCapabilityProvider()
                            {
                                Name = $"Provides {subCapability.Name} {resource.Name}",
                                ResourceCapabilityId = subCapability.Id,
                            };
                            var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false);
                            tools.Add(tool);

                            setups.Add(CreateNewSetup(op, capabilityProvider, false, true, 0));
                            setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                            setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                            capabilityProviders.Add(capabilityProvider);
                        }
                    }
                }
                else
                {
                    foreach (var subCapability in _capability.Capabilities
                             .Single(x => x.Name == capability.Name)
                             .ChildResourceCapabilities)
                    {
                        var capabilityProvider = new M_ResourceCapabilityProvider()
                        {
                            Name = $"Provides {subCapability.Name} {resource.Name}",
                            ResourceCapabilityId = subCapability.Id,
                        };
                        var tool = CreateNewResource($"Tool {resource.Name} {subCapability.Name}", false);
                        tools.Add(tool);

                        setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                        setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                        capabilityProviders.Add(capabilityProvider);
                    }
                }
                CapabilityProviderDict.Add($"{resource.Name} Tooling", capabilityProviders);
                CapabilityToSetupDict.Add($"{resource.Name} Tooling", setups);
                CapabilityToResourceDict.Add($"{resource.Name} Tooling", tools);
                CapabilityToResourceDict.Add($"{resource.Name} Operators", operators);
            }
        }
예제 #15
0
 public List <M_ResourceCapabilityProvider> GetAllCapabilityProvider(M_ResourceCapability capability)
 {
     return(_capabilityDefinitions.Single(x => x.ResourceCapability.Id == capability.Id).GetAllCapabilityProvider());
 }
예제 #16
0
 public CapabilityDefinition(M_ResourceCapability resourceCapability)
 {
     this.ResourceCapability = resourceCapability;
 }
예제 #17
0
        private void CreateTools(M_ResourceCapability capability, long setupTime, int numberOfOperators, List <M_Resource> workerToAssign, List <M_Resource> resourceToolsToAssign, String workergroup)
        {
            List <M_Resource>      tools  = new List <M_Resource>();
            List <M_ResourceSetup> setups = new List <M_ResourceSetup>();
            List <M_ResourceCapabilityProvider> capabilityProviders = new List <M_ResourceCapabilityProvider>();
            List <M_Resource> operators = new List <M_Resource>();

            for (int i = 1; i < 1 + numberOfOperators; i++)
            {
                operators.Add(CreateNewResource(capability.Name + " Operator " + i, true, true, null, workergroup));
            }

            foreach (var resource in CapabilityToResourceDict.Single(x => x.Key == capability.Name).Value)
            {
                // With operators
                if (operators.Count > 0)
                {
                    foreach (var op in operators)
                    {
                        if (workerToAssign.Any()) // with workers and setups
                        {
                            foreach (var worker in workerToAssign)
                            {
                                foreach (var subCapability in _capability.Capabilities
                                         .Single(x => x.Name == capability.Name)
                                         .ChildResourceCapabilities)
                                {
                                    var capabilityProvider = new M_ResourceCapabilityProvider()
                                    {
                                        Name = $"Provides {subCapability.Name} {resource.Name} {worker.Name}",
                                        ResourceCapabilityId = subCapability.Id,
                                    };

                                    var toolName = resource.Name + " " + subCapability.Name;
                                    var tool     = tools.SingleOrDefault(x => x.Name.Equals(toolName));
                                    if (tool == null)
                                    {
                                        tool = CreateNewResource($"{resource.Name} {subCapability.Name}", false, false);
                                        tools.Add(tool);
                                    }

                                    if (resourceToolsToAssign.Any())
                                    {
                                        setups.Add(CreatePhysicalToolResource(resourceToolsToAssign, subCapability, setups, capabilityProvider));
                                    }

                                    // CreateNewSetup(resource, capabilityProvider, usedInProcessing,usedInSetup, setupTime)
                                    setups.Add(CreateNewSetup(op, capabilityProvider, false, true, 0));
                                    setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                                    setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                                    setups.Add(CreateNewSetup(worker, capabilityProvider, true, false, 0));
                                    capabilityProviders.Add(capabilityProvider);
                                }
                            }
                        }
                        else
                        { // no worker but setup
                            foreach (var subCapability in _capability.Capabilities
                                     .Single(x => x.Name == capability.Name)
                                     .ChildResourceCapabilities)
                            {
                                var capabilityProvider = new M_ResourceCapabilityProvider()
                                {
                                    Name = $"Provides {subCapability.Name} {resource.Name}",
                                    ResourceCapabilityId = subCapability.Id,
                                };

                                var toolName = resource.Name + " " + subCapability.Name;
                                var tool     = tools.SingleOrDefault(x => x.Name.Equals(toolName));
                                if (tool == null)
                                {
                                    tool = CreateNewResource($"{resource.Name} {subCapability.Name}", false, false);
                                    tools.Add(tool);
                                }

                                if (resourceToolsToAssign.Any())
                                {
                                    setups.Add(CreatePhysicalToolResource(resourceToolsToAssign, subCapability, setups, capabilityProvider));
                                }
                                setups.Add(CreateNewSetup(op, capabilityProvider, false, true, 0));
                                setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                                setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                                capabilityProviders.Add(capabilityProvider);
                            }
                        }
                    }
                }
                else // without operators
                {
                    if (workerToAssign.Any())
                    {
                        foreach (var worker in workerToAssign)
                        {
                            foreach (var subCapability in _capability.Capabilities
                                     .Single(x => x.Name == capability.Name)
                                     .ChildResourceCapabilities)
                            {
                                var capabilityProvider = new M_ResourceCapabilityProvider()
                                {
                                    Name = $"Provides {subCapability.Name} {resource.Name} {worker.Name}",
                                    ResourceCapabilityId = subCapability.Id,
                                };
                                // Tool
                                var toolName = resource.Name + " " + subCapability.Name;
                                var tool     = tools.SingleOrDefault(x => x.Name.Equals(toolName));
                                if (tool == null)
                                {
                                    tool = CreateNewResource($"{resource.Name} {subCapability.Name}", false, false);
                                    tools.Add(tool);
                                }

                                if (resourceToolsToAssign.Any())
                                {
                                    setups.Add(CreatePhysicalToolResource(resourceToolsToAssign, subCapability, setups, capabilityProvider));
                                }

                                setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                                setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                                setups.Add(CreateNewSetup(worker, capabilityProvider, true, false, 0));
                                capabilityProviders.Add(capabilityProvider);
                            }
                        }
                    }
                    else
                    {
                        foreach (var subCapability in _capability.Capabilities
                                 .Single(x => x.Name == capability.Name)
                                 .ChildResourceCapabilities)
                        {
                            var capabilityProvider = new M_ResourceCapabilityProvider()
                            {
                                Name = $"Provides {subCapability.Name} {resource.Name}",
                                ResourceCapabilityId = subCapability.Id,
                            };
                            var toolName = resource.Name + " " + subCapability.Name;
                            var tool     = tools.SingleOrDefault(x => x.Name.Equals(toolName));
                            if (tool == null)
                            {
                                tool = CreateNewResource($"{resource.Name} {subCapability.Name}", false, false);
                                tools.Add(tool);
                            }

                            if (resourceToolsToAssign.Any())
                            {
                                setups.Add(CreatePhysicalToolResource(resourceToolsToAssign, subCapability, setups, capabilityProvider));
                            }

                            setups.Add(CreateNewSetup(tool, capabilityProvider, true, true, setupTime));
                            setups.Add(CreateNewSetup(resource, capabilityProvider, true, true, 0));
                            capabilityProviders.Add(capabilityProvider);
                        }
                    }
                }
                CapabilityProviderDict.Add($"{resource.Name} Tooling", capabilityProviders);
                CapabilityToSetupDict.Add($"{resource.Name} Tooling", setups);
                CapabilityToResourceDict.Add($"{resource.Name} Tooling", tools);
                CapabilityToResourceDict.Add($"{resource.Name} Operators", operators);
            }
        }
예제 #18
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="resourceSetups"></param>

        public CapabilityDefinition GetResourcesByCapability(M_ResourceCapability resourceCapability)
        {
            return(_capabilityDefinitions.Single(x => x.HasCapability(resourceCapability)));
        }