diff --git a/black-list/black-list-api/pom.xml b/black-list/black-list-api/pom.xml
index c49e653b..4e21bec5 100644
--- a/black-list/black-list-api/pom.xml
+++ b/black-list/black-list-api/pom.xml
@@ -34,5 +34,12 @@
org.springframework.cloud
spring-cloud-context
+
+ cn.axzo.foundation
+ dao-support-lib
+ 2.0.0-SNAPSHOT
+
+ provided
+
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 fc232069..b66b5bff 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
@@ -1,10 +1,11 @@
package cn.axzo.nanopart.api;
+import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
-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.BlackAndWhiteListBatchCreateReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListPageReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
@@ -17,14 +18,12 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
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;
-import java.io.IOException;
import java.util.List;
/**
@@ -46,6 +45,15 @@ public interface BlackAndWhiteListApi {
@PostMapping("api/black-white-list/create")
ApiResult create(@RequestBody @Validated BlackAndWhiteListReq req);
+ /**
+ * 批量创建黑名单或白名单
+ *
+ * @param req
+ * @return 记录id
+ */
+ @PostMapping("api/black-white-list/batch-create")
+ ApiResult batchCreate(@RequestBody @Validated BlackAndWhiteListBatchCreateReq req);
+
/**
* 删除黑名单或白名单
*
@@ -73,6 +81,15 @@ public interface BlackAndWhiteListApi {
@PostMapping("api/black-white-list/query")
ApiResult> detail(@RequestBody @Validated BlackAndWhiteListReq req);
+ /**
+ * 分页查询黑名单
+ *
+ * @param req 包含type,module,params三个字段
+ * @return 黑白名单记录列表
+ */
+ @PostMapping("/api/black-white-list/page")
+ ApiPageResult page(@RequestBody @Validated BlackAndWhiteListPageReq req);
+
/**
* 判断指定模块、指定参数记录是否在黑名单或白名单中
*
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
index 30f03477..74c50494 100644
--- 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
@@ -44,7 +44,10 @@ public enum BlackModuleEnum {
* 企业黑名单
*/
GXJG_BLACKCOMPANY("gxjg-blackcompany","企业黑名单"),
-
+ /**
+ * 项目人员黑名单
+ */
+ PROJECT_PERSON_BLACK_LIST("project-person-black-list", "项目人员黑名单")
;
private final String value;
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
index 347d15b9..93d004ff 100644
--- 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
@@ -17,7 +17,8 @@ public enum MQEventEnum {
GXJG_BLACKUSER_TEAMLEADER("plat-blacklist", "plat-blackuser-teamleader-list", "班组管理人员黑名单"),
GXJG_BLACKUSER_EMPLOYEE("plat-blacklist", "plat-blackuser-employee-list", "项目管理人员黑名单"),
-
+ // 统一消息
+ BLACK_WHITE_LIST_UPSERTED("nanopart", "black-white-list-upserted", "黑名单变更")
;
private final String model;
private final String tag;
diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListBatchCreateReq.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListBatchCreateReq.java
new file mode 100644
index 00000000..25c7e9a8
--- /dev/null
+++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListBatchCreateReq.java
@@ -0,0 +1,22 @@
+package cn.axzo.nanopart.api.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class BlackAndWhiteListBatchCreateReq {
+ @NotEmpty(message = "名单不能为空")
+ private List list;
+ /**
+ * 如果有失败的,回滚所有。默认为true,如果为false,则不回滚,且继续处理其他的名单
+ */
+ private Boolean rollbackWhileOneFailed;
+}
diff --git a/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListPageReq.java b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListPageReq.java
new file mode 100644
index 00000000..4e505a2f
--- /dev/null
+++ b/black-list/black-list-api/src/main/java/cn/axzo/nanopart/api/request/BlackAndWhiteListPageReq.java
@@ -0,0 +1,66 @@
+package cn.axzo.nanopart.api.request;
+
+import cn.axzo.foundation.dao.support.mysql.MybatisPlusOperatorProcessor;
+import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
+import cn.axzo.foundation.dao.support.wrapper.Operator;
+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;
+import java.util.Set;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BlackAndWhiteListPageReq {
+
+ /**
+ * 名单类型,0为黑名单,1为白名单
+ */
+ @NotNull(message = "名单类型错误")
+ @CriteriaField(ignore = true)
+ private ListTypeEnum type;
+
+ /**
+ * 模块名,自主定义,例:cms-login
+ */
+ @NotBlank(message = "模块名不能为空")
+ @CriteriaField
+ private String module;
+
+ @CriteriaField(field = "id", operator = Operator.IN)
+ private Set ids;
+
+ /**
+ * 限制条件,如:phone:13698745673
+ */
+ @CriteriaField(operator = Operator.JSON_QUERY, field = "param")
+ private List paramQueries;
+
+ /**
+ * 页码
+ */
+ @CriteriaField(ignore = true)
+ private Long pageNumber;
+
+ /**
+ * 每页条数
+ */
+ @CriteriaField(ignore = true)
+ private Long pageSize;
+
+ public Long getPageNumber() {
+ return pageNumber == null || pageNumber < 1L ? 1L : pageNumber;
+ }
+
+ public Long getPageSize() {
+ return pageSize == null || pageSize < 1L ? 20L : pageSize;
+ }
+}
diff --git a/black-list/black-list-service/pom.xml b/black-list/black-list-service/pom.xml
index 7c00fa03..c6e23a93 100644
--- a/black-list/black-list-service/pom.xml
+++ b/black-list/black-list-service/pom.xml
@@ -19,6 +19,10 @@
cn.axzo.framework
axzo-mybatisplus-spring-boot-starter
+
+ cn.axzo.framework
+ axzo-web-spring-boot-starter
+
com.alibaba
@@ -46,5 +50,10 @@
xxl-job-core
2.2.0
+
+ cn.axzo.foundation
+ dao-support-lib
+ 2.0.0-SNAPSHOT
+
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 7bd8c92c..6802519b 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
@@ -1,11 +1,14 @@
package cn.axzo.nanopart.server.controller;
+import cn.axzo.framework.domain.web.result.ApiPageResult;
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.BlackAndWhiteListBatchCreateReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListPageReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
@@ -13,6 +16,7 @@ import cn.axzo.nanopart.api.response.BlackAndWhiteListExcelImportResp;
import cn.axzo.nanopart.api.response.BlackAndWhiteListResp;
import cn.axzo.nanopart.server.service.BlackAndWhiteListService;
import cn.hutool.json.JSONUtil;
+import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@@ -39,6 +43,12 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
return ApiResult.ok(blackAndWhiteListService.create(req));
}
+ @Override
+ public ApiResult batchCreate(BlackAndWhiteListBatchCreateReq req) {
+ blackAndWhiteListService.batchCreate(req);
+ return ApiResult.ok();
+ }
+
@Override
public ApiResult delete(BlackAndWhiteListReq req) {
return ApiResult.ok(blackAndWhiteListService.delete(req));
@@ -54,6 +64,11 @@ public class BlackAndWhiteListController implements BlackAndWhiteListApi {
return ApiResult.ok(blackAndWhiteListService.detail(req));
}
+ @Override
+ public ApiPageResult page(BlackAndWhiteListPageReq req) {
+ return ApiPageResult.ok(blackAndWhiteListService.page(req));
+ }
+
@Override
public ApiResult isInBlackOrWhiteList(BlackAndWhiteListReq req) {
return ApiResult.ok(blackAndWhiteListService.isInBlackListExist(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 82a8e3cd..d60aa513 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
@@ -1,25 +1,33 @@
package cn.axzo.nanopart.server.dao.repository;
-
import cn.axzo.basics.common.BeanMapper;
+import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
+import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
+import cn.axzo.framework.rocketmq.EventProducer;
import cn.axzo.nanopart.api.constant.enums.BlackModuleEnum;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListPageReq;
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.axzo.nanopart.server.mq.payload.BlackWhiteListUpsertedPayload;
+import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* @author: chenwenjian
@@ -34,13 +42,29 @@ import java.util.Set;
public class BlackAndWhiteListRepository extends ServiceImpl {
private final BlackAndWhiteListMapper blackAndWhiteListMapper;
+ private final EventProducer eventProducer;
+ @Transactional(rollbackFor = Throwable.class)
public Long create(BlackAndWhiteListReq req) {
SaasBlackWhiteList blackWhiteList = BeanMapper.copyBean(req, SaasBlackWhiteList.class, (req1, saasBlackWhiteList) -> saasBlackWhiteList.setType(req1.getType().getValue()));
blackAndWhiteListMapper.insert(blackWhiteList);
+ SaasBlackWhiteList saasBlackWhiteList = blackAndWhiteListMapper.selectById(blackWhiteList.getId());
+ // MQ
+ eventProducer.send(BlackWhiteListUpsertedPayload.from(saasBlackWhiteList, BlackWhiteListUpsertedPayload.OpType.ADD));
return blackWhiteList.getId();
}
+ @Transactional(rollbackFor = Throwable.class)
+ public boolean batchCreate(List list) {
+ boolean saved = saveBatch(list);
+ List insertIds = list.stream().map(BaseEntity::getId).collect(Collectors.toList());
+ List insertedLists = listByIds(insertIds);
+ insertedLists.stream().map(b -> BlackWhiteListUpsertedPayload.from(b, BlackWhiteListUpsertedPayload.OpType.ADD))
+ .forEach(eventProducer::send);
+ return saved;
+ }
+
+ @Transactional(rollbackFor = Throwable.class)
public Void delete(BlackAndWhiteListReq req) {
List blackWhiteLists = detail(req);
if (CollectionUtil.isNotEmpty(blackWhiteLists)) {
@@ -50,6 +74,9 @@ public class BlackAndWhiteListRepository extends ServiceImpl BlackWhiteListUpsertedPayload.from(b, BlackWhiteListUpsertedPayload.OpType.REMOVE))
+ .forEach(eventProducer::send);
});
}
return null;
@@ -65,6 +92,14 @@ public class BlackAndWhiteListRepository extends ServiceImpl page(BlackAndWhiteListPageReq req) {
+ QueryWrapper queryWrapper = QueryWrapperHelper.fromBean(req, SaasBlackWhiteList.class)
+ .eq(req.getType() != null, "type", req.getType().getValue())
+ .eq("is_delete", 0)
+ .orderByDesc("id");
+ return blackAndWhiteListMapper.selectPage(new Page<>(req.getPageNumber(), req.getPageSize()), queryWrapper);
+ }
+
private void buildQueryWrapper(QueryWrapper queryWrapper, Map params, String prefix) {
params.forEach((key, value) -> {
String fullKey = prefix.isEmpty() ? key : prefix + "." + key;
@@ -76,11 +111,19 @@ public class BlackAndWhiteListRepository extends ServiceImpl idSet) {
- return lambdaUpdate()
+ List toDeletes = list(lambdaUpdate()
+ .in(SaasBlackWhiteList::getId, idSet)
+ .eq(SaasBlackWhiteList::getIsDelete, TableIsDeleteEnum.NORMAL.value));
+ boolean result = lambdaUpdate()
.in(SaasBlackWhiteList::getId, idSet)
.set(SaasBlackWhiteList::getIsDelete, 1)
.update();
+ // MQ
+ toDeletes.stream().map(b -> BlackWhiteListUpsertedPayload.from(b, BlackWhiteListUpsertedPayload.OpType.REMOVE))
+ .forEach(eventProducer::send);
+ return result;
}
/**
@@ -90,28 +133,23 @@ public class BlackAndWhiteListRepository extends ServiceImpl toDeletes = list(lambdaUpdate()
+ .eq(SaasBlackWhiteList::getType, type)
+ .eq(SaasBlackWhiteList::getModule, module)
+ .eq(SaasBlackWhiteList::getIsDelete, TableIsDeleteEnum.NORMAL.value));
+
+ boolean result = lambdaUpdate()
.eq(SaasBlackWhiteList::getType, type)
.eq(SaasBlackWhiteList::getModule, module)
.eq(SaasBlackWhiteList::getIsDelete, 0)
.set(SaasBlackWhiteList::getIsDelete, 1)
.update();
- }
-
- /**
- * 更新名单参数
- *
- * @param id 名单id
- * @param param 名单参数
- * @return 更新结果,true:更新成功,false:更新失败
- */
- public boolean updateParamById(Long id, Map param) {
- return lambdaUpdate()
- .eq(SaasBlackWhiteList::getId, id)
- .eq(SaasBlackWhiteList::getIsDelete, 0)
- .set(SaasBlackWhiteList::getParam, JSONUtil.toJsonStr(param))
- .update();
+ // MQ
+ toDeletes.stream().map(b -> BlackWhiteListUpsertedPayload.from(b, BlackWhiteListUpsertedPayload.OpType.REMOVE))
+ .forEach(eventProducer::send);
+ return result;
}
/**
@@ -132,7 +170,7 @@ public class BlackAndWhiteListRepository extends ServiceImpl listByModule(Integer type, List modules) {
return lambdaQuery()
.eq(SaasBlackWhiteList::getType, type)
- .in(CollUtil.isNotEmpty(modules),SaasBlackWhiteList::getModule, modules)
+ .in(CollUtil.isNotEmpty(modules), SaasBlackWhiteList::getModule, modules)
.eq(SaasBlackWhiteList::getIsDelete, 0)
.list();
}
@@ -160,7 +198,7 @@ public class BlackAndWhiteListRepository extends ServiceImpl) value, fullKey);
- }else if(value instanceof List){
+ } else if (value instanceof List) {
queryWrapper.in("param->>'$." + fullKey + "'", ((List>) value).toArray());
} else {
queryWrapper.eq("param->>'$." + fullKey + "'", value);
diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/payload/BlackWhiteListUpsertedPayload.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/payload/BlackWhiteListUpsertedPayload.java
new file mode 100644
index 00000000..fbe34ece
--- /dev/null
+++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/mq/payload/BlackWhiteListUpsertedPayload.java
@@ -0,0 +1,66 @@
+package cn.axzo.nanopart.server.mq.payload;
+
+import cn.axzo.framework.rocketmq.Event;
+import cn.axzo.nanopart.api.constant.enums.MQEventEnum;
+import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.util.TypeUtils;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.Serializable;
+import java.util.Map;
+
+@Slf4j
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Builder
+public class BlackWhiteListUpsertedPayload implements Serializable {
+ private String module;
+ private Integer type;
+ private OpType opType;
+ private Long personId;
+ private Long workspaceId;
+ private Map param;
+
+ public static Event from(SaasBlackWhiteList saasBlackWhiteList, OpType opType) {
+ Map param = saasBlackWhiteList.getParam();
+ Long personId = getParam(param, "personId", Long.class);
+ Long workspaceId = getParam(param, "workspaceId", Long.class);
+ BlackWhiteListUpsertedPayload payload = BlackWhiteListUpsertedPayload.builder()
+ .type(saasBlackWhiteList.getType())
+ .module(saasBlackWhiteList.getModule())
+ .opType(opType)
+ .personId(personId)
+ .workspaceId(workspaceId)
+ .param(param)
+ .build();
+ return Event.builder()
+ .eventCode(MQEventEnum.BLACK_WHITE_LIST_UPSERTED.getEventCode())
+ // 目前数量不大,暂时以module作为shardingKey。后续可以调整为根据personId之类的
+ .shardingKey(saasBlackWhiteList.getModule())
+ .operatorId("-1")
+ .operatorType("-1")
+ .targetId(String.format("%s_%s", personId, workspaceId))
+ .targetType("personId_WorkspaceId")
+ .data(payload)
+ .build();
+ }
+
+ private static T getParam(Map param, String key, Class tClass) {
+ try {
+ return param == null ? null : TypeUtils.cast(param.get(key), tClass, ParserConfig.getGlobalInstance());
+ } catch (Throwable e) {
+ log.warn("BlackWhiteListUpsertedPayload getParam exception, return null, key = {}, param = {}", key, param, e);
+ return null;
+ }
+ }
+
+ public enum OpType {
+ ADD, REMOVE;
+ }
+}
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 0378df96..dc07cd04 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,13 +1,16 @@
package cn.axzo.nanopart.server.service;
import cn.axzo.nanopart.api.constant.enums.ListTypeEnum;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListBatchCreateReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListPageReq;
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 com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -22,7 +25,9 @@ import java.util.List;
*/
public interface BlackAndWhiteListService {
- Long create(BlackAndWhiteListReq req);
+ Long create(BlackAndWhiteListReq req);
+
+ void batchCreate(BlackAndWhiteListBatchCreateReq req);
Void delete(BlackAndWhiteListReq req);
@@ -55,4 +60,6 @@ public interface BlackAndWhiteListService {
List isInBlackListExistList(BlackListReq req);
List listModuleBlackUser(BlackListReq req);
+
+ IPage page(BlackAndWhiteListPageReq 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 3b5a0d95..8c7a11ac 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,7 +4,9 @@ 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.BlackAndWhiteListBatchCreateReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListInternalSyncReq;
+import cn.axzo.nanopart.api.request.BlackAndWhiteListPageReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListPlatformSyncReq;
import cn.axzo.nanopart.api.request.BlackAndWhiteListReq;
import cn.axzo.nanopart.api.request.BlackListReq;
@@ -18,12 +20,15 @@ import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
@@ -69,6 +74,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
* @return 记录id
*/
@Override
+ @Transactional(rollbackFor = Throwable.class)
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));
@@ -82,6 +88,22 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
return blackAndWhiteListRepository.create(req);
}
+ @Override
+ @Transactional(rollbackFor = Throwable.class)
+ public void batchCreate(BlackAndWhiteListBatchCreateReq req) {
+ req.getList().forEach(r -> {
+ try {
+ create(r);
+ } catch (Throwable e) {
+ log.warn("batchCreate, one item caught exception , msg={}, r = {}", e.getMessage(), r, e);
+ // 如果不忽略
+ if (BooleanUtils.isTrue(req.getRollbackWhileOneFailed())) {
+ throw e;
+ }
+ }
+ });
+ }
+
/**
* 删除指定条件的所有黑白名单记录
*
@@ -89,6 +111,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
* @return null
*/
@Override
+ @Transactional(rollbackFor = Throwable.class)
public Void delete(BlackAndWhiteListReq req) {
return blackAndWhiteListRepository.delete(req);
}
@@ -152,6 +175,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
* @return true-删除成功,false-删除失败
*/
@Override
+ @Transactional(rollbackFor = Throwable.class)
public Boolean deleteByIds(List ids) {
if (CollectionUtil.isNotEmpty(ids)) {
Set idSet = new HashSet<>(ids);
@@ -175,18 +199,18 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
throw new ServiceException("请主动进行分片多次同步,单次同步数小于" + fragmentSize + "条数据");
}
// 第一个分片,需要先删除所有对应模块的名单,再新增
- if (req.getFragment() == 1 ){
- deleteByModule(req.getType(),req.getModule());
+ if (req.getFragment() == 1) {
+ deleteByModule(req.getType(), req.getModule());
}
// 新增
List collect = req.getParams().stream().map(param -> SaasBlackWhiteList.builder()
- .type(req.getType().getValue())
- .module(req.getModule())
- .param(param)
- .build()).collect(Collectors.toList());
- boolean saved = blackAndWhiteListRepository.saveBatch(collect);
+ .type(req.getType().getValue())
+ .module(req.getModule())
+ .param(param)
+ .build()).collect(Collectors.toList());
+ boolean saved = blackAndWhiteListRepository.batchCreate(collect);
// 同步至登录黑名单
- if (Objects.nonNull(req.getIsSyncLogin()) && req.getIsSyncLogin()){
+ if (Objects.nonNull(req.getIsSyncLogin()) && req.getIsSyncLogin()) {
internalSync(BlackAndWhiteListInternalSyncReq.builder()
.type(req.getType())
.sourceModule(req.getModule())
@@ -194,12 +218,12 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
.targetModule(BlackAndWhiteListConstant.ALL_LOGIN).build());
}
// 同步至注册黑名单
- if (Objects.nonNull(req.getIsSyncRegister()) && req.getIsSyncRegister()){
+ if (Objects.nonNull(req.getIsSyncRegister()) && req.getIsSyncRegister()) {
internalSync(BlackAndWhiteListInternalSyncReq.builder()
- .type(req.getType())
- .sourceModule(req.getModule())
- .sourceFields(Collections.singletonList(req.getSyncRegisterField()))
- .targetModule(BlackAndWhiteListConstant.OU_REGISTER_BLACK_LIST).build());
+ .type(req.getType())
+ .sourceModule(req.getModule())
+ .sourceFields(Collections.singletonList(req.getSyncRegisterField()))
+ .targetModule(BlackAndWhiteListConstant.OU_REGISTER_BLACK_LIST).build());
}
return saved;
}
@@ -249,17 +273,6 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
return BeanMapper.copyList(blackAndWhiteListRepository.getListByModule(type.getValue(), module), BlackAndWhiteListResp.class);
}
- /**
- * 更新指定id的黑白名单记录
- *
- * @param id 记录id
- * @param param 记录参数
- * @return true-更新成功,false-更新失败
- */
- public boolean updateParamById(Long id, Map param) {
- return blackAndWhiteListRepository.updateParamById(id, param);
- }
-
/**
* 删除指定模块名的所有黑/白名单记录
*
@@ -375,32 +388,38 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
blackWhiteList.setParam(map);
return blackWhiteList;
}).collect(Collectors.toList());
- return blackAndWhiteListRepository.saveBatch(list);
+ return blackAndWhiteListRepository.batchCreate(list);
}
@Override
- public List listModuleBlackUser(){
+ 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){
+ public Boolean isInBlackListExist(BlackListReq req) {
List whiteLists = blackAndWhiteListRepository.blackWhiteLists(req);
return CollectionUtil.isNotEmpty(whiteLists);
}
@Override
- public List isInBlackListExistList(BlackListReq req){
+ public List isInBlackListExistList(BlackListReq req) {
List detail = blackAndWhiteListRepository.blackWhiteLists(req);
return BeanMapper.copyList(detail, BlackAndWhiteListResp.class);
}
@Override
- public List listModuleBlackUser(BlackListReq req){
+ public List listModuleBlackUser(BlackListReq req) {
// 同步到RockerMQ
return blackAndWhiteListRepository.blackWhiteLists(req);
}
+
+ @Override
+ public IPage page(BlackAndWhiteListPageReq req) {
+ IPage page = blackAndWhiteListRepository.page(req);
+ return page.convert(e -> BeanMapper.copyBean(e, BlackAndWhiteListResp.class));
+ }
}
\ No newline at end of file