localhost-back/src/main/resources/mapper/NetprojctMapper.xml
yoon 3ef2d8be18
All checks were successful
LOCALNET-DEV/pipeline/head This commit looks good
출퇴근 드래그앤드랍 시 업데이트 x
2025-03-27 18:18:50 +09:00

151 lines
5.0 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">
<mapper namespace="io.company.localhost.mapper.NetprojctMapper">
<!-- 프로젝트 목록 조회 -->
<select id="selectProject" parameterType="map" resultType="io.company.localhost.common.dto.MapDto">
SELECT DISTINCT
p.*,
c.CMNCODNAM AS projctcolor,
(SELECT COUNT(*)
FROM promember pm2
WHERE pm2.PROJCTSEQ = p.PROJCTSEQ
AND pm2.PROJCTYON = '1') AS participant_count
FROM netprojct p
LEFT JOIN commoncod c ON p.PROJCTCOL = c.CMNCODVAL AND c.CMNCODYNP = '1'
LEFT JOIN promember pm ON p.PROJCTSEQ = pm.PROJCTSEQ
WHERE 1=1
<if test="searchKeyword != null and searchKeyword != ''">
AND (
p.PROJCTNAM LIKE CONCAT('%', #{searchKeyword}, '%')
OR EXISTS (
SELECT 1
FROM promember pm2
JOIN netmember m ON pm2.MEMBERSEQ = m.MEMBERSEQ
WHERE pm2.PROJCTSEQ = p.PROJCTSEQ
AND pm2.PROJCTYON = '1'
AND m.membernam LIKE CONCAT('%', #{searchKeyword}, '%')
)
OR p.PROJCTARR LIKE CONCAT('%', #{searchKeyword}, '%')
OR p.PROJCTDTL LIKE CONCAT('%', #{searchKeyword}, '%')
OR p.PROJCTZIP LIKE CONCAT('%', #{searchKeyword}, '%')
)
</if>
<if test="category != null and category != ''">
AND SUBSTRING(p.PROJCTSTR, 1, 4) = #{category}
</if>
<if test="excludeEnded != null and excludeEnded == 'true'">
AND (p.PROJCTEND IS NULL OR p.PROJCTEND > CURDATE())
</if>
ORDER BY p.PROJCTSTR DESC
</select>
<!-- 프로젝트 등록 -->
<insert id="insertProject" useGeneratedKeys="true" keyProperty="PROJCTSEQ">
INSERT INTO netprojct (
PROJCTNAM,
PROJCTCOL,
PROJCTSTR,
PROJCTEND,
PROJCTDES,
PROJCTARR,
PROJCTDTL,
PROJCTZIP,
PROJCTCDT,
PROJCTCMB
) VALUES (
#{projctNam},
#{projctCol},
#{projctStr},
#{projctEnd},
#{projctDes},
#{projctArr},
#{projctDtl},
#{projctZip},
#{projctCdt},
#{projctCmb}
)
</insert>
<!-- 프로젝트 수정 -->
<update id="updateProject">
UPDATE netprojct
SET PROJCTNAM = #{projctNam},
PROJCTCOL = #{projctCol},
PROJCTARR = #{projctArr},
PROJCTDTL = #{projctDtl},
PROJCTZIP = #{projctZip},
PROJCTSTR = #{projctStr},
PROJCTEND = #{projctEnd},
PROJCTDES = #{projctDes},
PROJCTUDT = #{projctUdt},
PROJCTUMB = #{projctUmb}
WHERE PROJCTSEQ = #{projctSeq}
</update>
<!-- 프로젝트 등록·수정자 조회 -->
<select id="selectProjectLog" parameterType="int" resultType="map">
SELECT logDate, logMessage
FROM (
SELECT
DATE_FORMAT(p.PROJCTCDT, '%Y-%m-%d %H:%i') AS logDate,
CONCAT('[', m.MEMBERNAM, '] 프로젝트 등록') AS logMessage
FROM netprojct p
JOIN netmember m ON p.PROJCTCMB = m.MEMBERSEQ
WHERE p.PROJCTSEQ = #{projctSeq}
UNION ALL
SELECT
DATE_FORMAT(p.PROJCTUDT, '%Y-%m-%d %H:%i') AS logDate,
CONCAT('[', m.MEMBERNAM, '] 프로젝트 수정') AS logMessage
FROM netprojct p
JOIN netmember m ON p.PROJCTUMB = m.MEMBERSEQ
WHERE p.PROJCTSEQ = #{projctSeq}
AND p.PROJCTUDT IS NOT NULL
) AS logs
ORDER BY logDate DESC;
</select>
<!-- 프로젝트 삭제 -->
<delete id="deleteProject" parameterType="int">
DELETE FROM netprojct WHERE PROJCTSEQ = #{projctSeq}
</delete>
<!-- 프로젝트 모든 사용자 참여기간 조회 -->
<select id="selectUserProjectPeriod" resultType="io.company.localhost.common.dto.MapDto">
SELECT
m.MEMBERSEQ,
m.MEMBERNAM,
p.PROJCTSEQ,
p.PROJCTNAM,
p.PROJCTSTR as projectStartDate,
p.PROJCTEND as projectEndDate,
(
SELECT MIN(c2.COMMUTDAY)
FROM commuters c2
WHERE c2.PROJCTSEQ = p.PROJCTSEQ
AND c2.MEMBERSEQ = m.MEMBERSEQ
) as userStartDate,
(
SELECT MAX(c2.COMMUTDAY)
FROM commuters c2
WHERE c2.PROJCTSEQ = p.PROJCTSEQ
AND c2.MEMBERSEQ = m.MEMBERSEQ
) as userEndDate
FROM
netprojct p
INNER JOIN
commuters c ON p.PROJCTSEQ = c.PROJCTSEQ
INNER JOIN
netmember m ON c.MEMBERSEQ = m.MEMBERSEQ
WHERE
p.PROJCTSEQ = #{projectSeq}
GROUP BY
m.MEMBERSEQ, p.PROJCTSEQ
</select>
</mapper>