// 두 해의 데이터 리스트를 가져온다고 가정 (예: 1월과 6월 데이터)
List januaryGroups = getGroupData("20240101");
List juneGroups = getGroupData("20240601");
// 엑셀 시트에 출력 시작
for (GroupDTO januaryGroup : januaryGroups) {
boolean isMatched = false;
// 1월 데이터 출력
Row groupRow = sheet.createRow(rowCount++);
for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
switch (cellIndex) {
case 0 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getGroupName());
case 1 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getTotalAmount());
case 2 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getTotalPercentage());
}
}
// 6월 데이터와 매칭되는 그룹이 있는지 찾음
for (GroupDTO juneGroup : juneGroups) {
if (januaryGroup.getGroupName().equals(juneGroup.getGroupName())) {
// 6월 데이터 출력
for (int cellIndex = 3; cellIndex < 5; cellIndex++) {
switch (cellIndex) {
case 3 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalAmount());
case 4 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalPercentage());
}
}
// 항목 비교 및 출력
for (ItemDTO januaryItem : januaryGroup.getItems()) {
Row itemRow = sheet.createRow(rowCount++);
for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
switch (cellIndex) {
case 0 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getItemName());
case 1 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getAmountHeld());
case 2 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getPercentageHeld());
}
}
// 6월 데이터에서 동일 항목 찾기
for (ItemDTO juneItem : juneGroup.getItems()) {
if (januaryItem.getItemName().equals(juneItem.getItemName())) {
itemRow.createCell(3).setCellValue(juneItem.getAmountHeld());
itemRow.createCell(4).setCellValue(juneItem.getPercentageHeld());
break;
}
}
}
isMatched = true;
break;
}
}
// 만약 6월에 해당 그룹이 없으면 빈칸 출력
if (!isMatched) {
for (int cellIndex = 3; cellIndex < 5; cellIndex++) {
groupRow.createCell(cellIndex).setCellValue("");
}
}
}
// 6월 데이터 중 1월에 없는 그룹 출력
for (GroupDTO juneGroup : juneGroups) {
boolean isPresentInJanuary = false;
for (GroupDTO januaryGroup : januaryGroups) {
if (januaryGroup.getGroupName().equals(juneGroup.getGroupName())) {
isPresentInJanuary = true;
break;
}
}
if (!isPresentInJanuary) {
Row groupRow = sheet.createRow(rowCount++);
for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
switch (cellIndex) {
case 0 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getGroupName());
case 3 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalAmount());
case 4 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalPercentage());
}
}
// 6월 항목 출력
for (ItemDTO juneItem : juneGroup.getItems()) {
Row itemRow = sheet.createRow(rowCount++);
for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
switch (cellIndex) {
case 0 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getItemName());
case 3 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getAmountHeld());
case 4 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getPercentageHeld());
}
}
}
}
}