OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/resources/mybatis/query-template/project-template.xml
@@ -3,7 +3,7 @@
<mapper namespace="kr.wisestone.owl.mapper.ProjectMapper">
    <select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
    <!--<select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
@@ -53,13 +53,80 @@
            </when>
        </choose>
        AND ws.id = #{workspaceId}
        ORDER BY p.id desc
        ORDER BY p.register_date desc
        <if test="page != null and !page.equals('')">
            limit #{pageSize} offset #{page};
        </if>
    </select>-->
    <select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        pc.parent_project_id as parentProjectId,
        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_department prd on prd.project_role_id = pr.id
        INNER JOIN user_department ud on ud.department_id = prd.department_id
        INNER JOIN workspace ws on ws.id = p.workspace_id
        LEFT JOIN project_closure pc ON p.id = pc.project_id
        WHERE if (pc.parent_project_id > -1, pc.parent_project_id, -1) = -1
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
                AND prd.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        <choose>
            <when test="roleTypes.size != 0">
                AND pr.role_type IN
                <foreach collection="roleTypes" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        AND ws.id = #{workspaceId}
        ORDER BY p.register_date desc
        <if test="page != null and !page.equals('')">
            limit #{pageSize} offset #{page};
        </if>
    </select>
    <select id="count" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
    <!--<select id="count" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        COUNT(DISTINCT p.id)
        FROM
@@ -73,6 +140,63 @@
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="roleTypes.size != 0">
                AND pr.role_type IN
                <foreach collection="roleTypes" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        AND ws.id = #{workspaceId}
    </select>-->
    <select id="count" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        COUNT(DISTINCT p.id)
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_department prd on prd.project_role_id = pr.id
        INNER JOIN user_department ud on ud.department_id = prd.department_id
        INNER JOIN workspace ws on ws.id = p.workspace_id
        LEFT JOIN project_closure pc on p.id = pc.project_id
        WHERE prd.department_id = ud.id
        AND if (pc.parent_project_id > -1, pc.parent_project_id, -1) = -1
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
                AND prd.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        <choose>
            <when test="roleTypes.size != 0">
@@ -140,7 +264,7 @@
        </choose>
        AND p.workspace_id = #{workspaceId}
        <if test="page != null and !page.equals('')">
            ORDER BY p.id desc
            ORDER BY p.register_date desc
            limit #{pageSize} offset #{page};
        </if>
    </select>
@@ -216,9 +340,8 @@
        AND p.workspace_id = #{workspaceId}
    </select>
    <!--    해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다  -->
    <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
    <!--    해당 업무 공간에서 진행중인 모든 프로젝트를 조회한다  -->
    <select id="findByWorkspaceIdAndProjectAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
