From 4d06a7593fba3df556fc3728c142554907c6b157 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 수, 15 12월 2021 10:46:45 +0900
Subject: [PATCH] '전체 이슈 프로젝트 보기' 권한 '이슈 관리' 권한으로 변경 - 이슈관리: 모든 이슈 수정 가능

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  128 +++++++++++++++++++++++++++++++++---------
 1 files changed, 99 insertions(+), 29 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 3e0ea24..c2d6601 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -175,6 +175,9 @@
     private SimpMessagingTemplate simpMessagingTemplate;
 
     @Autowired
+    private UserDepartmentService userDepartmentService;
+
+    @Autowired
     private UserDepartmentRepository userDepartmentRepository;
 
     @Autowired
@@ -773,7 +776,7 @@
         UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
         if (this.userWorkspaceService.checkWorkspaceManager(user)
-                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
+                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) {
             this.SetAllDepartmentId(issueCondition);
         } else{
             this.SetMyDepartmentId(issueCondition);
@@ -802,6 +805,7 @@
         this.setMapToIssueVo(results, issueVos, issueCondition, user);
 
         if (issueCondition.getTree()) {
+            this.setParentIssue(issueVos);
             this.setDownIssues(user, issueVos);
             this.setRelationIssues(issueVos);
         }
@@ -831,9 +835,9 @@
                 IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
                 addIssueVo.setIssueTypeId(downIssue.getIssueType().getId());
                 downIssueVos.add(addIssueVo);
-
             }
             issueVo.setIssueDownVos(downIssueVos);
+
             if (downIssueVos.size() > 0) {
                 this.setDownIssues(user, downIssueVos);
             }
@@ -843,11 +847,10 @@
             this.setIssueDepartmentList(issueVos, issueCondition, user);
             //  �벑濡앹옄 �젙蹂� 異붽�
             this.setRegister(issueVos);  //  �떞�떦�옄 �젙蹂� �뀑�똿
-
             //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽�
             this.setIssueCustomFieldValue(issueVos, issueCondition);
-
-            this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            this.SetWorkflowDepartment(issueVos);
         }
     }
 
@@ -857,6 +860,20 @@
             List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueVo.getId());
             for(IssueVo relationIssue : relationIssues){
                 issueVo.addRelationIssueVo(ConvertUtil.copyProperties(relationIssue, IssueVo.class));
+            }
+        }
+    }
+
+    // �긽�쐞 �씠�뒋 泥댄겕
+    private void setParentIssue(List<IssueVo> issueVos) {
+        for(IssueVo issueVo : issueVos) {
+            if(issueVo.getParentIssueId() != null) {
+                Issue parentIssue = this.getIssue(issueVo.getParentIssueId());
+                //issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class));
+                if(parentIssue.getIssueCustomFieldValues() == null || parentIssue.getIssueCustomFieldValues().size() == 0){
+                    issueVo.setIssueCustomFieldValueVos(null);
+                }
+                ConvertUtil.copyProperties(parentIssue, issueVo);
             }
         }
     }
@@ -898,15 +915,19 @@
     public void findApiIssue(ApiMonitorCondition apiMonitorCondition, Map<String, Object> resJsonData) {
 
         IssueTypeCondition issueTypeCondition = new IssueTypeCondition();
+        issueTypeCondition.setIsApi(Issue.IS_API_YES);
         List<IssueTypeVo> issueTypes = this.issueTypeService.findIssueType(issueTypeCondition);
 
-        // 媛믪씠 �뾾�쓣 寃쎌슦 珥덇린媛� �엯�젰
-        if (StringUtils.isEmpty(apiMonitorCondition.getSearchPeriod())) {
-            apiMonitorCondition.setSearchPeriod(DateUtil.LAST_SEVEN_DAYS);
-        }
-
         //  寃��깋 �씪�옄瑜� 援ы븳�떎.
-        List<Date> searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod());
+        List<Date> searchDates = Lists.newArrayList();
+        if (apiMonitorCondition.getSearchPeriod().equals(DateUtil.CUSTOM_INPUT)) {
+            Date startDate = DateUtil.convertStrToDate(apiMonitorCondition.getSearchStartDate(), "yyyy-MM-dd");
+            Date endDate = DateUtil.addDays(DateUtil.convertStrToDate(apiMonitorCondition.getSearchEndDate(), "yyyy-MM-dd"), 1);
+
+            searchDates = CommonUtil.findSearchPeriod(startDate, endDate);
+        } else {
+            searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod());
+        }
 
         //  �궇吏쒓� 寃��깋�릺吏� �븡�븯�쑝硫� �삤瑜�
         if (searchDates.size() < 1) {
@@ -1115,7 +1136,9 @@
         //  �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎.
         if (condition.getProjectIds().size() < 1) {
             List<Map<String, Object>> projects = null;
-            if (this.userWorkspaceService.checkWorkspaceManager(user)) {
+            UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+            if (this.userWorkspaceService.checkWorkspaceManager(user)
+                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) {
                 projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition);
             } else  {
                 projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
@@ -1224,7 +1247,7 @@
             }
 
             //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
+            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, null)) {
                 issueVo.setModifyPermissionCheck(Boolean.TRUE);
             }
         }
