public string Get() { if (!Request.Query.ContainsKey("id") || !int.TryParse(Request.Query["id"], out var nodeId)) { return("No correct id specified"); } var state = ReceiveEventController.GetState(); var node = state.Geo.Nodes.FirstOrDefault(n => n.Id == nodeId); if (node == null) { return("No correct id specified"); } var parts = state.Equipment.Parts.Where( p => p.Process.Any(process => node.OperationIds.Contains(process.OperationId)) ); var awaitingParts = parts.Select(p => { var operation = state.Equipment.Operations.FirstOrDefault(o => o.Id == node.OperationIds.First()); return(new AwaitingPart { PartId = p.Id, MachineId = nodeId, PartName = p.Name, OperationId = operation?.Id ?? 0, OperationName = operation?.Name ?? "" }); }); return(JsonConvert.SerializeObject(awaitingParts, Utils.ConverterSettings)); }
public PositionResult Position(bool offWay = false) { var curNode = ReceiveEventController.GetCurrentNode(); var nextNode = ReceiveEventController.GetNextNode(); if (curNode == null || nextNode == null) { return(new PositionResult { Current = new WaypointInfo { NodeName = "Текущий участок", NodeId = 1 }, Next = new WaypointInfo { NodeName = "Следующий участок", NodeId = 2 } }); } return(new PositionResult { Current = new WaypointInfo { NodeName = curNode.Name, NodeId = curNode.Id }, Next = new WaypointInfo { NodeName = nextNode.Name, NodeId = nextNode.Id }, OffWay = offWay }); }
public string Post() { try { if (Request.Query.ContainsKey("floor") && int.TryParse(Request.Query["floor"], out var floor)) { using var reader = new StreamReader(Request.Body); var body = reader.ReadToEnd(); var bg = ReceiveEventController.GetState().Background; if (bg.ContainsKey(floor)) { bg[floor] = body; } else { bg.Add(floor, body); } return($"Saved {body.Length} symbols on floor {floor}"); } return("No floor specified"); } catch (Exception e) { Console.WriteLine(e); throw; } }
public static State LoadState(string body) { var state = JsonConvert.DeserializeObject <State>(body, Utils.ConverterSettings); var actualState = ReceiveEventController.GetState(); actualState.Equipment = state.Equipment; actualState.Geo = state.Geo; actualState.CarRoadmap = state.CarRoadmap; return(actualState); }
public string Get() { try { if (Request.Query.ContainsKey("floor") && int.TryParse(Request.Query["floor"], out var floor)) { return(ReceiveEventController.GetState().Background.GetValueOrDefault(floor)); } return("No floor specified"); } catch (Exception e) { Console.WriteLine(e); throw; } }
public string Load() { if (!Request.Query.ContainsKey("list")) { return("no data field"); } var data = Request.Query["list"]; try { using var reader = new StreamReader(Request.Body); var state = ReceiveEventController.GetState(); switch (data) { case "nodes": LoadNodesToState(reader.ReadToEnd(), state); return($"Total nodes: {state.Geo.Nodes.Count}"); case "parts": LoadPartsToState(reader.ReadToEnd(), state); return($"Total parts: {state.Equipment.Parts.Count}"); case "operations": LoadOperationsToState(reader.ReadToEnd(), state); return($"Total operations: {state.Equipment.Operations.Count}"); case "assemblies": LoadAssembliesToState(reader.ReadToEnd(), state); return($"Total assemblies: {state.Equipment.Assemblies.Count}"); default: return("wrong data"); } } catch (Exception e) { Console.WriteLine(e.ToString()); return("bad"); } }
public static AliceResponse HandleRequest(AliceRequest request) { var response = new AliceResponse { Session = request.Session, Response = new ResponseModel() }; response.Response.Text = "Извините, произошла ошибка, разработчики уже уведомлены"; var state = ReceiveEventController.GetState(); try { if (request.Request.Command.IsNullOrEmpty() || request.Request.Nlu.Tokens.First() == "да") { response.Response.Text = "Добро пожаловать в голосовой помощник рабочего. " + "Я помогу вам добраться до пункта назначения с нужным грузом." + "Спросите меня, куда идти или попросите переключить на следующую" + " точку маршрута, если хотите ее пропустить. "; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "куда идти", "куда мне", "что делать", "какая задача", "пункт назначения" })) { var node = ReceiveEventController.GetNextNode(); var name = GetCorrectNodeName(state, node); response.Response.Text = $"Двигайтесь в {name}."; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "следующий пункт", "следующая точка", "дальше", "переключить точку", "я на месте" })) { var switchedNode = ReceiveEventController.SwitchToNextNode(); var name = GetCorrectNodeName(state, switchedNode); response.Response.Text = $"Переключаю на точку {switchedNode.Id}. Следуйте в {name}."; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "где я", "где сейчас", "где нахожусь", "местоположение", "локация" })) { var curNode = ReceiveEventController.GetCurrentNode(); var nextNode = ReceiveEventController.GetNextNode(); var curName = GetCorrectNodeName(state, curNode); var nextName = GetCorrectNodeName(state, nextNode); response.Response.Text = $"Вы находитесь в {curName}. Следуйте в {nextName}. "; } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "как пройти", "хочу попасть в", "как дойти", "как попасть" })) { response.Response.Text = $"Ошибка обнаружения пути"; var depotNum = request.Request.Nlu.Tokens.Select(x => { if (int.TryParse(x, out var n)) { return(n); } return(-1); }).FirstOrDefault(y => y != -1); bool onCart = request.Request.Nlu.Tokens.ContainsStartWith("тележк") || request.Request.Nlu.Tokens.ContainsStartWith("погруз") || request.Request.Nlu.Tokens.ContainsStartWith("телег"); foreach (var depot in ReceiveEventController.GetState().Geo.Depots.Where(depot => depot.Id == depotNum)) { var nextNode = ReceiveEventController.GetNextNode(); var resultPath = ReceiveEventController.FindPath(depot, onCart); var targetName = GetCorrectNodeName(state, resultPath.Item1); var nextName = GetCorrectNodeName(state, nextNode); if (onCart && resultPath.Item2) { response.Response.Text = $"Ваш пункт назначения {targetName}. Следуйте в {nextName}. Часть пути придется пройти пешком."; } else { response.Response.Text = $"Ваш пункт назначения {targetName}. Следуйте в {nextName}."; } break; } } else if (Utils.CheckTokens(request.Request.Nlu.Tokens, new[] { "где начальник цеха", "где мастер участка", "где мастер", "где начальник" })) { response.Response.Text = $"Орел в гнезде"; } } catch (Exception e) { response.Response.Text = $"Ошибка обнаружения пути"; } return(response); }
public string PostPosition() { try { using var reader = new StreamReader(Request.Body); var presence = JsonConvert.DeserializeObject <Presence>(reader.ReadToEnd(), Utils.ConverterSettings); var state = ReceiveEventController.GetState(); var part = state.Equipment.Parts.FirstOrDefault(x => x.Id == presence.PartId); var machineNode = state.Geo.Nodes.FirstOrDefault(x => x.Id == presence.MachineId); if (machineNode == null || machineNode.Type != NodeType.Machine || part == null) { return("No machine or part found"); } /*var potentialWaypoint = state.CarRoadmap.Path * .FirstOrDefault( * wp => wp.FromNode == presence.MachineId * && wp.ToNode == presence.MachineId * && part.Process.Select(process => process.OperationId).Contains(presence.OperationId) * ); * * if (potentialWaypoint != null) * { * state.CarRoadmap.SetWaypoint(potentialWaypoint); * part.Roadmap.SetWaypoint(potentialWaypoint); * return GetPosition(); * }*/ // new waypoint var newWp = new Waypoint { FromNode = presence.MachineId, ToNode = presence.MachineId, OperationId = presence.OperationId, OffWay = true }; if (state.CarRoadmap.Path.Count > 0) { var lastWp = state.CarRoadmap.Path.Last(); var lastNode = state.Geo.Nodes.FirstOrDefault(n => n.Id == lastWp.ToNode); if (lastNode != null) { try { ReceiveEventController.FindPath(lastNode, true); } catch (Exception e) { Console.WriteLine(e); } } } else { state.CarRoadmap.SetWaypoint(newWp); } part.Roadmap.SetWaypoint(newWp); return(JsonConvert.SerializeObject(Position(true), Utils.ConverterSettings)); } catch (Exception e) { Console.WriteLine(e); throw; } }