Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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
            });
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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");
            }
        }
Ejemplo n.º 7
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.º 8
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;
            }
        }