OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-07 123374115c47cf25489e1ab3e1faa7ae79b7f493
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -18,6 +18,7 @@
import kr.wisestone.owl.mapper.IssueMapper;
import kr.wisestone.owl.mapper.ProjectMapper;
import kr.wisestone.owl.repository.IssueRepository;
import kr.wisestone.owl.repository.UserDepartmentRepository;
import kr.wisestone.owl.service.*;
import kr.wisestone.owl.util.*;
import kr.wisestone.owl.util.DateUtil;
@@ -163,6 +164,9 @@
    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;
    @Autowired
    private UserDepartmentRepository userDepartmentRepository;
    @Override
    protected JpaRepository<Issue, Long> getRepository() {
@@ -471,7 +475,6 @@
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
        //  첨부 파일 저장
        //  multipartFile 을 file Map List 객체로 변경한다.
        List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles);
@@ -645,6 +648,19 @@
        }
    }
    void SetMyDepartmentId(IssueCondition issueCondition){
        Long loginId = issueCondition.getLoginUserId();
        List<Long> myDepartmentIds = Lists.newArrayList();
        List<UserDepartment> myDepartments = this.userDepartmentRepository.findByUserId(loginId);
        if(myDepartments != null && myDepartments.size() > 0){
            for(UserDepartment myDepartment : myDepartments){
                myDepartmentIds.add(myDepartment.getDepartmentId());
            }
        }
        issueCondition.setMyDepartmentIds(myDepartmentIds);
    }
    //  이슈 목록을 조회한다.
    @Override
    @Transactional(readOnly = true)
@@ -675,12 +691,25 @@
        List<String> issueKeys = Lists.newArrayList(issueIds);
        issueCondition.setIssueIds(issueKeys);
        List<Map<String, Object>> results = this.issueMapper.find(issueCondition);
        issueCondition.setLoginUserId(this.webAppUtil.getLoginId());
        issueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        User user = this.webAppUtil.getLoginUserObject();
        List<Map<String, Object>> results = Lists.newArrayList();
        Long totalCount = 0L;
        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
            results = this.issueMapper.find(issueCondition);
            totalCount = this.issueMapper.count(issueCondition);
        } else{
            this.SetMyDepartmentId(issueCondition);
            results = this.issueMapper.findByDepartment(issueCondition);
            totalCount = this.issueMapper.countByDepartment(issueCondition);
        }
        //  튜닝 전 - 0.8, 0.9, 0.9, 0.9, 0.9
        /*StopWatch serviceStart = new StopWatch();
        serviceStart.start();*/
        Long totalCount = this.issueMapper.count(issueCondition);
        //  튜닝 전 - 1.1, 1.1, 1.3, 1.2
        /*serviceStart.stop();
@@ -690,7 +719,6 @@
        //  이슈 아이디 초기화
        issueCondition.setIssueIds(Lists.newArrayList());
        //  Map 에 있는 데이터를 IssueVo 데이터로 변환한다.
        User user = this.webAppUtil.getLoginUserObject();
        this.setMapToIssueVo(results, issueVos, issueCondition, user);
        this.setCountDownIssues(results, issueVos);
@@ -704,21 +732,33 @@
        return issueVos;
    }
    private void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) {
    @Override
    @Transactional(readOnly = true)
    public void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) {
        for (Map<String, Object> result : results){
            List<Issue> downIssues = this.issueRepository.findByParentIssueId((Long) result.get("id")); //하위이슈 가져오기
            if(downIssues != null && downIssues.size() > 0){ //상위이슈 가지고 있는 애들이 있으면
                int downIssueCount = 0;
                int downIssueAllCount = 0;// 하위이슈 전체 카운트
                int downIssueCount = 0;// 하위이슈 미완료 카운트
                for(Issue downIssue : downIssues){
                    downIssueCount ++;
                    downIssueAllCount ++;
                    Long parentIssueId = downIssue.getParentIssue().getId();
                    Issue parentIssue = this.getIssue(parentIssueId);
                    IssueVo parentIssueVo = ConvertUtil.copyProperties(parentIssue, IssueVo.class);
                    parentIssueVo.setDownIssueCount(downIssueCount);
                    parentIssueVo.setDownIssueAllCount(downIssueAllCount);
                    IssueStatus downIssueStatus = this.issueStatusService.getIssueStatus(downIssue.getIssueStatus().getId());
                    IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
                    downIssueVo.setIssueStatusType(downIssueStatus.getIssueStatusType().toString());
                    if(!downIssueVo.getIssueStatusType().equals("CLOSE")){ //미완료 하위이슈 체크
                        downIssueCount ++;
                    }
                    for(IssueVo issueVo : issueVos){
                        if(issueVo.getId().equals(parentIssueVo.getId())){
                            issueVo.setDownIssueCount(parentIssueVo.getDownIssueCount());
                            issueVo.setDownIssueCount(downIssueCount);
                            issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount());
                        }
                    }
                }
@@ -1149,15 +1189,20 @@
            if(downIssues != null && downIssues.size()>0){
                List<IssueVo> resultList = new ArrayList<>();
                for(Issue downIssue : downIssues){
                    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);   // 사용자정의필드 정보 세팅
                    IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
                    downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
                    downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
                    downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
                    //이슈 상태 추가
                    IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(downIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType");
                    issueStatusVo.setIssueStatusType(downIssue.getIssueStatus().getIssueStatusType().toString());
                    downIssueVo.setIssueStatusVo(issueStatusVo);
                    resultList.add(newIssueVo);
                    this.setRegister(downIssue, downIssueVo); // 등록자
                    this.setIssueDepartment(downIssue, downIssueVo);  //  담당부서 정보 셋팅
                    this.setIssueCustomFields(downIssue, downIssueVo);   // 사용자정의필드 정보 세팅
                    resultList.add(downIssueVo);
                }
                issueVo.setIssueDownVos(resultList);
            }
@@ -1251,6 +1296,11 @@
                issueRelationVo.setIssueTypeVo(ConvertUtil.copyProperties(relationIssue.getIssueType(), IssueTypeVo.class));
                issueRelationVo.setPriorityVo(ConvertUtil.copyProperties(relationIssue.getPriority(), PriorityVo.class));
                issueRelationVo.setSeverityVo(ConvertUtil.copyProperties(relationIssue.getSeverity(), SeverityVo.class));
                //이슈 상태 추가
                IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(relationIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType");
                issueStatusVo.setIssueStatusType(relationIssue.getIssueStatus().getIssueStatusType().toString());
                issueRelationVo.setIssueStatusVo(issueStatusVo);
                this.setRegister(relationIssue, relIssueVo); // 등록자
                this.setIssueDepartment(relationIssue, relIssueVo);  //  담당부서 정보 셋팅
                this.setIssueCustomFields(relationIssue, relIssueVo);   // 사용자정의필드 정보 세팅