示例#1
0
        public ActionResult AddOperation()
        {
            using (UsersContext _userContext = new UsersContext())
                using (ProductsContext _prodContext = new ProductsContext())
                {
                    int           id    = Convert.ToInt32(Request.Params["id"]);
                    int           count = Convert.ToInt32(Request.Params["count"]);
                    OperationType opType;
                    if (Convert.ToBoolean(Request.Params["type"]))
                    {
                        opType = OperationType.plus;
                    }
                    else
                    {
                        opType = OperationType.minus;
                    }

                    ////
                    //Доработать, теперь передается контекст а не юзер
                    ////
                    int userId            = (from a in _userContext.UserProfiles where a.UserName == User.Identity.Name select a.UserId).First();
                    OperationManager oper = new OperationManager(_prodContext, _userContext);
                    oper.AddOperation(opType, count, id, userId);

                    return(new EmptyResult());
                }
        }
示例#2
0
        public void SetArticleProvided()
        {
            var operationManager = new OperationManager();
            var bom = new M_ArticleBom()
            {
                ArticleChild = new M_Article()
                {
                    Name = "Wood"
                }
            };
            var job     = TypeFactory.CreateJobItem(jobName: "Sample Operation 1", jobDuration: 10, bom: bom);
            var article = new M_Article()
            {
                Name         = "Bear"
                , Operations = new List <M_Operation>()
                {
                    job.Operation
                }
                , ArticleBoms = new List <M_ArticleBom>()
                {
                    bom
                }
            };
            var fArticle = TypeFactory.CreateDummyArticle(59, 0, article, 1);

            operationManager.AddOperation(job);
            var numberOfRequiredDispos = operationManager.CreateRequiredArticles(fArticle, ActorRefs.Nobody, 0);

            Assert.True(numberOfRequiredDispos == 1);
        }
示例#3
0
        public void ProvideArticle()
        {
            var operationManager = new OperationManager();
            var job = TypeFactory.CreateJobItem(jobName: "Sample Operation 1", jobDuration: 10);

            operationManager.AddOperation(job);
            var returnedJob = operationManager.GetByOperationKey(job.Key);

            Assert.True(returnedJob != null);
        }
        public void AddAndRetrieveOperationByKey()
        {
            var operationManager = new OperationManager();
            var job = TypeFactory.CreateDummyFOperationItem(jobName: "Sample Operation 1", jobDuration: 10);

            operationManager.AddOperation(job);
            var returnedJob = operationManager.GetByOperationKey(job.Key);

            Assert.True(returnedJob != null);
        }
示例#5
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();
        }
示例#6
0
        internal void CreateJobsFromArticle(FArticle fArticle)
        {
            var lastDue            = fArticle.DueTime;
            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
                                                     , productionAgent: Agent.Context.Self
                                                     , firstOperation: (operationCounter == numberOfOperations)
                                                     , currentTime: Agent.CurrentTime);

                Agent.DebugMessage(
                    msg:
                    $"Created operation: {operation.Name} | BackwardStart {fJob.BackwardStart} | BackwardEnd:{fJob.BackwardEnd} Key: {fJob.Key}  ArticleKey: {fArticle.Key}");
                Agent.DebugMessage(
                    msg:
                    $"Precondition test: {operation.Name} | {fJob.StartConditions.PreCondition} ? {operationCounter} == {numberOfOperations} | Key: {fJob.Key}  ArticleKey: {fArticle.Key}");
                lastDue = fJob.BackwardStart - operation.AverageTransitionDuration;
                OperationManager.AddOperation(fJob);

                // send update to collector
                var pub = new FCreateSimulationWork(operation: fJob
                                                    , customerOrderId: fArticle.CustomerOrderId.ToString()
                                                    , isHeadDemand: fArticle.IsHeadDemand
                                                    , fArticleKey: fArticle.Key
                                                    , fArticleName: fArticle.Article.Name
                                                    , articleType: fArticle.Article.ArticleType.Name);
                Agent.Context.System.EventStream.Publish(@event: pub);
            }

            _articleToProduce = fArticle;
            SetForwardScheduling();
        }
