diff --git a/src/main/java/com/ai/da/common/config/MyTaskScheduler.java b/src/main/java/com/ai/da/common/config/MyTaskScheduler.java index 4e49a541..695472f6 100644 --- a/src/main/java/com/ai/da/common/config/MyTaskScheduler.java +++ b/src/main/java/com/ai/da/common/config/MyTaskScheduler.java @@ -27,6 +27,7 @@ import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StopWatch; import javax.annotation.PostConstruct; import javax.annotation.Resource; @@ -1417,24 +1418,52 @@ public class MyTaskScheduler { } } - @Transactional + @Transactional(rollbackFor = Exception.class) public void projectDataCreate() { - // UserLikeGroup转project - userLikeGroupConvertProject(); + StopWatch stopWatch = new StopWatch("projectDataCreate"); - // 必须先完成project数据新增后再执行 toProductImage relight数据关联project - toProductRelightRelationProject(); + try { + // UserLikeGroup转project + stopWatch.start("userLikeGroupConvertProject"); + userLikeGroupConvertProject(); + stopWatch.stop(); + log.info("userLikeGroupConvertProject 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis()); - // 画布数据 - canvasData(); + // 必须先完成project数据新增后再执行 toProductImage relight数据关联project + stopWatch.start("toProductRelightRelationProject"); + toProductRelightRelationProject(); + stopWatch.stop(); + log.info("toProductRelightRelationProject 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis()); - // 作品关联数据转json数据 - // 作品关联projectId - portfolioData(); + // 画布数据 + stopWatch.start("canvasData"); + canvasData(); + stopWatch.stop(); + log.info("canvasData 执行完成,耗时: {} ms", stopWatch.getLastTaskTimeMillis()); + // 作品关联数据转json数据 + stopWatch.start("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 updateQueryWrapper = new QueryWrapper<>(); updateQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1); List portfolioListUpdate = portfolioMapper.selectList(updateQueryWrapper); @@ -1455,7 +1484,11 @@ public class MyTaskScheduler { QueryWrapper portfolioQueryWrapper = new QueryWrapper<>(); portfolioQueryWrapper.lambda().eq(Portfolio::getOpenSource, 1); List portfolioList = portfolioMapper.selectList(portfolioQueryWrapper); + int size = portfolioList.size(); + int count = 0; for (Portfolio portfolio : portfolioList) { + count ++; + log.info("portfolio 迁移进度 {} / {}", count, size); if (portfolio.getCollectionId() != null) { QueryWrapper userLikeGroupQueryWrapper = new QueryWrapper<>(); userLikeGroupQueryWrapper.lambda().eq(UserLikeGroup::getCollectionId, portfolio.getCollectionId()); @@ -1569,12 +1602,16 @@ public class MyTaskScheduler { } } - private void canvasData() { + public void canvasData() { QueryWrapper exportFileQueryWrapper = new QueryWrapper<>(); // exportFileQueryWrapper.lambda().ge(ExportFile::getId, 10); // exportFileQueryWrapper.lambda().le(ExportFile::getId, 86); List exportFiles = exportFileMapper.selectList(exportFileQueryWrapper); + int size = exportFiles.size(); + int count = 0; for (ExportFile exportFile : exportFiles) { + count ++; + log.info("canvas 迁移进度 {} / {}", count, size); Long userLikeGroupId = exportFile.getProjectId(); UserLikeGroup userLikeGroup = userLikeGroupMapper.selectById(userLikeGroupId); if (Objects.nonNull(userLikeGroup)) { @@ -1584,10 +1621,14 @@ public class MyTaskScheduler { } } - private void toProductRelightRelationProject() { + public void toProductRelightRelationProject() { QueryWrapper projectQueryWrapper = new QueryWrapper<>(); List projects = projectMapper.selectList(projectQueryWrapper); // 所有project + int size = projects.size(); + int count = 0; for (Project project : projects) { + count ++; + log.info("toProduct connect project 迁移进度 {} / {}", count, size); UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(project.getId()); if (Objects.nonNull(userLikeGroup)) { Long userLikeGroupId = userLikeGroup.getId(); @@ -1610,11 +1651,15 @@ public class MyTaskScheduler { } } - private void userLikeGroupConvertProject() { + public void userLikeGroupConvertProject() { QueryWrapper qw = new QueryWrapper<>(); qw.lambda().ne(UserLikeGroup::getAccountId, -1); List userLikeGroups = userLikeGroupMapper.selectList(qw); + int size = userLikeGroups.size(); + int count = 0; for (UserLikeGroup userLikeGroup : userLikeGroups) { + count ++; + log.info("userLikeGroupConvertProject 迁移进度 {} / {}", count, size); // 创建project Project project = new Project(); project.setAccountId(userLikeGroup.getAccountId()); @@ -1626,11 +1671,21 @@ public class MyTaskScheduler { project.setOriginalPortfolioId(userLikeGroup.getOriginalPortfolioId()); QueryWrapper designQueryWrapper = new QueryWrapper<>(); - designQueryWrapper.lambda().eq(Design::getCollectionId, userLikeGroup.getCollectionId()); - Design design = designMapper.selectOne(designQueryWrapper); - if (Objects.isNull(design)) { + designQueryWrapper.lambda().eq(Design::getCollectionId, userLikeGroup.getCollectionId()) + .eq(Design::getAccountId, userLikeGroup.getAccountId()) + .ne(Design::getCollectionId, 0); + + List designs = designMapper.selectList(designQueryWrapper); + Design design; + if (designs.isEmpty()) { log.info("collection_id {},对应design为空 ", userLikeGroup.getCollectionId()); 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")) { @@ -1641,6 +1696,9 @@ public class MyTaskScheduler { // 添加项目记录 projectMapper.insert(project); + userLikeGroup.setProjectId(project.getId()); + userLikeGroupMapper.updateById(userLikeGroup); + Long accountId = userLikeGroup.getAccountId(); QueryWrapper workspaceQueryWrapper = new QueryWrapper<>(); workspaceQueryWrapper.lambda().eq(Workspace::getAccountId, accountId); @@ -1672,6 +1730,10 @@ public class MyTaskScheduler { Collection collection = collectionMapper.selectById(userLikeGroup.getCollectionId()); if (collection.getMoodTemplateId() != null) { CollectionElement collectionElement = collectionElementMapper.selectById(collection.getMoodTemplateId()); + if (Objects.isNull(collectionElement)){ + log.warn("在collectionElement中找不到moodTemplateId为 {} 的记录", collection.getMoodTemplateId()); + continue; + } collectionElement.setProjectId(userLikeGroup.getProjectId()); collectionElement.setIsCompositeImage(1); collectionElementMapper.updateById(collectionElement); @@ -1700,6 +1762,10 @@ public class MyTaskScheduler { collectionElementRelModelMapper.insert(collectionElementRelModel); }else { Library library = libraryMapper.selectById(design.getTemplateId()); + if (Objects.isNull(library)){ + log.info("找不到模特{},跳过", design.getTemplateId()); + continue; + } CollectionElement collectionElement = new CollectionElement(); collectionElement.setAccountId(design.getAccountId()); collectionElement.setProjectId(project.getId()); @@ -1718,9 +1784,36 @@ public class MyTaskScheduler { collectionElementRelModel.setRelationType("Library"); collectionElementRelModelMapper.insert(collectionElementRelModel); } - - userLikeGroup.setProjectId(project.getId()); - userLikeGroupMapper.updateById(userLikeGroup); } } + + public void userLikeAddToCollectionSort(){ + // 1、查询user_like_group表中projectId不为空的数据 + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().ne(UserLikeGroup::getAccountId, -1).isNotNull(UserLikeGroup::getProjectId); + List 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 userLikeQW = new QueryWrapper<>(); + userLikeQW.lambda().eq(UserLike::getUserLikeGroupId, userLikeGroup.getId()); + List 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--; + } + } + } + } diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 65c4a843..a2bf4baf 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -2425,6 +2425,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl