OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-11-30 bcf1555957d606938b4e5e72aaeba8a2ab555947
대시보드 - 내 프로젝트 + 하위 프로젝트 같이 보여주는 기능
13개 파일 변경됨
592 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/service/IssueService.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java 78 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/WidgetCondition.java 27 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/widget-template.xml 434 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/delay-issue-widget/delay-issue-widget.html 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/member-progress-widget/member-progress-widget.html 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/my-assignee-issue-widget/my-assignee-issue-widget.html 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/register-issue-widget/register-issue-widget.directive.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/register-issue-widget/register-issue-widget.html 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/risk-issue-widget/risk-issue-widget.html 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/widget/severity-issue-widget/severity-issue-widget.html 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -73,7 +73,7 @@
    void findPartner(Map<String, Object> resJsonData, Map<String, Object> params);
    void findMailTargetAll(Map<String, Object> resJsonData, IssueCondition condition, Pageable pageable);
    //void findMailTargetAll(Map<String, Object> resJsonData, IssueCondition condition, Pageable pageable);
    /*void findMailTargetCompany(Map<String, Object> resJsonData, Map<String, Object> params);
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2710,7 +2710,7 @@
        }
    }
    @Override
    /*@Override
    @Transactional
    public void findMailTargetAll(Map<String, Object> resJsonData, IssueCondition condition, Pageable pageable) {
        IssueVo issueVo = new IssueVo();
@@ -2746,7 +2746,7 @@
        resJsonData.put(Constants.RES_KEY_CONTENTS, emailList);
        resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
                totalPage, totalCount));
    }
    }*/
    /*@Override
    @Transactional
src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
@@ -7,15 +7,18 @@
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.IssueStatus;
import kr.wisestone.owl.domain.Project;
import kr.wisestone.owl.domain.ProjectClosure;
import kr.wisestone.owl.domain.UserDepartment;
import kr.wisestone.owl.domain.enumType.ProjectType;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.mapper.IssueMapper;
import kr.wisestone.owl.mapper.WidgetMapper;
import kr.wisestone.owl.repository.ProjectClosureRepository;
import kr.wisestone.owl.repository.UserDepartmentRepository;
import kr.wisestone.owl.service.*;
import kr.wisestone.owl.util.*;
import kr.wisestone.owl.vo.*;
import kr.wisestone.owl.web.condition.IssueCondition;
import kr.wisestone.owl.web.condition.ProjectCondition;
import kr.wisestone.owl.web.condition.WidgetCondition;
import kr.wisestone.owl.web.view.ExcelView;
import org.apache.commons.lang3.StringUtils;
@@ -53,10 +56,19 @@
    private ProjectService projectService;
    @Autowired
    private ProjectClosureService projectClosureService;
    @Autowired
    private IssueStatusService issueStatusService;
    @Autowired
    private UserService userService;
    @Autowired
    private UserDepartmentService userDepartmentService;
    @Autowired
    private UserDepartmentRepository userDepartmentRepository;
    @Autowired
    protected MessageAccessor messageAccessor;
@@ -72,6 +84,9 @@
    @Autowired
    private UserWorkspaceService userWorkspaceService;
    @Autowired
    private ProjectClosureRepository projectClosureRepository;
    //  전체 위젯을 조회한다.
@@ -173,10 +188,50 @@
        widgetCondition.setProjectIds(projectIds);
        widgetCondition.setProjects(projects);
        widgetCondition.setLoginUserId(this.webAppUtil.getLoginId());
        this.SetMyDepartmentId(widgetCondition); // 로그인 한 유저가 속해있는 부서
        widgetCondition.setCompleteDate(DateUtil.convertDateToStr(new Date()));
        widgetCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        return widgetCondition;
    }
    void SetMyDepartmentId(WidgetCondition widgetCondition){
        Long loginId = widgetCondition.getLoginUserId();
        List<Long> myDepartmentIds = Lists.newArrayList();
        List<UserDepartment> myDepartments = this.userDepartmentRepository.findByUserId(loginId);
        if(myDepartments != null && myDepartments.size() > 0){
            for(UserDepartment myDepartment : myDepartments){
                myDepartmentIds.add(myDepartment.getDepartmentId());
            }
        }
        widgetCondition.setMyDepartmentIds(myDepartmentIds);
    }
    void SetMeAndDownProjectIds(List<Long> parentProjectIds, WidgetCondition widgetCondition) {
        List<Long> downProjectIds = Lists.newArrayList();
        if(parentProjectIds != null && parentProjectIds.size() > 0){
            for(Long parentProjectId : parentProjectIds){
                List<ProjectClosure> projectClosures = this.projectClosureRepository.findByParentProjectId(parentProjectId); //내 프로젝트ID가 상위프로젝트인게 있는지
                if(projectClosures != null && projectClosures.size() > 0){
                    for(ProjectClosure projectClosure : projectClosures){
                        if(projectClosure.getParentProject().getId().equals(parentProjectId)){
                            downProjectIds.add(projectClosure.getProject().getId());
                            //widgetCondition.setDownProjectIds(downProjectIds);
                        }else{
                            downProjectIds.clear();
                        }
                    }
                }else{
                    downProjectIds.clear();
                }
                widgetCondition.setDownProjectIds(downProjectIds);
                List<Long> meAndDownProjectIds = Lists.newArrayList();
                meAndDownProjectIds.addAll(widgetCondition.getProjectIds());
                meAndDownProjectIds.addAll(widgetCondition.getDownProjectIds());
                widgetCondition.setMeAndDownProjectIds(meAndDownProjectIds);
            }
        }
    }
    //  전체 이슈 정보를 조회한다.
@@ -191,6 +246,8 @@
        Long completeIssue = 0L; // 완료된 이슈
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            remainIssue = this.widgetMapper.countRemainIssue(widgetCondition);   //  잔여 이슈
            delayIssue = this.widgetMapper.countTodayDelayIssue(widgetCondition); //  지연된 이슈
            assigneeIssue = this.widgetMapper.countAssigneeIssue(widgetCondition);   //  할당된 이슈
@@ -221,6 +278,7 @@
        List<Map<String, Object>> progressingProjectDetails = Lists.newArrayList();
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            if (this.userWorkspaceService.checkWorkspaceManager()) {
                progressingProjectDetails = this.widgetMapper.findProjectProgressAll(widgetCondition);
            } else {
@@ -320,6 +378,7 @@
        Long totalCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            todayCount = this.widgetMapper.countTodayMyAssigneeIssue(widgetCondition);
            assigneeIssues = this.widgetMapper.findMyAssigneeIssue(widgetCondition);
            totalCount = this.widgetMapper.countMyAssigneeIssue(widgetCondition);
@@ -350,6 +409,8 @@
        Long totalCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            delayIssues = this.widgetMapper.findDelayIssue(widgetCondition);
            totalCount = this.widgetMapper.countDelayIssue(widgetCondition);
        }
@@ -396,6 +457,7 @@
        Long totalCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            todayCount = this.widgetMapper.countTodayRegisterIssue(widgetCondition);
            registerIssues = this.widgetMapper.findRegisterIssue(widgetCondition);
            totalCount = this.widgetMapper.countRegisterIssue(widgetCondition);
@@ -420,12 +482,13 @@
        Map<String, Object> results = this.makeWidgetConditionAllProject(widgetCondition, getWidgetCondition);
        if (widgetCondition.getProjectId() != null) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            List<Map<String, Object>> projectMemberIssues = this.widgetMapper.findProjectMemberIssue(widgetCondition);
            for (Map<String, Object> projectMemberIssue : projectMemberIssues) {
                Long completeCount = MapUtil.getLong(projectMemberIssue, "completeCount");
                Long remainCount = MapUtil.getLong(projectMemberIssue, "remainCount");
                projectMemberIssue.put("account", CommonUtil.decryptAES128(MapUtil.getString(projectMemberIssue, "account")));
                //projectMemberIssue.put("account", CommonUtil.decryptAES128(MapUtil.getString(projectMemberIssue, "account")));
                //  프로젝트 진행률 정보를 구한다.
                this.statisticsProject(completeCount, remainCount, projectMemberIssue, "projectProgressPercent");
@@ -449,6 +512,8 @@
        List<Map<String, Object>> assigneeRemainIssueMaps = Lists.newArrayList();
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            registerCompleteIssueMaps = this.widgetMapper.findMyRegisterCompleteIssue(widgetCondition);
            registerRemainIssueMaps = this.widgetMapper.findMyRegisterRemainIssue(widgetCondition);
            assigneeCompleteIssueMaps = this.widgetMapper.findMyAssigneeCompleteIssue(widgetCondition);
@@ -524,6 +589,7 @@
        Long totalCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            //countChangeStatusAndAssigneeIssue = this.widgetMapper.countChangeStatusAndAssigneeIssue(widgetCondition);
            countChangeStatusAndDepartmentIssue = this.widgetMapper.countChangeStatusAndDepartmentIssue(widgetCondition);
            riskIssues = this.widgetMapper.findRiskIssue(widgetCondition);
@@ -614,6 +680,8 @@
        Long totalIssueCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            dateCounts = this.widgetMapper.findIssueComplete(widgetCondition);
            totalIssueCount = this.widgetMapper.countTotalIssue(widgetCondition);
        }
@@ -694,6 +762,7 @@
        List<Map<String, Object>> results = Lists.newArrayList();
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            results = this.widgetMapper.findByStandIssueStatus(widgetCondition);
        }
@@ -720,6 +789,7 @@
        Map<String, Object> results = this.makeWidgetConditionAllProject(widgetCondition, getWidgetCondition);
        if (widgetCondition.getProjectId() != null) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            List<Map<String, Object>> issueTypeIssues = this.widgetMapper.findByStandIssueType(widgetCondition);
            //  이슈 정보
            results.put("issues", issueTypeIssues);
@@ -794,6 +864,8 @@
        Long totalCount = 0L;
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            severityCounts = this.widgetMapper.countSeverityIssue(widgetCondition);
            severityIssues = this.widgetMapper.findSeverityIssues(widgetCondition);
            totalCount = this.widgetMapper.countSearchIssue(widgetCondition);
@@ -1053,6 +1125,7 @@
        //  내가 등록한 이슈
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            registerIssues = this.widgetMapper.findRegisterIssue(widgetCondition);
        }
@@ -1094,6 +1167,7 @@
        widgetCondition.setPageSize(totalCount.intValue());
        if (widgetCondition.getProjectIds().size() > 0) {
            SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
            delayIssues = this.widgetMapper.findDelayIssue(widgetCondition);
        }
src/main/java/kr/wisestone/owl/web/condition/WidgetCondition.java
@@ -13,9 +13,12 @@
 */
