OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-02 4e32eef25c59e29af3966345bb5e71c12a886865
- 사용자 등급관리 테이블 및 조회 생성
- 부서 관리 테이블 생성
19개 파일 추가됨
14개 파일 변경됨
965 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/Constants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MngPermission.java 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java 46 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/User.java 38 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/UserLevel.java 43 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/UserLevelService.java 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java 78 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java 47 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UserLevelVo.java 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UserVo.java 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java 67 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/UserCondition.java 16 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java 63 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java 99 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/UserForm.java 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/META-INF/orm.xml 4 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/migration/V1_10__Alter_Table.sql 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/userLevel-template.xml 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/userWorkspace-template.xml 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/Constants.java
@@ -13,4 +13,5 @@
    public static final String SESSION_ACCOUNT = "account";
    public static final String EXCEL = "excel";
    public static final String SESSION_EXPIRE_REDIRECT_URL = "/#/login";
    public static final String ADMIN_MANAGER = "admin";
}
src/main/java/kr/wisestone/owl/constant/MngPermission.java
@@ -37,7 +37,7 @@
    public static int makeAllPermission()
    {
        int nPermission = (USER_PERMISSION_MNG_WORKSPACE |
        return (USER_PERMISSION_MNG_WORKSPACE |
                            USER_PERMISSION_MNG_PROJECT |
                          USER_PERMISSION_MNG_USER |
                USER_PERMISSION_MNG_NOTICE |
@@ -46,18 +46,23 @@
                USER_PERMISSION_MNG_EVENT |
                USER_PERMISSION_MNG_GUIDE |
                USER_PERMISSION_MNG_ISSUE_SETTING);
        return nPermission;
    }
    public static int makeSubAllPermission()
    {
        int nPermission = (/*USER_PERMISSION_MNG_WORKSPACE |*/
        return  (/*USER_PERMISSION_MNG_WORKSPACE |*/
                USER_PERMISSION_MNG_USER | USER_PERMISSION_MNG_NOTICE |
                USER_PERMISSION_MNG_FAQ | USER_PERMISSION_MNG_QNA |
                USER_PERMISSION_MNG_EVENT | USER_PERMISSION_MNG_GUIDE |
                        USER_PERMISSION_MNG_ISSUE_SETTING);
    }
        return nPermission;
    // 이슈 시스템 권한 (상태, 워크플로우, 사용자 정의 필드, 이슈유형 포함)
    public static int makeIssuePermission()
    {
        return  (USER_PERMISSION_MNG_ISSUE_STATUS |
                USER_PERMISSION_MNG_WORKFLOW |
                USER_PERMISSION_MNG_CUSTOME_FIELD |
                USER_PERMISSION_MNG_ISSUE_TYPE);
    }
}
src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java
New file
@@ -0,0 +1,46 @@
package kr.wisestone.owl.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
public class DepartmentManagement extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String departmentName;
    private String departmentDescription;
    public DepartmentManagement() {
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    public String getDepartmentDescription() {
        return departmentDescription;
    }
    public void setDepartmentDescription(String departmentDescription) {
        this.departmentDescription = departmentDescription;
    }
}
src/main/java/kr/wisestone/owl/domain/User.java
@@ -30,6 +30,7 @@
    private String phone;
    private String profile;
    private String awsKey;
//    private Long departmentId;
    @Enumerated(EnumType.STRING)
    private SocialType socialType;
    private Long lastWorkspaceId;
@@ -37,7 +38,6 @@
    private Date lastLoginDate;
    private String reservationNotifyTime;   //  이메일 알림 시간 예정
    private String language;
    private Integer permission;
    private String licensekey;
    @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
@@ -61,6 +61,15 @@
    @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
    private Set<IssueTableConfig> issueTableConfigs = new HashSet<>();
    @ManyToOne(targetEntity = UserLevel.class, fetch = FetchType.LAZY)
    @JoinColumn(name="level_id")
    private UserLevel userLevel;
    @ManyToOne(targetEntity = DepartmentManagement.class, fetch = FetchType.LAZY)
    @JoinColumn(name="department_id")
    private DepartmentManagement departmentManagement;
    public User() {
    }
@@ -69,6 +78,23 @@
        this.name = name;
        this.account = account;
    }
    public DepartmentManagement getDepartmentId() {
        return departmentManagement;
    }
    public void setDepartmentId(DepartmentManagement department) {
        this.departmentManagement = department;
    }
    public UserLevel getUserLevel() {
        return userLevel;
    }
    public void setUserLevel(UserLevel userLevel) {
        this.userLevel = userLevel;
    }
    public Long getId() {
        return id;
@@ -279,13 +305,15 @@
        this.language = language;
    }
    public Integer getPermission() {
        return permission;
        return this.userLevel.getPermission();
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
    // TEST
    //public void setPermission(Integer permission) {
    //    this.userLevel.setPermission(permission);
    //}
    public String getLicensekey() {
        return licensekey;
src/main/java/kr/wisestone/owl/domain/UserLevel.java
New file
@@ -0,0 +1,43 @@
package kr.wisestone.owl.domain;
import javax.persistence.*;
import java.io.Serializable;
@Entity
public class UserLevel extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String levelName;
    private Integer permission;
    public UserLevel() {
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getLevelName() {
        return levelName;
    }
    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }
    public Integer getPermission() {
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
}
src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java
New file
@@ -0,0 +1,33 @@
package kr.wisestone.owl.mapper;
import kr.wisestone.owl.web.condition.DepartmentManagementCondition;
import kr.wisestone.owl.web.condition.DepartmentManagementCondition;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
 * Created by wisestone on 2018-02-26.
 */
@Repository
public interface DepartmentManagementMapper {
    List<Map<String, Object>> find(DepartmentManagementCondition departmentManagementCondition);
    List<Map<String, Object>> findAdmin();
    List<Map<String, Object>> findProjectMember(DepartmentManagementCondition DepartmentManagementCondition);
    Long count(DepartmentManagementCondition DepartmentManagementCondition);
    void deleteCascadeUser(DepartmentManagementCondition DepartmentManagementCondition);
    List<Map<String, Object>> findByReservationNotifyTime(Map<String, Object> conditions);
    List<Map<String, Object>> findByAllWorkspace(DepartmentManagementCondition DepartmentManagementCondition);
    Long countByAllWorkspace(DepartmentManagementCondition DepartmentManagementCondition);
    List<Map<String, Object>> findEvent();
}
src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java
New file
@@ -0,0 +1,33 @@
package kr.wisestone.owl.mapper;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
 * Created by wisestone on 2018-02-26.
 */
@Repository
public interface UserLevelMapper {
    List<Map<String, Object>> find(UserLevelCondition userLevelCondition);
    List<Map<String, Object>> findAdmin();
    List<Map<String, Object>> findProjectMember(UserLevelCondition userLevelCondition);
    Long count(UserLevelCondition userLevelCondition);
    void deleteCascadeUser(UserLevelCondition userLevelCondition);
    List<Map<String, Object>> findByReservationNotifyTime(Map<String, Object> conditions);
    List<Map<String, Object>> findByAllWorkspace(UserLevelCondition userLevelCondition);
    Long countByAllWorkspace(UserLevelCondition userLevelCondition);
    List<Map<String, Object>> findEvent();
}
src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java
New file
@@ -0,0 +1,8 @@
package kr.wisestone.owl.repository;
import kr.wisestone.owl.domain.DepartmentManagement;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DepartmentManagementRepository extends JpaRepository<DepartmentManagement, Long> {
}
src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java
New file
@@ -0,0 +1,8 @@
package kr.wisestone.owl.repository;
import kr.wisestone.owl.domain.UserLevel;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserLevelRepository extends JpaRepository<UserLevel, Long> {
}
src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java
New file
@@ -0,0 +1,10 @@
package kr.wisestone.owl.service;
import kr.wisestone.owl.domain.DepartmentManagement;
import kr.wisestone.owl.web.form.DepartmentManagementForm;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DepartmentManagementService extends AbstractService<DepartmentManagement, Long, JpaRepository<DepartmentManagement, Long>> {
    DepartmentManagement addDepartment(DepartmentManagementForm departmentManagementForm);
}
src/main/java/kr/wisestone/owl/service/UserLevelService.java
New file
@@ -0,0 +1,18 @@
package kr.wisestone.owl.service;
import kr.wisestone.owl.domain.UserLevel;
import kr.wisestone.owl.vo.UserLevelVo;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.form.UserLevelForm;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Map;
public interface UserLevelService extends AbstractService<UserLevel, Long, JpaRepository<UserLevel, Long>> {
    UserLevel addUserLevel(UserLevelForm userLevelForm);
    List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition make, Pageable pageable);
}
src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java
New file
@@ -0,0 +1,29 @@
package kr.wisestone.owl.service.impl;
import kr.wisestone.owl.domain.DepartmentManagement;
import kr.wisestone.owl.repository.DepartmentManagementRepository;
import kr.wisestone.owl.service.DepartmentManagementService;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.web.form.DepartmentManagementForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
@Service
public class DepartmentManagementServiceImpl extends AbstractServiceImpl<DepartmentManagement, Long, JpaRepository<DepartmentManagement, Long>> implements DepartmentManagementService {
    @Autowired
    private DepartmentManagementRepository departmentManagementRepository;
    @Override
    protected JpaRepository<DepartmentManagement, Long> getRepository() {
        return this.departmentManagementRepository;
    }
    @Override
    public DepartmentManagement addDepartment(DepartmentManagementForm departmentManagementForm) {
        DepartmentManagement departmentManagement = ConvertUtil.copyProperties(departmentManagementForm, DepartmentManagement.class);
        departmentManagementRepository.saveAndFlush(departmentManagement);
        return departmentManagement;
    }
}
src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java
@@ -106,7 +106,7 @@
        newPermission |= MngPermission.makePermission(manageUserForm.getPermGuide(), MngPermission.USER_PERMISSION_MNG_GUIDE);
        User user = userService.getUser(manageUserForm.getUserId());
        user.setPermission(newPermission);
/*        user.setPermission(newPermission);*/
        this.userRepository.saveAndFlush(user);
    }
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
New file
@@ -0,0 +1,78 @@
package kr.wisestone.owl.service.impl;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.domain.UserLevel;
import kr.wisestone.owl.mapper.UserLevelMapper;
import kr.wisestone.owl.mapper.UserMapper;
import kr.wisestone.owl.repository.UserLevelRepository;
import kr.wisestone.owl.service.UserLevelService;
import kr.wisestone.owl.util.CommonUtil;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.vo.ResPage;
import kr.wisestone.owl.vo.UserLevelVo;
import kr.wisestone.owl.vo.UserVo;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.form.UserLevelForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class UserLevelServiceImpl extends AbstractServiceImpl<UserLevel, Long, JpaRepository<UserLevel, Long>> implements UserLevelService {
    @Autowired
    private UserLevelRepository userLevelRepository;
    @Autowired
    private UserLevelMapper userLevelMapper;
    @Override
    protected JpaRepository<UserLevel, Long> getRepository() {
        return this.userLevelRepository;
    }
    @Override
    public UserLevel addUserLevel(UserLevelForm userLevelForm) {
        UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
        userLevelRepository.saveAndFlush(userLevel);
        return userLevel;
    }
    @Override
    public List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition condition,
                         Pageable pageable) {
        condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
        condition.setPageSize(pageable.getPageSize());
        List<Map<String, Object>> results = this.userLevelMapper.find(condition);
        Long totalUsersCount = this.userLevelMapper.count(condition);
        return this.convertUserLevelVoToMap(results, totalUsersCount, pageable, resJsonData);
    }
    //  검색 결과를 UserLevelVo 로 변환한다.
    private List<UserLevelVo> convertUserLevelVoToMap(List<Map<String, Object>> results, Long totalUsersCount, Pageable pageable, Map<String, Object> resJsonData) {
        List<UserLevelVo> userLevelVos = Lists.newArrayList();
        for (Map<String, Object> result : results) {
            UserLevelVo userLevelVo = ConvertUtil.convertMapToClass(result, UserLevelVo.class);
            userLevelVos.add(userLevelVo);
        }
        int totalPage = (int) Math.ceil((totalUsersCount - 1) / pageable.getPageSize()) + 1;
        resJsonData.put(Constants.RES_KEY_CONTENTS, userLevelVos);
        resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
                totalPage, totalUsersCount));
        return userLevelVos;
    }
}
src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -17,7 +17,9 @@
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.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;
@@ -32,6 +34,7 @@
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;
@@ -53,6 +56,12 @@
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private UserLevelService userLevelService;
    @Autowired
    private DepartmentManagementService departmentManagementService;
    @Autowired
    private SystemRoleService systemRoleService;
