| | |
| | | private UserService userService; |
| | | |
| | | @Autowired |
| | | private DepartmentService departmentService; |
| | | |
| | | @Autowired |
| | | private IssueCommentService issueCommentService; |
| | | |
| | | @Autowired |
| | |
| | | this.verifyTitle(issueForm.getTitle()); |
| | | // 날짜 유효성 체크 |
| | | this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate()); |
| | | // 담당 부서 유효성 체크 |
| | | this.verifyIssueDepartment(project, issueForm); |
| | | |
| | | // 이슈 상태 유형이 '대기' 인 이슈 상태 가져오기 |
| | | IssueStatus issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); |
| | |
| | | List<Map<String, Object>> results = this.issueMapper.find(issueCondition); |
| | | |
| | | // 튜닝 전 - 0.8, 0.9, 0.9, 0.9, 0.9 |
| | | StopWatch serviceStart = new StopWatch(); |
| | | serviceStart.start(); |
| | | /*StopWatch serviceStart = new StopWatch(); |
| | | serviceStart.start();*/ |
| | | Long totalCount = this.issueMapper.count(issueCondition); |
| | | // 튜닝 전 - 1.1, 1.1, 1.3, 1.2 |
| | | |
| | | serviceStart.stop(); |
| | | log.debug("serviceENd1 : " + serviceStart.getTime()); |
| | | /*serviceStart.stop(); |
| | | log.debug("serviceENd1 : " + serviceStart.getTime());*/ |
| | | |
| | | int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; |
| | | // 이슈 아이디 초기화 |
| | |
| | | this.setIssueHistory(issue, issueVo); // 이슈 기록 정보 셋팅 |
| | | this.setRelationIssue(issue, issueVo); //연관 일감 셋팅 |
| | | this.setDownIssues(issue, issueVo); |
| | | this.setIssueCompanyField(issue, issueVo); //업체 정보 세팅 |
| | | this.setIssueIspField(issue, issueVo); //ISP 정보 세팅 |
| | | this.setIssueHostingField(issue, issueVo); //HOSTING 정보 세팅 |
| | | this.setParentIssue(issue,issueVo); |
| | | } |
| | | |
| | | // 상위일감 정보 추가 |
| | | private void setParentIssue(Issue issue, IssueVo issueVo) { |
| | | if(issue.getParentIssue() != null){ |
| | | issueVo.setParentIssueVo(ConvertUtil.copyProperties(issue.getParentIssue(), IssueVo.class)); |
| | | } |
| | | } |
| | | |
| | | // 등록자 정보 추가 |
| | |
| | | |
| | | for (IssueDepartment issueDepartment : issue.getIssueDepartments()) { |
| | | DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class); |
| | | departmentVo.setByName(departmentVo.getByName()); |
| | | departmentVo.setByName(departmentVo.getDepartmentName()); |
| | | departmentVos.add(departmentVo); |
| | | } |
| | | issueVo.setDepartmentVos(departmentVos); |
| | |
| | | if (!StringUtils.isEmpty(detectIssueChange.toString())) { |
| | | this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, detectIssueChange.toString()); |
| | | } |
| | | |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_MODIFY)); |
| | | |
| | | // 업체 정보 저장 |
| | | this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields()); |
| | | // ISP 정보 저장 |
| | | this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields()); |
| | | // HOSTING 정보 저장 |
| | | this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); |
| | | |
| | | return issue; |
| | | } |
| | |
| | | // 데이터 보정 작업 - 프로젝트에서 제외된 사용자는 담당자에서 제외 될 수 있도록 처리 |
| | | if (!includeProject) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER)); |
| | | this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_DEPARTMENT)); |
| | | } |
| | | } |
| | | // 참여 확인된 부서로 담당부서 변경 |
| | |
| | | } |
| | | |
| | | // 이슈 담당자 변경 |
| | | /*@Override |
| | | @Override |
| | | @Transactional |
| | | public void modifyIssueUser(IssueForm issueForm) { |
| | | // 사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다. |
| | |
| | | |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_USER_CHANGE)); |
| | | }*/ |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | } |
| | | |
| | | // 업체 정보 추가 |
| | | private void setIssueCompanyField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 업체 값을 조회한다. |
| | | List<Map<String, Object>> issueCompanyFields = this.issueCompanyService.findInIssueIds(issueCondition); |
| | | private void setIssueCompanyField(Issue issue, IssueVo issueVo) { |
| | | List<IssueCompanyVo> issueCompanyVos = Lists.newArrayList(); |
| | | |
| | | 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); |
| | | } |
| | | for(IssueCompany issueCompany : issue.getIssueCompanies()){ |
| | | IssueCompanyVo issueCompanyVo = ConvertUtil.copyProperties(issueCompany, IssueCompanyVo.class); |
| | | issueCompanyVo.setId(issueCompany.getId()); |
| | | CompanyField companyField = issueCompany.getCompanyField(); |
| | | if (companyField != null) { |
| | | issueCompanyVo.setCompanyId(issueCompany.getCompanyField().getId()); |
| | | } |
| | | issueCompanyVos.add(issueCompanyVo); |
| | | } |
| | | issueVo.setIssueCompanyVos(issueCompanyVos); |
| | | } |
| | | |
| | | // Isp 정보 추가 |
| | | private void setIssueIspField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 ISP 값을 조회한다. |
| | | /*List<Map<String, Object>> issueIspFields = this.issueIspFieldService.findInIssueIds(issueCondition);*/ |
| | | private void setIssueIspField(Issue issue, IssueVo issueVo) { |
| | | List<IssueIspVo> issueIspVos = Lists.newArrayList(); |
| | | |
| | | /*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); |
| | | } |
| | | } |
| | | }*/ |
| | | for(IssueIsp issueIsp : issue.getIssueIspFields()){ |
| | | IssueIspVo issueIspVo = ConvertUtil.copyProperties(issueIsp, IssueIspVo.class); |
| | | issueIspVo.setId(issueIsp.getId()); |
| | | issueIspVos.add(issueIspVo); |
| | | } |
| | | issueVo.setIssueIspVos(issueIspVos); |
| | | } |
| | | |
| | | // Hosting 정보 추가 |
| | | private void setIssueHostingField(List<IssueVo> issueVos, IssueCondition issueCondition) { |
| | | // 이슈에서 저장한 Hosting 값을 조회한다. |
| | | List<Map<String, Object>> issueHostingFields = this.issueHostingService.findInIssueIds(issueCondition); |
| | | private void setIssueHostingField(Issue issue, IssueVo issueVo) { |
| | | List<IssueHostingVo> issueHostingVos = Lists.newArrayList(); |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | for(IssueHosting issueHosting : issue.getIssueHostingFields()){ |
| | | IssueHostingVo issueHostingVo = ConvertUtil.copyProperties(issueHosting, IssueHostingVo.class); |
| | | issueHostingVo.setId(issueHosting.getId()); |
| | | issueHostingVos.add(issueHostingVo); |
| | | } |
| | | issueVo.setIssueHostingVos(issueHostingVos); |
| | | } |
| | | |
| | | // 연관일감 정보 추가 |
| | |
| | | Map<String, Priority> priorityMaps = new HashMap<>(); // 우선 순위 모음 |
| | | Map<String, Severity> severityMaps = new HashMap<>(); // 중요도 모음 |
| | | Map<String, Object> userMaps = new HashMap<>(); // 사용자 모음 |
| | | Map<String, Object> departmentMaps = new HashMap<>(); // 부서 모음 |
| | | Map<String, CustomField> customFieldMaps = new HashMap<>(); |
| | | Map<String, IssueStatus> issueStatusReadyMaps = new HashMap<>(); // 상태 속성 '대기'인 이슈 상태 |
| | | Map<Long, Long> issueNumberMaps = new HashMap<>(); // 이슈 번호 모음 |
| | | Map<String, Long> issueTypeCustomFieldMaps = new HashMap<>(); // 이슈 타입 + 사용자 정의 필드 연결 정보 |
| | | Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); // 이슈를 넣으려는 업무 공간 |
| | | // 이슈의 주요 속성을 map 에 저장하여 엑셀 import 에서 지정한 대상(이슈 속성)을 빠르게 찾을 수 있게 한다. |
| | | this.IssueAttributeMapToList(projectMaps, issueTypeMaps, priorityMaps, severityMaps, userMaps, customFieldMaps, issueNumberMaps, issueTypeCustomFieldMaps, issueStatusReadyMaps); |
| | | this.IssueAttributeMapToList(projectMaps, issueTypeMaps, priorityMaps, severityMaps, userMaps, departmentMaps, customFieldMaps, issueNumberMaps, issueTypeCustomFieldMaps, issueStatusReadyMaps); |
| | | // 0.237 - 0.230 |
| | | |
| | | List<IssueForm> issueForms = Lists.newArrayList(); |
| | |
| | | |
| | | // 이슈의 주요 속성을 map 에 저장하여 엑셀 import 에서 지정한 대상(이슈 속성)을 빠르게 찾을 수 있게 한다. |
| | | private void IssueAttributeMapToList(Map<String, Project> projectMaps, Map<String, IssueType> issueTypeMaps, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, |
| | | Map<String, Object> userMaps, Map<String, CustomField> customFieldMaps, Map<Long, Long> issueNumberMaps, Map<String, Long> issueTypeCustomFieldMaps, Map<String, IssueStatus> issueStatusReadyMaps) { |
| | | Map<String, Object> userMaps, Map<String, Object> departmentMaps, Map<String, CustomField> customFieldMaps, Map<Long, Long> issueNumberMaps, Map<String, Long> issueTypeCustomFieldMaps, Map<String, IssueStatus> issueStatusReadyMaps) { |
| | | // 프로젝트 키로 바로 찾을 수 있게 준비 |
| | | List<Project> projects = this.projectService.findByWorkspaceId(); |
| | | List<Long> projectIds = Lists.newArrayList(); |
| | |
| | | } |
| | | |
| | | userMaps.put(project.getProjectKey(), userMap); |
| | | |
| | | // 프로젝트에 참여하는 부서 정보 |
| | | List<Map<String, Object>> departments = this.departmentService.findProjectDepartment(project); |
| | | List<Long> departmentList = Lists.newArrayList(); |
| | | // 부서 정보를 저장 |
| | | for (Map<String, Object> department : departments) { |
| | | departmentList.add(MapUtil.getLong(department, "departmentId")); |
| | | } |
| | | } |
| | | |
| | | // 이슈 유형을 바로 찾을 수 있게 준비 |