add-批量查询平台黑名单用户列表

This commit is contained in:
zhangran 2024-03-26 16:20:57 +08:00
parent 2c578625c3
commit 70737dd8b0
8 changed files with 206 additions and 22 deletions

View File

@ -7,6 +7,7 @@ import cn.axzo.nanopart.api.request.BlackAndWhiteListExcelImportReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@ -119,4 +121,16 @@ public interface BlackAndWhiteListApi {
*/ */
@PostMapping("api/black-white-list/inner-sync") @PostMapping("api/black-white-list/inner-sync")
ApiResult<Long> internalSync(@RequestBody @Validated BlackAndWhiteListInternalSyncReq req); ApiResult<Long> internalSync(@RequestBody @Validated BlackAndWhiteListInternalSyncReq req);
/**
* 判断指定模块指定参数记录是否在黑名单或白名单中
*
* @param req 包含type,module,params三个字段
* @return 若记录存在则返回true否则返回false
*/
@PostMapping("api/black-white-list/is-in/list/exist")
ApiResult<Boolean> isInBlackListExist(@RequestBody @Valid BlackListReq req);
@PostMapping("api/black-white-list/is-in/list")
ApiResult<List<BlackAndWhiteListResp>> isInBlackListExistList(@RequestBody @Valid BlackListReq req);
} }

View File

@ -11,4 +11,13 @@ public class BlackAndWhiteListConstant {
public static final String BASIC_FEIGN_PACKAGE = "cn.axzo.nanopart.api"; public static final String BASIC_FEIGN_PACKAGE = "cn.axzo.nanopart.api";
public static final String PHONE_REGEXP = "^1[3456789]\\d{9}$"; public static final String PHONE_REGEXP = "^1[3456789]\\d{9}$";
//-------------------- 黑名单查询固定字段 START--------------
public static final String USER_NAME = "userName";
public static final String USER_ID_CARD = "userIdCard";
public static final String USER_PHONE = "userPhone";
//-------------------- 黑名单查询固定字段 END --------------
} }

View File

@ -0,0 +1,44 @@
package cn.axzo.nanopart.api.request;
import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
* @author chenwenjian
* @date 2023/8/11 16:40
* @description
* @modifiedBy
* @version: 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BlackListReq {
/**
* 名单类型0为黑名单1为白名单
*/
@NotNull(message = "名单类型错误")
private ListTypeEnum type;
/**
* 模块名自主定义cms-login
*/
@NotNull(message = "模块名不能为空")
private List<BlackModuleEnum> modules;
/**
* 限制条件phone:13698745673
*/
private Map<String,Object> param;
}

View File

@ -0,0 +1,70 @@
package cn.axzo.nanopart.server.config;
import cn.azxo.framework.common.logger.JobLoggerTemplate;
import cn.azxo.framework.common.service.JobParamResolver;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
// @Value("http://dev-xxl-job.axzo.cn/xxl-job-admin")
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
// @Value("${xxl.job.accessToken}")
@Value("")
private String accessToken;
@Value("")
private String logPath;
@Value("-1")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
@Bean("jobParamResolver")
public JobParamResolver jobParamResolver() {
return new JobParamResolver();
}
@Bean("jobLoggerTemplate")
public JobLoggerTemplate jobLoggerTemplate() {
return new JobLoggerTemplate();
}
}

View File

@ -5,32 +5,20 @@ import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.BlackAndWhiteListApi; import cn.axzo.nanopart.api.BlackAndWhiteListApi;
import cn.axzo.nanopart.api.annotation.CheckSign; import cn.axzo.nanopart.api.annotation.CheckSign;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum; import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListExcelImportReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.axzo.nanopart.server.service.BlackAndWhiteListService; import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Select;
import org.json.JSONObject;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author chenwenjian * @author chenwenjian
@ -68,7 +56,7 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
@Override @Override
public ApiResult<Boolean> isInBlackOrWhiteList(BlackAndWhiteListReq req) { public ApiResult<Boolean> isInBlackOrWhiteList(BlackAndWhiteListReq req) {
return ApiResult.ok(blackAndWhiteListService.isInBlackOrWhiteList(req)); return ApiResult.ok(blackAndWhiteListService.isInBlackListExist(req));
} }
@Override @Override
@ -102,4 +90,13 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
return ApiResult.ok(blackAndWhiteListService.internalSync(req)); return ApiResult.ok(blackAndWhiteListService.internalSync(req));
} }
@Override
public ApiResult<Boolean> isInBlackListExist(BlackListReq req){
return ApiResult.ok(blackAndWhiteListService.isInBlackListExist(req));
}
@Override
public ApiResult<List<BlackAndWhiteListResp>> isInBlackListExistList(BlackListReq req){
return ApiResult.ok(blackAndWhiteListService.isInBlackListExistList(req));
}
} }

