guardia-mes/backend/src/main/resources/mapper/uiws/WorklogMapper.xml
GUARDiA 31d89228a3 feat(uiws): UIWS 업무모듈(업무일지·일정·쪽지·통계)+2FA 이식
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:07:37 +09:00

182 lines
7.8 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- UIWS 이식: 업무일지 (tb_uiws_worklog / _dtl / _cmt). -->
<mapper namespace="com.zioinfo.mes.uiws.worklog.mapper.WorklogMapper">
<!-- ===================== worklog 헤더 ===================== -->
<insert id="insertWorklog" useGeneratedKeys="true" keyProperty="worklogId" keyColumn="worklog_id"
parameterType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
INSERT INTO tb_uiws_worklog
(title, writer_id, work_date, work_status_cd, progress_cd, repeat_yn,
repeat_start_date, repeat_end_date, created_by, created_at)
VALUES
(#{title}, #{writerId}, #{workDate}, #{workStatusCd}, #{progressCd}, #{repeatYn},
#{repeatStartDate}, #{repeatEndDate}, #{createdBy}, #{createdAt})
</insert>
<update id="updateWorklog" parameterType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
UPDATE tb_uiws_worklog SET
title = #{title}, writer_id = #{writerId}, work_date = #{workDate},
work_status_cd = #{workStatusCd}, progress_cd = #{progressCd}, repeat_yn = #{repeatYn},
repeat_start_date = #{repeatStartDate}, repeat_end_date = #{repeatEndDate},
updated_by = #{updatedBy}, updated_at = #{updatedAt}
WHERE worklog_id = #{worklogId}
</update>
<select id="findWorklogById" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
SELECT * FROM tb_uiws_worklog WHERE worklog_id = #{worklogId}
</select>
<select id="existsWorklogById" resultType="boolean">
SELECT EXISTS(SELECT 1 FROM tb_uiws_worklog WHERE worklog_id = #{worklogId})
</select>
<delete id="deleteWorklogById">
DELETE FROM tb_uiws_worklog WHERE worklog_id = #{worklogId}
</delete>
<sql id="scope">
<if test="!scopeAll">
AND writer_id IN
<foreach collection="ownerIds" item="oid" open="(" separator="," close=")">#{oid}</foreach>
</if>
</sql>
<select id="searchList" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
SELECT * FROM tb_uiws_worklog
WHERE work_date BETWEEN #{from} AND #{to}
<if test="writerId != null">AND writer_id = #{writerId}</if>
<if test="progressCd != null">AND progress_cd = #{progressCd}</if>
<include refid="scope"/>
ORDER BY work_date DESC, worklog_id DESC
LIMIT #{limit} OFFSET #{offset}
</select>
<select id="countList" resultType="long">
SELECT COUNT(*) FROM tb_uiws_worklog
WHERE work_date BETWEEN #{from} AND #{to}
<if test="writerId != null">AND writer_id = #{writerId}</if>
<if test="progressCd != null">AND progress_cd = #{progressCd}</if>
<include refid="scope"/>
</select>
<select id="findByMonth" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
SELECT * FROM tb_uiws_worklog
WHERE work_date BETWEEN #{from} AND #{to}
<if test="writerId != null">AND writer_id = #{writerId}</if>
<include refid="scope"/>
ORDER BY work_date ASC, worklog_id ASC
</select>
<select id="searchPopup" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
SELECT * FROM tb_uiws_worklog
WHERE 1=1
<if test="keyword != null">AND title LIKE '%' || #{keyword} || '%'</if>
<if test="writerId != null">AND writer_id = #{writerId}</if>
<include refid="scope"/>
ORDER BY work_date DESC, worklog_id DESC
LIMIT 50
</select>
<select id="progressSummary" resultType="map">
SELECT progress_cd AS "progressCd", COUNT(*) AS "cnt"
FROM tb_uiws_worklog
WHERE work_date BETWEEN #{from} AND #{to}
<include refid="scope"/>
GROUP BY progress_cd
</select>
<!-- ===================== 상세(dtl) ===================== -->
<insert id="insertDtl" useGeneratedKeys="true" keyProperty="dtlId" keyColumn="dtl_id"
parameterType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogDtl">
INSERT INTO tb_uiws_worklog_dtl
(worklog_id, start_hour, end_hour, work_type_cd, company_id, work_content, issue_content,
sort_ord, created_by, created_at)
VALUES
(#{worklogId}, #{startHour}, #{endHour}, #{workTypeCd}, #{companyId}, #{workContent}, #{issueContent},
#{sortOrd}, #{createdBy}, #{createdAt})
</insert>
<update id="updateDtl" parameterType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogDtl">
UPDATE tb_uiws_worklog_dtl SET
start_hour = #{startHour}, end_hour = #{endHour}, work_type_cd = #{workTypeCd},
company_id = #{companyId}, work_content = #{workContent}, issue_content = #{issueContent},
sort_ord = #{sortOrd}, updated_by = #{updatedBy}, updated_at = #{updatedAt}
WHERE dtl_id = #{dtlId}
</update>
<delete id="deleteDtlById">
DELETE FROM tb_uiws_worklog_dtl WHERE dtl_id = #{dtlId}
</delete>
<select id="findDtlByWorklogId" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogDtl">
SELECT * FROM tb_uiws_worklog_dtl
WHERE worklog_id = #{worklogId}
ORDER BY sort_ord ASC, start_hour ASC, dtl_id ASC
</select>
<!-- ===================== 댓글(cmt) ===================== -->
<insert id="insertCmt" useGeneratedKeys="true" keyProperty="cmtId" keyColumn="cmt_id"
parameterType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogCmt">
INSERT INTO tb_uiws_worklog_cmt
(worklog_id, cmt_content, writer_id, kakao_sent_yn, confirm_yn, created_by, created_at)
VALUES
(#{worklogId}, #{cmtContent}, #{writerId}, #{kakaoSentYn}, #{confirmYn}, #{createdBy}, #{createdAt})
</insert>
<select id="findCmtById" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogCmt">
SELECT * FROM tb_uiws_worklog_cmt WHERE cmt_id = #{cmtId}
</select>
<update id="updateCmtKakaoSent">
UPDATE tb_uiws_worklog_cmt SET kakao_sent_yn = 'Y' WHERE cmt_id = #{cmtId}
</update>
<update id="confirmCmt">
UPDATE tb_uiws_worklog_cmt
SET confirm_yn = 'Y', updated_by = #{actor}, updated_at = now()
WHERE cmt_id = #{cmtId}
</update>
<select id="findCmtByWorklogId" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogCmt">
SELECT * FROM tb_uiws_worklog_cmt
WHERE worklog_id = #{worklogId}
ORDER BY created_at ASC, cmt_id ASC
</select>
<select id="countCommentsByWorklogIds" resultType="map">
SELECT worklog_id AS "worklogId", COUNT(*) AS "cnt"
FROM tb_uiws_worklog_cmt
WHERE worklog_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
GROUP BY worklog_id
</select>
<select id="findUnconfirmedByWriter" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklogCmt">
SELECT * FROM tb_uiws_worklog_cmt
WHERE writer_id = #{writerId} AND confirm_yn = 'N'
ORDER BY created_at DESC, cmt_id DESC
</select>
<!-- ===================== 사용자 라벨/이메일(코어 user 재사용) ===================== -->
<select id="findUserNames" resultType="map">
SELECT username AS "username", display_name AS "fullName"
FROM mes_user
WHERE username IN
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>
<select id="findUserEmail" resultType="string">
SELECT email FROM mes_user WHERE username = #{username}
</select>
<select id="findWorklogsByIds" resultType="com.zioinfo.mes.uiws.worklog.model.UiwsWorklog">
SELECT * FROM tb_uiws_worklog
WHERE worklog_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>
</mapper>