
--- src/main/java/kr/co/takensoft/ai/system/feedback/dao/FeedbackDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dao/FeedbackDAO.java
... | ... | @@ -1,6 +1,8 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.feedback.dao; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO; |
|
3 | 4 |
import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO; |
5 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO; |
|
4 | 6 |
import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO; |
5 | 7 |
import kr.co.takensoft.ai.system.project.vo.ProjectVO; |
6 | 8 |
import org.egovframe.rte.psl.dataaccess.mapper.Mapper; |
... | ... | @@ -51,4 +53,21 @@ |
51 | 53 |
* 피드백 목록 조회(사용자가 참여하는 모든 프로젝트를 대상으로 함) |
52 | 54 |
*/ |
53 | 55 |
List<FeedbackVO> findAllByMemberId(String memberId); |
56 |
+ |
|
57 |
+ /** |
|
58 |
+ * @param memberId - 사용자 아이디 |
|
59 |
+ * @return List<FeedbackCountDTO> - 미확인 피드백 목록 조회 결과 |
|
60 |
+ * |
|
61 |
+ * 피드백 알림 목록 조회 (미확인 피드백 목록 조회) |
|
62 |
+ */ |
|
63 |
+ List<FeedbackCountDTO> countUncheckedFeedbacks(String memberId); |
|
64 |
+ |
|
65 |
+ /** |
|
66 |
+ * @param memberId - 사용자 아이디 |
|
67 |
+ * @return FeedbackSummaryDTO - 피드백 개수 요약 결과 |
|
68 |
+ * |
|
69 |
+ * 일주일 간 피드백 개수 조회 |
|
70 |
+ */ |
|
71 |
+ FeedbackSummaryDTO countWeeklyFeedbacks(String memberId); |
|
72 |
+ |
|
54 | 73 |
} |
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackCountDTO.java
... | ... | @@ -0,0 +1,26 @@ |
1 | +package kr.co.takensoft.ai.system.feedback.dto; | |
2 | + | |
3 | +import lombok.AllArgsConstructor; | |
4 | +import lombok.Getter; | |
5 | +import lombok.NoArgsConstructor; | |
6 | +import lombok.Setter; | |
7 | + | |
8 | +/** | |
9 | + * @author 박현정 | |
10 | + * @since 2025.08.04 | |
11 | + * @modification | |
12 | + * since | author | description | |
13 | + * 2025.08.04 | 박현정 | 최초 등록 | |
14 | + * | |
15 | + * 피드백 알림 관련 DTO | |
16 | + */ | |
17 | +@Getter | |
18 | +@Setter | |
19 | +@NoArgsConstructor | |
20 | +@AllArgsConstructor | |
21 | +public class FeedbackCountDTO { | |
22 | + | |
23 | + private String projectGroupId; // 프로젝트 그룹 아이디 | |
24 | + private String projectName; // 프로젝트 이름 | |
25 | + private int unCheckedFeedbackCnt; // 미확인 피드백 개수 | |
26 | +} |
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackSummaryDTO.java
... | ... | @@ -0,0 +1,26 @@ |
1 | +package kr.co.takensoft.ai.system.feedback.dto; | |
2 | + | |
3 | +import lombok.AllArgsConstructor; | |
4 | +import lombok.Getter; | |
5 | +import lombok.NoArgsConstructor; | |
6 | +import lombok.Setter; | |
7 | + | |
8 | +/** | |
9 | + * @author 박현정 | |
10 | + * @since 2025.08.04 | |
11 | + * @modification | |
12 | + * since | author | description | |
13 | + * 2025.08.04 | 박현정 | 최초 등록 | |
14 | + * | |
15 | + * 피드백 개수 요약 관련 DTO | |
16 | + */ | |
17 | +@Getter | |
18 | +@Setter | |
19 | +@NoArgsConstructor | |
20 | +@AllArgsConstructor | |
21 | +public class FeedbackSummaryDTO { | |
22 | + | |
23 | + private int totalCount; // 특정 기간 동안 총 피드백 개수 | |
24 | + private int uncheckedCount; // 특정 기간 동안 미확인 피드백 개수 | |
25 | + private int checkedCount; // 특정 기간 동안 확인한 피드백 개수 | |
26 | +} |
--- src/main/java/kr/co/takensoft/ai/system/feedback/service/FeedbackService.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/service/FeedbackService.java
... | ... | @@ -1,7 +1,9 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.feedback.service; |
2 | 2 |
|
3 | 3 |
import kr.co.takensoft.ai.system.common.dto.BaseParam; |
4 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO; |
|
4 | 5 |
import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO; |
6 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO; |
|
5 | 7 |
import kr.co.takensoft.ai.system.feedback.dto.InsertFeedbackDTO; |
6 | 8 |
import org.springframework.transaction.annotation.Transactional; |
7 | 9 |
|
... | ... | @@ -45,4 +47,20 @@ |
45 | 47 |
* 피드백 목록 조회(사용자가 참여하는 모든 프로젝트를 대상으로 함) |
46 | 48 |
*/ |
47 | 49 |
List<FeedbackDTO> findAllFeedbacks(BaseParam request); |
50 |
+ |
|
51 |
+ /** |
|
52 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
53 |
+ * @return List<FeedbackCountDTO> - 미확인 피드백 개수를 담은 DTO 객체 리스트 |
|
54 |
+ * |
|
55 |
+ * 피드백 알림 목록 조회 (미확인 피드백 목록 조회) |
|
56 |
+ */ |
|
57 |
+ List<FeedbackCountDTO> getUncheckedFeedbackCountsByProject(BaseParam request); |
|
58 |
+ |
|
59 |
+ /** |
|
60 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
61 |
+ * @return FeedbackSummaryDTO - 피드백 개수 요약 결과 |
|
62 |
+ * |
|
63 |
+ * 일주일 간 피드백 개수 조회 |
|
64 |
+ */ |
|
65 |
+ FeedbackSummaryDTO findFeedbackSummary(BaseParam request); |
|
48 | 66 |
} |
--- src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
... | ... | @@ -4,7 +4,9 @@ |
4 | 4 |
import kr.co.takensoft.ai.system.common.dto.BaseParam; |
5 | 5 |
import kr.co.takensoft.ai.system.common.idgen.service.IdgenService; |
6 | 6 |
import kr.co.takensoft.ai.system.feedback.dao.FeedbackDAO; |
7 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO; |
|
7 | 8 |
import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO; |
9 |
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO; |
|
8 | 10 |
import kr.co.takensoft.ai.system.feedback.dto.InsertFeedbackDTO; |
9 | 11 |
import kr.co.takensoft.ai.system.feedback.service.FeedbackService; |
10 | 12 |
import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO; |
... | ... | @@ -102,4 +104,28 @@ |
102 | 104 |
throw e; |
103 | 105 |
} |
104 | 106 |
} |
107 |
+ |
|
108 |
+ /** |
|
109 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
110 |
+ * @return List<FeedbackCountDTO> - 미확인 피드백 개수를 담은 DTO 객체 리스트 |
|
111 |
+ * |
|
112 |
+ * 피드백 알림 목록 조회 (미확인 피드백 목록 조회) |
|
113 |
+ */ |
|
114 |
+ @Override |
|
115 |
+ public List<FeedbackCountDTO> getUncheckedFeedbackCountsByProject(BaseParam request) { |
|
116 |
+ |
|
117 |
+ return feedbackDAO.countUncheckedFeedbacks(request.getMemberId()); |
|
118 |
+ } |
|
119 |
+ |
|
120 |
+ /** |
|
121 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
122 |
+ * @return FeedbackSummaryDTO - 피드백 개수 요약 결과 |
|
123 |
+ * |
|
124 |
+ * 일주일 간 피드백 개수 조회 |
|
125 |
+ */ |
|
126 |
+ @Override |
|
127 |
+ public FeedbackSummaryDTO findFeedbackSummary(BaseParam request) { |
|
128 |
+ |
|
129 |
+ return feedbackDAO.countWeeklyFeedbacks(request.getMemberId()); |
|
130 |
+ } |
|
105 | 131 |
} |
--- src/main/java/kr/co/takensoft/ai/system/feedback/web/FeedbackController.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/web/FeedbackController.java
... | ... | @@ -68,4 +68,30 @@ |
68 | 68 |
return new ResponseEntity<>(result, HttpStatus.OK); |
69 | 69 |
} |
70 | 70 |
|
71 |
+ /** |
|
72 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
73 |
+ * @return ResponseEntity - 미확인 피드백 개수 결과를 포함하는 응답 |
|
74 |
+ * |
|
75 |
+ * 미확인 피드백 목록 조회 |
|
76 |
+ */ |
|
77 |
+ @PostMapping("/feedback/findUncheckedFeedbacks.json") |
|
78 |
+ public ResponseEntity<?> findUncheckedFeedbacks(@RequestBody BaseParam request) { |
|
79 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
80 |
+ result.put("result", feedbackService.getUncheckedFeedbackCountsByProject(request)); |
|
81 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
82 |
+ } |
|
83 |
+ |
|
84 |
+ /** |
|
85 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
86 |
+ * @return ResponseEntity - 피드백 개수 요약 결과를 포함하는 응답 |
|
87 |
+ * |
|
88 |
+ * 일주일 간 피드백 개수 조회 |
|
89 |
+ */ |
|
90 |
+ @PostMapping("/feedback/findFeedbackSummary.json") |
|
91 |
+ public ResponseEntity<?> findFeedbackSummary(@RequestBody BaseParam request) { |
|
92 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
93 |
+ result.put("result", feedbackService.findFeedbackSummary(request)); |
|
94 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
95 |
+ } |
|
96 |
+ |
|
71 | 97 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
... | ... | @@ -39,6 +39,7 @@ |
39 | 39 |
|
40 | 40 |
try { |
41 | 41 |
String projectMemberId = projectMemberIdgn.getNextStringId(); // 프로젝트 참여자 구분 아이디 생성 |
42 |
+ System.out.println("프로젝트 참여자 아이디 생성: " + projectMemberId); |
|
42 | 43 |
ProjectMemberVO projectMemberVO = new ProjectMemberVO(projectMemberId, projectGroupId, memberId, isOwner); |
43 | 44 |
return projectMemberDAO.saveProjectMember(projectMemberVO); |
44 | 45 |
} catch (Exception e) { |
--- src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
+++ src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
... | ... | @@ -101,6 +101,11 @@ |
101 | 101 |
WHERE f.use_at = 'Y' |
102 | 102 |
</select> |
103 | 103 |
|
104 |
+ <!-- |
|
105 |
+ 작 성 자 : 박현정 |
|
106 |
+ 작 성 일 : 2025.07.16 |
|
107 |
+ 내 용 : 피드백 확인 |
|
108 |
+ --> |
|
104 | 109 |
<update id="setFeedbackCheck" parameterType="String"> |
105 | 110 |
UPDATE feedback |
106 | 111 |
<set> |
... | ... | @@ -111,4 +116,37 @@ |
111 | 116 |
AND use_at = 'Y' |
112 | 117 |
</update> |
113 | 118 |
|
119 |
+ <!-- |
|
120 |
+ 작 성 자 : 박현정 |
|
121 |
+ 작 성 일 : 2025.08.04 |
|
122 |
+ 내 용 : 확인 안 된 피드백 개수 조회 |
|
123 |
+ --> |
|
124 |
+ <select id="countUncheckedFeedbacks" resultType="FeedbackCountDTO" parameterType="String"> |
|
125 |
+ SELECT f.project_group_id, |
|
126 |
+ p.project_name, |
|
127 |
+ COUNT (f.feedback_id) AS un_checked_feedback_cnt |
|
128 |
+ FROM feedback f |
|
129 |
+ INNER JOIN project_member pm ON f.project_group_id = pm.project_group_id AND pm.member_id = #{memberId} |
|
130 |
+ LEFT JOIN project p ON f.project_group_id = p.project_group_id AND p.is_main = 'Y' |
|
131 |
+ WHERE f.use_at = 'Y' |
|
132 |
+ AND f.is_checked = 'N' |
|
133 |
+ GROUP BY f.project_group_id, p.project_name |
|
134 |
+ </select> |
|
135 |
+ |
|
136 |
+ <!-- |
|
137 |
+ 작 성 자 : 박현정 |
|
138 |
+ 작 성 일 : 2025.08.04 |
|
139 |
+ 내 용 : 일주일 간 피드백 통계 조회 |
|
140 |
+ --> |
|
141 |
+ <select id="countWeeklyFeedbacks" resultType="FeedbackSummaryDTO" parameterType="String"> |
|
142 |
+ SELECT |
|
143 |
+ COUNT(*) AS total_count, |
|
144 |
+ COUNT(CASE WHEN is_checked = 'N' THEN 1 END) AS unchecked_count, |
|
145 |
+ COUNT(CASE WHEN is_checked = 'Y' THEN 1 END) AS checked_count |
|
146 |
+ FROM feedback f |
|
147 |
+ INNER JOIN project_member pm ON f.project_group_id = pm.project_group_id AND pm.member_id = #{memberId} |
|
148 |
+ WHERE f.use_at = 'Y' |
|
149 |
+ AND f.created_at >= CURRENT_DATE - INTERVAL '7 day' |
|
150 |
+ </select> |
|
151 |
+ |
|
114 | 152 |
</mapper>(파일 끝에 줄바꿈 문자 없음) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?