@@ -197,7 +206,8 @@
        user.setAccount(CommonUtil.encryptAES128(userForm.getAccount()));
        user.setPassword(this.passwordEncoder.encode(user.getPassword()));
        this.userRepository.saveAndFlush(user);
        //this.userLevelRepository.saveAndFlush(user);
        //userLevelRepository.saveAndFlush(user);
        //  프로필 파일이 유효한지 체크한다.
        this.verifyProfile(profile);
@@ -217,11 +227,30 @@
            this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace);
            // edit by zenith for permission at 20200803
            user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);
            /*user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);*/
        } else if(validAdmin == 1) {    // 라이센스 입력 관리자
            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);
            user.setUserLevel(userLevel);
            // DepartmentManagement에 임시로 Name, Description 값 추가
            DepartmentManagementForm departmentManagementForm = new DepartmentManagementForm();
            departmentManagementForm.setDepartmentName("개발팀");
            departmentManagementForm.setDepartmentDescription("웹사이트 및 앱 서비스 개발");
            DepartmentManagement departmentManagement = this.departmentManagementService.addDepartment(departmentManagementForm);
            user.setDepartmentId(departmentManagement);
            if(primaryWorkspace == null || primaryWorkspace.getName() != userForm.getWorkspaceName()) {
                //  업무 공간를 생성한다. 가입한 사용자는 업무 공간의 주인이다.
@@ -234,18 +263,17 @@
                user.setLastWorkspaceId(workspace.getId());
                // edit by zenith for permission at 20200803
                user.setPermission(MngPermission.makeAllPermission());
                //user.setPermission(MngPermission.makeAllPermission());
            } else  {
                this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace);
                user.setLastWorkspaceId(primaryWorkspace.getId());
                user.setPermission(MngPermission.makeSubAllPermission());
                /*user.setPermission(MngPermission.makeSubAllPermission());*/
            }
        }
        this.userRepository.saveAndFlush(user);
        //  이메일 알림 예정 시간이 공백이면 디폴트 이메일 알림 예정 시간으로 설정한다.
        user.setReservationNotifyTime(User.DEFAULT_RESERVATION_NOTIFY_TIME);
        this.userRepository.saveAndFlush(user);
        //  초대받은 메일이 있는 사용자가 가입했으면 초대했을 때 선택한 프로젝트에 참여 시킨다.
        this.userInviteService.checkInviteUser(user);
