OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-12-01 b9685b82f1c9d5c0b8e0d31bca5436e644e5ab7e
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
12개 파일 변경됨
169 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MailConstants.java 5 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 13 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/IssueController.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueForm.java 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/widget-template.xml 61 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/code_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js 38 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MailConstants.java
@@ -30,7 +30,10 @@
    ISSUE_ADD("issue.add.title", "issueAddEmail"),  //  이슈 생성
    ISSUE_REMOVE("issue.remove.title", "issueRemoveEmail"), //  이슈 삭제
    ISSUE_SEND("issue.send.title", "issueSendEmail"); //  이슈 이메일 전달
    ISSUE_SEND("issue.send.title", "issueSendEmail"), //  이슈 이메일 전달
    ISSUE_SEND_1("issue.send1.title", "issueSend1Email"), //  이슈 이메일 전달
    ISSUE_SEND_2("issue.send2.title", "issueSend2Email"), //  이슈 이메일 전달
    ISSUE_SEND_3("issue.send3.title", "issueSend3Email"); //  이슈 이메일 전달
    //  ISSUE_MODIFY("issue.modify.title", "issueModifyEmail"); //  이슈 수정
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -114,6 +114,7 @@
    public static final String ISSUE_REMOVE_NOT_SELECT = "ISSUE_REMOVE_NOT_SELECT"; //  삭제할 이슈가 선택되지 않았습니다.
    public static final String ISSUE_NO_TITLE = "ISSUE_NO_TITLE";   //  이슈 제목이 입력되지 않았습니다.
    public static final String ISSUE_NOT_SEND_USER = "ISSUE_NOT_SEND_USER";   //  이슈 발송 대상자를 선택하지 않았습니다.
    public static final String ISSUE_NOT_SELECT_TEMPLATE = "ISSUE_NOT_SELECT_TEMPLATE";   //  이슈 발송 템플릿을 선택하지 않았습니다.
    public static final String ISSUE_COMMENT_REMOVE_NOT_SELECT = "ISSUE_COMMENT_REMOVE_NOT_SELECT"; //  삭제할 댓글을 선택하지 않았습니다.
    public static final String ISSUE_COMMENT_NOT_EXIST = "ISSUE_COMMENT_NOT_EXIST"; //  댓글이 존재하지 않습니다.
src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java
@@ -32,6 +32,9 @@
    ISSUE_MODIFY,   //  이슈 수정
    ISSUE_REMOVE,   //  이슈 삭제
    ISSUE_SEND, //  이슈 정보 이메일로 전달
    ISSUE_SEND_1,
    ISSUE_SEND_2,
    ISSUE_SEND_3,
    PROJECT_ADD,    //  프로젝트 생성
    PROJECT_MODIFY, //  프로젝트 수정
    PROJECT_REMOVE, //  프로젝트 삭제
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2591,6 +2591,9 @@
        if (issueForm.getSendEmails().size() < 1) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SEND_USER));
        }else if (issueForm.getTemplate() != null){
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SELECT_TEMPLATE));
        }
        Issue issue = this.getIssue(issueForm.getId());
@@ -2612,8 +2615,15 @@
        //  사용자 시스템 기능 사용 정보 수집
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ANOTHER_USER_SEND_EMAIL));
        //this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND, issueMap, null);
        this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND, issueMap, null);
        if(issueForm.getTemplate().equals("SEND1")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_1, issueMap, null);
        }else if(issueForm.getTemplate().equals("SEND2")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_2, issueMap, null);
        }else if(issueForm.getTemplate().equals("SEND3")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_3, issueMap, null);
        }
    }
    //  예약 발생 이슈를 실행한다
