OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-04 69b42e5bab73a5bfc3e0d4ddc660877b0bc08c05
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
@@ -1,32 +1,40 @@
package kr.wisestone.owl.service.impl;
import com.google.common.collect.Lists;
import kr.wisestone.owl.common.ExcelConditionCheck;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.MngPermission;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.domain.UserLevel;
import kr.wisestone.owl.domain.*;
import kr.wisestone.owl.exception.OwlRuntimeException;
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.service.UserService;
import kr.wisestone.owl.service.WorkspaceService;
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.vo.*;
import kr.wisestone.owl.web.condition.IssueStatusCondition;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.condition.WorkflowCondition;
import kr.wisestone.owl.web.form.ManageUserForm;
import kr.wisestone.owl.web.form.ProjectForm;
import kr.wisestone.owl.web.form.UserLevelForm;
import kr.wisestone.owl.web.view.ExcelView;
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 org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -42,6 +50,18 @@
    @Autowired
    private UserService userService;
    @Autowired
    private UserLevelService userLevelService;
    @Autowired
    private WorkspaceService workspaceService;
    @Autowired
    private ExcelView excelView;
    @Autowired
    private ExcelConditionCheck excelConditionCheck;
    @Override
    protected JpaRepository<UserLevel, Long> getRepository() {
        return this.userLevelRepository;
@@ -51,26 +71,40 @@
    @Override
    public UserLevel addUserLevel(UserLevelForm userLevelForm) {
        userLevelForm.makePermission();
        userLevelForm.setDefaultYn(UserLevel.YN_FIELD_NO);
        userLevelForm.setBasicUser(UserLevel.YN_FIELD_NO);
        UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
        userLevelRepository.saveAndFlush(userLevel);
        return userLevel;
    }
    // 최고관리자 등급 추가
    @Override
    public UserLevel addSuperUserLevel() {
        UserLevel userLevel = new UserLevel();
        userLevel.setLevelName("최고관리자");
        userLevel.setPermission(MngPermission.makeAllPermission());
        return  addUserLevel("최고관리자", MngPermission.makeAllPermission(),UserLevel.YN_FIELD_YES,UserLevel.YN_FIELD_NO);
    }
        userLevel = userLevelRepository.saveAndFlush(userLevel);
        return userLevel;
    public UserLevel addNormalUserLevel() {
        return  addUserLevel("일반회원", 0,UserLevel.YN_FIELD_YES , UserLevel.YN_FIELD_YES);
    }
    public UserLevel addNormalAdminUserLevel() {
        return  addUserLevel("일반관리자", MngPermission.makeSubAllPermission(),UserLevel.YN_FIELD_NO, UserLevel.YN_FIELD_NO);
    }
    // 사용자 등급 추가
    public UserLevel addUserLevel(String name, Integer permission, String defaultYn, String basicUser) {
        UserLevel userLevel = new UserLevel();
        userLevel.setLevelName(name);
        userLevel.setPermission(permission);
        userLevel.setDefaultYn(defaultYn);
        userLevel.setBasicUser(basicUser);
        return userLevelRepository.saveAndFlush(userLevel);
    }
    // 사용자 등급 목록을 가져온다.
    @Override
    public List<UserLevelVo> findUser(Map<String, Object> resJsonData,
                                           UserLevelCondition condition, Pageable pageable) {
                                      UserLevelCondition condition, Pageable pageable) {
        condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
        condition.setPageSize(pageable.getPageSize());
@@ -80,19 +114,72 @@
        return this.convertUserLevelVoToMap(results, totalUsersCount, pageable, resJsonData);
    }
    // 사용자 등급 ID로 조회한다.
    @Override
    public UserLevel getUserLevel(Long id) {
        if (id == null) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_EXIST));
        }
        UserLevel userLevel = this.findOne(id);
        if (userLevel == null) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_EXIST));
        }
        return userLevel;
    }
    @Override
    public UserLevel getBasicUserLevel() {
        List<UserLevel> userLevels = userLevelRepository.findByBasicUser("Y");
        if (userLevels.size() > 0) {
            return  userLevels.get(0);
        }
        return null;
    }
    // 사용자 등급 상세 조회한다.
    @Override
    public void detailUserLevel(Map<String, Object> resJsonData, UserLevelCondition userLevelCondition) {
        UserLevelVo userLevelVo = new UserLevelVo();
        if (userLevelCondition.getId() != null) {
            UserLevel userLevel = this.getUserLevel(userLevelCondition.getId());
            userLevelVo = ConvertUtil.copyProperties(userLevel, UserLevelVo.class);
        }
        resJsonData.put(Constants.RES_KEY_CONTENTS, userLevelVo);
    }
    //  사용자 등급 정보를 수정한다.
    @Override
    public void modifyUserLevel(UserLevelForm userLevelForm) {
        userLevelForm.makePermission();
        UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
        userLevelRepository.saveAndFlush(userLevel);
        if (userLevelForm.getId() == 1){        // 사용자 등급이 최고관리자이어야만 정보를 수정할수 있다.
            userLevelForm.makePermission();
            UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
            userLevelRepository.saveAndFlush(userLevel);
        } else {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_PERMISSION_DENIED));
        }
    }
    // 사용자 등급을 삭제한다.
    @Override
    public void removeUserLevel(UserLevelForm userLevelForm) {
        if (userLevelForm.getRemoveIds().size() < 1) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.PROJECT_REMOVE_NOT_SELECT));
        }
        // 기본 사용자 등급 삭제 체크
        if (userLevelForm.getDefaultYn() == "Y") {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_DELETE));
        }
        for (Long id : userLevelForm.getRemoveIds()) {
@@ -103,9 +190,9 @@
                        this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_ALREADY_IN_USE));
            }
        }
        this.userLevelRepository.flush();
    }
    //  검색 결과를 UserLevelVo 로 변환한다.
    private List<UserLevelVo> convertUserLevelVoToMap(List<Map<String, Object>> results, Long totalUsersCount, Pageable pageable, Map<String, Object> resJsonData) {
@@ -126,4 +213,47 @@
        return userLevelVos;
    }
    //  사용자등급 목록을 엑셀로 다운로드 한다.
    @Override
    public ModelAndView downloadExcel(HttpServletRequest request, Model model) {
        ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model);
        if (modelAndView != null) {
            return modelAndView;
        }
        Map<String, Object> conditions = new HashMap<>();
        //  엑셀 다운로드에 필요한 검색 조건 정보를 추출하고 검색 조건 추출에 오류가 발생하면 경고를 표시해준다.
        modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model);
        if (modelAndView != null) {
            return modelAndView;
        }
        UserLevelCondition userLevelCondition = UserLevelCondition.make(conditions);
        List<Map<String, Object>> results = this.userLevelMapper.find(userLevelCondition);
        List<UserLevelVo> userLevelVos = ConvertUtil.convertListToListClass(results, UserLevelVo.class);
        for (UserLevelVo vo : userLevelVos) {
            vo.toPermissionValues();
        }
        // code_ko_KR 에 code명 설정
        ExportExcelVo excelInfo = new ExportExcelVo();
        excelInfo.setFileName(this.messageAccessor.message("사용자 목록"));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("levelName", this.messageAccessor.message("managementWorkspace.levelName"), 6, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permWorkSpaceSetting", this.messageAccessor.message("manageUser.manageWorkspacePerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permProjectSetting", this.messageAccessor.message("manageUser.manageProjectPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permIssueSetting", this.messageAccessor.message("manageUser.manageIssueSystemPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permApi", this.messageAccessor.message("manageUser.manageUserPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permNotice", this.messageAccessor.message("manageUser.manageNoticePerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permFAQ", this.messageAccessor.message("manageUser.manageFAQPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permQnA", this.messageAccessor.message("manageUser.manageQnAPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permGuide", this.messageAccessor.message("manageUser.manageGuidePerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.setDatas(userLevelVos);
        model.addAttribute(Constants.EXCEL, excelInfo);
        return new ModelAndView(this.excelView);
    }
}