From 1f6f58d6ea74231d61b47e71004b8e6a7ef4bfca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=8F?= Date: Thu, 22 Aug 2024 18:39:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-2649):=20=E5=A2=9E=E5=8A=A0=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E5=8E=86=E5=8F=B2=E8=A1=A8=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?job=E5=AE=9A=E6=9C=9F=E5=BD=92=E6=A1=A3=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/entity/SaasBlackWhiteListHistory.java | 61 +++++++++++++++ .../BlackAndWhiteListHistoryMapper.java | 10 +++ .../dao/mapper/BlackAndWhiteListMapper.java | 3 - .../BlackAndWhiteListHistoryRepository.java | 14 ++++ .../server/job/ArchiveBlackWhiteListJob.java | 75 +++++++++++++++++++ 5 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/entity/SaasBlackWhiteListHistory.java create mode 100644 black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListHistoryMapper.java create mode 100644 black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListHistoryRepository.java create mode 100644 black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/ArchiveBlackWhiteListJob.java diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/entity/SaasBlackWhiteListHistory.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/entity/SaasBlackWhiteListHistory.java new file mode 100644 index 00000000..13f06e91 --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/entity/SaasBlackWhiteListHistory.java @@ -0,0 +1,61 @@ +package cn.axzo.nanopart.server.dao.entity; + + +import cn.axzo.pokonyan.config.mybatisplus.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.Date; +import java.util.Map; + +/** + * @author: chenwenjian + * @date: 2023/8/11 15:19 + * @description: 黑白名单表对应实体 + * @modifiedBy: + * @version: 1.0 + */ +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +@TableName(value = "saas_black_white_list_history", autoResultMap = true) +public class SaasBlackWhiteListHistory extends BaseEntity { + + private Integer type; + + /** + * 模块名 + */ + private String module; + + /** + * 参数 + */ + @TableField(value = "param", typeHandler = JacksonTypeHandler.class) + private Map param; + + /** + * 创建时间 + */ + private Date originCreateAt; + + /** + * 修改时间 + */ + private Date originUpdateAt; + + private Long originId; + + private Long createBy; + + private Long updateBy; + +} diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListHistoryMapper.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListHistoryMapper.java new file mode 100644 index 00000000..ca9e48f6 --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/mapper/BlackAndWhiteListHistoryMapper.java @@ -0,0 +1,10 @@ +package cn.axzo.nanopart.server.dao.mapper; + +import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteListHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BlackAndWhiteListHistoryMapper extends BaseMapper { + +} 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 fca0da3c..de3b9bd6 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,9 +3,6 @@ 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 diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListHistoryRepository.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListHistoryRepository.java new file mode 100644 index 00000000..6aebd7db --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/dao/repository/BlackAndWhiteListHistoryRepository.java @@ -0,0 +1,14 @@ +package cn.axzo.nanopart.server.dao.repository; + +import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteListHistory; +import cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListHistoryMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +@Slf4j +@Repository +@RequiredArgsConstructor +public class BlackAndWhiteListHistoryRepository extends ServiceImpl { +} \ No newline at end of file diff --git a/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/ArchiveBlackWhiteListJob.java b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/ArchiveBlackWhiteListJob.java new file mode 100644 index 00000000..7fbef498 --- /dev/null +++ b/black-list/black-list-service/src/main/java/cn/axzo/nanopart/server/job/ArchiveBlackWhiteListJob.java @@ -0,0 +1,75 @@ +package cn.axzo.nanopart.server.job; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; +import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteListHistory; +import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListHistoryRepository; +import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListRepository; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.IJobHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 定时归档已删除的黑白名单 + */ +@Slf4j +@Component +public class ArchiveBlackWhiteListJob extends IJobHandler { + private static final String LIMIT_SUFFIX = " limit 200 "; + @Autowired + private BlackAndWhiteListRepository repository; + @Autowired + private BlackAndWhiteListHistoryRepository historyRepository; + + /** + * 定时任务执行逻辑 + * + * @param param + */ + @Override + @Transactional(rollbackFor = Throwable.class) + @XxlJob("archiveBlackWhiteListJob") + public ReturnT execute(String param) throws Exception { + log.info("archiveBlackWhiteListJob start."); + XxlJobLogger.log("archiveBlackWhiteListJob start."); + long offset = 0L; + long totalCount = 0L; + while (true) { + List list = repository.lambdaQuery() + .ne(SaasBlackWhiteList::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .gt(SaasBlackWhiteList::getId, offset) + .orderByAsc(SaasBlackWhiteList::getId) + .last(LIMIT_SUFFIX) + .list(); + if (list.isEmpty()) { + break; + } + List histories = list.stream().map(e -> SaasBlackWhiteListHistory.builder() + .type(e.getType()) + .module(e.getModule()) + .param(e.getParam()) + .originId(e.getId()) + .originCreateAt(e.getCreateAt()) + .originUpdateAt(e.getUpdateAt()) + .createBy(e.getCreateBy()) + .updateBy(e.getUpdateBy()) + .build()) + .collect(Collectors.toList()); + repository.deleteByIds(list.stream().map(SaasBlackWhiteList::getId).collect(Collectors.toSet())); + historyRepository.saveBatch(histories); + totalCount += list.size(); + offset = list.get(list.size() - 1).getId(); + } + log.info("archiveBlackWhiteListJob end. totalCount = {}", totalCount); + XxlJobLogger.log("archiveBlackWhiteListJob end. totalCount = " + totalCount); + return ReturnT.SUCCESS; + } +}