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