feat(REQ-2040): 同步逻辑调整,采用全量覆盖
This commit is contained in:
parent
85ae5531f3
commit
632b5b579d
@ -92,7 +92,7 @@ public interface BlackAndWhiteListApi {
|
||||
/**
|
||||
* 平台同步黑白名单
|
||||
* <p>
|
||||
* 每次最多同步1000条记录且整体上同步策略采用增量更新策略,
|
||||
* 每次最多同步1000条记录且整体上同步策略采用全量覆盖策略
|
||||
* 若总记录数超过1000条请自行分片多次调用
|
||||
* </p>
|
||||
*
|
||||
|
||||
@ -6,6 +6,7 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
@ -45,10 +46,11 @@ public class BlackAndWhiteListPlatformSyncReq {
|
||||
private List<Map<String, Object>> params;
|
||||
|
||||
/**
|
||||
* 同步时使用的业务唯一字段名,例:username
|
||||
* 分片号,从1开始,默认是1,若等于1,则先删除所有上次同步的名单,然后新增本次的名单,若大于1时,则直接新增到黑白名单中
|
||||
*/
|
||||
@NotBlank(message = "同步时使用的业务唯一字段名")
|
||||
private String businessUniqueField;
|
||||
@Min(value = 1, message = "分片号必须大于1")
|
||||
@NotNull(message = "分片大小不能为空")
|
||||
private Long fragment = 1L;
|
||||
|
||||
/**
|
||||
* 是否同步至登录黑名单
|
||||
|
||||
@ -5,7 +5,11 @@ import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -16,7 +20,11 @@ import java.util.Map;
|
||||
* @modifiedBy:
|
||||
* @version: 1.0
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
@TableName(value = "saas_black_white_list",autoResultMap = true)
|
||||
public class SaasBlackWhiteList extends BaseEntity<SaasBlackWhiteList> {
|
||||
|
||||
|
||||
@ -173,29 +173,17 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
|
||||
if (req.getParams().size() > fragmentSize) {
|
||||
throw new ServiceException("请主动进行分片多次同步,单次同步数小于" + fragmentSize + "条数据");
|
||||
}
|
||||
// 存入本次同步的黑/白名单记录
|
||||
req.getParams().forEach(param -> {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put(req.getBusinessUniqueField(), param.get(req.getBusinessUniqueField()));
|
||||
List<BlackAndWhiteListResp> detail = detail(BlackAndWhiteListReq.builder()
|
||||
.type(req.getType())
|
||||
.module(req.getModule())
|
||||
.param(map)
|
||||
.build());
|
||||
// 该记录原来不存在,即未同步过,直接新增一条
|
||||
if (detail.size() == 0) {
|
||||
create(BlackAndWhiteListReq.builder()
|
||||
.type(req.getType())
|
||||
.module(req.getModule())
|
||||
.param(param)
|
||||
.build());
|
||||
} else if (detail.size() == 1) {
|
||||
updateParamById(detail.get(0).getId(), param);
|
||||
} else {
|
||||
log.warn("指定唯一字段:{},不唯一记录:{}", req.getBusinessUniqueField(), JSONUtil.toJsonStr(detail));
|
||||
throw new ServiceException("请检查指定的【业务唯一字段名:" + req.getBusinessUniqueField() + "】是否正确,记录中存在不唯一值");
|
||||
}
|
||||
});
|
||||
// 第一个分片,需要先删除所有对应模块的名单,再新增
|
||||
if (req.getFragment() == 1 ){
|
||||
deleteByModule(req.getType(),req.getModule());
|
||||
}
|
||||
// 新增
|
||||
List<SaasBlackWhiteList> 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);
|
||||
// 同步至登录黑名单
|
||||
if (Objects.nonNull(req.getIsSyncLogin()) && req.getIsSyncLogin()){
|
||||
internalSync(BlackAndWhiteListInternalSyncReq.builder()
|
||||
@ -212,7 +200,7 @@ public class BlackAndWhiteListServiceImpl implements BlackAndWhiteListService {
|
||||
.sourceFields(Collections.singletonList(req.getSyncRegisterField()))
|
||||
.targetModule(BlackAndWhiteListConstant.OU_REGISTER_BLACK_LIST).build());
|
||||
}
|
||||
return true;
|
||||
return saved;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user