feat : 실행계획 생성 api 수정(선택한 내용만 실행계획 생성하도록 변경)
This commit is contained in:
parent
fd000a2d4e
commit
002adbed34
@ -21,6 +21,7 @@ public class ActionPlan {
|
|||||||
private Long id;
|
private Long id;
|
||||||
private Long storeId;
|
private Long storeId;
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
private Long feedbackId;
|
||||||
private String title;
|
private String title;
|
||||||
private String description;
|
private String description;
|
||||||
private String period;
|
private String period;
|
||||||
|
|||||||
@ -444,9 +444,10 @@ public class AnalyticsService implements AnalyticsUseCase {
|
|||||||
|
|
||||||
// 2. 실행계획 생성 (요청 시)
|
// 2. 실행계획 생성 (요청 시)
|
||||||
List<String> actionPlans = null;
|
List<String> actionPlans = null;
|
||||||
if (Boolean.TRUE.equals(request.getGenerateActionPlan())) {
|
//TODO : 추후에 AI 분석후에 바로 실행계획까지 생성해야 한다면 추가.
|
||||||
actionPlans = aiServicePort.generateActionPlan(aiFeedback);
|
// if (Boolean.TRUE.equals(request.getGenerateActionPlan())) {
|
||||||
}
|
// actionPlans = aiServicePort.generateActionPlan(aiFeedback);
|
||||||
|
// }
|
||||||
|
|
||||||
// 3. 응답 생성
|
// 3. 응답 생성
|
||||||
AiAnalysisResponse response = AiAnalysisResponse.builder()
|
AiAnalysisResponse response = AiAnalysisResponse.builder()
|
||||||
@ -459,7 +460,7 @@ public class AnalyticsService implements AnalyticsUseCase {
|
|||||||
.sentimentAnalysis(aiFeedback.getSentimentAnalysis())
|
.sentimentAnalysis(aiFeedback.getSentimentAnalysis())
|
||||||
.confidenceScore(aiFeedback.getConfidenceScore())
|
.confidenceScore(aiFeedback.getConfidenceScore())
|
||||||
.totalReviewsAnalyzed(getTotalReviewsCount(storeId, request.getDays()))
|
.totalReviewsAnalyzed(getTotalReviewsCount(storeId, request.getDays()))
|
||||||
.actionPlans(actionPlans)
|
.actionPlans(actionPlans) //TODO : 사용하는 값은 아니지만 의존성을 위해 그대로 둠, 추후에 변경 필요.
|
||||||
.analyzedAt(aiFeedback.getGeneratedAt())
|
.analyzedAt(aiFeedback.getGeneratedAt())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -474,7 +475,7 @@ public class AnalyticsService implements AnalyticsUseCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<String> generateActionPlansFromFeedback(Long feedbackId) {
|
public List<String> generateActionPlansFromFeedback(ActionPlanCreateRequest request, Long feedbackId) {
|
||||||
log.info("실행계획 생성: feedbackId={}", feedbackId);
|
log.info("실행계획 생성: feedbackId={}", feedbackId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -487,7 +488,7 @@ public class AnalyticsService implements AnalyticsUseCase {
|
|||||||
|
|
||||||
AiFeedback feedback = aiFeedback.get();
|
AiFeedback feedback = aiFeedback.get();
|
||||||
// 2. 기존 AIServicePort.generateActionPlan 메서드 활용
|
// 2. 기존 AIServicePort.generateActionPlan 메서드 활용
|
||||||
List<String> actionPlans = aiServicePort.generateActionPlan(aiFeedback.get());
|
List<String> actionPlans = aiServicePort.generateActionPlan(request.getActionPlanSelect(), aiFeedback.get());
|
||||||
|
|
||||||
|
|
||||||
// 3. DB에 실행계획 저장
|
// 3. DB에 실행계획 저장
|
||||||
@ -593,7 +594,8 @@ public class AnalyticsService implements AnalyticsUseCase {
|
|||||||
// ActionPlan 도메인 객체 생성 (기존 ActionPlanService의 패턴과 동일하게)
|
// ActionPlan 도메인 객체 생성 (기존 ActionPlanService의 패턴과 동일하게)
|
||||||
ActionPlan actionPlan = ActionPlan.builder()
|
ActionPlan actionPlan = ActionPlan.builder()
|
||||||
.storeId(feedback.getStoreId())
|
.storeId(feedback.getStoreId())
|
||||||
.userId(1L) // AI가 생성한 계획이므로 userId는 null
|
.userId(0L) // AI가 생성한 계획이므로 userId는 0
|
||||||
|
.feedbackId(feedback.getId())
|
||||||
.title("AI 추천 실행계획 " + (i + 1))
|
.title("AI 추천 실행계획 " + (i + 1))
|
||||||
.description(planContent)
|
.description(planContent)
|
||||||
.period("1개월") // 기본 실행 기간
|
.period("1개월") // 기본 실행 기간
|
||||||
|
|||||||
@ -44,6 +44,6 @@ public interface AnalyticsUseCase {
|
|||||||
/**
|
/**
|
||||||
* AI 피드백 기반 실행계획 생성
|
* AI 피드백 기반 실행계획 생성
|
||||||
*/
|
*/
|
||||||
List<String> generateActionPlansFromFeedback(Long feedbackId);
|
List<String> generateActionPlansFromFeedback(ActionPlanCreateRequest request,Long feedbackId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,5 +24,5 @@ public interface AIServicePort {
|
|||||||
/**
|
/**
|
||||||
* 실행 계획 생성
|
* 실행 계획 생성
|
||||||
*/
|
*/
|
||||||
List<String> generateActionPlan(AiFeedback feedback);
|
List<String> generateActionPlan(List<String> actionPlanSelect, AiFeedback feedback);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -154,10 +154,8 @@ public class AnalyticsController {
|
|||||||
|
|
||||||
log.info("실행계획 바디 데이터 => {}", request);
|
log.info("실행계획 바디 데이터 => {}", request);
|
||||||
|
|
||||||
|
List<String> actionPlans = analyticsUseCase.generateActionPlansFromFeedback(request,feedbackId);
|
||||||
|
|
||||||
return ResponseEntity.ok(SuccessResponse.of("실행계획 생성 완료"));
|
return ResponseEntity.ok(SuccessResponse.of("실행계획 생성 완료"));
|
||||||
|
|
||||||
// List<String> actionPlans = analyticsUseCase.generateActionPlansFromFeedback(feedbackId);
|
|
||||||
|
|
||||||
// return ResponseEntity.ok(SuccessResponse.of(actionPlans, "실행계획 생성 완료"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,25 +125,30 @@ public class AIServiceAdapter implements AIServicePort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> generateActionPlan(AiFeedback feedback) {
|
public List<String> generateActionPlan(List<String> actionPlanSelect, AiFeedback feedback) {
|
||||||
log.info("OpenAI 실행 계획 생성 시작");
|
log.info("OpenAI 실행 계획 생성 시작");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
StringBuffer planFormat = new StringBuffer();
|
||||||
|
for(int i = 1; i <= actionPlanSelect.size(); i++) {
|
||||||
|
planFormat.append(i).append(" [구체적인 실행 계획 ").append(i).append("]\n");
|
||||||
|
}
|
||||||
String prompt = String.format(
|
String prompt = String.format(
|
||||||
"""
|
"""
|
||||||
다음 AI 피드백을 바탕으로 구체적인 실행 계획 3개를 생성해주세요.
|
다음 AI 피드백을 바탕으로 구체적인 실행 계획 %s개를 생성해주세요.
|
||||||
각 계획은 실행 가능하고 구체적이어야 합니다.
|
각 계획은 실행 가능하고 구체적이어야 합니다.
|
||||||
|
|
||||||
요약: %s
|
요약: %s
|
||||||
개선점: %s
|
개선점: %s
|
||||||
|
|
||||||
|
실행계획 내용은 점주가 반영할 수 있도록 구체적어야 합니다.
|
||||||
실행 계획을 다음 형식으로 작성해주세요:
|
실행 계획을 다음 형식으로 작성해주세요:
|
||||||
1. [구체적인 실행 계획 1]
|
%s
|
||||||
2. [구체적인 실행 계획 2]
|
|
||||||
3. [구체적인 실행 계획 3]
|
|
||||||
""",
|
""",
|
||||||
|
actionPlanSelect.size(),
|
||||||
feedback.getSummary(),
|
feedback.getSummary(),
|
||||||
String.join(", ", feedback.getImprovementPoints())
|
String.join(", ", actionPlanSelect),
|
||||||
|
planFormat
|
||||||
);
|
);
|
||||||
|
|
||||||
String result = callOpenAI(prompt);
|
String result = callOpenAI(prompt);
|
||||||
@ -151,10 +156,9 @@ public class AIServiceAdapter implements AIServicePort {
|
|||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("OpenAI 실행 계획 생성 중 오류 발생", e);
|
log.error("OpenAI 실행 계획 생성 중 오류 발생", e);
|
||||||
|
//TODO : 시연을 위해서 우선은 아래과 같이 처리, 추후에는 실행계획이 실패했다면 Runtime계열의 예외를 던지는게 좋을듯.
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
"서비스 품질 개선을 위한 직원 교육 실시",
|
"실행계획 생성 실패. 재생성 필요"
|
||||||
"고객 피드백 수집 체계 구축",
|
|
||||||
"매장 운영 프로세스 개선"
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,6 +79,7 @@ public class ActionPlanRepositoryAdapter implements ActionPlanPort {
|
|||||||
private ActionPlanEntity toEntity(ActionPlan domain) {
|
private ActionPlanEntity toEntity(ActionPlan domain) {
|
||||||
return ActionPlanEntity.builder()
|
return ActionPlanEntity.builder()
|
||||||
.id(domain.getId())
|
.id(domain.getId())
|
||||||
|
.feedbackId(domain.getFeedbackId())
|
||||||
.storeId(domain.getStoreId())
|
.storeId(domain.getStoreId())
|
||||||
.userId(domain.getUserId())
|
.userId(domain.getUserId())
|
||||||
.title(domain.getTitle())
|
.title(domain.getTitle())
|
||||||
|
|||||||
@ -50,6 +50,9 @@ public class ActionPlanEntity {
|
|||||||
@Column(name = "user_id", nullable = false)
|
@Column(name = "user_id", nullable = false)
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
|
@Column(name = "feedback_id", nullable = true)
|
||||||
|
private Long feedbackId;
|
||||||
|
|
||||||
@Column(name = "title", nullable = false, length = 100)
|
@Column(name = "title", nullable = false, length = 100)
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user