|
|
@@ -115,6 +115,58 @@ public class OperationalActivityServiceImpl implements OperationalActivityServic
|
|
|
+ "图片描述:%s";
|
|
|
|
|
|
@Override
|
|
|
+ public StoreOperationalActivityDTO generateActivityPromotionImages(StoreOperationalActivityDTO dto) {
|
|
|
+ log.info("OperationalActivityServiceImpl.generateActivityPromotionImages: dto={}", dto);
|
|
|
+ if (dto.getUploadImgType() == null || dto.getUploadImgType() != 2) {
|
|
|
+ throw new IllegalArgumentException("AI 生成图片需 uploadImgType=2");
|
|
|
+ }
|
|
|
+ if (dto.getActivityTitleImg() == null) {
|
|
|
+ dto.setActivityTitleImg(new StoreImg());
|
|
|
+ }
|
|
|
+ if (dto.getActivityDetailImg() == null) {
|
|
|
+ dto.setActivityDetailImg(new StoreImg());
|
|
|
+ }
|
|
|
+ String accessToken = getToken();
|
|
|
+ if (accessToken == null || accessToken.isEmpty()) {
|
|
|
+ throw new IllegalStateException("获取AI服务access_token失败,无法生成促销图片");
|
|
|
+ }
|
|
|
+ String authorization = "Bearer " + accessToken;
|
|
|
+ String filled = String.format(
|
|
|
+ tpl,
|
|
|
+ dto.getActivityName(),
|
|
|
+ dto.getStartTime(),
|
|
|
+ dto.getEndTime(),
|
|
|
+ dto.getParticipationLimit(),
|
|
|
+ dto.getActivityRule(),
|
|
|
+ dto.getCouponQuantity() != null ? dto.getCouponQuantity() : 0,
|
|
|
+ dto.getVoucherQuantity() != null ? dto.getVoucherQuantity() : 0,
|
|
|
+ dto.getImgDescribe()
|
|
|
+ );
|
|
|
+ JsonNode imgResponse = alienAIFeign.generatePromotionImage(authorization, Collections.singletonMap("text", filled));
|
|
|
+ applyPromotionImageResponse(imgResponse, dto);
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void applyPromotionImageResponse(JsonNode imgResponse, StoreOperationalActivityDTO dto) {
|
|
|
+ if (imgResponse == null || !imgResponse.has("data")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JsonNode data = imgResponse.get("data");
|
|
|
+ if (data.has("banner_image")) {
|
|
|
+ JsonNode bannerImage = data.get("banner_image");
|
|
|
+ if (bannerImage.has("ali_url") && !bannerImage.get("ali_url").isNull()) {
|
|
|
+ dto.getActivityTitleImg().setImgUrl(bannerImage.get("ali_url").asText());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (data.has("vertical_image")) {
|
|
|
+ JsonNode verticalImage = data.get("vertical_image");
|
|
|
+ if (verticalImage.has("ali_url") && !verticalImage.get("ali_url").isNull()) {
|
|
|
+ dto.getActivityDetailImg().setImgUrl(verticalImage.get("ali_url").asText());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public int createActivity(StoreOperationalActivityDTO dto) {
|
|
|
log.info("OperationalActivityServiceImpl.createActivity: dto={}", dto);
|
|
|
|
|
|
@@ -203,44 +255,6 @@ public class OperationalActivityServiceImpl implements OperationalActivityServic
|
|
|
log.error("发送活动审核通知失败,activityId={}, error={}", activity.getId(), e.getMessage(), e);
|
|
|
}
|
|
|
}
|
|
|
- // 使用用户描述和页面输入框其他信息,让AI生成海报图片。
|
|
|
- if (dto.getUploadImgType() == 2) {
|
|
|
- // 格式化输入AI参数
|
|
|
- ObjectNode requestBody = objectMapper.createObjectNode();
|
|
|
- String filled = String.format(
|
|
|
- tpl,
|
|
|
- dto.getActivityName(),
|
|
|
- dto.getStartTime(),
|
|
|
- dto.getEndTime(),
|
|
|
- dto.getParticipationLimit(),
|
|
|
- dto.getActivityRule(),
|
|
|
- dto.getCouponQuantity() != null ? dto.getCouponQuantity() : 0,
|
|
|
- dto.getVoucherQuantity() != null ? dto.getVoucherQuantity() : 0,
|
|
|
- dto.getImgDescribe()
|
|
|
- );
|
|
|
- requestBody.put("text", filled);
|
|
|
- JsonNode imgResponse = alienAIFeign.generatePromotionImage(authorization, Collections.singletonMap("text", filled));
|
|
|
- // 解析响应
|
|
|
- if (imgResponse.has("data")) {
|
|
|
- JsonNode data = imgResponse.get("data");
|
|
|
- // 提取横向图(banner_image)的图片URL
|
|
|
- if (data.has("banner_image")) {
|
|
|
- JsonNode bannerImage = data.get("banner_image");
|
|
|
- if (bannerImage.has("ali_url") && !bannerImage.get("ali_url").isNull()) {
|
|
|
- String bannerImageUrl = bannerImage.get("ali_url").asText();
|
|
|
- dto.getActivityTitleImg().setImgUrl(bannerImageUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- // 提取竖向图(vertical_image)的图片URL
|
|
|
- if (data.has("vertical_image")) {
|
|
|
- JsonNode verticalImage = data.get("vertical_image");
|
|
|
- if (verticalImage.has("ali_url") && !verticalImage.get("ali_url").isNull()) {
|
|
|
- String verticalImageUrl = verticalImage.get("ali_url").asText();
|
|
|
- dto.getActivityDetailImg().setImgUrl(verticalImageUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
// AI调用失败,也可以添加数据
|
|
|
@@ -367,8 +381,12 @@ public class OperationalActivityServiceImpl implements OperationalActivityServic
|
|
|
sendActivityAuditNotice(activity, auditResult.isPassed(), auditResult.getFailureReason());
|
|
|
// 使用用户描述和页面输入框其他信息,让AI生成海报图片。
|
|
|
if (dto.getUploadImgType() == 2) {
|
|
|
- // 格式化输入AI参数
|
|
|
- ObjectNode requestBody = objectMapper.createObjectNode();
|
|
|
+ if (dto.getActivityTitleImg() == null) {
|
|
|
+ dto.setActivityTitleImg(new StoreImg());
|
|
|
+ }
|
|
|
+ if (dto.getActivityDetailImg() == null) {
|
|
|
+ dto.setActivityDetailImg(new StoreImg());
|
|
|
+ }
|
|
|
String filled = String.format(
|
|
|
tpl,
|
|
|
dto.getActivityName(),
|
|
|
@@ -380,28 +398,8 @@ public class OperationalActivityServiceImpl implements OperationalActivityServic
|
|
|
dto.getVoucherQuantity() != null ? dto.getVoucherQuantity() : 0,
|
|
|
dto.getImgDescribe()
|
|
|
);
|
|
|
- requestBody.put("text", filled);
|
|
|
JsonNode imgResponse = alienAIFeign.generatePromotionImage(authorization, Collections.singletonMap("text", filled));
|
|
|
- // 解析响应
|
|
|
- if (imgResponse.has("data")) {
|
|
|
- JsonNode data = imgResponse.get("data");
|
|
|
- // 提取横向图(banner_image)的图片URL
|
|
|
- if (data.has("banner_image")) {
|
|
|
- JsonNode bannerImage = data.get("banner_image");
|
|
|
- if (bannerImage.has("ali_url") && !bannerImage.get("ali_url").isNull()) {
|
|
|
- String bannerImageUrl = bannerImage.get("ali_url").asText();
|
|
|
- dto.getActivityTitleImg().setImgUrl(bannerImageUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- // 提取竖向图(vertical_image)的图片URL
|
|
|
- if (data.has("vertical_image")) {
|
|
|
- JsonNode verticalImage = data.get("vertical_image");
|
|
|
- if (verticalImage.has("ali_url") && !verticalImage.get("ali_url").isNull()) {
|
|
|
- String verticalImageUrl = verticalImage.get("ali_url").asText();
|
|
|
- dto.getActivityDetailImg().setImgUrl(verticalImageUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ applyPromotionImageResponse(imgResponse, dto);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|