6/23
1. if 간소화 ( || || || ) ; -> 코드가 훨씬 간결해짐. a or b or c a가 true면 뒤쪽은 확인안함.
2. actionMap, bindUI는 함수로 간결하게 작성하고, 비즈니스 로직은 함수화 하도록 한다.
3. array 지속적 스캔 -> map을 활용 할 것.
4. 하나하나 하면서 커밋하는 습관을 가질 것.
마리아DB root/tiger
******************** 부서, 구성원 관리 정의 ********************
2-1. 사원이 처음 입사하고 등록시 history 테이블에 무조건 추가하게 된다.
-> 부서장급을 추가하면 조직도에 뜨게된다.
- 단, 해당 추가된 사원이 부서장일 경우, DEPT 테이블 에서도 부서장으로 등록이 되어 있어야함.
- 추가된 사원이 팀원 급일 경우, --> DEPT 테이블과는 무관함.
2-2. 부서관리에서 부서를 생성 후 부서장 등록시,
-> 해당 부서장 emp_no의 history_enddate 가 없는 이력을 찾아서 history_enddate를 sysdate로 넣어주고(update), 새로운 부서의 이력을 insert 해준다.
-> 이미 부서장(사원)의 history는 만들어진 상태이므로 이력이 있을수 밖에 없다.
-> update의 경우 : 1) 부서장 변경 -> history 종료 insert 필요
2) 종료일자 변경(부서 폐쇄) -> history 종료 insert 필요
그 외에는 dept 테이블만 update 처리
3) 상위부서변경 -> 상위부서코드만 변경
******************** SQL ********************
-- 시스템 포맷터 확인
SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT';
-- 세션 값 수정
alter session set nls_date_language='KOREAN';
-- 조인 예시
SELECT a.emp_cd
, DECODE(a.position, '임원', a.emp_cd, b.emp_cd) up_emp_cd
FROM t_emp_info a
INNER JOIN
(SELECT o.seq_dept
, REGEXP_SUBSTR(
RTRIM(SYS_CONNECT_BY_PATH(e.emp_cd, ' '))
, '[^ ]+$') emp_cd
FROM t_organ_tree o
LEFT OUTER JOIN
(SELECT seq_dept
, MIN(emp_cd) emp_cd -- 부서 대표 임원 1명만
FROM t_emp_info
WHERE position = '임원'
GROUP BY seq_dept
) e
ON o.seq_dept = e.seq_dept
START WITH o.up_seq_dept IS NULL
CONNECT BY PRIOR o.seq_dept = o.up_seq_dept
) b
ON a.seq_dept = b.seq_dept
ORDER BY emp_cd
;
-- 소속부서 이력 가져오는 쿼리
select d.dept_name || '(' || history_startdate ||'~'|| history_enddate || ')'
from history h, dept d
where h.dept_no = d.dept_no
and h.emp_no = 20009
order by history_no
-- t로 묶어서 쿼리 조회하는 예시
select d.dept_name
from dept d, (select h.dept_no
from dept d, history h
where d.dept_no = h.dept_no) t
where d.dept_no = t.dept_no
-- 시간 차 구하는 쿼리
SELECT
(
to_date('2013-08-01 21:01', 'yyyy-mm-dd hh24:mi')
- to_date('2013-08-01 09:00', 'yyyy-mm-dd hh24:mi')
) * 24 -- 시간단위로변환
AS min_diff
FROM DUAL
-- interval 커럼에 차이 나오는 작동되는 쿼리
SELECT systimestamp - tm AS interval
, EXTRACT(DAY FROM systimestamp - tm) *24*60*60
+ EXTRACT(HOUR FROM systimestamp - tm) *60*60
+ EXTRACT(MINUTE FROM systimestamp - tm) *60
+ EXTRACT(SECOND FROM systimestamp - tm) AS second
FROM (SELECT TO_TIMESTAMP('20/02/28 09:40:33.751000000', 'yy/mm/dd hh24:mi:ss.ff') tm FROM dual)
-- 최종 이력 데이터에서 마지막 값 가져오는거 작동함
SELECT MAX(ATT_DATE) KEEP (DENSE_RANK LAST ORDER BY ATT_DATE)
FROM ATT
GROUP BY EMP_NO
******************** Review ********************
1. 조직도
- 직급의 크기 크게 > 완료★
- 전체적인 글씨크기 크게 -> 가독성 > 완료★
- 시트테마 적용(장차장님) > 완료★
-> 폰트패밀리로 변경(Arial,Tahoma,sans-serif)
2. 범례
- 기타 항목 추가하고, 전체인원 카운트도 포함시켜서 -> 완료★
4. att 데이터
-> 다른사람들도 세팅해놓아라.... -> 완료★
-> att db 데이터 장차장님께 전달(insert) -> 완료★ -> data.go.kr 에서 정보 확인(중소기업업체)
5. 조직도 팝업
-> 선 맞추기 -> 완료★
6. att(근태관리)
-> 사원선택 팝업 크기 조절 -> 완료★
-> 리셋버튼 없애기 -> 완료★
-> 조회 - 엑셀 - 추가 - 저장 버튼 순으로 바꾸기( 구성원관리, 부서관리도 해당) > 완료★
7. emp
-> 부서팝업 높이 체크 -> 완료★
8. dept
-> 부서명 좌측정렬 -> 완료★
-> 부서팝업 높이 체크 -> 완료★
-> 보조자 값 -> combo로(좌측 우측값으로 보여지게), 재직여부도 변경처리 완료 -> 완료★