From f6953704bcaa2c5870e7cd6a2bbe6e82b89e181f Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Wed, 3 Nov 2021 18:16:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E7=94=A8=E6=88=B7=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=83=A8=E9=97=A8=E5=9C=B0=E5=8C=BA=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../department/IDepartmentBaseService.java | 16 ++++ .../IDepartmentUserBaseService.java | 7 ++ .../role/IRoleDepartmentUserBaseService.java | 36 +++++++ .../java/ink/wgink/util/ArrayListUtil.java | 30 +++++- .../rpc/rest/handler/RestRemoteHandler.java | 12 +-- .../department/IDepartmentRemoteService.java | 5 + .../impl/DepartmentServiceImpl.java | 10 ++ .../impl/DepartmentUserServiceImpl.java | 28 +++++- .../role/IRoleDepartmentUserService.java | 13 +++ .../impl/RoleDepartmentUserServiceImpl.java | 96 +++++++++++++++++++ .../DepartmentResourceController.java | 29 +++++- .../service/IDepartmentUserService.java | 1 + .../service/impl/DepartmentServiceImpl.java | 20 +++- .../impl/DepartmentUserServiceImpl.java | 8 +- .../mybatis/mapper/department-mapper.xml | 8 ++ .../api/RoleDepartmentUserController.java | 57 +++++++++++ .../service/IRoleDepartmentUserService.java | 14 +++ .../impl/RoleDepartmentUserServiceImpl.java | 96 +++++++++++++++++++ 18 files changed, 462 insertions(+), 24 deletions(-) create mode 100644 basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleDepartmentUserBaseService.java create mode 100644 login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/IRoleDepartmentUserService.java create mode 100644 login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/impl/RoleDepartmentUserServiceImpl.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/controller/api/RoleDepartmentUserController.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/IRoleDepartmentUserService.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/impl/RoleDepartmentUserServiceImpl.java diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentBaseService.java b/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentBaseService.java index e5f8cd0a..1f1a94e1 100644 --- a/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentBaseService.java +++ b/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentBaseService.java @@ -163,4 +163,20 @@ public interface IDepartmentBaseService { */ List listPOByParentIdAndUpdateDate(String departmentParentId, String updateDate); + /** + * 通过区域编码获取组织部门列表 + * + * @param departmentAreaCode 部门区域编码 + * @return + */ + List listPOByAreaCode(String departmentAreaCode); + + /** + * 通过区域编码、部门类型获取组织部门列表 + * + * @param departmentAreaCode + * @param departmentType + * @return + */ + List listPOByAreaCodeAndType(String departmentAreaCode, Integer departmentType); } diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentUserBaseService.java b/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentUserBaseService.java index fcbdd23b..a0746a97 100644 --- a/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentUserBaseService.java +++ b/basic-interface/src/main/java/ink/wgink/interfaces/department/IDepartmentUserBaseService.java @@ -95,4 +95,11 @@ public interface IDepartmentUserBaseService { * @return */ List list(String departmentId, Map params); + + /** + * 设置用户 + * + * @param departmentUserDTOs + */ + void setUser(List departmentUserDTOs); } diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleDepartmentUserBaseService.java b/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleDepartmentUserBaseService.java new file mode 100644 index 00000000..3177fca9 --- /dev/null +++ b/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleDepartmentUserBaseService.java @@ -0,0 +1,36 @@ +package ink.wgink.interfaces.role; + +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +/** + * @ClassName: IRoleDepartmentUserBaseService + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 4:11 下午 + * @Version: 1.0 + */ +public interface IRoleDepartmentUserBaseService { + + + /** + * 获取指定地区下所有部门中指定角色的用户列表 + * + * @param roleId 通过角色ID + * @param areaCode 地区编码 + * @return + */ + List listUserByRoleIdAndAreaCode(String roleId, String areaCode) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException; + + /** + * 获取指定部门中指定角色的用户列表接口 + * + * @param departmentId 部门ID + * @param roleId 角色ID + * @return + */ + List listUserByDepartmentIdAndRoleId(String departmentId, String roleId); + +} diff --git a/basic-util/src/main/java/ink/wgink/util/ArrayListUtil.java b/basic-util/src/main/java/ink/wgink/util/ArrayListUtil.java index 693af011..922376ae 100644 --- a/basic-util/src/main/java/ink/wgink/util/ArrayListUtil.java +++ b/basic-util/src/main/java/ink/wgink/util/ArrayListUtil.java @@ -1,7 +1,11 @@ package ink.wgink.util; +import ink.wgink.util.string.WStringUtil; + import java.io.*; -import java.util.List; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.*; /** * When you feel like quitting. Think about why you started @@ -32,4 +36,28 @@ public class ArrayListUtil { return null; } + /** + * 获取bean中的字符串ID值列表 + * + * @param beans + * @param propertyName + * @param beanClass + * @param + * @return + * @throws NoSuchMethodException + * @throws InvocationTargetException + * @throws IllegalAccessException + */ + public static List listBeanStringIdValue(List beans, String propertyName, Class beanClass) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Set beanStringIdSet = new HashSet<>(); + for (Object bean : beans) { + Method method = bean.getClass().getMethod("get" + WStringUtil.firstToUpper(propertyName)); + Object result = method.invoke(bean); + if (result == null) { + continue; + } + beanStringIdSet.add(result.toString()); + } + return new ArrayList<>(beanStringIdSet); + } } diff --git a/common/src/main/java/ink/wgink/common/rpc/rest/handler/RestRemoteHandler.java b/common/src/main/java/ink/wgink/common/rpc/rest/handler/RestRemoteHandler.java index abb36a88..991d6f8c 100644 --- a/common/src/main/java/ink/wgink/common/rpc/rest/handler/RestRemoteHandler.java +++ b/common/src/main/java/ink/wgink/common/rpc/rest/handler/RestRemoteHandler.java @@ -140,7 +140,7 @@ public class RestRemoteHandler implements InvocationHandler { if (arg == null) { throw new SystemException("路径参数不能为空: " + variableName); } - pathVariableParamsMap.put(variableName, URLEncoder.encode(arg.toString(), "UTF-8")); + pathVariableParamsMap.put(variableName, URLEncoder.encode(String.valueOf(arg), "UTF-8")); } return pathVariableParamsMap; } @@ -168,7 +168,7 @@ public class RestRemoteHandler implements InvocationHandler { if (arg == null) { continue; } - queryVariableParamsMap.put(variableName, URLEncoder.encode(arg.toString(), "UTF-8")); + queryVariableParamsMap.put(variableName, URLEncoder.encode(String.valueOf(arg), "UTF-8")); } return queryVariableParamsMap; } @@ -196,7 +196,7 @@ public class RestRemoteHandler implements InvocationHandler { if (arg == null) { continue; } - formVariableParamsMap.add(variableName, arg.toString()); + formVariableParamsMap.add(variableName, String.valueOf(arg)); } return formVariableParamsMap; } @@ -224,7 +224,7 @@ public class RestRemoteHandler implements InvocationHandler { if (arg == null) { continue; } - headerVariableParamsMap.put(variableName, arg.toString()); + headerVariableParamsMap.put(variableName, String.valueOf(arg)); } return headerVariableParamsMap; } @@ -274,7 +274,7 @@ public class RestRemoteHandler implements InvocationHandler { Map argMap = (Map) args[i]; Map queryMap = new HashMap<>(); for (Map.Entry kv : argMap.entrySet()) { - queryMap.put(kv.getKey(), URLEncoder.encode(kv.getValue().toString(), "UTF-8")); + queryMap.put(kv.getKey(), URLEncoder.encode(String.valueOf(kv.getValue()), "UTF-8")); } return queryMap; } @@ -297,7 +297,7 @@ public class RestRemoteHandler implements InvocationHandler { if (args[i] == null) { continue; } - return args[i].toString(); + return String.valueOf(args[i]); } return null; } diff --git a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/remote/department/IDepartmentRemoteService.java b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/remote/department/IDepartmentRemoteService.java index 253e2b6e..0793b079 100644 --- a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/remote/department/IDepartmentRemoteService.java +++ b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/remote/department/IDepartmentRemoteService.java @@ -63,4 +63,9 @@ public interface IDepartmentRemoteService { @RemoteGetMethod("/list-po/parentid/{departmentParentId}/update-date/{updateDate}") List listPOByParentIdAndUpdateDate(@RemoteServerParams String userCenter, @RemotePathParams("departmentParentId") String departmentParentId, @RemotePathParams("updateDate") String updateDate, @RemoteQueryParams("access_token") String accessToken); + @RemoteGetMethod("/list-po/area-code/{areaCode}") + List listPOByAreaCode(@RemoteServerParams String userCenter, @RemotePathParams("areaCode") String areaCode, @RemoteQueryParams("access_token") String accessToken); + + @RemoteGetMethod("/list-po/area-code/{areaCode}/type/{departmentType}") + List listPOByAreaCodeAndType(@RemoteServerParams String userCenter, @RemotePathParams("areaCode") String departmentAreaCode, @RemotePathParams("departmentType") Integer departmentType, @RemoteQueryParams("access_token") String accessToken); } diff --git a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentServiceImpl.java b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentServiceImpl.java index 9ea39ef7..9493fc45 100644 --- a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentServiceImpl.java +++ b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentServiceImpl.java @@ -162,4 +162,14 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart public List listPOByParentIdAndUpdateDate(String departmentParentId, String updateDate) { return departmentRemoteService.listPOByParentIdAndUpdateDate(apiPathProperties.getUserCenter(), departmentParentId, updateDate, OAuth2ClientTokenManager.getInstance().getToken().getAccessToken()); } + + @Override + public List listPOByAreaCode(String departmentAreaCode) { + return departmentRemoteService.listPOByAreaCode(apiPathProperties.getUserCenter(), departmentAreaCode, OAuth2ClientTokenManager.getInstance().getToken().getAccessToken()); + } + + @Override + public List listPOByAreaCodeAndType(String departmentAreaCode, Integer departmentType) { + return departmentRemoteService.listPOByAreaCodeAndType(apiPathProperties.getUserCenter(), departmentAreaCode, departmentType, OAuth2ClientTokenManager.getInstance().getToken().getAccessToken()); + } } diff --git a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentUserServiceImpl.java b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentUserServiceImpl.java index 6424612f..46200d39 100644 --- a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentUserServiceImpl.java +++ b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/department/impl/DepartmentUserServiceImpl.java @@ -1,7 +1,7 @@ package ink.wgink.login.oauth2.client.service.department.impl; import ink.wgink.common.base.DefaultBaseService; -import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.interfaces.user.IUserBaseService; import ink.wgink.login.oauth2.client.remote.department.IDepartmentUserRemoteService; import ink.wgink.login.oauth2.client.service.department.IDepartmentUserService; import ink.wgink.module.oauth2.manager.OAuth2ClientTokenManager; @@ -15,9 +15,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @ClassName: DepartmentUserServiceImpl @@ -29,6 +27,8 @@ import java.util.Map; @Service public class DepartmentUserServiceImpl extends DefaultBaseService implements IDepartmentUserService { + @Autowired + private IUserBaseService userBaseService; @Autowired private IDepartmentUserRemoteService departmentUserRemoteService; @Autowired @@ -88,4 +88,24 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe return departmentUserRemoteService.list(apiPathProperties.getUserCenter(), departmentId, OAuth2ClientTokenManager.getInstance().getToken().getAccessToken(), params); } + @Override + public void setUser(List departmentUserDTOs) { + if (departmentUserDTOs.isEmpty()) { + return; + } + Set userIdSet = new HashSet<>(); + for (DepartmentUserDTO hasDepartmentUserId : departmentUserDTOs) { + userIdSet.add(hasDepartmentUserId.getUserId()); + } + List userDTOs = userBaseService.listByUserIds(new ArrayList<>(userIdSet)); + for (DepartmentUserDTO departmentUserDTO : departmentUserDTOs) { + for (UserDTO userDTO : userDTOs) { + if (StringUtils.equals(departmentUserDTO.getUserId(), userDTO.getUserId())) { + departmentUserDTO.setUser(userDTO); + break; + } + } + } + } + } diff --git a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/IRoleDepartmentUserService.java b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/IRoleDepartmentUserService.java new file mode 100644 index 00000000..b410c6fe --- /dev/null +++ b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/IRoleDepartmentUserService.java @@ -0,0 +1,13 @@ +package ink.wgink.login.oauth2.client.service.role; + +import ink.wgink.interfaces.role.IRoleDepartmentUserBaseService; + +/** + * @ClassName: IRoleDepartmentUserService + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 4:13 下午 + * @Version: 1.0 + */ +public interface IRoleDepartmentUserService extends IRoleDepartmentUserBaseService { +} diff --git a/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/impl/RoleDepartmentUserServiceImpl.java b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/impl/RoleDepartmentUserServiceImpl.java new file mode 100644 index 00000000..00745aea --- /dev/null +++ b/login-oauth2-client/src/main/java/ink/wgink/login/oauth2/client/service/role/impl/RoleDepartmentUserServiceImpl.java @@ -0,0 +1,96 @@ +package ink.wgink.login.oauth2.client.service.role.impl; + +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.interfaces.department.IDepartmentBaseService; +import ink.wgink.interfaces.department.IDepartmentUserBaseService; +import ink.wgink.login.oauth2.client.service.role.IRoleDepartmentUserService; +import ink.wgink.login.oauth2.client.service.role.IRoleUserService; +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; +import ink.wgink.pojo.pos.DepartmentPO; +import ink.wgink.util.ArrayListUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: RoleDepartmentUserServiceImpl + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 4:14 下午 + * @Version: 1.0 + */ +@Service +public class RoleDepartmentUserServiceImpl extends DefaultBaseService implements IRoleDepartmentUserService { + + @Autowired + private IRoleUserService userService; + @Autowired + private IRoleUserService roleUserService; + @Autowired + private IDepartmentBaseService departmentBaseService; + @Autowired + private IDepartmentUserBaseService departmentUserBaseService; + + @Override + public List listUserByRoleIdAndAreaCode(String roleId, String areaCode) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { + // 地区下所有组织机构 + List departmentPOs = departmentBaseService.listPOByAreaCode(areaCode); + if (departmentPOs.isEmpty()) { + return new ArrayList<>(); + } + List roleUserIds = roleUserService.listUserId(roleId); + if (roleUserIds.isEmpty()) { + return new ArrayList<>(); + } + List departmentIds = ArrayListUtil.listBeanStringIdValue(departmentPOs, "departmentId", DepartmentPO.class); + List departmentUserDTOs = departmentUserBaseService.list(departmentIds); + if (departmentUserDTOs.isEmpty()) { + return new ArrayList<>(); + } + clearNoRoleUser(departmentUserDTOs, roleUserIds); + return departmentUserDTOs; + } + + @Override + public List listUserByDepartmentIdAndRoleId(String departmentId, String roleId) { + List departmentUserDTOs = departmentUserBaseService.list(departmentId); + if (departmentUserDTOs.isEmpty()) { + return new ArrayList<>(); + } + List roleUserIds = roleUserService.listUserId(roleId); + if (roleUserIds.isEmpty()) { + return new ArrayList<>(); + } + clearNoRoleUser(departmentUserDTOs, roleUserIds); + return departmentUserDTOs; + } + + /** + * 清除没有角色的用户 + * + * @param departmentUserDTOs + * @param roleUserIds + */ + private void clearNoRoleUser(List departmentUserDTOs, List roleUserIds) { + // 去除没有角色的用户 + for (int i = 0; i < departmentUserDTOs.size(); i++) { + DepartmentUserDTO departmentUserDTO = departmentUserDTOs.get(i); + boolean isExist = false; + for (String roleUserId : roleUserIds) { + if (StringUtils.equals(departmentUserDTO.getUserId(), roleUserId)) { + isExist = true; + break; + } + } + if (!isExist) { + departmentUserDTOs.remove(i); + i--; + } + } + departmentUserBaseService.setUser(departmentUserDTOs); + } +} diff --git a/service-department/src/main/java/ink/wgink/service/department/controller/resources/DepartmentResourceController.java b/service-department/src/main/java/ink/wgink/service/department/controller/resources/DepartmentResourceController.java index cb90c0d7..cc24e781 100644 --- a/service-department/src/main/java/ink/wgink/service/department/controller/resources/DepartmentResourceController.java +++ b/service-department/src/main/java/ink/wgink/service/department/controller/resources/DepartmentResourceController.java @@ -142,7 +142,7 @@ public class DepartmentResourceController extends DefaultBaseController { return departmentService.listId(params); } - @ApiOperation(value = "组织部门详情", notes = "组织部门详情接口") + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "departmentParentId", value = "上级部门ID", paramType = "path") }) @@ -152,7 +152,7 @@ public class DepartmentResourceController extends DefaultBaseController { return departmentService.listPOByParentId(departmentParentId); } - @ApiOperation(value = "组织部门详情", notes = "组织部门详情接口") + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "departmentId", value = "部门ID", paramType = "path") }) @@ -162,7 +162,7 @@ public class DepartmentResourceController extends DefaultBaseController { return departmentService.listPO(idsVO.getIds()); } - @ApiOperation(value = "组织部门详情", notes = "组织部门详情接口") + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "departmentParentId", value = "上级部门ID", paramType = "path"), @ApiImplicitParam(name = "addDate", value = "添加时间,yyyy-MM-dd", paramType = "path") @@ -173,7 +173,7 @@ public class DepartmentResourceController extends DefaultBaseController { return departmentService.listPOByParentIdAndAddDate(departmentParentId, addDate); } - @ApiOperation(value = "组织部门详情", notes = "组织部门详情接口") + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "departmentParentId", value = "上级部门ID", paramType = "path"), @ApiImplicitParam(name = "updateDate", value = "修改时间,yyyy-MM-dd", paramType = "path") @@ -184,6 +184,27 @@ public class DepartmentResourceController extends DefaultBaseController { return departmentService.listPOByParentIdAndUpdateDate(departmentParentId, updateDate); } + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "areaCode", value = "地区编码", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-po/area-code/{areaCode}") + public List listPOByAreaCode(@PathVariable("areaCode") String areaCode) { + return departmentService.listPOByAreaCode(areaCode); + } + + @ApiOperation(value = "组织部门列表", notes = "组织部门列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "areaCode", value = "地区编码", paramType = "path"), + @ApiImplicitParam(name = "departmentType", value = "组织部门类型", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-po/area-code/{areaCode}/type/{departmentType}") + public List listPOByAreaCode(@PathVariable("areaCode") String areaCode, @PathVariable("departmentType") Integer departmentType) { + return departmentService.listPOByAreaCodeAndType(areaCode, departmentType); + } + @ApiOperation(value = "统计", notes = "统计接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("count") 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 23c9d4e8..d10fb04d 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 @@ -94,4 +94,5 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService { * @return */ List listWithUser(Map params); + } 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 b4aca14d..fc26355a 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 @@ -9,7 +9,6 @@ import ink.wgink.common.base.DefaultBaseService; import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.SearchException; import ink.wgink.interfaces.consts.ISystemConstant; -import ink.wgink.module.dictionary.pojo.dtos.AreaDTO; import ink.wgink.module.dictionary.service.IAreaService; import ink.wgink.module.file.excel.error.AbstractErrorExcelHandler; import ink.wgink.module.file.service.IFileService; @@ -330,8 +329,8 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart @Override public List listPO(List departmentIds) { - if(departmentIds.isEmpty()) { - + if (departmentIds.isEmpty()) { + return new ArrayList<>(); } Map params = getHashMap(2); params.put("departmentIds", departmentIds); @@ -353,6 +352,21 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart return listSimpleByParentIdAndAddDateOrUpdateDate(departmentParentId, null, updateDate); } + @Override + public List listPOByAreaCode(String departmentAreaCode) { + Map params = getHashMap(2); + params.put("departmentAreaCode", departmentAreaCode); + return listPO(params); + } + + @Override + public List listPOByAreaCodeAndType(String departmentAreaCode, Integer departmentType) { + Map params = getHashMap(4); + params.put("departmentAreaCode", departmentAreaCode); + params.put("departmentType", departmentType); + return listPO(params); + } + /** * 通过上级ID和新增或修改日期获取组织列表(简单模式) * 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 5f199494..53de32b6 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 @@ -365,12 +365,8 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe return departmentUserDTOs; } - /** - * 设置用户 - * - * @param departmentUserDTOs - */ - private void setUser(List departmentUserDTOs) { + @Override + public void setUser(List departmentUserDTOs) { if (departmentUserDTOs.isEmpty()) { return; } diff --git a/service-department/src/main/resources/mybatis/mapper/department-mapper.xml b/service-department/src/main/resources/mybatis/mapper/department-mapper.xml index 4e2626a8..2c1167bd 100644 --- a/service-department/src/main/resources/mybatis/mapper/department-mapper.xml +++ b/service-department/src/main/resources/mybatis/mapper/department-mapper.xml @@ -661,6 +661,14 @@ AND gmt_modified = ]]> #{updateDate} + + AND + department_area_code = #{departmentAreaCode} + + + AND + department_type = #{departmentType} + ORDER BY department_code diff --git a/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleDepartmentUserController.java b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleDepartmentUserController.java new file mode 100644 index 00000000..c6511d63 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleDepartmentUserController.java @@ -0,0 +1,57 @@ +package ink.wgink.service.role.controller.api; + +import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; +import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.service.role.service.IRoleDepartmentUserService; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +/** + * @ClassName: RoleDepartmentUserController + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 3:04 下午 + * @Version: 1.0 + */ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "角色部门用户") +@RestController +@RequestMapping(ISystemConstant.API_PREFIX + "/role/department/user") +public class RoleDepartmentUserController extends DefaultBaseController { + + @Autowired + private IRoleDepartmentUserService roleDepartmentUserService; + + @ApiOperation(value = "用户列表(通过角色ID、地区编码)", notes = "获取指定地区下所有部门中指定角色的用户列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path", dataType = "String", required = true), + @ApiImplicitParam(name = "areaCode", value = "地区编码", paramType = "path", dataType = "String", required = true), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-user/{roleId}/{areaCode}") + public List listUserByRoleIdAndAreaCode(@PathVariable("roleId") String roleId, + @PathVariable("areaCode") String areaCode) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { + return roleDepartmentUserService.listUserByRoleIdAndAreaCode(roleId, areaCode); + } + + @ApiOperation(value = "用户列表(通过部门ID、角色ID)", notes = "获取指定部门中指定角色的用户列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "departmentId", value = "部门ID", paramType = "path", dataType = "String", required = true), + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path", dataType = "String", required = true), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-user/{departmentId}/{roleId}") + public List listUserByDepartmentIdAndRoleId(@PathVariable("departmentId") String departmentId, + @PathVariable("roleId") String roleId) { + return roleDepartmentUserService.listUserByDepartmentIdAndRoleId(departmentId, roleId); + } + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/IRoleDepartmentUserService.java b/service-role/src/main/java/ink/wgink/service/role/service/IRoleDepartmentUserService.java new file mode 100644 index 00000000..c6540046 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/IRoleDepartmentUserService.java @@ -0,0 +1,14 @@ +package ink.wgink.service.role.service; + +import ink.wgink.interfaces.role.IRoleDepartmentUserBaseService; + +/** + * @ClassName: IRoleDepartmentUserService + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 3:05 下午 + * @Version: 1.0 + */ +public interface IRoleDepartmentUserService extends IRoleDepartmentUserBaseService { + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleDepartmentUserServiceImpl.java b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleDepartmentUserServiceImpl.java new file mode 100644 index 00000000..11548237 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleDepartmentUserServiceImpl.java @@ -0,0 +1,96 @@ +package ink.wgink.service.role.service.impl; + +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; +import ink.wgink.pojo.pos.DepartmentPO; +import ink.wgink.service.department.service.IDepartmentService; +import ink.wgink.service.department.service.IDepartmentUserService; +import ink.wgink.service.role.service.IRoleDepartmentUserService; +import ink.wgink.service.role.service.IRoleUserService; +import ink.wgink.util.ArrayListUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: RoleDepartmentUserServiceImpl + * @Description: 角色部门用户 + * @Author: wanggeng + * @Date: 2021/11/3 3:05 下午 + * @Version: 1.0 + */ +@Service +public class RoleDepartmentUserServiceImpl extends DefaultBaseService implements IRoleDepartmentUserService { + + @Autowired + private IRoleUserService roleUserService; + @Autowired + private IDepartmentService departmentService; + @Autowired + private IDepartmentUserService departmentUserService; + + @Override + public List listUserByRoleIdAndAreaCode(String roleId, String areaCode) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { + // 地区下所有组织机构 + List departmentPOs = departmentService.listPOByAreaCode(areaCode); + if (departmentPOs.isEmpty()) { + return new ArrayList<>(); + } + List roleUserIds = roleUserService.listUserId(roleId); + if (roleUserIds.isEmpty()) { + return new ArrayList<>(); + } + List departmentIds = ArrayListUtil.listBeanStringIdValue(departmentPOs, "departmentId", DepartmentPO.class); + List departmentUserDTOs = departmentUserService.list(departmentIds); + if (departmentUserDTOs.isEmpty()) { + return new ArrayList<>(); + } + clearNoRoleUser(departmentUserDTOs, roleUserIds); + return departmentUserDTOs; + } + + @Override + public List listUserByDepartmentIdAndRoleId(String departmentId, String roleId) { + List departmentUserDTOs = departmentUserService.list(departmentId); + if (departmentUserDTOs.isEmpty()) { + return new ArrayList<>(); + } + List roleUserIds = roleUserService.listUserId(roleId); + if (roleUserIds.isEmpty()) { + return new ArrayList<>(); + } + clearNoRoleUser(departmentUserDTOs, roleUserIds); + return departmentUserDTOs; + } + + /** + * 清除没有角色的用户 + * + * @param departmentUserDTOs + * @param roleUserIds + */ + private void clearNoRoleUser(List departmentUserDTOs, List roleUserIds) { + // 去除没有角色的用户 + for (int i = 0; i < departmentUserDTOs.size(); i++) { + DepartmentUserDTO departmentUserDTO = departmentUserDTOs.get(i); + boolean isExist = false; + for (String roleUserId : roleUserIds) { + if (StringUtils.equals(departmentUserDTO.getUserId(), roleUserId)) { + isExist = true; + break; + } + } + if (!isExist) { + departmentUserDTOs.remove(i); + i--; + } + } + departmentUserService.setUser(departmentUserDTOs); + } + + +}