From 1b960584383766692a257a4cdd92daf19bab172d Mon Sep 17 00:00:00 2001 From: jhjang <jhjang@maprex.co.kr> Date: 월, 27 12월 2021 09:32:50 +0900 Subject: [PATCH] - API 추가/수정시 사용자 정의 필드 항목이 없을 경우 오류 처리 - API 에서 도메인만 추출하여 같은 도메인을 갖는 업체/isp/hosting 자동 입력하도록 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 88 +++++++++++++++-------------- src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java | 2 src/main/resources/mybatis/query-template/companyField-template.xml | 3 + src/main/java/kr/wisestone/owl/web/controller/ApiController.java | 7 ++ src/main/java/kr/wisestone/owl/util/CommonUtil.java | 28 +++++++++ src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java | 9 +++ src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 1 7 files changed, 95 insertions(+), 43 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index 5a278a0..349f92a 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -251,4 +251,5 @@ public static final String API_ISSUE_NOT_EXIST = "API_ISSUE_NOT_EXIST"; // �닔�젙�븷 �씠�뒋瑜� 李얠쓣�닔 �뾾�뒿�땲�떎. public static final String API_COMPLETE_ISSUE_STATUS_NOT_EXIST = "API_COMPLETE_ISSUE_STATUS_NOT_EXIST"; // �옄�룞 醫낅즺 泥섎━�븷 �긽�깭媛� �꽕�젙�릺吏� �븡�븯�뒿�땲�떎. public static final String API_ISSUE_STATUS_NOT_EXIST = "API_ISSUE_STATUS_NOT_EXIST"; // �씠�뒋 �긽�깭瑜� 李얠쓣�닔 �뾾�뒿�땲�떎 + public static final String API_CUSTOM_FIELD_NOT_EXIST = "API_CUSTOM_FIELD_NOT_EXIST"; // �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議댁옱�븯吏� �븡�뒿�땲�떎. } diff --git a/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java b/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java index 3d52d10..8f80889 100644 --- a/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java +++ b/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java @@ -24,7 +24,7 @@ @JoinColumn(name = "issue_type_id") private IssueType issueType; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "custom_field_id") private CustomField customField; 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 5c2d587..b132251 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -280,6 +280,20 @@ if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { for (int i = 0; i < customFieldApiOverlaps.size(); i++) { CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); + CustomField customField = customFieldApiOverlap.getCustomField(); + if (customField.getCustomFieldType() == CustomFieldType.SITE) { + for (Map<String, Object> map : issueApiForm.getCustomFieldValues()) { + if (customField.getId().equals(MapUtil.getLong(map, "customFieldId"))) { + String fullUrl = MapUtil.getString(map, "useValue"); + String url = CommonUtil.getUrl(fullUrl); + if (!url.equals("")) { + issueApiForm.setUrl(fullUrl); + break; + } + } + } + + } issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); } @@ -301,7 +315,7 @@ // �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙 issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues()); // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 - this.findCompanyField(issueForm); + this.findCompanyField(issueForm, issueApiForm.getUrl()); // api �엯�젰媛� �쟻�슜 ConvertUtil.copyProperties(issueApiForm, issueForm); @@ -313,45 +327,36 @@ } } - private void findCompanyField(IssueForm issueForm) { + private void findCompanyField(IssueForm issueForm, String url) { if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) { CompanyFieldCondition condition = new CompanyFieldCondition(); + condition.setUrl(url); List<Map<String, Object>> companyFields = this.companyFieldService.find(condition); List<Map<String, Object>> issueCompanyFields = Lists.newArrayList(); List<Map<String, Object>> issueIspFields = Lists.newArrayList(); List<Map<String, Object>> issueHostingFields = Lists.newArrayList(); - for (Map<String, Object> issueCustomField : issueForm.getIssueCustomFields()) { - int customFieldId = (Integer) issueCustomField.get("customFieldId"); - Long customId = (long) customFieldId; - CustomField customField = this.customFieldService.getCustomField(customId); - if(customField != null && customField.getCustomFieldType().toString().equals("SITE") && customField.getName().equals("�룄硫붿씤")) { - String useValue = issueCustomField.get("useValue").toString(); - if(companyFields != null && companyFields.size() > 0) { - for (Map<String, Object> companyField : companyFields) { - CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class); - if(useValue.equals(companyFieldVo.getUrl())) { - companyField.put("companyId", companyField.get("id")); - issueCompanyFields.add(companyField); - if(companyFieldVo.getIspId() != null) { - Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId()); - if (ispField != null) { - ispField.put("ispId", ispField.get("id")); - issueIspFields.add(ispField); - } - } - if(companyFieldVo.getHostingId() != null) { - Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId()); - if (hostingField != null) { - hostingField.put("hostingId", hostingField.get("id")); - issueHostingFields.add(hostingField); - } - } - } - } - } - } + if (companyFields != null && companyFields.size() > 0) { + Map<String, Object> companyFieldMap = companyFields.get(0); + companyFieldMap.put("companyId", companyFieldMap.get("id")); + + issueCompanyFields.add(companyFieldMap); issueForm.setIssueCompanyFields(issueCompanyFields); + + IspField ispField = this.ispFieldService.getIsp(MapUtil.getLong(companyFieldMap, "ispId")); + if (ispField != null) { + Map<String, Object> ispFieldMap = ConvertUtil.convertObjectToMap(ispField); + ispFieldMap.put("ispId", ispField.getId()); + issueIspFields.add(ispFieldMap); + } + + HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(companyFieldMap, "hostingId")); + if (hostingField != null) { + Map<String, Object> hostingFieldMap = ConvertUtil.convertObjectToMap(hostingField); + hostingFieldMap.put("hostingId", hostingField.getId()); + issueHostingFields.add(hostingFieldMap); + } + issueForm.setIssueIspFields(issueIspFields); issueForm.setIssueHostingFields(issueHostingFields); } @@ -928,7 +933,7 @@ // if (!this.userWorkspaceService.checkWorkspaceManager(user) // && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //理쒓퀬愿�由ъ옄 & �봽濡쒖젥�듃,�씠�뒋 愿�由ъ옄 �씪 寃쎌슦 紐⑤뱺 �씠�뒋 蹂닿린 // this.SetMyDepartmentId(issueCondition); - //this.SetAllDepartmentId(issueCondition); + //this.SetAllDepartmentId(issueCondition); // } /*else{ // results = this.issueMapper.findByDepartment(issueCondition); // totalCount = this.issueMapper.countByDepartment(issueCondition); @@ -1812,15 +1817,14 @@ Issue parentIssue = modifyIssue.getParentIssue(); IssueType issueType = modifyIssue.getIssueType(); - Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses(); - IssueTypeApiEndStatus issueStatus = null; - if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) { - issueStatus = issueTypeApiEndStatuses.iterator().next(); - } else { - throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST)); - } - if (parentIssue != null) { + Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses(); + IssueTypeApiEndStatus issueStatus = null; + if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) { + issueStatus = issueTypeApiEndStatuses.iterator().next(); + } else { + 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); @@ -3448,7 +3452,7 @@ } } - // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.- + // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎. private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) { if (cell != null) { String cellValue = CommonUtil.convertExcelStringToCell(cell); diff --git a/src/main/java/kr/wisestone/owl/util/CommonUtil.java b/src/main/java/kr/wisestone/owl/util/CommonUtil.java index afcb056..079f3a4 100644 --- a/src/main/java/kr/wisestone/owl/util/CommonUtil.java +++ b/src/main/java/kr/wisestone/owl/util/CommonUtil.java @@ -42,6 +42,8 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class CommonUtil { private static final Logger LOGGER = LoggerFactory.getLogger(CommonUtil.class); @@ -1005,4 +1007,30 @@ } } + // 硫붿씤 url留� 異붿텧 + public static String extractUrl(String content){ + try { + String REGEX = "(http(s)?:\\/\\/)([a-z0-9\\w]+\\.*)+[a-z0-9]{2,4}"; + Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE); + Matcher m = p.matcher(content); + if (m.find()) { + return m.group(); + } + return ""; + } catch (Exception e) { + return ""; + } + } + + // 硫붿씤 url 異붿텧�쓣 �쐞�빐 http: �솗�씤 + public static String getUrl(String fullUrl) { + if (fullUrl != null) { + if (fullUrl.indexOf("http") == -1) { + fullUrl = "http://" + fullUrl; + } + + return extractUrl(fullUrl); + } + return ""; + } } diff --git a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java index fb3a53a..9c7b5f4 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java @@ -53,6 +53,11 @@ if (issueForm == null) { throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR)); } + // �궗�슜�옄 �젙�쓽 �븘�뱶媛� �뾾�쓣 寃쎌슦 寃��깋�쓣 �븷 �닔 �뾾湲� �븣臾몄뿉 �삁�쇅泥섎━ + else if (issueForm.getCustomFieldValues() == null || issueForm.getCustomFieldValues().size() == 0) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST)); + } + if (issueForm.getApiType() == IssueApiForm.ApiType.add) { List<Issue> issues = this.issueService.addApiIssue(issueForm); // 踰꾩쟾 �깮�꽦 @@ -60,6 +65,8 @@ this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId()); } } else { + + this.issueService.modifyIssue(issueForm, request.getFiles("file")); } diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java index 698375e..42c5467 100644 --- a/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java +++ b/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java @@ -31,6 +31,7 @@ private List<Map<String, Object>> CustomFieldValues = Lists.newArrayList(); private List<MultipartFile> multipartFiles = Lists.newArrayList(); private List<Long> useIssueCustomFieldIds = Lists.newArrayList(); // �궗�쐞�씪媛먯슜 �궗�슜�옄�븘�뱶媛� + private String url; // �깘吏� �떆�뒪�뀥�뿉�꽌留� �쟻�슜 public IssueApiForm() { } @@ -228,4 +229,12 @@ this.useIssueCustomFieldIds.add(customFieldId); } } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } } diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml index 0ee3d09..2393acf 100644 --- a/src/main/resources/mybatis/query-template/companyField-template.xml +++ b/src/main/resources/mybatis/query-template/companyField-template.xml @@ -23,6 +23,9 @@ <if test="id != '' and id != null"> AND cf.id like CONCAT('%',#{id},'%') </if> + <if test="url != '' and id != url"> + AND cf.url like CONCAT('%',#{url},'%') + </if> ORDER BY cf.id DESC <if test="pageSize != '' and pageSize != null"> limit #{pageSize} offset #{page}; -- Gitblit v1.8.0