From 56ae1cd12a7a3a92563bcbf5583f659c5ad5eee5 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 27 1월 2022 15:42:59 +0900
Subject: [PATCH] - 상위 이슈 검색시 하위 이슈는 검색 제외 및 프로젝트 설정 해야 상위이슈 선택 가능하도록 수정

---
 src/main/resources/mybatis/query-template/project-template.xml |  170 ++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 146 insertions(+), 24 deletions(-)

diff --git a/src/main/resources/mybatis/query-template/project-template.xml b/src/main/resources/mybatis/query-template/project-template.xml
index 0c14c0a..35136a4 100644
--- a/src/main/resources/mybatis/query-template/project-template.xml
+++ b/src/main/resources/mybatis/query-template/project-template.xml
@@ -53,7 +53,7 @@
             </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>
@@ -74,16 +74,15 @@
         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
+        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
-        AND prd.department_id = d.id
         <if test="name != '' and name != null">
             AND p.name like CONCAT('%',#{name},'%')
         </if>
         <choose>
-            <when test="myDepartmentIds.size != 0">
+            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
                 AND prd.department_id IN
                 <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -121,7 +120,7 @@
             </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>
@@ -178,14 +177,26 @@
         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
+        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 = d.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">
@@ -253,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>
@@ -329,6 +340,81 @@
         AND p.workspace_id = #{workspaceId}
     </select>
 
+    <!--    �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 吏꾪뻾以묒씤 紐⑤뱺 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎  -->
+    <select id="findByWorkspaceIdAndProjectAll" 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 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="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="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
@@ -345,9 +431,19 @@
         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}
+        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>
@@ -466,14 +562,25 @@
         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
+        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 = d.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
@@ -511,27 +618,42 @@
             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
+                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;

--
Gitblit v1.8.0