From c3b8248962bd9b78a8207d5d275395a886d2ee5a Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 수, 15 12월 2021 10:31:02 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  160 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 112 insertions(+), 48 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 ddedab6..485a1d9 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
@@ -253,23 +256,25 @@
 
             // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙
             List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId());
-            if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){
-                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST));
-            }
-            for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){
-                CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
-                issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
-            }
+//            if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){
+//                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST));
+//            }
+            if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
+                for (int i = 0; i < customFieldApiOverlaps.size(); i++) {
+                    CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
+                    issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
+                }
 
-            // 以묐났�맂 �씠�뒋寃��깋
-            List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId());
-            int size = issues.size();
-            if (size > 0) {
-                Issue targetIssue = issues.get(0);
-                if (targetIssue.getParentIssue() != null) {
-                    issueForm.setParentIssueId(targetIssue.getParentIssue().getId());
-                } else {
-                    issueForm.setParentIssueId(targetIssue.getId());
+                // 以묐났�맂 �씠�뒋寃��깋
+                List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId());
+                int size = issues.size();
+                if (size > 0) {
+                    Issue targetIssue = issues.get(0);
+                    if (targetIssue.getParentIssue() != null) {
+                        issueForm.setParentIssueId(targetIssue.getParentIssue().getId());
+                    } else {
+                        issueForm.setParentIssueId(targetIssue.getId());
+                    }
                 }
             }
 
@@ -800,6 +805,7 @@
         this.setMapToIssueVo(results, issueVos, issueCondition, user);
 
         if (issueCondition.getTree()) {
+            this.setParentIssue(issueVos);
             this.setDownIssues(user, issueVos);
             this.setRelationIssues(issueVos);
         }
@@ -829,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);
             }
@@ -841,11 +847,10 @@
             this.setIssueDepartmentList(issueVos, issueCondition, user);
             //  �벑濡앹옄 �젙蹂� 異붽�
             this.setRegister(issueVos);  //  �떞�떦�옄 �젙蹂� �뀑�똿
-
             //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽�
             this.setIssueCustomFieldValue(issueVos, issueCondition);
-
-            this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            this.SetWorkflowDepartment(issueVos);
         }
     }
 
@@ -855,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);
             }
         }
     }
@@ -896,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) {
@@ -1113,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_PROJECT_ALL)) {
                 projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition);
             } else  {
                 projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
@@ -1222,7 +1247,7 @@
             }
 
             //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
+            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, null)) {
                 issueVo.setModifyPermissionCheck(Boolean.TRUE);
             }
         }
@@ -1259,7 +1284,7 @@
             }
 
             //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
+            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
                 issueVo.setModifyPermissionCheck(Boolean.TRUE);
             }
         }
@@ -1274,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": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦遺��꽌, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �뀑�똿�븳�떎.
@@ -1294,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;
@@ -1355,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");
@@ -1390,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);
+        }
     }
 
     //  �긽�쐞�씪媛� �젙蹂� 異붽�
@@ -1499,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);
     }
@@ -1605,11 +1644,10 @@
                 Issue parentIssue = modifyIssue.getParentIssue();
                 IssueType issueType = modifyIssue.getIssueType();
                 IssueStatus issueStatus = issueType.getIssueStatus();
-                if (issueStatus == null) {
-                    throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
-                }
-
                 if (parentIssue != null) {
+                    if (issueStatus == null) {
+                        throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
+                    }
                     IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId());
                     List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition);
                     // �븯�쐞 �씪媛먯씠 紐⑤몢 醫낅즺 �긽�깭�씪�븣 �긽�쐞 �씪媛먮룄 醫낅즺 泥섎━
@@ -1906,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));
         }
@@ -1931,8 +1969,27 @@
         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;
 
         //  �뾽臾� 怨듦컙 愿�由ъ옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
@@ -1941,8 +1998,10 @@
         hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.PROJECT_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);
@@ -1952,7 +2011,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:  //  �뾽臾� 怨듦컙 愿�由ъ옄
@@ -1987,17 +2046,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