@@ -1261,7 +1284,7 @@
             }
 
             //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
+            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
                 issueVo.setModifyPermissionCheck(Boolean.TRUE);
             }
         }
@@ -1276,6 +1299,7 @@
         if (issueCondition.getId() != null) {
             Issue issue = this.getIssue(issueCondition.getId());
             issueVo = ConvertUtil.copyProperties(issue, IssueVo.class);
+            User user = this.webAppUtil.getLoginUserObject();
 
             switch (issueCondition.getDeep()) {
                 case "01": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦遺��꽌, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �뀑�똿�븳�떎.
@@ -1296,7 +1320,7 @@
                     break;
 
                 case "02": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎.
-                    this.setIssueDetail(issueVo, issue);    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
+                    this.setIssueDetail(issueVo, issue, user);    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
                     this.setIssueTableConfigs(issue, issueVo);
                     issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class));
                     break;
@@ -1357,7 +1381,7 @@
     //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
     @Override
     @Transactional(readOnly = true)
-    public void setIssueDetail(IssueVo issueVo, Issue issue) {
+    public void setIssueDetail(IssueVo issueVo, Issue issue, User user) {
         issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class));
         issueVo.setIssueTypeVo(ConvertUtil.copyProperties(issue.getIssueType(), IssueTypeVo.class));
         IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(issue.getIssueStatus(), IssueStatusVo.class, "issueStatusType");
@@ -1392,8 +1416,12 @@
         this.setIssueCompanyField(issue, issueVo);  //�뾽泥� �젙蹂� �꽭�똿
         this.setIssueIspField(issue, issueVo);  //ISP �젙蹂� �꽭�똿
         this.setIssueHostingField(issue, issueVo);  //HOSTING �젙蹂� �꽭�똿
-
         this.setParentIssue(issue,issueVo); //�긽�쐞 �씠�뒋 �젙蹂� �꽭�똿
+
+        //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
+        if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
+            issueVo.setModifyPermissionCheck(Boolean.TRUE);
+        }
     }
 
     //  �긽�쐞�씪媛� �젙蹂� 異붽�
@@ -1501,6 +1529,15 @@
             DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class);
             departmentVo.setByName(departmentVo.getDepartmentName());
             departmentVos.add(departmentVo);
+
+            List<UserDepartment> userDepartments = this.userDepartmentRepository.findByDepartmentId(departmentVo.getId());
+            if (userDepartments != null && userDepartments.size() > 0) {
+                for (UserDepartment userDepartment : userDepartments) {
+                    if (userDepartment.getUserId().equals(this.webAppUtil.getLoginId())){
+                        issueVo.setModifyPermissionCheck(Boolean.TRUE);
+                    }
+                }
+            }
         }
         issueVo.setDepartmentVos(departmentVos);
     }
@@ -1907,7 +1944,7 @@
     //  �씠�뒋 �닔�젙 沅뚰븳 泥댄겕
     private void verifyIssueModifyPermission(Issue issue, User user) {
         //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-        if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user)) {
+        if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user, this.getIssueDepartmentVos(issue))) {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_MODIFY_PERMISSION));
         }
@@ -1932,18 +1969,41 @@
         return userVos;
     }
 