@@ -233,8 +356,7 @@
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_user pru on pru.project_role_id = pr.id
        WHERE pru.user_id = #{loginUserId}
        AND p.workspace_id = #{workspaceId}
        WHERE p.workspace_id = #{workspaceId}
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
@@ -256,8 +378,134 @@
        </choose>
    </select>
    <!-- <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
             parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
         SELECT
         DISTINCT p.id as id,
         p.name as name,
         p.description as description,
         p.status as status,
         p.start_date as startDate,
         p.end_date as endDate,
         p.project_key as projectKey,
         CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
         FROM
         project p
         INNER JOIN project_role pr on p.id = pr.project_id
         INNER JOIN project_role_user pru on pru.project_role_id = pr.id
         WHERE pru.user_id = #{loginUserId}
         AND p.workspace_id = #{workspaceId}
         <if test="name != '' and name != null">
             AND p.name like CONCAT('%',#{name},'%')
         </if>
         <choose>
             <when test="statuses.size != 0">
                 AND p.status IN
                 <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                     #{item}
                 </foreach>
             </when>
         </choose>
         <choose>
             <when test="excludeIds.size != 0">
                 AND p.id NOT IN
                 <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
                 </foreach>
             </when>
         </choose>
     </select>-->
    <!--    해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다  -->
    <select id="findByWorkspaceIdAndIncludeProject" resultType="java.util.HashMap"
    <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        LEFT OUTER JOIN project_role_user pru on pru.project_role_id = pr.id
        LEFT OUTER JOIN project_role_department prd ON prd.project_role_id = pr.id
        LEFT OUTER JOIN department d on d.id = prd.department_id
        WHERE p.workspace_id = #{workspaceId}
        AND pru.user_id = #{loginUserId}
        <choose>
            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
                OR prd.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>
    <!--<select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_department prd on prd.project_role_id = pr.id
        INNER JOIN department d on d.id = prd.department_id
        WHERE prd.department_id = d.id
        AND p.workspace_id = #{workspaceId}
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>-->
    <!--    해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다  -->
    <!--<select id="findByWorkspaceIdAndIncludeProject" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
@@ -296,9 +544,62 @@
                </foreach>
            </when>
        </choose>
    </select>-->
    <select id="findByWorkspaceIdAndIncludeProject" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        pc.parent_project_id as parentProjectId,
        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_department prd on prd.project_role_id = pr.id
        INNER JOIN user_department ud on ud.department_id = prd.department_id
        LEFT JOIN project_closure pc ON p.id = pc.project_id
        WHERE prd.department_id = ud.department_id
        AND if (pc.parent_project_id > -1, pc.parent_project_id, -1) = -1
        AND p.workspace_id = #{workspaceId}
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
                AND prd.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>
    <select id="checkIncludeProject" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
    <!--<select id="checkIncludeProject" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
            DISTINCT p.id as id
        FROM
@@ -308,33 +609,155 @@
                INNER JOIN user u on u.id = pru.user_id
        WHERE 1=1
          AND p.id = #{id} AND u.id = #{loginUserId}
    </select>-->
    <select id="checkIncludeProject" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
            DISTINCT p.id as id
        FROM
            project p
                INNER JOIN project_role pr on p.id = pr.project_id
                INNER JOIN project_role_department prd on prd.project_role_id = pr.id
                INNER JOIN user_department ud on ud.department_id = prd.department_id
        WHERE 1=1
          AND p.id = #{id}
    </select>
    <select id="findChildrenProject" resultType="java.util.HashMap" parameterType="long">
        SELECT
        p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        pc.parent_project_id as parentProjectId
            p.id as id,
            p.name as name,
            p.description as description,
            p.status as status,
            p.start_date as startDate,
            p.end_date as endDate,
            p.project_key as projectKey,
            pc.parent_project_id as parentProjectId
        FROM
        project p
        LEFT JOIN project_closure pc ON p.id = pc.project_id
            project p
                LEFT JOIN project_closure pc ON p.id = pc.project_id
        WHERE pc.parent_project_id = #{parent_project_id}
    </select>
    <select id="findByIssueType" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
            p.id as id,
            p.name as name,
            p.description as description,
            p.status as status,
            p.start_date as startDate,
            p.end_date as endDate,
            p.project_key as projectKey
        FROM
            project p
                INNER JOIN issue_type it ON it.project_id = p.id
        WHERE it.id = #{issueTypeId}
    </select>
    <!--    프로젝트 삭제 -->
    <!--<delete id="deleteProject" parameterType="java.util.HashMap">
        &lt;!&ndash;    프로젝트에 연결된 사용자 정의 필드 정보 삭제   &ndash;&gt;
        DELETE FROM issue_type_custom_field WHERE project_id = #{projectId};
        <choose>
            <when test="projectRoleIds.size != 0">
                &lt;!&ndash;    프로젝트 참여 사용자 삭제  &ndash;&gt;
                DELETE FROM project_role_user WHERE project_role_id IN (
                <foreach collection="projectRoleIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    프로젝트 권한 연결 정보 삭제  &ndash;&gt;
                DELETE FROM project_role_permission WHERE project_role_id IN(
                <foreach collection="projectRoleIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
            </when>
        </choose>
        &lt;!&ndash;    프로젝트 역할 삭제  &ndash;&gt;
        DELETE FROM project_role WHERE project_id = #{projectId};
        &lt;!&ndash;    이슈 고유 번호 생성 정보 삭제  &ndash;&gt;
        DELETE FROM issue_number_generator WHERE project_id = #{projectId};
        &lt;!&ndash;    이슈 이력 정보 삭제 &ndash;&gt;
        DELETE FROM issue_history WHERE project_id = #{projectId};
        &lt;!&ndash;    이슈 버전 정보 삭제 &ndash;&gt;
        DELETE FROM issue_version WHERE project_id = #{projectId};
        &lt;!&ndash;    업무 공간에 초대한 프로젝트 정보 삭제   &ndash;&gt;
        DELETE FROM user_invite_project WHERE project_id = #{projectId};
        <choose>
            <when test="issueIds.size != 0">
                &lt;!&ndash;    이슈 사용자 정의 필드 정보 삭제  &ndash;&gt;
                DELETE FROM issue_custom_field_value WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    이슈 댓글 삭제    &ndash;&gt;
                DELETE FROM issue_comment WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    이슈 리스크 정보 삭제    &ndash;&gt;
                DELETE FROM issue_risk WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    이슈 담당자 정보 삭제    &ndash;&gt;
                DELETE FROM issue_user WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    관심 이슈 정보 삭제 &ndash;&gt;
                DELETE FROM user_like_issue WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
                &lt;!&ndash;    이슈 발생 예약 정보 삭제  &ndash;&gt;
                DELETE FROM issue_reservation WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
                );
            </when>
        </choose>
        &lt;!&ndash;    이슈 고유 번호 생성 정보 삭제  &ndash;&gt;
        DELETE FROM issue_number_generator WHERE project_id = #{projectId};
        &lt;!&ndash;    이슈 삭제   &ndash;&gt;
        DELETE FROM issue WHERE project_id = #{projectId};
        &lt;!&ndash;    프로젝트 삭제 &ndash;&gt;
        DELETE FROM project WHERE id = #{projectId};
    </delete>-->
    <delete id="deleteProject" parameterType="java.util.HashMap">
        <!--    프로젝트에 연결된 사용자 정의 필드 정보 삭제   -->
        DELETE FROM issue_type_custom_field WHERE project_id = #{projectId};
        <choose>
            <when test="projectRoleIds.size != 0">
                <!--    프로젝트 참여 사용자 삭제  -->
                DELETE FROM project_role_user WHERE project_role_id IN (
                <!--    프로젝트 참여 부서 삭제  -->
                DELETE FROM project_role_department WHERE project_role_id IN (
                <foreach collection="projectRoleIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>
@@ -387,8 +810,8 @@
                </foreach>
                );
                <!--    이슈 담당자 정보 삭제    -->
                DELETE FROM issue_user WHERE issue_id IN (
                <!--    이슈 담당부서 정보 삭제    -->
                DELETE FROM issue_department WHERE issue_id IN (
                <foreach collection="issueIds" item="item" index="index" separator="," open="" close="">
                    #{item}
                </foreach>