TASK:AiDA design like sort、moodboardPosition

This commit is contained in:
shahaibo
2025-01-07 15:29:46 +08:00
parent 1a9f06d259
commit b49f098a5e
7 changed files with 174 additions and 6 deletions

View File

@@ -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<MoodboardPosition> {
}

View File

@@ -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;
}

View File

@@ -61,7 +61,7 @@ public class DesignCollectionDTO {
@ApiModelProperty("python端design进程ID")
private String processId;
private String moodboardPostion;
private String moodboardPosition;
private List<String> requestIdList;

View File

@@ -25,4 +25,5 @@ public class UserLikeVO {
private String pictureName;
private Integer sort;
private Long userLikeSortId;
}

View File

@@ -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<CollectionMapper, Collect
private CollectionElementService collectionElementService;
@Resource
private MinioUtil minioUtil;
@Resource
private MoodboardPositionMapper moodboardPositionMapper;
@Transactional(rollbackFor = Exception.class)
@Override
@@ -84,7 +93,12 @@ public class CollectionServiceImpl extends ServiceImpl<CollectionMapper, Collect
if (collection.getMoodTemplateId() != null) {
CollectionElement byId = collectionElementService.getById(response.getMoodTemplateId());
if (null != collection.getMoodboardPosition()) {
String moodboardPositionString = getMoodboardPositionString(collection.getId());
if (StringUtils.isBlank(moodboardPositionString)) {
response.setMoodboardPosition(collection.getMoodboardPosition());
}else {
response.setMoodboardPosition(moodboardPositionString);
}
}
if (Objects.nonNull(byId)) {
response.setMoodTemplateName(byId.getName());
@@ -147,6 +161,48 @@ public class CollectionServiceImpl extends ServiceImpl<CollectionMapper, Collect
return response;
}
private String getMoodboardPositionString(Long id) {
QueryWrapper<MoodboardPosition> qw = new QueryWrapper<>();
qw.lambda().eq(MoodboardPosition::getCollectionId, id);
List<MoodboardPosition> 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<JSONObject> styleList = (List<JSONObject>) 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<CollectionColorVO> resolveColorBoard(List<CollectionElement> collectionElements) {
return CopyUtil.copyList(collectionElements, CollectionColorVO.class, (o, d) -> {
String name = o.getName();

View File

@@ -94,6 +94,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> 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<DesignMapper, Design> 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<DesignMapper, Design> impleme
return requestId;
}
private void parseMoodboardPosition(String moodboardPosition, Long collectionIdParam) {
if (!StringUtils.isEmpty(moodboardPosition)) {
// 将 JSON 字符串解析为 JSONObject
JSONObject moodboardPositionJson = JSONObject.parseObject(moodboardPosition);
// 准备保存的 MoodboardPosition 列表
List<MoodboardPosition> moodboardPositions = new ArrayList<>();
// 遍历 JSON 对象的 key即样式类型
for (String key : moodboardPositionJson.keySet()) {
// 特殊处理 "class" 字段
if ("class".equals(key)) {
// 获取 "class" 字段的值并将其转为 List<String>
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<DesignMapper, Design> 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<DesignMapper, Design> 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;
}

View File

@@ -189,7 +189,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
userLikeSortQueryWrapper.lambda().eq(UserLikeSort::getUserLikeId, o.getId());
List<UserLikeSort> 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());