View File

@ -2,7 +2,9 @@ package cn.axzo.nanopart.server.dao.repository;
import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.BeanMapper;
import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListMapper; import cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListMapper;
import cn.azxo.framework.common.utils.StringUtils; import cn.azxo.framework.common.utils.StringUtils;
@ -142,4 +144,27 @@ public class BlackAndWhiteListRepository extends ServiceImpl<BlackAndWhiteListMa
.eq(SaasBlackWhiteList::getIsDelete, 0) .eq(SaasBlackWhiteList::getIsDelete, 0)
.list(); .list();
} }
public List<SaasBlackWhiteList> blackWhiteLists(BlackListReq req) {
QueryWrapper<SaasBlackWhiteList> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type", req.getType().getValue())
.in(CollectionUtil.isNotEmpty(req.getModules()), "module", BlackModuleEnum.getValueList(req.getModules()))
.eq("is_delete", 0)
.groupBy("type", "param");
buildListQueryWrapper(queryWrapper, req.getParam(), "");
return blackAndWhiteListMapper.selectList(queryWrapper);
}
private void buildListQueryWrapper(QueryWrapper<SaasBlackWhiteList> queryWrapper, Map<String, Object> params, String prefix) {
params.forEach((key, value) -> {
String fullKey = prefix.isEmpty() ? key : prefix + "." + key;
if (value instanceof Map) {
buildListQueryWrapper(queryWrapper, (Map<String, Object>) value, fullKey);
}else if(value instanceof List){
queryWrapper.in("param->>'$." + fullKey + "'", ((List<?>) value).toArray());
} else {
queryWrapper.eq("param->>'$." + fullKey + "'", value);
}
});
}
} }

View File

@ -1,10 +1,10 @@
package cn.axzo.nanopart.server.service; package cn.axzo.nanopart.server.service;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum; import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
@ -28,7 +28,7 @@ public interface BlackAndWhiteListService {
List<BlackAndWhiteListResp> detail(BlackAndWhiteListReq req); List<BlackAndWhiteListResp> detail(BlackAndWhiteListReq req);
Boolean isInBlackOrWhiteList(BlackAndWhiteListReq req); Boolean isInBlackListExist(BlackAndWhiteListReq req);
BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file); BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file);
@ -39,4 +39,18 @@ public interface BlackAndWhiteListService {
Long internalSync(BlackAndWhiteListInternalSyncReq req); Long internalSync(BlackAndWhiteListInternalSyncReq req);
List<SaasBlackWhiteList> listModuleBlackUser(); List<SaasBlackWhiteList> listModuleBlackUser();
/**
* 多模块查询
* @param req
* @return
*/
Boolean isInBlackListExist(BlackListReq req);
/**
* 多模块查询
* @param req
* @return
*/
List<BlackAndWhiteListResp> isInBlackListExistList(BlackListReq req);
} }

View File

