diff --git a/black-list/black-list-api/pom.xml b/black-list/black-list-api/pom.xml
index ffd67112..c49e653b 100644
--- a/black-list/black-list-api/pom.xml
+++ b/black-list/black-list-api/pom.xml
@@ -22,9 +22,17 @@
cn.axzo.framework
axzo-common-domain
+
+ cn.axzo.framework.rocketmq
+ axzo-common-rocketmq
+
jakarta.servlet
jakarta.servlet-api
+
+ org.springframework.cloud
+ spring-cloud-context
+
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 058f238c..a22f409c 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[23456789]\\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/constant/enums/BlackModuleEnum.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/enums/BlackModuleEnum.java
new file mode 100644
index 00000000..30f03477
--- /dev/null
+++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/enums/BlackModuleEnum.java
@@ -0,0 +1,69 @@
+package cn.axzo.nanopart.api.constant.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zr
+ * @Date 2024/3/20 10:00
+ * @Description
+ **/
+@Getter
+public enum BlackModuleEnum {
+
+
+ /**
+ * 登录白名单
+ */
+ ALL_LOGIN("all-login","登录白名单"),
+ /**
+ * 企业注册黑名单
+ */
+ OU_REGISTER_BLACK_LIST("ou_register_black_list","企业注册黑名单"),
+ /**
+ * 白名单
+ */
+ ATTENDANCE_PASS("attendance-pass","白名单"),
+ /**
+ * 产业工人黑名单
+ */
+ GXJG_BLACKUSER_WORKER("gxjg-blackuser-worker","产业工人黑名单"),
+ /**
+ * 班组管理人员黑名单
+ */
+ GXJG_BLACKUSER_TEAMLEADER("gxjg-blackuser-teamleader","班组管理人员黑名单"),
+ /**
+ * 项目管理人员黑名单
+ */
+ GXJG_BLACKUSER_EMPLOYEE("gxjg-blackuser-employee","项目管理人员黑名单"),
+ /**
+ * 企业黑名单
+ */
+ GXJG_BLACKCOMPANY("gxjg-blackcompany","企业黑名单"),
+
+ ;
+
+ private final String value;
+ private final String description;
+
+ BlackModuleEnum(String value, String description) {
+ this.value = value;
+ this.description = description;
+ }
+
+ public static BlackModuleEnum getByValue(String value){
+ return Arrays.stream(values()).filter(l -> l.getValue().equals(value)).findFirst().orElse(null);
+ }
+
+ public static List getValueList(List enums){
+ if(enums == null){
+ return Collections.emptyList();
+ }
+ return enums.stream().map(BlackModuleEnum::getValue).collect(Collectors.toList());
+ }
+
+}
diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/enums/MQEventEnum.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/enums/MQEventEnum.java
new file mode 100644
index 00000000..347d15b9
--- /dev/null
+++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/constant/enums/MQEventEnum.java
@@ -0,0 +1,40 @@
+package cn.axzo.nanopart.api.constant.enums;
+
+import cn.axzo.framework.rocketmq.Event;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * @Author zr
+ * @Date 2024/3/19 18:01
+ * @Description
+ **/
+@Getter
+public enum MQEventEnum {
+
+ GXJG_BLACKUSER_WORKER("plat-blacklist", "plat-blackuser-worker-list", "产业工人黑名单"),
+ GXJG_BLACKUSER_TEAMLEADER("plat-blacklist", "plat-blackuser-teamleader-list", "班组管理人员黑名单"),
+ GXJG_BLACKUSER_EMPLOYEE("plat-blacklist", "plat-blackuser-employee-list", "项目管理人员黑名单"),
+
+
+ ;
+ private final String model;
+ private final String tag;
+ private final String desc;
+ private final Event.EventCode eventCode;
+
+ MQEventEnum(String model, String tag, String desc) {
+ this.eventCode = Event.EventCode.builder()
+ .module(model)
+ .name(tag)
+ .build();
+ this.model = model;
+ this.tag = tag;
+ this.desc = desc;
+ }
+
+ public static MQEventEnum getByName(String name){
+ return Arrays.stream(MQEventEnum.values()).filter(item -> item.name().equals(name)).findFirst().orElse(null);
+ }
+}
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/pom.xml b/black-list/black-list-service/pom.xml
index 61d27631..7c00fa03 100644
--- a/black-list/black-list-service/pom.xml
+++ b/black-list/black-list-service/pom.xml
@@ -41,5 +41,10 @@
cn.axzo.pokonyan
pokonyan
+
+ com.xuxueli
+ xxl-job-core
+ 2.2.0
+
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/mapper/BlackAndWhiteListMapper.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListMapper.java
index e1196f79..fca0da3c 100644
--- a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListMapper.java
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListMapper.java
@@ -3,6 +3,9 @@ package cn.axzo.nanopart.server.dao.mapper;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* @author: chenwenjian
@@ -13,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface BlackAndWhiteListMapper extends BaseMapper {
+
}
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 253e291e..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,20 +2,21 @@ 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;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.json.JSONObject;
import org.springframework.stereotype.Repository;
-import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -127,4 +128,43 @@ public class BlackAndWhiteListRepository extends ServiceImpl listByModule(Integer type, List modules) {
+ return lambdaQuery()
+ .eq(SaasBlackWhiteList::getType, type)
+ .in(CollUtil.isNotEmpty(modules),SaasBlackWhiteList::getModule, modules)
+ .eq(SaasBlackWhiteList::getIsDelete, 0)
+ .list();
+ }
+
+ public List 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/job/BlackUserSyncJob.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BlackUserSyncJob.java
new file mode 100644
index 00000000..6b569bac
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BlackUserSyncJob.java
@@ -0,0 +1,87 @@
+package cn.axzo.nanopart.server.job;
+
+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.BlackListReq;
+import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
+import cn.axzo.nanopart.server.mq.producer.BlackProducer;
+import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
+import cn.azxo.framework.common.utils.StringUtils;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.IJobHandler;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @Author zr
+ * @Date 2024/3/20 16:26
+ * @Description 定时任务
+ **/
+@Slf4j
+@Component
+public class BlackUserSyncJob extends IJobHandler{
+
+ @Resource
+ private BlackAndWhiteListService blackAndWhiteListService;
+ /**
+ * 定时任务执行逻辑
+ * 这具数据比较少,一直性发个几百条我问题不在
+ *
+ * @param param
+ */
+ @Override
+ @XxlJob("blackUserSyncJob")
+ public ReturnT execute(String param) throws Exception {
+ List saasBlackWhiteLists;
+ // 身份证号不为空,多条以“,”分割
+ if(StringUtils.isNotBlank(param)){
+ List idCards = Arrays.stream(param.split(",")).collect(Collectors.toList());
+ ArrayList models = Lists.newArrayList(BlackModuleEnum.GXJG_BLACKUSER_WORKER, BlackModuleEnum.GXJG_BLACKUSER_TEAMLEADER, BlackModuleEnum.GXJG_BLACKUSER_EMPLOYEE);
+ BlackListReq req = new BlackListReq();
+ req.setModules(models);
+ req.setType(ListTypeEnum.BLACK_LIST);
+ HashMap map = Maps.newHashMap();
+ map.put("userIdCard", idCards);
+ req.setParam(map);
+ saasBlackWhiteLists = blackAndWhiteListService.listModuleBlackUser(req);
+ }else{
+ saasBlackWhiteLists = blackAndWhiteListService.listModuleBlackUser();
+ if(CollectionUtil.isEmpty(saasBlackWhiteLists)){
+ log.info("没有查到指定的黑名单人员数据");
+ return ReturnT.SUCCESS;
+ }
+ }
+ Map> modulBlackMap = saasBlackWhiteLists.stream().collect(Collectors.groupingBy(SaasBlackWhiteList::getModule));
+ modulBlackMap.forEach((module, blackList) -> {
+ log.info("syncRockerMQ module:{} ,blackList.size:{}" ,module, blackList.size());
+
+ BlackModuleEnum blackModuleEnum = BlackModuleEnum.getByValue(module);
+ MQEventEnum event = MQEventEnum.getByName(blackModuleEnum.name());
+
+ ArrayList