Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }