REQ-2405: fix bugs

This commit is contained in:
yanglin 2024-04-30 17:24:45 +08:00
parent ffd688c7ad
commit 8a452b8439
5 changed files with 71 additions and 2 deletions

View File

@ -42,11 +42,11 @@ public class ReplaceInterceptor implements Interceptor {
private static final ThreadLocal<Replacement> LOCAL = new ThreadLocal<>();
public static void enableReplacement(Replacement replacement) {
public static void enable(Replacement replacement) {
LOCAL.set(replacement);
}
public static void disableReplacement() {
public static void disable() {
LOCAL.remove();
}
@ -67,6 +67,8 @@ public class ReplaceInterceptor implements Interceptor {
stmt = parser.parseSelect();
} else if (commandType == SqlCommandType.INSERT) {
stmt = parser.parseInsert();
} else if (commandType == SqlCommandType.DELETE) {
stmt = parser.parseDeleteStatement();
} else {
return invocation.proceed();
}

View File

@ -19,4 +19,12 @@ public enum Replacement {
private final String destTable;
private final boolean insertPreserveId;
public void run(Runnable runnable) {
ReplaceInterceptor.enable(this);
try {
runnable.run();
} finally {
ReplaceInterceptor.disable();
}
}
}

View File

@ -24,6 +24,7 @@ import java.util.List;
/*@Mapper*/
public interface MessageRecordMapper extends IterableMapper<MessageRecord> {
void deleteRecordsPhysically(@Param("ids") List<Long> ids);
List<MsgStatisticsDTO> statisticsMsg(@Param("bizType") Integer bizType,
@Param("personId") Long personId,

View File

@ -2,6 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.axzo.msg.center.dal.mapper.MessageRecordMapper">
<delete id="deleteRecordsPhysically">
DELETE FROM message_record
WHERE id IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
<select id="statisticsMsg"
resultType="cn.axzo.msg.center.domain.dto.MsgStatisticsDTO">
select type,

View File

@ -0,0 +1,50 @@
package cn.axzo.msg.center.dal.mapper;
import cn.axzo.msg.center.MsgCenterApplication;
import cn.axzo.msg.center.dal.MessageRecordDao;
import cn.axzo.msg.center.domain.entity.MessageRecord;
import cn.axzo.msg.center.message.service.todo.mybatis.Replacement;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Iterator;
import java.util.List;
import static cn.axzo.msg.center.inside.notices.utils.Queries.query;
import static java.util.stream.Collectors.toList;
/**
* @author yanglin
*/
@SpringBootTest(classes = MsgCenterApplication.class)
@RequiredArgsConstructor(onConstructor_ = @Autowired)
class MessageRecordMapperTest {
private final MessageRecordMapper messageRecordMapper;
private final MessageRecordDao messageRecordDao;
@Test
void tryMigrate() {
Iterable<Page<MessageRecord>> pages = messageRecordMapper
.iterateBath(10, query(MessageRecord.class)
.orderByAsc(MessageRecord::getId));
Iterator<Page<MessageRecord>> iterator = pages.iterator();
// 试试前5页数据测试一下
for (int i = 0; i < 5 && iterator.hasNext(); i++) {
Page<MessageRecord> page = iterator.next();
Replacement.TO_MESSAGE_RECORD_COLD.run(() -> {
List<MessageRecord> records = page.getRecords();
List<Long> ids = records.stream()
.map(MessageRecord::getId)
.collect(toList());
messageRecordMapper.deleteRecordsPhysically(ids);
messageRecordDao.saveBatch(records);
});
}
}
}