Exemplo n.º 1
0
        /// <summary>
        /// Gets JSON (response data from LUIS) object and returns query as a string
        /// </summary>
        /// <param name="data">the response data from LUIS</param>
        /// <returns></returns>
        private string ConstructQueryHelper(LuisResponse data)
        {
            TopScoringIntent processedIntent = data.TopScoringIntent;
            string           actualQuery     = string.Empty;

            switch (processedIntent.Intent)//compose the query
            {
            case "None":
                throw new Exception("Please paraphrase your question, couldn't understand what you meant!");

            case "MachineRequestData":

                List <Entity>      machineEntities = data.Entities;
                MachineRequestData machineRequest  = new MachineRequestData();
                machineRequest.SensorID = machineEntities.Find(e => e.Type == "MachineID").entity;
                machineRequest.Type     = machineEntities.Find(e => e.Type == "MachineRequestType").resolution.values[0];
                actualQuery             = JsonConvert.SerializeObject(machineRequest);
                break;

            default:
                List <Entity>             kpiEntities           = data.Entities;
                KPIRequestDataWithoutPart kpiRequestWithoutPart = new KPIRequestDataWithoutPart();
                int buf;
                kpiRequestWithoutPart.KpiType   = processedIntent.Intent;
                kpiRequestWithoutPart.WorkOrder = kpiEntities.Find(e => e.Type == "KPIworkOrderID" && int.TryParse(e.entity, out buf)).entity;

                //get part entity
                CompositeEntity kpiOrderPart = data.CompositeEntities.Find(e => (e.ParentType == "KPIrequestDataPart" && int.TryParse(e.Value, out buf)));

                //filter request types without part
                if (processedIntent.nonOrderQuery() && kpiOrderPart != null)
                {
                    string kpiOrderPartValue = kpiOrderPart.Value;
                    if (kpiOrderPart != null)
                    {
                        string serializedKPIWithoutPart           = JsonConvert.SerializeObject(kpiRequestWithoutPart);
                        KPIRequestDataWithPart kpiRequestWithPart = JsonConvert.DeserializeObject <KPIRequestDataWithPart>(serializedKPIWithoutPart);
                        kpiRequestWithPart.Part = kpiOrderPartValue;
                        actualQuery             = JsonConvert.SerializeObject(kpiRequestWithPart);
                        break;
                    }
                    else
                    {
                        //couldn't find part value
                        throw new NullReferenceException("Couldn't find part value");
                    }
                }

                actualQuery = JsonConvert.SerializeObject(kpiRequestWithoutPart);
                break;
            }
            return(actualQuery);
        }