mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2025-01-31 17:40:05 +08:00
【增加】mj图片处理成功消息,增加component操作,处理error信息保存
This commit is contained in:
parent
b6096b76d2
commit
38a9c1a7ee
@ -1,8 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.ai.convert;
|
package cn.iocoder.yudao.module.ai.convert;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage;
|
||||||
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDallDrawingReqVO;
|
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDallDrawingReqVO;
|
||||||
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDallDrawingRespVO;
|
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDallDrawingRespVO;
|
||||||
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageListRespVO;
|
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageListRespVO;
|
||||||
|
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageMidjourneyOperationsVO;
|
||||||
import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
|
import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -36,4 +38,12 @@ public interface AiImageConvert {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<AiImageListRespVO> convertAiImageListRespVO(List<AiImageDO> list);
|
List<AiImageListRespVO> convertAiImageListRespVO(List<AiImageDO> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换 - AiImageMidjourneyOperationsVO
|
||||||
|
*
|
||||||
|
* @param component
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
AiImageMidjourneyOperationsVO convertAiImageMidjourneyOperationsVO(MidjourneyMessage.Component component);
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,21 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage;
|
import cn.iocoder.yudao.framework.ai.midjourney.MidjourneyMessage;
|
||||||
import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum;
|
import cn.iocoder.yudao.framework.ai.midjourney.constants.MidjourneyGennerateStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler;
|
import cn.iocoder.yudao.framework.ai.midjourney.webSocket.MidjourneyMessageHandler;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
|
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageMidjourneyOperationsVO;
|
||||||
|
import cn.iocoder.yudao.module.ai.convert.AiImageConvert;
|
||||||
import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
|
import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
|
||||||
import cn.iocoder.yudao.module.ai.enums.AiImageDrawingStatusEnum;
|
|
||||||
import cn.iocoder.yudao.module.ai.dal.mysql.AiImageMapper;
|
import cn.iocoder.yudao.module.ai.dal.mysql.AiImageMapper;
|
||||||
|
import cn.iocoder.yudao.module.ai.enums.AiImageDrawingStatusEnum;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* yudao message handler
|
* yudao message handler
|
||||||
*
|
*
|
||||||
@ -45,6 +52,36 @@ public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler {
|
|||||||
if (StrUtil.isBlank(midjourneyMessage.getNonce())) {
|
if (StrUtil.isBlank(midjourneyMessage.getNonce())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 根据 Embeds 来判断是否异常
|
||||||
|
if (CollUtil.isEmpty(midjourneyMessage.getEmbeds())) {
|
||||||
|
successHandler(midjourneyMessage);
|
||||||
|
} else {
|
||||||
|
errorHandler(midjourneyMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void errorHandler(MidjourneyMessage midjourneyMessage) {
|
||||||
|
// image 编号
|
||||||
|
Long aiImageId = Long.valueOf(midjourneyMessage.getNonce());
|
||||||
|
// 获取 error message
|
||||||
|
String errorMessage = getErrorMessage(midjourneyMessage);
|
||||||
|
aiImageMapper.updateById(
|
||||||
|
new AiImageDO()
|
||||||
|
.setId(aiImageId)
|
||||||
|
.setDrawingErrorMessage(errorMessage)
|
||||||
|
.setDrawingStatus(AiImageDrawingStatusEnum.FAIL.getStatus())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getErrorMessage(MidjourneyMessage midjourneyMessage) {
|
||||||
|
StringBuilder errorMessage = new StringBuilder();
|
||||||
|
for (MidjourneyMessage.Embed embed : midjourneyMessage.getEmbeds()) {
|
||||||
|
errorMessage.append(embed.getDescription());
|
||||||
|
}
|
||||||
|
return errorMessage.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void successHandler(MidjourneyMessage midjourneyMessage) {
|
||||||
// 获取id
|
// 获取id
|
||||||
Long aiImageId = Long.valueOf(midjourneyMessage.getNonce());
|
Long aiImageId = Long.valueOf(midjourneyMessage.getNonce());
|
||||||
// 获取生成 url
|
// 获取生成 url
|
||||||
@ -62,11 +99,29 @@ public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler {
|
|||||||
} else if (MidjourneyGennerateStatusEnum.WAITING.getStatus().equals(generateStatus)) {
|
} else if (MidjourneyGennerateStatusEnum.WAITING.getStatus().equals(generateStatus)) {
|
||||||
drawingStatusEnum = AiImageDrawingStatusEnum.WAITING;
|
drawingStatusEnum = AiImageDrawingStatusEnum.WAITING;
|
||||||
}
|
}
|
||||||
|
// 获取 midjourneyOperations
|
||||||
|
List<AiImageMidjourneyOperationsVO> midjourneyOperations = getMidjourneyOperationsList(midjourneyMessage);
|
||||||
|
// 更新数据库
|
||||||
aiImageMapper.updateById(
|
aiImageMapper.updateById(
|
||||||
new AiImageDO()
|
new AiImageDO()
|
||||||
.setId(aiImageId)
|
.setId(aiImageId)
|
||||||
.setDrawingImageUrl(imageUrl)
|
.setDrawingImageUrl(imageUrl)
|
||||||
.setDrawingStatus(drawingStatusEnum == null ? null : drawingStatusEnum.getStatus())
|
.setDrawingStatus(drawingStatusEnum == null ? null : drawingStatusEnum.getStatus())
|
||||||
|
.setMjMessageId(midjourneyMessage.getId())
|
||||||
|
.setMjOperations(JsonUtils.toJsonString(midjourneyOperations))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<AiImageMidjourneyOperationsVO> getMidjourneyOperationsList(MidjourneyMessage midjourneyMessage) {
|
||||||
|
// 为空直接返回
|
||||||
|
if (CollUtil.isEmpty(midjourneyMessage.getComponents())) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
// 将 component 转成 AiImageMidjourneyOperationsVO
|
||||||
|
return midjourneyMessage.getComponents().stream()
|
||||||
|
.map(componentType -> componentType.getComponents().stream()
|
||||||
|
.map(AiImageConvert.INSTANCE::convertAiImageMidjourneyOperationsVO)
|
||||||
|
.collect(Collectors.toList()))
|
||||||
|
.toList().stream().flatMap(List::stream).toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user