示例#7
0
        private static void SetEventToReSizeNote(
            MadcaDisplay display, NoteBook noteBook, IReadOnlyList <IReadOnlyScore> scores, OperationManager opManager, IReadOnlyEditorStatus status)
        {
            var box    = display.PictureBox;
            var env    = display.EditorLaneEnvironment;
            var holder = display.KeyTokenHolder;

            var              key        = new KeyToken();
            NoteBase         note       = null;
            Position         prevPos    = null;
            NoteSize         prevSize   = null;
            Position         mouseBegin = null;
            SelectedNoteArea noteArea   = SelectedNoteArea.None;

            box.MouseDown += (s, e) =>
            {
                if (holder.Locked || status.EditorMode != EditorMode.Edit)
                {
                    return;
                }
                var area = env.GetEditorLaneRegion(e.Location);
                if (area == EditorLaneRegion.Lane && e.Button == MouseButtons.Left)
                {
                    if (!GetSelectedNote(e.Location, display, noteBook, out note))
                    {
                        return;
                    }
                    noteArea = note.SelectedNoteArea(e.Location, env);
                    if (!(noteArea == SelectedNoteArea.Left || noteArea == SelectedNoteArea.Right))
                    {
                        return;
                    }
                    prevPos  = new Position(note.Lane, note.Timing);
                    prevSize = new NoteSize(note.NoteSize);
                    var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out mouseBegin);
                    if (!res)
                    {
                        return;
                    }
                    holder.Lock(key);
                }
            };

            box.MouseMove += (s, e) =>
            {
                if (!holder.CanUnLock(key))
                {
                    return;
                }
                var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out Position position);
                if (!res)
                {
                    return;
                }
                var lane = position.Lane.RawLane - mouseBegin.Lane.RawLane;
                switch (noteArea)
                {
                case SelectedNoteArea.Left:
                {
                    var diff = prevSize.Size - lane;
                    if (1 <= diff && diff <= MadcaEnv.LaneCount)
                    {
                        note.ReLocate(new LanePotision(prevPos.Lane.RawLane + lane), note.Timing);
                    }
                    note.ReSize(new NoteSize(prevSize.Size - lane));
                    return;
                }

                case SelectedNoteArea.Right:
                {
                    note.ReSize(new NoteSize(prevSize.Size + lane));
                    return;
                }

                default: return;
                }
            };

            box.MouseUp += (s, e) =>
            {
                if (!holder.UnLock(key))
                {
                    return;
                }
                var ops = new List <Operation>();
                // TODO: 条件式要検討
                if (prevPos.Lane.RawLane != note.Lane.RawLane || prevPos.Timing != note.Timing)
                {
                    ops.Add(new ReLocateNoteOperation(note, prevPos, new Position(note.Lane, note.Timing)));
                }
                if (prevSize != note.NoteSize)
                {
                    ops.Add(new ReSizeNoteOperation(note, prevSize, note.NoteSize));
                }
                if (ops.Any())
                {
                    opManager.AddOperation(new CompositeOperation(ops.ToArray()));
                }
                note = null;
            };
        }
示例#8
0
        private static void SetEventToReLocateNote(
            MadcaDisplay display, NoteBook noteBook, IReadOnlyList <IReadOnlyScore> scores, OperationManager opManager, IReadOnlyEditorStatus status)
        {
            var box    = display.PictureBox;
            var env    = display.EditorLaneEnvironment;
            var holder = display.KeyTokenHolder;

            var      key        = new KeyToken();
            NoteBase note       = null;
            Position prev       = null;
            Position mouseBegin = null;

            box.MouseDown += (s, e) =>
            {
                if (holder.Locked || status.EditorMode != EditorMode.Edit)
                {
                    return;
                }
                var area = env.GetEditorLaneRegion(e.Location);
                if (area == EditorLaneRegion.Lane && e.Button == MouseButtons.Left)
                {
                    if (!GetSelectedNote(e.Location, display, noteBook, out note))
                    {
                        return;
                    }
                    if (note.SelectedNoteArea(e.Location, env) != SelectedNoteArea.Center)
                    {
                        return;
                    }
                    prev = new Position(note.Lane, note.Timing);
                    var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out mouseBegin);
                    if (!res)
                    {
                        return;
                    }
                    holder.Lock(key);
                }
            };

            box.MouseMove += (s, e) =>
            {
                if (!holder.CanUnLock(key))
                {
                    return;
                }
                var res = PositionConverter.ConvertRealToVirtual(env, e.Location, status.BeatStride, scores, out Position position);
                if (!res)
                {
                    return;
                }
                var lane   = position.Lane.RawLane - mouseBegin.Lane.RawLane;
                var timing = position.Timing - mouseBegin.Timing;
                note.ReLocate(new LanePotision(prev.Lane.RawLane + lane), prev.Timing + timing);
            };

            box.MouseUp += (s, e) =>
            {
                if (!holder.UnLock(key))
                {
                    return;
                }
                // TODO: 条件式要検討
                if (prev.Lane.RawLane != note.Lane.RawLane || prev.Timing != note.Timing)
                {
                    opManager.AddOperation(new ReLocateNoteOperation(note, prev, new Position(note.Lane, note.Timing)));
                }
                note = null;
            };
        }