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()); } }
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); }
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); }
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(); }
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(); }
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; }; }
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; }; }