OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-14 d64ce641aa6985cf531abe819ea7991f4fd2ec94
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,
@@ -57,9 +57,76 @@
        <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.id 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">
@@ -256,8 +380,47 @@
        </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"
    <!--<select id="findByWorkspaceIdAndIncludeProject" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
@@ -296,9 +459,51 @@
                </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="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,6 +513,18 @@
                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">
@@ -327,14 +544,109 @@
    </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 +699,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>