TASK:AiDA design like sort、moodboardPosition
This commit is contained in:
@@ -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> {
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -61,7 +61,7 @@ public class DesignCollectionDTO {
|
||||
@ApiModelProperty("python端design进程ID")
|
||||
private String processId;
|
||||
|
||||
private String moodboardPostion;
|
||||
private String moodboardPosition;
|
||||
|
||||
private List<String> requestIdList;
|
||||
|
||||
|
||||
@@ -25,4 +25,5 @@ public class UserLikeVO {
|
||||
private String pictureName;
|
||||
|
||||
private Integer sort;
|
||||
private Long userLikeSortId;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user