@@ -2791,7 +2801,6 @@
        StringBuilder sb = new StringBuilder();
        if (newParentIssueId != null) { // 추가 할 경우
            // todo 이전 하위 일감 히스토리기록 필요
            parentIssue = this.getIssue(newParentIssueId); //상위이슈(myIssue)
            issue.setParentIssue(parentIssue); //myIssue를 하위이슈의 상위이슈로 set
            this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = 하위이슈
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
@@ -179,6 +179,24 @@
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                break;
            case ISSUE_SEND_1:    //  이슈 이메일로 대상자에게 발송
                mailConstants = MailConstants.ISSUE_SEND_1;
                context = StringTemplateUtil.makeContext(params, locale);
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                break;
            case ISSUE_SEND_2:    //  이슈 이메일로 대상자에게 발송
                mailConstants = MailConstants.ISSUE_SEND_2;
                context = StringTemplateUtil.makeContext(params, locale);
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                break;
            case ISSUE_SEND_3:    //  이슈 이메일로 대상자에게 발송
                mailConstants = MailConstants.ISSUE_SEND_3;
                context = StringTemplateUtil.makeContext(params, locale);
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                break;
            case USER_JOIN_STATISTICS:  //  일일 사용자 가입 정보 발송
                mailConstants = MailConstants.USER_JOIN_STATISTICS;
                context = StringTemplateUtil.makeContext(params, locale);
src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
@@ -486,6 +486,7 @@
            List<Map<String, Object>> projectMemberIssues = this.widgetMapper.findProjectMemberIssue(widgetCondition);
            for (Map<String, Object> projectMemberIssue : projectMemberIssues) {
                //String departmentName = MapUtil.getString(projectMemberIssue, "departmentName");
                Long completeCount = MapUtil.getLong(projectMemberIssue, "completeCount");
                Long remainCount = MapUtil.getLong(projectMemberIssue, "remainCount");
                //projectMemberIssue.put("account", CommonUtil.decryptAES128(MapUtil.getString(projectMemberIssue, "account")));
@@ -1037,6 +1038,7 @@
        excelInfo.setDatas(assigneeIssues);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈 번호
        excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("common.registerDate"), 8, ExportExcelAttrVo.ALIGN_CENTER)); // 등록일
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // 이슈
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 상태
        excelInfo.addAttrInfos(new ExportExcelAttrVo("completeDate", this.messageAccessor.message("common.endDate"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 종료일
@@ -1104,6 +1106,7 @@
        excelInfo.setDatas(riskIssues);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈 번호
        excelInfo.addAttrInfos(new ExportExcelAttrVo("riskType", this.messageAccessor.message("common.division"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 구분
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // 이슈
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 상태
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueUsers", this.messageAccessor.message("common.assignee"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 담당자
@@ -1137,6 +1140,7 @@
        excelInfo.setDatas(registerIssues);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈 번호
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 상태
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // 이슈
        excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 기간
        return excelInfo;
@@ -1182,6 +1186,7 @@
        excelInfo.setDatas(delayIssues);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈 번호
        excelInfo.addAttrInfos(new ExportExcelAttrVo("delayDay", this.messageAccessor.message("common.delayDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 지연일
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // 이슈
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 상태
        excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 기간
@@ -1223,7 +1228,9 @@
        excelInfo.setFileName(this.messageAccessor.message("common.progressByMember")); // 멤버별 진행률
        excelInfo.setDatas(members);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("byName", this.messageAccessor.message("common.teamMember"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 팀원
        //excelInfo.addAttrInfos(new ExportExcelAttrVo("byName", this.messageAccessor.message("common.teamMember"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 팀원
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("departmentName", this.messageAccessor.message("common.teamDepartment"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 담당부서
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectProgressPercent", this.messageAccessor.message("common.progressPercent"), 6, ExportExcelAttrVo.ALIGN_LEFT)); // 진행률
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueCount", this.messageAccessor.message("common.assignedIssue"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 담당 이슈
        excelInfo.addAttrInfos(new ExportExcelAttrVo("delayCount", this.messageAccessor.message("common.delaying"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 지연중
@@ -1300,6 +1307,7 @@
        excelInfo.setDatas(severityIssue);
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 8, ExportExcelAttrVo.ALIGN_CENTER));    //이슈 번호
        excelInfo.addAttrInfos(new ExportExcelAttrVo("severityName", this.messageAccessor.message("common.importance"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 중요도
        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // 프로젝트
        excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈제목
        excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER));  //이슈 상태
        excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 기간
src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -165,7 +165,7 @@
    }
    //  메일 발송 대상자 목록 조회
    @RequestMapping(value = "/issue/findMailTargetAll", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    /*@RequestMapping(value = "/issue/findMailTargetAll", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> findMailTargetAll(@RequestBody Map<String, Map<String, Object>> params) {
@@ -175,7 +175,7 @@
//        this.issueService.findMailTargetAll(resJsonData, IssueCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        return this.setSuccessMessage(resJsonData);
    }
    }*/
    /*//  업체 담당자 메일 목록 조회
src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -30,6 +30,7 @@
    private List<Long> userIds = Lists.newArrayList();
    private List<Long> departmentIds = Lists.newArrayList();    // 담당 부서
    private List<String> sendEmails = Lists.newArrayList(); //  이메일 발송 대상자
    private String template;
    private List<Long> attachedFileIds = Lists.newArrayList();
    private Long relationIssue;   // 연관 일감
    private List<Map<String, Object>> issueCustomFields = Lists.newArrayList();
@@ -72,6 +73,11 @@
        //  메일 발송자 정보
        if (MapUtil.getStrings(params, "sendEmails") != null) {
            form.setSendEmails(MapUtil.getStrings(params, "sendEmails"));
        }
        //  메일 템플릿 정보
        if (MapUtil.getString(params, "template") != null) {
            form.setTemplate(MapUtil.getString(params, "template"));
        }
        //  텍스트 에디터에 첨부된 파일을 이슈와 연결하는 정보
@@ -356,4 +362,12 @@
    public void setFiles(List<Map<String, Object>> files) {
        this.files = files;
    }
    public String getTemplate() {
        return template;
    }
    public void setTemplate(String template) {
        this.template = template;
    }
}
src/main/resources/mybatis/query-template/widget-template.xml
@@ -15,7 +15,7 @@
        WHERE EXISTS(SELECT 1 FROM issue_status iss WHERE iss.issue_status_type != 'CLOSE' AND i.issue_status_id =
        iss.id)
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -31,7 +31,7 @@
        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="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -86,7 +86,7 @@
        </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">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -102,7 +102,7 @@
        count(i.id) as todayCount from issue i where
        i.register_id = #{loginUserId}
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -140,7 +140,7 @@
        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">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -158,7 +158,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type = 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -180,7 +180,7 @@
        where iss.issue_status_type = 'CLOSE'
        and i.modify_date between #{searchStartDate} and #{searchEndDate}
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -197,7 +197,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -277,7 +277,7 @@
        left outer join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -389,7 +389,7 @@
        and id.register_date
        BETWEEN (CURDATE()) AND (CURDATE() + INTERVAL 1 DAY))
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -429,7 +429,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -502,7 +502,7 @@
        inner join project p on p.id = i.project_id
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -562,7 +562,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -607,14 +607,15 @@
        (case when ir.change_issue_status_count > 3 then true else false end) as changeIssueStatusType,
        CONCAT(p.project_key, '-', i.issue_number) AS issueKey,
        i.issue_number as issueNumber,
        p.project_key as projectKey
        p.project_key as projectKey,
        p.name as projectName
        from issue i
        inner join issue_risk ir on ir.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 iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -637,7 +638,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -675,7 +676,7 @@
        WHERE 1=1
        AND i.register_id = #{loginUserId}
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -706,7 +707,7 @@
            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="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -744,7 +745,7 @@
        </if>
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -770,7 +771,7 @@
        </if>
        WHERE 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -807,7 +808,7 @@
        inner join issue_status iss on iss.id = i.issue_status_id
        where 1=1
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -851,6 +852,7 @@
            parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
        select
        d.department_name as departmentName,
        p.name as projectName,
        (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
@@ -870,7 +872,7 @@
        inner join project p on p.id = pr.project_id
        WHERE
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                p.id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -894,7 +896,7 @@
        'CLOSE') AND
        i.register_id = #{loginUserId}
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -912,7 +914,7 @@
        'CLOSE')
        AND i.register_id = #{loginUserId}
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -959,7 +961,7 @@
        </choose>
        and iss.issue_status_type = 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -1006,7 +1008,7 @@
            </otherwise>
        </choose>
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -1046,7 +1048,7 @@
        WHERE w.id = #{workspaceId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -1066,6 +1068,7 @@
        replace(i.complete_date, "-", ".")  AS completeDate,
        i.issue_number AS issueNumber,
        p.project_key AS projectKey,
        p.name AS projectName,
        iss.name AS issueStatusName,
        CONCAT(p.project_key, '-', i.issue_number) AS issueKey
        FROM issue i
@@ -1077,7 +1080,7 @@
        AND s.id = #{severityId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
@@ -1102,7 +1105,7 @@
        AND s.id = #{severityId}
        AND iss.issue_status_type != 'CLOSE'
        <choose>
            <when test="meAndDownProjectIds.size != 0">
            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                AND i.project_id IN
                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
src/main/webapp/WEB-INF/i18n/code_ko_KR.properties
@@ -29,6 +29,7 @@
common.registerDate=\uB4F1\uB85D\uC77C
common.admin=\uAD00\uB9AC\uC790
common.teamMember=\uD300\uC6D0
common.teamDepartment=\uB2F4\uB2F9\uBD80\uC11C
common.registration=\uB4F1\uB85D
common.assigned=\uB2F4\uB2F9
common.progressPercent=\uC9C4\uD589\uB960
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -116,6 +116,7 @@
ISSUE_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uC774\uC288\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
ISSUE_NO_TITLE = \uC774\uC288 \uC81C\uBAA9\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
ISSUE_NOT_SEND_USER = \uC774\uC288 \uBC1C\uC1A1 \uB300\uC0C1\uC790\uB97C \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
ISSUE_NOT_SELECT_TEMPLATE = \uC774\uC288 \uBC1C\uC1A1 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
ISSUE_COMMENT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uB313\uAE00\uC744 \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
ISSUE_COMMENT_NOT_EXIST = \uB313\uAE00\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js
@@ -51,6 +51,44 @@
                            $scope.vm.riskIssueWidget = result.data.riskIssueWidget;
                            //  나의 이슈 현황 정보를 저장한다.
                            $scope.vm.myIssueWidget = result.data.myIssueWidget;
                            const members = result.data.memberProgressWidget.members;
                            var filterMembers = members.filter(function(item, idx){
                                return members.findIndex(function(item2, idx2){
                                    return item.departmentName === item2.departmentName
                                }) == idx;
                            });
                            var departmentNames = [];
                            angular.forEach(filterMembers, function (member) {
                                departmentNames.push(member.departmentName);
                            });
                            var completeCounts = [];
                            var delayCounts = [];
                            var remainCounts = [];
                            for(var j=0; j<departmentNames.length; j++){ //배열 초기값 선언
                                completeCounts[j] = 0;
                                delayCounts[j] = 0;
                                remainCounts[j] = 0;
                            }
                            for(var i=0; i<members.length; i++){
                                for(var j=0; j<departmentNames.length; j++){
                                    if(members[i].departmentName === departmentNames[j]){
                                        completeCounts[j] += members[i].completeCount;
                                        delayCounts[j] += members[i].delayCount;
                                        remainCounts[j] += members[i].remainCount;
                                    }
                                }
                            }
                            for(var i=0; i<filterMembers.length; i++){
                                filterMembers[i].completeCount = completeCounts[i]
                                filterMembers[i].delayCount = delayCounts[i]
                                filterMembers[i].remainCount = remainCounts[i]
                            }
                            result.data.memberProgressWidget.members = filterMembers;
                            //  멤버별 진행률을 저장한다.
                            $scope.vm.memberProgressWidget = result.data.memberProgressWidget;
                            //  전체 이슈 처리 현황 정보를 저장한다.