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