feat: Implement hospital update functionality including operating hours and holiday management.

This commit is contained in:
pjs
2026-02-14 22:16:25 +09:00
parent 1175eb13c5
commit 6287526490
8 changed files with 1659 additions and 596 deletions

View File

@@ -55,14 +55,18 @@
<select id="selectHospitalWeek" parameterType="hashmap" resultType="hashmap">
SELECT MH.MU_HOSPITAL_ID AS "muHospitalId"
,MH.HOSPITAL_NAME AS "hospitalName"
,CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_YN
WHEN '3' THEN MH.TUE_OPEN_YN
WHEN '4' THEN MH.WED_OPEN_YN
WHEN '5' THEN MH.THU_OPEN_YN
WHEN '6' THEN MH.FRI_OPEN_YN
WHEN '7' THEN MH.SAT_OPEN_YN
WHEN '1' THEN MH.SUN_OPEN_YN
,CASE
WHEN MHS.MU_HOSPITAL_SCHEDULE_ID IS NOT NULL THEN MHS.OPEN_YN
ELSE
CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_YN
WHEN '3' THEN MH.TUE_OPEN_YN
WHEN '4' THEN MH.WED_OPEN_YN
WHEN '5' THEN MH.THU_OPEN_YN
WHEN '6' THEN MH.FRI_OPEN_YN
WHEN '7' THEN MH.SAT_OPEN_YN
WHEN '1' THEN MH.SUN_OPEN_YN
END
END AS "openYn"
,CASE
WHEN EXISTS (
@@ -85,43 +89,63 @@
THEN 'Y'
ELSE 'N'
END AS "holidayYn"
,CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_START_TIME
WHEN '3' THEN MH.TUE_OPEN_START_TIME
WHEN '4' THEN MH.WED_OPEN_START_TIME
WHEN '5' THEN MH.THU_OPEN_START_TIME
WHEN '6' THEN MH.FRI_OPEN_START_TIME
WHEN '7' THEN MH.SAT_OPEN_START_TIME
WHEN '1' THEN MH.SUN_OPEN_START_TIME
,CASE
WHEN MHS.MU_HOSPITAL_SCHEDULE_ID IS NOT NULL THEN MHS.OPEN_START_TIME
ELSE
CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_START_TIME
WHEN '3' THEN MH.TUE_OPEN_START_TIME
WHEN '4' THEN MH.WED_OPEN_START_TIME
WHEN '5' THEN MH.THU_OPEN_START_TIME
WHEN '6' THEN MH.FRI_OPEN_START_TIME
WHEN '7' THEN MH.SAT_OPEN_START_TIME
WHEN '1' THEN MH.SUN_OPEN_START_TIME
END
END AS "openStartTime"
,CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_END_TIME
WHEN '3' THEN MH.TUE_OPEN_END_TIME
WHEN '4' THEN MH.WED_OPEN_END_TIME
WHEN '5' THEN MH.THU_OPEN_END_TIME
WHEN '6' THEN MH.FRI_OPEN_END_TIME
WHEN '7' THEN MH.SAT_OPEN_END_TIME
WHEN '1' THEN MH.SUN_OPEN_END_TIME
,CASE
WHEN MHS.MU_HOSPITAL_SCHEDULE_ID IS NOT NULL THEN MHS.OPEN_END_TIME
ELSE
CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_OPEN_END_TIME
WHEN '3' THEN MH.TUE_OPEN_END_TIME
WHEN '4' THEN MH.WED_OPEN_END_TIME
WHEN '5' THEN MH.THU_OPEN_END_TIME
WHEN '6' THEN MH.FRI_OPEN_END_TIME
WHEN '7' THEN MH.SAT_OPEN_END_TIME
WHEN '1' THEN MH.SUN_OPEN_END_TIME
END
END AS "openEndTime"
,CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_BREAK_START_TIME
WHEN '3' THEN MH.TUE_BREAK_START_TIME
WHEN '4' THEN MH.WED_BREAK_START_TIME
WHEN '5' THEN MH.THU_BREAK_START_TIME
WHEN '6' THEN MH.FRI_BREAK_START_TIME
WHEN '7' THEN MH.SAT_BREAK_START_TIME
WHEN '1' THEN MH.SUN_BREAK_START_TIME
,CASE
WHEN MHS.MU_HOSPITAL_SCHEDULE_ID IS NOT NULL THEN MHS.BREAK_START_TIME
ELSE
CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_BREAK_START_TIME
WHEN '3' THEN MH.TUE_BREAK_START_TIME
WHEN '4' THEN MH.WED_BREAK_START_TIME
WHEN '5' THEN MH.THU_BREAK_START_TIME
WHEN '6' THEN MH.FRI_BREAK_START_TIME
WHEN '7' THEN MH.SAT_BREAK_START_TIME
WHEN '1' THEN MH.SUN_BREAK_START_TIME
END
END AS "breakStartTime"
,CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_BREAK_END_TIME
WHEN '3' THEN MH.TUE_BREAK_END_TIME
WHEN '4' THEN MH.WED_BREAK_END_TIME
WHEN '5' THEN MH.THU_BREAK_END_TIME
WHEN '6' THEN MH.FRI_BREAK_END_TIME
WHEN '7' THEN MH.SAT_BREAK_END_TIME
WHEN '1' THEN MH.SUN_BREAK_END_TIME
,CASE
WHEN MHS.MU_HOSPITAL_SCHEDULE_ID IS NOT NULL THEN MHS.BREAK_END_TIME
ELSE
CASE DAYOFWEEK(DATE_FORMAT(#{searchDate}, '%Y-%m-%d'))
WHEN '2' THEN MH.MON_BREAK_END_TIME
WHEN '3' THEN MH.TUE_BREAK_END_TIME
WHEN '4' THEN MH.WED_BREAK_END_TIME
WHEN '5' THEN MH.THU_BREAK_END_TIME
WHEN '6' THEN MH.FRI_BREAK_END_TIME
WHEN '7' THEN MH.SAT_BREAK_END_TIME
WHEN '1' THEN MH.SUN_BREAK_END_TIME
END
END AS "breakEndTime"
FROM MU_HOSPITAL AS MH
LEFT JOIN MU_HOSPITAL_SCHEDULE MHS
ON MH.MU_HOSPITAL_ID = MHS.MU_HOSPITAL_ID
AND MHS.SCHEDULE_DATE = #{searchDate}
AND MHS.USE_YN = 'Y'
WHERE MH.USE_YN = 'Y'
LIMIT 0, 1
</select>
@@ -136,7 +160,11 @@
FROM T_TEMP_DATES
WHERE RESULT_DATE &lt; #{endDate}
)
SELECT TTD.OPEN_YN AS "openYn"
SELECT
CASE
WHEN MHS.OPEN_YN IS NOT NULL THEN MHS.OPEN_YN
ELSE TTD.OPEN_YN
END AS "openYn"
,TTD.HOLIDAY_YN AS "holidayYn"
FROM (
SELECT TTD.RESULT_DATE AS RESULT_DATE
@@ -187,6 +215,9 @@
LEFT JOIN MU_HOSPITAL AS MH
ON 1 = 1
) AS TTD
LEFT JOIN MU_HOSPITAL_SCHEDULE MHS
ON MHS.SCHEDULE_DATE = TTD.RESULT_DATE
AND MHS.USE_YN = 'Y'
</select>
<select id="selectHospitalHoliday" parameterType="hashmap" resultType="hashmap">
@@ -213,8 +244,105 @@
WHERE MPH.USE_YN = 'Y'
AND DATE_FORMAT( MPH.LOC_DATE, '%Y' ) >= DATE_FORMAT( CURDATE( ), '%Y' )
)
UNION ALL
(
SELECT 'hospitalSchedule' AS "dateType"
, CASE WHEN OPEN_YN = 'Y' THEN '운영' ELSE '휴무' END AS "hospitalHolidayName"
, DATE_FORMAT(SCHEDULE_DATE, '%Y-%m-%d') AS "locDate"
FROM MU_HOSPITAL_SCHEDULE
WHERE MU_HOSPITAL_ID = #{muHospitalId}
AND USE_YN = 'Y'
AND DATE_FORMAT( SCHEDULE_DATE, '%Y' ) >= DATE_FORMAT( CURDATE( ), '%Y' )
)
</select>
<select id="selectHospitalScheduleDetail" parameterType="hashmap" resultType="hashmap">
SELECT MU_HOSPITAL_SCHEDULE_ID AS "muHospitalScheduleId"
, MU_HOSPITAL_ID AS "muHospitalId"
, DATE_FORMAT(SCHEDULE_DATE, '%Y-%m-%d') AS "scheduleDate"
, OPEN_YN AS "openYn"
, OPEN_START_TIME AS "openStartTime"
, OPEN_END_TIME AS "openEndTime"
, BREAK_START_TIME AS "breakStartTime"
, BREAK_END_TIME AS "breakEndTime"
FROM MU_HOSPITAL_SCHEDULE
WHERE MU_HOSPITAL_ID = #{muHospitalId}
AND SCHEDULE_DATE = #{searchDate}
AND USE_YN = 'Y'
LIMIT 1
</select>
<select id="selectHospitalScheduleCheck" parameterType="hashmap" resultType="hashmap">
SELECT MU_HOSPITAL_SCHEDULE_ID AS "muHospitalScheduleId"
FROM MU_HOSPITAL_SCHEDULE
WHERE MU_HOSPITAL_ID = #{muHospitalId}
AND SCHEDULE_DATE = #{scheduleDate}
LIMIT 1
</select>
<select id="selectHospitalHolidayCheck" parameterType="hashmap" resultType="hashmap">
SELECT 1 AS "isHoliday"
FROM DUAL
WHERE EXISTS (
SELECT 1
FROM MU_HOSPITAL_HOLIDAY
WHERE MU_HOSPITAL_ID = #{muHospitalId}
AND USE_YN = 'Y'
AND (
(REPEAT_YN = 'Y' AND DATE_FORMAT(LOC_DATE, '%m-%d') = DATE_FORMAT(#{searchDate}, '%m-%d'))
OR
(REPEAT_YN = 'N' AND LOC_DATE = #{searchDate})
)
) OR EXISTS (
SELECT 1
FROM MU_PUBLIC_HOLIDAY MPH
JOIN MU_HOSPITAL MH
ON MH.MU_HOSPITAL_ID = #{muHospitalId}
AND MH.PUBLIC_HOLIDAY_USE_YN = 'Y'
WHERE MPH.USE_YN = 'Y'
AND MPH.LOC_DATE = #{searchDate}
)
</select>
<insert id="insertHospitalSchedule" parameterType="hashmap">
INSERT INTO MU_HOSPITAL_SCHEDULE (
MU_HOSPITAL_SCHEDULE_ID, MU_HOSPITAL_ID, SCHEDULE_DATE, OPEN_YN,
OPEN_START_TIME, OPEN_END_TIME, BREAK_START_TIME, BREAK_END_TIME,
WRITE_DATE, WRITE_TIME, CUD_FLAG, USE_YN, REG_ID, MOD_ID,
REG_DATE, MOD_DATE
) VALUES (
(SELECT CONCAT('S', DATE_FORMAT(NOw(), '%y%m%d%H%i%s%f'), LPAD(NEXT_NOT_CACHED_VALUE, 9, '0'))
FROM MU_HOSPITAL_SCHEDULE_SEQ),
#{muHospitalId}, #{scheduleDate}, #{openYn},
#{openStartTime}, #{openEndTime}, #{breakStartTime}, #{breakEndTime},
CURDATE(), CURTIME(), 'C', 'Y', #{regId}, #{modId},
NOW(),NOW()
)
</insert>
<update id="updateHospitalSchedule" parameterType="hashmap">
UPDATE MU_HOSPITAL_SCHEDULE
SET OPEN_YN = #{openYn},
OPEN_START_TIME = #{openStartTime},
OPEN_END_TIME = #{openEndTime},
BREAK_START_TIME = #{breakStartTime},
BREAK_END_TIME = #{breakEndTime},
USE_YN = 'Y',
MOD_ID = #{modId},
MOD_DATE = NOW(),
CUD_FLAG = 'U'
WHERE MU_HOSPITAL_SCHEDULE_ID = #{muHospitalScheduleId}
</update>
<delete id="deleteHospitalSchedule" parameterType="hashmap">
UPDATE MU_HOSPITAL_SCHEDULE
SET USE_YN = 'N',
CUD_FLAG = 'D',
MOD_ID = #{modId},
MOD_DATE = NOW()
WHERE MU_HOSPITAL_SCHEDULE_ID = #{muHospitalScheduleId}
</delete>
<update id="updateHospital" parameterType="hashmap">
UPDATE MU_HOSPITAL
SET MOD_ID = #{modId}