Exemplo n.º 1
0
        private async Task <DialogTurnResult> SebuSelectAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            string select = string.Empty;

            if (workDetails.ablt.Count > 1)
            {
                var choice = (FoundChoice)stepContext.Result;
                select = choice.Value;
            }
            else
            {
                select = stepContext.Result.ToString();
            }
            //선택한 직업의 리스트 인덱스 값 찾기
            if (workDetails.selectAbltIndex == -1)
            {
                foreach (Ablt ablt in workDetails.ablt)
                {
                    workDetails.selectAbltIndex++;
                    if (ablt.AbltCn.Equals(select))
                    {
                        break;
                    }
                }
            }

            Ablt selectAblt = workDetails.ablt[workDetails.selectAbltIndex];

            string msg = $"선택하신 직무는 {selectAblt.AbltCn} 입니다.\n" +
                         $"선택하신 직무의 내용입니다\n" +
                         $"{selectAblt.AbltDfnCn}";

            await stepContext.Context.SendActivityAsync(MessageFactory.Text(msg), cancellationToken);

            if (workDetails.sebu.Count == 0)
            {
                return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions
                {
                    Prompt = MessageFactory.Text("더 알고싶은 분야를 선택해주세요"),
                    RetryPrompt = MessageFactory.Text("다시 선택해 주세요"),
                    Choices = ChoiceFactory.ToChoices(sebuList)
                }, cancellationToken));
            }

            return(await stepContext.NextAsync(cancellationToken));
        }
Exemplo n.º 2
0
        private async Task <DialogTurnResult> SebuViewAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            if (workDetails.sebu.Count == 0)
            {
                var choice = (FoundChoice)stepContext.Result;
                workDetails.sebu.Add(choice.Value);
            }

            Ablt   selectAblt = workDetails.ablt[workDetails.selectAbltIndex];
            string msg        = $"{selectAblt.AbltCn}에 대해 선택하신 세부 내용은 다음과 같습니다.";

            await stepContext.Context.SendActivityAsync(MessageFactory.Text(msg), cancellationToken);

            //MATCH쿼리 직무 능력 노드 찾아놓기
            ICypherFluentQuery query = client.Cypher.Match("(ablt:Ablt)").
                                       Where((Ablt ablt) => ablt.AbltCn == selectAblt.AbltCn);

            foreach (string sebuString in workDetails.sebu)
            {
                string sebuMsg = "";
                //원하는 세부 능력에 따른 쿼리 이어 붙인 후 결과값 도출
                switch (sebuString)
                {
                case "훈련":
                    var abltTrng = query.Match("(ablt)-[:TRNG]->(trng:AbltTrng)").
                                   Return(trng => trng.As <AbltTrng>()).Results;
                    sebuMsg += "----- 훈련 -----\n";
                    foreach (AbltTrng trng in abltTrng)
                    {
                        sebuMsg += (trng.Name + "\n");
                    }
                    break;

                case "전공":
                    var abltMajor = query.Match("(ablt)-[:MAJOR]->(major:AbltMajor)").
                                    Return(major => major.As <AbltMajor>()).Results;
                    sebuMsg += "----- 전공 -----\n";
                    foreach (AbltMajor major in abltMajor)
                    {
                        sebuMsg += (major.Name + "\n");
                    }
                    break;

                case "자격증":
                    var abltCrfItem = query.Match("(ablt)-[:CRFITEM]->(crfItem:AbltCrfItem)").
                                      Return(crfItem => crfItem.As <AbltCrfItem>()).Results;
                    sebuMsg += "----- 자격증 -----\n";
                    foreach (AbltCrfItem crfItem in abltCrfItem)
                    {
                        sebuMsg += (crfItem.Name + "\n");
                    }
                    break;

                case "수행태도":
                    var abltAtt = query.Match("(ablt)-[:ATT]->(att:AbltAtt)").
                                  Return(att => att.As <AbltAtt>()).Results;
                    sebuMsg += "----- 수행태도 -----\n";
                    foreach (AbltAtt att in abltAtt)
                    {
                        sebuMsg += (att.Name + "\n");
                    }
                    break;

                case "지식및기술":
                    var abltKnwSkl = query.Match("(ablt)-[:KNWSKL]->(knwSkl:AbltKnwSkl)").
                                     Return(knwSkl => knwSkl.As <AbltKnwSkl>()).Results;
                    sebuMsg += "-----지식 및 기술 -----\n";
                    foreach (AbltKnwSkl knwSkl in abltKnwSkl)
                    {
                        sebuMsg += (knwSkl.Name + "\n");
                    }
                    break;
                }
                await stepContext.Context.SendActivityAsync(MessageFactory.Text(sebuMsg), cancellationToken);
            }
            return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions
            {
                Prompt = MessageFactory.Text("더 필요하신 것 있으신가요?"),
                RetryPrompt = MessageFactory.Text("아래에서 골라주세요"),
                Choices = ChoiceFactory.ToChoices(EndList)
            }));
        }