From 70cad5369c6c3820b1249ddf0f0c797a3fbd3e78 Mon Sep 17 00:00:00 2001 From: Yunfei Du <278774021@qq.com> Date: Sun, 12 May 2024 22:39:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=B5=84=E4=BA=A7=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/RemoteDataSourceService.java | 27 +++++ .../java/com/etl/data/remote/RemoteSys.java | 37 ++++++ .../etl/data/remote/factory/RemoteUser.java | 35 ++++++ .../impl/AssetAccreditServiceImpl.java | 58 +++++---- .../impl/SourceAccreditServiceImpl.java | 113 +++++++++++++----- 5 files changed, 214 insertions(+), 56 deletions(-) create mode 100644 etl-modules/etl-data-source/etl-data-source-remote/src/main/java/com/etl/data/source/remote/RemoteDataSourceService.java create mode 100644 etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/RemoteSys.java create mode 100644 etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/factory/RemoteUser.java diff --git a/etl-modules/etl-data-source/etl-data-source-remote/src/main/java/com/etl/data/source/remote/RemoteDataSourceService.java b/etl-modules/etl-data-source/etl-data-source-remote/src/main/java/com/etl/data/source/remote/RemoteDataSourceService.java new file mode 100644 index 0000000..eb6cb2c --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-remote/src/main/java/com/etl/data/source/remote/RemoteDataSourceService.java @@ -0,0 +1,27 @@ +package com.etl.data.source.remote; + +import com.etl.common.core.constant.ServiceNameConstants; +import com.etl.common.core.domain.Result; +import com.etl.common.core.web.page.TableDataInfo; +import com.etl.data.domain.DataSource; +import com.etl.data.domain.req.DataSourceQueryReq; +import com.etl.data.source.remote.factory.DataSourceFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * 远程数据源服务 + * @author YunFei.Du + * @date 14:09 2024/5/10 + */ +@FeignClient( + contextId = "RemoteDataAccess", + value = ServiceNameConstants.DATA_SOURCE_SERVICE, + fallbackFactory = DataSourceFactory.class, + path = "/source" +) +public interface RemoteDataSourceService { + @PostMapping("/list") + public Result< TableDataInfo< DataSource > > getDataSourceList (@RequestBody DataSourceQueryReq req); +} diff --git a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/RemoteSys.java b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/RemoteSys.java new file mode 100644 index 0000000..e033f3a --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/RemoteSys.java @@ -0,0 +1,37 @@ +package com.etl.data.remote; + +import com.etl.common.core.constant.ServiceNameConstants; +import com.etl.common.core.domain.Result; +import com.etl.common.core.web.page.TableDataInfo; +import com.etl.common.system.domain.SysDept; +import com.etl.common.system.domain.SysUser; +import com.etl.data.remote.factory.RemoteUser; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +/** + * @ClassName RemoteSys + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/10 21:04 + */ + +@FeignClient( + contextId = "RemoteSys", + value = ServiceNameConstants.SYSTEM_SERVICE, + fallbackFactory = RemoteUser.class +) +public interface RemoteSys { + /** + * 根据用户id查询用户信息 + * @return 结果 + */ + @GetMapping("/dept/list") + public Result> list(); + + @GetMapping("/user/list") + public Result> userList(); +} diff --git a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/factory/RemoteUser.java b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/factory/RemoteUser.java new file mode 100644 index 0000000..2b5699d --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/remote/factory/RemoteUser.java @@ -0,0 +1,35 @@ +package com.etl.data.remote.factory; + +import com.etl.common.core.domain.Result; +import com.etl.common.core.web.page.TableDataInfo; +import com.etl.common.system.domain.SysDept; +import com.etl.common.system.domain.SysUser; +import com.etl.data.remote.RemoteSys; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @ClassName RemoteUser + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/10 21:03 + */ +@Component +public class RemoteUser implements FallbackFactory< RemoteSys > { + @Override + public RemoteSys create(Throwable cause) { + RemoteSys remoteSys = new RemoteSys ( ) { + @Override + public Result< List< SysDept > > list() { + return Result.error ( cause.getMessage () ); + } + @Override + public Result< TableDataInfo< SysUser > > userList() { + return Result.error ( cause.getMessage () ); + } + }; + return remoteSys; + } +} diff --git a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/AssetAccreditServiceImpl.java b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/AssetAccreditServiceImpl.java index 6f2d00c..c04e26b 100644 --- a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/AssetAccreditServiceImpl.java +++ b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/AssetAccreditServiceImpl.java @@ -7,9 +7,11 @@ import com.etl.common.security.utils.SecurityUtils; import com.etl.common.system.domain.SysUser; import com.etl.common.system.remote.RemoteUserService; import com.etl.data.domain.AssetAccredit; +import com.etl.data.domain.SourceAccredit; import com.etl.data.domain.model.AccreditModel; import com.etl.data.domain.req.AssetAccreditReq; import com.etl.data.mapper.AssetAccreditMapper; +import com.etl.data.remote.RemoteSys; import com.etl.data.service.AssetAccreditService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,16 +31,16 @@ public class AssetAccreditServiceImpl extends ServiceImpl< AssetAccreditMapper, @Autowired - private RemoteUserService remoteUserService; - @Autowired - private AssetAccreditService assetAccreditService; + private RemoteSys remoteSys; + @Override public Result getAssetAccreditByDataAssetId(Long id) { List< AssetAccredit > assetAccreditList = this.list ( new LambdaQueryWrapper< AssetAccredit > ( ).eq ( AssetAccredit::getDataAssetId, id ) ); - List< Long > userAccreditIds = assetAccreditList.stream ( ).map ( AssetAccredit::getUserId ).filter ( Objects::isNull ).toList ( ); - List< Long > deptAccreditIds = assetAccreditList.stream ( ).map ( AssetAccredit::getDeptId ).filter ( Objects::isNull ).toList ( ); + List< Long > userAccreditIds = assetAccreditList.stream ().filter ( sourceAccredit -> sourceAccredit.getDeptId ( ) != null ).map ( AssetAccredit::getDeptId ).toList (); + List< Long > deptAccreditIds = assetAccreditList.stream ().filter ( sourceAccredit -> sourceAccredit.getUserId ( ) != null ).map ( AssetAccredit::getUserId ).toList (); + AccreditModel accreditModel = new AccreditModel ( ); accreditModel.setDeptAccreditModelIds ( deptAccreditIds ); @@ -66,9 +68,8 @@ public class AssetAccreditServiceImpl extends ServiceImpl< AssetAccreditMapper, assetAccredit.setCreateTime(new Date()); return assetAccredit; }).toList(); - List< Long > deptIds = assetAccreditReq.getDeptIds ( ); - Result> list = remoteUserService.userList(new SysUser()); - List sysUsers = list.getData(); + List< Long > deptIds = assetAccreditReq.getDeptIds ( ); + List< SysUser > sysUsers = remoteSys.userList ( ).getData ( ).getRows ( ); assetAccredits.addAll(sysUsers.stream().filter(sysUser -> deptIds.contains(sysUser.getDeptId())).toList().stream().map(sysUser -> { AssetAccredit assetAccredit = new AssetAccredit(); assetAccredit.setDataAssetId(assetAccreditReq.getDataAssetId()); @@ -78,30 +79,35 @@ public class AssetAccreditServiceImpl extends ServiceImpl< AssetAccreditMapper, return assetAccredit; }).toList()); } - assetAccreditService.saveBatch ( assetAccredits ); + this.saveBatch ( assetAccredits ); return Result.success(); } @Override public Result deleteAssetAccreditByAssetIds(AssetAccreditReq assetAccreditReq) { - if (assetAccreditReq.getUserId() != null){ - this.remove(new LambdaQueryWrapper() - .eq(AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId()) - .eq(AssetAccredit::getUserId, assetAccreditReq.getUserId())); - }else { - List< Long > deptIds = assetAccreditReq.getDeptIds ( ); - Result< List< SysUser > > list = remoteUserService.userList ( new SysUser ( ) ); - List< SysUser > sysUsers = list.getData ( ); - List userIds = sysUsers.stream() - .filter(sysUser -> deptIds.contains(sysUser.getDeptId())).toList().stream() - .filter(sysUser -> deptIds.contains(sysUser.getDeptId())).toList().stream() - .map(SysUser::getUserId).toList(); - assetAccreditService.remove ( new LambdaQueryWrapper< AssetAccredit > ( ).in( AssetAccredit::getUserId, userIds).eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId() )); - assetAccreditService.remove ( new LambdaQueryWrapper< AssetAccredit > ( ).in ( AssetAccredit::getDeptId, deptIds).eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId() ) ); - + // 如果用户ID不为空,则删除该用户对应的源数据授权信息 + if (assetAccreditReq.getUserId ()!=null){ + this.remove ( new LambdaQueryWrapper< AssetAccredit> ( ) + .eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId () ) + .eq ( AssetAccredit::getUserId, assetAccreditReq.getUserId () ) ); } - return Result.success(); - } + // 获取所有系统部门ID和所有用户信息 + List< Long > deptIds = remoteSys.list ( ).getData ( ).stream ( ).map ( sysDept -> sysDept.getDeptId ( ) ).toList ( ); + List< SysUser > userList = remoteSys.userList ( ).getData ( ).getRows ( ); + // 筛选出属于指定部门ID的用户ID + List< Long > userIds = userList.stream ( ) + .filter ( sysUser -> deptIds.contains ( sysUser.getDeptId ( ) ) ).toList ( ).stream ( ) + .map ( SysUser::getUserId ).toList ( ); + // 删除指定部门ID的源数据授权信息 + this.remove ( new LambdaQueryWrapper ( ) + .eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId () ) + .in ( AssetAccredit::getDeptId, assetAccreditReq.getDeptIds () )); + // 删除属于指定部门ID的用户的源数据授权信息 + this.remove ( new LambdaQueryWrapper ( ) + .eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId () ) + .in ( AssetAccredit::getUserId, userIds )); + return Result.success ( ); + } } diff --git a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/SourceAccreditServiceImpl.java b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/SourceAccreditServiceImpl.java index 4dbb321..af12d88 100644 --- a/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/SourceAccreditServiceImpl.java +++ b/etl-modules/etl-data-source/etl-data-source-server/src/main/java/com/etl/data/service/impl/SourceAccreditServiceImpl.java @@ -4,73 +4,126 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.etl.common.core.domain.Result; import com.etl.common.security.utils.SecurityUtils; +import com.etl.common.system.domain.SysDept; +import com.etl.common.system.domain.SysUser; import com.etl.data.domain.AssetAccredit; import com.etl.data.domain.SourceAccredit; import com.etl.data.domain.model.AccreditModel; import com.etl.data.domain.req.AssetAccreditReq; import com.etl.data.domain.req.SourceAccreditReq; import com.etl.data.mapper.SourceAccreditMapper; +import com.etl.data.remote.RemoteSys; +import com.etl.data.remote.factory.RemoteUser; import com.etl.data.service.SourceAccreditService; +import lombok.experimental.Accessors; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** - * 数据源授权 + * 数据源授权 + * * @author YunFei.Du - * @date 15:26 2024/5/1 + * @date 15:26 2024/5/1 */ @Service +@Log4j2 +@Transactional public class SourceAccreditServiceImpl extends ServiceImpl< SourceAccreditMapper, SourceAccredit > implements SourceAccreditService { + + + @Autowired + private RemoteSys remoteSys; + @Override public Result getSourceAccreditByDataSourceId(Long id) { List< SourceAccredit > sourceAccreditList = this.list ( new LambdaQueryWrapper< SourceAccredit > ( ).eq ( SourceAccredit::getDataSourceId, id ) ); - List< Long > userAccreditIds = sourceAccreditList.stream ( ).map ( SourceAccredit::getUserId ).filter ( Objects::isNull ).toList ( ); - List< Long > deptAccreditIds = sourceAccreditList.stream ( ).map ( SourceAccredit::getDeptId ).filter ( Objects::isNull ).toList ( ); + List< Long > userAccreditIds = sourceAccreditList.stream ().filter ( sourceAccredit -> sourceAccredit.getDeptId ( ) != null ).map ( SourceAccredit::getDeptId ).toList (); + List< Long > deptAccreditIds = sourceAccreditList.stream ().filter ( sourceAccredit -> sourceAccredit.getUserId ( ) != null ).map ( SourceAccredit::getUserId ).toList (); AccreditModel accreditModel = new AccreditModel ( ); accreditModel.setDeptAccreditModelIds ( deptAccreditIds ); - accreditModel.setUserAccreditModelIds ( userAccreditIds ); + accreditModel.setUserAccreditModelIds ( userAccreditIds ); return Result.success ( accreditModel ); } @Override public Result insertSourceAccredit(SourceAccreditReq sourceAccreditReq) { - deleteSourceAccreditBySourceIds(sourceAccreditReq); - List sourceAccredits = new ArrayList<> (); - if (sourceAccreditReq.getUserId() != null){ - SourceAccredit sourceAccredit = new SourceAccredit(); - sourceAccredit.setDataSourceId(sourceAccreditReq.getDataSourceId()); - sourceAccredit.setUserId(sourceAccreditReq.getUserId()); - sourceAccredit.setCreateBy( SecurityUtils.getUsername()); - sourceAccredit.setCreateTime(new Date ()); - sourceAccredits.add(sourceAccredit); - }else{ - sourceAccredits=sourceAccreditReq.getDeptIds().stream().map(deptId -> { - SourceAccredit sourceAccredit = new SourceAccredit(); - sourceAccredit.setDataSourceId(sourceAccreditReq.getDataSourceId()); - sourceAccredit.setDeptId(deptId); - sourceAccredit.setCreateBy(SecurityUtils.getUsername()); - sourceAccredit.setCreateTime(new Date()); + // TODO 删除id + List< SourceAccredit > sourceAccredits; + if (sourceAccreditReq.getUserId ( ) != null) { + sourceAccredits = new ArrayList<> ( ); + SourceAccredit sourceAccredit = new SourceAccredit ( ); + sourceAccredit.setDataSourceId ( sourceAccreditReq.getDataSourceId ( ) ); + sourceAccredit.setUserId ( sourceAccreditReq.getUserId ( ) ); + sourceAccredit.setCreateBy ( SecurityUtils.getUsername ( ) ); + sourceAccredit.setCreateTime ( new Date ( ) ); + sourceAccredits.add ( sourceAccredit ); + } else { + + sourceAccredits = new ArrayList<> ( sourceAccreditReq.getDeptIds ( ).stream ( ).map ( deptId -> { + SourceAccredit sourceAccredit = new SourceAccredit ( ); + sourceAccredit.setDataSourceId ( sourceAccreditReq.getDataSourceId ( ) ); + sourceAccredit.setDeptId ( deptId ); + sourceAccredit.setCreateBy ( SecurityUtils.getUsername ( ) ); + sourceAccredit.setCreateTime ( new Date ( ) ); return sourceAccredit; - }).toList(); + } ).toList ( ) ); + List< Long > deptIds = sourceAccreditReq.getDeptIds ( ); + List< SysUser > sysUsers = remoteSys.userList ( ).getData ( ).getRows ( ); + sourceAccredits.addAll ( sysUsers.stream ( ).filter ( sysUser -> deptIds.contains + ( sysUser.getDeptId ( ) ) ).toList ( ).stream ( ).map ( sysUser -> { + SourceAccredit sourceAccredit = new SourceAccredit ( ); + sourceAccredit.setDataSourceId ( sourceAccreditReq.getDataSourceId ( ) ); + sourceAccredit.setUserId ( sysUser.getUserId ( ) ); + sourceAccredit.setCreateBy ( SecurityUtils.getUsername ( ) ); + sourceAccredit.setCreateTime ( new Date ( ) ); + return sourceAccredit; + } ).toList ( ) ); } this.saveBatch ( sourceAccredits ); - return Result.success(); + return Result.success ( ); } - +//mapped + /** + * 根据源数据ID和用户ID或部门ID删除源数据授权信息。 + * + * @param sourceAccreditReq 包含要删除的源数据ID、用户ID(可选)和部门ID集合。 + * @return 返回操作结果,成功则为Result.success()。 + */ @Override public Result deleteSourceAccreditBySourceIds(SourceAccreditReq sourceAccreditReq) { - this.remove(new LambdaQueryWrapper() - .eq(SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId ()) - .eq(sourceAccreditReq.getUserId() != null, SourceAccredit::getUserId, sourceAccreditReq.getUserId()) - .eq(sourceAccreditReq.getDataSourceId () != null, SourceAccredit::getDeptId, sourceAccreditReq.getDataSourceId ())); + // 如果用户ID不为空,则删除该用户对应的源数据授权信息 + if (sourceAccreditReq.getUserId ()!=null){ + this.remove ( new LambdaQueryWrapper ( ) + .eq ( SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId () ) + .eq ( SourceAccredit::getUserId, sourceAccreditReq.getUserId () ) ); + }else { + // 获取所有系统部门ID和所有用户信息 + List< Long > deptIds = remoteSys.list ( ).getData ( ).stream ( ).map ( sysDept -> sysDept.getDeptId ( ) ).toList ( ); + List< SysUser > userList = remoteSys.userList ( ).getData ( ).getRows ( ); + // 筛选出属于指定部门ID的用户ID + List< Long > userIds = userList.stream ( ) + .filter ( sysUser -> deptIds.contains ( sysUser.getDeptId ( ) ) ).toList ( ).stream ( ) + .map ( SysUser::getUserId ).toList ( ); - - return Result.success ( ); + // 删除指定部门ID的源数据授权信息 + this.remove ( new LambdaQueryWrapper ( ) + .eq ( SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId () ) + .in ( SourceAccredit::getDeptId, sourceAccreditReq.getDeptIds () )); + // 删除属于指定部门ID的用户的源数据授权信息 + this.remove ( new LambdaQueryWrapper ( ) + .eq ( SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId () ) + .in ( SourceAccredit::getUserId, userIds )); + } + return Result.success ( ); } }