From 9c237ff6f08cb7a4121cac6c642660ced1045030 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 화, 21 12월 2021 11:16:02 +0900
Subject: [PATCH] - 트리구조 데이터 없을때 데이터 없음 표시 - 이슈 추가 시 담당부서가 워크플로우 '생성' 상태의 담당부서가 선택되는 기능

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java     |   16 +++++
 src/main/resources/mybatis/query-template/department-template.xml     |   31 +++++++++
 src/main/webapp/custom_components/js-tree/js-tree.html                |    7 ++
 src/main/java/kr/wisestone/owl/web/condition/DepartmentCondition.java |   22 +++++++
 src/main/java/kr/wisestone/owl/service/IssueService.java              |    3 +
 src/main/webapp/scripts/components/issue/issue.service.js             |    6 ++
 src/main/java/kr/wisestone/owl/web/controller/IssueController.java    |   14 ++++
 src/main/java/kr/wisestone/owl/mapper/DepartmentMapper.java           |    2 
 src/main/webapp/scripts/app/issue/issueAdd.controller.js              |   28 ++++++++-
 9 files changed, 124 insertions(+), 5 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/mapper/DepartmentMapper.java b/src/main/java/kr/wisestone/owl/mapper/DepartmentMapper.java
index 0f43f7d..0907e39 100644
--- a/src/main/java/kr/wisestone/owl/mapper/DepartmentMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/DepartmentMapper.java
@@ -24,4 +24,6 @@
     List<Map<String, Object>> findByDepartmentIds(UserCondition condition);
 
     List<Map<String, Object>> findProjectDepartment(DepartmentCondition departmentCondition);
+
+    List<Map<String, Object>> findByIssueStatusId(DepartmentCondition condition);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java
index 242c011..b1f692a 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -6,6 +6,7 @@
 import kr.wisestone.owl.domain.Workflow;
 import kr.wisestone.owl.vo.IssueVo;
 import kr.wisestone.owl.web.condition.ApiMonitorCondition;
+import kr.wisestone.owl.web.condition.DepartmentCondition;
 import kr.wisestone.owl.web.condition.IssueCondition;
 import kr.wisestone.owl.web.condition.ProjectCondition;
 import kr.wisestone.owl.web.form.EmailTemplateForm;
@@ -104,6 +105,8 @@
 
     void findPartner(Map<String, Object> resJsonData, Map<String, Object> params);
 
+    void findReadyDepartments(Map<String, Object> resJsonData, DepartmentCondition make, Pageable pageable);
+
     void findApiIssue(ApiMonitorCondition apiMonitorCondition, Map<String, Object> resJsonData);
 
     void setCountDownIssues(List<IssueVo> issueVos);
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 96d90c3..ed2154d 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3797,4 +3797,20 @@
             resJsonData.put(Constants.RES_KEY_CONTENTS, usePartnerVos);
         }
     }
