From 5ea8e851d780daf72e7d1eefe2937ef5b026993f Mon Sep 17 00:00:00 2001 From: shahaibo <1023316923@qq.com> Date: Mon, 6 Jan 2025 10:46:51 +0800 Subject: [PATCH] TASK:AiDA design like sort --- pom.xml | 8 ++- .../ai/da/controller/DesignController.java | 6 ++ .../da/mapper/primary/UserLikeSortMapper.java | 7 ++ .../mapper/primary/entity/UserLikeSort.java | 24 +++++++ .../com/ai/da/model/dto/UserLikeSortDTO.java | 13 ++++ .../java/com/ai/da/model/vo/DesignLikeVO.java | 2 + .../java/com/ai/da/model/vo/UserLikeVO.java | 2 + .../java/com/ai/da/python/PythonService.java | 31 +++++++-- .../java/com/ai/da/service/DesignService.java | 2 + .../ai/da/service/impl/DesignServiceImpl.java | 66 +++++++++++++++++-- .../impl/UserLikeGroupServiceImpl.java | 9 +++ 11 files changed, 159 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/ai/da/mapper/primary/UserLikeSortMapper.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/UserLikeSort.java create mode 100644 src/main/java/com/ai/da/model/dto/UserLikeSortDTO.java diff --git a/pom.xml b/pom.xml index ff9df865..db7bdb0b 100644 --- a/pom.xml +++ b/pom.xml @@ -151,9 +151,15 @@ 3.0.3 + + + + + + com.tencentcloudapi - tencentcloud-sdk-java-ses + tencentcloud-sdk-java 3.1.572 diff --git a/src/main/java/com/ai/da/controller/DesignController.java b/src/main/java/com/ai/da/controller/DesignController.java index 934bcecb..6046ed32 100644 --- a/src/main/java/com/ai/da/controller/DesignController.java +++ b/src/main/java/com/ai/da/controller/DesignController.java @@ -71,6 +71,12 @@ public class DesignController { return Response.success(designService.dislike(disDesignLikeDTO)); } + @ApiOperation(value = "Design sort") + @PostMapping("/sort") + public Response sort(@Valid @RequestBody UserLikeSortDTO userLikeSortDTO) { + return Response.success(designService.sort(userLikeSortDTO)); + } + @ApiOperation(value = "sketchBoard upload generate design前裁剪") @PostMapping("/sketchBoardsBoundingBox") public Response> sketchesBoundingBox(@Valid @RequestBody ReDesignCollectionDTO reDesignCollectionDTO) { diff --git a/src/main/java/com/ai/da/mapper/primary/UserLikeSortMapper.java b/src/main/java/com/ai/da/mapper/primary/UserLikeSortMapper.java new file mode 100644 index 00000000..c6966249 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/UserLikeSortMapper.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.UserLikeSort; + +public interface UserLikeSortMapper extends CommonMapper { +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/UserLikeSort.java b/src/main/java/com/ai/da/mapper/primary/entity/UserLikeSort.java new file mode 100644 index 00000000..3e733d3c --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/UserLikeSort.java @@ -0,0 +1,24 @@ +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.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("user_like_sort") +public class UserLikeSort implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + private Long userLikeGroupId; + private Long userLikeId; + private Integer sort; +} \ No newline at end of file diff --git a/src/main/java/com/ai/da/model/dto/UserLikeSortDTO.java b/src/main/java/com/ai/da/model/dto/UserLikeSortDTO.java new file mode 100644 index 00000000..9cf6dd8c --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/UserLikeSortDTO.java @@ -0,0 +1,13 @@ +package com.ai.da.model.dto; + +import com.ai.da.mapper.primary.entity.UserLikeSort; +import lombok.Data; + +import java.util.List; + +@Data +public class UserLikeSortDTO{ + private Long userLikeGroupId; + + List userLikeSortList; +} diff --git a/src/main/java/com/ai/da/model/vo/DesignLikeVO.java b/src/main/java/com/ai/da/model/vo/DesignLikeVO.java index 2a38f8bd..a54bc2ec 100644 --- a/src/main/java/com/ai/da/model/vo/DesignLikeVO.java +++ b/src/main/java/com/ai/da/model/vo/DesignLikeVO.java @@ -19,6 +19,8 @@ public class DesignLikeVO { private String pictureName; + private Long userLikeId; + public DesignLikeVO() { } } diff --git a/src/main/java/com/ai/da/model/vo/UserLikeVO.java b/src/main/java/com/ai/da/model/vo/UserLikeVO.java index 589e8fc6..a1344f80 100644 --- a/src/main/java/com/ai/da/model/vo/UserLikeVO.java +++ b/src/main/java/com/ai/da/model/vo/UserLikeVO.java @@ -23,4 +23,6 @@ public class UserLikeVO { @ApiModelProperty("图片路径") private String designOutfitUrl; private String pictureName; + + private Integer sort; } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index f7f47631..9cfb9fa4 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -268,7 +268,8 @@ public class PythonService { DesignPythonObject pythonObject = createDesignPythonObject(elementVO, designPictureType, systemScale, singleOverall, switchCategory, i); // 如果当前对象与已组装的对象重复,则跳过当前组装 - if (assembledObjects.contains(pythonObject)) { + DesignPythonObject designPythonObjectCopy = getCopy(pythonObject); + if (assembledObjects.contains(designPythonObjectCopy)) { if (lastAssembledObject != null && assembledObjects.contains(lastAssembledObject)) { // 如果当前组装与前一个组装的对象重复,且前一个组装也重复,结束组装 System.out.println("当前组装的对象与前两个组装的对象重复,结束组装。"); @@ -279,8 +280,8 @@ public class PythonService { } // 将当前对象添加到已组装的集合中,并记录 - assembledObjects.add(pythonObject); - lastAssembledObject = pythonObject; // 更新上一次组装的对象 + assembledObjects.add(designPythonObjectCopy); + lastAssembledObject = designPythonObjectCopy; // 更新上一次组装的对象 objects.add(pythonObject); redisUtil.addProcessId(processId, i + 1); @@ -288,6 +289,26 @@ public class PythonService { return designPythonObjects; } + private DesignPythonObject getCopy(DesignPythonObject pythonObject) { + DesignPythonObject designPythonObjectCopy = CopyUtil.copyObject(pythonObject, DesignPythonObject.class); + designPythonObjectCopy.setObjectSign(null); + DesignPythonBasic basic = designPythonObjectCopy.getBasic(); + basic.setSave_name(null); + designPythonObjectCopy.setBasic(basic); + List items = designPythonObjectCopy.getItems(); + List itemsCopy = new ArrayList<>(); + for (DesignPythonItem item : items) { + item.setElementId(null); + item.setIcon(null); + item.setBusinessId(null); + item.setImage_id(null); + item.setImageId(null); + itemsCopy.add(item); + } + designPythonObjectCopy.setItems(itemsCopy); + return designPythonObjectCopy; + } + private void updateSketchNumbers(CurrentDesignPictureTypeEnum designPictureType, int[] sketchNumbers) { switch (designPictureType) { case PIN: @@ -320,7 +341,9 @@ public class PythonService { DesignPythonObject pythonObject = new DesignPythonObject(); pythonObject.setItems(coverToDesignPythonItemNew(elementVO, designPictureType, systemScale)); pythonObject.setBasic(coverToBasic(pythonObject.getItems().get(0), singleOverall, switchCategory, elementVO.getDesignLibraryModelPoint())); - pythonObject.setObjectSign(elementVO.getRequestIdList().get(i)); + if (CollectionUtil.isNotEmpty(elementVO.getRequestIdList())) { + pythonObject.setObjectSign(elementVO.getRequestIdList().get(i)); + } return pythonObject; } diff --git a/src/main/java/com/ai/da/service/DesignService.java b/src/main/java/com/ai/da/service/DesignService.java index 80d13f47..9dc7591d 100644 --- a/src/main/java/com/ai/da/service/DesignService.java +++ b/src/main/java/com/ai/da/service/DesignService.java @@ -110,4 +110,6 @@ public interface DesignService extends IService { String designCloud(DesignCollectionDTO designDTO); void processDesignBatch(Map designBatchResult); + + Boolean sort(UserLikeSortDTO userLikeSortDTO); } 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 46ff2d8c..c24ce8a6 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -8,10 +8,7 @@ import com.ai.da.common.constant.CommonConstant; import com.ai.da.common.context.UserContext; import com.ai.da.common.enums.*; import com.ai.da.common.utils.*; -import com.ai.da.mapper.primary.DesignBatchMapper; -import com.ai.da.mapper.primary.DesignMapper; -import com.ai.da.mapper.primary.GenerateDetailMapper; -import com.ai.da.mapper.primary.TDesignPythonOutfitMapper; +import com.ai.da.mapper.primary.*; import com.ai.da.mapper.primary.entity.*; import com.ai.da.mapper.primary.entity.Collection; import com.ai.da.model.dto.*; @@ -114,6 +111,9 @@ public class DesignServiceImpl extends ServiceImpl impleme @Resource private DesignBatchMapper designBatchMapper; + @Resource + private UserLikeSortMapper userLikeSortMapper; + private final ConcurrentHashMap> designContext = new ConcurrentHashMap<>(); @@ -1040,7 +1040,9 @@ public class DesignServiceImpl extends ServiceImpl impleme } String pictureName = null; UserLike userLike; + Boolean isFirst = true; if (Objects.nonNull(userGroupId)) { + isFirst = false; UserLikeGroup userLikeGroup = userLikeGroupService.getById(userGroupId); if (Objects.isNull(userLikeGroup)) { throw new BusinessException("userLikeGroup.not.found"); @@ -1086,6 +1088,24 @@ public class DesignServiceImpl extends ServiceImpl impleme designItem.getDesignId(), designLikeDTO.getDesignItemId(), designLikeDTO.getDesignPythonOutfitId(), tDesignPythonOutfits.get(0).getDesignUrl(), designLikeDTO.getTimeZone()); } userLikeService.save(userLike); + if (isFirst) { + UserLikeSort userLikeSort = new UserLikeSort(); + userLikeSort.setUserLikeGroupId(userGroupId); + userLikeSort.setUserLikeId(userLike.getId()); + userLikeSort.setSort(1); + userLikeSortMapper.insert(userLikeSort); + }else { + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(UserLikeSort::getUserLikeGroupId, userGroupId); + qw.lambda().orderByDesc(UserLikeSort::getSort); + List userLikeSorts = userLikeSortMapper.selectList(qw); + Integer sort = userLikeSorts.get(0).getSort(); + UserLikeSort userLikeSort = new UserLikeSort(); + userLikeSort.setUserLikeGroupId(userGroupId); + userLikeSort.setUserLikeId(userLike.getId()); + userLikeSort.setSort(sort + 1); + userLikeSortMapper.insert(userLikeSort); + } groupDetailId = userLike.getId(); String designUrl = designPythonOutfitMapper.selectById(userLike.getDesignOutfitId()).getDesignUrl(); if (designUrl.contains("/")) { @@ -1094,7 +1114,7 @@ public class DesignServiceImpl extends ServiceImpl impleme } //修改designItem为like状态 designItemService.updateLikeStatus(designLikeDTO.getDesignItemId(), (byte) 1); - return new DesignLikeVO(userGroupId, groupDetailId, pictureName); + return new DesignLikeVO(userGroupId, groupDetailId, pictureName, userLike.getId()); } private List validateMergeElement(List oldElements, List designItemDetails) { @@ -1176,9 +1196,32 @@ public class DesignServiceImpl extends ServiceImpl impleme //group 下面没有元素时候 直接删除 // userLikeGroupService.removeById(userLike.getUserLikeGroupId()); } + + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(UserLikeSort::getUserLikeGroupId, userLike.getUserLikeGroupId()); + qw.lambda().orderByDesc(UserLikeSort::getSort); + List userLikeSorts = userLikeSortMapper.selectList(qw); + UserLikeSort userLikeSort = getUserLikeSortByUserLikeId(userLike.getId()); + Long userLikeSortId = userLikeSort.getId(); + for (UserLikeSort likeSort : userLikeSorts) { + if (Objects.equals(likeSort.getId(), userLikeSortId)) { + userLikeSortMapper.deleteById(likeSort); + break; + }else { + likeSort.setSort(likeSort.getSort() - 1); + userLikeSortMapper.updateById(likeSort); + } + } return Boolean.TRUE; } + private UserLikeSort getUserLikeSortByUserLikeId(Long userLikeId) { + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(UserLikeSort::getUserLikeId, userLikeId); + UserLikeSort userLikeSort = userLikeSortMapper.selectOne(qw); + return userLikeSort; + } + @Override public String generateHighDesign(GenerateHighDesignDTO generateHighDesignDTO) { DesignItem designItem = designItemService.getById(generateHighDesignDTO.getDesignItemId()); @@ -1874,4 +1917,15 @@ public class DesignServiceImpl extends ServiceImpl impleme } -} + @Override + public Boolean sort(UserLikeSortDTO userLikeSortDTO) { +// QueryWrapper qw = new QueryWrapper<>(); +// qw.lambda().eq(UserLikeSort::getUserLikeGroupId, userLikeSortDTO.getUserLikeGroupId()); +// userLikeSortMapper.delete(qw); + for (UserLikeSort userLikeSort : userLikeSortDTO.getUserLikeSortList()) { + userLikeSortMapper.updateById(userLikeSort); + } + return Boolean.TRUE; + } + +} \ No newline at end of file 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 0aff560f..4e8a730f 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -86,6 +86,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl userLikeSortQueryWrapper = new QueryWrapper<>(); + userLikeSortQueryWrapper.lambda().eq(UserLikeSort::getUserLikeId, o.getId()); + List userLikeSorts = userLikeSortMapper.selectList(userLikeSortQueryWrapper); + if (CollectionUtil.isNotEmpty(userLikeSorts)) { + o.setSort(userLikeSorts.get(0).getSort()); + } }); UserLikeCollectionVO userLikeCollection = collectionService.chooseCollection(group.getCollectionId()); Integer beenPublished = 0;