26
26
import java .util .stream .Collectors ;
27
27
28
28
import static inha .git .common .BaseEntity .State .ACTIVE ;
29
+ import static inha .git .common .Constant .*;
29
30
import static inha .git .common .code .status .ErrorStatus .EXCEL_CREATE_ERROR ;
30
31
31
32
/**
38
39
public class StatisticsExcelServiceImpl implements StatisticsExcelService {
39
40
40
41
private final ProjectJpaRepository projectJpaRepository ;
41
- private static final String OSS_PROJECT_URL = "https://oss.inha.ac.kr/project/detail/" ;
42
+
43
+ private static final String [] headers = {
44
+ "순번" , "단과대" , "학과" , "학번" , "이름" , "I-FOSS 제목" ,
45
+ "학기" , "카테고리" , "분야" , "저장소 타입" , "링크" , "업로드 날짜"
46
+ };
42
47
43
48
@ Override
44
- public void exportToExcelFile (HttpServletResponse response , StatisticsType statisticsType , Integer filterId ) {
49
+ public void exportToExcelFile (HttpServletResponse response , StatisticsType statisticsType , Integer filterId , Integer semesterId ) {
45
50
try (Workbook workbook = new XSSFWorkbook ()) {
46
- Sheet sheet = workbook .createSheet ("프로젝트 통계" );
51
+ Sheet sheet = workbook .createSheet (I_FOSS_STATISTICS );
47
52
48
53
Row headerRow = sheet .createRow (0 );
49
54
createHeaders (headerRow );
50
55
51
- List <Project > projects = getProjectsByStatisticsType (statisticsType , filterId );
56
+ List <Project > projects = getProjectsByStatisticsType (statisticsType , filterId , semesterId );
52
57
writeProjectData (sheet , projects );
53
58
setColumnWidths (sheet );
54
59
writeToResponse (workbook , response );
@@ -59,10 +64,7 @@ public void exportToExcelFile(HttpServletResponse response, StatisticsType stati
59
64
}
60
65
61
66
private void createHeaders (Row headerRow ) {
62
- String [] headers = {
63
- "순번" , "단과대" , "학과" , "학번" , "이름" , "프로젝트 제목" ,
64
- "학기" , "카테고리" , "분야" , "저장소 타입" , "링크" , "생성 날짜"
65
- };
67
+
66
68
67
69
CellStyle headerStyle = createHeaderStyle (headerRow .getSheet ().getWorkbook ());
68
70
@@ -73,12 +75,12 @@ private void createHeaders(Row headerRow) {
73
75
}
74
76
}
75
77
76
- private List <Project > getProjectsByStatisticsType (StatisticsType type , Integer filterId ) {
78
+ private List <Project > getProjectsByStatisticsType (StatisticsType type , Integer filterId , Integer semesterId ) {
77
79
List <Project > projects = switch (type ) {
78
- case TOTAL -> projectJpaRepository .findAllByState (ACTIVE );
79
- case COLLEGE -> projectJpaRepository .findAllByUserCollegeIdAndState (filterId , ACTIVE );
80
- case DEPARTMENT -> projectJpaRepository .findAllByUserDepartmentIdAndState (filterId , ACTIVE );
81
- case USER -> projectJpaRepository .findAllByUserIdAndState (filterId , ACTIVE );
80
+ case TOTAL -> projectJpaRepository .findAllByState (semesterId , ACTIVE );
81
+ case COLLEGE -> projectJpaRepository .findAllByUserCollegeIdAndState (filterId , semesterId , ACTIVE );
82
+ case DEPARTMENT -> projectJpaRepository .findAllByUserDepartmentIdAndState (filterId , semesterId , ACTIVE );
83
+ case USER -> projectJpaRepository .findAllByUserIdAndState (filterId , semesterId , ACTIVE );
82
84
};
83
85
84
86
if (!projects .isEmpty ()) {
@@ -142,7 +144,7 @@ private String getFieldNames(Project project) {
142
144
143
145
private String getProjectLink (Project project ) {
144
146
return project .getRepoName () != null ?
145
- "https://github.com/" + project .getRepoName () :
147
+ GITHUB_URL + project .getRepoName () :
146
148
OSS_PROJECT_URL + project .getId ();
147
149
}
148
150
@@ -158,19 +160,19 @@ private CellStyle createHeaderStyle(Workbook workbook) {
158
160
}
159
161
160
162
private void setColumnWidths (Sheet sheet ) {
161
- for (int i = 0 ; i < 12 ; i ++) {
163
+ for (int i = 0 ; i < headers . length ; i ++) {
162
164
sheet .autoSizeColumn (i );
163
165
}
164
166
}
165
167
166
168
private void writeToResponse (Workbook workbook , HttpServletResponse response ) throws IOException {
167
- String fileName = "I-OSS_Statistics_" +
169
+ String fileName = I_FOSS_STATISTICS + '-' +
168
170
LocalDateTime .now ().format (DateTimeFormatter .ofPattern ("yyyy-MM-dd-HH-mm-ss" )) +
169
171
".xlsx" ;
170
172
171
173
response .setContentType ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" );
172
174
response .setHeader ("Content-Disposition" , "attachment; filename=" +
173
- URLEncoder .encode (fileName , StandardCharsets .UTF_8 . name () ));
175
+ URLEncoder .encode (fileName , StandardCharsets .UTF_8 ));
174
176
175
177
try (ServletOutputStream outputStream = response .getOutputStream ()) {
176
178
workbook .write (outputStream );
0 commit comments