public class WidgetCondition {
    private Long loginUserId;
    private List<Long> myDepartmentIds; // 내가 속해있는 부서 ID
    private Long workspaceId;
    private Long workflowId;
    private List<Long> projectIds;
    private List<Long> downProjectIds;
    private List<Long> meAndDownProjectIds;
    private String completeDate;
    private Integer page;
    private Integer pageSize;
@@ -43,6 +46,14 @@
        this.loginUserId = loginUserId;
    }
    public List<Long> getMyDepartmentIds() {
        return myDepartmentIds;
    }
    public void setMyDepartmentIds(List<Long> myDepartmentIds) {
        this.myDepartmentIds = myDepartmentIds;
    }
    public Long getWorkspaceId() {
        return workspaceId;
    }
@@ -68,6 +79,22 @@
        this.projectIds.add(projectId);
    }
    public List<Long> getDownProjectIds() {
        return downProjectIds;
    }
    public void setDownProjectIds(List<Long> downProjectIds) {
        this.downProjectIds = downProjectIds;
    }
    public List<Long> getMeAndDownProjectIds() {
        return meAndDownProjectIds;
    }
    public void setMeAndDownProjectIds(List<Long> meAndDownProjectIds) {
        this.meAndDownProjectIds = meAndDownProjectIds;
    }
    public String getCompleteDate() {
        return completeDate;
    }
