feat:资产授权

master_fei
Yunfei Du 2024-05-12 22:39:48 +08:00
parent 7a8a75dc53
commit 70cad5369c
5 changed files with 214 additions and 56 deletions

View File

@ -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);
}

View File

@ -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<SysDept>> list();
@GetMapping("/user/list")
public Result<TableDataInfo<SysUser>> userList();
}

View File

@ -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;
}
}

View File

@ -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<SysUser>> list = remoteUserService.userList(new SysUser());
List<SysUser> 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<AssetAccredit>()
.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<Long> 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<AssetAccredit> ( )
.eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId () )
.in ( AssetAccredit::getDeptId, assetAccreditReq.getDeptIds () ));
// 删除属于指定部门ID的用户的源数据授权信息
this.remove ( new LambdaQueryWrapper<AssetAccredit> ( )
.eq ( AssetAccredit::getDataAssetId, assetAccreditReq.getDataAssetId () )
.in ( AssetAccredit::getUserId, userIds ));
return Result.success ( );
}
}

View File

@ -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<SourceAccredit> 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
/**
* IDIDID
*
* @param sourceAccreditReq IDIDID
* @return Result.success()
*/
@Override
public Result deleteSourceAccreditBySourceIds(SourceAccreditReq sourceAccreditReq) {
this.remove(new LambdaQueryWrapper<SourceAccredit>()
.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<SourceAccredit> ( )
.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<SourceAccredit> ( )
.eq ( SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId () )
.in ( SourceAccredit::getDeptId, sourceAccreditReq.getDeptIds () ));
// 删除属于指定部门ID的用户的源数据授权信息
this.remove ( new LambdaQueryWrapper<SourceAccredit> ( )
.eq ( SourceAccredit::getDataSourceId, sourceAccreditReq.getDataSourceId () )
.in ( SourceAccredit::getUserId, userIds ));
}
return Result.success ( );
}
}