+
+    @Override
+    public void findReadyDepartments(Map<String, Object> resJsonData, DepartmentCondition condition, Pageable pageable) {
+        Integer issueStatusId = 1;
+        condition.setIssueStatusId(issueStatusId);
+
+        IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
+        if (issueType != null) {
+            condition.setWorkflowId(issueType.getWorkflow().getId());
+        }
+        condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
+        condition.setPageSize(pageable.getPageSize());
+
+        List<Map<String, Object>> departmentVos = this.departmentMapper.findByIssueStatusId(condition);
+        resJsonData.put(Constants.RES_KEY_CONTENTS, departmentVos);
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/kr/wisestone/owl/web/condition/DepartmentCondition.java b/src/main/java/kr/wisestone/owl/web/condition/DepartmentCondition.java
index 87bfed4..c81f030 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/DepartmentCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/DepartmentCondition.java
@@ -21,6 +21,8 @@
     private List<Long> departmentIds = Lists.newArrayList();
 
     private Long issueTypeId;
+    private Integer issueStatusId;
+    private Long workflowId;
 
     private Integer Page;
     private Integer PageSize;
@@ -30,6 +32,10 @@
 
         if (MapUtil.getStrings(departmentConditions, "excludeIds") != null) {
             condition.setExcludeIds(MapUtil.getLongs(departmentConditions, "excludeIds"));
+        }
+
+        if (MapUtil.getLong(departmentConditions, "issueTypeId") != null) {
+            condition.setIssueTypeId(MapUtil.getLong(departmentConditions, "issueTypeId"));
         }
 
         return condition;
@@ -114,4 +120,20 @@
     public void setIssueTypeId(Long issueTypeId) {
         this.issueTypeId = issueTypeId;
     }
+
+    public Integer getIssueStatusId() {
+        return issueStatusId;
+    }
+
+    public void setIssueStatusId(Integer issueStatusId) {
+        this.issueStatusId = issueStatusId;
+    }
+
+    public Long getWorkflowId() {
+        return workflowId;
+    }
+
+    public void setWorkflowId(Long workflowId) {
+        this.workflowId = workflowId;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
index e9e747d..904cdc6 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -5,6 +5,7 @@
 import kr.wisestone.owl.service.IssueService;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.web.condition.ApiMonitorCondition;
+import kr.wisestone.owl.web.condition.DepartmentCondition;
 import kr.wisestone.owl.web.condition.IssueCondition;
 import kr.wisestone.owl.web.form.EmailTemplateForm;
 import kr.wisestone.owl.web.form.IssueForm;
@@ -106,6 +107,19 @@
         return this.setSuccessMessage(resJsonData);
     }
 
+    //  �뙆�듃�꼫 紐⑸줉 議고쉶
+    @RequestMapping(value = "/issue/findReadyDepartments", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> findReadyDepartments(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
+
+        this.issueService.findReadyDepartments(resJsonData, DepartmentCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
     //  �씠�뒋 �긽�꽭 議고쉶
     @RequestMapping(value = "/issue/detail", produces = MediaType.APPLICATION_JSON_VALUE)
     public
diff --git a/src/main/resources/mybatis/query-template/department-template.xml b/src/main/resources/mybatis/query-template/department-template.xml
index 9b97cbb..ac05d26 100644
--- a/src/main/resources/mybatis/query-template/department-template.xml
+++ b/src/main/resources/mybatis/query-template/department-template.xml
@@ -12,10 +12,10 @@
         FROM
         department d
         WHERE 1=1
-        <if test="departmentName != '' and departmentName != null">
+        <if test="departmentName != null and departmentName != ''">
             AND d.department_name like CONCAT('%',#{departmentName},'%')
         </if>
-        <if test="id != '' and id != null">
+        <if test="id != null and id != ''">
             AND d.id like CONCAT('%',#{id},'%')
         </if>
         <choose>
@@ -76,5 +76,32 @@
         where p.id = #{projectId};
     </select>
 
+    <select id="findByIssueStatusId" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.DepartmentCondition">
+        SELECT
+        d.id as id,
+        d.department_name as departmentName
+        FROM
+        department d
+        INNER JOIN workflow_department wd ON wd.department_id = d.id
+        WHERE 1=1
+        <if test="issueStatusId != null and issueStatusId != ''">
+            AND wd.issue_status_id = #{issueStatusId}
+        </if>
+        <if test="workflowId != null and workflowId != ''">
+            AND wd.workflow_Id = #{workflowId}
+        </if>
+        <choose>
+            <when test="excludeIds != null and excludeIds.size != 0">
+                AND d.id NOT IN
+                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
+        <if test="pageSize != '' and pageSize != null">
+            limit #{pageSize} offset #{page};
+        </if>
+    </select>
+
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/custom_components/js-tree/js-tree.html b/src/main/webapp/custom_components/js-tree/js-tree.html
index 433040f..9b44e7a 100644
--- a/src/main/webapp/custom_components/js-tree/js-tree.html
+++ b/src/main/webapp/custom_components/js-tree/js-tree.html
@@ -1,4 +1,11 @@
 <div>
+    <table class="table table-striped table-layout-fixed" ng-class="{ 'width768' : !detailView }" bindonce>
+        <tr ng-if="fn.getResponseData().length == 0">
+            <td colspan="{{tableConfigs.length}}">
+                <span translate="common.noData">�뜲�씠�꽣媛� �뾾�뒿�땲�떎.</span>
+            </td>
+        </tr>
+    </table>
     <ul class="ml-1 pl-1 tree">
         <li ng-repeat="row in fn.getResponseData()">
             <ul class="">
diff --git a/src/main/webapp/scripts/app/issue/issueAdd.controller.js b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
index f23ed07..b9ebc23 100644
--- a/src/main/webapp/scripts/app/issue/issueAdd.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
@@ -37,7 +37,8 @@
                     setIssueTypeTemplate : setIssueTypeTemplate,    //  �씠�뒋 �쑀�삎 �뀥�뵆由� �쟻�슜�븯湲�
                     startExecute : startExecute, //  而⑦듃濡� 濡쒕뵫�떆 泥섏쓬�쑝濡� �떆�옉�릺�뒗 �븿�닔
                     containsPartner : containsPartner,
-                    getPartners : getPartners
+                    getPartners : getPartners,
+                    getDepartments : getDepartments,
                 };
 
                 $scope.vm = {
@@ -58,7 +59,8 @@
                         attachedFiles : [], //  �꽟癒몃끂�듃濡� �뙆�씪 �뾽濡쒕뱶瑜� �븷 寃쎌슦 �꽌踰꾩뿉�꽌 pk瑜� �뵲怨� issue id�� �뿰�룞 �옉�뾽�씠 �븘�슂�븯�떎.
                         startCompleteDateRange : "", //  �떆�옉�씪 ~ 醫낅즺�씪
                         detectingDateRange : "", //  �깘吏��씪
-                        issueCustomFields : []  //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶
+                        issueCustomFields : [],  //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶
+                        issueStatusId: ""
                     },
                     infiniteAdd : false,    //  �뿰�냽 �깮�꽦
                     projectName : "",   //  �봽濡쒖젥�듃 紐� 寃��깋
@@ -852,6 +854,25 @@
                             $scope.vm.partnerVos = result.data.data;
                         }
                     });
+                }
+
+                function getDepartments() {
+                    if($scope.vm.form.issueTypeId === ""){
+                        $scope.vm.form.issueTypeId = $rootScope.issueTypeMenu.id
+                    }
+                    var content = {
+                        issueTypeId : $scope.vm.form.issueTypeId,
+                    };
+                    Issue.findReadyDepartments($resourceProvider.getContent(
+                        content,
+                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            angular.forEach(result.data.data, function (department) {
+                                department.byName = department.departmentName;
+                                $scope.vm.form.departments.push(department);
+                            });
+                        }
+                    });
 
                 }
 