src/main/resources/mybatis/query-template/widget-template.xml
@@ -15,9 +15,9 @@
        WHERE EXISTS(SELECT 1 FROM issue_status iss WHERE iss.issue_status_type != 'CLOSE' AND i.issue_status_id =
        iss.id)
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -31,9 +31,9 @@
        COUNT(i.id) FROM issue i where
        exists(select 1 from issue_status iss where iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -42,8 +42,8 @@
        AND i.complete_date <![CDATA[ < ]]> #{completeDate}
    </select>
    <!--    할당 이슈 개수   -->
    <select id="countAssigneeIssue" resultType="java.lang.Long"
    <!--    할당 이슈 개수 - 담당자 버전  -->
    <!--<select id="countAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        SELECT
        COUNT(i.id) FROM issue i
@@ -57,6 +57,42 @@
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="downProjectIds.size != 0">
                OR i.project_id IN
                <foreach collection="downProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>-->
    <!--    할당 이슈 개수 - 담당부서 버전  -->
    <select id="countAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        SELECT
        COUNT(i.id) FROM issue i
        WHERE EXISTS(SELECT 1 FROM issue_department id WHERE id.issue_id = i.id
        <choose>
            <when test="myDepartmentIds.size != 0">
                AND id.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        ) AND EXISTS(SELECT 1 FROM issue_status iss WHERE iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>
    <!--    내가 오늘 등록한 이슈 개수 -->
@@ -66,9 +102,9 @@
        count(i.id) as todayCount from issue i where
        i.register_id = #{loginUserId}
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -77,7 +113,7 @@
    </select>
    <!--    미할당 이슈 개수   -->
    <select id="countNoAssigneeIssue" resultType="java.lang.Long"
    <!--<select id="countNoAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        SELECT
        COUNT(DISTINCT i.id) FROM issue i
@@ -85,15 +121,35 @@
        WHERE
        EXISTS(select 1 from issue_status iss where iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        AND iu.id IS NULL
    </select>-->
    <!--    미할당 이슈 개수 (담당부서 버전)  -->
    <select id="countNoAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        SELECT
        COUNT(DISTINCT i.id) FROM issue i
        LEFT OUTER JOIN issue_department id ON id.issue_id = i.id
        WHERE
        EXISTS(select 1 from issue_status iss where iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        AND id.id IS NULL
    </select>
    <!--    완료된 이슈 개수   -->
    <select id="countCompleteIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
@@ -102,9 +158,9 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type = 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -124,9 +180,9 @@
        where iss.issue_status_type = 'CLOSE'
        and i.modify_date between #{searchStartDate} and #{searchEndDate}
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -141,9 +197,9 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where 1=1
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -155,8 +211,8 @@
    <!--    3번 위젯 시작 -->
    <!--    진행중인 프로젝트 현황    -->
    <select id="findProjectProgress" resultType="java.util.HashMap"
    <!--    진행중인 프로젝트 현황 (담당자 버전)   -->
    <!--<select id="findProjectProgress" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        p.id as id,
@@ -191,10 +247,48 @@
            </when>
        </choose>
        GROUP by p.id
    </select>-->
    <!--    진행중인 프로젝트 현황 (담당부서 버전)   -->
    <select id="findProjectProgress" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        p.id as id,
        p.name as name,
        replace(p.start_date, "-", ".") as startDate,
        replace(p.end_date, "-", ".") as endDate,
        count(case when iss.issue_status_type = 'CLOSE' THEN 1 END) as 'close',
        count(case when iss.issue_status_type != 'CLOSE' THEN 1 END) as 'remain',
        (select concat(u.name, "%", u.account, "%", u.profile) from user u
        inner join project_role_user pru on pru.user_id = u.id
        inner join project_role pr on pr.id = pru.project_role_id
        where pr.project_id = p.id and pr.role_type = '02'
        ) as managerInfo
        ,
        (
        select count(distinct(d.id)) from department d
        inner join project_role_department prd on prd.department_id = d.id
        inner join project_role pr on pr.id = prd.project_role_id
        where pr.project_id = p.id and pr.role_type = '01'
        ) as teamCount
        from
        project p
        left outer join issue i on p.id = i.project_id
        left outer join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        GROUP by p.id
    </select>
    <!--    진행중인 프로젝트 현황(전체)    -->
    <select id="findProjectProgressAll" resultType="java.util.HashMap"
    <!--    진행중인 프로젝트 현황(전체) (담당자 버전)   -->
    <!--<select id="findProjectProgressAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        p.id as id,
@@ -221,6 +315,36 @@
        left outer join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        GROUP by p.id
    </select>-->
    <!--    진행중인 프로젝트 현황(전체) (담당부서 버전)   -->
    <select id="findProjectProgressAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        p.id as id,
        p.name as name,
        replace(p.start_date, "-", ".") as startDate,
        replace(p.end_date, "-", ".") as endDate,
        count(case when iss.issue_status_type = 'CLOSE' THEN 1 END) as 'close',
        count(case when iss.issue_status_type != 'CLOSE' THEN 1 END) as 'remain',
        (select concat(u.name, "%", u.account, "%", u.profile) from user u
        inner join project_role_user pru on pru.user_id = u.id
        inner join project_role pr on pr.id = pru.project_role_id
        where pr.project_id = p.id and pr.role_type = '02'
        ) as managerInfo
        ,
        (
        select count(distinct(d.id)) from department d
          inner join project_role_department prd on prd.department_id = d.id
          inner join project_role pr on pr.id = prd.project_role_id
        where pr.project_id = p.id and pr.role_type = '01'
        ) as teamCount
        from
        project p
        left outer join issue i on p.id = i.project_id
        left outer join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        GROUP by p.id
    </select>
    <!--    3번 위젯 끝 -->
@@ -228,8 +352,8 @@
    <!--    4번 위젯 시작 -->
    <!--    내가 오늘 할당받은 이슈 개수 -->
    <select id="countTodayMyAssigneeIssue" resultType="java.lang.Long"
    <!--내가 오늘 할당받은 이슈 개수 - 담당자 버전-->
    <!--<select id="countTodayMyAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        count(i.id) as todayCount from issue i where
@@ -243,10 +367,39 @@
                </foreach>
            </when>
        </choose>
    </select>-->
    <!--    내가 오늘 할당받은 이슈 개수 - 담당부서 버전 -->
    <select id="countTodayMyAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        count(i.id) as todayCount from issue i where
        exists(select 1 from issue_department id where id.issue_id = i.id
        <choose>
            <when test="myDepartmentIds.size != 0">
                AND id.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        and id.register_date
        BETWEEN (CURDATE()) AND (CURDATE() + INTERVAL 1 DAY))
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>
    <!--    내가 담당하는 이슈 개수  -->
    <select id="countMyAssigneeIssue" resultType="java.lang.Long"
    <!--    내가 담당하는 이슈 개수 - 담당자  -->
    <!--<select id="countMyAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        count(distinct i.id)
@@ -264,10 +417,41 @@
        </choose>
        and iu.user_id = #{loginUserId}
        and iss.issue_status_type != 'CLOSE'
    </select>-->
    <!--    내가 담당하는 이슈 개수 - 담당부서  -->
    <select id="countMyAssigneeIssue" resultType="java.lang.Long"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        count(distinct i.id)
        from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="myDepartmentIds.size != 0">
                AND id.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        And iss.issue_status_type != 'CLOSE'
    </select>
    <!--    내가 담당하는 이슈  -->
    <select id="findMyAssigneeIssue" resultType="java.util.HashMap"
    <!--<select id="findMyAssigneeIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        distinct i.id as id,
@@ -292,6 +476,50 @@
            </when>
        </choose>
        and iu.user_id = #{loginUserId}
        and iss.issue_status_type != 'CLOSE'
        GROUP by i.id
        <if test="page != null and !page.equals('')">
            limit #{pageSize} offset #{page};
        </if>
    </select>-->
    <!--    내가 담당하는 이슈 - 담당부서  -->
    <select id="findMyAssigneeIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        distinct i.id as id,
        i.title as title,
        p.name as projectName,
        CONCAT(p.project_key, '-', i.issue_number) AS issueKey,
        p.project_key as projectKey,
        i.issue_number as issueNumber,
        iss.name as issueStatusName,
        replace(i.complete_date, "-", ".") as completeDate,
        replace(SUBSTRING(i.register_date, 1, 10), "-", ".") as registerDate
        from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        inner join project p on p.id = i.project_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="myDepartmentIds.size != 0">
                AND id.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        and iss.issue_status_type != 'CLOSE'
        GROUP by i.id
        <if test="page != null and !page.equals('')">
@@ -334,9 +562,9 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -386,9 +614,9 @@
        inner join project p on p.id = i.project_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -409,9 +637,9 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -433,6 +661,7 @@
            , replace(i.start_date, "-", ".") as startDate
            , replace(i.complete_date, "-", ".") as completeDate
            , i.title as title
            , p.name as projectName
            , iss.name as issueStatusName
            , i.issue_number as issueNumber
            , p.project_key as projectKey
@@ -446,9 +675,9 @@
        WHERE 1=1
        AND i.register_id = #{loginUserId}
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -477,9 +706,9 @@
            AND EXISTS (SELECT 1 FROM issue_status iss WHERE iss.id = i.issue_status_id AND iss.issue_status_type != 'CLOSE')
        </if>
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -502,6 +731,7 @@
            , replace(i.start_date, "-", ".") as startDate
            , replace(i.complete_date, "-", ".") as completeDate
            , i.title as title
            , p.name as projectName
            , iss.name as issueStatusName
            , i.issue_number as issueNumber
            , p.project_key as projectKey
@@ -514,9 +744,9 @@
        </if>
        WHERE 1=1
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -540,9 +770,9 @@
        </if>
        WHERE 1=1
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -577,9 +807,9 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where 1=1
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -592,7 +822,7 @@
    <!--    11번 위젯 시작 -->
    <!--    멤버별 진행률 -->
    <select id="findProjectMemberIssue" resultType="java.util.HashMap"
    <!--<select id="findProjectMemberIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        u.name, u.profile, u.account,
@@ -614,7 +844,42 @@
        inner join project_role pr on pr.id = pru.project_role_id
        inner join project p on p.id = pr.project_id
        where p.id = #{projectId} and p.status = '02'
    </select>-->
    <!--  담당부서별 진행률 -->
    <select id="findProjectMemberIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        d.department_name as departmentName,
        (select count(*) from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        where id.department_id = d.id and i.project_id = p.id and iss.issue_status_type = 'CLOSE') as completeCount,
        (select count(*) from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        where id.department_id = d.id and i.project_id = p.id and iss.issue_status_type != 'CLOSE') as remainCount,
        (select count(*) from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        where id.department_id = d.id and i.project_id = p.id and iss.issue_status_type != 'CLOSE' and i.complete_date is not null and i.complete_date <![CDATA[ < ]]> now()) as delayCount
        from
        department d
        inner join project_role_department prd on prd.department_id = d.id
        inner join project_role pr on pr.id = prd.project_role_id
        inner join project p on p.id = pr.project_id
        WHERE
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        and p.status = '02';
    </select>
    <!--    11번 위젯 끝 -->
@@ -629,9 +894,9 @@
        'CLOSE') AND
        i.register_id = #{loginUserId}
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -647,9 +912,9 @@
        'CLOSE')
        AND i.register_id = #{loginUserId}
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -658,7 +923,7 @@
    </select>
    <!--    담당한 이슈 중 완료 갯수  -->
    <select id="findMyAssigneeCompleteIssue" resultType="java.util.HashMap"
    <!--<select id="findMyAssigneeCompleteIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select i.project_id as projectId, count(distinct i.id) as issueCount from issue i
        inner join issue_user iu on iu.issue_id = i.id
@@ -673,10 +938,39 @@
            </when>
        </choose>
        group by i.project_id
    </select>-->
    <!--    담당한 이슈 중 완료 갯수  - 담당부서 -->
    <select id="findMyAssigneeCompleteIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select i.project_id as projectId, count(distinct i.id) as issueCount from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        <choose>
            <when test="myDepartmentIds.size != 0">
                AND id.department_id IN
                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
            <otherwise>
                AND 1 != 1
            </otherwise>
        </choose>
        and iss.issue_status_type = 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        group by i.project_id
    </select>
    <!--    담당한 이슈 중 진행 갯수  -->
    <select id="findMyAssigneeRemainIssue" resultType="java.util.HashMap"
    <!--<select id="findMyAssigneeRemainIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select i.project_id as projectId, count(distinct i.id) as issueCount from issue i
        inner join issue_user iu on iu.issue_id = i.id
@@ -686,6 +980,35 @@
            <when test="projectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        group by i.project_id
    </select>-->
    <!--    담당한 이슈 중 진행 갯수  - 담당부서 -->
    <select id="findMyAssigneeRemainIssue" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select i.project_id as projectId, count(distinct i.id) as issueCount from issue i
        inner join issue_department id on id.issue_id = i.id
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="myDepartmentIds.size != 0">
                id.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="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -723,9 +1046,9 @@
        WHERE w.id = #{workspaceId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -737,6 +1060,7 @@
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        SELECT i.title AS title,
        s.name AS severityName,
        p.name AS projectName,
        s.color AS severityColor,
        replace(i.start_date, "-", ".") AS startDate,
        replace(i.complete_date, "-", ".")  AS completeDate,
@@ -753,9 +1077,9 @@
        AND s.id = #{severityId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
@@ -778,9 +1102,9 @@
        AND s.id = #{severityId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="projectIds.size != 0">
            <when test="meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="projectIds" item="item" index="index" separator="," open="(" close=")">
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
src/main/webapp/custom_components/widget/delay-issue-widget/delay-issue-widget.html
@@ -40,6 +40,9 @@
                        <th class="text-center width-80-p" translate="dashboard.delayDate">
                            지연일
                        </th>
                        <th class="text-center" translate="common.projectName">
                            프로젝트
                        </th>
                        <th class="text-center" translate="issue.issueTitle">
                            이슈 제목
                        </th>
@@ -56,6 +59,9 @@
                        <td class="text-center">
                            <span class="text-danger">+{{issue.delayDay}}</span>
                        </td>
                        <td class="text-center">
                            {{issue.projectName}}
                        </td>
                        <td class="text-left titlename cursor">
                            <span ng-click="fn.moveIssue(issue)">{{issue.title}}</span>
                        </td>
src/main/webapp/custom_components/widget/member-progress-widget/member-progress-widget.html
@@ -42,8 +42,11 @@
                            <table class="table table-dash table-bordered width600 table-layout-fixed">
                                <thead>
                                <tr>
                                    <th class="text-center" translate="dashboard.teamMember">
                                    <!--<th class="text-center" translate="dashboard.teamMember">
                                        팀원
                                    </th>-->
                                    <th class="text-center" translate="dashboard.teamDepartment">
                                        담당부서
                                    </th>
                                    <th class="text-center" translate="dashboard.progressPercent">
                                        진행률
@@ -62,23 +65,23 @@
                                        <div class="os-dropdown-trigger os-dropdown-position-left user-with-avatar"
                                             owl-profile-over>
                                                    <span class="avatar">
                                                        <img alt="" ng-src="{{member.profile}}">&nbsp;{{member.name}}
                                                        {{member.departmentName}}
                                                    </span>
                                            <div class="os-dropdown light message-list">
                                                <ul>
                                                <!--<ul>
                                                    <li>
                                                        <a>
                                                            <div class="message-content">
                                                                <h6 class="message-from">
                                                                    {{member.name}}
                                                                    {{member.departmentName}}
                                                                </h6>
                                                                <h6 class="message-title">
                                                                    {{member.account}}
                                                                </h6>
                                                                </h6>&ndash;&gt;
                                                            </div>
                                                        </a>
                                                    </li>
                                                </ul>
                                                </ul>-->
                                            </div>
                                        </div>
                                    </td>
src/main/webapp/custom_components/widget/my-assignee-issue-widget/my-assignee-issue-widget.html
@@ -52,6 +52,9 @@
                        <th class="text-center width-80-p" translate="common.registrationDate">
                            등록일
                        </th>
                        <th class="text-center" translate="common.projectName">
                            프로젝트
                        </th>
                        <th class="text-center" translate="issue.issueTitle">
                            이슈 제목
                        </th>
@@ -68,6 +71,9 @@
                        <td>
                            {{issue.registerDate}}
                        </td>
                        <td class="text-center">
                            {{issue.projectName}}
                        </td>
                        <td class="text-left titlename cursor">
                            <span ng-click="fn.moveIssue(issue)">{{issue.title}}</span>
                        </td>
src/main/webapp/custom_components/widget/register-issue-widget/register-issue-widget.directive.js
@@ -69,6 +69,7 @@
                                if (result.data.message.status === "success") {
                                    $scope.vm.page.selectedPage = currentPage + 1;
                                    $scope.vm.registerIssueWidget.issues = result.data.registerIssueWidget.issues;
                                    $scope.vm.registerIssueWidget.issues.myProjectName = $rootScope.workProject.name;
                                }
                                else {
                                    SweetAlert.error($filter("translate")("dashboard.failedToListOfIssueRegisteredLookup"), result.data.message.message); // 내가 등록한 이슈 목록 조회 실패
src/main/webapp/custom_components/widget/register-issue-widget/register-issue-widget.html
@@ -52,6 +52,9 @@
                        <th class="text-center width-120-p" translate="common.status">
                            상태
                        </th>
                        <th class="text-center" translate="common.projectName">
                            프로젝트
                        </th>
                        <th class="text-center" translate="issue.issueTitle">
                            이슈 제목
                        </th>
@@ -65,6 +68,9 @@
                        <td class="text-center">
                            {{issue.issueStatusName}}
                        </td>
                        <td class="text-center">
                            {{issue.projectName}}
                        </td>
                        <td class="text-left titlename cursor">
                            <span ng-click="fn.moveIssue(issue)">{{issue.title}}</span>
                        </td>
src/main/webapp/custom_components/widget/risk-issue-widget/risk-issue-widget.html
@@ -54,6 +54,9 @@
                        <th class="text-center width-80-p" translate="dashboard.division">
                            구분
                        </th>
                        <th class="text-center" translate="common.projectName">
                            프로젝트
                        </th>
                        <th class="text-center" translate="issue.issueTitle">
                            이슈 제목
                        </th>
@@ -75,6 +78,9 @@
                                           ng-if="issue.changeIssueStatusType"></i>
                                    </span>
                        </td>
                        <td class="text-center">
                            {{issue.projectName}}
                        </td>
                        <td class="text-left titlename cursor">
                            <span ng-click="fn.moveIssue(issue)">{{issue.title}}</span>
                        </td>
src/main/webapp/custom_components/widget/severity-issue-widget/severity-issue-widget.html
@@ -88,6 +88,9 @@
                        <th class="text-center width-120-p" translate="common.importance">
                            중요도
                        </th>
                        <th class="text-center width-120-p" translate="common.projectName">
                            중요도
                        </th>
                        <th class="text-center" translate="issue.issueTitle">
                            이슈 제목
                        </th>
@@ -107,6 +110,9 @@
                                 {{issue.severityName}}
                            </span>
                        </td>
                        <td class="text-center">
                            {{issue.projectName}}
                        </td>
                        <td class="text-left titlename cursor">
                            <span ng-click="fn.moveIssue(issue)">{{issue.title}}</span>
                        </td>
src/main/webapp/i18n/ko/global.json
@@ -19,6 +19,7 @@
        "admin": "관리자",
        "progressPercent": "진행률",
        "teamMember": "팀원",
        "teamDepartment": "담당부서",
        "assignedToMeIssue": "나에게 할당된 이슈",
        "assignedTodayIssue": "오늘 할당된 이슈",
        "progressingIssue": "진행중인 이슈 목록",