feat(REQ-2649): 增加名单历史表,增加job定期归档历史数据 step2 处理逻辑删除插件导致的查询问题

This commit is contained in:
周敏 2024-08-23 10:54:04 +08:00
parent 1f6f58d6ea
commit ce87db5b3e
3 changed files with 63 additions and 12 deletions

View File

@ -3,6 +3,10 @@ package cn.axzo.nanopart.server.dao.mapper;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
/** /**
* @author chenwenjian * @author chenwenjian
@ -14,4 +18,19 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface BlackAndWhiteListMapper extends BaseMapper<SaasBlackWhiteList> { public interface BlackAndWhiteListMapper extends BaseMapper<SaasBlackWhiteList> {
/**
* 查询已经删除的记录
*
* @param startId
* @param limit
* @return
*/
List<SaasBlackWhiteList> listDeleted(@Param("startId") Long startId, @Param("limit") Long limit);
/**
* 物理删除已经删除的记录
*
* @param ids
*/
void absoluteDeletedByIds(@Param("ids") Collection<Long> ids);
} }

View File

@ -1,10 +1,9 @@
package cn.axzo.nanopart.server.job; 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.SaasBlackWhiteList;
import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteListHistory; import cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteListHistory;
import cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListMapper;
import cn.axzo.nanopart.server.dao.repository.BlackAndWhiteListHistoryRepository; 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.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -25,7 +24,7 @@ import java.util.stream.Collectors;
public class ArchiveBlackWhiteListJob extends IJobHandler { public class ArchiveBlackWhiteListJob extends IJobHandler {
private static final String LIMIT_SUFFIX = " limit 200 "; private static final String LIMIT_SUFFIX = " limit 200 ";
@Autowired @Autowired
private BlackAndWhiteListRepository repository; private BlackAndWhiteListMapper mapper;
@Autowired @Autowired
private BlackAndWhiteListHistoryRepository historyRepository; private BlackAndWhiteListHistoryRepository historyRepository;
@ -40,15 +39,10 @@ public class ArchiveBlackWhiteListJob extends IJobHandler {
public ReturnT<String> execute(String param) throws Exception { public ReturnT<String> execute(String param) throws Exception {
log.info("archiveBlackWhiteListJob start."); log.info("archiveBlackWhiteListJob start.");
XxlJobLogger.log("archiveBlackWhiteListJob start."); XxlJobLogger.log("archiveBlackWhiteListJob start.");
long offset = 0L; long startId = 0L;
long totalCount = 0L; long totalCount = 0L;
while (true) { while (true) {
List<SaasBlackWhiteList> list = repository.lambdaQuery() List<SaasBlackWhiteList> list = mapper.listDeleted(startId, 200L);
.ne(SaasBlackWhiteList::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.gt(SaasBlackWhiteList::getId, offset)
.orderByAsc(SaasBlackWhiteList::getId)
.last(LIMIT_SUFFIX)
.list();
if (list.isEmpty()) { if (list.isEmpty()) {
break; break;
} }
@ -63,10 +57,10 @@ public class ArchiveBlackWhiteListJob extends IJobHandler {
.updateBy(e.getUpdateBy()) .updateBy(e.getUpdateBy())
.build()) .build())
.collect(Collectors.toList()); .collect(Collectors.toList());
repository.deleteByIds(list.stream().map(SaasBlackWhiteList::getId).collect(Collectors.toSet())); mapper.absoluteDeletedByIds(list.stream().map(SaasBlackWhiteList::getId).collect(Collectors.toSet()));
historyRepository.saveBatch(histories); historyRepository.saveBatch(histories);
totalCount += list.size(); totalCount += list.size();
offset = list.get(list.size() - 1).getId(); startId = list.get(list.size() - 1).getId();
} }
log.info("archiveBlackWhiteListJob end. totalCount = {}", totalCount); log.info("archiveBlackWhiteListJob end. totalCount = {}", totalCount);
XxlJobLogger.log("archiveBlackWhiteListJob end. totalCount = " + totalCount); XxlJobLogger.log("archiveBlackWhiteListJob end. totalCount = " + totalCount);

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.axzo.nanopart.server.dao.mapper.BlackAndWhiteListMapper">
<resultMap type="cn.axzo.nanopart.server.dao.entity.SaasBlackWhiteList" id="SaasBlackWhiteListResultMap">
<result property="id" column="id"/>
<result property="isDelete" column="is_delete"/>
<result property="createAt" column="create_at"/>
<result property="updateAt" column="update_at"/>
<result property="type" column="type"/>
<result property="module" column="module"/>
<result property="createBy" column="create_by"/>
<result property="updateBy" column="update_by"/>
<result property="param" column="param" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap>
<select id="listDeleted" resultMap="SaasBlackWhiteListResultMap">
select *
from `saas_black_white_list`
where is_delete &gt; 0
and id &gt; #{startId}
order by id asc limit #{limit}
</select>
<delete id="absoluteDeletedByIds">
DELETE
FROM
`saas_black_white_list`
WHERE
`id` in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
AND `is_delete` &gt; 0
</delete>
</mapper>