+    //  �씠�뒋�뿉�꽌 �떞�떦�옄 �젙蹂대�� 異붿텧�븳�떎.
+    private List<DepartmentVo> getIssueDepartmentVos(Issue issue) {
+        List<DepartmentVo> departmentVos = Lists.newArrayList();
+
+        Set<IssueDepartment> issueDepartments = issue.getIssueDepartments();
+
+        try {
+            for (IssueDepartment issueDepartment : issueDepartments) {
+                Department department = issueDepartment.getDepartment();
+                DepartmentVo departmentVo = ConvertUtil.copyProperties(department, DepartmentVo.class);
+                departmentVos.add(departmentVo);
+            }
+        } catch (Exception ex) {
+
+        }
+
+        return departmentVos;
+    }
+
     //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-    private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user) {
+    private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user, List<DepartmentVo> departmentVos) {
         boolean hasPermission = false;
 
         //  �뾽臾� 怨듦컙 愿�由ъ옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
         hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.WORKSPACE_MANAGER, issueVo, null, null, user);
         //  �봽濡쒖젥�듃 愿�由ъ옄�씪 寃쎌슦 �빐�떦 �봽濡쒖젥�듃�뿉 �벑濡앸맂 �씠�뒋�뒗 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
         hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.PROJECT_MANAGER, issueVo, null, null, user);
+        //  �씠�뒋 愿�由ъ옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
+        hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ISSUE_MANAGER, issueVo, null, null, user);
         //   �씠�뒋 �벑濡앹옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
         hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.REGISTER, issueVo, null, null, user);
-        //  �씠�뒋 �떞�떦�옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. => �떞�떦遺��꽌濡� �닔�젙 - 泥댄겕
+        //  �씠�뒋 �떞�떦�옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
         //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ASSIGNEE, issueVo, issueUserVos);
+        //  �씠�뒋 �떞�떦遺��꽌�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
+        hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.DEPARTMENT, issueVo, null, departmentVos, user);
         //  �떞�떦�옄媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
 
         //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_ISSUE_MANAGER, issueVo, null, null, user);
@@ -1953,7 +2013,7 @@
     }
 
     //  �씠�뒋 �닔�젙 沅뚰븳�쓣 �솗�씤�븳�떎.
-    private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> issueDepartmentVos, User user) {
+    private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> departmentVos, User user) {
         if (!hasPermission) {
             switch (checkType) {
                 case Issue.WORKSPACE_MANAGER:  //  �뾽臾� 怨듦컙 愿�由ъ옄
@@ -1965,6 +2025,11 @@
                     Issue issue = this.getIssue(issueVo.getId());
                     //  �봽濡쒖젥�듃 愿�由ъ옄�씪 寃쎌슦 �빐�떦 �봽濡쒖젥�듃�뿉 �벑濡앸맂 �씠�뒋�뒗 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
                     hasPermission = this.projectRoleUserService.checkProjectManager(issue.getProject(), user);
+                    break;
+
+                case Issue.ISSUE_MANAGER:    //  �씠�뒋 愿�由ъ옄
+                    UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+                    hasPermission = MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE);
                     break;
 
                 case Issue.REGISTER:   //  �씠�뒋 �벑濡앹옄
@@ -1988,17 +2053,22 @@
 
                 case Issue.DEPARTMENT:
                     //  �떞�떦遺��꽌媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
-                    if (issueDepartmentVos.size() < 1) {
+                    /*if (userDepartmentVos.size() < 1) {
                         hasPermission = true;
                         break;
-                    }
-                    //   �씠�뒋 �떞�떦遺��꽌 �뿬遺� �솗�씤
-                    /*for (DepartmentVo issueDepartmentVo : issueDepartmentVos) {
-                        if (issueDepartmentVo.getId().equals()) {
-                            hasPermission = true;
-                            break;
-                        }
                     }*/
+                    //   �씠�뒋 �떞�떦遺��꽌 �뿬遺� �솗�씤
+                    for (DepartmentVo departmentVo : departmentVos) {
+                        List<UserDepartment> userDepartments = this.userDepartmentService.findByDepartmentId(departmentVo.getId());
+                        if(userDepartments != null && userDepartments.size() > 0) {
+                            for (UserDepartment userDepartment : userDepartments) {
+                                if (userDepartment.getUserId().equals(user.getId())){
+                                    hasPermission = true;
+                                    break;
+                                }
+                            }
+                        }
+                    }
                     break;
             }
         }

--
Gitblit v1.8.0