@@ -862,7 +883,8 @@
                         getIssueTypes : $scope.fn.getIssueTypes(),
                         getPriorities : $scope.fn.getPriorities(),
                         getSeverities : $scope.fn.getSeverities(),
-                        getPartners : $scope.fn.getPartners()
+                        getPartners : $scope.fn.getPartners(),
+                        getDepartments : $scope.fn.getDepartments()
                     };
                     $q.all(promises).then(function (results) {
                         // �쁽�옱 �봽濡쒖젥�듃 �꽕�젙
diff --git a/src/main/webapp/scripts/components/issue/issue.service.js b/src/main/webapp/scripts/components/issue/issue.service.js
index bc4b726..8290ed9 100644
--- a/src/main/webapp/scripts/components/issue/issue.service.js
+++ b/src/main/webapp/scripts/components/issue/issue.service.js
@@ -39,6 +39,12 @@
                     return response;
                 });
             },
+            findReadyDepartments : function (conditions) {
+                return $http.post("issue/findReadyDepartments", conditions).then(function (response) {
+                    $log.debug("�썙�겕�뵆濡쒖슦�쓽 �깮�꽦 �긽�깭�쓽 �떞�떦遺��꽌 紐⑸줉 �뜲�씠�꽣 : ", response);
+                    return response;
+                });
+            },
             add : function (conditions) {
                 conditions.url = "issue/add";
                 return $upload.upload(conditions).progress(function (evt) {

--
Gitblit v1.8.0