OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-02 6a72a3edec87cca9996c7ab3be3fd48479881945
src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -12,14 +12,14 @@
import kr.wisestone.owl.domain.enumType.SocialType;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.mapper.UserMapper;
import kr.wisestone.owl.repository.DepartmentRepository;
import kr.wisestone.owl.repository.UserRepository;
import kr.wisestone.owl.service.*;
import kr.wisestone.owl.util.*;
import kr.wisestone.owl.vo.*;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.form.DepartmentManagementForm;
import kr.wisestone.owl.web.form.DepartmentForm;
import kr.wisestone.owl.web.form.UserForm;
import kr.wisestone.owl.web.form.UserLevelForm;
import kr.wisestone.owl.web.view.ExcelView;
import org.apache.commons.validator.routines.EmailValidator;
import org.slf4j.Logger;
@@ -34,7 +34,6 @@
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
@@ -58,10 +57,13 @@
    private UserRepository userRepository;
    @Autowired
    private DepartmentRepository departmentRepository;
    @Autowired
    private UserLevelService userLevelService;
    @Autowired
    private DepartmentManagementService departmentManagementService;
    private DepartmentService departmentService;
    @Autowired
    private SystemRoleService systemRoleService;
@@ -227,30 +229,28 @@
            this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace);
            UserLevel userLevel = this.userLevelService.getBasicUserLevel();
            user.setUserLevel(userLevel);
            // edit by zenith for permission at 20200803
            /*user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);*/
        } else if(validAdmin == 1) {    // 라이센스 입력 관리자
            /*DepartmentForm departmentForm = new DepartmentForm();
            departmentForm.setDepartmentName("부서 없음");
            Department department = this.departmentService.add(departmentForm);
            this.departmentRepository.saveAndFlush(department);*/
            Workspace primaryWorkspace = this.workspaceService.getPrimaryWorkspace();
            // UserLevel에 Permission 값 넣어줌
            UserLevelForm userLevelForm = new UserLevelForm();
            // Constants 에서 ADMIN 값 추가
            userLevelForm.setLevelName(Constants.ADMIN_MANAGER);
            // Permission 값 추가
            userLevelForm.setPermission(MngPermission.makeAllPermission());
            UserLevel userLevel = this.userLevelService.addUserLevel(userLevelForm);
            UserLevel userLevel = this.userLevelService.addSuperUserLevel();
            user.setUserLevel(userLevel);
            // DepartmentManagement에 임시로 Name, Description 값 추가
            DepartmentManagementForm departmentManagementForm = new DepartmentManagementForm();
            this.userLevelService.addNormalAdminUserLevel();
            departmentManagementForm.setDepartmentName("개발팀");
            departmentManagementForm.setDepartmentDescription("웹사이트 및 앱 서비스 개발");
            DepartmentManagement departmentManagement = this.departmentManagementService.addDepartment(departmentManagementForm);
            user.setDepartmentId(departmentManagement);
            this.userLevelService.addNormalUserLevel();
            if(primaryWorkspace == null || primaryWorkspace.getName() != userForm.getWorkspaceName()) {
                //  업무 공간를 생성한다. 가입한 사용자는 업무 공간의 주인이다.
@@ -1033,6 +1033,12 @@
        this.userRepository.saveAndFlush(user);
    }
    //  삭제 할 등급명을 유저가 사용하고 있는지 확인
    @Override
    public boolean useUserLevel(Long levelId) {
        return this.userMapper.findByLevelId(levelId) > 0;
    }
    //  마지막으로 선택한 프로젝트 정보를 저장한다.
    @Override
    @Transactional
@@ -1058,6 +1064,30 @@
        resJsonData.put(Constants.RES_KEY_CONTENTS, userVo);
    }
    //  마지막으로 선택한 이슈 타입 정보를 저장한다.
    @Override
    @Transactional
    public void updateLastIssueType(Map<String, Object> resJsonData, UserForm userForm) {
        User user = this.getUser(this.webAppUtil.getLoginId());
        if (userForm.getLastIssueTypeId() != null) {
            user.setLastIssueTypeId(userForm.getLastIssueTypeId());
        }
        this.userRepository.saveAndFlush(user);
        //  세션 업데이트
        SecurityUtils.setUserToSession(user);
        //  클라이언트의 사용자 정보 업데이트
        UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password");
        if (user.getSocialType() != null) {
            userVo.setSocialType(user.getSocialType().toString());
        }
        userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount()));
        resJsonData.put(Constants.RES_KEY_CONTENTS, userVo);
    }
    //  특정 아이디에 해당하는 사용자 목록을 가져온다.
    @Override
    @Transactional(readOnly = true)
@@ -1069,7 +1099,7 @@
    @Override
    @Transactional(readOnly = true)
    public List<User> findAdmin() {
        return this.userRepository.findAdmin();
        return this.userRepository.findAdmin(MngPermission.makeAllPermission());
    }
    //  해당 사용자가 관리하는 업무 공간을 마지막으로 접근한 업무 공간 정보로 업데이트한다.
@@ -1193,7 +1223,7 @@
    @Transactional(readOnly = true)
    public User getUserSession(Map<String, Object> resJsonData, HttpServletRequest httpServletRequest) {
        User user = this.getUser(this.webAppUtil.getLoginId());
        UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password", "permission");
        UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password","permission");
        // user에서 Permission 값을 가져와서 userVo 에 setPermission 함
        userVo.setPermission(user.getPermission());
        userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount()));
@@ -1231,6 +1261,22 @@
        return results;
    }
    //  이메일 알림 예정 시간을 실시간으로 설정한 사용자를 조회한다.
    @Override
    @Transactional(readOnly = true)
    public List<String> findByRealTimeNotifyTime() {
        Map<String, Object> conditions = new HashMap<>();
        List<Map<String, Object>> users = this.userMapper.findByRealTimeNotifyTime(conditions);
        List<String> results = Lists.newArrayList();
        for (Map<String, Object> user : users) {
            results.add(MapUtil.getString(user, "account"));
        }
        return results;
    }
    //  프로젝트에 참여하는 사용자 정보를 조회한다.
    @Override
    @Transactional(readOnly = true)