数据迁移代码

This commit is contained in:
2025-08-31 14:16:08 +08:00
parent c93ae85b65
commit c649907222
2 changed files with 114 additions and 20 deletions

View File

@@ -27,6 +27,7 @@ import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StopWatch;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -1417,24 +1418,52 @@ public class MyTaskScheduler {
} }
} }
@Transactional @Transactional(rollbackFor = Exception.class)
public void projectDataCreate() { public void projectDataCreate() {
StopWatch stopWatch = new StopWatch("projectDataCreate");
try {
// UserLikeGroup转project // UserLikeGroup转project
stopWatch.start("userLikeGroupConvertProject");
userLikeGroupConvertProject(); userLikeGroupConvertProject();
stopWatch.stop();
log.info("userLikeGroupConvertProject 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis());
// 必须先完成project数据新增后再执行 toProductImage relight数据关联project // 必须先完成project数据新增后再执行 toProductImage relight数据关联project
stopWatch.start("toProductRelightRelationProject");
toProductRelightRelationProject(); toProductRelightRelationProject();
stopWatch.stop();
log.info("toProductRelightRelationProject 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis());
// 画布数据 // 画布数据
stopWatch.start("canvasData");
canvasData(); canvasData();
stopWatch.stop();
log.info("canvasData 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis());
// 作品关联数据转json数据 // 作品关联数据转json数据
// 作品关联projectId stopWatch.start("portfolioData");
portfolioData(); portfolioData();
stopWatch.stop();
log.info("portfolioData 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis());
// 添加喜欢的design到排序表
stopWatch.start("userLikeAddToCollectionSort");
userLikeAddToCollectionSort();
stopWatch.stop();
log.info("userLikeAddToCollectionSort 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis());
// 打印总耗时
log.info("项目数据创建总耗时: {} ms", stopWatch.getTotalTimeMillis());
log.info("详细统计:\n{}", stopWatch.prettyPrint());
} catch (Exception e) {
log.error("projectDataCreate执行失败", e);
throw e;
}
} }
private void portfolioData() { public void portfolioData() {
QueryWrapper<Portfolio> updateQueryWrapper = new QueryWrapper<>(); QueryWrapper<Portfolio> updateQueryWrapper = new QueryWrapper<>();
updateQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1); updateQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1);
List<Portfolio> portfolioListUpdate = portfolioMapper.selectList(updateQueryWrapper); List<Portfolio> portfolioListUpdate = portfolioMapper.selectList(updateQueryWrapper);
@@ -1455,7 +1484,11 @@ public class MyTaskScheduler {
QueryWrapper<Portfolio> portfolioQueryWrapper = new QueryWrapper<>(); QueryWrapper<Portfolio> portfolioQueryWrapper = new QueryWrapper<>();
portfolioQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1); portfolioQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1);
List<Portfolio> portfolioList = portfolioMapper.selectList(portfolioQueryWrapper); List<Portfolio> portfolioList = portfolioMapper.selectList(portfolioQueryWrapper);
int size = portfolioList.size();
int count = 0;
for (Portfolio portfolio : portfolioList) { for (Portfolio portfolio : portfolioList) {
count ++;
log.info("portfolio 迁移进度 {} / {}", count, size);
if (portfolio.getCollectionId() != null) { if (portfolio.getCollectionId() != null) {
QueryWrapper<UserLikeGroup> userLikeGroupQueryWrapper = new QueryWrapper<>(); QueryWrapper<UserLikeGroup> userLikeGroupQueryWrapper = new QueryWrapper<>();
userLikeGroupQueryWrapper.lambda().eq(UserLikeGroup::getCollectionId, portfolio.getCollectionId()); userLikeGroupQueryWrapper.lambda().eq(UserLikeGroup::getCollectionId, portfolio.getCollectionId());
@@ -1569,12 +1602,16 @@ public class MyTaskScheduler {
} }
} }
private void canvasData() { public void canvasData() {
QueryWrapper<ExportFile> exportFileQueryWrapper = new QueryWrapper<>(); QueryWrapper<ExportFile> exportFileQueryWrapper = new QueryWrapper<>();
// exportFileQueryWrapper.lambda().ge(ExportFile::getId, 10); // exportFileQueryWrapper.lambda().ge(ExportFile::getId, 10);
// exportFileQueryWrapper.lambda().le(ExportFile::getId, 86); // exportFileQueryWrapper.lambda().le(ExportFile::getId, 86);
List<ExportFile> exportFiles = exportFileMapper.selectList(exportFileQueryWrapper); List<ExportFile> exportFiles = exportFileMapper.selectList(exportFileQueryWrapper);
int size = exportFiles.size();
int count = 0;
for (ExportFile exportFile : exportFiles) { for (ExportFile exportFile : exportFiles) {
count ++;
log.info("canvas 迁移进度 {} / {}", count, size);
Long userLikeGroupId = exportFile.getProjectId(); Long userLikeGroupId = exportFile.getProjectId();
UserLikeGroup userLikeGroup = userLikeGroupMapper.selectById(userLikeGroupId); UserLikeGroup userLikeGroup = userLikeGroupMapper.selectById(userLikeGroupId);
if (Objects.nonNull(userLikeGroup)) { if (Objects.nonNull(userLikeGroup)) {
@@ -1584,10 +1621,14 @@ public class MyTaskScheduler {
} }
} }
private void toProductRelightRelationProject() { public void toProductRelightRelationProject() {
QueryWrapper<Project> projectQueryWrapper = new QueryWrapper<>(); QueryWrapper<Project> projectQueryWrapper = new QueryWrapper<>();
List<Project> projects = projectMapper.selectList(projectQueryWrapper); // 所有project List<Project> projects = projectMapper.selectList(projectQueryWrapper); // 所有project
int size = projects.size();
int count = 0;
for (Project project : projects) { for (Project project : projects) {
count ++;
log.info("toProduct connect project 迁移进度 {} / {}", count, size);
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(project.getId()); UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(project.getId());
if (Objects.nonNull(userLikeGroup)) { if (Objects.nonNull(userLikeGroup)) {
Long userLikeGroupId = userLikeGroup.getId(); Long userLikeGroupId = userLikeGroup.getId();
@@ -1610,11 +1651,15 @@ public class MyTaskScheduler {
} }
} }
private void userLikeGroupConvertProject() { public void userLikeGroupConvertProject() {
QueryWrapper<UserLikeGroup> qw = new QueryWrapper<>(); QueryWrapper<UserLikeGroup> qw = new QueryWrapper<>();
qw.lambda().ne(UserLikeGroup::getAccountId, -1); qw.lambda().ne(UserLikeGroup::getAccountId, -1);
List<UserLikeGroup> userLikeGroups = userLikeGroupMapper.selectList(qw); List<UserLikeGroup> userLikeGroups = userLikeGroupMapper.selectList(qw);
int size = userLikeGroups.size();
int count = 0;
for (UserLikeGroup userLikeGroup : userLikeGroups) { for (UserLikeGroup userLikeGroup : userLikeGroups) {
count ++;
log.info("userLikeGroupConvertProject 迁移进度 {} / {}", count, size);
// 创建project // 创建project
Project project = new Project(); Project project = new Project();
project.setAccountId(userLikeGroup.getAccountId()); project.setAccountId(userLikeGroup.getAccountId());
@@ -1626,11 +1671,21 @@ public class MyTaskScheduler {
project.setOriginalPortfolioId(userLikeGroup.getOriginalPortfolioId()); project.setOriginalPortfolioId(userLikeGroup.getOriginalPortfolioId());
QueryWrapper<Design> designQueryWrapper = new QueryWrapper<>(); QueryWrapper<Design> designQueryWrapper = new QueryWrapper<>();
designQueryWrapper.lambda().eq(Design::getCollectionId, userLikeGroup.getCollectionId()); designQueryWrapper.lambda().eq(Design::getCollectionId, userLikeGroup.getCollectionId())
Design design = designMapper.selectOne(designQueryWrapper); .eq(Design::getAccountId, userLikeGroup.getAccountId())
if (Objects.isNull(design)) { .ne(Design::getCollectionId, 0);
List<Design> designs = designMapper.selectList(designQueryWrapper);
Design design;
if (designs.isEmpty()) {
log.info("collection_id {},对应design为空 ", userLikeGroup.getCollectionId()); log.info("collection_id {},对应design为空 ", userLikeGroup.getCollectionId());
continue; continue;
} else if (designs.size() > 1){
log.warn("collectionId 为:{} accountId为{},查到{}条数据",
userLikeGroup.getCollectionId(), userLikeGroup.getAccountId(), designs.size() );
design = designs.get(0);
} else {
design = designs.get(0);
} }
// 设置项目类型 系列设计 || 单品设计 // 设置项目类型 系列设计 || 单品设计
if (design.getSingleOverall().equals("overall")) { if (design.getSingleOverall().equals("overall")) {
@@ -1641,6 +1696,9 @@ public class MyTaskScheduler {
// 添加项目记录 // 添加项目记录
projectMapper.insert(project); projectMapper.insert(project);
userLikeGroup.setProjectId(project.getId());
userLikeGroupMapper.updateById(userLikeGroup);
Long accountId = userLikeGroup.getAccountId(); Long accountId = userLikeGroup.getAccountId();
QueryWrapper<Workspace> workspaceQueryWrapper = new QueryWrapper<>(); QueryWrapper<Workspace> workspaceQueryWrapper = new QueryWrapper<>();
workspaceQueryWrapper.lambda().eq(Workspace::getAccountId, accountId); workspaceQueryWrapper.lambda().eq(Workspace::getAccountId, accountId);
@@ -1672,6 +1730,10 @@ public class MyTaskScheduler {
Collection collection = collectionMapper.selectById(userLikeGroup.getCollectionId()); Collection collection = collectionMapper.selectById(userLikeGroup.getCollectionId());
if (collection.getMoodTemplateId() != null) { if (collection.getMoodTemplateId() != null) {
CollectionElement collectionElement = collectionElementMapper.selectById(collection.getMoodTemplateId()); CollectionElement collectionElement = collectionElementMapper.selectById(collection.getMoodTemplateId());
if (Objects.isNull(collectionElement)){
log.warn("在collectionElement中找不到moodTemplateId为 {} 的记录", collection.getMoodTemplateId());
continue;
}
collectionElement.setProjectId(userLikeGroup.getProjectId()); collectionElement.setProjectId(userLikeGroup.getProjectId());
collectionElement.setIsCompositeImage(1); collectionElement.setIsCompositeImage(1);
collectionElementMapper.updateById(collectionElement); collectionElementMapper.updateById(collectionElement);
@@ -1700,6 +1762,10 @@ public class MyTaskScheduler {
collectionElementRelModelMapper.insert(collectionElementRelModel); collectionElementRelModelMapper.insert(collectionElementRelModel);
}else { }else {
Library library = libraryMapper.selectById(design.getTemplateId()); Library library = libraryMapper.selectById(design.getTemplateId());
if (Objects.isNull(library)){
log.info("找不到模特{},跳过", design.getTemplateId());
continue;
}
CollectionElement collectionElement = new CollectionElement(); CollectionElement collectionElement = new CollectionElement();
collectionElement.setAccountId(design.getAccountId()); collectionElement.setAccountId(design.getAccountId());
collectionElement.setProjectId(project.getId()); collectionElement.setProjectId(project.getId());
@@ -1718,9 +1784,36 @@ public class MyTaskScheduler {
collectionElementRelModel.setRelationType("Library"); collectionElementRelModel.setRelationType("Library");
collectionElementRelModelMapper.insert(collectionElementRelModel); collectionElementRelModelMapper.insert(collectionElementRelModel);
} }
}
}
userLikeGroup.setProjectId(project.getId()); public void userLikeAddToCollectionSort(){
userLikeGroupMapper.updateById(userLikeGroup); // 1、查询user_like_group表中projectId不为空的数据
QueryWrapper<UserLikeGroup> qw = new QueryWrapper<>();
qw.lambda().ne(UserLikeGroup::getAccountId, -1).isNotNull(UserLikeGroup::getProjectId);
List<UserLikeGroup> userLikeGroups = userLikeGroupMapper.selectList(qw);
int size = userLikeGroups.size();
// 2、根据user_like_group_id去t_user_like表中获取id作为relation_id
int userLikeGroupCount = 0;
for (UserLikeGroup userLikeGroup : userLikeGroups){
userLikeGroupCount ++;
log.info("userLikeAddToCollectionSort 当前进度:{} / {}", userLikeGroupCount, size);
QueryWrapper<UserLike> userLikeQW = new QueryWrapper<>();
userLikeQW.lambda().eq(UserLike::getUserLikeGroupId, userLikeGroup.getId());
List<UserLike> userLikes = userLikeMapper.selectList(userLikeQW);
int count = userLikes.size();
for (UserLike userLike: userLikes){
// 3、将数据添加到collection_sort表中
CollectionSort userLikeSort = new CollectionSort();
userLikeSort.setProjectId(userLikeGroup.getProjectId());
userLikeSort.setRelationId(userLike.getId());
userLikeSort.setRelationType(CollectionType.DESIGN.getValue());
userLikeSort.setSort(count);
userLikeSort.setCreateTime(LocalDateTime.now());
collectionSortMapper.insert(userLikeSort);
count--;
} }
} }
} }
}

View File

@@ -2425,6 +2425,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
}else { }else {
CollectionElement collectionElement = collectionElementMapper.selectById(board.getId()); CollectionElement collectionElement = collectionElementMapper.selectById(board.getId());
collectionElement.setProjectId(projectId); collectionElement.setProjectId(projectId);
collectionElement.setLevel2Type(board.getLevel2Type());
collectionElement.setHasPin(board.getIsPin()); collectionElement.setHasPin(board.getIsPin());
collectionElement.setUpdateDate(new Date()); collectionElement.setUpdateDate(new Date());
collectionElementMapper.updateById(collectionElement); collectionElementMapper.updateById(collectionElement);