<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="kr.wisestone.owl.mapper.IssueMapper">
|
|
<select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
issue.id as id,
|
issue.register_id as registerId,
|
issue.reverse_index as reverseIndex,
|
issue.title as title,
|
issue.description as description,
|
issue.parent_issue_id as parentIssueId,
|
issue.start_date as startDate,
|
issue.complete_date as completeDate,
|
issue.issue_number as issueNumber,
|
issue.register_date as registerDate,
|
issue.is_api as isApi,
|
SUBSTRING(issue.modify_date, 1, 19) as modifyDate,
|
project.id as projectId,
|
project.name as projectName,
|
project.project_key as projectKey,
|
issue_type.id as issueTypeId,
|
issue_type.name as issueTypeName,
|
issue_type.inherit_partners as inheritPartners,
|
issue_status.id as issueStatusId,
|
issue_status.issue_status_type as issueStatusType,
|
issue_status.name as issueStatusName,
|
issue_status.color as issueStatusColor,
|
priority.id as priorityId,
|
priority.name as priorityName,
|
priority.color as priorityColor,
|
severity.id as severityId,
|
severity.name as severityName,
|
severity.color as severityColor,
|
ic.name AS companyName,
|
ii.name AS ispName,
|
ih.name AS hostingName,
|
d.department_name AS departmentName,
|
GROUP_CONCAT(issue_custom.use_value) AS useValue,
|
IFNULL(temp_attached_file.attachedFileCount, 0) as attachedFileCount,
|
IFNULL(temp_issue_comment.issueCommentCount, 0) as issueCommentCount
|
FROM issue issue FORCE INDEX(reverseIndex)
|
INNER JOIN project project FORCE INDEX(workspaceIdIndex) ON issue.project_id = project.id
|
INNER JOIN workspace workspace ON workspace.id = project.workspace_id
|
INNER JOIN issue_status issue_status FORCE INDEX(PRIMARY) ON issue.issue_status_id = issue_status.id
|
INNER JOIN issue_type issue_type FORCE INDEX(PRIMARY) ON issue.issue_type_id = issue_type.id
|
INNER JOIN priority priority FORCE INDEX(PRIMARY) ON issue.priority_id = priority.id
|
INNER JOIN severity severity FORCE INDEX(PRIMARY) ON issue.severity_id = severity.id
|
LEFT OUTER JOIN issue_custom_field_value issue_custom FORCE INDEX(issueIdIndex) ON issue.id = issue_custom.issue_id
|
LEFT OUTER JOIN issue_department isd FORCE INDEX(issueIdIndex) ON issue.id = isd.issue_id
|
LEFT OUTER JOIN issue_user issue_user FORCE INDEX(issueIdIndex) ON issue.id = issue_user.issue_id
|
LEFT OUTER JOIN user_department ud ON ud.department_id = isd.department_id
|
LEFT OUTER JOIN department d ON d.id = isd.department_id
|
LEFT OUTER JOIN issue_company ic FORCE INDEX(issueIdIndex) ON ic.issue_id = issue.id
|
LEFT OUTER JOIN issue_isp ii FORCE INDEX(issueIdIndex) ON ii.issue_id = issue.id
|
LEFT OUTER JOIN issue_hosting ih FORCE INDEX(issueIdIndex) ON ih.issue_id = issue.id
|
LEFT OUTER JOIN (SELECT issue_id, COUNT(id) as attachedFileCount FROM attached_file GROUP BY issue_id)
|
temp_attached_file on (temp_attached_file.issue_id = issue.id)
|
LEFT OUTER JOIN (SELECT issue_id, COUNT(id) as issueCommentCount FROM issue_comment GROUP BY issue_id)
|
temp_issue_comment on (temp_issue_comment.issue_id = issue.id)
|
WHERE 1=1
|
<if test="keyWord != null and !keyWord.equals('') ">
|
AND (issue.title like CONCAT('%',#{keyWord},'%')
|
OR issue.description like CONCAT('%',#{keyWord},'%')
|
OR issue.start_date like CONCAT('%',#{keyWord},'%')
|
OR issue.complete_date like CONCAT('%',#{keyWord},'%')
|
OR issue.issue_number like CONCAT('%',#{keyWord},'%')
|
OR issue.register_date like CONCAT('%',#{keyWord},'%')
|
OR project.name like CONCAT('%',#{keyWord},'%')
|
OR project.project_key like CONCAT('%',#{keyWord},'%')
|
OR issue_type.name like CONCAT('%',#{keyWord},'%')
|
OR issue_status.issue_status_type like CONCAT('%',#{keyWord},'%')
|
OR issue_status.name like CONCAT('%',#{keyWord},'%')
|
OR priority.name like CONCAT('%',#{keyWord},'%')
|
OR severity.name like CONCAT('%',#{keyWord},'%')
|
OR issue_custom.use_value like CONCAT('%',#{keyWord},'%')
|
OR d.department_name like CONCAT('%',#{keyWord},'%')
|
OR ic.name like CONCAT('%',#{keyWord},'%')
|
OR ic.manager like CONCAT('%',#{keyWord},'%')
|
OR ic.tel like CONCAT('%',#{keyWord},'%')
|
OR ic.email like CONCAT('%',#{keyWord},'%')
|
OR ic.url like CONCAT('%',#{keyWord},'%')
|
OR ic.memo like CONCAT('%',#{keyWord},'%')
|
OR ii.name like CONCAT('%',#{keyWord},'%')
|
OR ii.code like CONCAT('%',#{keyWord},'%')
|
OR ii.manager like CONCAT('%',#{keyWord},'%')
|
OR ii.tel like CONCAT('%',#{keyWord},'%')
|
OR ii.email like CONCAT('%',#{keyWord},'%')
|
OR ii.url like CONCAT('%',#{keyWord},'%')
|
OR ii.memo like CONCAT('%',#{keyWord},'%')
|
OR ih.name like CONCAT('%',#{keyWord},'%')
|
OR ih.code like CONCAT('%',#{keyWord},'%')
|
OR ih.manager like CONCAT('%',#{keyWord},'%')
|
OR ih.tel like CONCAT('%',#{keyWord},'%')
|
OR ih.email like CONCAT('%',#{keyWord},'%')
|
OR ih.url like CONCAT('%',#{keyWord},'%')
|
OR ih.memo like CONCAT('%',#{keyWord},'%'))
|
</if>
|
|
<if test="title != null and !title.equals('')">
|
AND issue.title like CONCAT('%',#{title},'%')
|
</if>
|
|
<if test="description != null and !description.equals('')">
|
AND issue.description like CONCAT('%',#{description},'%')
|
</if>
|
|
<if test="issueNumber != null and !issueNumber.equals('')">
|
AND issue.issue_number = #{issueNumber}
|
</if>
|
|
<if test="beginRegisterDate != null and !beginRegisterDate.equals('')">
|
ANd issue.register_date >= #{beginRegisterDate}
|
</if>
|
|
<if test="endRegisterDate != null and !endRegisterDate.equals('')">
|
ANd issue.register_date <![CDATA[ <= ]]> #{endRegisterDate}
|
</if>
|
|
<if test="beginStartDate != null and !beginStartDate.equals('')">
|
ANd issue.start_date >= #{beginStartDate}
|
</if>
|
|
<if test="endStartDate != null and !endStartDate.equals('')">
|
ANd issue.start_date <![CDATA[ <= ]]> #{endStartDate}
|
</if>
|
|
<if test="beginCompleteDate != null and !beginCompleteDate.equals('')">
|
ANd issue.complete_date >= #{beginCompleteDate}
|
</if>
|
|
<if test="endCompleteDate != null and !endCompleteDate.equals('')">
|
ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
|
</if>
|
|
<if test="beginDateRange != null and !beginDateRange.equals('') and endDateRange != null and !endDateRange.equals('')">
|
AND (issue.start_date BETWEEN #{beginDateRange} AND #{endDateRange} OR issue.complete_date BETWEEN #{beginDateRange} AND #{endDateRange})
|
</if>
|
|
<if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
|
<if test="hideDownIssue != null and hideDownIssue == true and parentYN == true">
|
AND issue.parent_issue_id IS NULL
|
</if>
|
</if>
|
|
<if test="hideCompleteIssue != null and hideCompleteIssue == true">
|
AND issue_status.issue_status_type != 'CLOSE'
|
</if>
|
|
<if test="parentYN != null and parentYN == true and hideDownIssue == true">
|
AND issue.parent_issue_id IS NULL
|
</if>
|
|
<if test="hideDownIssue == false and parentYN == false">
|
AND issue.parent_issue_id IS NOT NULL
|
</if>
|
|
<choose>
|
<when test="projectIds.size != 0">
|
AND project.id IN
|
<foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueStatusIds.size != 0">
|
AND issue_status.id IN
|
<foreach collection="issueStatusIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueTypeIds.size != 0">
|
AND issue_type.id IN
|
<foreach collection="issueTypeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="priorityIds.size != 0">
|
AND priority.id IN
|
<foreach collection="priorityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="severityIds.size != 0">
|
AND severity.id IN
|
<foreach collection="severityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="userIds.size != 0">
|
AND issue_user.user_id IN
|
<foreach collection="userIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="departmentIds.size != 0">
|
AND isd.department_id IN
|
<foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="myDepartmentIds != null and myDepartmentIds.size != 0">
|
AND isd.department_id IN
|
<foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="registerIds.size != 0">
|
AND issue.register_id IN
|
<foreach collection="registerIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueIds.size != 0">
|
AND issue.id IN
|
<foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
<choose>
|
<when test="excludeIds.size != 0">
|
AND issue.id NOT IN
|
<foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
AND issue.reverse_index <![CDATA[ < ]]> 0
|
AND workspace.id = #{workspaceId}
|
GROUP BY issue.id
|
ORDER BY issue.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.IssueCondition">
|
SELECT
|
COUNT(DISTINCT issue.id)
|
FROM issue issue
|
INNER JOIN project project FORCE INDEX(workspaceIdIndex) ON issue.project_id = project.id
|
INNER JOIN workspace workspace ON workspace.id = project.workspace_id
|
INNER JOIN issue_status issue_status FORCE INDEX(PRIMARY) ON issue.issue_status_id = issue_status.id
|
INNER JOIN issue_type issue_type FORCE INDEX(PRIMARY) ON issue.issue_type_id = issue_type.id
|
INNER JOIN priority priority FORCE INDEX(PRIMARY) ON issue.priority_id = priority.id
|
INNER JOIN severity severity FORCE INDEX(PRIMARY) ON issue.severity_id = severity.id
|
LEFT OUTER JOIN issue_custom_field_value issue_custom FORCE INDEX(issueIdIndex) ON issue.id = issue_custom.issue_id
|
LEFT OUTER JOIN issue_department isd FORCE INDEX(issueIdIndex) ON issue.id = isd.issue_id
|
LEFT OUTER JOIN issue_user issue_user FORCE INDEX(issueIdIndex) ON issue.id = issue_user.issue_id
|
LEFT OUTER JOIN user_department ud ON ud.department_id = isd.department_id
|
LEFT OUTER JOIN department d ON d.id = isd.department_id
|
LEFT OUTER JOIN issue_company ic USE index(issueIdIndex) ON ic.issue_id = issue.id
|
LEFT OUTER JOIN issue_isp ii USE INDEX(issueIdIndex) ON ii.issue_id = issue.id
|
LEFT OUTER JOIN issue_hosting ih USE index(issueIdIndex) ON ih.issue_id = issue.id
|
LEFT OUTER JOIN (SELECT issue_id, COUNT(id) as attachedFileCount FROM attached_file GROUP BY issue_id)
|
temp_attached_file on (temp_attached_file.issue_id = issue.id)
|
LEFT OUTER JOIN (SELECT issue_id, COUNT(id) as issueCommentCount FROM issue_comment GROUP BY issue_id)
|
temp_issue_comment on (temp_issue_comment.issue_id = issue.id)
|
WHERE 1=1
|
<if test="keyWord != null and !keyWord.equals('') ">
|
AND (issue.title like CONCAT('%',#{keyWord},'%')
|
OR issue.description like CONCAT('%',#{keyWord},'%')
|
OR issue.start_date like CONCAT('%',#{keyWord},'%')
|
OR issue.complete_date like CONCAT('%',#{keyWord},'%')
|
OR issue.issue_number like CONCAT('%',#{keyWord},'%')
|
OR issue.register_date like CONCAT('%',#{keyWord},'%')
|
OR project.name like CONCAT('%',#{keyWord},'%')
|
OR project.project_key like CONCAT('%',#{keyWord},'%')
|
OR issue_type.name like CONCAT('%',#{keyWord},'%')
|
OR issue_status.issue_status_type like CONCAT('%',#{keyWord},'%')
|
OR issue_status.name like CONCAT('%',#{keyWord},'%')
|
OR priority.name like CONCAT('%',#{keyWord},'%')
|
OR severity.name like CONCAT('%',#{keyWord},'%')
|
OR issue_custom.use_value like CONCAT('%',#{keyWord},'%')
|
OR d.department_name like CONCAT('%',#{keyWord},'%')
|
OR ic.name like CONCAT('%',#{keyWord},'%')
|
OR ic.manager like CONCAT('%',#{keyWord},'%')
|
OR ic.tel like CONCAT('%',#{keyWord},'%')
|
OR ic.email like CONCAT('%',#{keyWord},'%')
|
OR ic.url like CONCAT('%',#{keyWord},'%')
|
OR ic.memo like CONCAT('%',#{keyWord},'%')
|
OR ii.name like CONCAT('%',#{keyWord},'%')
|
OR ii.code like CONCAT('%',#{keyWord},'%')
|
OR ii.manager like CONCAT('%',#{keyWord},'%')
|
OR ii.tel like CONCAT('%',#{keyWord},'%')
|
OR ii.email like CONCAT('%',#{keyWord},'%')
|
OR ii.url like CONCAT('%',#{keyWord},'%')
|
OR ii.memo like CONCAT('%',#{keyWord},'%')
|
OR ih.name like CONCAT('%',#{keyWord},'%')
|
OR ih.code like CONCAT('%',#{keyWord},'%')
|
OR ih.manager like CONCAT('%',#{keyWord},'%')
|
OR ih.tel like CONCAT('%',#{keyWord},'%')
|
OR ih.email like CONCAT('%',#{keyWord},'%')
|
OR ih.url like CONCAT('%',#{keyWord},'%')
|
OR ih.memo like CONCAT('%',#{keyWord},'%'))
|
</if>
|
|
<if test="title != null and !title.equals('')">
|
AND issue.title like CONCAT('%',#{title},'%')
|
</if>
|
|
<if test="description != null and !description.equals('')">
|
AND issue.description like CONCAT('%',#{description},'%')
|
</if>
|
|
<if test="issueNumber != null and !issueNumber.equals('')">
|
AND issue.issue_number = #{issueNumber}
|
</if>
|
|
<if test="beginRegisterDate != null and !beginRegisterDate.equals('')">
|
ANd issue.register_date >= #{beginRegisterDate}
|
</if>
|
|
<if test="endRegisterDate != null and !endRegisterDate.equals('')">
|
ANd issue.register_date <![CDATA[ <= ]]> #{endRegisterDate}
|
</if>
|
|
<if test="beginStartDate != null and !beginStartDate.equals('')">
|
ANd issue.start_date >= #{beginStartDate}
|
</if>
|
|
<if test="endStartDate != null and !endStartDate.equals('')">
|
ANd issue.start_date <![CDATA[ <= ]]> #{endStartDate}
|
</if>
|
|
<if test="beginCompleteDate != null and !beginCompleteDate.equals('')">
|
ANd issue.complete_date >= #{beginCompleteDate}
|
</if>
|
|
<if test="endCompleteDate != null and !endCompleteDate.equals('')">
|
ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
|
</if>
|
|
<if test="beginDateRange != null and !beginDateRange.equals('') and endDateRange != null and !endDateRange.equals('')">
|
AND (issue.start_date BETWEEN #{beginDateRange} AND #{endDateRange} OR issue.complete_date BETWEEN #{beginDateRange} AND #{endDateRange})
|
</if>
|
|
<if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
|
<if test="hideDownIssue != null and hideDownIssue == true and parentYN == true">
|
AND issue.parent_issue_id IS NULL
|
</if>
|
</if>
|
|
<if test="hideDownIssue == false and parentYN == false">
|
AND issue.parent_issue_id IS NOT NULL
|
</if>
|
|
<if test="hideCompleteIssue != null and hideCompleteIssue == true">
|
AND issue_status.issue_status_type != 'CLOSE'
|
</if>
|
|
<choose>
|
<when test="projectIds.size != 0">
|
AND issue.project_id IN
|
<foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueStatusIds.size != 0">
|
AND issue.issue_status_id IN
|
<foreach collection="issueStatusIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueTypeIds.size != 0">
|
AND issue.issue_type_id IN
|
<foreach collection="issueTypeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="priorityIds.size != 0">
|
AND issue.priority_id IN
|
<foreach collection="priorityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="severityIds.size != 0">
|
AND issue.severity_id IN
|
<foreach collection="severityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="departmentIds.size != 0">
|
AND isd.department_id IN
|
<foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="myDepartmentIds != null and myDepartmentIds.size != 0">
|
AND isd.department_id IN
|
<foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="registerIds.size != 0">
|
AND issue.register_id IN
|
<foreach collection="registerIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueIds.size != 0">
|
AND issue.id IN
|
<foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
<choose>
|
<when test="excludeIds.size != 0">
|
AND issue.id NOT IN
|
<foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
</select>
|
|
<select id="countByDepartment" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
COUNT(DISTINCT issue.id)
|
FROM issue issue
|
LEFT OUTER JOIN issue_department isd ON issue.id = isd.issue_id
|
LEFT OUTER JOIN issue_status iss ON iss.id = issue.issue_status_id
|
WHERE 1=1
|
<if test="title != null and !title.equals('') ">
|
AND issue.title like CONCAT('%',#{title},'%')
|
</if>
|
|
<if test="description != null and !description.equals('')">
|
AND issue.description like CONCAT('%',#{description},'%')
|
</if>
|
|
<if test="issueNumber != null and !issueNumber.equals('')">
|
AND issue.issue_number = #{issueNumber}
|
</if>
|
|
<if test="beginRegisterDate != null and !beginRegisterDate.equals('')">
|
ANd issue.register_date >= #{beginRegisterDate}
|
</if>
|
|
<if test="endRegisterDate != null and !endRegisterDate.equals('')">
|
ANd issue.register_date <![CDATA[ <= ]]> #{endRegisterDate}
|
</if>
|
|
<if test="beginStartDate != null and !beginStartDate.equals('')">
|
ANd issue.start_date >= #{beginStartDate}
|
</if>
|
|
<if test="endStartDate != null and !endStartDate.equals('')">
|
ANd issue.start_date <![CDATA[ <= ]]> #{endStartDate}
|
</if>
|
|
<if test="beginCompleteDate != null and !beginCompleteDate.equals('')">
|
ANd issue.complete_date >= #{beginCompleteDate}
|
</if>
|
|
<if test="endCompleteDate != null and !endCompleteDate.equals('')">
|
ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
|
</if>
|
|
<if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
|
<if test="hideDownIssue != null and hideDownIssue == true">
|
AND issue.parent_issue_id IS NULL
|
</if>
|
</if>
|
|
<if test="hideCompleteIssue != null and hideCompleteIssue == true">
|
AND iss.issue_status_type != 'CLOSE'
|
</if>
|
|
<choose>
|
<when test="myDepartmentIds != null and myDepartmentIds.size != 0">
|
AND isd.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="projectIds.size != 0">
|
AND issue.project_id IN
|
<foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueStatusIds.size != 0">
|
AND issue.issue_status_id IN
|
<foreach collection="issueStatusIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueTypeIds.size != 0">
|
AND issue.issue_type_id IN
|
<foreach collection="issueTypeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="priorityIds.size != 0">
|
AND issue.priority_id IN
|
<foreach collection="priorityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="severityIds.size != 0">
|
AND issue.severity_id IN
|
<foreach collection="severityIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="departmentIds.size != 0">
|
AND isd.department_id IN
|
<foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="registerIds.size != 0">
|
AND issue.register_id IN
|
<foreach collection="registerIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
|
<choose>
|
<when test="issueIds.size != 0">
|
AND issue.id IN
|
<foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
<choose>
|
<when test="excludeIds.size != 0">
|
AND issue.id NOT IN
|
<foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
</select>
|
|
<!-- 이슈 유형을 사용하는 이슈 목록을 조회한다 -->
|
<select id="findByIssueTypeId" resultType="java.util.HashMap"
|
parameterType="java.lang.Long">
|
SELECT
|
i.id as issueId,
|
iss.id as issueStatusId,
|
iss.name as issueStatusName
|
FROM issue i
|
INNER JOIN issue_status iss on iss.id = i.issue_status_id
|
WHERE i.issue_type_id = #{issueTypeId}
|
</select>
|
|
<!-- 해당 이슈 유형의 입력 현황을 조회한다 -->
|
<select id="findByApiIssueHistory" resultType="java.util.HashMap"
|
parameterType="java.lang.Long">
|
SELECT
|
i.id as issueId,
|
iss.id as issueStatusId,
|
iss.name as issueStatusName
|
FROM issue i
|
INNER JOIN issue_status iss on iss.id = i.issue_status_id
|
WHERE i.issue_type_id = #{issueTypeId}
|
</select>
|
|
<!-- 프로젝트에 있는 이슈 목록을 조회한다 -->
|
<select id="findByProjectId" resultType="java.util.HashMap"
|
parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
id
|
FROM issue
|
WHERE project_id = #{projectId}
|
</select>
|
|
<insert id="insertBatch" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
|
INSERT INTO issue(title, description, issue_number, project_id, issue_type_id, priority_id, severity_id,
|
start_date, complete_date, parent_issue_id,
|
issue_status_id, register_id, modify_id, register_date, modify_date)
|
VALUES
|
<foreach collection="list" item="issueForm" index="index" separator="," open="" close="">
|
(#{issueForm.title}, #{issueForm.description}, #{issueForm.issueNumber}, #{issueForm.projectId},
|
#{issueForm.issueTypeId}, #{issueForm.priorityId}, #{issueForm.severityId}, #{issueForm.startDate},
|
#{issueForm.completeDate}, #{issueForm.parentIssueId},
|
#{issueForm.issueStatusId}, #{issueForm.registerId}, #{issueForm.registerId}, NOW(), NOW())
|
</foreach>
|
</insert>
|
|
<update id="updateBatch">
|
<foreach collection="list" item="issueForm" index="index" separator=";">
|
UPDATE issue SET reverse_index = (#{issueForm.id} * -1) WHERE id=#{issueForm.id}
|
</foreach>
|
</update>
|
|
<!-- 이슈 이력 bulk insert, import 에서 사용 -->
|
<insert id="insertHistoryBatch" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
|
parameterType="java.util.HashMap">
|
INSERT INTO issue_history(issue_id, project_id, issue_history_type, description, register_id, modify_id,
|
register_date, modify_date)
|
VALUES
|
<foreach collection="list" item="map" index="index" separator="," open="" close="">
|
(#{map.issueId}, #{map.projectId}, #{map.issueHistoryType}, #{map.description}, #{map.registerId},
|
#{map.registerId}, NOW(), NOW())
|
</foreach>
|
</insert>
|
|
<!-- 이슈 리스크 bulk insert, import 에서 사용 -->
|
<insert id="insertIssueRiskBatch" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
|
parameterType="java.util.HashMap">
|
INSERT INTO issue_risk(issue_id, workspace_id, change_assignee_count, change_department_count, change_issue_status_count,
|
issue_status_ids,
|
register_id, modify_id, register_date, modify_date)
|
VALUES
|
<foreach collection="list" item="map" index="index" separator="," open="" close="">
|
(#{map.issueId}, #{map.workspaceId}, #{map.changeAssigneeCount}, #{map.changeDepartmentCount}, #{map.changeIssueStatusCount},
|
#{map.issueStatusIds},
|
#{map.registerId}, #{map.registerId}, NOW(), NOW())
|
</foreach>
|
</insert>
|
|
|
<!-- 이슈 사용자 정의 필드 값 bulk insert, import 에서 사용 -->
|
<insert id="insertIssueCustomFieldValueBatch" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
|
parameterType="java.util.HashMap">
|
INSERT INTO issue_custom_field_value(issue_id, issue_type_custom_field_id, custom_field_id, use_value, register_id, modify_id,
|
register_date, modify_date)
|
VALUES
|
<foreach collection="list" item="map" index="index" separator="," open="" close="">
|
(#{map.issueId}, #{map.issueTypeCustomFieldId}, #{map.customFieldId}, #{map.useValue}, #{map.registerId}, #{map.registerId}, NOW(), NOW())
|
</foreach>
|
</insert>
|
|
<select id="findByProjectIdIn" resultType="java.util.HashMap"
|
parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
id,
|
title
|
FROM issue FORCE INDEX(projectIdIndex)
|
WHERE 1=1
|
<choose>
|
<when test="projectIds.size != 0">
|
AND project_id IN
|
<foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
</select>
|
|
<select id="findIssueUser" resultType="java.util.HashMap"
|
parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
issue.id AS issueId,
|
user.id AS id,
|
user.name AS name,
|
user.account AS account,
|
user.profile AS profile
|
FROM issue issue
|
INNER JOIN issue_user issue_user ON issue_user.issue_id = issue.id
|
INNER JOIN user user ON user.id = issue_user.user_id
|
WHERE 1=1
|
<choose>
|
<when test="issueIds.size != 0">
|
AND issue.id IN
|
<foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
</select>
|
|
<select id="findIssueDepartment" resultType="java.util.HashMap"
|
parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
i.id AS issueId,
|
d.id AS id,
|
d.department_name AS departmentName
|
FROM issue i
|
INNER JOIN issue_department isd ON isd.issue_id = i.id
|
INNER JOIN department d ON d.id = isd.department_id
|
WHERE 1=1
|
<choose>
|
<when test="issueIds.size != 0">
|
AND i.id IN
|
<foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
</select>
|
|
<!-- 이슈 유형을 사용하는 이슈 갯수를 조회한다 -->
|
<select id="countByIssueTypeId" resultType="java.lang.Long" parameterType="java.lang.Long">
|
SELECT COUNT(DISTINCT id) FROM
|
issue WHERE issue_type_id = #{issueTypeId};
|
</select>
|
|
<!-- 이슈 유형을 사용하는 이슈 갯수를 조회한다(기간) -->
|
<select id="countByIssueTypeIdAndDate" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.IssueTypeCondition">
|
SELECT
|
COUNT(DISTINCT id)
|
FROM issue
|
WHERE issue_type_id = #{id}
|
AND register_date BETWEEN #{startDate} AND #{endDate}
|
AND is_api = #{isApi};
|
</select>
|
|
<!-- 이슈 상태를 사용하는 이슈 갯수를 조회한다. -->
|
<select id="countByIssueStatusId" resultType="java.lang.Long" parameterType="java.lang.Long">
|
SELECT COUNT(DISTINCT id) FROM
|
issue WHERE issue_status_id = #{issueStatusId};
|
</select>
|
|
|
<!-- 특정 사용자 정의 필드 값이 같은 이슈를 조회 -->
|
<select id="findByCustomFieldValue" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCustomFieldValueCondition">
|
SELECT
|
issue.id as id,
|
issue.title as title,
|
customFieldValue.customFieldType AS customFieldType,
|
GROUP_CONCAT(customFieldValue.useValue ORDER BY customFieldValue.customFieldId ASC) AS concatUseValue
|
FROM issue issue FORCE INDEX(reverseIndex)
|
INNER JOIN issue_status as issStatus ON issue.issue_status_id = issStatus.id
|
LEFT OUTER JOIN (
|
SELECT cf.id AS customFieldId, cf.custom_field_type AS customFieldType, issue_custom.use_value AS useValue, issue_custom.issue_id AS issueId
|
FROM issue_custom_field_value issue_custom
|
INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id
|
<choose>
|
<when test="useValues.size != 0">
|
WHERE issue_custom.use_value IN
|
<foreach collection="useValues" item="item" index="index" separator="," open="(" close=")">
|
#{item}
|
</foreach>
|
</when>
|
</choose>
|
) customFieldValue ON customFieldValue.issueId = issue.id
|
WHERE issue.issue_type_id = #{issueTypeId}
|
<choose>
|
<when test="issueStatusType != null">
|
AND issStatus.issue_status_type != #{issueStatusType}
|
</when>
|
</choose>
|
GROUP BY issue.id
|
HAVING concatUseValue LIKE CONCAT('%', #{useValue}, '%')
|
</select>
|
|
<!-- 특정 사용자 정의 필드 IP 값이 업체와 동일한 이슈를 조회 -->
|
<select id="findByCustomFieldValueOfIp" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCustomFieldValueCondition">
|
SELECT
|
issue.id as id,
|
issue.title as title,
|
customFieldValue.customFieldType AS customFieldType,
|
GROUP_CONCAT(customFieldValue.useValue ORDER BY customFieldValue.customFieldId ASC) AS concatUseValue
|
FROM issue issue FORCE INDEX(reverseIndex)
|
INNER JOIN issue_status as issStatus ON issue.issue_status_id = issStatus.id
|
LEFT OUTER JOIN (
|
SELECT cf.id AS customFieldId, cf.custom_field_type AS customFieldType, issue_custom.use_value AS useValue, issue_custom.issue_id AS issueId
|
FROM issue_custom_field_value issue_custom
|
INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id
|
) customFieldValue ON customFieldValue.issueId = issue.id
|
INNER JOIN issue_company issc ON issc.issue_id = issue.id
|
WHERE issue.issue_type_id = #{issueTypeId}
|
<if test="customFieldType != '' and customFieldType != null">
|
AND customFieldValue.customFieldType = #{customFieldType}
|
</if>
|
<if test="useValue != '' and useValue != null">
|
AND INET_ATON(issc.ip_start) <![CDATA[ <= ]]> #{useValue} AND INET_ATON(issc.ip_end) >= #{useValue}
|
</if>
|
<choose>
|
<when test="issueStatusType != null">
|
AND issStatus.issue_status_type != #{issueStatusType}
|
</when>
|
</choose>
|
GROUP BY issue.id
|
</select>
|
|
|
<!-- 종료 안된 하위 이슈 가져오기 -->
|
<select id="findNotCompleteByParentIssueId" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCondition">
|
SELECT
|
iss.id as id,
|
iss.title as title
|
FROM issue iss
|
INNER JOIN issue_status issueStatus on iss.issue_status_id = issueStatus.id
|
WHERE iss.parent_issue_id = #{parentIssueId}
|
AND iss.id != #{id}
|
AND issueStatus.issue_status_type != 'CLOSE'
|
</select>
|
</mapper>
|