경력년차는
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을 추가하도록하여 두자리수를 맞춘다.
'JAVA' 카테고리의 다른 글
생일에 따른 연령계산하기 insert, update (0) | 2024.01.08 |
---|---|
기술등급 계산하기 insert, update (0) | 2024.01.08 |
MessageFormat, 문자열을 정의하고 {0} index에 채워넣다 (0) | 2023.12.28 |
ChoiceFormat, limits와 grades를 설정해 등급추출하기 (0) | 2023.12.28 |
SimpleDateFormat, Date와 Calendar보다 쉽게 날짜 형식 지정하기 (0) | 2023.12.28 |