@ -4,16 +4,15 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum; import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum; import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
import cn.axzo.nanopart.api.constant.enums.MQEventEnum;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp; import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.constant.BlackAndWhiteListConstant; import cn.axzo.nanopart.server.constant.BlackAndWhiteListConstant;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListRepository; import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListRepository;
import cn.axzo.nanopart.server.mq.producer.BlackProducer;
import cn.axzo.nanopart.server.service.BlackAndWhiteListService; import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
@ -73,11 +72,11 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
public Long create(BlackAndWhiteListReq req) { public Long create(BlackAndWhiteListReq req) {
// 黑白名单创建互斥,若存在于黑名单中则不允许存在于白名单中反之亦然 // 黑白名单创建互斥,若存在于黑名单中则不允许存在于白名单中反之亦然
BlackAndWhiteListReq reverseReq = BeanMapper.copyBean(req, BlackAndWhiteListReq.class, (req1, req2) -> req2.setType((req1.getType().equals(ListTypeEnum.BLACK_LIST)) ? ListTypeEnum.WHITE_LIST : ListTypeEnum.BLACK_LIST)); BlackAndWhiteListReq reverseReq = BeanMapper.copyBean(req, BlackAndWhiteListReq.class, (req1, req2) -> req2.setType((req1.getType().equals(ListTypeEnum.BLACK_LIST)) ? ListTypeEnum.WHITE_LIST : ListTypeEnum.BLACK_LIST));
if (isInBlackOrWhiteList(reverseReq)) { if (isInBlackListExist(reverseReq)) {
throw new ServiceException("该记录已存在于" + reverseReq.getType().getDescription() + "中,不能创建对应" + req.getType().getDescription()); throw new ServiceException("该记录已存在于" + reverseReq.getType().getDescription() + "中,不能创建对应" + req.getType().getDescription());
} }
// 同类型名单内唯一性校验 // 同类型名单内唯一性校验
if (isInBlackOrWhiteList(req)) { if (isInBlackListExist(req)) {
throw new ServiceException("该记录已存在于" + req.getType().getDescription() + ""); throw new ServiceException("该记录已存在于" + req.getType().getDescription() + "");
} }
return blackAndWhiteListRepository.create(req); return blackAndWhiteListRepository.create(req);
@ -113,7 +112,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
* @return 记录存在返回true否则返回false * @return 记录存在返回true否则返回false
*/ */
@Override @Override
public Boolean isInBlackOrWhiteList(BlackAndWhiteListReq req) { public Boolean isInBlackListExist(BlackAndWhiteListReq req) {
List<SaasBlackWhiteList> blackWhiteLists = blackAndWhiteListRepository.detail(req); List<SaasBlackWhiteList> blackWhiteLists = blackAndWhiteListRepository.detail(req);
return CollectionUtil.isNotEmpty(blackWhiteLists); return CollectionUtil.isNotEmpty(blackWhiteLists);
} }
@ -223,7 +222,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
return map; return map;
}).forEach(m -> { }).forEach(m -> {
// 判断是否存在目标记录不存在则新增一条 // 判断是否存在目标记录不存在则新增一条
if (!isInBlackOrWhiteList(BlackAndWhiteListReq.builder() if (!isInBlackListExist(BlackAndWhiteListReq.builder()
.type(req.getType()) .type(req.getType())
.module(req.getTargetModule()) .module(req.getTargetModule())
.param(m) .param(m)
@ -386,4 +385,16 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
ArrayList<BlackModuleEnum> models = Lists.newArrayList(BlackModuleEnum.GXJG_BLACKUSER_WORKER, BlackModuleEnum.GXJG_BLACKUSER_TEAMLEADER, BlackModuleEnum.GXJG_BLACKUSER_EMPLOYEE); ArrayList<BlackModuleEnum> models = Lists.newArrayList(BlackModuleEnum.GXJG_BLACKUSER_WORKER, BlackModuleEnum.GXJG_BLACKUSER_TEAMLEADER, BlackModuleEnum.GXJG_BLACKUSER_EMPLOYEE);
return blackAndWhiteListRepository.listByModule(ListTypeEnum.BLACK_LIST.getValue(), BlackModuleEnum.getValueList(models)); return blackAndWhiteListRepository.listByModule(ListTypeEnum.BLACK_LIST.getValue(), BlackModuleEnum.getValueList(models));
} }
@Override
public Boolean isInBlackListExist(BlackListReq req){
List<SaasBlackWhiteList> whiteLists = blackAndWhiteListRepository.blackWhiteLists(req);
return CollectionUtil.isNotEmpty(whiteLists);
}
@Override
public List<BlackAndWhiteListResp> isInBlackListExistList(BlackListReq req){
List<SaasBlackWhiteList> detail = blackAndWhiteListRepository.blackWhiteLists(req);
return BeanMapper.copyList(detail, BlackAndWhiteListResp.class);
}
} }