From c19edb2f779511bbe3b5d99af333a2d701df561e Mon Sep 17 00:00:00 2001 From: otto <731554297@qq.com> Date: Mon, 17 Apr 2023 10:39:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=87=E7=AB=A0=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E4=BB=A3=E7=A0=81=E4=BB=93=E5=BA=93=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0):=20=E5=88=9B=E5=BB=BA=E4=B8=93=E5=8C=BA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:查询专区对应项目列表 1、部门相关Fegin操作提取成单独类 2、部门服务提供通过id列表查询部门列表接口 关联Issue:https://www.gitlink.org.cn/Gitlink/forgeplus/issues/2696 --- .../ruoyi/system/api/RemoteDeptService.java | 41 ++++++++++++++ .../ruoyi/system/api/RemoteUserService.java | 9 --- .../factory/RemoteDeptFallbackFactory.java | 37 ++++++++++++ .../factory/RemoteUserFallbackFactory.java | 6 -- ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../controller/CmsProjectController.java | 56 ++++++------------- .../project/service/ICmsProjectService.java | 3 +- .../service/impl/CmsProjectServiceImpl.java | 18 +++++- .../system/controller/SysDeptController.java | 16 +++++- .../ruoyi/system/mapper/SysDeptMapper.java | 15 ++++- .../ruoyi/system/service/ISysDeptService.java | 13 ++++- .../service/impl/SysDeptServiceImpl.java | 27 +++++---- .../resources/mapper/system/SysDeptMapper.xml | 40 ++++++++----- 13 files changed, 191 insertions(+), 91 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDeptFallbackFactory.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java new file mode 100644 index 000000000..7494e785b --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.api; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.SysDept; +import com.ruoyi.system.api.factory.RemoteDeptFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; + +import java.util.List; + +/** + * 部门服务 + * + * @author otto + */ +@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDeptFallbackFactory.class) +public interface RemoteDeptService { + /** + * 通过部门Id列表查询部门列表 + * + * @param ids 部门Id列表 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/dept/listInIds/{ids}") + public R> getDeptInDeptIds(@PathVariable("ids") List ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 通过部门Id查询部门信息 + * + * @param deptId 部门Id + * @return 结果 + */ + @GetMapping("/dept/getDeptByDeptId/{deptId}") + public R getDeptByDeptId(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java index c383e012e..bdf637d6c 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java @@ -3,7 +3,6 @@ package com.ruoyi.system.api; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; -import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.factory.RemoteUserFallbackFactory; import com.ruoyi.system.api.model.LoginUser; @@ -46,14 +45,6 @@ public interface RemoteUserService @GetMapping("/user/getSysUserByUserId/{userId}") public R getSysUserByUserId(@PathVariable("userId") Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); - /** - * 通过部门Id查询部门信息 - * - * @param deptId 部门Id - * @return 结果 - */ - @GetMapping("/dept/getDeptByDeptId/{deptId}") - public R getDeptByDeptId(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 注册用户信息 diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDeptFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDeptFallbackFactory.java new file mode 100644 index 000000000..cab3c3df9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteDeptFallbackFactory.java @@ -0,0 +1,37 @@ +package com.ruoyi.system.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.RemoteDeptService; +import com.ruoyi.system.api.domain.SysDept; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 部门服务降级处理 + * + * @author ruoyi + */ +@Component +public class RemoteDeptFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemoteDeptFallbackFactory.class); + + @Override + public RemoteDeptService create(Throwable throwable) { + log.error("部门服务调用失败:{}", throwable.getMessage()); + return new RemoteDeptService() { + @Override + public R> getDeptInDeptIds(List ids, String source) { + return R.fail("获取部门列表失败:" + throwable.getMessage()); + } + + @Override + public R getDeptByDeptId(Long deptId, String source) { + return R.fail("获取部门失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java index 61f14fae3..d01af2b75 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java @@ -2,7 +2,6 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.RemoteUserService; -import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; import org.slf4j.Logger; @@ -42,11 +41,6 @@ public class RemoteUserFallbackFactory implements FallbackFactory getDeptByDeptId(Long deptId, String source) { - return R.fail("获取部门失败:" + throwable.getMessage()); - } - @Override public R registerUserInfo(SysUser sysUser, String source) { return R.fail("注册用户失败:" + throwable.getMessage()); diff --git a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 1a0673a08..dfc0a0907 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.system.api.factory.RemoteUserFallbackFactory +com.ruoyi.system.api.factory.RemoteDeptFallbackFactory com.ruoyi.system.api.factory.RemoteLogFallbackFactory com.ruoyi.system.api.factory.RemoteFileFallbackFactory com.ruoyi.system.api.factory.RemoteCmsFallbackFactory diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/controller/CmsProjectController.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/controller/CmsProjectController.java index 74a319621..9ed319297 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/controller/CmsProjectController.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/controller/CmsProjectController.java @@ -1,17 +1,23 @@ package com.ruoyi.cms.project.controller; +import com.ruoyi.cms.project.domain.CmsProject; import com.ruoyi.cms.project.service.ICmsProjectService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.InnerAuth; +import com.ruoyi.system.api.domain.SysDept; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.List; /** * 专区对应项目Controller @@ -38,47 +44,17 @@ public class CmsProjectController extends BaseController { Boolean changeRoleResult = cmsProjectService.changeUserRole(userId, oldDeptId, newDeptId); return R.ok(changeRoleResult); } -// /** -// * 查询专区对应项目列表 -// */ -// @RequiresPermissions("cms:project:list") -// @GetMapping("/list") -// public TableDataInfo list(CmsProject cmsProject) { -// startPage(); -// List list = cmsProjectService.selectCmsProjectList(cmsProject); -// return getDataTable(list); -// } -// -// /** -// * 导出专区对应项目列表 -// */ -// @RequiresPermissions("cms:project:export") -// @Log(title = "专区对应项目", businessType = BusinessType.EXPORT) -// @PostMapping("/export") -// public void export(HttpServletResponse response, CmsProject cmsProject) { -// List list = cmsProjectService.selectCmsProjectList(cmsProject); -// ExcelUtil util = new ExcelUtil(CmsProject.class); -// util.exportExcel(response, list, "专区对应项目数据"); -// } -// -// /** -// * 获取专区对应项目详细信息 -// */ -// @RequiresPermissions("cms:project:query") -// @GetMapping(value = "/{id}") -// public AjaxResult getInfo(@PathVariable("id") Long id) { -// return success(cmsProjectService.selectCmsProjectById(id)); -// } -// /** -// * 新增专区对应项目 -// */ -// @RequiresPermissions("cms:project:add") -// @Log(title = "专区对应项目", businessType = BusinessType.INSERT) -// @PostMapping -// public AjaxResult add(@RequestBody CmsProject cmsProject) { -// return toAjax(cmsProjectService.insertCmsProject(cmsProject)); -// } + /** + * 查询专区对应项目列表 + */ +// @RequiresPermissions("cms:project:list") + @ApiOperation("查询专区对应项目列表") + @GetMapping("/list") + public TableDataInfo list(@ApiIgnore CmsProject cmsProject) { + List list = cmsProjectService.selectCmsProjectList(cmsProject); + return getDataTable(list); + } /** * 通过组织id新增专区对应项目 diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/ICmsProjectService.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/ICmsProjectService.java index 61c0c73af..cbffed884 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/ICmsProjectService.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/ICmsProjectService.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.project.service; import com.alibaba.fastjson.JSONObject; import com.ruoyi.cms.project.domain.CmsProject; +import com.ruoyi.system.api.domain.SysDept; import java.util.List; @@ -26,7 +27,7 @@ public interface ICmsProjectService { * @param cmsProject 专区对应项目 * @return 专区对应项目集合 */ - public List selectCmsProjectList(CmsProject cmsProject); + public List selectCmsProjectList(CmsProject cmsProject); /** * 新增专区对应项目 diff --git a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/impl/CmsProjectServiceImpl.java b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/impl/CmsProjectServiceImpl.java index fbdc7f24c..84b550b58 100644 --- a/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/impl/CmsProjectServiceImpl.java +++ b/ruoyi-modules/ruoyi-cms/src/main/java/com/ruoyi/cms/project/service/impl/CmsProjectServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.cms.utils.httpclient.GitLinkRequestUrl; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.system.api.RemoteDeptService; import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysUser; @@ -19,7 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 专区对应项目Service业务层处理 @@ -34,6 +37,8 @@ public class CmsProjectServiceImpl implements ICmsProjectService { @Autowired private RemoteUserService remoteUserService; @Autowired + private RemoteDeptService remoteDeptService; + @Autowired private ISysUserService sysUserService; @Autowired private GitLinkRequestHelper gitLinkRequestHelper; @@ -61,8 +66,15 @@ public class CmsProjectServiceImpl implements ICmsProjectService { * @return 专区对应项目 */ @Override - public List selectCmsProjectList(CmsProject cmsProject) { - return cmsProjectMapper.selectCmsProjectList(cmsProject); + public List selectCmsProjectList(CmsProject cmsProject) { + List deptList = new ArrayList<>(); + List cmsProjectList = cmsProjectMapper.selectCmsProjectList(cmsProject); + if (cmsProject == null) { + return deptList; + } + List deptIdList = cmsProjectList.stream().map(x -> x.getDepId()).collect(Collectors.toList()); + deptList = FeginUtils.getReturnData(remoteDeptService.getDeptInDeptIds(deptIdList, SecurityConstants.INNER)); + return deptList; } /** @@ -135,7 +147,7 @@ public class CmsProjectServiceImpl implements ICmsProjectService { throw new ServiceException("该组织已创建项目(组织id[" + deptId + "])"); } //通过Fegin获取部门信息 - SysDept sysDept = FeginUtils.getReturnData(remoteUserService.getDeptByDeptId(deptId, SecurityConstants.INNER)); + SysDept sysDept = FeginUtils.getReturnData(remoteDeptService.getDeptByDeptId(deptId, SecurityConstants.INNER)); if (sysDept == null) { throw new ServiceException("该组织不存在(组织id[" + deptId + "])"); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java index 11d753e53..e1ae26981 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java @@ -47,13 +47,25 @@ public class SysDeptController extends BaseController */ @RequiresPermissions("system:dept:list") @GetMapping("/list/exclude/{deptId}") - public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) - { + public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) { List depts = deptService.selectDeptList(new SysDept()); depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); return success(depts); } + /** + * 通过部门Id列表查询部门列表 + */ + @InnerAuth + @GetMapping("/listInIds/{ids}") + public R> getDeptInDeptIds(@PathVariable("ids") List ids) { + List sysDeptList = deptService.selectDeptListInIds(ids); + if (StringUtils.isNull(sysDeptList)) { + return R.fail("部门不存在(部门id列表[" + ids + "])"); + } + return R.ok(sysDeptList); + } + /** * 根据部门编号获取详细信息 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java index 803b879f5..33be64488 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -1,8 +1,9 @@ package com.ruoyi.system.mapper; -import java.util.List; -import org.apache.ibatis.annotations.Param; import com.ruoyi.system.api.domain.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 部门管理 数据层 @@ -110,9 +111,17 @@ public interface SysDeptMapper /** * 删除部门管理信息 - * + * * @param deptId 部门ID * @return 结果 */ public int deleteDeptById(Long deptId); + + /** + * 通过部门Id列表查询部门列表 + * + * @param ids 部门Id列表 + * @return + */ + List selectDeptListInIds(@Param("ids") List ids); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index 2d45ac399..1f9f5f5d7 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -1,9 +1,10 @@ package com.ruoyi.system.service; -import java.util.List; import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.domain.vo.TreeSelect; +import java.util.List; + /** * 部门管理 服务层 * @@ -116,9 +117,17 @@ public interface ISysDeptService /** * 删除部门管理信息 - * + * * @param deptId 部门ID * @return 结果 */ public int deleteDeptById(Long deptId); + + /** + * 通过部门Id列表查询部门列表 + * + * @param ids 部门Id列表 + * @return + */ + List selectDeptListInIds(List ids); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 671611806..4ceac5247 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,11 +1,5 @@ package com.ruoyi.system.service.impl; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.text.Convert; @@ -20,6 +14,13 @@ import com.ruoyi.system.domain.vo.TreeSelect; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.service.ISysDeptService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; /** * 部门管理 服务实现 @@ -283,21 +284,25 @@ public class SysDeptServiceImpl implements ISysDeptService /** * 删除部门管理信息 - * + * * @param deptId 部门ID * @return 结果 */ @Override - public int deleteDeptById(Long deptId) - { + public int deleteDeptById(Long deptId) { return deptMapper.deleteDeptById(deptId); } + @Override + public List selectDeptListInIds(List ids) { + List deptList = deptMapper.selectDeptListInIds(ids); + return deptList; + } + /** * 递归列表 */ - private void recursionFn(List list, SysDept t) - { + private void recursionFn(List list, SysDept t) { // 得到子节点列表 List childList = getChildList(list, t); t.setChildren(childList); diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index 08a42bce6..f6807a595 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -75,25 +75,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - + - - - insert into sys_dept( - dept_id, - parent_id, - dept_name, - ancestors, - order_num, - leader, - phone, + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, email, status, create_by,