인사팀 기능구현(1)

2023. 9. 20. 13:47·ERP Project

모든 코드와 SQL을 다 게시할 순 없기 때문에, 에러와 에러 해결 과정을 위주로 포스팅을 하려고 한다.

 

 

 

 

먼저, 인사팀에서 가능한 기능으로는 

팀별로 소속된 직원들의 리스트를 가져올 수 있어야 한다. 따라서 해당되는 테이블에 대해 CRUD는 기본적으로 이루어져야 한다.

 

다음은 직원별 휴가관리이다. 생각해야 할 것은 

첫 번째, 휴가 종류.

휴가는 연차, 반차 등의 무급휴가 뿐만 아니라 경조사, 병가 등 유급휴가도 존재하고 휴가별로 휴가의 비율이 연차는 1일 반차는 0.5일 등으로 나눠지기 때문에 휴가종류라는 테이블을 따로 만들어 관리를 하였다. 

 

두 번째, 주말 및 공휴일.

보통 휴가를 사용할 때는 금요일과 월요일을 붙여 주말을 포함해서 쓰는 경우가 많을 것이라고 생각한다. 

예를 들어, 9월 23일과 24일이 토요일, 일요일이라면 22일부터 25일로 휴가를 사용했을 때 DB상에서는 금요일과 월요일에 해당되는 2일만 -가 돼야 한다.

또한 공휴일이 포함되어 있어도 마찬가지였다.

 

공휴일을 관리하기 위해서는 공휴일 테이블을 만들면 간단하지만 이때의 문제는 음력 공휴일이였다.

찾아보니 음력 공휴일은 추석과 구정이 있는데, 음력을 양력으로 변환해 주는 라이브러리가 있었다.

 

사용방법은

https://comebackworld.tistory.com/58

 

[JAVA] 음력 양력 변환 라이브러리

1. 음력변환 라이브러리 추가 설, 추석과 같은 음력 공휴일을 처리하기 위해 음력변환 라이브러리를 추가해 준다. com.ibm.icu icu4j 4.0.1 1. 음력 공휴일 체크 아래는 음력 공휴일을 체크하는 소스이

comebackworld.tistory.com

를 참고하면 된다.

 

따라서 주말과 공휴일을 참조하여 직원별 잔여휴가를 계산할 때 사용한 로직으로

<select id="selectLocal" parameterType="map" resultType="double">
	SELECT employee2_holiday - (
	select eh.hdkind_days * (SELECT 
    COUNT(DATE_ADD(#{attendance_start}, INTERVAL seq.seq DAY)) - 
    (SELECT COUNT(*) FROM erp_localdate WHERE erp_localdate.localdate_date BETWEEN #{attendance_start} AND #{attendance_end}) AS date_between
    FROM (
    SELECT (t4.i*1000 + t3.i*100 + t2.i*10 + t1.i) AS seq
    FROM
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
    ) seq
    WHERE DATE_ADD(#{attendance_start}, INTERVAL seq.seq DAY) &lt;= #{attendance_end}) from erp_hdkind eh where eh.hdkind_no = #{hdkind_no}
    )
    FROM erp_employee2 WHERE employee2_no = #{employee2_no}
</select>

여기서 employee2_holiday라는 컬럼은 잔여휴가 컬럼이며 eh.hdkind_days는 휴가종류별 휴가일수의 비율이다. 
이렇게 내가 사용한 휴가시작일과 종료일 사이에 공휴일이 들어있는지 판별을 하고 들어있으면 그만큼 count를 해서 차감시키지 않는다.

그 후에 자바에서 

 

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		
		Date start = null;
		Date end = null;
		
		try {
			start = format.parse(attendance_start);
			end = format.parse(attendance_end);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		int SATURDAY = Calendar.SATURDAY;
		int SUNDAY = Calendar.SUNDAY;
		
		Calendar calendar = Calendar.getInstance();
		
		calendar.setTime(start);
		
		int weekendDays = 0;
		
		while (!calendar.getTime().after(end)) {
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            if (dayOfWeek == SATURDAY || dayOfWeek == SUNDAY) {
                weekendDays++;
            }
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
double employee2_holiday = b5.selectLocal(map) - weekendDays;

 

주말까지 제외한 직원의 잔여휴가를 계산할 수 있었다. 이때 SQL에서 DATE의 자료형이나 

SimpleDateFormat을 사용할 때 typemismatchException이 발생되지 않도록 파라미터값 자료형에 유의하도록 한다.

저작자표시 (새창열림)

'ERP Project' 카테고리의 다른 글

재무팀 기능구현(1)  (0) 2023.09.20
인사팀 기능구현(2)  (0) 2023.09.20
역할 분담  (0) 2023.09.20
뷰페이지 구성 에러 해결(2)  (0) 2023.07.28
뷰페이지 구성 에러 해결(1)  (0) 2023.07.28
'ERP Project' 카테고리의 다른 글
  • 재무팀 기능구현(1)
  • 인사팀 기능구현(2)
  • 역할 분담
  • 뷰페이지 구성 에러 해결(2)
kwh_coding
kwh_coding
성장하는 괴물 성괴 김우형
  • kwh_coding
    코딩 일기
    kwh_coding
  • 전체
    오늘
    어제
    • 분류 전체보기
      • JAVA
      • JavaScript
        • Node
        • React
      • PYTHON
      • GitHub
      • DJANGO
      • ERP Project
      • NAVER CLOUD Web DevOps
      • 자격증
        • SQLD
        • 정보처리기사
        • ADsP
      • 코딩테스트
        • 프로그래머스 Lv0
        • 프로그래머스 Lv1
      • Spring
      • Tools
        • Postman
        • eGov
      • WEB
      • CS
  • 블로그 메뉴

    • 홈
    • GitHub
    • Notion
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    django
    eGov
    annotation
    private network
    SQLD
    javascript
    brycpt
    Java
    해시 암호화
    git
    코테
    jsp
    코딩
    Python
    web
    정보처리기사
    spring
    github
    CORS
    Tomcat
    프로그래머스
    RDBMS
    gitbash
    React
    js
    코딩테스트
    AdSP
    node
    html
    Postman
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kwh_coding
인사팀 기능구현(1)
상단으로

티스토리툴바