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 5746c1d8..7a6f5282 100644 --- a/src/main/java/com/ai/da/common/config/MyTaskScheduler.java +++ b/src/main/java/com/ai/da/common/config/MyTaskScheduler.java @@ -7,10 +7,12 @@ import com.ai.da.mapper.primary.entity.Collection; import com.ai.da.mapper.secondary.AttributeRetrievalMapper; import com.ai.da.model.dto.CollectionSketchDTO; import com.ai.da.model.dto.DesignCollectionDTO; +import com.ai.da.model.enums.DesignProcess; import com.ai.da.model.vo.ValidateElementVO; import com.ai.da.python.PythonService; import com.ai.da.python.vo.DesignPythonObjects; import com.ai.da.service.CollectionElementService; +import com.ai.da.service.UserLikeGroupService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -20,6 +22,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.PostConstruct; @@ -27,9 +30,12 @@ import javax.annotation.Resource; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Paths; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; @@ -51,6 +57,7 @@ public class MyTaskScheduler { // saveUserLikedSketchDataToRedis(4L); // runComparisonAndRecordResults(5); // saveDataToNumpyFormat(); +// projectDataCreate(); } @Resource @@ -61,6 +68,13 @@ public class MyTaskScheduler { @Resource private DesignMapper designMapper; + @Resource + private ProjectMapper projectMapper; + @Resource + private WorkspaceMapper workspaceMapper; + + @Resource + private UserLikeGroupService userLikeGroupService; // 定时任务,每十五天执行一次 // @Scheduled(cron = "0 0 0 ? * MON") @@ -199,6 +213,9 @@ public class MyTaskScheduler { @Resource private ToProductImageResultMapper toProductImageResultMapper; + @Resource + private ToProductImageRecordMapper toProductImageRecordMapper; + @Resource private MinioUtil minioUtil; public void clearMinio() { @@ -563,21 +580,21 @@ public class MyTaskScheduler { allUserLikes.addAll(userLikes); } - // 根据时间排序 - allUserLikes.sort(Comparator.comparing(UserLike::getCreateDate)); - - // 计算 80% 和 20% 的分割 - int totalLikesSize = allUserLikes.size(); - int splitIndexLikes = (int) Math.ceil(totalLikesSize * 0.8); - - // 分割用户喜欢的集合 - List first80PercentLikes = allUserLikes.subList(0, splitIndexLikes); - List last20PercentLikes = allUserLikes.subList(splitIndexLikes, totalLikesSize); +// // 根据时间排序 +// allUserLikes.sort(Comparator.comparing(UserLike::getCreateDate)); +// +// // 计算 80% 和 20% 的分割 +// int totalLikesSize = allUserLikes.size(); +// int splitIndexLikes = (int) Math.ceil(totalLikesSize * 0.8); +// +// // 分割用户喜欢的集合 +// List first80PercentLikes = allUserLikes.subList(0, splitIndexLikes); +// List last20PercentLikes = allUserLikes.subList(splitIndexLikes, totalLikesSize); // 分别处理前 80% 和后 20% 的数据 // 处理前 80% - for (UserLike userLike : first80PercentLikes) { + for (UserLike userLike : allUserLikes) { Long designItemId = userLike.getDesignItemId(); QueryWrapper designItemDetailQueryWrapper = new QueryWrapper<>(); designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId); @@ -598,32 +615,32 @@ public class MyTaskScheduler { } // 处理后 20% - if (last20PercentLikes.size() == 0) { - // 输出没有记录的用户 ID - log.info("用户 ID: " + accountId + " 在后 20% 的 userLike 列表为空"); - } - - for (UserLike userLike : last20PercentLikes) { - Long designItemId = userLike.getDesignItemId(); - QueryWrapper designItemDetailQueryWrapper = new QueryWrapper<>(); - designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId); - List designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper); - for (DesignItemDetail designItemDetail : designItemDetails) { - - if (designItemDetail.getType().equals("Body") || !designItemDetail.getPath().contains("aida-sys-image")) { - continue; - } - - UserPreferenceLogPrediction userPreferenceLogPrediction = new UserPreferenceLogPrediction(); - userPreferenceLogPrediction.setPath(designItemDetail.getPath()); - userPreferenceLogPrediction.setAccountId(accountId); - userPreferenceLogPrediction.setUserLikeGroupId(userLike.getUserLikeGroupId()); - userPreferenceLogPrediction.setDataTime(designItemDetail.getCreateDate().toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDateTime()); - userPreferenceLogPredictionMapper.insert(userPreferenceLogPrediction); - } - } +// if (last20PercentLikes.size() == 0) { +// // 输出没有记录的用户 ID +// log.info("用户 ID: " + accountId + " 在后 20% 的 userLike 列表为空"); +// } +// +// for (UserLike userLike : last20PercentLikes) { +// Long designItemId = userLike.getDesignItemId(); +// QueryWrapper designItemDetailQueryWrapper = new QueryWrapper<>(); +// designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId); +// List designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper); +// for (DesignItemDetail designItemDetail : designItemDetails) { +// +// if (designItemDetail.getType().equals("Body") || !designItemDetail.getPath().contains("aida-sys-image")) { +// continue; +// } +// +// UserPreferenceLogPrediction userPreferenceLogPrediction = new UserPreferenceLogPrediction(); +// userPreferenceLogPrediction.setPath(designItemDetail.getPath()); +// userPreferenceLogPrediction.setAccountId(accountId); +// userPreferenceLogPrediction.setUserLikeGroupId(userLike.getUserLikeGroupId()); +// userPreferenceLogPrediction.setDataTime(designItemDetail.getCreateDate().toInstant() +// .atZone(ZoneId.systemDefault()) +// .toLocalDateTime()); +// userPreferenceLogPredictionMapper.insert(userPreferenceLogPrediction); +// } +// } } } @@ -1315,4 +1332,87 @@ public class MyTaskScheduler { System.err.println("保存目标数据时发生错误: " + e.getMessage()); } } + + @Transactional + public void projectDataCreate() { +// QueryWrapper qw = new QueryWrapper<>(); +// qw.lambda().ne(UserLikeGroup::getAccountId, -1); +// List userLikeGroups = userLikeGroupMapper.selectList(qw); +// for (UserLikeGroup userLikeGroup : userLikeGroups) { +// Project project = new Project(); +// project.setAccountId(userLikeGroup.getAccountId()); +// project.setName(userLikeGroup.getName()); +// project.setCreateTime(LocalDateTime.ofInstant(userLikeGroup.getCreateDate().toInstant(), ZoneId.systemDefault())); +// project.setUpdateTime(LocalDateTime.ofInstant(userLikeGroup.getUpdateDate().toInstant(), ZoneId.systemDefault())); +// QueryWrapper designQueryWrapper = new QueryWrapper<>(); +// designQueryWrapper.lambda().eq(Design::getCollectionId, userLikeGroup.getCollectionId()); +// Design design = designMapper.selectOne(designQueryWrapper); +// if (Objects.isNull(design)) { +// System.out.println(userLikeGroup.getCollectionId()); +// continue; +// } +// if (design.getSingleOverall().equals("overall")) { +// project.setProcess(DesignProcess.SERIES_DESIGN.name()); +// }else { +// project.setProcess(DesignProcess.SINGLE_DESIGN.name()); +// } +// projectMapper.insert(project); +// Long accountId = userLikeGroup.getAccountId(); +// QueryWrapper workspaceQueryWrapper = new QueryWrapper<>(); +// workspaceQueryWrapper.lambda().eq(Workspace::getAccountId, accountId); +// workspaceQueryWrapper.lambda().eq(Workspace::getIsLastIndex, 1); +// Workspace workspace = workspaceMapper.selectOne(workspaceQueryWrapper); +// if (Objects.isNull(workspace)) { +// System.out.println(accountId); +// continue; +// } +// workspace.setIsLastIndex(0); +// workspace.setProjectId(project.getId()); +//// workspace.setSystemDesignerPercentage(design.getSystemScale().multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValueExact()); +// if (!design.getSingleOverall().equals("overall")) { +// workspace.setPosition(design.getSwitchCategory()); +// } +// workspace.setId(null); +// workspaceMapper.insert(workspace); +// +// QueryWrapper collectionElementQueryWrapper = new QueryWrapper<>(); +// collectionElementQueryWrapper.lambda().eq(CollectionElement::getCollectionId, userLikeGroup.getCollectionId()); +// List collectionElements = collectionElementMapper.selectList(collectionElementQueryWrapper); +// for (CollectionElement collectionElement : collectionElements) { +// collectionElement.setProjectId(project.getId()); +// collectionElementMapper.updateById(collectionElement); +// } +// Collection collection = collectionMapper.selectById(userLikeGroup.getCollectionId()); +// if (collection.getMoodTemplateId() != null) { +// CollectionElement collectionElement = collectionElementMapper.selectById(collection.getMoodTemplateId()); +// collectionElement.setProjectId(userLikeGroup.getProjectId()); +// collectionElementMapper.updateById(collectionElement); +// } +// userLikeGroup.setProjectId(project.getId()); +// userLikeGroupMapper.updateById(userLikeGroup); +// } + QueryWrapper projectQueryWrapper = new QueryWrapper<>(); + List projects = projectMapper.selectList(projectQueryWrapper); + for (Project project : projects) { + UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(project.getId()); + if (Objects.nonNull(userLikeGroup)) { + Long userLikeGroupId = userLikeGroup.getId(); + QueryWrapper toProductImageRecordQueryWrapper = new QueryWrapper<>(); + toProductImageRecordQueryWrapper.lambda().eq(ToProductImageRecord::getUserLikeGroupId, userLikeGroupId); + List toProductImageRecords = toProductImageRecordMapper.selectList(toProductImageRecordQueryWrapper); + for (ToProductImageRecord toProductImageRecord : toProductImageRecords) { + toProductImageRecord.setProjectId(project.getId()); + toProductImageRecordMapper.updateById(toProductImageRecord); + } + + QueryWrapper toProductImageResultQueryWrapper = new QueryWrapper<>(); + toProductImageResultQueryWrapper.lambda().eq(ToProductImageResult::getUserLikeGroupId, userLikeGroupId); + List toProductImageResults = toProductImageResultMapper.selectList(toProductImageResultQueryWrapper); + for (ToProductImageResult toProductImageResult : toProductImageResults) { + toProductImageResult.setProjectId(project.getId()); + toProductImageResultMapper.updateById(toProductImageResult); + } + } + } + } } diff --git a/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageRecord.java b/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageRecord.java index 252f5065..c2d3cd17 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageRecord.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageRecord.java @@ -19,6 +19,8 @@ public class ToProductImageRecord implements Serializable { @ApiModelProperty(value = "userLikeGroupId") private Long userLikeGroupId; + private Long projectId; + @ApiModelProperty(value = "prompt") private String prompt; diff --git a/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageResult.java b/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageResult.java index d5b834f6..556e71ac 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageResult.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/ToProductImageResult.java @@ -49,4 +49,6 @@ public class ToProductImageResult implements Serializable { private BigDecimal imageStrength; private String direction; + + private Long projectId; } diff --git a/src/main/java/com/ai/da/model/dto/ToProductImageDTO.java b/src/main/java/com/ai/da/model/dto/ToProductImageDTO.java index 66b8697e..5fa93cc7 100644 --- a/src/main/java/com/ai/da/model/dto/ToProductImageDTO.java +++ b/src/main/java/com/ai/da/model/dto/ToProductImageDTO.java @@ -8,7 +8,7 @@ import java.util.List; @Data public class ToProductImageDTO { - private Long userLikeGroupId; + private Long projectId; private List toProductImageVOList; private String prompt; private BigDecimal imageStrength; diff --git a/src/main/java/com/ai/da/service/UserLikeGroupService.java b/src/main/java/com/ai/da/service/UserLikeGroupService.java index 613db52c..085de5af 100644 --- a/src/main/java/com/ai/da/service/UserLikeGroupService.java +++ b/src/main/java/com/ai/da/service/UserLikeGroupService.java @@ -36,6 +36,8 @@ public interface UserLikeGroupService extends IService { ProjectChooseVO choose(ProjectDTO projectDTO); + UserLikeGroup getByProjectId(Long projectId); + void deleteTrialData(Long id); void updateDate(Long id,String timeZone); 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 a802c56f..99a4dec8 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -7,8 +7,6 @@ import com.ai.da.common.context.UserContext; import com.ai.da.common.enums.CollectionLevel1TypeEnum; import com.ai.da.common.enums.CreditsEventsEnum; import com.ai.da.common.enums.DesignTypeEnum; -import com.ai.da.common.response.PageBaseResponse; -import com.ai.da.common.response.Response; import com.ai.da.common.response.ResultEnum; import com.ai.da.common.utils.*; import com.ai.da.mapper.primary.*; @@ -311,7 +309,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(UserLikeGroup::getProjectId, projectId); List userLikeGroupList = userLikeGroupMapper.selectList(qw); @@ -389,9 +388,16 @@ public class UserLikeGroupServiceImpl extends ServiceImpl productImageLikeList(ToProductImageDTO toProductImageDTO) { QueryWrapper qw = new QueryWrapper<>(); qw.lambda().eq(ToProductImageResult::getIsLike, 1); - qw.lambda().eq(ToProductImageResult::getUserLikeGroupId, toProductImageDTO.getUserLikeGroupId()); + + Long projectId = toProductImageDTO.getProjectId(); +// UserLikeGroup userLikeGroup = getByProjectId(projectId); +// Long userLikeGroupId = null; + + qw.lambda().eq(ToProductImageResult::getProjectId, projectId); List toProductImageResults = toProductImageResultMapper.selectList(qw); for (ToProductImageResult toProductImageResult : toProductImageResults) { toProductImageResult.setUrl(minioUtil.getPreSignedUrl(toProductImageResult.getUrl(), 24 * 60)); @@ -760,9 +777,17 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(ToProductImageResult::getIsLike, 1); - qw.lambda().eq(ToProductImageResult::getUserLikeGroupId, userLikeGroupId); + qw.lambda().eq(ToProductImageResult::getProjectId, projectId); qw.lambda().eq(ToProductImageResult::getResultType, "ToProductImage"); List toProductImageResults = toProductImageResultMapper.selectList(qw); for (ToProductImageResult toProductImageResult : toProductImageResults) { @@ -1471,12 +1503,13 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(ToProductImageResult::getIsLike, 1); - qw.lambda().eq(ToProductImageResult::getUserLikeGroupId, userLikeGroupId); + qw.lambda().eq(ToProductImageResult::getProjectId, projectId); qw.lambda().eq(ToProductImageResult::getResultType, "Relight"); List toProductImageResults = toProductImageResultMapper.selectList(qw); for (ToProductImageResult toProductImageResult : toProductImageResults) {