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.*; 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.*; 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; @Service public class UserLevelServiceImpl extends AbstractServiceImpl> implements UserLevelService { @Autowired private UserLevelRepository userLevelRepository; @Autowired private UserLevelMapper userLevelMapper; @Autowired private UserService userService; @Autowired private UserLevelService userLevelService; @Autowired private WorkspaceService workspaceService; @Autowired private ExcelView excelView; @Autowired private ExcelConditionCheck excelConditionCheck; @Override protected JpaRepository getRepository() { return this.userLevelRepository; } // 사용자 가입 후 UserLevel 값 저장 @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() { return addUserLevel("최고관리자", MngPermission.makeAllPermission(),UserLevel.YN_FIELD_YES,UserLevel.YN_FIELD_NO); } 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 findUser(Map resJsonData, UserLevelCondition condition, Pageable pageable) { condition.setPage(pageable.getPageNumber() * pageable.getPageSize()); condition.setPageSize(pageable.getPageSize()); List> results = this.userLevelMapper.find(condition); Long totalUsersCount = this.userLevelMapper.count(condition); 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 userLevels = userLevelRepository.findByBasicUser("Y"); if (userLevels.size() > 0) { return userLevels.get(0); } return null; } // 사용자 등급 상세 조회한다. @Override public void detailUserLevel(Map 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) { 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.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()) { if (!this.userService.useUserLevel(id)) { this.userLevelRepository.deleteById(id); } else { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_ALREADY_IN_USE)); } } this.userLevelRepository.flush(); } // 검색 결과를 UserLevelVo 로 변환한다. private List convertUserLevelVoToMap(List> results, Long totalUsersCount, Pageable pageable, Map resJsonData) { List userLevelVos = Lists.newArrayList(); for (Map result : results) { UserLevelVo userLevelVo = ConvertUtil.convertMapToClass(result, UserLevelVo.class); userLevelVo.toPermissionValues(); 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; } // 사용자등급 목록을 엑셀로 다운로드 한다. @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); if (modelAndView != null) { return modelAndView; } Map conditions = new HashMap<>(); // 엑셀 다운로드에 필요한 검색 조건 정보를 추출하고 검색 조건 추출에 오류가 발생하면 경고를 표시해준다. modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model); if (modelAndView != null) { return modelAndView; } UserLevelCondition userLevelCondition = UserLevelCondition.make(conditions); List> results = this.userLevelMapper.find(userLevelCondition); List 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.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)); excelInfo.setDatas(userLevelVos); model.addAttribute(Constants.EXCEL, excelInfo); return new ModelAndView(this.excelView); } // 사용자 등급 상태를 변경한다. @Override public void modifyLevelPermission(UserLevelForm userLevelForm) { int newPermission = MngPermission.USER_PERMISSION_MNG_NONE; 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_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); } }