diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/BlackAndWhiteListApi.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/BlackAndWhiteListApi.java index 99cf81af..fc232069 100644 --- a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/BlackAndWhiteListApi.java +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/BlackAndWhiteListApi.java @@ -7,6 +7,7 @@ import cn.axzo.nanopart.api.request.BlackAndWhiteListExcelImportReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; 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.BlackAndWhiteListResp; 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.multipart.MultipartFile; +import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -119,4 +121,16 @@ public interface BlackAndWhiteListApi { */ @PostMapping("api/black-white-list/inner-sync") ApiResult internalSync(@RequestBody @Validated BlackAndWhiteListInternalSyncReq req); + + /** + * 判断指定模块、指定参数记录是否在黑名单或白名单中 + * + * @param req 包含type,module,params三个字段 + * @return 若记录存在则返回true,否则返回false + */ + @PostMapping("api/black-white-list/is-in/list/exist") + ApiResult isInBlackListExist(@RequestBody @Valid BlackListReq req); + + @PostMapping("api/black-white-list/is-in/list") + ApiResult> isInBlackListExistList(@RequestBody @Valid BlackListReq req); } diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/BlackAndWhiteListConstant.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/BlackAndWhiteListConstant.java index 21eee5e4..9bbd8b8b 100644 --- a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/BlackAndWhiteListConstant.java +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/BlackAndWhiteListConstant.java @@ -11,4 +11,13 @@ public class BlackAndWhiteListConstant { public static final String BASIC_FEIGN_PACKAGE = "cn.axzo.nanopart.api"; 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 -------------- } \ No newline at end of file diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackListReq.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackListReq.java new file mode 100644 index 00000000..2eeb5341 --- /dev/null +++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackListReq.java @@ -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 modules; + + /** + * 限制条件,如:phone:13698745673 + */ + private Map param; +} diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/config/XxlJobConfig.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/config/XxlJobConfig.java new file mode 100644 index 00000000..53164451 --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/config/XxlJobConfig.java @@ -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(); + } +} + diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/controller/BlackAndWhiteListController.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/controller/BlackAndWhiteListController.java index e5ef8c66..7bd8c92c 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/controller/BlackAndWhiteListController.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/controller/BlackAndWhiteListController.java @@ -5,32 +5,20 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.api.BlackAndWhiteListApi; import cn.axzo.nanopart.api.annotation.CheckSign; 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.BlackAndWhiteListPlatformSyncReq; 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.BlackAndWhiteListResp; -import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.service.BlackAndWhiteListService; 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.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.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.Map; /** * @author: chenwenjian @@ -68,7 +56,7 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi { @Override public ApiResult isInBlackOrWhiteList(BlackAndWhiteListReq req) { - return ApiResult.ok(blackAndWhiteListService.isInBlackOrWhiteList(req)); + return ApiResult.ok(blackAndWhiteListService.isInBlackListExist(req)); } @Override @@ -102,4 +90,13 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi { return ApiResult.ok(blackAndWhiteListService.internalSync(req)); } + @Override + public ApiResult isInBlackListExist(BlackListReq req){ + return ApiResult.ok(blackAndWhiteListService.isInBlackListExist(req)); + } + + @Override + public ApiResult> isInBlackListExistList(BlackListReq req){ + return ApiResult.ok(blackAndWhiteListService.isInBlackListExistList(req)); + } } diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java index d2b7fa8d..82a8e3cd 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListRepository.java @@ -2,7 +2,9 @@ package cn.axzo.nanopart.server.dao.repository; 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.BlackListReq; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListMapper; import cn.azxo.framework.common.utils.StringUtils; @@ -142,4 +144,27 @@ public class BlackAndWhiteListRepository extends ServiceImpl blackWhiteLists(BlackListReq req) { + QueryWrapper 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 queryWrapper, Map params, String prefix) { + params.forEach((key, value) -> { + String fullKey = prefix.isEmpty() ? key : prefix + "." + key; + if (value instanceof Map) { + buildListQueryWrapper(queryWrapper, (Map) value, fullKey); + }else if(value instanceof List){ + queryWrapper.in("param->>'$." + fullKey + "'", ((List) value).toArray()); + } else { + queryWrapper.eq("param->>'$." + fullKey + "'", value); + } + }); + } } \ No newline at end of file diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/BlackAndWhiteListService.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/BlackAndWhiteListService.java index 081e3435..7e58670e 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/BlackAndWhiteListService.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/BlackAndWhiteListService.java @@ -1,10 +1,10 @@ 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.request.BlackAndWhiteListInternalSyncReq; import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq; 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.BlackAndWhiteListResp; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; @@ -28,7 +28,7 @@ public interface BlackAndWhiteListService { List detail(BlackAndWhiteListReq req); - Boolean isInBlackOrWhiteList(BlackAndWhiteListReq req); + Boolean isInBlackListExist(BlackAndWhiteListReq req); BlackAndWhiteListExcelImportResp importBlackAndWhiteListExcel(ListTypeEnum type, String module, String url, MultipartFile file); @@ -39,4 +39,18 @@ public interface BlackAndWhiteListService { Long internalSync(BlackAndWhiteListInternalSyncReq req); List listModuleBlackUser(); + + /** + * 多模块查询 + * @param req + * @return + */ + Boolean isInBlackListExist(BlackListReq req); + + /** + * 多模块查询 + * @param req + * @return + */ + List isInBlackListExistList(BlackListReq req); } diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java index 21aec660..3596398e 100644 --- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/service/impl/BlackAndWhiteListServiceImpl.java @@ -4,16 +4,15 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum; 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.BlackAndWhiteListPlatformSyncReq; 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.BlackAndWhiteListResp; import cn.axzo.nanopart.server.constant.BlackAndWhiteListConstant; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; 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.hutool.core.collection.CollectionUtil; import com.alibaba.excel.EasyExcel; @@ -73,11 +72,11 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { 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)); - if (isInBlackOrWhiteList(reverseReq)) { + if (isInBlackListExist(reverseReq)) { throw new ServiceException("该记录已存在于" + reverseReq.getType().getDescription() + "中,不能创建对应" + req.getType().getDescription()); } // 同类型名单内唯一性校验 - if (isInBlackOrWhiteList(req)) { + if (isInBlackListExist(req)) { throw new ServiceException("该记录已存在于" + req.getType().getDescription() + "中"); } return blackAndWhiteListRepository.create(req); @@ -113,7 +112,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { * @return 记录存在返回true,否则返回false */ @Override - public Boolean isInBlackOrWhiteList(BlackAndWhiteListReq req) { + public Boolean isInBlackListExist(BlackAndWhiteListReq req) { List blackWhiteLists = blackAndWhiteListRepository.detail(req); return CollectionUtil.isNotEmpty(blackWhiteLists); } @@ -223,7 +222,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { return map; }).forEach(m -> { // 判断是否存在目标记录,不存在则新增一条 - if (!isInBlackOrWhiteList(BlackAndWhiteListReq.builder() + if (!isInBlackListExist(BlackAndWhiteListReq.builder() .type(req.getType()) .module(req.getTargetModule()) .param(m) @@ -386,4 +385,16 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService { ArrayList 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)); } + + @Override + public Boolean isInBlackListExist(BlackListReq req){ + List whiteLists = blackAndWhiteListRepository.blackWhiteLists(req); + return CollectionUtil.isNotEmpty(whiteLists); + } + + @Override + public List isInBlackListExistList(BlackListReq req){ + List detail = blackAndWhiteListRepository.blackWhiteLists(req); + return BeanMapper.copyList(detail, BlackAndWhiteListResp.class); + } } \ No newline at end of file