본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

경력년차 계산하기 insert, update

경력년차는

insertCohistory 회사정보를 insert하거나 update할때 동시에 실행하도록 한다.

 public void insertCoHistory(List<MpVO.CoHistory> coHistoryList, int empId) {
		 for (MpVO.CoHistory coHistory : coHistoryList) {
			 System.out.println("coHistory! -> for문으로 출력했습니다 "+coHistory + "이건 아이디" + empId);
			 mpMapper.insertCoHistory(coHistory, empId);
		 }
		 mpMapper.updateExpYears(empId);
		 mpMapper.updateExpGrade(empId);
	    }
	 public void updateCoHistory(List<MpVO.CoHistory> coHistoryList, int empId) {
		 for (MpVO.CoHistory coHistory : coHistoryList) {
			 System.out.println("coHistory! -> for문으로 출력했습니다 "+coHistory + "이건 아이디" + empId);
			 if(coHistory.getHistoryId() == 0) {
			 mpMapper.insertCoHistory(coHistory, empId);
			 }else {
			 mpMapper.updateCoHistory(coHistory, empId);
			 }
		 }
		 mpMapper.updateExpYears(empId);
		 mpMapper.updateExpGrade(empId);
	    }

 

 

 

전달받은 empid에 해당하는 사람의 년차를 계산하여 update할것이다.

void updateExpYears(int empId);

 

 

 

 

해당사람이 근무한 모든 회사의 co_join_date와 co_end_date의 날을 계산해

소수점을 찍어 년차계산을 완료한다.

<update id="updateExpYears" parameterType="java.util.Map">
	UPDATE emp_info
	SET EXP_YEARS = (
	    SELECT CONCAT(
	        FLOOR(SUM(TIMESTAMPDIFF(DAY, CO_JOIN_DATE, IFNULL(CO_END_DATE, CURDATE()))) / 365),
	        '.',
	        FLOOR((SUM(TIMESTAMPDIFF(DAY, CO_JOIN_DATE, IFNULL(CO_END_DATE, CURDATE()))) % 365) / 30.44)
	    )
	    FROM emp_co_history
	    WHERE EMP_ID = #{empId}
	)
	</update>

 

 

 

하지만 이때, 1개월과 10개월의 차이가 없어짐으로

<update id="updateExpYears" parameterType="java.util.Map">
	UPDATE emp_info
	SET EXP_YEARS = (
	    SELECT CONCAT(
	        FLOOR(SUM(TIMESTAMPDIFF(DAY, CO_JOIN_DATE, IFNULL(CO_END_DATE, CURDATE()))) / 365),
	        '.',
	        LPAD(FLOOR((SUM(TIMESTAMPDIFF(DAY, CO_JOIN_DATE, IFNULL(CO_END_DATE, CURDATE()))) % 365) / 30.44), 2, '0')
	    )
	    FROM emp_co_history
	    WHERE EMP_ID = #{empId}
	)
	WHERE EMP_ID = #{empId}
	</update>

 

10을 대비해 0을 추가하도록하여 두자리수를 맞춘다.