From f90e288fdd0e4d4a58b72a445fcbac135351d458 Mon Sep 17 00:00:00 2001 From: jhjang <jhjang@maprex.co.kr> Date: 월, 06 12월 2021 08:45:27 +0900 Subject: [PATCH] - API 중복 처리 오류 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 154 ++++++++++++++++++++++++-------------- src/main/java/kr/wisestone/owl/vo/IssueVo.java | 4 + src/main/java/kr/wisestone/owl/data/CheckIssueData.java | 41 ++++++++++ src/main/resources/mybatis/query-template/issue-template.xml | 16 +--- src/main/webapp/scripts/app/issue/issueList.controller.js | 2 src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 4 + src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java | 4 7 files changed, 154 insertions(+), 71 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index 1a53df4..25d5230 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -177,6 +177,8 @@ public static final String EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY = "EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 �쑀�슚�븯吏� �븡�뒿�땲�떎. public static final String EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST = "EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST"; // �벑濡앺븯�젮�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 李얠쓣 �닔 �뾾�뒿�땲�떎. �빐�떦 �궗�슜�옄 �젙�쓽�븘�뱶�쓽 �씠由꾩씠 蹂�寃쎈릺�뿀嫄곕굹 �궘�젣�릺�뿀�뒿�땲�떎. + public static final String DOWN_ISSUE_NOT_EXIST = "DOWN_ISSUE_NOT_EXIST"; // �븯�쐞 �씠�뒋 李얠쓣�닔 �뾾�쓬 + public static final String NOTICE_NOT_EXIST = "NOTICE_NOT_EXIST"; // 怨듭��궗�빆�씠 議댁옱�븯吏� �븡�뒿�땲�떎. public static final String NOTICE_EMPTY_CONTENT = "NOTICE_EMPTY_CONTENT"; // 怨듭��궗�빆 �젣紐� 諛� �궡�슜 以� �엯�젰 媛믪씠 �뾾�뒗 �븘�뱶媛� �엳�뒿�땲�떎. @@ -235,4 +237,6 @@ public static final String API_PARAMETER_PROJECT_ERROR = "API_PARAMETER_PROJECT_ERROR"; // api �뙆�씪誘명꽣 �삤瑜�(�봽濡쒖젥�듃) public static final String API_PARAMETER_ERROR = "API_PARAMETER_ERROR"; // api �뙆�씪誘명꽣 �삤瑜� public static final String API_USER_ERROR = "API_USER_ERROR"; // api �궗�슜�옄 �삤瑜� + public static final String API_OVERLAP_ERROR = "API_OVERLAP_ERROR"; // API 以묐났�맂 �긽�쐞 �씠�뒋媛� �뿬�윭媛쒖씪 寃쎌슦 + public static final String API_ISSUE_NOT_EXIST = "API_ISSUE_NOT_EXIST"; // �닔�젙�븷 �씠�뒋瑜� 李얠쓣�닔 �뾾�뒿�땲�떎. } diff --git a/src/main/java/kr/wisestone/owl/data/CheckIssueData.java b/src/main/java/kr/wisestone/owl/data/CheckIssueData.java index 8933cf0..d4d60b5 100644 --- a/src/main/java/kr/wisestone/owl/data/CheckIssueData.java +++ b/src/main/java/kr/wisestone/owl/data/CheckIssueData.java @@ -18,8 +18,49 @@ Priority priority; Severity severity; + @Autowired + private IssueService issueService; + + @Autowired + private WorkspaceService workspaceService; + + @Autowired + private ProjectService projectService; + + @Autowired + private IssueStatusService issueStatusService; + + @Autowired + private IssueTypeService issueTypeService; + + @Autowired + private PriorityService priorityService; + + @Autowired + private SeverityService severityService; + public CheckIssueData() {} + public boolean CheckData(User user, IssueForm issueForm) { + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. + this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId()); + + Issue issue = this.issueService.getIssue(issueForm.getId()); + IssueStatus oldIssueStatus = issue.getIssueStatus(); + // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 + Project project = this.projectService.getProject(issueForm.getProjectId()); + // �씠�뒋 �긽�깭 �쑀�슚�꽦 泥댄겕 + IssueStatus issueStatus = this.issueStatusService.getIssueStatus(issueForm.getIssueStatusId()); + // �씠�뒋 �쑀�삎 �쑀�슚�꽦 泥댄겕 + IssueType issueType = this.issueTypeService.getIssueType(issueForm.getIssueTypeId()); + // �슦�꽑�닚�쐞 �쑀�슚�꽦 泥댄겕 + Priority priority = this.priorityService.getPriority(issueForm.getPriorityId()); + // 以묒슂�룄 �쑀�슚�꽦 泥댄겕 + Severity severity = this.severityService.getSeverity(issueForm.getSeverityId()); + + return true; + } + public Issue getIssue() { return issue; } 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 eb5524e..8383256 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -1,6 +1,7 @@ package kr.wisestone.owl.service.impl; import com.google.common.collect.Lists; +import com.sun.org.apache.bcel.internal.generic.NEW; import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.config.CommonConfiguration; import kr.wisestone.owl.constant.Constants; @@ -239,9 +240,13 @@ customFieldApiOverlapForm.setUserId(user.getId()); customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId()); - IssueVo issueVo = this.findIssue(issueApiForm, user.getId()); - if (issueVo != null) { - issueForm.setParentIssueId(issueVo.getId()); + List<IssueVo> issueVos = this.findIssue(issueApiForm, user.getId()); + int size = issueVos.size(); + if (size == 1) { + issueForm.setParentIssueId(issueVos.get(0).getId()); + } else if (size > 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_ERROR)); } issueForm.setIsApi(Issue.IS_API_YES); @@ -281,26 +286,43 @@ // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 - private IssueVo findIssue(IssueApiForm issueApiForm, Long userId) { - IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); + private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) { List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); + + List<IssueVo> resultIssueVos = new ArrayList<>(); if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) { for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) { + IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) { - issueCustomFieldValueCondition.addUseValues(issueCustomFieldValue.getUseValue()); + issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.getUseValue()); + + List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); + if (results != null && results.size() > 0) { + List<IssueVo> findIssueVos = new ArrayList<>(); + Collections.copy(resultIssueVos, findIssueVos); + resultIssueVos.clear(); + for (Map<String, Object> result : results) { + IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); + if (findIssueVos.size() == 0) { + resultIssueVos.add(issueVo); + } else { + IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId()); + if (findIssueVo != null) { + resultIssueVos.add(findIssueVo); + } + } + } + } else { + resultIssueVos.clear(); + return resultIssueVos; + } } } } - List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); - if (results != null && results.size() > 0) { - IssueVo issueVo = new IssueVo(); - ConvertUtil.convertMapToObject(results.get(0), issueVo); - return issueVo; - } } - return null; + return resultIssueVos; } // �씠�뒋瑜� �깮�꽦�븳�떎. @@ -1038,38 +1060,21 @@ // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎 private void setDownIssues(Issue issue, IssueVo issueVo) { List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId()); - /*if(issueVo != null && downIssues.size()>0){ - for(Issue downIssue : downIssues){ - IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); - IssueDownVo issueDownVo = ConvertUtil.copyProperties(downIssueVo, IssueDownVo.class); - issueDownVo.setIssueDown(downIssueVo); - issueDownVo.setTitle(downIssue.getTitle()); - issueDownVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); - issueDownVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); - issueDownVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); - this.setRegister(downIssue, downIssueVo); // �벑濡앹옄 - this.setIssueDepartment(downIssue, downIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 - this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 - issueVo.addIssueDownVo(issueDownVo); - } - }*/ - - List<IssueVo> downIssueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class); - List<IssueVo> resultList = new ArrayList<>(); - if(downIssueVos != null && downIssueVos.size()>0){ - for(IssueVo downIssueVo : downIssueVos){ + if(downIssues != null && downIssues.size()>0){ + List<IssueVo> resultList = new ArrayList<>(); for(Issue downIssue : downIssues){ - downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); - downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); - downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); - this.setRegister(downIssue, downIssueVo); // �벑濡앹옄 - this.setIssueDepartment(downIssue, downIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 - this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + IssueVo newIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); + newIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); + newIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); + newIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); + this.setRegister(downIssue, newIssueVo); // �벑濡앹옄 + this.setIssueDepartment(downIssue, newIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 + this.setIssueCustomFields(downIssue, newIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + + resultList.add(newIssueVo); } - resultList.add(downIssueVo); + issueVo.setIssueDownVos(resultList); } - issueVo.setIssueDownVos(resultList); - } } // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. @@ -1232,7 +1237,7 @@ } // �씠�뒋(�씠�뒋 �쑀�삎)�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �뀑�똿�븳�떎. - private void setIssueCustomFields(Issue issue, IssueVo issueVo) { + private IssueVo setIssueCustomFields(Issue issue, IssueVo issueVo) { // �빐�떦 �봽濡쒖젥�듃�쓽 �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� 媛��졇�삩�떎. IssueTypeCustomFieldCondition issueTypeCustomFieldCondition = new IssueTypeCustomFieldCondition(); @@ -1244,6 +1249,8 @@ // �씠�뒋�뿉�꽌 �궗�슜�맂 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪쓣 媛��졇�삩�떎. List<IssueCustomFieldValueVo> issueCustomFieldValueVos = this.issueCustomFieldValueService.findByIssueId(issue.getId()); issueVo.setIssueCustomFieldValueVos(issueCustomFieldValueVos); + + return issueVo; } // �씠�뒋�뿉 �벑濡앸맂 �뙎湲� �젙蹂대�� �뀑�똿�븳�떎. @@ -1261,19 +1268,48 @@ @Transactional public List<IssueVo> findIssue(IssueApiForm issueApiform) { List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); + List<IssueVo> resultIssueVos = new ArrayList<>(); + IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); - if (issueCustomFieldValueForms != null && issueCustomFieldValueForms.size() > 0) { + if (issueCustomFieldValueForms.size() > 0) { for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) { - issueCustomFieldValueCondition.addUseValues(issueCustomFieldValueForm.getUseValue()); +// issueCustomFieldValueCondition.addUseValue(issueCustomFieldValueForm.getUseValue()); + issueCustomFieldValueCondition.setUseValue(issueCustomFieldValueForm.getUseValue()); + List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); + if (results != null && results.size() > 0) { + List<IssueVo> findIssueVos = new ArrayList<>(); + Collections.copy(resultIssueVos, findIssueVos); + resultIssueVos.clear(); + for (Map<String, Object> result : results) { + IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); + + if (findIssueVos.size() == 0) { + resultIssueVos.add(issueVo); + } else { + IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId()); + if (findIssueVo != null) { + resultIssueVos.add(findIssueVo); + } + } + } + } else { + resultIssueVos.clear(); + return resultIssueVos; + } } } - List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); - List<IssueVo> issueVos = Lists.newArrayList(); - if (results != null && results.size() > 0) { - issueVos.add(ConvertUtil.convertMapToClass(results.get(0), IssueVo.class)); - } - return issueVos; + return resultIssueVos; + } + + // 由ъ뒪�듃�뿉�꽌 �빐�떦 �븘�씠�뵒瑜� 媛�吏�怨� �엳�뒗 �씠�뒋 寃��깋 + private IssueVo findIssueVo(List<IssueVo> list, Long id) { + for (IssueVo issueVo : list) { + if (id.equals(issueVo.getId())) { + return issueVo; + } + } + return null; } @@ -1285,13 +1321,17 @@ IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); List<IssueVo> issueVos = this.findIssue(issueApiForm); - List<Issue> issue = Lists.newArrayList(); - for (IssueVo issueVo : issueVos) { - issueForm.setId(issueVo.getId()); - issue.add(this.modifyIssueForApi(user, issueForm, files)); + if (issueVos != null && issueVos.size() > 0) { + List<Issue> issue = Lists.newArrayList(); + for (IssueVo issueVo : issueVos) { + issueForm.setId(issueVo.getId()); + issue.add(this.modifyIssueForApi(user, issueForm, files)); + } + return issue; + } else { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST)); } - - return issue; } // �씠�뒋瑜� �닔�젙�븳�떎. diff --git a/src/main/java/kr/wisestone/owl/vo/IssueVo.java b/src/main/java/kr/wisestone/owl/vo/IssueVo.java index 83daa76..9a7d55c 100644 --- a/src/main/java/kr/wisestone/owl/vo/IssueVo.java +++ b/src/main/java/kr/wisestone/owl/vo/IssueVo.java @@ -319,6 +319,10 @@ this.issueCustomFieldValueVos.add(issueCustomFieldValueVo); } + public void addIssueCustomFieldValueVos(List<IssueCustomFieldValueVo> issueCustomFieldValueVos) { + this.issueCustomFieldValueVos = issueCustomFieldValueVos; + } + public List<IssueCompanyVo> getIssueCompanyVos() { return issueCompanyVos; } diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java index a639a7d..478b78d 100644 --- a/src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java +++ b/src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java @@ -50,7 +50,7 @@ // 怨듬갚�씠 �븘�땶 臾몄옄媛� �뱾�뼱�엳�쓣 �븣留� useValues 媛� �쑝濡� �뀑�똿�븳�떎. for (String useValue : MapUtil.getStrings(conditions, "useValues")) { if (!StringUtils.isEmpty(useValue)) { - condition.addUseValues(useValue); + condition.addUseValue(useValue); } } } @@ -84,7 +84,7 @@ this.useValues = useValues; } - public void addUseValues(String useValue) { + public void addUseValue(String useValue) { this.useValues.add(useValue); } diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml index 8ef4acd..f5d76f5 100644 --- a/src/main/resources/mybatis/query-template/issue-template.xml +++ b/src/main/resources/mybatis/query-template/issue-template.xml @@ -511,20 +511,12 @@ <!-- �듅�젙 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 媛숈� �씠�뒋瑜� 議고쉶 --> <select id="findByCustomFieldValue" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCustomFieldValueCondition"> SELECT - iss.id as id, - iss.title as title - FROM issue iss - LEFT OUTER JOIN issue_custom_field_value issue_custom FORCE INDEX(issueIdIndex) ON iss.id = issue_custom.issue_id + issue_custom.issue_id as id + FROM issue_custom_field_value issue_custom + INNER JOIN issue iss ON iss.id = issue_custom.issue_id WHERE 1=1 AND iss.parent_issue_id IS NULL - <choose> - <when test="useValues.size != 0"> - AND issue_custom.use_value IN - <foreach collection="useValues" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - </when> - </choose> + AND issue_custom.use_value = #{useValue} </select> </mapper> diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js index 07504f4..d681782 100644 --- a/src/main/webapp/scripts/app/issue/issueList.controller.js +++ b/src/main/webapp/scripts/app/issue/issueList.controller.js @@ -523,6 +523,8 @@ if (detail) { changeDetailView(result.data.data[0].id); } + } else { + $scope.vm.responseData = null; } } else { -- Gitblit v1.8.0