| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.IOException; |
| | | import java.util.*; |
| | | import java.util.concurrent.locks.Condition; |
| | | |
| | | @Service |
| | | public class IssueServiceImpl extends AbstractServiceImpl<Issue, Long, JpaRepository<Issue, Long>> implements IssueService { |
| | |
| | | |
| | | @Autowired |
| | | private IssueCustomFieldValueService issueCustomFieldValueService; |
| | | |
| | | @Autowired |
| | | private IssueCompanyService issueCompanyService; |
| | | |
| | | @Autowired |
| | | private IssueIspService issueIspService; |
| | | |
| | | @Autowired |
| | | private IssueHostingService issueHostingService; |
| | | |
| | | @Autowired |
| | | private IssueUserService issueUserService; |
| | |
| | | issue.setPriority(priority); |
| | | issue.setSeverity(severity); |
| | | |
| | | // 업체 필드 유효성 체크 |
| | | if(issueForm.getCompanyId() != null){ |
| | | CompanyField companyField = this.companyFieldService.getCompany(issueForm.getCompanyId()); |
| | | issue.setCompanyField(companyField); |
| | | } |
| | | // ISP 필드 유효성 체크 |
| | | if(issueForm.getIspId() != null) { |
| | | IspField ispField = this.ispFieldService.getIsp(issueForm.getIspId()); |
| | | issue.setIspFieldId(ispField); |
| | | } |
| | | // HOSTING 필드 유효성 체크 |
| | | if (issueForm.getHostingId() != null){ |
| | | HostingField hostingField = this.hostingFieldService.getHosting(issueForm.getHostingId()); |
| | | issue.setHostingFieldId(hostingField); |
| | | } |
| | | |
| | | issue.setIssueNumber(this.issueNumberGeneratorService.generateIssueNumber(project)); // 각 프로젝트의 고유 이슈 번호 생성 |
| | | |
| | | this.issueRepository.saveAndFlush(issue); |
| | |
| | | this.reservationIssueEmail(issue.getId(), EmailType.ISSUE_ADD); |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ADD)); |
| | | // 업체 정보 저장 |
| | | this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields()); |
| | | // ISP 정보 저장 |
| | | this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields()); |
| | | // HOSTING 정보 저장 |
| | | this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); |
| | | |
| | | return issue; |
| | | } |
| | |
| | | |
| | | issueMap.put("customFields", customFields); |
| | | issueMap.put("description", issue.getDescription()); |
| | | |
| | | //업체,ISP,HOSTING 추가 |
| | | |
| | | |
| | | StringBuilder attachedFileBuilder = new StringBuilder(); |
| | | |
| | |
| | | @Override |
| | | @Transactional(readOnly = true) |
| | | public List<IssueVo> findChartIssue(Map<String, Object> resJsonData, |
| | | IssueCondition issueCondition, Pageable pageable) { |
| | | IssueCondition issueCondition, Pageable pageable) { |
| | | |
| | | // 검색 조건을 만든다 |
| | | if (!this.makeIssueSearchCondition(issueCondition,Lists.newArrayList("01", "02", "03"), pageable)) { |
| | |
| | | |
| | | // 사용자 정의 필드 정보 추가 |
| | | this.setIssueCustomFieldValue(issueVos, issueCondition); |
| | | // 업체 정보 추가 |
| | | //this.setIssueCompanyField(issueVos, issueCondition); |
| | | // ISP 정보 추가 |
| | | //this.setIssueIspField(issueVos, issueCondition); |
| | | // HOSTING 정보 추가 |
| | | //this.setIssueHostingField(issueVos, issueCondition); |
| | | |
| | | } |
| | | |
| | | // 검색 조건을 만든다 |
| | | // 검색 조건을 만든다 |
| | | private boolean makeIssueSearchCondition(IssueCondition condition, List<String> projectStatues, Pageable pageable) { |
| | | if (pageable != null) { |
| | | condition.setPage(pageable.getPageNumber() * pageable.getPageSize()); |
| | |
| | | this.setAttachedFiles(issue, issueVo); // 첨부 파일 정보 셋팅 |
| | | this.setIssueCustomFields(issue, issueVo); // 사용자 정의 필드 값 정보 셋팅 |
| | | this.setRelationIssue(issue, issueVo); //연관 일감 셋팅 |
| | | this.setDownIssues(issue, issueVo); |
| | | |
| | | break; |
| | | |
| | |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_DETAIL)); |
| | | |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, issueVo); |
| | | } |
| | | |
| | | // 하위 이슈 정보를 셋팅한다 |
| | | private void setDownIssues(Issue issue, IssueVo issueVo) { |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId()); |
| | | List<IssueVo> issueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class); |
| | | issueVo.setIssueDownVos(issueVos); |
| | | } |
| | | |
| | | // 이슈 상세 정보를 셋팅한다. |
| | |
| | | this.setIssueComments(issue, issueVo); // 댓글 정보 셋팅 |
| | | this.setIssueHistory(issue, issueVo); // 이슈 기록 정보 셋팅 |
| | | this.setRelationIssue(issue, issueVo); //연관 일감 셋팅 |
| | | this.setDownIssues(issue, issueVo); |
| | | } |
| | | |
| | | // 등록자 정보 추가 |
| | |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // 이슈 제목 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("description", this.messageAccessor.message("common.content"), 60, ExportExcelAttrVo.ALIGN_LEFT)); // 내용 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("issueTypeName", this.messageAccessor.message("common.issueType"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 이슈 타입 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("department", this.messageAccessor.message("common.department"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 담당부서 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("departments", this.messageAccessor.message("common.department"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 담당부서 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("priorityName", this.messageAccessor.message("common.priority"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 우선순위 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("severityName", this.messageAccessor.message("common.importance"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 중요도 |
| | | excelInfo.addAttrInfos(new ExportExcelAttrVo("register", this.messageAccessor.message("common.register"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 등록자 |
| | |
| | | } |
| | | } |
| | | |
| | | // 업체 정보 추가 |
| | | private void setIssueCompanyField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 업체 값을 조회한다. |
| | | List<Map<String, Object>> issueCompanyFields = this.issueCompanyService.findInIssueIds(issueCondition); |
| | | |
| | | for (IssueVo issueVo : issueVos) { |
| | | for (Map<String, Object> issueCompanyField : issueCompanyFields) { |
| | | if (issueVo.getId().equals(MapUtil.getLong(issueCompanyField, "issueId"))) { |
| | | IssueCompanyVo issueCompanyVo = new IssueCompanyVo(); |
| | | issueCompanyVo.setName(MapUtil.getString(issueCompanyField, "companyName")); |
| | | issueCompanyVo.setManager(MapUtil.getString(issueCompanyField, "companyManager")); |
| | | issueCompanyVo.setTel(MapUtil.getString(issueCompanyField, "companyTel")); |
| | | issueCompanyVo.setEmail(MapUtil.getString(issueCompanyField, "companyEmail")); |
| | | issueCompanyVo.setMemo(MapUtil.getString(issueCompanyField, "companyMemo")); |
| | | |
| | | issueVo.addIssueCompanyFieldVo(issueCompanyVo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // Isp 정보 추가 |
| | | private void setIssueIspField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 ISP 값을 조회한다. |
| | | /*List<Map<String, Object>> issueIspFields = this.issueIspFieldService.findInIssueIds(issueCondition);*/ |
| | | |
| | | /*for (IssueVo issueVo : issueVos) { |
| | | for (Map<String, Object> issueIspField : issueIspFields) { |
| | | if (issueVo.getId().equals(MapUtil.getLong(issueIspField, "issueId"))) { |
| | | IssueIspFieldVo issueIspFieldVo = new IssueIspFieldVo(); |
| | | issueIspFieldVo.setName(MapUtil.getString(issueIspField, "name")); |
| | | issueIspFieldVo.setManager(MapUtil.getString(issueIspField, "manager")); |
| | | issueIspFieldVo.setTel(MapUtil.getString(issueIspField, "tel")); |
| | | issueIspFieldVo.setEmail(MapUtil.getString(issueIspField, "email")); |
| | | issueIspFieldVo.setMemo(MapUtil.getString(issueIspField, "memo")); |
| | | |
| | | issueVo.addIssueIspFieldVo(issueIspFieldVo); |
| | | } |
| | | } |
| | | }*/ |
| | | } |
| | | |
| | | // Hosting 정보 추가 |
| | | private void setIssueHostingField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 Hosting 값을 조회한다. |
| | | List<Map<String, Object>> issueHostingFields = this.issueHostingService.findInIssueIds(issueCondition); |
| | | |
| | | for (IssueVo issueVo : issueVos) { |
| | | for (Map<String, Object> issueHostingField : issueHostingFields) { |
| | | if (issueVo.getId().equals(MapUtil.getLong(issueHostingField, "issueId"))) { |
| | | IssueHostingVo issueHostingVo = new IssueHostingVo(); |
| | | issueHostingVo.setName(MapUtil.getString(issueHostingField, "name")); |
| | | issueHostingVo.setManager(MapUtil.getString(issueHostingField, "manager")); |
| | | issueHostingVo.setTel(MapUtil.getString(issueHostingField, "tel")); |
| | | issueHostingVo.setEmail(MapUtil.getString(issueHostingField, "email")); |
| | | issueHostingVo.setMemo(MapUtil.getString(issueHostingField, "memo")); |
| | | |
| | | issueVo.addIssueHostingFieldVo(issueHostingVo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 연관일감 정보 추가 |
| | | private void setRelationIssue(IssueVo issueVo, Long issueId) { |
| | | List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueId); |
| | |
| | | result.put("description", description); |
| | | result.put("issueTypeName", issueVo.getIssueTypeName()); |
| | | result.put("assignees", CommonUtil.convertUserVosToString(issueVo.getUserVos())); |
| | | result.put("departments", CommonUtil.convertDepartmentVosToString(issueVo.getDepartmentVos())); |
| | | result.put("priorityName", issueVo.getPriorityName()); |
| | | result.put("severityName", issueVo.getSeverityName()); |
| | | |
| | |
| | | result.put("customField_" + issueCustomFieldValueVo.getCustomFieldVo().getId().toString(), useValue + ", " + issueCustomFieldValueVo.getUseValue()); |
| | | } |
| | | } |
| | | |
| | | //업체, ISP, 호스팅 추가 |
| | | |
| | | results.add(result); |
| | | } catch (Exception e) { |
| | |
| | | // 이슈 사용자 정의 값 필드 벌크 등록 |
| | | this.bulkInsertIssueCustomFieldValue(issueForms, issueTypeCustomFieldMaps); |
| | | // 3.628 - 3.445 |
| | | |
| | | // 업체,ISP,호스팅 추가 |
| | | |
| | | /*serviceStart.stop(); |
| | | log.debug("2차 저장 시간 : " + serviceStart.getTime());*/ |
| | |
| | | |
| | | return tasks; |
| | | } |
| | | |
| | | @Transactional |
| | | @Override |
| | | public void modifyParentIssue(IssueForm issueForm) { |
| | | Issue issue = this.issueRepository.getOne(issueForm.getId()); |
| | | Long parentIssueId = issueForm.getParentIssueId(); |
| | | if (parentIssueId != null) { |
| | | Issue parentIssue = this.issueRepository.getOne(parentIssueId); |
| | | issue.setParentIssue(parentIssue); |
| | | } else { |
| | | issue.setParentIssue(null); |
| | | } |
| | | |
| | | this.issueRepository.saveAndFlush(issue); |
| | | } |
| | | } |