selectbox 정렬
This commit is contained in:
parent
674ced8c16
commit
c3cd6b3f5d
@ -84,94 +84,68 @@
|
|||||||
|
|
||||||
<!-- 사용자가 속한 프로젝트 조회 -->
|
<!-- 사용자가 속한 프로젝트 조회 -->
|
||||||
<select id="selectMemberProjects" resultType="io.company.localhost.common.dto.MapDto">
|
<select id="selectMemberProjects" resultType="io.company.localhost.common.dto.MapDto">
|
||||||
SELECT
|
SELECT
|
||||||
p.PROJCTSEQ,
|
p.PROJCTSEQ,
|
||||||
p.PROJCTNAM,
|
p.PROJCTNAM,
|
||||||
c.CMNCODNAM AS projctcolor,
|
c.CMNCODNAM AS projctcolor,
|
||||||
CASE
|
MAX(cm.PROJCTLVE) AS last_worked_project,
|
||||||
WHEN EXISTS ( -- 오늘 퇴근 기록이 있는지 확인 (퇴근 프로젝트 기준)
|
MAX(cm.COMMUTLVE) AS last_check_out_time,
|
||||||
SELECT 1
|
MAX(cm.COMMUTCMT) AS last_check_in_time
|
||||||
FROM commuters ct
|
FROM promember pm
|
||||||
WHERE ct.MEMBERSEQ = 4
|
JOIN netprojct p ON pm.PROJCTSEQ = p.PROJCTSEQ
|
||||||
AND ct.COMMUTDAY = CURDATE()
|
LEFT JOIN commoncod c ON p.PROJCTCOL = c.CMNCODVAL AND c.CMNCODYNP = '1'
|
||||||
AND ct.COMMUTLVE IS NOT NULL
|
LEFT JOIN commuters cm
|
||||||
AND ct.PROJCTLVE = p.PROJCTSEQ -- 퇴근 프로젝트 번호로 확인
|
ON pm.MEMBERSEQ = cm.MEMBERSEQ
|
||||||
) THEN 1 -- 오늘 퇴근: 오늘 해당 프로젝트로 퇴근했으면 최우선
|
AND (pm.PROJCTSEQ = cm.PROJCTSEQ OR pm.PROJCTSEQ = cm.PROJCTLVE)
|
||||||
WHEN EXISTS ( -- 오늘 출근 기록이 있고 퇴근 안 했는지 확인 (출근 프로젝트 기준)
|
WHERE pm.MEMBERSEQ = #{memberSeq}
|
||||||
SELECT 1
|
AND pm.PROJCTYON = '1'
|
||||||
FROM commuters ct
|
AND (p.PROJCTEND IS NULL OR p.PROJCTEND >= CURDATE())
|
||||||
WHERE ct.MEMBERSEQ = 4
|
GROUP BY p.PROJCTSEQ, p.PROJCTNAM, c.CMNCODNAM
|
||||||
AND ct.COMMUTDAY = CURDATE()
|
ORDER BY
|
||||||
AND ct.COMMUTCMT IS NOT NULL
|
/* 오늘 퇴근이 있는 프로젝트를 최우선 */
|
||||||
AND ct.COMMUTLVE IS NULL
|
CASE WHEN EXISTS (
|
||||||
AND ct.PROJCTSEQ = p.PROJCTSEQ
|
SELECT 1 FROM commuters
|
||||||
) THEN 2 -- 오늘 출근 (미퇴근): 출근했고 퇴근 안 했으면 두 번째 우선순위
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
WHEN ( -- 전날 퇴근 기록이 있는 프로젝트인지 확인 (퇴근 프로젝트 기준)
|
AND COMMUTDAY = CURDATE()
|
||||||
SELECT cl.PROJCTLVE -- 전날 퇴근한 프로젝트 ID
|
AND COMMUTLVE IS NOT NULL
|
||||||
FROM commuters cl
|
AND PROJCTLVE = p.PROJCTSEQ
|
||||||
WHERE cl.MEMBERSEQ = 4
|
) THEN 0 ELSE 1 END,
|
||||||
AND cl.COMMUTDAY = CURDATE() - INTERVAL '1' DAY
|
/* 오늘 출근이 있는 프로젝트를 두 번째 우선순위 */
|
||||||
AND cl.COMMUTLVE IS NOT NULL
|
CASE WHEN EXISTS (
|
||||||
AND cl.PROJCTLVE = p.PROJCTSEQ -- 퇴근 프로젝트 번호로 확인
|
SELECT 1 FROM commuters
|
||||||
ORDER BY cl.COMMUTLVE DESC
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
LIMIT 1
|
AND COMMUTDAY = CURDATE()
|
||||||
) IS NOT NULL THEN 3 -- 전날 퇴근: 전날 퇴근한 프로젝트 (세 번째 우선순위)
|
AND PROJCTSEQ = p.PROJCTSEQ
|
||||||
WHEN ( -- 전날 퇴근 기록은 없고 출근 기록만 있는 프로젝트인지 확인 (출근 프로젝트 기준)
|
) THEN 0 ELSE 1 END,
|
||||||
SELECT cc.PROJCTSEQ -- 전날 출근한 프로젝트 ID
|
/* 마지막 퇴근 프로젝트를 세 번째 우선순위 - 여기서 정확히 프로젝트별 최신 날짜를 확인 */
|
||||||
FROM commuters cc
|
CASE WHEN p.PROJCTSEQ IN (
|
||||||
WHERE cc.MEMBERSEQ = 4
|
SELECT PROJCTLVE
|
||||||
AND cc.COMMUTDAY = CURDATE() - INTERVAL '1' DAY
|
FROM commuters
|
||||||
AND cc.COMMUTLVE IS NULL
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
AND cc.PROJCTSEQ = p.PROJCTSEQ
|
AND COMMUTLVE IS NOT NULL
|
||||||
LIMIT 1
|
AND COMMUTDAY = (
|
||||||
) IS NOT NULL THEN 4 -- 전날 출근 (미퇴근): 전날 출근만 하고 퇴근 안 한 프로젝트 (네 번째 우선순위)
|
SELECT MAX(COMMUTDAY)
|
||||||
ELSE 5 -- 그 외의 경우 (가장 낮은 우선순위)
|
FROM commuters
|
||||||
END AS sort_group, -- 정렬 그룹 (숫자가 작을수록 우선순위 높음)
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
MAX(CASE -- 현재 체크인된 프로젝트 ID
|
AND COMMUTLVE IS NOT NULL
|
||||||
WHEN cm_today.COMMUTCMT IS NOT NULL
|
)
|
||||||
AND cm_today.COMMUTLVE IS NULL
|
) THEN 0 ELSE 1 END,
|
||||||
THEN cm_today.PROJCTSEQ
|
/* 마지막 출근 프로젝트를 네 번째 우선순위 */
|
||||||
ELSE NULL
|
CASE WHEN p.PROJCTSEQ IN (
|
||||||
END) AS current_check_in_project,
|
SELECT PROJCTSEQ
|
||||||
MAX(cm.PROJCTLVE) AS last_worked_project, -- 마지막으로 작업했던 프로젝트 ID (퇴근 기준)
|
FROM commuters
|
||||||
MAX(cm.COMMUTLVE) AS last_check_out_time, -- 마지막 퇴근 시간
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
MAX(cm.COMMUTCMT) AS last_check_in_time, -- 마지막 출근 시간
|
AND COMMUTDAY = (
|
||||||
(
|
SELECT MAX(COMMUTDAY)
|
||||||
SELECT cl.PROJCTLVE
|
FROM commuters
|
||||||
FROM commuters cl
|
WHERE MEMBERSEQ = #{memberSeq}
|
||||||
WHERE cl.MEMBERSEQ = 4
|
)
|
||||||
AND cl.COMMUTDAY = CURDATE() - INTERVAL '1' DAY
|
) THEN 0 ELSE 1 END,
|
||||||
AND cl.COMMUTLVE IS NOT NULL
|
/* 그래도 없으면 최신 날짜 기준 */
|
||||||
ORDER BY cl.COMMUTLVE DESC
|
MAX(cm.COMMUTDAY) DESC,
|
||||||
LIMIT 1
|
|
||||||
) AS default_project_yesterday_leave, -- 전날 마지막 퇴근한 프로젝트 ID
|
|
||||||
(
|
|
||||||
SELECT cc.PROJCTSEQ
|
|
||||||
FROM commuters cc
|
|
||||||
WHERE cc.MEMBERSEQ = 4
|
|
||||||
AND cc.COMMUTDAY = CURDATE() - INTERVAL '1' DAY
|
|
||||||
AND cc.COMMUTLVE IS NULL
|
|
||||||
LIMIT 1
|
|
||||||
) AS default_project_yesterday_checkin -- 전날 마지막 출근한 프로젝트 ID (퇴근 기록 없는 경우)
|
|
||||||
FROM promember pm -- 회원-프로젝트 매핑 테이블
|
|
||||||
JOIN netprojct p ON pm.PROJCTSEQ = p.PROJCTSEQ -- 프로젝트 테이블과 조인
|
|
||||||
LEFT JOIN commoncod c ON p.PROJCTCOL = c.CMNCODVAL AND c.CMNCODYNP = '1' -- 공통 코드 테이블 (프로젝트 색상)과 외부 조인
|
|
||||||
LEFT JOIN commuters cm
|
|
||||||
ON pm.MEMBERSEQ = cm.MEMBERSEQ
|
|
||||||
AND (pm.PROJCTSEQ = cm.PROJCTSEQ OR pm.PROJCTSEQ = cm.PROJCTLVE) -- 출퇴근 기록 테이블과 외부 조인 (현재 또는 마지막 작업 프로젝트)
|
|
||||||
LEFT JOIN commuters cm_today
|
|
||||||
ON pm.MEMBERSEQ = cm_today.MEMBERSEQ
|
|
||||||
AND pm.PROJCTSEQ = cm_today.PROJCTSEQ
|
|
||||||
AND cm_today.COMMUTDAY = CURDATE() -- 오늘 출퇴근 기록 테이블과 외부 조인 (현재 프로젝트 기준)
|
|
||||||
WHERE pm.MEMBERSEQ = 4 -- 특정 회원 ID 조건
|
|
||||||
AND pm.PROJCTYON = '1' -- 프로젝트 사용 여부 조건
|
|
||||||
AND (p.PROJCTEND IS NULL OR p.PROJCTEND >= CURDATE()) -- 프로젝트 종료일 조건 (종료되지 않았거나 종료일이 오늘 이후)
|
|
||||||
GROUP BY p.PROJCTSEQ, p.PROJCTNAM, c.CMNCODNAM -- 프로젝트별로 그룹화
|
|
||||||
ORDER BY
|
|
||||||
sort_group ASC,
|
|
||||||
MAX(cm.COMMUTLVE) DESC,
|
MAX(cm.COMMUTLVE) DESC,
|
||||||
MAX(cm.COMMUTCMT) DESC,
|
MAX(cm.COMMUTCMT) DESC,
|
||||||
p.PROJCTSTR DESC;
|
p.PROJCTSTR DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<delete id="deletePromember" parameterType="int">
|
<delete id="deletePromember" parameterType="int">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user