@@ -1005,7 +1033,7 @@
        this.userRepository.saveAndFlush(user);
    }
        //  마지막으로 선택한 프로젝트 정보를 저장한다.
    //  마지막으로 선택한 프로젝트 정보를 저장한다.
    @Override
    @Transactional
    public void updateLastProject(Map<String, Object> resJsonData, UserForm userForm) {
@@ -1150,6 +1178,7 @@
        }
    }
    //  업무 공간에서 제외되거나 업무 공간 삭제시 참여 사용자들의 마지막 접근 업무 공간 정보로 세션 업데이트하기 위해 사용
    @Override
    @Transactional(readOnly = true)
@@ -1164,7 +1193,9 @@
    @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");
        UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password", "permission");
        // user에서 Permission 값을 가져와서 userVo 에 setPermission 함
        userVo.setPermission(user.getPermission());
        userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount()));
        resJsonData.put(Constants.RES_KEY_CONTENTS, userVo);
        //  사용자 세션 정보를 분석해서 로그에 남긴다.
src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java
New file
@@ -0,0 +1,44 @@
package kr.wisestone.owl.vo;
/**
 * Created by jeong on 2017-08-02.
 */
public class DepartmentManagementVo extends BaseVo{
    private Long id;
    private String departmentName;
    private String departmentDescription;
    public DepartmentManagementVo() {
    }
    public DepartmentManagementVo(Long id, String departmentName, String departmentDescription) {
        this.id = id;
        this.departmentName = departmentName;
        this.departmentDescription = departmentDescription;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    public String getDepartmentDescription() {
        return departmentDescription;
    }
    public void setDepartmentDescription(String departmentDescription) {
        this.departmentDescription = departmentDescription;
    }
}
src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
New file
@@ -0,0 +1,48 @@
package kr.wisestone.owl.vo;
import com.google.common.collect.Lists;
import java.util.List;
/**
 * Created by jeong on 2017-08-02.
 */
public class UserLevelVo extends BaseVo{
    private Long id;
    private String levelName;
    private Integer permission;
    public UserLevelVo() {
    }
    public UserLevelVo(Long id, String levelname, Integer permission) {
        this.id = id;
        this.levelName = levelname;
        this.permission = permission;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getLevelName() {
        return levelName;
    }
    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }
    public Integer getPermission() {
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
}
src/main/java/kr/wisestone/owl/vo/UserVo.java
@@ -20,6 +20,7 @@
    private String socialType;
    private Long lastWorkspaceId;
    private Long lastProjectId;
    private Long departmentId;
    private Boolean userSocialLogin = Boolean.FALSE;
    private List<ProjectVo> projectVos = Lists.newArrayList();
    private String reservationNotifyTime;
@@ -47,6 +48,13 @@
        this.phone = phone;
    }
    public Long getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(Long departmentId) {
        this.departmentId = departmentId;
    }
    public Long getId() {
        return id;
    }
src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
@@ -7,7 +7,7 @@
    private Long id;
    private String userName;
    private String account;
    private Integer premission;
    private Integer permission;
    private Boolean useYn;
    public UserWorkspaceVo(){}
@@ -37,11 +37,11 @@
    }
    public Integer getPermission() {
        return premission;
        return permission;
    }
    public void setPermission(Integer premission) {
        this.premission = premission;
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
    public Boolean getUseYn() {
src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java
New file
@@ -0,0 +1,67 @@
package kr.wisestone.owl.web.condition;
import com.google.common.collect.Lists;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import java.util.List;
import java.util.Map;
/**
 * Created by jeong on 2018-01-01.
 */
public class DepartmentManagementCondition {
    private Long id;
    private String departmentName;
    private String  departmentDescription;
    private List<String> statuses = Lists.newArrayList();
    private List<Long> excludeIds = Lists.newArrayList();
    public static DepartmentManagementCondition make(Map<String, Object> departmentManagemantconditions) {
        DepartmentManagementCondition departmentManagementCondition = ConvertUtil.convertMapToClass(departmentManagemantconditions, DepartmentManagementCondition.class);
        departmentManagementCondition.setStatuses(MapUtil.getStrings(departmentManagemantconditions, "statuses"));
        departmentManagementCondition.setExcludeIds(MapUtil.getLongs(departmentManagemantconditions, "excludeIds"));
        return departmentManagementCondition;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    public String getDepartmentDescription() {
        return departmentDescription;
    }
    public void setDepartmentDescription(String departmentDescription) {
        this.departmentDescription = departmentDescription;
    }
    public List<String> getStatuses() {
        return statuses;
    }
    public void setStatuses(List<String> statuses) {
        this.statuses = statuses;
    }
    public List<Long> getExcludeIds() {
        return excludeIds;
    }
    public void setExcludeIds(List<Long> excludeIds) {
        this.excludeIds = excludeIds;
    }
}
src/main/java/kr/wisestone/owl/web/condition/UserCondition.java
@@ -25,7 +25,7 @@
    private Integer pageSize;
    private Long loginUserId;
    private Long workspaceId;
    private Integer permission;
//    private Integer permission;
    private String licensekey;
    public static UserCondition make(Map<String, Object> conditions) {
@@ -144,13 +144,13 @@
        this.deep = deep;
    }
    public Integer getPermission() {
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
//    public Integer getPermission() {
//        return permission;
//    }
//
//    public void setPermission(Integer permission) {
//        this.permission = permission;
//    }
    public String getLicensekey() {
        return licensekey;
src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java
New file
@@ -0,0 +1,63 @@
package kr.wisestone.owl.web.condition;
import com.google.common.collect.Lists;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import java.util.List;
import java.util.Map;
/**
 * Created by jeong on 2018-01-01.
 */
public class UserLevelCondition {
    private Long id;
    private String levelName;
    private Integer permission;
    private Integer page;
    private Integer pageSize;
    public static UserLevelCondition make(Map<String, Object> userLevelConditions) {
        return ConvertUtil.convertMapToClass(userLevelConditions, UserLevelCondition.class);
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getLevelName() {
        return levelName;
    }
    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }
    public Integer getPermission() {
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
    public Integer getPage() {
        return page;
    }
    public void setPage(Integer page) {
        this.page = page;
    }
    public Integer getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
}
src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
New file
@@ -0,0 +1,99 @@
package kr.wisestone.owl.web.controller;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.domain.enumType.SocialType;
import kr.wisestone.owl.service.UserLevelService;
import kr.wisestone.owl.service.UserService;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.form.UserForm;
import kr.wisestone.owl.web.form.UserLevelForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by jeong on 2017-08-02.
 */
@Controller
public class UserLevelController extends BaseController {
    @Autowired
    private UserLevelService userLevelService;
    //  사용자등급 생성
    @RequestMapping(value = "/userLevel/add", method = RequestMethod.POST)
    public
    @ResponseBody
    Map<String, Object> addUserLevel(MultipartHttpServletRequest request) {
        Map<String, Object> resJsonData = new HashMap<>();
        Map<String, Object> content = ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT));
        this.userLevelService.addUserLevel(UserLevelForm.make(content));
        return this.setSuccessMessage(resJsonData);
    }
    //  사용자등급 조회
    @RequestMapping(value = "/userLevel/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> find(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
        this.userLevelService.findUser(resJsonData, UserLevelCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        return this.setSuccessMessage(resJsonData);
    }
    //  사용자등급 수정
//    @RequestMapping(value = "/userLevel/modify", produces = MediaType.APPLICATION_JSON_VALUE)
//    public
//    @ResponseBody
//    Map<String, Object> modify(MultipartHttpServletRequest request) {
//        Map<String, Object> resJsonData = new HashMap<>();
//
//        this.userService.modifyUser(UserForm.make(ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT))), request.getFile("file"));
//
//        return this.setSuccessMessage(resJsonData);
//    }
    //  사용자등급 삭제
//    @RequestMapping(value = "/userLevel/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
//    public
//    @ResponseBody
//    Map<String, Object> withDraw() {
//        Map<String, Object> resJsonData = new HashMap<>();
//
//        this.userService.withDrawUser();
//
//        return this.setSuccessMessage(resJsonData);
//    }
    //  사용자 등급 엑셀 다운로드
//    @RequestMapping(value = "/userLevel/downloadExcel", method = RequestMethod.POST)
//    public ModelAndView downloadExcel(HttpServletRequest request, Model model) {
//        return this.userService.downloadExcel(model);
//    }
    /*//  이벤트 당첨자 엑셀 다운로드
    @RequestMapping(value = "/user/downloadExcelEvent", method = RequestMethod.POST)
    public ModelAndView downloadExcelEvent(HttpServletRequest request, Model model) {
        return this.userService.downloadExcelEvent(model);
    }*/
}
src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java
@@ -26,32 +26,6 @@
    @Autowired
    private UserWorkspaceService userWorkspaceService;
    //  사용자 등급 조회
    @RequestMapping(value = "/userWorkspace/levelFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> levelFind(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
        this.userWorkspaceService.findUserWorkspace(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        //this.userWorkspaceService.levelFind(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        return this.setSuccessMessage(resJsonData);
    }
    //  부서 조회
    @RequestMapping(value = "/userWorkspace/departmentFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> departmentFind(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
        this.userWorkspaceService.findUserWorkspace(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        //this.userWorkspaceService.departmentFind(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
        return this.setSuccessMessage(resJsonData);
    }
    //  업무공간에 참여하는 사용자 조회
    @RequestMapping(value = "/userWorkspace/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java
New file
@@ -0,0 +1,45 @@
package kr.wisestone.owl.web.form;
import kr.wisestone.owl.util.ConvertUtil;
import java.util.Map;
/**
 * Created by jeong on 2017-12-30.
 */
public class DepartmentManagementForm {
    private Long id;
    private String departmentName;
    private String departmentDescription;
    public DepartmentManagementForm() {
    }
    public static DepartmentManagementForm make(Map<String, Object> params) {
        return ConvertUtil.convertMapToClass(params, DepartmentManagementForm.class);
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    public String getDepartmentDescription() {
        return departmentDescription;
    }
    public void setDepartmentDescription(String departmentDescription) {
        this.departmentDescription = departmentDescription;
    }
}
src/main/java/kr/wisestone/owl/web/form/UserForm.java
@@ -17,6 +17,8 @@
    private String profile;
    private String status;
    private String phone;
    private Long levelId;
    private String departmentId;
    private String workspaceName;
    private String socialType;
    private Long lastWorkspaceId;
@@ -91,6 +93,22 @@
        return phone;
    }
    public Long getLevelId() {
        return levelId;
    }
    public void setLevelId(Long levelId) {
        this.levelId = levelId;
    }
    public String getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(String departmentId) {
        this.departmentId = departmentId;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
New file
@@ -0,0 +1,45 @@
package kr.wisestone.owl.web.form;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.util.ConvertUtil;
import java.util.Map;
/**
 * Created by jeong on 2017-12-30.
 */
public class UserLevelForm {
    private Long id;
    private String levelName;
    private Integer permission;
    public UserLevelForm(){}
    public static UserLevelForm make(Map<String, Object> params) {
        return ConvertUtil.convertMapToClass(params, UserLevelForm.class);
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getLevelName() {
        return levelName;
    }
    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }
    public Integer getPermission() {
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
}
src/main/resources/META-INF/orm.xml
@@ -42,7 +42,9 @@
        <query>
            SELECT u
            FROM User u
            WHERE u.permission > 2047
            INNER JOIN u.userLevel ul
            INNER JOIN u.departmentManagement dm
            WHERE ul.permission > 2047
            AND u.status = '01'
        </query>
    </named-query>
src/main/resources/migration/V1_10__Alter_Table.sql
New file
@@ -0,0 +1,25 @@
ALTER TABLE `user` DROP COLUMN `permission`;
ALTER TABLE `user` ADD COLUMN  `level_id` BIGINT(11) NULL;
ALTER TABLE `user` ADD COLUMN  `department_id` BIGINT(11) NULL;
CREATE TABLE `department_management`(
    `id` BIGINT(11) AUTO_INCREMENT,
    `department_name` VARCHAR(50) NOT NULL,
    `department_description` VARCHAR(255) NOT NULL,
    `register_id` BIGINT(20) NOT NULL,
    `register_date` TIMESTAMP NULL,
    `modify_id` BIGINT(20) NOT NULL,
    `modify_date` TIMESTAMP NULL,
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `user_level`(
    `id` BIGINT(11) AUTO_INCREMENT,
    `level_name` VARCHAR(50)  NOT NULL,
    `permission` INT NULL,
    `register_id` BIGINT(20) NOT NULL COMMENT 'register_id',
    `register_date` TIMESTAMP NULL COMMENT 'register_date',
    `modify_id` BIGINT(20) NOT NULL COMMENT 'modify_id',
    `modify_date` TIMESTAMP NULL COMMENT 'modify_date',
    PRIMARY KEY (`id`) USING btree
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
src/main/resources/mybatis/query-template/userLevel-template.xml
New file
@@ -0,0 +1,30 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.wisestone.owl.mapper.UserLevelMapper">
    <select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.UserLevelCondition">
        SELECT
        ul.id as id,
        ul.level_name as levelName,
        ul.permission as permission
        FROM
        user_level ul
        WHERE 1=1
        <if test="levelName != '' and levelName != null">
            AND ul.level_name like CONCAT('%',#{levelName},'%')
        </if>
        limit #{pageSize} offset #{page};
    </select>
    <select id="count" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.UserLevelCondition">
        SELECT
        count(ul.id)
        FROM
        user_level ul
        WHERE 1=1
        <if test="levelName != '' and levelName != null">
            AND ul.level_name like CONCAT('%',#{levelName},'%')
        </if>
    </select>
</mapper>
src/main/resources/mybatis/query-template/userWorkspace-template.xml
@@ -9,7 +9,7 @@
        u.id as userId,
        u.name as userName,
        u.account as account,
        u.permission as permission,
        /*u.permission as permission,*/
        CASE WHEN uw.use_yn = 'Y' THEN 'true' ELSE 'false' END as useYn
        FROM
        user_workspace uw
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
@@ -87,7 +87,7 @@
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("manageUser.manageNoticePerm")
                        .setHWidth("width-140-p")
                         .setDType("renderer")
                        .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("Notice")
                        .setDRenderer("WORKSPACE_USE_YN"));
@@ -130,10 +130,10 @@
                        currentPage = selectedPage;
                    }
                    var conditions = {
                    var conditions = {
                        name : $scope.vm.search.levelName //등급명
                    };
                    //테이블 리스트 데이터 컨트롤러 요청
                    UserWorkspace.levelFind($resourceProvider.getContent(conditions,
                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
@@ -7,7 +7,7 @@
    app.factory("UserWorkspace", ['$http', '$log', function ($http, $log) {
        return {
            levelFind : function (conditions) {
                return $http.post("userWorkspace/levelFind", conditions).then(function (response) {
                return $http.post("userLevel/find", conditions).then(function (response) {
                    $log.debug("사용자 등급 목록 : ", response);
                    return response;
                });