Skip to content

Commit bb8dcc8

Browse files
committed
fix: 엑셀 파일 단계, 상태 추가
1 parent bbcae75 commit bb8dcc8

File tree

4 files changed

+113
-29
lines changed

4 files changed

+113
-29
lines changed

aics-domain/src/main/java/kgu/developers/domain/graduationUser/application/query/GraduationUserQueryService.java

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package kgu.developers.domain.graduationUser.application.query;
22

33
import kgu.developers.common.response.PaginatedListResponse;
4+
import kgu.developers.domain.certificate.domain.CertificateRepository;
45
import kgu.developers.domain.graduationUser.domain.GraduationType;
56
import kgu.developers.domain.graduationUser.domain.GraduationUser;
67
import kgu.developers.domain.graduationUser.domain.GraduationUserExcel;
78
import kgu.developers.domain.graduationUser.domain.GraduationUserRepository;
89
import kgu.developers.domain.graduationUser.exception.GraduationUserNotFoundException;
10+
import kgu.developers.domain.graduationUser.infrastructure.excel.GraduationUserExcelRow;
11+
import kgu.developers.domain.thesis.domain.ThesisRepository;
912
import lombok.RequiredArgsConstructor;
1013
import org.springframework.data.domain.Pageable;
1114
import org.springframework.stereotype.Service;
@@ -18,6 +21,8 @@
1821
@Transactional(readOnly = true)
1922
public class GraduationUserQueryService {
2023
private final GraduationUserRepository graduationUserRepository;
24+
private final ThesisRepository thesisRepository;
25+
private final CertificateRepository certificateRepository;
2126
private final GraduationUserExcel graduationUserExcel;
2227

2328
public GraduationUser getById(Long graduationUserId) {
@@ -31,7 +36,68 @@ public PaginatedListResponse<GraduationUser> getGraduationUsersByNameAndGraduati
3136

3237
public byte[] getGraduationUsersExcelByGraduationType(GraduationType graduationType) {
3338
List<GraduationUser> graduationUsers = graduationUserRepository.findAllByGraduationTypeOrderByIdAsc(graduationType);
34-
return graduationUserExcel.generate(graduationUsers); //TODO: 추후 Approval 여부를 함께 넘겨주어야 함
39+
40+
List<GraduationUserExcelRow> graduationUserExcelRows = graduationUsers.stream()
41+
.map(this::getGraduationUserExcelRow)
42+
.toList();
43+
44+
return graduationUserExcel.generate(graduationUserExcelRows);
45+
}
46+
47+
private GraduationUserExcelRow getGraduationUserExcelRow(GraduationUser graduationUser) {
48+
return GraduationUserExcelRow.from(graduationUser, determineStage(graduationUser), determineStatus(graduationUser));
49+
}
50+
51+
private String determineStage(GraduationUser user) {
52+
if (user.getGraduationType() == null) {
53+
return "졸업 유형 미제출";
54+
}
55+
56+
if (user.getAdvisorProfessor() == null) {
57+
return "지도교수 미배정";
58+
}
59+
60+
if (user.getGraduationType() == GraduationType.THESIS) {
61+
if (user.getMidThesisId() == null) {
62+
return "중간 논문 미제출";
63+
}
64+
if (user.getFinalThesisId() == null) {
65+
return "최종 논문 미제출";
66+
}
67+
return "최종 논문 제출 완료";
68+
}
69+
else if (user.getGraduationType() == GraduationType.CERTIFICATE) {
70+
if (user.getCertificateId() == null) {
71+
return "자격증 미제출";
72+
}
73+
return "자격증 제출 완료";
74+
}
75+
76+
return "졸업 요건 충족";
77+
}
78+
79+
private String determineStatus(GraduationUser user) {
80+
if (user.getGraduationType() == GraduationType.THESIS) {
81+
if (user.getFinalThesisId() != null) {
82+
return thesisRepository.findApprovalByIdAndDeletedAtIsNull(user.getFinalThesisId())
83+
.map(approved -> approved ? "승인" : "미승인")
84+
.orElse("미승인");
85+
}
86+
if (user.getMidThesisId() != null) {
87+
return thesisRepository.findApprovalByIdAndDeletedAtIsNull(user.getMidThesisId())
88+
.map(approved -> approved ? "승인" : "미승인")
89+
.orElse("미승인");
90+
}
91+
}
92+
else if (user.getGraduationType() == GraduationType.CERTIFICATE) {
93+
if (user.getCertificateId() != null) {
94+
return certificateRepository.findApprovalByIdAndDeletedAtIsNull(user.getCertificateId())
95+
.map(approved -> approved ? "승인" : "미승인")
96+
.orElse("미승인");
97+
}
98+
}
99+
100+
return "대기";
35101
}
36102

37103
public GraduationUser getByStudentId(String studentId) {
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package kgu.developers.domain.graduationUser.infrastructure.excel;
22

3-
import kgu.developers.domain.graduationUser.domain.GraduationUser;
43
import lombok.Getter;
54
import lombok.RequiredArgsConstructor;
65

@@ -9,14 +8,17 @@
98
@Getter
109
@RequiredArgsConstructor
1110
public enum GraduationUserExcelColumn {
12-
STUDENT_ID("학번", GraduationUser::getUserId,4000),
13-
NAME("이름", GraduationUser::getName,4000),
14-
DEPARTMENT("학과", GraduationUser::getDepartment,5000),
15-
GRADUATION_DATE("졸업 날짜", GraduationUser::getGraduationDate,4000),
16-
GRADUATION_TYPE("졸업 유형", GraduationUser::getGraduationType,4000),
17-
ADVISOR("지도교수", GraduationUser::getAdvisorProfessor,4000);
11+
STUDENT_ID("학번", GraduationUserExcelRow::userId,4000),
12+
NAME("이름", GraduationUserExcelRow::name,4000),
13+
DEPARTMENT("학과", GraduationUserExcelRow::department,5000),
14+
GRADUATION_DATE("졸업 날짜", GraduationUserExcelRow::graduationDate,4000),
15+
GRADUATION_TYPE("졸업 유형", GraduationUserExcelRow::graduationType,4000),
16+
ADVISOR("지도교수", GraduationUserExcelRow::advisorProfessor,4000),
17+
CURRENT_STAGE("단계", GraduationUserExcelRow::currentStage, 5000),
18+
APPROVAL_STATUS("상태", GraduationUserExcelRow::approvalStatus, 4000),
19+
;
1820

1921
private final String headerName;
20-
private final Function<GraduationUser, Object> valueExtractor;
22+
private final Function<GraduationUserExcelRow, Object> valueExtractor;
2123
private final int width;
2224
}

aics-domain/src/main/java/kgu/developers/domain/graduationUser/infrastructure/excel/GraduationUserExcelImpl.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package kgu.developers.domain.graduationUser.infrastructure.excel;
22

3-
import kgu.developers.domain.graduationUser.domain.GraduationUser;
43
import kgu.developers.domain.graduationUser.domain.GraduationUserExcel;
54
import kgu.developers.domain.graduationUser.exception.GraduationUserExcelGenerationFailed;
65
import lombok.RequiredArgsConstructor;
76
import org.apache.poi.ss.usermodel.Cell;
8-
import org.apache.poi.ss.usermodel.CellStyle;
9-
import org.apache.poi.ss.usermodel.FillPatternType;
10-
import org.apache.poi.ss.usermodel.IndexedColors;
117
import org.apache.poi.ss.usermodel.Row;
128
import org.apache.poi.ss.usermodel.Sheet;
139
import org.apache.poi.ss.usermodel.Workbook;
@@ -27,14 +23,13 @@ public class GraduationUserExcelImpl implements GraduationUserExcel {
2723
private static final String SHEET_NAME = "졸업 대상자";
2824

2925
@Override
30-
public byte[] generate(List<GraduationUser> graduationUsers) {
26+
public byte[] generate(List<GraduationUserExcelRow> graduationUsers) {
3127
try (Workbook workbook = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE);
32-
ByteArrayOutputStream out = new ByteArrayOutputStream();
28+
ByteArrayOutputStream out = new ByteArrayOutputStream()
3329
) {
3430
Sheet sheet = workbook.createSheet(SHEET_NAME);
3531

36-
CellStyle headerStyle = createHeaderStyle(workbook);
37-
createHeaderRow(sheet, headerStyle);
32+
createHeaderRow(sheet);
3833
populateDataRows(sheet, graduationUsers);
3934

4035
workbook.write(out);
@@ -44,31 +39,22 @@ public byte[] generate(List<GraduationUser> graduationUsers) {
4439
}
4540
}
4641

47-
private CellStyle createHeaderStyle(Workbook workbook) {
48-
CellStyle headerStyle = workbook.createCellStyle();
49-
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
50-
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
51-
52-
return headerStyle;
53-
}
54-
55-
private void createHeaderRow(Sheet sheet, CellStyle style) {
42+
private void createHeaderRow(Sheet sheet) {
5643
Row header = sheet.createRow(HEADER_ROW_INDEX);
5744
GraduationUserExcelColumn[] columns = GraduationUserExcelColumn.values();
5845

5946
for (int i = 0; i < columns.length; i++) {
6047
Cell cell = header.createCell(i);
6148
cell.setCellValue(columns[i].getHeaderName());
62-
cell.setCellStyle(style);
6349
sheet.setColumnWidth(i, columns[i].getWidth());
6450
}
6551
}
6652

67-
private void populateDataRows(Sheet sheet, List<GraduationUser> users) {
53+
private void populateDataRows(Sheet sheet, List<GraduationUserExcelRow> users) {
6854
GraduationUserExcelColumn[] columns = GraduationUserExcelColumn.values();
6955
int rowNum = DATA_START_ROW_INDEX;
7056

71-
for (GraduationUser user : users) {
57+
for (GraduationUserExcelRow user : users) {
7258
Row row = sheet.createRow(rowNum++);
7359
for (int i = 0; i < columns.length; i++) {
7460
Object value = columns[i].getValueExtractor().apply(user);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package kgu.developers.domain.graduationUser.infrastructure.excel;
2+
3+
import kgu.developers.domain.graduationUser.domain.GraduationUser;
4+
import lombok.Builder;
5+
6+
import java.time.LocalDate;
7+
8+
@Builder
9+
public record GraduationUserExcelRow(
10+
String userId,
11+
String name,
12+
String department,
13+
LocalDate graduationDate,
14+
String graduationType,
15+
String advisorProfessor,
16+
String currentStage,
17+
String approvalStatus
18+
) {
19+
public static GraduationUserExcelRow from(GraduationUser graduationUser, String stage, String status) {
20+
return GraduationUserExcelRow.builder()
21+
.userId(graduationUser.getUserId())
22+
.name(graduationUser.getName())
23+
.department(graduationUser.getDepartment())
24+
.graduationDate(graduationUser.getGraduationDate())
25+
.graduationType(graduationUser.getGraduationType().getDescription())
26+
.currentStage(stage)
27+
.approvalStatus(status)
28+
.build();
29+
}
30+
}

0 commit comments

Comments
 (0)