src/main/java/kr/wisestone/owl/service/impl/UserWorkspaceServiceImpl.java
@@ -3,11 +3,13 @@ import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.User; import kr.wisestone.owl.domain.UserLevel; import kr.wisestone.owl.domain.UserWorkspace; import kr.wisestone.owl.domain.Workspace; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.UserWorkspaceMapper; import kr.wisestone.owl.repository.UserWorkspaceRepository; import kr.wisestone.owl.service.UserLevelService; import kr.wisestone.owl.service.UserService; import kr.wisestone.owl.service.UserWorkspaceService; import kr.wisestone.owl.service.WorkspaceService; @@ -39,6 +41,9 @@ @Autowired private UserService userService; @Autowired private UserLevelService userLevelService; @Autowired private UserWorkspaceMapper userWorkspaceMapper; @@ -104,32 +109,43 @@ public void modifyUserWorkspace(UserWorkspaceForm userWorkspaceForm) { UserWorkspace userWorkspace = this.getUserWorkspace(userWorkspaceForm.getId()); // 참여로 상태를 변경하려고 할때 if (!userWorkspace.getUseYn()) { Integer maxUserCount = userWorkspace.getWorkspace().getMaxUser(); // 최대 사용자 Integer activeUserCount = this.countByWorkspaceIdAndUseYn(userWorkspace.getWorkspace().getId(), true); // 최대 사용자 - 현재 참여 사용자가 0보다 크다면 참여 상태로 변경 if ((maxUserCount - activeUserCount) < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.WORKSPACE_MAX_USER_EXCESS_NOT_INCLUDE)); } } else { UserLevel currentUserlevel = userWorkspace.getUser().getUserLevel(); if (currentUserlevel.getId() != userWorkspaceForm.getLevelId()) { // 사용자 등급 변경시 User user = userWorkspace.getUser(); // 참여 대기 사용자가 현재 해당 업무 공간을 사용하고 있을 경우 즉시 해당 업무 공간에서 튕기게 한다. if (user.getLastWorkspaceId().equals(userWorkspace.getWorkspace().getId())){ // 업무 공간에 참여하던 사용자에게 제외 알림 및 화면 새로고침 this.simpMessagingTemplate.convertAndSendToUser(user.getAccount(), "/notification/workspace-disabled", this.messageAccessor.getMessage(MsgConstants.WORKSPACE_OUT, userWorkspace.getWorkspace().getName())); } // 참여 대기 상태로 변경하면 해당 사용자의 마지막 접근 업무 공간는 자신이 관리하는 업무 공간로 변경한다. this.userService.updateLastMyWorkspace(user); UserLevel userLevel = this.userLevelService.getUserLevel(userWorkspaceForm.getLevelId()); user.setUserLevel(userLevel); userWorkspace.setUser(user); } userWorkspace.setUseYn(!userWorkspace.getUseYn()); this.userWorkspaceRepository.saveAndFlush(userWorkspace); //todo 부서 변경시 // 참여로 상태를 변경하려고 할때 if (userWorkspace.getUseYn() != userWorkspaceForm.getUseYn()) { if (!userWorkspace.getUseYn()) { Integer maxUserCount = userWorkspace.getWorkspace().getMaxUser(); // 최대 사용자 Integer activeUserCount = this.countByWorkspaceIdAndUseYn(userWorkspace.getWorkspace().getId(), true); // 최대 사용자 - 현재 참여 사용자가 0보다 크다면 참여 상태로 변경 if ((maxUserCount - activeUserCount) < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.WORKSPACE_MAX_USER_EXCESS_NOT_INCLUDE)); } } else { User user = userWorkspace.getUser(); // 참여 대기 사용자가 현재 해당 업무 공간을 사용하고 있을 경우 즉시 해당 업무 공간에서 튕기게 한다. if (user.getLastWorkspaceId().equals(userWorkspace.getWorkspace().getId())) { // 업무 공간에 참여하던 사용자에게 제외 알림 및 화면 새로고침 this.simpMessagingTemplate.convertAndSendToUser(user.getAccount(), "/notification/workspace-disabled", this.messageAccessor.getMessage(MsgConstants.WORKSPACE_OUT, userWorkspace.getWorkspace().getName())); } // 참여 대기 상태로 변경하면 해당 사용자의 마지막 접근 업무 공간는 자신이 관리하는 업무 공간로 변경한다. this.userService.updateLastMyWorkspace(user); } userWorkspace.setUseYn(!userWorkspace.getUseYn()); } this.userWorkspaceRepository.saveAndFlush(userWorkspace); } src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
@@ -9,6 +9,8 @@ private String account; private Integer permission; private Boolean useYn; private Long levelId; private Long departmentId; public UserWorkspaceVo(){} @@ -51,4 +53,20 @@ public void setUseYn(Boolean useYn) { this.useYn = useYn; } public Long getLevelId() { return levelId; } public void setLevelId(Long levelId) { this.levelId = levelId; } public Long getDepartmentId() { return departmentId; } public void setDepartmentId(Long departmentId) { this.departmentId = departmentId; } } src/main/java/kr/wisestone/owl/web/condition/UserWorkspaceCondition.java
@@ -15,6 +15,8 @@ private String name; private String account; private List<String> statuses = Lists.newArrayList(); private List<Long> levelIds = Lists.newArrayList(); private List<Long> departmentIds = Lists.newArrayList(); private Integer page; private Integer pageSize; @@ -25,6 +27,14 @@ if (MapUtil.getStrings(conditions, "statuses") != null) { condition.setStatuses(MapUtil.getStrings(conditions, "statuses")); } if (MapUtil.getLongs(conditions, "levelIds") != null) { condition.setLevelIds(MapUtil.getLongs(conditions, "levelIds")); } if (MapUtil.getLongs(conditions, "departmentIds") != null) { condition.setDepartmentIds(MapUtil.getLongs(conditions, "departmentIds")); } return condition; @@ -77,4 +87,20 @@ public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public List<Long> getLevelIds() { return levelIds; } public void setLevelIds(List<Long> levelIds) { this.levelIds = levelIds; } public List<Long> getDepartmentIds() { return departmentIds; } public void setDepartmentIds(List<Long> departmentIds) { this.departmentIds = departmentIds; } } src/main/java/kr/wisestone/owl/web/form/UserWorkspaceForm.java
@@ -10,6 +10,8 @@ public class UserWorkspaceForm { private Long id; private Boolean useYn; private Long levelId; private Long departmentId; public UserWorkspaceForm(){} @@ -34,4 +36,20 @@ public void setUseYn(Boolean useYn) { this.useYn = useYn; } public Long getLevelId() { return levelId; } public void setLevelId(Long levelId) { this.levelId = levelId; } public Long getDepartmentId() { return departmentId; } public void setDepartmentId(Long departmentId) { this.departmentId = departmentId; } } src/main/resources/mybatis/query-template/userWorkspace-template.xml
@@ -9,7 +9,8 @@ u.id as userId, u.name as userName, u.account as account, /*u.permission as permission,*/ u.level_id as levelId, u.department_id as departmentId, CASE WHEN uw.use_yn = 'Y' THEN 'true' ELSE 'false' END as useYn FROM user_workspace uw @@ -34,6 +35,25 @@ </foreach> </when> </choose> <choose> <when test="levelIds.size != 0"> AND u.level_id IN <foreach collection="levelIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> <choose> <when test="departmentIds.size != 0"> AND u.department_id IN <foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> limit #{pageSize} offset #{page}; </select> src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -334,7 +334,7 @@ case "LEVEL_OPTION" : //makeTag += "<select class='form-control input-sm' ng-model='data.levels[0].id' ng-options='levelName.id as levelName.levelName for levelName in data.levels' ></select>"; makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change=''><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>"; makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change='event.modifyUserWorkspace(data)'><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>"; break; case "WORKSPACE_USE_YN" : src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
@@ -181,7 +181,7 @@ return statuses; })(), levels : (function () { levelIds : (function () { var levels = []; angular.forEach($scope.vm.search.levels, function (level) { @@ -190,7 +190,7 @@ return levels; })(), departments : (function () { departmentIds : (function () { var departments = []; angular.forEach($scope.vm.search.departments, function (department) { @@ -210,7 +210,7 @@ var idx = 0; angular.forEach($scope.vm.responseData.data, function (data) { data.levelId = 3; /*$scope.vm.levels[idx].id;*/ // data.levelId = $scope.vm.levels[idx].fieldKey; data.levels = []; data.levels = $scope.vm.levels.slice(); idx++; @@ -231,7 +231,6 @@ $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { $scope.vm.search.levels = result.data.data; angular.forEach(result.data.data, function (level) { $scope.vm.levels.push({ fieldKey : level.id, src/main/webapp/views/workspace/workspaceUserConfig.html
@@ -97,7 +97,7 @@ <label>등급</label> <ng-dropdown-multiselect class="multiSelect cursor" data-input-name="levels" selected-model="vm.search.levels.levelName" selected-model="vm.search.levels" options="vm.levels"></ng-dropdown-multiselect> </div> </div>