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> sends = Lists.newArrayList(); + blackList.forEach(item -> sends.add(item.getParam())); + String jsonStr = JSONUtil.toJsonStr(sends); + if(Objects.nonNull(blackModuleEnum) && Objects.nonNull(event)){ + BlackProducer.send(event, jsonStr); + } + }); + 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..5e38379b --- /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_"+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..3a439d73 --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/producer/BlackProducer.java @@ -0,0 +1,42 @@ +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, String data) { + if(mqEventEnum == null){ + throw new ServiceException("无法正确发送mq: mqEventEnum不能为空"); + } + //生产消息 + eventProducer.send(Event.builder() + .shardingKey("0") + .targetId("0") + .targetType(mqEventEnum.getModel()) + .eventCode(mqEventEnum.getEventCode()) + .eventModule(mqEventEnum.getModel()) + .eventName(mqEventEnum.getTag()) + .operatorId(null) + .data(data) + .build()); + } + + @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..0378df96 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,12 +1,13 @@ 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; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -27,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); @@ -36,4 +37,22 @@ public interface BlackAndWhiteListService { Boolean platformSync(BlackAndWhiteListPlatformSyncReq req); Long internalSync(BlackAndWhiteListInternalSyncReq req); + + List listModuleBlackUser(); + + /** + * 多模块查询 + * @param req + * @return + */ + Boolean isInBlackListExist(BlackListReq req); + + /** + * 多模块查询 + * @param req + * @return + */ + List isInBlackListExistList(BlackListReq req); + + List listModuleBlackUser(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 42c6b42f..3b5a0d95 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,10 +2,12 @@ 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.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; @@ -13,7 +15,6 @@ import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListRepository; 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; @@ -71,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); @@ -111,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); } @@ -221,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) @@ -376,4 +377,30 @@ 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)); + } + + @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); + } + + @Override + public List listModuleBlackUser(BlackListReq req){ + // 同步到RockerMQ + return blackAndWhiteListRepository.blackWhiteLists(req); + } } \ 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/java/cn/axzo/nanopart/NanopartApplication.java b/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java index 63d7b540..521bb1b8 100644 --- a/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java +++ b/nanopart-server/src/main/java/cn/axzo/nanopart/NanopartApplication.java @@ -1,7 +1,6 @@ package cn.axzo.nanopart; import cn.axzo.nanopart.config.RocketMQEventConfiguration; -import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,7 +8,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.Import; -@Slf4j @MapperScan(value = {"cn.axzo.**.mapper"}) @SpringBootApplication @EnableFeignClients(basePackages = { diff --git a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java index 16fa111d..09721551 100644 --- a/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java +++ b/op/op-server/src/main/java/cn/axzo/nanopart/server/service/impl/OpMessageConfigServiceImpl.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; import java.util.Collections; import java.util.List; import java.util.Map; @@ -36,7 +37,7 @@ public class OpMessageConfigServiceImpl extends ServiceImpl