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/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-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/dao/mapper/BlackAndWhiteListMapper.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListMapper.java
index e1196f79..73a06d46 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,16 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface BlackAndWhiteListMapper extends BaseMapper {
+
+ /**
+ * 获取getField中字段的值
+ *
+ * @param type
+ * @param getField 获取json中指定字段
+ * @param modules
+ * @return
+ */
+ List getParamValue(@Param("type") Integer type,
+ @Param("getField") String getField,
+ @Param("modules") List modules);
}
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..d2b7fa8d 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
@@ -6,16 +6,15 @@ import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
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 +126,20 @@ 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();
+ }
}
\ No newline at end of file
diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BaseJobHandler.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BaseJobHandler.java
new file mode 100644
index 00000000..2b5ed1d7
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BaseJobHandler.java
@@ -0,0 +1,22 @@
+package cn.axzo.nanopart.server.job;
+
+import cn.azxo.framework.common.logger.JobLoggerTemplate;
+import com.xxl.job.core.biz.model.ReturnT;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author zr
+ * @Date 2024/3/20 16:28
+ * @Description
+ **/
+public abstract class BaseJobHandler {
+
+ @Resource(name = "jobLoggerTemplate")
+ protected JobLoggerTemplate jobLoggerTemplate;
+
+ /**
+ * 定时任务执行逻辑
+ */
+ public abstract ReturnT execute(String param) throws Exception;
+}
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..15199e53
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/BlackUserSyncJob.java
@@ -0,0 +1,50 @@
+package cn.axzo.nanopart.server.job;
+
+import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum;
+import cn.axzo.nanopart.api.constant.enums.MQEventEnum;
+import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
+import cn.axzo.nanopart.server.mq.producer.BlackProducer;
+import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
+import com.xxl.job.core.biz.model.ReturnT;
+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.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 BaseJobHandler{
+
+ @Resource
+ private BlackAndWhiteListService blackAndWhiteListService;
+ /**
+ * 定时任务执行逻辑
+ *
+ * @param param
+ */
+ @Override
+ @XxlJob("blackUserSyncJob")
+ public ReturnT execute(String param) throws Exception {
+ List saasBlackWhiteLists = blackAndWhiteListService.listModuleBlackUser();
+ 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());
+ if(Objects.nonNull(blackModuleEnum) && Objects.nonNull(event)){
+ BlackProducer.sendBatch(event, blackList);
+ }
+ });
+ return ReturnT.SUCCESS;
+ }
+}
diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/RocketMQEventConfiguration.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/RocketMQEventConfiguration.java
new file mode 100644
index 00000000..8fc658ba
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/RocketMQEventConfiguration.java
@@ -0,0 +1,50 @@
+package cn.axzo.nanopart.server.mq;
+
+import cn.axzo.framework.rocketmq.EventProducer;
+import cn.axzo.framework.rocketmq.RocketMQEventProducer;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author zr
+ * @Date 2024/3/21 14:12
+ * @Description
+ **/
+@Slf4j
+@Component
+public class RocketMQEventConfiguration {
+
+ @Value("${spring.profiles.active}")
+ private String profileActivity;
+ private final String serviceName = "nanopart";
+ private final String topic = "nanopart";
+
+ @Bean
+ public RocketMQTemplate ser(){
+ return new RocketMQTemplate();
+ }
+ @Bean
+ EventProducer eventProducer(RocketMQTemplate rocketMQTemplate) {
+ return new RocketMQEventProducer(rocketMQTemplate,
+ serviceName,
+ serviceName,
+ EventProducer.Context.builder()
+ .meta(RocketMQEventProducer.RocketMQMessageMeta.builder()
+ .topic(getTopic(topic))
+ .build())
+ .build(),
+ null
+ );
+ }
+
+ private String getTopic(String topic) {
+ if (!StringUtils.isEmpty(topic)) {
+ topic = topic + "_" + profileActivity;
+ }
+ return topic;
+ }
+}
diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/producer/BlackProducer.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/producer/BlackProducer.java
new file mode 100644
index 00000000..b5aef2ce
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/producer/BlackProducer.java
@@ -0,0 +1,59 @@
+package cn.axzo.nanopart.server.mq.producer;
+
+import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
+import cn.axzo.framework.domain.ServiceException;
+import cn.axzo.framework.rocketmq.Event;
+import cn.axzo.framework.rocketmq.EventProducer;
+import cn.axzo.nanopart.api.constant.enums.MQEventEnum;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class BlackProducer implements InitializingBean {
+ private static EventProducer> eventProducer;
+
+ public static void send(MQEventEnum mqEventEnum, BaseEntity> baseEntity, String operatorId){
+ log.info(JSON.toJSONString(baseEntity));
+ if(mqEventEnum == null){
+ throw new ServiceException("无法正确发送mq: mqEventEnum不能为空");
+ }
+ if(baseEntity == null){
+ log.error("消息实体为空不能发送mq mqEventEnum {}", mqEventEnum);
+ return;
+ }
+ if(baseEntity.getId() == null){
+ throw new ServiceException("无法正确发送mq: 主健id不能为空");
+ }
+ //生产消息
+ eventProducer.send(Event.builder()
+ .shardingKey(String.valueOf(baseEntity.getId()))
+ .targetId(String.valueOf(baseEntity.getId()))
+ .targetType(mqEventEnum.getModel())
+ .eventCode(new Event.EventCode(mqEventEnum.getModel(), mqEventEnum.getTag()))
+ .eventModule(mqEventEnum.getModel())
+ .eventName(mqEventEnum.getTag())
+ .operatorId(operatorId)
+ .data(baseEntity)
+ .build());
+ }
+
+ public static void send(MQEventEnum mqEventEnum, BaseEntity> baseEntity){
+ send(mqEventEnum, baseEntity, null);
+ }
+
+ public static void sendBatch(MQEventEnum mqEventEnum, List extends BaseEntity>> baseEntities){
+ baseEntities.forEach(baseEntity -> send(mqEventEnum, baseEntity, null));
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ eventProducer = SpringUtil.getBean(EventProducer.class);
+ }
+
+}
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 a68301fb..081e3435 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
@@ -7,6 +7,7 @@ import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
+import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -36,4 +37,6 @@ public interface BlackAndWhiteListService {
Boolean platformSync(BlackAndWhiteListPlatformSyncReq req);
Long internalSync(BlackAndWhiteListInternalSyncReq req);
+
+ List listModuleBlackUser();
}
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 42c6b42f..21aec660 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
@@ -2,7 +2,9 @@ package cn.axzo.nanopart.server.service.impl;
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;
@@ -11,9 +13,9 @@ 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 cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
@@ -376,4 +378,12 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
}).collect(Collectors.toList());
return blackAndWhiteListRepository.saveBatch(list);
}
+
+
+ @Override
+ public List listModuleBlackUser(){
+ // 同步到RockerMQ
+ 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));
+ }
}
\ No newline at end of file
diff --git a/job/job-api/pom.xml b/job/job-api/pom.xml
index 2e63e4dd..99f9ba94 100644
--- a/job/job-api/pom.xml
+++ b/job/job-api/pom.xml
@@ -28,6 +28,10 @@
cn.axzo.basics
basics-common
+
+ com.baomidou
+ mybatis-plus-annotation
+
diff --git a/nanopart-server/src/main/resources/mapper/BlackAndWhiteListMapper.xml b/nanopart-server/src/main/resources/mapper/BlackAndWhiteListMapper.xml
new file mode 100644
index 00000000..52a4415a
--- /dev/null
+++ b/nanopart-server/src/main/resources/mapper/BlackAndWhiteListMapper.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file