diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/job/CleanHistoryJob.java b/backend/services/system-setting/src/main/java/io/metersphere/system/job/CleanHistoryJob.java index cd580c68ce..b73a74631e 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/job/CleanHistoryJob.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/job/CleanHistoryJob.java @@ -6,6 +6,7 @@ import io.metersphere.sdk.constants.ParamConstants; import io.metersphere.sdk.domain.OperationLogBlobExample; import io.metersphere.sdk.mapper.OperationLogBlobMapper; import io.metersphere.sdk.util.LogUtils; +import io.metersphere.sdk.util.SubListUtils; import io.metersphere.system.domain.SystemParameter; import io.metersphere.system.mapper.BaseOperationHistoryMapper; import io.metersphere.system.mapper.BaseOperationLogMapper; @@ -14,7 +15,6 @@ import jakarta.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -58,29 +58,21 @@ public class CleanHistoryJob { private void doCleanupHistory(int limit) { try { //变更历史处理 - List sourceIds = baseOperationHistoryMapper.selectSourceIds(); - int size = 100; - List> batchList = splitList(sourceIds, size); - batchList.forEach(batch -> cleanupHistory(batch, limit)); + List sourceIds = baseOperationHistoryMapper.selectSourceIds(limit); + SubListUtils.dealForSubList(sourceIds, 100, subList -> { + cleanupHistory(subList, limit); + }); } catch (Exception e) { LogUtils.error(e); } } - private List> splitList(List list, int size) { - List> batchList = new ArrayList<>(); - for (int i = 0; i < list.size(); i += size) { - batchList.add(list.subList(i, Math.min(i + size, list.size()))); - } - return batchList; - } - public void cleanupHistory(List batch, int limit) { batch.forEach(sourceId -> { List ids = baseOperationHistoryMapper.selectIdsBySourceId(sourceId, limit); if (CollectionUtils.isNotEmpty(ids)) { - baseOperationHistoryMapper.deleteByIds(sourceId, ids); + baseOperationHistoryMapper.deleteBySourceId(sourceId, ids); List logIds = baseOperationLogMapper.selectIdByHistoryIds(ids); ids.removeAll(logIds); if (CollectionUtils.isNotEmpty(ids)) { diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.java b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.java index 71b9d60184..6d0e7be8eb 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.java @@ -9,11 +9,11 @@ import java.util.List; public interface BaseOperationHistoryMapper { - List selectSourceIds(); + List selectSourceIds(@Param("limit") int limit); List selectIdsBySourceId(@Param("sourceId") String sourceId, @Param("limit") int limit); - void deleteByIds(@Param("sourceId") String sourceId, @Param("ids") List ids); + void deleteBySourceId(@Param("sourceId") String sourceId, @Param("ids") List ids); List list(@Param("request") OperationHistoryRequest request); diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.xml b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.xml index 404efb0a07..5b6035103f 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.xml +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/BaseOperationHistoryMapper.xml @@ -4,7 +4,7 @@ @@ -12,7 +12,7 @@ select id from operation_history where source_id = #{sourceId} ORDER BY create_time DESC LIMIT #{limit} - + DELETE FROM operation_history WHERE source_id = #{sourceId} and id not in #{id}