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/common/task/AccountTask.java b/src/main/java/com/ai/da/common/task/AccountTask.java index 414e5d4f..a5b41b98 100644 --- a/src/main/java/com/ai/da/common/task/AccountTask.java +++ b/src/main/java/com/ai/da/common/task/AccountTask.java @@ -78,6 +78,6 @@ public class AccountTask { // 每月初刷新所有用户用户名剩余修改次数 public void resetUsernameModifyTimes(){ log.info("重置所有用户的用户名修改次数"); -// redisUtil.batchDeleteKeysWithSamePrefix(RedisUtil.NICKNAME_MODIFY_TIMES); + redisUtil.batchDeleteKeysWithSamePrefix(RedisUtil.NICKNAME_MODIFY_TIMES); } } diff --git a/src/main/java/com/ai/da/common/utils/RedisUtil.java b/src/main/java/com/ai/da/common/utils/RedisUtil.java index eb242a1a..fd6fb3e6 100644 --- a/src/main/java/com/ai/da/common/utils/RedisUtil.java +++ b/src/main/java/com/ai/da/common/utils/RedisUtil.java @@ -492,4 +492,12 @@ public class RedisUtil { public final static String STRIPE_EXCEPTION_LOG = "StripeException:"; + + public void batchDeleteKeysWithSamePrefix(String prefix){ + Set keys = redisTemplate.keys(prefix + "*"); + assert keys != null; + if (!keys.isEmpty()){ + redisTemplate.delete(keys); + } + } } diff --git a/src/main/java/com/ai/da/controller/ProjectController.java b/src/main/java/com/ai/da/controller/ProjectController.java index 63e49032..9b86ed41 100644 --- a/src/main/java/com/ai/da/controller/ProjectController.java +++ b/src/main/java/com/ai/da/controller/ProjectController.java @@ -38,7 +38,7 @@ public class ProjectController { @PostMapping("/saveOrUpdate") @ApiOperationSupport(order = 1) @ApiOperation(value = "新增或编辑", notes = "传入project") - public Response saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) { + public Response saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) { return Response.success(workspaceService.saveOrUpdateProject(projectDTO)); } @@ -87,7 +87,7 @@ public class ProjectController { @PostMapping("/getMannequinDetail") @ApiOperationSupport(order = 7) @ApiOperation(value = "获取模特详情", notes = "传入mannequinId") - public Response getMannequinDetail(@Valid @RequestBody MannequinDTO mannequinDTO) { + public Response getMannequinDetail(@Valid @RequestBody MannequinDTO mannequinDTO) { return Response.success(userLikeGroupService.getMannequinDetail(mannequinDTO)); } } diff --git a/src/main/java/com/ai/da/controller/SavedCollectionController.java b/src/main/java/com/ai/da/controller/SavedCollectionController.java index bcd07da1..82938fe5 100644 --- a/src/main/java/com/ai/da/controller/SavedCollectionController.java +++ b/src/main/java/com/ai/da/controller/SavedCollectionController.java @@ -28,6 +28,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -192,8 +193,8 @@ public class SavedCollectionController { @ApiOperation(value = "toProductImageElementUpload") @PostMapping("/toProductImageElementUpload") - public Response toProductImageElementUpload(@RequestParam("file") MultipartFile file, @RequestParam(value = "userlikeGroupId") Long userLikeGroupId) { - return Response.success(userLikeGroupService.toProductImageElementUpload(file, userLikeGroupId)); + public Response toProductImageElementUpload(@RequestParam("file") MultipartFile file, @RequestParam(value = "projectId") Long projectId) { + return Response.success(userLikeGroupService.toProductImageElementUpload(file, projectId)); } @ApiOperation(value = "productImageLike") @@ -257,4 +258,22 @@ public class SavedCollectionController { public Response productImageUpload(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { return Response.success(userLikeGroupService.productImageInitialize(productImageInitializeDTO)); } + + @ApiOperation(value = "brandDNASaveOrUpdate") + @PostMapping("/brandDNASaveOrUpdate") + public Response brandDNASaveOrUpdate(@Valid @RequestBody BrandDNADTO brandDNADTO) { + return Response.success(userLikeGroupService.brandDNASaveOrUpdate(brandDNADTO)); + } + + @ApiOperation(value = "brandLogoUpload") + @PostMapping("/brandLogoUpload") + public Response brandDNASaveOrUpdate(@RequestParam("file") MultipartFile file) { + return Response.success(userLikeGroupService.brandLogoUpload(file)); + } + + @ApiOperation(value = "brandDNAUpload") + @PostMapping("/brandDNAUpload") + public Response brandDNAUpload(@RequestParam("file") MultipartFile file, @RequestParam("brandId") Long brandId) throws IOException { + return Response.success(userLikeGroupService.brandDNAUpload(file, brandId)); + } } diff --git a/src/main/java/com/ai/da/mapper/primary/BrandDNAMapper.java b/src/main/java/com/ai/da/mapper/primary/BrandDNAMapper.java new file mode 100644 index 00000000..acee40b4 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/BrandDNAMapper.java @@ -0,0 +1,7 @@ +package com.ai.da.mapper.primary; + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.primary.entity.BrandDNA; + +public interface BrandDNAMapper extends CommonMapper { +} diff --git a/src/main/java/com/ai/da/mapper/primary/BrandRelLibraryMapper.java b/src/main/java/com/ai/da/mapper/primary/BrandRelLibraryMapper.java new file mode 100644 index 00000000..35ce79e1 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/BrandRelLibraryMapper.java @@ -0,0 +1,7 @@ +package com.ai.da.mapper.primary; + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.primary.entity.BrandRelLibrary; + +public interface BrandRelLibraryMapper extends CommonMapper { +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/BrandDNA.java b/src/main/java/com/ai/da/mapper/primary/entity/BrandDNA.java new file mode 100644 index 00000000..5e35a5ff --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/BrandDNA.java @@ -0,0 +1,37 @@ +package com.ai.da.mapper.primary.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("brand") +public class BrandDNA implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long accountId; + + private String brandName; + + private String brandSlogan; + + private String brandLogo; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/BrandRelLibrary.java b/src/main/java/com/ai/da/mapper/primary/entity/BrandRelLibrary.java new file mode 100644 index 00000000..d4336cc1 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/BrandRelLibrary.java @@ -0,0 +1,29 @@ +package com.ai.da.mapper.primary.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("brand_rel_library") +public class BrandRelLibrary implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long brandId; + private Long libraryId; + +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/ToProductElement.java b/src/main/java/com/ai/da/mapper/primary/entity/ToProductElement.java index d725806f..72ec9317 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/ToProductElement.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/ToProductElement.java @@ -19,6 +19,8 @@ public class ToProductElement implements Serializable { @ApiModelProperty(value = "userLikeGroupId") private Long userLikeGroupId; + private Long projectId; + @ApiModelProperty(value = "url") private String url; 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/BrandDNADTO.java b/src/main/java/com/ai/da/model/dto/BrandDNADTO.java new file mode 100644 index 00000000..b6b5a632 --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/BrandDNADTO.java @@ -0,0 +1,13 @@ +package com.ai.da.model.dto; + +import com.ai.da.mapper.primary.entity.BrandDNA; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +//@AllArgsConstructor +//@NoArgsConstructor +public class BrandDNADTO extends BrandDNA { + +} diff --git a/src/main/java/com/ai/da/model/dto/DesignLikeDTO.java b/src/main/java/com/ai/da/model/dto/DesignLikeDTO.java index ef6a3230..26ed7f18 100644 --- a/src/main/java/com/ai/da/model/dto/DesignLikeDTO.java +++ b/src/main/java/com/ai/da/model/dto/DesignLikeDTO.java @@ -26,4 +26,6 @@ public class DesignLikeDTO { @NotBlank(message = "timeZone.cannot.be.empty") @ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取") private String timeZone; + + private Long projectId; } diff --git a/src/main/java/com/ai/da/model/dto/MannequinDTO.java b/src/main/java/com/ai/da/model/dto/MannequinDTO.java index 26f48205..e79dcc98 100644 --- a/src/main/java/com/ai/da/model/dto/MannequinDTO.java +++ b/src/main/java/com/ai/da/model/dto/MannequinDTO.java @@ -10,4 +10,5 @@ import lombok.NoArgsConstructor; public class MannequinDTO { private Long id; private String type; +// private String modelType; } diff --git a/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java b/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java index a3aace06..880d579d 100644 --- a/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java +++ b/src/main/java/com/ai/da/model/dto/ProductImageInitializeDTO.java @@ -7,4 +7,6 @@ import java.util.List; @Data public class ProductImageInitializeDTO { private List libraryIds; + + private Long brandId; } 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/model/vo/ModuleChooseVO.java b/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java index b614cb5e..ba82e7a9 100644 --- a/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java +++ b/src/main/java/com/ai/da/model/vo/ModuleChooseVO.java @@ -28,6 +28,8 @@ public class ModuleChooseVO { private List relight; private CavasModuleChooseVO canvas; + + private List boundingBox; // private moodBoardModuleChooseVO poseTransfer; // private moodBoardModuleChooseVO patternMaking3D; // private moodBoardModuleChooseVO deReconstruction; diff --git a/src/main/java/com/ai/da/model/vo/SaveOrUpdateProjectVO.java b/src/main/java/com/ai/da/model/vo/SaveOrUpdateProjectVO.java new file mode 100644 index 00000000..fab23d13 --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/SaveOrUpdateProjectVO.java @@ -0,0 +1,14 @@ +package com.ai.da.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SaveOrUpdateProjectVO { + private Long id; + private WorkspaceVO workspaceVO; + +} diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 2c05496c..3e050c7f 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -3920,9 +3920,9 @@ public class PythonService { // accessPythonPort, // userHolder.getId(), // category); - String url = String.format("%s:%s/recommend/%d/%s/1", - "127.0.0.1", - "8000", + String url = String.format("%s:%s/api/recommend/%d/%s/1", + "http://18.167.251.121", + "9994", userHolder.getId(), category); @@ -3966,6 +3966,56 @@ public class PythonService { } } + public JSONObject segProduct(String url) { + OkHttpClient client = new OkHttpClient().newBuilder() + .connectTimeout(30, TimeUnit.SECONDS) + .pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒) + .readTimeout(60, TimeUnit.SECONDS)//读取超时(单位:秒) + .writeTimeout(60, TimeUnit.SECONDS)//写入超时(单位:秒) + .build(); + MediaType mediaType = MediaType.parse("application/json"); + //关闭FastJson的引用检测 防止出现$ref 现象 + Map map = new HashMap<>(); + map.put("image_url", url); + map.put("is_brand_dna", Boolean.TRUE); + log.info("bright请求python 参数:####{}", map); + String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty); + log.info(param); + RequestBody body = RequestBody.create(mediaType, param); + Request request = new Request.Builder() +// .url(accessPythonIp + ":" + accessPythonPort + "/api/generate_product_image") +// .url(accessPythonIp + ":9996/api/generate_product_image") + .url(accessPythonIp + ":" + accessPythonPort + "/api/seg_product") + .method("POST", body) + .addHeader("Authorization", "Basic YWlkbGFiOjEyMw==") + .addHeader("Content-Type", "application/json") + .build(); + Response response; + String responseBody; + try { + response = client.newCall(request).execute(); + } catch (IOException ioException) { + log.error("PythonService##bright异常###{}", ExceptionUtil.getThrowableList(ioException)); + throw new BusinessException("segProduct.interface.exception"); + } + if (response.isSuccessful()) { + try { + if (Objects.nonNull(response.body())) { + responseBody = response.body().string(); + JSONObject responseObject = JSON.parseObject(responseBody); + log.info("PythonService##responseObject###{}", responseObject); + return responseObject; + } + throw new BusinessException("segProduct.interface.exception"); + } catch (IOException | JSONException e) { + log.error("PythonService##segProduct异常###{}", e.getMessage()); + throw new BusinessException("segProduct.interface.exception"); + } + } + log.error("PythonService##segProduct异常response###{}", response); + //生成失败 + throw new BusinessException("segProduct.interface.exception"); + } public Boolean poseTransformation(String productImage, int poseId, String taskId) { OkHttpClient client = new OkHttpClient().newBuilder() .connectTimeout(30, TimeUnit.SECONDS) diff --git a/src/main/java/com/ai/da/service/UserLikeGroupService.java b/src/main/java/com/ai/da/service/UserLikeGroupService.java index 613db52c..56ca416c 100644 --- a/src/main/java/com/ai/da/service/UserLikeGroupService.java +++ b/src/main/java/com/ai/da/service/UserLikeGroupService.java @@ -1,15 +1,14 @@ package com.ai.da.service; -import com.ai.da.common.response.PageBaseResponse; import com.ai.da.mapper.primary.entity.*; import com.ai.da.model.dto.*; import com.ai.da.model.vo.*; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -24,7 +23,7 @@ public interface UserLikeGroupService extends IService { HistoryUpdateVO updateUserGroupName(Long userGroupId, String userGroupName, String timeZone); - Long insertUserGroup(Long userId, Long collectionId, String timeZone); + Long insertUserGroup(Long userId, Long collectionId, String timeZone, Long projectId); /** * choose @@ -36,6 +35,8 @@ public interface UserLikeGroupService extends IService { ProjectChooseVO choose(ProjectDTO projectDTO); + UserLikeGroup getByProjectId(Long projectId); + void deleteTrialData(Long id); void updateDate(Long id,String timeZone); @@ -46,7 +47,7 @@ public interface UserLikeGroupService extends IService { void toProduct(String taskId); - ToProductElementVO toProductImageElementUpload(MultipartFile file, Long userLikeGroupId); + ToProductElementVO toProductImageElementUpload(MultipartFile file, Long projectId); Boolean productImageLike(ProductImageLikeDTO productImageLikeDTO); @@ -78,5 +79,11 @@ public interface UserLikeGroupService extends IService { ModuleChooseVO saveModuleContent(ModuleSaveDTO moduleSaveDTO); - LibraryModelPoint getMannequinDetail(MannequinDTO mannequinDTO); + QueryLibraryPageVO getMannequinDetail(MannequinDTO mannequinDTO); + + String brandLogoUpload(MultipartFile file); + + Boolean brandDNASaveOrUpdate(BrandDNADTO brandDNADTO); + + String brandDNAUpload(MultipartFile file, Long brandId) throws IOException; } diff --git a/src/main/java/com/ai/da/service/WorkspaceService.java b/src/main/java/com/ai/da/service/WorkspaceService.java index dd56859e..4058dac9 100644 --- a/src/main/java/com/ai/da/service/WorkspaceService.java +++ b/src/main/java/com/ai/da/service/WorkspaceService.java @@ -8,6 +8,7 @@ import com.ai.da.model.dto.WorkspaceDTO; import com.ai.da.model.dto.WorkspaceSaveDTO; import com.ai.da.model.enums.BizJson; import com.ai.da.model.vo.ModelsVO; +import com.ai.da.model.vo.SaveOrUpdateProjectVO; import com.ai.da.model.vo.StyleVO; import com.ai.da.model.vo.WorkspaceVO; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -59,7 +60,7 @@ public interface WorkspaceService extends IService { List styleList(); @Transactional - Long saveOrUpdateProject(ProjectDTO projectDTO); + SaveOrUpdateProjectVO saveOrUpdateProject(ProjectDTO projectDTO); Long getByProjectId(Long projectId); } diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 3ab50de2..fbd7ede3 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -1129,16 +1129,16 @@ public class DesignServiceImpl extends ServiceImpl impleme // if (CollectionUtil.isEmpty(oldElements)) { // throw new BusinessException("old.elements.not.found"); // } - List designItemDetails = designItemDetailService.selectByDesignItemId(designLikeDTO.getDesignItemId()); - if (CollectionUtil.isEmpty(designItemDetails)) { - throw new BusinessException("new.designItemDetails.not.found"); - } +// List designItemDetails = designItemDetailService.selectByDesignItemId(designLikeDTO.getDesignItemId()); +// if (CollectionUtil.isEmpty(designItemDetails)) { +// throw new BusinessException("new.designItemDetails.not.found"); +// } //判断老的element合并到新的是否满足 数量不超过15 - List newElementIds = validateMergeElement(oldElements, designItemDetails); +// List newElementIds = validateMergeElement(oldElements, designItemDetails); //合并,关联新的element到collection - collectionElementService.relationCollection(newElementIds, userLikeGroup.getCollectionId()); +// collectionElementService.relationCollection(newElementIds, userLikeGroup.getCollectionId()); //处理关联关系,修复element覆盖得情况 - handleCollectionElementRelation(userLikeGroup.getCollectionId(), false, newElementIds); +// handleCollectionElementRelation(userLikeGroup.getCollectionId(), false, newElementIds); QueryWrapper qw = new QueryWrapper<>(); qw.lambda().eq(TDesignPythonOutfit::getDesignItemId, designLikeDTO.getDesignItemId()); @@ -1151,7 +1151,7 @@ public class DesignServiceImpl extends ServiceImpl impleme } else { //第一次like - userGroupId = userLikeGroupService.insertUserGroup(userInfo.getId(), designItem.getCollectionId(), designLikeDTO.getTimeZone()); + userGroupId = userLikeGroupService.insertUserGroup(userInfo.getId(), designItem.getCollectionId(), designLikeDTO.getTimeZone(), designLikeDTO.getProjectId()); QueryWrapper qw = new QueryWrapper<>(); qw.lambda().eq(TDesignPythonOutfit::getDesignItemId, designLikeDTO.getDesignItemId()); List tDesignPythonOutfits = designPythonOutfitMapper.selectList(qw); 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 83b3e9c9..846f0e78 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.*; @@ -109,6 +107,12 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(UserLikeGroup::getProjectId, projectId); List userLikeGroupList = userLikeGroupMapper.selectList(qw); @@ -387,9 +393,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)); @@ -758,9 +783,17 @@ public class UserLikeGroupServiceImpl extends ServiceImpl brandRelLibraryQueryWrapper = new QueryWrapper<>(); + brandRelLibraryQueryWrapper.lambda().eq(BrandRelLibrary::getBrandId, brandId); + List brandRelLibraries = brandRelLibraryMapper.selectList(brandRelLibraryQueryWrapper); + Set collect = brandRelLibraries.stream().map(BrandRelLibrary::getLibraryId).collect(Collectors.toSet()); + AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder(); accountService.getById(authPrincipalVo.getId()); - for (Long libraryId : productImageInitializeDTO.getLibraryIds()) { + for (Long libraryId : collect) { Library library = libraryMapper.selectById(libraryId); String url = library.getUrl(); String gender = library.getLevel2Type(); + // 提取sketch + JSONObject sketchList = pythonService.segProduct(url); String clothCategory = pythonService.getClothCategory(url, gender); JSONObject attributeRecognition = pythonService.getAttributeRecognition(url, clothCategory, gender); JSONObject data = attributeRecognition.getJSONObject("data"); @@ -1347,6 +1394,23 @@ public class UserLikeGroupServiceImpl extends ServiceImpl voList = new ArrayList<>(); + for (CollectionElement collectionElement : collectionElements) { + CollectionSketchVO vo = CopyUtil.copyObject(collectionElement, CollectionSketchVO.class); + String url = collectionElement.getUrl(); + if (url.contains(".")) { + String[] split = url.split("\\."); + vo.setUrlWithWhiteSide(minioUtil.getPreSignedUrl(split[0] + "-show." + split[1], 24 * 60, true)); + }else { + vo.setUrlWithWhiteSide(minioUtil.getPreSignedUrl(url + "-show", 24 * 60, true)); + } + vo.setIsPin(collectionElement.getHasPin()); + vo.setLevel2Type(collectionElement.getLevel2Type()); + vo.setDesignType("Collection"); + vo.setSketchBoardId(collectionElement.getId()); + voList.add(vo); + } + moduleChooseVO.setBoundingBox(voList); moduleChooseVO.setSketchBoard(list); }else if (module.equals(Module.design.name())) { DesignModuleChooseVO vo = new DesignModuleChooseVO(); @@ -1426,12 +1490,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, "ToProductImage"); List toProductImageResults = toProductImageResultMapper.selectList(qw); for (ToProductImageResult toProductImageResult : toProductImageResults) { @@ -1452,12 +1517,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) { @@ -1476,7 +1542,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl colorBoards = moduleSaveDTO.getColorBoard(); @@ -1634,7 +1706,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(CollectionElement::getProjectId, projectId); qw.lambda().eq(CollectionElement::getLevel1Type, CollectionLevel1TypeEnum.SKETCH_BOARD.getRealName()); @@ -1659,7 +1734,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); + qw.lambda().eq(CollectionElement::getLevel1Type, CollectionLevel1TypeEnum.SKETCH_BOARD.getRealName()); + qw.lambda().eq(CollectionElement::getProjectId, projectId); + List collectionElements = collectionElementMapper.selectList(qw); + + List voList = new ArrayList<>(); + for (CollectionElement collectionElement : collectionElements) { + CollectionSketchVO vo = CopyUtil.copyObject(collectionElement, CollectionSketchVO.class); + String url = collectionElement.getUrl(); + libraryService.processSketchBoards(url, collectionElement.getLevel2Type()); + if (url.contains(".")) { + String[] split = url.split("\\."); + vo.setUrlWithWhiteSide(minioUtil.getPreSignedUrl(split[0] + "-show." + split[1], 24 * 60, true)); + }else { + vo.setUrlWithWhiteSide(minioUtil.getPreSignedUrl(url + "-show", 24 * 60, true)); + } + vo.setIsPin(collectionElement.getHasPin()); + vo.setLevel2Type(collectionElement.getLevel2Type()); + vo.setDesignType("Collection"); + vo.setSketchBoardId(collectionElement.getId()); + voList.add(vo); + } + result.setBoundingBox(voList); + } + return result; } @Override - public LibraryModelPoint getMannequinDetail(MannequinDTO mannequinDTO) { + public QueryLibraryPageVO getMannequinDetail(MannequinDTO mannequinDTO) { + QueryLibraryPageVO vo = new QueryLibraryPageVO(); + if (mannequinDTO.getType().equals("System")) { + SysFile sysFile = sysFileMapper.selectById(mannequinDTO.getId()); + vo.setDesignType("System"); + vo.setLevel1Type(sysFile.getLevel1Type()); + vo.setLevel2Type(sysFile.getLevel2Type()); + vo.setName(sysFile.getName()); + vo.setMinIOPath(minioUtil.getPreSignedUrl(sysFile.getUrl(), 24 * 60)); + }else { + Library library = libraryMapper.selectById(mannequinDTO.getId()); + vo.setDesignType("Library"); + vo.setLevel1Type(library.getLevel1Type()); + vo.setLevel2Type(library.getLevel2Type()); + vo.setName(library.getName()); + vo.setMinIOPath(minioUtil.getPreSignedUrl(library.getUrl(), 24 * 60)); + } QueryWrapper qw = new QueryWrapper<>(); qw.lambda().eq(LibraryModelPoint::getRelationId, mannequinDTO.getId()); qw.lambda().eq(LibraryModelPoint::getModelType, mannequinDTO.getType()); @@ -1712,6 +1830,51 @@ public class UserLikeGroupServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.lambda().eq(WorkspaceRelStyle::getWorkspaceId, vo.getId()); List workspaceRelStyles = workspaceRelStyleMapper.selectList(qw); @@ -647,7 +654,8 @@ public class WorkspaceServiceImpl extends ServiceImpl