private void InitFromTransportTask(TransportTask task) { Terminal.Log($"transport task nested: {task.GetTaskData().nestedTasks?.Count} cars: {task.GetTaskData().cars?.Count}"); DestinationTrack = task.GetTaskData().destinationTrack; DVTask = task; GetTrainsets(task.GetTaskData().cars); }
static bool IsFinalInList(TransportTask transportTask, IEnumerable <Task> tasks) { return(tasks.LastOrDefault() switch { SequentialTasks sequential => IsFinalInList(transportTask, sequential.tasks), ParallelTasks parallel => parallel.tasks.Contains(transportTask), Task task => task == transportTask, });
/// <summary> /// Sends an update of a TransportTask to the server , if there is a connection /// </summary> /// <param name="t"></param> internal void UpdateTransportTask(TransportTask t) { if (serverConnection) { List <TransportTask> tL = new List <TransportTask>(); tL.Add(t); restMng.PutTransportTaskAsync(tL); } }
public async Task <bool> Create(TransportTask task) { if (_context.TransportTasks.Any(t => t.OperationID == task.OperationID)) { return(await Task.FromResult(false)); } await _context.TransportTasks.AddAsync(task); return(true); }
public async Task <TransportTask> UpdateAsync(TransportTask task) { if (!task.IsTransient()) { var taskFromDb = await _context.TransportTasks .Include(p => p.Payable) .Where(p => p.Payable.Status != PayableStatusEnum.Todo) .FirstOrDefaultAsync(p => p.Id == task.Id); taskFromDb.AssignFrom(task); return(_context.TransportTasks.Update(task).Entity); } return(task); }
public async Task 生成任务_如果终点禁止入站_则可以生成非WCS任务() { var start = NewK(); var end = NewK(); end.InboundDisabled = true; Unitload unitload1 = new Unitload(); TransportTask task1 = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task1, "T", start, end, unitload1, false); }
/// <summary> /// Adds task specific information to view from given task /// </summary> /// <param name="t">Task</param> private void SetData(Task t) { this.SetGeneralData(t); if (t is TransportTask) { TransportTask tt = t as TransportTask; this.TargetBuilding = tt.TargetLocation.Building; this.TargetFloor = tt.TargetLocation.Floor; this.TargetRoom = tt.TargetLocation.Room; } if (t is MaintenanceTask) { MaintenanceTask mt = t as MaintenanceTask; } }
public async Task 生成任务_如果以N位置作为终点生成非WCS任务_则不会抛出异常() { var start = NewK(); var end = NewN(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload, false); }
public TransportTaskDirectionModel(TransportTask transportTask, Func <string, List <PlaceModel> > findPlaceAccessor) { _findPlaceAccessor = findPlaceAccessor; Source = transportTask; _startPlaceModel = _findPlaceAccessor(Source.TaskStartPlaceCode).FirstOrDefault(); _finishPlaceModel = _findPlaceAccessor(Source.TaskFinishPlace).FirstOrDefault(); if (_startPlaceModel == null || _finishPlaceModel == null) { IsValid = false; return; } IsValid = true; this.Point1 = _startPlaceModel.Center; this.Point2 = _finishPlaceModel.Center; this.Diameter = 0.05; switch (Source.StatusCode) { case TTaskStates.TTASK_CREATED: Fill = CreatedBrushForArrow; break; case TTaskStates.TTASK_ACTIVATED: Fill = ActivatedBrushForArrow; break; case TTaskStates.TTASK_COMPLETED: Fill = CompletedBrushForArrow; break; default: Fill = DefaultBrushForArrow; break; } if (Fill.IsFrozen) { var myFill = Fill.Clone(); myFill.Opacity = 0.7; Fill = myFill; } else { Fill.Opacity = 0.7; } }
public async Task 生成任务_终点的入站数会增加() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task, taskType, start, end, unitload); Assert.Equal(1, end.InboundCount); }
public async Task 生成任务_货载会被标记为正在移动() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task, taskType, start, end, unitload); Assert.True(unitload.BeingMoved); }
public async Task 生成任务_如果起点和终点相同_则会抛出异常() { Location start = NewK(); Location end = start; Unitload unitload = new Unitload(); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task, taskType, start, end, unitload)); Assert.Equal(FailtoBuildTaskReason.StartAndEndArdTheSame, ex.Reason); }
public async Task 生成任务_如果重复使用任务对象_则会抛出异常() { var start = NewK(); var end = NewK(); Unitload unitload1 = new Unitload(); Unitload unitload2 = new Unitload(); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "test", start, end, unitload1); await Assert.ThrowsAsync <ArgumentException>(() => taskHelper.BuildAsync(task, "test", start, end, unitload2)); }
public async Task 生成任务_如果终点禁止入站_则不可生成WCS任务() { var start = NewK(); var end = NewK(); end.InboundDisabled = true; Unitload unitload1 = new Unitload(); TransportTask task1 = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task1, "T", start, end, unitload1)); Assert.Equal(FailtoBuildTaskReason.InboundDisabled, ex.Reason); }
public async Task 生成任务_如果以N位置作为终点生成WCS任务_则会抛出异常() { var start = NewK(); var end = NewN(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task, "A", start, end, unitload)); Assert.Equal(FailtoBuildTaskReason.NForWcsTask, ex.Reason); }
public async Task 生成任务_如果货载在非N位置上_则任务起点必须与货载当前位置一致() { var start = NewK(); var end = NewS(); Unitload unitload = new Unitload(); unitload.Enter(NewK()); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task, "test", start, end, unitload)); Assert.Equal(FailtoBuildTaskReason.InvalidStart, ex.Reason); }
public async Task 取消任务_如果起点不是N位置_则货载保持在原位置上() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload); await taskHelper.CancelAsync(task); Assert.Same(start, unitload.CurrentLocation); }
public async Task 取消任务_起点的出站数会减少() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload); await taskHelper.CancelAsync(task); Assert.Equal(0, start.OutboundCount); }
public async Task 取消任务_检查货载属性() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload); await taskHelper.CancelAsync(task); Assert.False(unitload.BeingMoved); }
public async Task 生成任务_如果在一个货载上生成两个任务_则会抛出异常() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); TransportTask task = new TransportTask(); TransportTask task2 = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task, taskType, start, end, unitload); var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task2, taskType, start, end, unitload)); Assert.Equal(FailtoBuildTaskReason.UnitloadBeingMoved, ex.Reason); }
public async Task 完成任务_如果指定了实际终点_则货载被放在指定的位置上() { var start = NewK(); var end = NewS(); var actualEnd = NewS(); Unitload unitload = new Unitload(); unitload.Enter(start); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload); await taskHelper.CompleteAsync(task, actualEnd); Assert.Same(actualEnd, unitload.CurrentLocation); }
public async Task 生成任务_检查任务属性() { var start = NewK(); var end = NewK(); Unitload unitload = new Unitload(); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task, taskType, start, end, unitload); Assert.Same(start, task.Start); Assert.Same(end, task.End); Assert.Same(unitload, task.Unitload); Assert.Equal(taskType, task.TaskType); }
public int Solver(List <Manufacture> manufactures, List <Client> clients, out List <Route> routes) { //FileInput f = new FileInput("input.txt"); //List<Client> clients; //List<Manufacture> manufactures; List <ExpensiveManufacturer> expensiveManufacturers; int clientNeeds; int manufacturerNeeds = 0; //f.ReadFromFile(out clients, out manufactures); expensiveManufacturers = SetManufacturePriority(manufactures); clientNeeds = clients.Sum(a => a.Needs); int i = 0; while (manufacturerNeeds <= clientNeeds && i < expensiveManufacturers.Count()) { //Console.WriteLine(manufacturerNeeds); manufacturerNeeds += expensiveManufacturers[i].ProductionCapacity; expensiveManufacturers[i].IsOrganisated = 1; i++; } int sum = 0; foreach (var el in expensiveManufacturers) { sum += el.ProductionCapacity; } expensiveManufacturers = expensiveManufacturers.Where(a => a.IsOrganisated == 1).ToList(); TransportTask transportTask = new TransportTask(expensiveManufacturers.Cast <Manufacture>().ToList()); var transportResult = transportTask.CalculateCost(); routes = transportResult.ResultRoute; return(transportResult.Cost); }
public async Task 生成任务_显式指定ForWcs参数_检查任务的ForWcs属性() { var start = NewK(); var end = NewK(); Unitload unitload1 = new Unitload(); Unitload unitload2 = new Unitload(); TransportTask task1 = new TransportTask(); TransportTask task2 = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task1, taskType, start, end, unitload1, true); await taskHelper.BuildAsync(task2, taskType, start, end, unitload2, false); Assert.True(task1.ForWcs); Assert.False(task2.ForWcs); }
public async Task 生成任务_如果货载在N位置上_则任务起点可以为K位置() { var start = NewK(); var end = NewS(); var n = NewN(); Unitload unitload = new Unitload(); unitload.Enter(n); TransportTask task = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); await taskHelper.BuildAsync(task, "A", start, end, unitload); Assert.Same(n, unitload.CurrentLocation); Assert.Same(start, task.Start); Assert.Equal(0, n.UnitloadCount); Assert.Equal(0, n.OutboundCount); Assert.Equal(1, start.OutboundCount); }
public async Task 生成任务_如果超过起点的出站数限制_则会抛出异常() { var start = NewK(); start.OutboundLimit = 1; var end = NewS(); Unitload unitload = new Unitload(); Unitload unitload2 = new Unitload(); TransportTask task1 = new TransportTask(); TransportTask task2 = new TransportTask(); TaskHelper taskHelper = new TaskHelper(For <ISession>(), For <IAppSeqService>(), new UnitloadSnapshopHelper(new DefaultUnitloadSnapshotFactory(), Log.Logger), Log.Logger); const string taskType = "T"; await taskHelper.BuildAsync(task1, taskType, start, end, unitload); var ex = await Assert.ThrowsAsync <FailToBuildTaskException>(() => taskHelper.BuildAsync(task2, taskType, start, end, unitload2)); Assert.Equal(FailtoBuildTaskReason.OutboundLimitReached, ex.Reason); }
public async Task ProcessCompletedTaskAsync(CompletedTaskInfo taskInfo, TransportTask task) { Location actualEnd = task.End; if (string.IsNullOrEmpty(taskInfo.ActualEnd) == false) { actualEnd = await _session.Query <Location>().GetAsync(taskInfo.ActualEnd).ConfigureAwait(false); } switch (taskInfo.Cancelled) { case false: await _taskHelper.CompleteAsync(task, actualEnd, false).ConfigureAwait(false); break; case true: default: await _taskHelper.CancelAsync(task).ConfigureAwait(false); break; } }
public async Task ProcessRequestAsync(RequestInfo requestInfo) { _logger.Debug(requestInfo.ToString()); CheckRequest(requestInfo); // 1 入口 string entranceLocationCode = requestInfo.LocationCode; var entrance = await _session.Query <Location>().GetAsync(entranceLocationCode).ConfigureAwait(false); if (entrance == null) { string msg = string.Format("请求位置在 Wms 中不存在。【{0}】。", entranceLocationCode); throw new InvalidRequestException(msg); } // 2 托盘 string containerCode = requestInfo.PalletCode; var unitload = await _session.Query <Unitload>().GetAsync(containerCode).ConfigureAwait(false); if (unitload == null) { string msg = string.Format("货载不存在。容器编码【{0}】。", containerCode); throw new InvalidRequestException(msg); } // 将请求中的高度和重量记录到货载 unitload.StorageInfo.Height = requestInfo.Height; unitload.StorageInfo.Weight = requestInfo.Weight; // 3 分配货位 SResult s = SResult.Failure; var laneways = _session.Query <Laneway>().Take(5).ToArray(); foreach (var laneway in laneways) { _logger.Debug("正在检查巷道 {lanewayCode}", laneway.LanewayCode); if (laneway.Offline) { _logger.Warning("跳过脱机的巷道 {lanewayCode}", laneway.LanewayCode); continue; } s = await _sallocHelper.AllocateAsync(laneway, unitload.StorageInfo).ConfigureAwait(false); if (s.Success) { _logger.Information("在 {lanewayCode} 分配到货位 {locationCode}", laneway.LanewayCode, s.Target.LocationCode); break; } else { _logger.Information("在 {lanewayCode} 未分配到货位。", laneway.LanewayCode); continue; } } if (s.Success == false) { // 分配货位失败 throw new Exception("未分配到货位。"); } // 4 生成任务 var task = new TransportTask(); string taskType = "上架"; await _taskHelper.BuildAsync(task, taskType, entrance, s.Target, unitload); // 5 下发任务 _taskSender.SendTask(task); }
public void SendTask(TransportTask task) { task.WasSentToWcs = true; task.SendTime = DateTime.Now; _session.Save(task); }
public static bool IsFinalTask(TransportTask transportTask) {