From 4815194d2d489c73a7fb06309585eb01caf6219d Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Wed, 9 Feb 2022 09:55:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=91=98=E9=80=89?= =?UTF-8?q?=E6=8B=A9=EF=BC=9A=E7=BB=9F=E4=B8=80=E6=9B=B4=E6=96=B0=20->=20?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E6=9B=B4=E6=96=B0=E6=96=B0=E5=A2=9E=E3=80=81?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/DepartmentUserController.java | 6 +- .../service/IDepartmentUserService.java | 6 +- .../service/impl/DepartmentServiceImpl.java | 2 +- .../impl/DepartmentUserServiceImpl.java | 32 ++-- .../templates/department/user/list.html | 11 +- .../department/user/select-user.html | 146 +++++++++++++----- .../controller/api/GroupUserController.java | 6 +- .../group/service/IGroupUserService.java | 7 +- .../service/impl/GroupUserServiceImpl.java | 10 +- .../resources/templates/group/user/list.html | 11 +- .../api/PositionUserController.java | 6 +- .../service/IPositionUserService.java | 7 +- .../service/impl/PositionUserServiceImpl.java | 10 +- .../templates/position/user/list.html | 12 +- .../controller/api/RoleUserController.java | 30 +++- .../resources/RoleUserResourceController.java | 21 +++ .../wgink/service/role/dao/IRoleUserDao.java | 10 ++ .../role/service/IRoleUserService.java | 11 +- .../service/impl/RoleUserServiceImpl.java | 28 +++- .../mybatis/mapper/role-user-mapper.xml | 23 +++ .../resources/templates/role/user/list.html | 12 +- 21 files changed, 291 insertions(+), 116 deletions(-) diff --git a/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentUserController.java b/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentUserController.java index 90e3eb33..dcc760a2 100644 --- a/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentUserController.java +++ b/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentUserController.java @@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.department.DepartmentUserDTO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; -import ink.wgink.pojo.vos.IdsVO; +import ink.wgink.pojo.vos.SaveAndDeleteIdsVO; import ink.wgink.service.department.pojo.vos.DepartmentUserSortVO; import ink.wgink.service.department.service.IDepartmentUserService; import io.swagger.annotations.*; @@ -43,8 +43,8 @@ public class DepartmentUserController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("update/{departmentId}") public synchronized SuccessResult update(@PathVariable("departmentId") String departmentId, - @RequestBody IdsVO idsVO) { - departmentUserService.update(departmentId, idsVO.getIds()); + @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) { + departmentUserService.update(departmentId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds()); return new SuccessResult(); } diff --git a/service-department/src/main/java/ink/wgink/service/department/service/IDepartmentUserService.java b/service-department/src/main/java/ink/wgink/service/department/service/IDepartmentUserService.java index 68fc1c1f..5bff555d 100644 --- a/service-department/src/main/java/ink/wgink/service/department/service/IDepartmentUserService.java +++ b/service-department/src/main/java/ink/wgink/service/department/service/IDepartmentUserService.java @@ -61,9 +61,10 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService { * 更新用户 * * @param departmentId 部门ID - * @param userIds 用户ID + * @param saveIds 新增ID + * @param deleteIds 删除ID */ - void update(String departmentId, List userIds); + void update(String departmentId, List saveIds, List deleteIds); /** * 更新用户排序 @@ -74,7 +75,6 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService { void updateSort(String departmentId, DepartmentUserSortVO departmentUserSortVO); /** - * * @param departmentId * @param userIds * @return diff --git a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java index 3af8c2f0..1b631329 100644 --- a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java +++ b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java @@ -175,7 +175,7 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart String newDepartmentId = saveReturnId(splitDepartmentInfoVO); departmentAdjustmentService.save(departmentId, departmentDTO.getDepartmentName(), newDepartmentId, splitDepartmentInfoVO.getDepartmentName(), DepartmentAdjustmentTypeEnum.SPLIT); if (!StringUtils.isBlank(userIds)) { - departmentUserService.update(newDepartmentId, Arrays.asList(userIds.split("_"))); + departmentUserService.update(newDepartmentId, Arrays.asList(userIds.split("_")), new ArrayList<>()); } } } diff --git a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentUserServiceImpl.java b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentUserServiceImpl.java index f595d2ab..6d1ad7b8 100644 --- a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentUserServiceImpl.java +++ b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentUserServiceImpl.java @@ -97,37 +97,25 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe } @Override - public void update(String departmentId, List userIds) { - if (userIds.isEmpty()) { - return; - } + public void update(String departmentId, List saveUserIds, List deleteUserIds) { DepartmentPO departmentPO = departmentService.getPO(departmentId); if (departmentPO == null) { throw new SearchException("部门不存在"); } - Map params = getHashMap(2); - params.put("departmentId", departmentId); - List existUserIds = departmentUserDao.listUserId(params); - List newUserIds = new ArrayList<>(); - for (String userId : userIds) { - boolean isNewUser = true; - for (String existUserId : existUserIds) { - if (StringUtils.equals(userId, existUserId)) { - isNewUser = false; - break; - } - } - if (isNewUser) { + if (deleteUserIds != null && !deleteUserIds.isEmpty()) { + delete(departmentId, departmentPO.getDepartmentName(), deleteUserIds); + } + if (saveUserIds != null && !saveUserIds.isEmpty()) { + Map params = getHashMap(4); + params.put("departmentId", departmentId); + for (String userId : saveUserIds) { params.put("userId", userId); departmentUserDao.save(params); - newUserIds.add(userId); } } - List removeUserIds = new ArrayList<>(); - - departmentAdjustmentService.save(newUserIds, departmentId, departmentPO.getDepartmentName(), USER_DEPARTMENT_TYPE_JOIN); + departmentAdjustmentService.save(saveUserIds, departmentId, departmentPO.getDepartmentName(), USER_DEPARTMENT_TYPE_JOIN); if (departmentUserSaveAfterHandler != null) { - departmentUserSaveAfterHandler.handle(departmentId, userIds); + departmentUserSaveAfterHandler.handle(departmentId, saveUserIds); } } diff --git a/service-department/src/main/resources/templates/department/user/list.html b/service-department/src/main/resources/templates/department/user/list.html index 86dd8987..5e4fafcd 100644 --- a/service-department/src/main/resources/templates/department/user/list.html +++ b/service-department/src/main/resources/templates/department/user/list.html @@ -213,10 +213,12 @@ height: '500px', closeBtn: 0, onClose: function() { - var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; - if(selectedUsers != null && selectedUsers.length > 0) { + top.dialog.dialogData.selectedDepartmentUsers = null; + var insertUsers = top.dialog.dialogData.saveDepartmentUsers; + var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers; + if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) { var ids = []; - for (var i = 0, item; item = selectedUsers[i++];) { + for (var i = 0, item; item = insertUsers[i++];) { ids.push(item.userId); } top.dialog.msg(top.dataMessage.update, { @@ -226,7 +228,8 @@ top.dialog.close(index); var loadLayerIndex; top.restAjax.put(top.restAjax.path('api/department/user/update/{departmentId}', [departmentId]), { - ids: ids + saveIds: ids, + deleteIds: deleteUsers }, null, function (code, data) { top.dialog.msg(top.dataMessage.updated); initSelectUserIds(); diff --git a/service-department/src/main/resources/templates/department/user/select-user.html b/service-department/src/main/resources/templates/department/user/select-user.html index 9913cac7..0c823e06 100644 --- a/service-department/src/main/resources/templates/department/user/select-user.html +++ b/service-department/src/main/resources/templates/department/user/select-user.html @@ -109,11 +109,17 @@ var selectedUserIds = top.dialog.dialogData.selectedUserIds; var selectDepartmentUserOldArray = []; var selectDepartmentUserArray = []; + var selectDepartmentUserObject = {}; + var saveDepartmentUserObject = {}; + var deleteDepartmentUserObject = {}; var selectRoleId = 0; - var selectedParentId = 0; + var selectedParentId = -1; var searchTimeout; var hasRoleService = [[${hasRoleService}]]; + var LAZY_GET_USER_COUNT = 500; top.dialog.dialogData.selectedDepartmentUsers = []; + top.dialog.dialogData.saveDepartmentUsers = []; + top.dialog.dialogData.deleteDepartmentUsers = []; function closeBox() { top.dialog.closeBox(); @@ -293,20 +299,24 @@ } // 初始化人员列表 function initUsers(parentId) { + if(selectedParentId == parentId) { + return; + } $('#userWrapper').empty(); $('.layui-flow-more').remove(); selectedParentId = parentId; initUserFlowLoad(); } - // 初始化选择的人员 - function initSelectedUsers(callback) { - if(!selectedUserIds) { - callback(); - return; - } + // 分页懒加载,数据量大(500为单位) + function lazyPageInitSelectedUsers(allSelectedUserIdsArray, page, totalPage, callback) { var loadLayerIndex; + var startIndex = (page - 1) * LAZY_GET_USER_COUNT; + var endIndex = page * LAZY_GET_USER_COUNT; + + var searchUserIds = allSelectedUserIdsArray.slice(startIndex, endIndex); + var hasMore = page < totalPage; top.restAjax.post(top.restAjax.path('api/user/listbyids', []), { - ids: selectedUserIds.split('\_') + ids: searchUserIds }, null, function(code, data) { for(var i = 0, item; item = data[i++]; ) { selectUser(item.userId, item.userName, item.userUsername); @@ -316,15 +326,25 @@ username: item.userUsername }); } + if(hasMore) { + setTimeout(function() { + lazyPageInitSelectedUsers(allSelectedUserIdsArray, page + 1, totalPage, callback); + }, 100); + } callback(); }, function(code, data) { top.dialog.msg(data.msg); - }, function() { - loadLayerIndex = top.dialog.msg(top.dataMessage.loading, {icon: 16, time: 0, shade: 0.3}); - }, function() { - top.dialog.close(loadLayerIndex); }); } + // 初始化选择的人员 + function initSelectedUsers(callback) { + if(!selectedUserIds) { + callback(); + return; + } + var selectedUserIdsArray = selectedUserIds.split('\_'); + lazyPageInitSelectedUsers(selectedUserIdsArray, 1, Math.ceil(selectedUserIdsArray.length / LAZY_GET_USER_COUNT), callback); + } initFrame(); if(hasRoleService) { initRoleTree(); @@ -352,37 +372,62 @@ // 人员是否已经选择 function isUserSelected(userId) { var isSelected = false; - for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { - if(item.userId == userId) { - isSelected = true; - break; - } + var obj = selectDepartmentUserObject[userId]; + if(obj) { + isSelected = true; } + + // for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { + // if(item.userId == userId) { + // isSelected = true; + // break; + // } + // } return isSelected; } // 删除已经选择的人员 function removeSelectedUser(userId) { - for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { - if(item.userId == userId) { - selectDepartmentUserArray.splice(i, 1); - var selectedUserDom = $('#selected_user_'+ userId); - selectedUserDom.focus(); - selectedUserDom.remove(); - $('#user_'+ userId).removeClass('user-selected'); - break; - } - } + delete selectDepartmentUserObject[userId]; + var selectedUserDom = $('#selected_user_'+ userId); + selectedUserDom.focus(); + selectedUserDom.remove(); + $('#user_'+ userId).removeClass('user-selected'); + + deleteDepartmentUserObject[userId] = userId; + + // for(var i = 0, item; item = selectDepartmentUserArray[i]; i++) { + // if(item.userId == userId) { + // selectDepartmentUserArray.splice(i, 1); + // var selectedUserDom = $('#selected_user_'+ userId); + // selectedUserDom.focus(); + // selectedUserDom.remove(); + // $('#user_'+ userId).removeClass('user-selected'); + // break; + // } + // } } // 选择人员 - function selectUser(userId, userName, username, isOnlySelect) { + function selectUser(userId, userName, username) { + $('#user_'+ userId).addClass('user-selected'); + selectDepartmentUserObject[userId] = { + userId: userId, + userName: userName, + username: username + } + + delete deleteDepartmentUserObject[userId]; + + // selectDepartmentUserArray.push({ + // userId: userId, + // userName: userName, + // username: username + // }); + $('#selectUsers').append(''+ userName +' '); + } + // 点击用户 + function clickUser(userId, userName, username, isOnlySelect) { if(!isUserSelected(userId)) { - $('#user_'+ userId).addClass('user-selected'); - selectDepartmentUserArray.push({ - userId: userId, - userName: userName, - username: username - }); - $('#selectUsers').append(''+ userName +' '); + selectUser(userId, userName, username); $('#selected_user_'+ userId).focus(); } else { if(!isOnlySelect) { @@ -392,7 +437,7 @@ } $(document.body).on('click', '*[lay-click-user]', null, function() { var data = this.dataset; - selectUser(data.userid, data.username, data.userUsername); + clickUser(data.userid, data.username, data.userUsername); }); $(document.body).on('click', '*[lay-click-removeuser]', null, function() { var data = this.dataset; @@ -401,7 +446,7 @@ $(document.body).on('click', '*[lay-click-select-all-user]', null, function() { $('#userWrapper').children().each(function() { var data = this.dataset; - selectUser(data.userid, data.username, data.userUsername, true); + clickUser(data.userid, data.username, data.userUsername, true); }); }); $(document.body).on('click', '*[lay-click-clear-all-user]', null, function() { @@ -417,7 +462,34 @@ closeBox(); }); $('.confirm').on('click', function() { + for(var key in selectDepartmentUserObject) { + selectDepartmentUserArray.push(selectDepartmentUserObject[key]); + } top.dialog.dialogData.selectedDepartmentUsers = selectDepartmentUserArray; + + // 删除的用户 + var deleteDepartmentUsersArray = []; + for(var key in deleteDepartmentUserObject) { + deleteDepartmentUsersArray.push(key); + } + top.dialog.dialogData.deleteDepartmentUsers = deleteDepartmentUsersArray; + + // 新增的用户 + var saveDepartmentUserArray = []; + for(var key in selectDepartmentUserObject) { + var exist = false; + for(var i = 0, item; item = selectDepartmentUserOldArray[i++];) { + if(key == item.userId) { + exist = true; + break; + } + } + if(!exist) { + saveDepartmentUserArray.push(selectDepartmentUserObject[key]); + } + } + top.dialog.dialogData.saveDepartmentUsers = saveDepartmentUserArray; + top.dialog.dialogData.selectedUserIds = null; closeBox(); }); diff --git a/service-group/src/main/java/ink/wgink/service/group/controller/api/GroupUserController.java b/service-group/src/main/java/ink/wgink/service/group/controller/api/GroupUserController.java index 81cf8e4d..89c6a05c 100644 --- a/service-group/src/main/java/ink/wgink/service/group/controller/api/GroupUserController.java +++ b/service-group/src/main/java/ink/wgink/service/group/controller/api/GroupUserController.java @@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.group.GroupUserDTO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; -import ink.wgink.pojo.vos.IdsVO; +import ink.wgink.pojo.vos.SaveAndDeleteIdsVO; import ink.wgink.service.group.service.IGroupUserService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; @@ -42,8 +42,8 @@ public class GroupUserController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("update/{groupId}") public synchronized SuccessResult update(@PathVariable("groupId") String groupId, - @RequestBody IdsVO idsVO) { - groupUserService.update(groupId, idsVO.getIds()); + @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) { + groupUserService.update(groupId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds()); return new SuccessResult(); } diff --git a/service-group/src/main/java/ink/wgink/service/group/service/IGroupUserService.java b/service-group/src/main/java/ink/wgink/service/group/service/IGroupUserService.java index 272b82ed..575af4a8 100644 --- a/service-group/src/main/java/ink/wgink/service/group/service/IGroupUserService.java +++ b/service-group/src/main/java/ink/wgink/service/group/service/IGroupUserService.java @@ -19,10 +19,11 @@ public interface IGroupUserService extends IGroupUserBaseService { /** * 更新用户组人员列表 * - * @param groupId 用户组ID - * @param userIds 用户ID列表 + * @param groupId 用户组ID + * @param saveUserIds 保存用户ID列表 + * @param deleteUserIds 删除用户ID列表 */ - void update(String groupId, List userIds); + void update(String groupId, List saveUserIds, List deleteUserIds); /** * 用户组人员删除 diff --git a/service-group/src/main/java/ink/wgink/service/group/service/impl/GroupUserServiceImpl.java b/service-group/src/main/java/ink/wgink/service/group/service/impl/GroupUserServiceImpl.java index d2c47254..c98d9ce2 100644 --- a/service-group/src/main/java/ink/wgink/service/group/service/impl/GroupUserServiceImpl.java +++ b/service-group/src/main/java/ink/wgink/service/group/service/impl/GroupUserServiceImpl.java @@ -42,12 +42,14 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs private IGroupService groupService; @Override - public void update(String groupId, List userIds) { - delete(groupId, userIds); - if (!userIds.isEmpty()) { + public void update(String groupId, List saveUserIds, List deleteUserIds) { + if (deleteUserIds != null && !deleteUserIds.isEmpty()) { + delete(groupId, deleteUserIds); + } + if (saveUserIds != null && !saveUserIds.isEmpty()) { Map params = getHashMap(4); params.put("groupId", groupId); - for (String userId : userIds) { + for (String userId : saveUserIds) { params.put("userId", userId); groupUserDao.save(params); } diff --git a/service-group/src/main/resources/templates/group/user/list.html b/service-group/src/main/resources/templates/group/user/list.html index 938a6714..2a30cd2a 100644 --- a/service-group/src/main/resources/templates/group/user/list.html +++ b/service-group/src/main/resources/templates/group/user/list.html @@ -212,10 +212,12 @@ height: '500px', closeBtn: 0, onClose: function() { - var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; - if(selectedUsers != null && selectedUsers.length > 0) { + top.dialog.dialogData.selectedDepartmentUsers = null; + var insertUsers = top.dialog.dialogData.saveDepartmentUsers; + var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers; + if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) { var ids = []; - for (var i = 0, item; item = selectedUsers[i++];) { + for (var i = 0, item; item = insertUsers[i++];) { ids.push(item.userId); } top.dialog.msg(top.dataMessage.update, { @@ -225,7 +227,8 @@ top.dialog.close(index); var loadLayerIndex; top.restAjax.put(top.restAjax.path('api/group/user/update/{groupId}', [groupId]), { - ids: ids + saveIds: ids, + deleteIds: deleteUsers }, null, function (code, data) { top.dialog.msg(top.dataMessage.updated); initSelectUserIds(); diff --git a/service-position/src/main/java/ink/wgink/service/position/controller/api/PositionUserController.java b/service-position/src/main/java/ink/wgink/service/position/controller/api/PositionUserController.java index e63610eb..4e986327 100644 --- a/service-position/src/main/java/ink/wgink/service/position/controller/api/PositionUserController.java +++ b/service-position/src/main/java/ink/wgink/service/position/controller/api/PositionUserController.java @@ -7,7 +7,7 @@ import ink.wgink.pojo.dtos.position.PositionUserDTO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; -import ink.wgink.pojo.vos.IdsVO; +import ink.wgink.pojo.vos.SaveAndDeleteIdsVO; import ink.wgink.service.position.service.IPositionUserService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; @@ -42,8 +42,8 @@ public class PositionUserController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("update/{positionId}") public synchronized SuccessResult update(@PathVariable("positionId") String positionId, - @RequestBody IdsVO idsVO) { - positionUserService.update(positionId, idsVO.getIds()); + @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) { + positionUserService.update(positionId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds()); return new SuccessResult(); } diff --git a/service-position/src/main/java/ink/wgink/service/position/service/IPositionUserService.java b/service-position/src/main/java/ink/wgink/service/position/service/IPositionUserService.java index bfae2b91..0c01ac44 100644 --- a/service-position/src/main/java/ink/wgink/service/position/service/IPositionUserService.java +++ b/service-position/src/main/java/ink/wgink/service/position/service/IPositionUserService.java @@ -19,10 +19,11 @@ public interface IPositionUserService extends IPositionUserBaseService { /** * 更新职位人员列表 * - * @param positionId 职位ID - * @param userIds 用户ID列表 + * @param positionId 职位ID + * @param saveUserIds 新增用户ID列表 + * @param deleteUserIds 删除用户ID列表 */ - void update(String positionId, List userIds); + void update(String positionId, List saveUserIds, List deleteUserIds); /** * 职位人员删除 diff --git a/service-position/src/main/java/ink/wgink/service/position/service/impl/PositionUserServiceImpl.java b/service-position/src/main/java/ink/wgink/service/position/service/impl/PositionUserServiceImpl.java index 83772d26..0b30e02f 100644 --- a/service-position/src/main/java/ink/wgink/service/position/service/impl/PositionUserServiceImpl.java +++ b/service-position/src/main/java/ink/wgink/service/position/service/impl/PositionUserServiceImpl.java @@ -42,12 +42,14 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi private IPositionService positionService; @Override - public void update(String positionId, List userIds) { - delete(positionId, userIds); - if (!userIds.isEmpty()) { + public void update(String positionId, List saveUserIds, List deleteUserIds) { + if (deleteUserIds != null && !deleteUserIds.isEmpty()) { + delete(positionId, deleteUserIds); + } + if (saveUserIds != null && !saveUserIds.isEmpty()) { Map params = getHashMap(4); params.put("positionId", positionId); - for (String userId : userIds) { + for (String userId : saveUserIds) { params.put("userId", userId); positionUserDao.save(params); } diff --git a/service-position/src/main/resources/templates/position/user/list.html b/service-position/src/main/resources/templates/position/user/list.html index 42f307b6..3bfab780 100644 --- a/service-position/src/main/resources/templates/position/user/list.html +++ b/service-position/src/main/resources/templates/position/user/list.html @@ -212,10 +212,13 @@ height: '500px', closeBtn: 0, onClose: function() { - var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; - if(selectedUsers != null && selectedUsers.length > 0) { + top.dialog.dialogData.selectedDepartmentUsers = null; + var insertUsers = top.dialog.dialogData.saveDepartmentUsers; + var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers; + + if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) { var ids = []; - for (var i = 0, item; item = selectedUsers[i++];) { + for (var i = 0, item; item = insertUsers[i++];) { ids.push(item.userId); } top.dialog.msg(top.dataMessage.update, { @@ -225,7 +228,8 @@ top.dialog.close(index); var loadLayerIndex; top.restAjax.put(top.restAjax.path('api/position/user/update/{positionId}', [positionId]), { - ids: ids + saveIds: ids, + deleteIds: deleteUsers }, null, function (code, data) { top.dialog.msg(top.dataMessage.updated); $('#selectedUserIds').val(ids.toString().replaceAll(',', '\_')); diff --git a/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleUserController.java b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleUserController.java index 7ec74712..c9ef7095 100644 --- a/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleUserController.java +++ b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleUserController.java @@ -4,10 +4,11 @@ import ink.wgink.common.base.DefaultBaseController; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.dtos.role.RoleUserDTO; +import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; -import ink.wgink.pojo.vos.IdsVO; +import ink.wgink.pojo.vos.SaveAndDeleteIdsVO; import ink.wgink.service.role.service.IRoleUserService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; @@ -31,7 +32,7 @@ import java.util.Map; @RestController @RequestMapping(ISystemConstant.API_PREFIX + "/role/user") public class RoleUserController extends DefaultBaseController { - + @Autowired private IRoleUserService roleUserService; @@ -42,8 +43,8 @@ public class RoleUserController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("update/{roleId}") public synchronized SuccessResult update(@PathVariable("roleId") String roleId, - @RequestBody IdsVO idsVO) { - roleUserService.update(roleId, idsVO.getIds()); + @RequestBody SaveAndDeleteIdsVO saveAndDeleteIdsVO) { + roleUserService.update(roleId, saveAndDeleteIdsVO.getSaveIds(), saveAndDeleteIdsVO.getDeleteIds()); return new SuccessResult(); } @@ -85,4 +86,25 @@ public class RoleUserController extends DefaultBaseController { return roleUserService.listUserId(roleId); } + @ApiOperation(value = "用户列表", notes = "通过角色ID获取用户列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-user/role-id/{roleId}") + public List listUserByRoleId(@PathVariable("roleId") String roleId) { + return roleUserService.listUserByRoleId(roleId); + } + + @ApiOperation(value = "用户分页列表", notes = "通过角色ID获取用户分页列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listpage-user/role-id/{roleId}") + public SuccessResultList> listPageUserByRoleId(@PathVariable("roleId") String roleId, ListPage page) { + return roleUserService.listPageUserByRoleId(roleId, page); + } + + } diff --git a/service-role/src/main/java/ink/wgink/service/role/controller/resources/RoleUserResourceController.java b/service-role/src/main/java/ink/wgink/service/role/controller/resources/RoleUserResourceController.java index bfe57528..e7d1ebea 100644 --- a/service-role/src/main/java/ink/wgink/service/role/controller/resources/RoleUserResourceController.java +++ b/service-role/src/main/java/ink/wgink/service/role/controller/resources/RoleUserResourceController.java @@ -5,6 +5,7 @@ import ink.wgink.exceptions.ParamsException; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.dtos.role.RoleUserDTO; +import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.pos.RolePO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResultList; @@ -93,4 +94,24 @@ public class RoleUserResourceController extends DefaultBaseController { return roleUserService.listUserIdByRoleIdAndUserIds(roleId, idsVO.getIds()); } + @ApiOperation(value = "用户列表", notes = "通过角色ID获取用户列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-user/role-id/{roleId}") + public List listUserByRoleId(@PathVariable("roleId") String roleId) { + return roleUserService.listUserByRoleId(roleId); + } + + @ApiOperation(value = "用户分页列表", notes = "通过角色ID获取用户分页列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "用户角色ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listpage-user/role-id/{roleId}") + public SuccessResultList> listPageUserByRoleId(@PathVariable("roleId") String roleId, ListPage page) { + return roleUserService.listPageUserByRoleId(roleId, page); + } + } diff --git a/service-role/src/main/java/ink/wgink/service/role/dao/IRoleUserDao.java b/service-role/src/main/java/ink/wgink/service/role/dao/IRoleUserDao.java index 1293b39f..a3efd470 100644 --- a/service-role/src/main/java/ink/wgink/service/role/dao/IRoleUserDao.java +++ b/service-role/src/main/java/ink/wgink/service/role/dao/IRoleUserDao.java @@ -4,6 +4,7 @@ import ink.wgink.exceptions.RemoveException; import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.SearchException; import ink.wgink.interfaces.init.IInitBaseTable; +import ink.wgink.pojo.dtos.user.UserDTO; import org.springframework.stereotype.Repository; import java.util.List; @@ -49,6 +50,7 @@ public interface IRoleUserDao extends IInitBaseTable { /** * 角色列表 + * * @param params * @return * @throws SearchException @@ -64,4 +66,12 @@ public interface IRoleUserDao extends IInitBaseTable { */ List listGroupUserId(Map params) throws SearchException; + /** + * 用户列表 + * + * @param params + * @return + * @throws SearchException + */ + List listUser(Map params) throws SearchException; } diff --git a/service-role/src/main/java/ink/wgink/service/role/service/IRoleUserService.java b/service-role/src/main/java/ink/wgink/service/role/service/IRoleUserService.java index 198f9965..3e8ccce8 100644 --- a/service-role/src/main/java/ink/wgink/service/role/service/IRoleUserService.java +++ b/service-role/src/main/java/ink/wgink/service/role/service/IRoleUserService.java @@ -19,17 +19,18 @@ public interface IRoleUserService extends IRoleUserBaseService { /** * 更新用户组人员列表 * - * @param groupId 用户组ID - * @param userIds 用户ID列表 + * @param roleId 角色ID + * @param saveIds 新增ID列表 + * @param deleteIds 删除ID列表 */ - void update(String groupId, List userIds); + void update(String roleId, List saveIds, List deleteIds); /** * 用户组人员删除 * - * @param groupId 用户组ID + * @param roleId 用户组ID * @param userIds 用户ID列表 */ - void delete(String groupId, List userIds); + void delete(String roleId, List userIds); } diff --git a/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleUserServiceImpl.java b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleUserServiceImpl.java index 681c737b..b2e6f86e 100644 --- a/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleUserServiceImpl.java +++ b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleUserServiceImpl.java @@ -1,5 +1,7 @@ package ink.wgink.service.role.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.role.IRoleUserDeleteAfterHandler; @@ -48,18 +50,20 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser private IRoleUserDeleteAfterHandler roleUserDeleteAfterHandler; @Override - public void update(String roleId, List userIds) { - delete(roleId, userIds); - if (!userIds.isEmpty()) { + public void update(String roleId, List saveUserIds, List deleteUserIds) { + if (deleteUserIds != null && !deleteUserIds.isEmpty()) { + delete(roleId, deleteUserIds); + } + if (saveUserIds != null && !saveUserIds.isEmpty()) { Map params = getHashMap(4); params.put("roleId", roleId); - for (String userId : userIds) { + for (String userId : saveUserIds) { params.put("userId", userId); roleUserDao.save(params); } } if (roleUserSaveAfterHandler != null) { - roleUserSaveAfterHandler.handle(roleId, userIds); + roleUserSaveAfterHandler.handle(roleId, saveUserIds); } } @@ -148,6 +152,20 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser return roleUserDao.listUserId(params); } + @Override + public List listUserByRoleId(String roleId) { + Map params = getHashMap(2); + params.put("roleId", roleId); + return roleUserDao.listUser(params); + } + + @Override + public SuccessResultList> listPageUserByRoleId(String roleId, ListPage page) { + PageHelper.startPage(page.getPage(), page.getRows()); + List userDTOs = listUserByRoleId(roleId); + PageInfo pageInfo = new PageInfo<>(userDTOs); + return new SuccessResultList<>(userDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } private List listGroupUserId(Map params) { return roleUserDao.listGroupUserId(params); diff --git a/service-role/src/main/resources/mybatis/mapper/role-user-mapper.xml b/service-role/src/main/resources/mybatis/mapper/role-user-mapper.xml index 9ca5ae12..7f7afe35 100644 --- a/service-role/src/main/resources/mybatis/mapper/role-user-mapper.xml +++ b/service-role/src/main/resources/mybatis/mapper/role-user-mapper.xml @@ -108,5 +108,28 @@ user_id + + + \ No newline at end of file diff --git a/service-role/src/main/resources/templates/role/user/list.html b/service-role/src/main/resources/templates/role/user/list.html index 90ad5cf3..a2e36e6a 100644 --- a/service-role/src/main/resources/templates/role/user/list.html +++ b/service-role/src/main/resources/templates/role/user/list.html @@ -220,10 +220,13 @@ height: '500px', closeBtn: 0, onClose: function() { - var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; - if(selectedUsers != null && selectedUsers.length > 0) { + top.dialog.dialogData.selectedDepartmentUsers = null; + var insertUsers = top.dialog.dialogData.saveDepartmentUsers; + var deleteUsers = top.dialog.dialogData.deleteDepartmentUsers; + + if(insertUsers && insertUsers.length > 0 || deleteUsers && deleteUsers.length > 0) { var ids = []; - for (var i = 0, item; item = selectedUsers[i++];) { + for (var i = 0, item; item = insertUsers[i++];) { ids.push(item.userId); } top.dialog.msg(top.dataMessage.update, { @@ -233,7 +236,8 @@ top.dialog.close(index); var loadLayerIndex; top.restAjax.put(top.restAjax.path('api/role/user/update/{roleId}', [roleId]), { - ids: ids + saveIds: ids, + deleteIds: deleteUsers }, null, function (code, data) { top.dialog.msg(top.dataMessage.updated); initSelectUserIds();