- Spring을 활용하여 그룹웨어시스템의 휴가결재에 대해 간단하게 구현해보았습니다.
- 개인이 휴가 신청서를 작성할 수 있습니다.
- 신청하는 휴가에 대한 결재선을 지정할 수 있습니다.
- 휴가 결재는 순차적으로 이루어지며 부서번호가 낮고 직급이 낮은 순부터 결재가 진행됩니다.
- 최종 결재가가 승인하면 휴가 신청이 승인됩니다.
- 로그인 기능은 구현하지 않아 홈 URL Path variable에 유저 id를 추가하면
이후 세션에 저장되어 프로세스가 진행됩니다.
- Back: Spring Boot, Spring JPA, Mysql
- Front: html, css, jsp
- 협업툴: Notion, Slack
2024/8/9 ~ 2024/8/29
![image](https://private-user-images.githubusercontent.com/111233054/367597291-a49dbcf2-9fb5-48f7-a1ba-01c637defa5b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDcwMjIsIm5iZiI6MTczOTIwNjcyMiwicGF0aCI6Ii8xMTEyMzMwNTQvMzY3NTk3MjkxLWE0OWRiY2YyLTlmYjUtNDhmNy1hMWJhLTAxYzYzN2RlZmE1Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNjU4NDJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05MzMwNzA5NjM3NjAxZWNmYTM2NmQ3YmQzYjc1ODgyM2NlZDc4MGI4N2RiMjU4NDUxZWY5MzZjZjlhOTFmMWI0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.KF3Dbkfpt31rvccgDeNaA5-j28Bqmj82YrJqTuRPsto)
- 결재선 처리 로직에 대한 고민이 많았습니다.
- N명의 사람을 선택해도 원하는 순서대로 결재선이 구성되어야 했습니다.
- DB에서는 결재 상태와 순번 컬럼을 두었습니다.
- 휴가 신청시 다음과 같은 과정을 거쳤습니다.
// 부서 번호 및 직급 순서로 정렬
approverList.sort((a1, a2) -> {
...
});
// acnt: 결재순번, astate: 결재상태
int acnt = 0;
for (Approver approver : approverList) {
approver.setAcnt(acnt);
if (acnt == approverList.size()-1) {
approver.setAstate(ApproveType.MYTURN);
} else {
approver.setAstate(ApproveType.NOTYET);
}
acnt++;
}
- 이후 순번을 따라서 결재 상태를 바꿔주는 처리를 해주어 결재선을 구현했습니다.