From b49f098a5e7b0ba2957de8f2fc139eec8e15c074 Mon Sep 17 00:00:00 2001 From: shahaibo <1023316923@qq.com> Date: Tue, 7 Jan 2025 15:29:46 +0800 Subject: [PATCH] =?UTF-8?q?TASK:AiDA=20design=20like=20sort=E3=80=81moodbo?= =?UTF-8?q?ardPosition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../primary/MoodboardPositionMapper.java | 7 ++ .../primary/entity/MoodboardPosition.java | 29 +++++++ .../ai/da/model/dto/DesignCollectionDTO.java | 2 +- .../java/com/ai/da/model/vo/UserLikeVO.java | 1 + .../service/impl/CollectionServiceImpl.java | 58 +++++++++++++- .../ai/da/service/impl/DesignServiceImpl.java | 79 ++++++++++++++++++- .../impl/UserLikeGroupServiceImpl.java | 4 +- 7 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/ai/da/mapper/primary/MoodboardPositionMapper.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/MoodboardPosition.java diff --git a/src/main/java/com/ai/da/mapper/primary/MoodboardPositionMapper.java b/src/main/java/com/ai/da/mapper/primary/MoodboardPositionMapper.java new file mode 100644 index 00000000..1ea6f067 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/MoodboardPositionMapper.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.MoodboardPosition; + +public interface MoodboardPositionMapper extends CommonMapper { +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/MoodboardPosition.java b/src/main/java/com/ai/da/mapper/primary/entity/MoodboardPosition.java new file mode 100644 index 00000000..db58f7d3 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/MoodboardPosition.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.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("moodboard_position") +public class MoodboardPosition implements Serializable { + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Long id; + private Long moodboardId; + private Long collectionId; + private String type; + private String styleData; + private Integer sequence; + private LocalDateTime createTime; + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/ai/da/model/dto/DesignCollectionDTO.java b/src/main/java/com/ai/da/model/dto/DesignCollectionDTO.java index 91120a0b..54314307 100644 --- a/src/main/java/com/ai/da/model/dto/DesignCollectionDTO.java +++ b/src/main/java/com/ai/da/model/dto/DesignCollectionDTO.java @@ -61,7 +61,7 @@ public class DesignCollectionDTO { @ApiModelProperty("python端design进程ID") private String processId; - private String moodboardPostion; + private String moodboardPosition; private List requestIdList; 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 a1344f80..db4d4638 100644 --- a/src/main/java/com/ai/da/model/vo/UserLikeVO.java +++ b/src/main/java/com/ai/da/model/vo/UserLikeVO.java @@ -25,4 +25,5 @@ public class UserLikeVO { private String pictureName; private Integer sort; + private Long userLikeSortId; } diff --git a/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java b/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java index 218c9814..90e299e2 100644 --- a/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java @@ -9,13 +9,19 @@ import com.ai.da.common.utils.DateUtil; import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.RedisUtil; import com.ai.da.mapper.primary.CollectionMapper; +import com.ai.da.mapper.primary.MoodboardPositionMapper; import com.ai.da.mapper.primary.entity.Collection; import com.ai.da.mapper.primary.entity.CollectionElement; +import com.ai.da.mapper.primary.entity.MoodboardPosition; import com.ai.da.model.vo.CollectionColorVO; import com.ai.da.model.vo.CollectionElementVO; import com.ai.da.model.vo.UserLikeCollectionVO; import com.ai.da.service.CollectionElementService; import com.ai.da.service.CollectionService; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.netty.util.internal.StringUtil; @@ -25,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -45,6 +52,8 @@ public class CollectionServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); + qw.lambda().eq(MoodboardPosition::getCollectionId, id); + List moodboardPositions = moodboardPositionMapper.selectList(qw); + if (moodboardPositions != null && !moodboardPositions.isEmpty()) { + // 将查询结果转换为 JSON 字符串 + JSONObject resultJson = new JSONObject(); + + // 遍历 MoodboardPosition 列表,根据实际情况填充到 resultJson 中 + for (MoodboardPosition position : moodboardPositions) { + String type = position.getType(); + String styleData = position.getStyleData(); + int sequence = position.getSequence(); // 获取 sequence 值 + + // 如果 type 字段还没有对应的 JSONArray,则初始化它 + if (!resultJson.containsKey(type)) { + resultJson.put(type, new ArrayList<>()); + } + + // 获取对应类型的列表 + List styleList = (List) resultJson.get(type); + + // 确保列表长度足够,可以容纳 `sequence` 索引 + while (styleList.size() <= sequence) { + styleList.add(new JSONObject()); // 添加空的 JSONObject,直到长度大于 `sequence` + } + + // 将解析的样式数据存入正确的索引位置 + JSONObject styleObject = JSON.parseObject(styleData); + styleList.set(sequence, styleObject); // 根据 sequence 设置数据 + + // 更新回 resultJson + resultJson.put(type, styleList); + } + + // 将最终结果转换为字符串 + return resultJson.toJSONString(); + } else { + return null; // 返回空的 JSON 对象 + } + } + private List resolveColorBoard(List collectionElements) { return CopyUtil.copyList(collectionElements, CollectionColorVO.class, (o, d) -> { String name = o.getName(); 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 984ab558..0d27ef2f 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -94,6 +94,9 @@ public class DesignServiceImpl extends ServiceImpl impleme @Resource private TDesignPythonOutfitMapper designPythonOutfitMapper; + @Resource + private MoodboardPositionMapper moodboardPositionMapper; + @Value("${minio.endpoint}") private String endpoint; @Value("${minio.bucketName.results}") @@ -304,7 +307,9 @@ public class DesignServiceImpl extends ServiceImpl impleme //保存collection Long collectionId; if (null == collectionIdParam) { - collectionId = collectionService.saveCollection(userInfo.getId(), designDTO.getTimeZone(), designDTO.getMoodTemplateId(), designDTO.getMoodboardPostion()); + collectionId = collectionService.saveCollection(userInfo.getId(), designDTO.getTimeZone(), designDTO.getMoodTemplateId(), designDTO.getMoodboardPosition()); + String moodboardPosition = designDTO.getMoodboardPosition(); + parseMoodboardPosition(moodboardPosition, collectionId); }else { collectionId = collectionIdParam; } @@ -371,6 +376,74 @@ public class DesignServiceImpl extends ServiceImpl impleme return requestId; } + private void parseMoodboardPosition(String moodboardPosition, Long collectionIdParam) { + if (!StringUtils.isEmpty(moodboardPosition)) { + // 将 JSON 字符串解析为 JSONObject + JSONObject moodboardPositionJson = JSONObject.parseObject(moodboardPosition); + + // 准备保存的 MoodboardPosition 列表 + List moodboardPositions = new ArrayList<>(); + + // 遍历 JSON 对象的 key(即样式类型) + for (String key : moodboardPositionJson.keySet()) { + // 特殊处理 "class" 字段 + if ("class".equals(key)) { + // 获取 "class" 字段的值并将其转为 List + JSONArray classArray = moodboardPositionJson.getJSONArray(key); + if (classArray != null) { + + for (int j = 0; j < classArray.size(); j++) { + // 将 classList 存入 MoodboardPosition(或者其他结构) + + MoodboardPosition position = new MoodboardPosition() + .setCollectionId(collectionIdParam) // 关联 Collection ID + .setType(key) // 样式类型 + .setStyleData(classArray.getString(j)) // 设置 class 字段 + .setSequence(j) // 根据索引值设置顺序 + .setCreateTime(LocalDateTime.now()) // 创建时间 + .setUpdateTime(LocalDateTime.now()); // 更新时间 + + // 添加到列表中 + moodboardPositions.add(position); + } + } + continue; // 跳过 "class" 字段的常规处理 + } + + JSONArray styleArray = moodboardPositionJson.getJSONArray(key); + if (styleArray != null) { + for (int i = 0; i < styleArray.size(); i++) { + // 获取当前样式数据 + JSONObject styleData = styleArray.getJSONObject(i); + + // 构建 MoodboardPosition 实例 + MoodboardPosition position = new MoodboardPosition() + .setCollectionId(collectionIdParam) // 关联 Collection ID + .setType(key) // 样式类型 + .setStyleData(styleData.toJSONString()) // 样式数据存为 JSON 字符串 + .setSequence(i) // 根据索引值设置顺序 + .setCreateTime(LocalDateTime.now()) // 创建时间 + .setUpdateTime(LocalDateTime.now()); // 更新时间 + + // 添加到列表中 + moodboardPositions.add(position); + } + } + } + // 如果解析结果非空,保存到数据库 + if (!moodboardPositions.isEmpty()) { + for (MoodboardPosition position : moodboardPositions) { + moodboardPositionMapper.insert(position); + } + log.info("成功解析并保存 {} 条 MoodboardPosition 数据", moodboardPositions.size()); + } else { + log.warn("未找到可保存的 MoodboardPosition 数据"); + } + } else { + log.warn("传入的 moodboardPosition 字段为空"); + } + } + @Override public void relationImageId(DesignPythonObjects pythonObjects) { @@ -417,7 +490,7 @@ public class DesignServiceImpl extends ServiceImpl impleme if (!reDesignDTO.getMoodboardPosition().equals(collection.getMoodboardPosition())) { collection.setMoodboardPosition(reDesignDTO.getMoodboardPosition()); } - if (null != reDesignDTO.getMoodTemplateId() && reDesignDTO.getMoodTemplateId().equals(collection.getMoodTemplateId())) { + if (null != reDesignDTO.getMoodTemplateId() && !reDesignDTO.getMoodTemplateId().equals(collection.getMoodTemplateId())) { collection.setMoodTemplateId(reDesignDTO.getMoodTemplateId()); } collectionService.updateById(collection); @@ -1672,7 +1745,7 @@ public class DesignServiceImpl extends ServiceImpl impleme //保存collection Long collectionId; if (null == collectionIdParam) { - collectionId = collectionService.saveCollection(userInfo.getId(), designDTO.getTimeZone(), designDTO.getMoodTemplateId(), designDTO.getMoodboardPostion()); + collectionId = collectionService.saveCollection(userInfo.getId(), designDTO.getTimeZone(), designDTO.getMoodTemplateId(), designDTO.getMoodboardPosition()); }else { collectionId = collectionIdParam; } 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 697ea056..87ced60b 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -189,7 +189,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl userLikeSorts = userLikeSortMapper.selectList(userLikeSortQueryWrapper); if (CollectionUtil.isNotEmpty(userLikeSorts)) { - o.setSort(userLikeSorts.get(0).getSort()); + UserLikeSort userLikeSort = userLikeSorts.get(0); + o.setSort(userLikeSort.getSort()); + o.setUserLikeSortId(userLikeSort.getId()); } }); UserLikeCollectionVO userLikeCollection = collectionService.chooseCollection(group.getCollectionId());