OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
@@ -1,37 +1,50 @@
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.jsoup.Jsoup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
@Service
public class UserLevelServiceImpl extends AbstractServiceImpl<UserLevel, Long, JpaRepository<UserLevel, Long>> implements UserLevelService {
    private static final Logger log = LoggerFactory.getLogger(IssueServiceImpl.class);
    @Autowired
    private UserLevelRepository userLevelRepository;
@@ -42,6 +55,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 +76,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 +119,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));
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_REMOVE_NOT_SELECT));
        }
        // 기본 사용자 등급 삭제 체크
        if (userLevelForm.getDefaultYn() == "Y") {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_DELETE));
        }
        for (Long id : userLevelForm.getRemoveIds()) {
@@ -100,12 +192,12 @@
                this.userLevelRepository.deleteById(id);
            } else {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_ALREADY));
                        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 +218,106 @@
        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("permPartnerSetting", this.messageAccessor.message("manageUser.managePartnerPerm"), 3, 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.manageIssuePerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permIssueSystemSetting", this.messageAccessor.message("manageUser.manageIssueSystemPerm"), 3, ExportExcelAttrVo.ALIGN_CENTER));
        excelInfo.addAttrInfos(new ExportExcelAttrVo("permApi", this.messageAccessor.message("manageUser.manageUserApi"), 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));
        //  userLevelVos 데이터를 엑셀에서 표시할 수 있는 데이터로 변경한다.
        List<Map<String, Object>> convertExcelViewToUserLevelMaps = this.convertExcelViewToUserLevelVos(userLevelVos);
        excelInfo.setDatas(convertExcelViewToUserLevelMaps);
        model.addAttribute(Constants.EXCEL, excelInfo);
        return new ModelAndView(this.excelView);
    }
    //  userLevelVos 데이터를 엑셀에서 표시할 수 있는 데이터로 변경한다.
    private List<Map<String, Object>> convertExcelViewToUserLevelVos(List<UserLevelVo> userLevelVos) {
        List<Map<String, Object>> results = Lists.newArrayList();
        for (UserLevelVo userLevelVo : userLevelVos){
            try {
                Map<String, Object> result = new HashMap<>();
                result.put("levelName", userLevelVo.getLevelName());
                result.put("permPartnerSetting", userLevelVo.getPermPartnerSetting());
                result.put("permWorkSpaceSetting", userLevelVo.getPermWorkSpaceSetting());
                result.put("permProjectSetting", userLevelVo.getPermProjectSetting());
                result.put("permIssueSetting", userLevelVo.getPermIssueSetting());
                result.put("permIssueSystemSetting", userLevelVo.getPermIssueSystemSetting());
                result.put("permApi", userLevelVo.getPermApi());
                result.put("permNotice", userLevelVo.getPermNotice());
                result.put("permFAQ", userLevelVo.getPermFAQ());
                result.put("permQnA", userLevelVo.getPermQnA());
                result.put("permGuide", userLevelVo.getPermGuide());
                results.add(result);
            } catch (Exception e) {
                log.error("엑셀 다운로드 오류 발생");
            }
        }
        return results;
    }
    // 사용자 등급 상태를 변경한다.
    @Override
    public void modifyLevelPermission(UserLevelForm userLevelForm) {
        int newPermission = MngPermission.USER_PERMISSION_MNG_NONE;
        newPermission |= MngPermission.makePermission(userLevelForm.getPermPartnerSetting(), MngPermission.USER_PERMISSION_MNG_PARTNER);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermWorkSpaceSetting(), MngPermission.USER_PERMISSION_MNG_WORKSPACE);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermProjectSetting(), MngPermission.USER_PERMISSION_MNG_PROJECT);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermIssueSetting(), MngPermission.USER_PERMISSION_MNG_ISSUE);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermIssueSystemSetting(), MngPermission.USER_PERMISSION_MNG_ISSUE_SETTING);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermApi(), MngPermission.USER_PERMISSION_MNG_API);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermNotice(), MngPermission.USER_PERMISSION_MNG_NOTICE);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermFAQ(), MngPermission.USER_PERMISSION_MNG_FAQ);
        newPermission |= MngPermission.makePermission(userLevelForm.getPermQnA(), MngPermission.USER_PERMISSION_MNG_QNA);
        /*newPermission |= MngPermission.makePermission(userLevelForm.getPermEvent(), MngPermission.USER_PERMISSION_MNG_EVENT);*/
        newPermission |= MngPermission.makePermission(userLevelForm.getPermGuide(), MngPermission.USER_PERMISSION_MNG_GUIDE);
        UserLevel userLevel = userLevelService.getUserLevel(userLevelForm.getId());
        /*        user.setPermission(newPermission);*/
        userLevel.setPermission(newPermission);
        this.userLevelRepository.saveAndFlush(userLevel);
    }
    @Override
    public void modifyLevelName(UserLevelForm userLevelForm) {
        UserLevel userLevel = userLevelService.getUserLevel(userLevelForm.getId());
        userLevel.setLevelName(userLevelForm.getLevelName());
        this.userLevelRepository.saveAndFlush(userLevel);
    }
}