TASK:模块化;
This commit is contained in:
@@ -18,6 +18,7 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -318,6 +319,103 @@ public class GenerateConsumer {
|
|||||||
designService.processDesignBatch(generateResult);
|
designService.processDesignBatch(generateResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processToProductImageBatchResult(Message msg, Channel channel) {
|
||||||
|
log.info("============processToProductImageResult listening==========");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
Map<String, String> generateResult = JSONObject.parseObject(msg.getBody(), Map.class);
|
||||||
|
log.info("toProductImage response : {}", generateResult);
|
||||||
|
|
||||||
|
try {
|
||||||
|
log.info("tasks_id : {} start ", generateResult.get("tasks_id"));
|
||||||
|
if (!StringUtils.isEmpty(generateResult.get("progress"))) {
|
||||||
|
String progress = generateResult.get("progress");
|
||||||
|
String url = generateResult.get("result");
|
||||||
|
String taskId = generateResult.get("tasks_id");
|
||||||
|
userLikeGroupService.toProductBatch(taskId, url, progress);
|
||||||
|
} else {
|
||||||
|
// 修改redis中的数据状态为exception
|
||||||
|
String key = toProductImageResultKey + ":" + generateResult.get("tasks_id");
|
||||||
|
redisUtil.addToString(key, new Gson().toJson(new GenerateResultVO(generateResult.get("tasks_id"), null, null, "Fail")), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
|
||||||
|
// 将异常信息存到exception中
|
||||||
|
HashMap<String, String> exceptionInfo = new HashMap<>();
|
||||||
|
exceptionInfo.put(generateResult.get("tasks_id"), generateResult.get("data"));
|
||||||
|
// 存redis
|
||||||
|
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
try {
|
||||||
|
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
|
||||||
|
// 将消息从redis排队队列中删除,需保证被消费的消息存储到db之后再从redis删除
|
||||||
|
redisUtil.removeFromZSet(consumptionOrderKey, generateResult.get("tasks_id"));
|
||||||
|
} catch (IOException exception) {
|
||||||
|
log.error("手动确认,取消返回队列,不再重新消费");
|
||||||
|
}
|
||||||
|
// 将入参和错误信息存入数据库
|
||||||
|
String exceptionMessage = JSONObject.toJSONString(generateResult) +
|
||||||
|
" Exception message : " + e.getMessage();
|
||||||
|
HashMap<String, String> exceptionInfo = new HashMap<>();
|
||||||
|
exceptionInfo.put(String.valueOf(generateResult.get("tasks_id")), exceptionMessage);
|
||||||
|
// 存redis
|
||||||
|
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
log.info("tasks_id : {}, end , message : {}, 执行时长: {} 毫秒", generateResult.get("tasks_id"), generateResult.get("message"), (end - start));
|
||||||
|
log.info("============ProcessToProductImageResult End listening==========");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processRelightBatchResult(Message msg, Channel channel) {
|
||||||
|
log.info("============processRelightResult listening==========");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
Map<String, String> generateResult = JSONObject.parseObject(msg.getBody(), Map.class);
|
||||||
|
log.info("toProductImage response : {}", generateResult);
|
||||||
|
|
||||||
|
try {
|
||||||
|
log.info("tasks_id : {} start ", generateResult.get("tasks_id"));
|
||||||
|
if (generateResult.get("status").equals("SUCCESS")) {
|
||||||
|
String url = generateResult.get("image_url");
|
||||||
|
String taskId = generateResult.get("tasks_id");
|
||||||
|
String category = generateResult.get("category");
|
||||||
|
generateService.processRelightResult(taskId, url, category);
|
||||||
|
} else if (generateResult.get("status").equals("NO_FACE")) {
|
||||||
|
String taskId = generateResult.get("tasks_id");
|
||||||
|
userLikeGroupService.relight(taskId);
|
||||||
|
} else {
|
||||||
|
// 修改redis中的数据状态为exception
|
||||||
|
String key = relightResultKey + ":" + generateResult.get("tasks_id");
|
||||||
|
redisUtil.addToString(key, new Gson().toJson(new GenerateResultVO(generateResult.get("tasks_id"), null, null, "Fail")), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
|
||||||
|
// 将异常信息存到exception中
|
||||||
|
HashMap<String, String> exceptionInfo = new HashMap<>();
|
||||||
|
exceptionInfo.put(generateResult.get("tasks_id"), generateResult.get("data"));
|
||||||
|
// 存redis
|
||||||
|
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
try {
|
||||||
|
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
|
||||||
|
// 将消息从redis排队队列中删除,需保证被消费的消息存储到db之后再从redis删除
|
||||||
|
redisUtil.removeFromZSet(consumptionOrderKey, generateResult.get("tasks_id"));
|
||||||
|
} catch (IOException exception) {
|
||||||
|
log.error("手动确认,取消返回队列,不再重新消费");
|
||||||
|
}
|
||||||
|
// 将入参和错误信息存入数据库
|
||||||
|
String exceptionMessage = JSONObject.toJSONString(generateResult) +
|
||||||
|
" Exception message : " + e.getMessage();
|
||||||
|
HashMap<String, String> exceptionInfo = new HashMap<>();
|
||||||
|
exceptionInfo.put(String.valueOf(generateResult.get("tasks_id")), exceptionMessage);
|
||||||
|
// 存redis
|
||||||
|
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
log.info("tasks_id : {}, end , message : {}, 执行时长: {} 毫秒", generateResult.get("tasks_id"), generateResult.get("message"), (end - start));
|
||||||
|
log.info("============ProcessRelightResult End listening==========");
|
||||||
|
}
|
||||||
|
|
||||||
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
|
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
|
||||||
@RabbitHandler
|
@RabbitHandler
|
||||||
public void generateConsumer1(Message msg, Channel channel) {
|
public void generateConsumer1(Message msg, Channel channel) {
|
||||||
@@ -400,4 +498,15 @@ public class GenerateConsumer {
|
|||||||
public void getDesignBatchResult(Message msg, Channel channel) {
|
public void getDesignBatchResult(Message msg, Channel channel) {
|
||||||
processDesignBatchResult(msg, channel);
|
processDesignBatchResult(msg, channel);
|
||||||
}
|
}
|
||||||
|
@RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageBatch}")
|
||||||
|
@RabbitHandler
|
||||||
|
public void getToProductImageBatchResult(Message msg, Channel channel) {
|
||||||
|
processToProductImageBatchResult(msg, channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RabbitListener(queues = "#{rabbitMQProperties.queues.relightBatch}")
|
||||||
|
@RabbitHandler
|
||||||
|
public void getRelightBatchResult(Message msg, Channel channel) {
|
||||||
|
processRelightBatchResult(msg, channel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public class RabbitMQProperties {
|
|||||||
private String relightResult;
|
private String relightResult;
|
||||||
private String poseTransform;
|
private String poseTransform;
|
||||||
private String designBatch;
|
private String designBatch;
|
||||||
|
private String relightBatch;
|
||||||
|
private String toProductImageBatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.ai.da.mapper.primary.entity.CloudTask;
|
|||||||
import com.ai.da.model.dto.*;
|
import com.ai.da.model.dto.*;
|
||||||
import com.ai.da.model.vo.*;
|
import com.ai.da.model.vo.*;
|
||||||
import com.ai.da.service.DesignService;
|
import com.ai.da.service.DesignService;
|
||||||
|
import com.ai.da.service.UserLikeGroupService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
@@ -27,6 +28,8 @@ import java.util.List;
|
|||||||
public class DesignController {
|
public class DesignController {
|
||||||
@Resource
|
@Resource
|
||||||
private DesignService designService;
|
private DesignService designService;
|
||||||
|
@Resource
|
||||||
|
private UserLikeGroupService userLikeGroupService;
|
||||||
|
|
||||||
@ApiOperation(value = "设计 Conllection")
|
@ApiOperation(value = "设计 Conllection")
|
||||||
@PostMapping("/designCollection")
|
@PostMapping("/designCollection")
|
||||||
@@ -109,7 +112,14 @@ public class DesignController {
|
|||||||
|
|
||||||
@ApiOperation(value = "获取design云生成结果")
|
@ApiOperation(value = "获取design云生成结果")
|
||||||
@PostMapping("/getDesignCloudResult")
|
@PostMapping("/getDesignCloudResult")
|
||||||
public Response<PageBaseResponse<DesignCollectionItemVO>> getDesignCloudResult(@Valid @RequestBody DesignCloudResultQuery designCloudResultQuery) {
|
public Response<CloudTaskResultVO> getDesignCloudResult(@Valid @RequestBody DesignCloudResultQuery designCloudResultQuery) {
|
||||||
return Response.success(PageBaseResponse.success(designService.getDesignCloudResult(designCloudResultQuery)));
|
return Response.success(designService.getDesignCloudResult(designCloudResultQuery));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "获取生成结果")
|
||||||
|
@PostMapping("/toProductImageBatchResult")
|
||||||
|
public Response<List<MagicToolResultVO>> getToProductImageResult(@Valid @RequestBody List<String> taskIdList) {
|
||||||
|
List<MagicToolResultVO> magicToolResultVOList = userLikeGroupService.getToProductImageResultList(taskIdList);
|
||||||
|
return Response.success(magicToolResultVOList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,4 +51,6 @@ public class ToProductImageResult implements Serializable {
|
|||||||
private String direction;
|
private String direction;
|
||||||
|
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
|
private String taskIdBatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,5 +5,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class CloudTaskDTO extends CloudTask {
|
public class CloudTaskDTO extends CloudTask {
|
||||||
|
private ToProductImageDTO toProductImage;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class DesignCloudResultQuery extends PageQueryBaseVo {
|
public class DesignCloudResultQuery extends PageQueryBaseVo {
|
||||||
private String taskId;
|
private String taskId;
|
||||||
|
private String buildType;
|
||||||
}
|
}
|
||||||
|
|||||||
32
src/main/java/com/ai/da/model/enums/BuildType.java
Normal file
32
src/main/java/com/ai/da/model/enums/BuildType.java
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package com.ai.da.model.enums;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonValue;
|
||||||
|
|
||||||
|
public enum BuildType implements IEnumDisplay {
|
||||||
|
DESIGN("design"),
|
||||||
|
TO_PRODUCT_IMAGE("toProductImage"),
|
||||||
|
|
||||||
|
RELIGHT("relight")
|
||||||
|
;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
BuildType(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@JsonValue
|
||||||
|
public String getValue() {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BuildType getBuildType(String value) {
|
||||||
|
for (BuildType type : values()) {
|
||||||
|
if (type.value.equalsIgnoreCase(value)) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("No matching constant for [" + value + "]");
|
||||||
|
}
|
||||||
|
}
|
||||||
12
src/main/java/com/ai/da/model/vo/CloudTaskResultVO.java
Normal file
12
src/main/java/com/ai/da/model/vo/CloudTaskResultVO.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.ai.da.model.vo;
|
||||||
|
|
||||||
|
import com.ai.da.common.response.PageBaseResponse;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CloudTaskResultVO {
|
||||||
|
private PageBaseResponse<DesignCollectionItemVO> design;
|
||||||
|
private List<MagicToolResultVO> toProductImage;
|
||||||
|
}
|
||||||
@@ -4250,4 +4250,96 @@ public class PythonService {
|
|||||||
response.close();
|
response.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean toProductImageBatch(String url, String taskId, String prompt, BigDecimal imageStrength, String productType) {
|
||||||
|
// todo 限流校验
|
||||||
|
// AccessLimitUtils.validate("design",5);
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.connectTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒)
|
||||||
|
.readTimeout(60, TimeUnit.SECONDS)//读取超时(单位:秒)
|
||||||
|
.writeTimeout(60, TimeUnit.SECONDS)//写入超时(单位:秒)
|
||||||
|
.build();
|
||||||
|
MediaType mediaType = MediaType.parse("application/json");
|
||||||
|
//关闭FastJson的引用检测 防止出现$ref 现象
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put("tasks_id", taskId);
|
||||||
|
map.put("image_url", url);
|
||||||
|
map.put("prompt", prompt);
|
||||||
|
map.put("image_strength", imageStrength);
|
||||||
|
map.put("product_type", productType);
|
||||||
|
map.put("batch_size", 1);
|
||||||
|
log.info("toProductImage请求python 参数:####{}", map);
|
||||||
|
String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty);
|
||||||
|
System.out.println(param);
|
||||||
|
RequestBody body = RequestBody.create(mediaType, param);
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
// .url(accessPythonIp + ":" + accessPythonPort + "/api/generate_product_image")
|
||||||
|
// .url(accessPythonIp + ":9996/api/generate_product_image")
|
||||||
|
.url(accessPythonIp + ":" + accessPythonPort + "/api/batch_generate_product_image")
|
||||||
|
.method("POST", body)
|
||||||
|
.addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.build();
|
||||||
|
Response response;
|
||||||
|
String responseBody;
|
||||||
|
try {
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
} catch (IOException ioException) {
|
||||||
|
log.error("PythonService##toProductImage异常###{}", ExceptionUtil.getThrowableList(ioException));
|
||||||
|
throw new BusinessException("toProductImage.interface.exception");
|
||||||
|
}
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
return Boolean.TRUE;
|
||||||
|
}
|
||||||
|
log.error("PythonService##toProductImage异常response###{}", response);
|
||||||
|
//生成失败
|
||||||
|
throw new BusinessException("toProductImage.interface.exception");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean relightBatch(String url, String taskId, String prompt, String direction, String relightType) {
|
||||||
|
// todo 限流校验
|
||||||
|
// AccessLimitUtils.validate("design",5);
|
||||||
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
|
.connectTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒)
|
||||||
|
.readTimeout(60, TimeUnit.SECONDS)//读取超时(单位:秒)
|
||||||
|
.writeTimeout(60, TimeUnit.SECONDS)//写入超时(单位:秒)
|
||||||
|
.build();
|
||||||
|
MediaType mediaType = MediaType.parse("application/json");
|
||||||
|
//关闭FastJson的引用检测 防止出现$ref 现象
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put("tasks_id", taskId);
|
||||||
|
map.put("image_url", url);
|
||||||
|
map.put("prompt", prompt);
|
||||||
|
map.put("direction", direction);
|
||||||
|
map.put("product_type", relightType);
|
||||||
|
map.put("batch_size", 1);
|
||||||
|
log.info("relightImage请求python 参数:####{}", map);
|
||||||
|
String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty);
|
||||||
|
log.info(param);
|
||||||
|
RequestBody body = RequestBody.create(mediaType, param);
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
// .url(accessPythonIp + ":" + accessPythonPort + "/api/generate_product_image")
|
||||||
|
// .url(accessPythonIp + ":9996/api/generate_product_image")
|
||||||
|
.url(accessPythonIp + ":" + accessPythonPort + "/api/batch_generate_relight_image")
|
||||||
|
.method("POST", body)
|
||||||
|
.addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.build();
|
||||||
|
Response response;
|
||||||
|
String responseBody;
|
||||||
|
try {
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
} catch (IOException ioException) {
|
||||||
|
log.error("PythonService##relightImage异常###{}", ExceptionUtil.getThrowableList(ioException));
|
||||||
|
throw new BusinessException("relightImage.interface.exception");
|
||||||
|
}
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
return Boolean.TRUE;
|
||||||
|
}
|
||||||
|
log.error("PythonService##relightImage异常response###{}", response);
|
||||||
|
//生成失败
|
||||||
|
throw new BusinessException("relightImage.interface.exception");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,5 +116,5 @@ public interface DesignService extends IService<Design> {
|
|||||||
|
|
||||||
IPage<CloudTaskVO> cloudPage(CloudPageDTO cloudPageDTO);
|
IPage<CloudTaskVO> cloudPage(CloudPageDTO cloudPageDTO);
|
||||||
|
|
||||||
IPage<DesignCollectionItemVO> getDesignCloudResult(DesignCloudResultQuery designCloudResultQuery);
|
CloudTaskResultVO getDesignCloudResult(DesignCloudResultQuery designCloudResultQuery);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,4 +109,6 @@ public interface UserLikeGroupService extends IService<UserLikeGroup> {
|
|||||||
Boolean delete(Long projectId);
|
Boolean delete(Long projectId);
|
||||||
|
|
||||||
Boolean brandDNADelete(BrandDNADTO brandDNADTO);
|
Boolean brandDNADelete(BrandDNADTO brandDNADTO);
|
||||||
|
|
||||||
|
void toProductBatch(String taskId, String url, String progress);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,11 +7,14 @@ import com.ai.da.common.config.exception.BusinessException;
|
|||||||
import com.ai.da.common.constant.CommonConstant;
|
import com.ai.da.common.constant.CommonConstant;
|
||||||
import com.ai.da.common.context.UserContext;
|
import com.ai.da.common.context.UserContext;
|
||||||
import com.ai.da.common.enums.*;
|
import com.ai.da.common.enums.*;
|
||||||
|
import com.ai.da.common.response.PageBaseResponse;
|
||||||
|
import com.ai.da.common.response.ResultEnum;
|
||||||
import com.ai.da.common.utils.*;
|
import com.ai.da.common.utils.*;
|
||||||
import com.ai.da.mapper.primary.*;
|
import com.ai.da.mapper.primary.*;
|
||||||
import com.ai.da.mapper.primary.entity.*;
|
import com.ai.da.mapper.primary.entity.*;
|
||||||
import com.ai.da.mapper.primary.entity.Collection;
|
import com.ai.da.mapper.primary.entity.Collection;
|
||||||
import com.ai.da.model.dto.*;
|
import com.ai.da.model.dto.*;
|
||||||
|
import com.ai.da.model.enums.BuildType;
|
||||||
import com.ai.da.model.vo.*;
|
import com.ai.da.model.vo.*;
|
||||||
import com.ai.da.python.PythonService;
|
import com.ai.da.python.PythonService;
|
||||||
import com.ai.da.python.vo.*;
|
import com.ai.da.python.vo.*;
|
||||||
@@ -27,6 +30,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.gson.Gson;
|
||||||
import io.netty.util.internal.StringUtil;
|
import io.netty.util.internal.StringUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
@@ -97,6 +101,12 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TDesignPythonOutfitMapper designPythonOutfitMapper;
|
private TDesignPythonOutfitMapper designPythonOutfitMapper;
|
||||||
|
@Resource
|
||||||
|
private DesignItemDetailMapper designItemDetailMapper;
|
||||||
|
@Resource
|
||||||
|
private ToProductImageResultMapper toProductImageResultMapper;
|
||||||
|
@Resource
|
||||||
|
private ToProductElementMapper toProductElementMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MoodboardPositionMapper moodboardPositionMapper;
|
private MoodboardPositionMapper moodboardPositionMapper;
|
||||||
@@ -128,6 +138,10 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
private CloudTaskMapper cloudTaskMapper;
|
private CloudTaskMapper cloudTaskMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private CloudTaskService cloudTaskService;
|
private CloudTaskService cloudTaskService;
|
||||||
|
@Resource
|
||||||
|
private CreditsService creditsService;
|
||||||
|
@Resource
|
||||||
|
private ToProductImageRecordMapper toProductImageRecordMapper;
|
||||||
|
|
||||||
private final ConcurrentHashMap<String, Map<String, Object>> designContext = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<String, Map<String, Object>> designContext = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@@ -1780,32 +1794,274 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String designCloud(CloudTaskDTO cloudTaskDTO) {
|
public String designCloud(CloudTaskDTO cloudTaskDTO) {
|
||||||
|
if (cloudTaskDTO.getBuildType().equals(BuildType.DESIGN.getValue())) {
|
||||||
|
Long projectId = cloudTaskDTO.getProjectId();
|
||||||
|
Project project = projectService.getById(projectId);
|
||||||
|
project.setParentId(projectId);
|
||||||
|
project.setId(null);
|
||||||
|
project.setName(project.getName() + "_cloud");
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
project.setCreateTime(now);
|
||||||
|
project.setUpdateTime(now);
|
||||||
|
projectService.getBaseMapper().insert(project);
|
||||||
|
Long workspaceId = workspaceService.getByProjectId(projectId);
|
||||||
|
Workspace workspace = workspaceService.getById(workspaceId);
|
||||||
|
workspace.setProjectId(project.getId());
|
||||||
|
workspace.setId(null);
|
||||||
|
workspaceService.getBaseMapper().insert(workspace);
|
||||||
|
|
||||||
Long projectId = cloudTaskDTO.getProjectId();
|
DesignCollectionDTO designDTO = transDesignParam(projectId, project.getId());
|
||||||
Project project = projectService.getById(projectId);
|
designDTO.setDesignNum(cloudTaskDTO.getNums());
|
||||||
project.setParentId(projectId);
|
AuthPrincipalVo userInfo = UserContext.getUserHolder();
|
||||||
project.setId(null);
|
|
||||||
project.setName(project.getName() + "_cloud");
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
|
||||||
project.setCreateTime(now);
|
|
||||||
project.setUpdateTime(now);
|
|
||||||
projectService.getBaseMapper().insert(project);
|
|
||||||
Long workspaceId = workspaceService.getByProjectId(projectId);
|
|
||||||
Workspace workspace = workspaceService.getById(workspaceId);
|
|
||||||
workspace.setProjectId(project.getId());
|
|
||||||
workspace.setId(null);
|
|
||||||
workspaceService.getBaseMapper().insert(workspace);
|
|
||||||
|
|
||||||
DesignCollectionDTO designDTO = transDesignParam(projectId, project.getId());
|
//校验collection element
|
||||||
designDTO.setDesignNum(cloudTaskDTO.getNums());
|
ValidateElementVO elementVO = collectionElementService.validateElement(designDTO);
|
||||||
AuthPrincipalVo userInfo = UserContext.getUserHolder();
|
|
||||||
|
|
||||||
//校验collection element
|
//design
|
||||||
ValidateElementVO elementVO = collectionElementService.validateElement(designDTO);
|
String taskId = designBatch(designDTO, userInfo, null, elementVO, cloudTaskDTO, project.getId());
|
||||||
|
return taskId;
|
||||||
|
}else if (cloudTaskDTO.getBuildType().equals(BuildType.TO_PRODUCT_IMAGE.getValue())) {
|
||||||
|
ToProductImageDTO toProductImageDTO = cloudTaskDTO.getToProductImage();
|
||||||
|
// 判断用户当前积分是否够本次生成消耗
|
||||||
|
// Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.TO_PRODUCT_IMAGE, toProductImageDTO.getToProductImageVOList().size());
|
||||||
|
// if (!preDeduction) {
|
||||||
|
// throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode());
|
||||||
|
// }
|
||||||
|
AuthPrincipalVo userHolder = UserContext.getUserHolder();
|
||||||
|
|
||||||
//design
|
String batchTaskId = UUID.randomUUID() + "-" + userHolder.getId();
|
||||||
String taskId = designBatch(designDTO, userInfo, null, elementVO, cloudTaskDTO, project.getId());
|
|
||||||
return taskId;
|
Long projectId = cloudTaskDTO.getProjectId();
|
||||||
|
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
|
||||||
|
Long userLikeGroupId = null;
|
||||||
|
ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
|
||||||
|
toProductImageRecord.setProjectId(projectId);
|
||||||
|
if (Objects.nonNull(userLikeGroup)) {
|
||||||
|
userLikeGroupId = userLikeGroup.getId();
|
||||||
|
toProductImageRecord.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
toProductImageRecord.setCreateTime(LocalDateTime.now());
|
||||||
|
if (!StringUtils.isEmpty(toProductImageDTO.getPrompt())) {
|
||||||
|
toProductImageRecord.setPrompt(toProductImageDTO.getPrompt());
|
||||||
|
}
|
||||||
|
toProductImageRecordMapper.insert(toProductImageRecord);
|
||||||
|
|
||||||
|
List<ToProductImageResult> result = new ArrayList<>();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
// 翻译
|
||||||
|
String prompt = toProductImageDTO.getPrompt();
|
||||||
|
StringBuilder sb = new StringBuilder("The best quality, masterpiece, real image.");
|
||||||
|
if (!StringUtil.isNullOrEmpty(prompt)) {
|
||||||
|
prompt = pythonService.promptTranslate(prompt);
|
||||||
|
}
|
||||||
|
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
|
||||||
|
String taskId;
|
||||||
|
if (toProductImageVO.getElementType().equals("DesignOutfit")) {
|
||||||
|
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
||||||
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId());
|
||||||
|
|
||||||
|
Long designItemId = tDesignPythonOutfit.getDesignItemId();
|
||||||
|
QueryWrapper<DesignItemDetail> designItemDetailQueryWrapper = new QueryWrapper<>();
|
||||||
|
designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId);
|
||||||
|
designItemDetailQueryWrapper.lambda().ne(DesignItemDetail::getType, "Body");
|
||||||
|
List<DesignItemDetail> designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper);
|
||||||
|
String collect = designItemDetails.stream().map(DesignItemDetail::getType).collect(Collectors.joining(","));
|
||||||
|
|
||||||
|
Long designId = tDesignPythonOutfit.getDesignId();
|
||||||
|
Design design = designMapper.selectById(designId);
|
||||||
|
String productType = "overall";
|
||||||
|
if (design.getSingleOverall().equals("single")) {
|
||||||
|
productType = "single";
|
||||||
|
sb.append(collect);
|
||||||
|
}else {
|
||||||
|
if (collect.contains("Tops")) {
|
||||||
|
sb.append("a handsome man,");
|
||||||
|
}else {
|
||||||
|
sb.append("a beautiful women,");
|
||||||
|
}
|
||||||
|
sb.append("wearing ").append(collect);
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(prompt)) {
|
||||||
|
sb.append(",high quality clothing details,8K realistic,HDR");
|
||||||
|
}else {
|
||||||
|
sb.append(",high quality clothing details,").append(prompt).append(",8K realistic,HDR");
|
||||||
|
}
|
||||||
|
// 走模型
|
||||||
|
pythonService.toProductImageBatch(tDesignPythonOutfit.getDesignUrl(), taskId, sb.toString(), toProductImageDTO.getImageStrength(), productType);
|
||||||
|
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
||||||
|
toProductImageResult.setElementId(tDesignPythonOutfit.getId());
|
||||||
|
toProductImageResult.setElementType("DesignOutfit");
|
||||||
|
toProductImageResult.setCreateTime(LocalDateTime.now());
|
||||||
|
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
|
||||||
|
// toProductImageResult.setUrl(productImageUrl);
|
||||||
|
toProductImageResult.setIsLike(0);
|
||||||
|
toProductImageResult.setTaskId(taskId);
|
||||||
|
toProductImageResult.setProjectId(projectId);
|
||||||
|
toProductImageResult.setTaskIdBatch(batchTaskId);
|
||||||
|
if (userLikeGroupId != null) {
|
||||||
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
||||||
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
|
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
|
||||||
|
result.add(toProductImageResult);
|
||||||
|
}else {
|
||||||
|
if (StringUtils.isEmpty(prompt)) {
|
||||||
|
sb.append(",high quality clothing details,8K realistic,HDR");
|
||||||
|
}else {
|
||||||
|
sb.append(",high quality clothing details,").append(prompt).append(",8K realistic,HDR");
|
||||||
|
}
|
||||||
|
|
||||||
|
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
||||||
|
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
|
||||||
|
// 走模型
|
||||||
|
pythonService.toProductImageBatch(toProductElement.getUrl(), taskId, sb.toString(), toProductImageDTO.getImageStrength(), "overall");
|
||||||
|
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
||||||
|
toProductImageResult.setElementId(toProductElement.getId());
|
||||||
|
toProductImageResult.setElementType("ProductElement");
|
||||||
|
toProductImageResult.setCreateTime(LocalDateTime.now());
|
||||||
|
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
|
||||||
|
// toProductImageResult.setUrl(productImageUrl);
|
||||||
|
toProductImageResult.setIsLike(0);
|
||||||
|
toProductImageResult.setTaskId(taskId);
|
||||||
|
toProductImageResult.setProjectId(projectId);
|
||||||
|
toProductImageResult.setTaskIdBatch(batchTaskId);
|
||||||
|
if (userLikeGroupId != null) {
|
||||||
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
||||||
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
|
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
|
||||||
|
result.add(toProductImageResult);
|
||||||
|
}
|
||||||
|
i ++;
|
||||||
|
sb = new StringBuilder("The best quality, masterpiece, real image.");
|
||||||
|
// 添加需要扣除的积分到预扣除区
|
||||||
|
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
|
||||||
|
}
|
||||||
|
CloudTask cloudTask = CopyUtil.copyObject(cloudTaskDTO, CloudTask.class);
|
||||||
|
cloudTask.setProjectId(projectId);
|
||||||
|
cloudTask.setTaskId(batchTaskId);
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
cloudTask.setCreateTime(now);
|
||||||
|
cloudTask.setUpdateTime(now);
|
||||||
|
cloudTaskMapper.insert(cloudTask);
|
||||||
|
return batchTaskId;
|
||||||
|
}else if (cloudTaskDTO.getBuildType().equals(BuildType.RELIGHT.getValue())) {
|
||||||
|
ToProductImageDTO toProductImageDTO = cloudTaskDTO.getToProductImage();
|
||||||
|
// 判断用户当前积分是否够本次生成消耗
|
||||||
|
// Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.RELIGHT, toProductImageDTO.getToProductImageVOList().size());
|
||||||
|
// if (!preDeduction) {
|
||||||
|
// throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode());
|
||||||
|
// }
|
||||||
|
|
||||||
|
AuthPrincipalVo userHolder = UserContext.getUserHolder();
|
||||||
|
String batchTaskId = UUID.randomUUID() + "-" + userHolder.getId();
|
||||||
|
Long projectId = cloudTaskDTO.getProjectId();
|
||||||
|
UserLikeGroup userLikeGroup = userLikeGroupService.getByProjectId(projectId);
|
||||||
|
Long userLikeGroupId = null;
|
||||||
|
|
||||||
|
ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
|
||||||
|
toProductImageRecord.setProjectId(projectId);
|
||||||
|
if (Objects.nonNull(userLikeGroup)) {
|
||||||
|
userLikeGroupId = userLikeGroup.getId();
|
||||||
|
toProductImageRecord.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
toProductImageRecord.setCreateTime(LocalDateTime.now());
|
||||||
|
if (!StringUtils.isEmpty(toProductImageDTO.getPrompt())) {
|
||||||
|
toProductImageRecord.setPrompt(toProductImageDTO.getPrompt());
|
||||||
|
}
|
||||||
|
toProductImageRecordMapper.insert(toProductImageRecord);
|
||||||
|
|
||||||
|
List<ToProductImageResult> result = new ArrayList<>();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
// 翻译
|
||||||
|
String prompt = toProductImageDTO.getPrompt();
|
||||||
|
String s = "";
|
||||||
|
if (!StringUtil.isNullOrEmpty(prompt)) {
|
||||||
|
s = pythonService.promptTranslate(prompt);
|
||||||
|
}else {
|
||||||
|
s = "Snow moutain, snowy day, natural light";
|
||||||
|
}
|
||||||
|
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
|
||||||
|
String taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
||||||
|
i ++;
|
||||||
|
if (toProductImageVO.getElementType().equals("ToProductImage")) {
|
||||||
|
ToProductImageResult toProductImageResult1 = toProductImageResultMapper.selectById(toProductImageVO.getElementId());
|
||||||
|
String relightType = "overall";
|
||||||
|
if (toProductImageResult1.getElementType().equals("DesignOutfit")) {
|
||||||
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageResult1.getElementId());
|
||||||
|
Long designId = tDesignPythonOutfit.getDesignId();
|
||||||
|
Design design = designMapper.selectById(designId);
|
||||||
|
if (design.getSingleOverall().equals("single")) {
|
||||||
|
relightType = "single";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 走模型
|
||||||
|
pythonService.relightBatch(toProductImageResult1.getUrl(), taskId, s, toProductImageDTO.getDirection(), relightType);
|
||||||
|
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
||||||
|
toProductImageResult.setElementId(toProductImageResult1.getId());
|
||||||
|
toProductImageResult.setElementType("ToProductImage");
|
||||||
|
toProductImageResult.setCreateTime(LocalDateTime.now());
|
||||||
|
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
|
||||||
|
// toProductImageResult.setUrl(productImageUrl);
|
||||||
|
toProductImageResult.setIsLike(0);
|
||||||
|
toProductImageResult.setTaskId(taskId);
|
||||||
|
toProductImageResult.setProjectId(projectId);
|
||||||
|
toProductImageResult.setTaskIdBatch(batchTaskId);
|
||||||
|
if (null != userLikeGroupId) {
|
||||||
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
if (toProductImageDTO.getBrightenValue() != null) {
|
||||||
|
toProductImageResult.setBrightenValue(toProductImageDTO.getBrightenValue());
|
||||||
|
}
|
||||||
|
toProductImageResult.setDirection(toProductImageDTO.getDirection());
|
||||||
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
|
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
|
||||||
|
result.add(toProductImageResult);
|
||||||
|
}else {
|
||||||
|
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
|
||||||
|
// 走模型
|
||||||
|
pythonService.relightBatch(toProductElement.getUrl(), taskId, s, toProductImageDTO.getDirection(), "overall");
|
||||||
|
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
||||||
|
toProductImageResult.setElementId(toProductElement.getId());
|
||||||
|
toProductImageResult.setElementType("ProductElement");
|
||||||
|
toProductImageResult.setCreateTime(LocalDateTime.now());
|
||||||
|
toProductImageResult.setToProductImageRecordId(toProductImageRecord.getId());
|
||||||
|
// toProductImageResult.setUrl(productImageUrl);
|
||||||
|
toProductImageResult.setIsLike(0);
|
||||||
|
toProductImageResult.setTaskId(taskId);
|
||||||
|
toProductImageResult.setProjectId(projectId);
|
||||||
|
toProductImageResult.setTaskIdBatch(batchTaskId);
|
||||||
|
if (null != userLikeGroupId) {
|
||||||
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
|
}
|
||||||
|
if (toProductImageDTO.getBrightenValue() != null) {
|
||||||
|
toProductImageResult.setBrightenValue(toProductImageDTO.getBrightenValue());
|
||||||
|
}
|
||||||
|
toProductImageResult.setDirection(toProductImageDTO.getDirection());
|
||||||
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
|
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
|
||||||
|
result.add(toProductImageResult);
|
||||||
|
}
|
||||||
|
// 添加需要扣除的积分到预扣除区
|
||||||
|
// creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.RELIGHT);
|
||||||
|
}
|
||||||
|
CloudTask cloudTask = CopyUtil.copyObject(cloudTaskDTO, CloudTask.class);
|
||||||
|
cloudTask.setProjectId(projectId);
|
||||||
|
cloudTask.setTaskId(batchTaskId);
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
cloudTask.setCreateTime(now);
|
||||||
|
cloudTask.setUpdateTime(now);
|
||||||
|
cloudTaskMapper.insert(cloudTask);
|
||||||
|
return batchTaskId;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DesignCollectionDTO transDesignParam(Long projectId, Long projectIdNew) {
|
private DesignCollectionDTO transDesignParam(Long projectId, Long projectIdNew) {
|
||||||
@@ -2228,30 +2484,58 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<DesignCollectionItemVO> getDesignCloudResult(DesignCloudResultQuery query) {
|
public CloudTaskResultVO getDesignCloudResult(DesignCloudResultQuery query) {
|
||||||
CloudTask cloudTask = cloudTaskService.getByTaskId(query.getTaskId());
|
CloudTaskResultVO result = new CloudTaskResultVO();
|
||||||
if (Objects.nonNull(cloudTask)) {
|
if (query.getBuildType().equals(BuildType.DESIGN.getValue())) {
|
||||||
Long collectionId = cloudTask.getCollectionId();
|
CloudTask cloudTask = cloudTaskService.getByTaskId(query.getTaskId());
|
||||||
if (null != collectionId) {
|
if (Objects.nonNull(cloudTask)) {
|
||||||
QueryWrapper<TDesignPythonOutfit> qw = new QueryWrapper<>();
|
Long collectionId = cloudTask.getCollectionId();
|
||||||
qw.lambda().eq(TDesignPythonOutfit::getCollectionId, collectionId);
|
if (null != collectionId) {
|
||||||
Page<TDesignPythonOutfit> page = designPythonOutfitMapper.selectPage(new Page<>(query.getPage(), query.getSize()), qw);
|
QueryWrapper<TDesignPythonOutfit> qw = new QueryWrapper<>();
|
||||||
IPage<DesignCollectionItemVO> convert = page.convert((Function<TDesignPythonOutfit, DesignCollectionItemVO>) outfit -> {
|
qw.lambda().eq(TDesignPythonOutfit::getCollectionId, collectionId);
|
||||||
if (outfit != null) {
|
Page<TDesignPythonOutfit> page = designPythonOutfitMapper.selectPage(new Page<>(query.getPage(), query.getSize()), qw);
|
||||||
DesignCollectionItemVO vo = new DesignCollectionItemVO();
|
IPage<DesignCollectionItemVO> convert = page.convert((Function<TDesignPythonOutfit, DesignCollectionItemVO>) outfit -> {
|
||||||
vo.setDesignOutfitId(outfit.getId());
|
if (outfit != null) {
|
||||||
vo.setDesignOutfitUrl(minioUtil.getPreSignedUrl(outfit.getDesignUrl(), 24 * 60));
|
DesignCollectionItemVO vo = new DesignCollectionItemVO();
|
||||||
vo.setDesignItemId(outfit.getDesignItemId());
|
vo.setDesignOutfitId(outfit.getId());
|
||||||
return vo;
|
vo.setDesignOutfitUrl(minioUtil.getPreSignedUrl(outfit.getDesignUrl(), 24 * 60));
|
||||||
}
|
vo.setDesignItemId(outfit.getDesignItemId());
|
||||||
return null;
|
return vo;
|
||||||
});
|
}
|
||||||
return convert;
|
return null;
|
||||||
}else {
|
});
|
||||||
return new Page<>();
|
result.setDesign(PageBaseResponse.success(convert));
|
||||||
|
return result;
|
||||||
|
}else {
|
||||||
|
result.setDesign(PageBaseResponse.success(new Page<>()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
result.setDesign(PageBaseResponse.success(new Page<>()));
|
||||||
|
return result;
|
||||||
|
} else if (query.getBuildType().equals(BuildType.TO_PRODUCT_IMAGE.getValue())) {
|
||||||
|
List<MagicToolResultVO> results = new ArrayList<>();
|
||||||
|
QueryWrapper<ToProductImageResult> toProductImageResultQueryWrapper = new QueryWrapper<>();
|
||||||
|
toProductImageResultQueryWrapper.lambda().eq(ToProductImageResult::getTaskIdBatch, query.getTaskId());
|
||||||
|
List<ToProductImageResult> toProductImageResultList = toProductImageResultMapper.selectList(toProductImageResultQueryWrapper);
|
||||||
|
for (ToProductImageResult toProductImageResult : toProductImageResultList) {
|
||||||
|
MagicToolResultVO magicToolResultVO = new MagicToolResultVO();
|
||||||
|
magicToolResultVO.setUrl(minioUtil.getPreSignedUrl(toProductImageResult.getUrl(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME));
|
||||||
|
magicToolResultVO.setResultType(toProductImageResult.getResultType());
|
||||||
|
magicToolResultVO.setElementId(toProductImageResult.getElementId());
|
||||||
|
magicToolResultVO.setElementType(toProductImageResult.getElementType());
|
||||||
|
if (toProductImageResult.getElementType().equals("ProductElement")) {
|
||||||
|
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageResult.getElementId());
|
||||||
|
magicToolResultVO.setSourceUrl(minioUtil.getPreSignedUrl(toProductElement.getUrl(), 24 * 60));
|
||||||
|
}else {
|
||||||
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageResult.getElementId());
|
||||||
|
magicToolResultVO.setSourceUrl(minioUtil.getPreSignedUrl(tDesignPythonOutfit.getDesignUrl(), 24 * 60));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.setToProductImage(results);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
return new Page<>();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -169,11 +169,11 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
|||||||
Long projectId = portfolioDTO.getProjectId();
|
Long projectId = portfolioDTO.getProjectId();
|
||||||
// 复制project表
|
// 复制project表
|
||||||
Project project = projectMapper.selectById(projectId);
|
Project project = projectMapper.selectById(projectId);
|
||||||
if (project.getOriginal() == 0) {
|
if (project.getOriginal() != null && project.getOriginal() == 0) {
|
||||||
portfolio.setOriginal(0);
|
portfolio.setOriginal(0);
|
||||||
portfolio.setOriginalAccountId(project.getOriginalAccountId());
|
portfolio.setOriginalAccountId(project.getOriginalAccountId());
|
||||||
portfolio.setOriginalPortfolioId(project.getOriginalPortfolioId());
|
portfolio.setOriginalPortfolioId(project.getOriginalPortfolioId());
|
||||||
} else {
|
}else {
|
||||||
portfolio.setOriginal(1);
|
portfolio.setOriginal(1);
|
||||||
}
|
}
|
||||||
portfolio.setPortfolioName(portfolioDTO.getPortfolioName());
|
portfolio.setPortfolioName(portfolioDTO.getPortfolioName());
|
||||||
|
|||||||
@@ -355,6 +355,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
private ToProductImageRecordMapper toProductImageRecordMapper;
|
private ToProductImageRecordMapper toProductImageRecordMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ToProductImageResultMapper toProductImageResultMapper;
|
private ToProductImageResultMapper toProductImageResultMapper;
|
||||||
|
@Resource
|
||||||
|
private CloudTaskMapper cloudTaskMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PythonService pythonService;
|
private PythonService pythonService;
|
||||||
@@ -2203,4 +2205,32 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
brandDNAMapper.deleteById(brandDNADTO.getId());
|
brandDNAMapper.deleteById(brandDNADTO.getId());
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toProductBatch(String taskId, String url, String progress) {
|
||||||
|
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
|
||||||
|
qw.lambda().eq(ToProductImageResult::getTaskId, taskId);
|
||||||
|
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectOne(qw);
|
||||||
|
if (Objects.nonNull(toProductImageResult)) {
|
||||||
|
toProductImageResult.setUrl(url);
|
||||||
|
toProductImageResultMapper.updateById(toProductImageResult);
|
||||||
|
String taskIdBatch = toProductImageResult.getTaskIdBatch();
|
||||||
|
QueryWrapper<CloudTask> cloudTaskQueryWrapper = new QueryWrapper<>();
|
||||||
|
cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch);
|
||||||
|
CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper);
|
||||||
|
if (Objects.nonNull(cloudTask)) {
|
||||||
|
if (cloudTask.getCompletedNum() == null) {
|
||||||
|
cloudTask.setCompletedNum(1);
|
||||||
|
}else {
|
||||||
|
cloudTask.setCompletedNum(cloudTask.getCompletedNum() + 1);
|
||||||
|
}
|
||||||
|
if (progress.equals("OK")) {
|
||||||
|
cloudTask.setStatus(1);
|
||||||
|
cloudTask.setCompletedNum(cloudTask.getNums());
|
||||||
|
}
|
||||||
|
cloudTaskMapper.updateById(cloudTask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,9 @@ rabbitmq.queues.toProductImageResult=ToProductImage-dev
|
|||||||
rabbitmq.queues.relightResult=Relight-dev
|
rabbitmq.queues.relightResult=Relight-dev
|
||||||
rabbitmq.queues.poseTransform=PoseTransform-dev
|
rabbitmq.queues.poseTransform=PoseTransform-dev
|
||||||
rabbitmq.exchange.generate=generate-exchange
|
rabbitmq.exchange.generate=generate-exchange
|
||||||
rabbitmq.queues.designBatch=DesignBatch
|
rabbitmq.queues.designBatch=BatchRelight-dev
|
||||||
|
rabbitmq.queues.relightBatch=BatchRelight-dev
|
||||||
|
rabbitmq.queues.toProductImageBatch=BatchToProductImage-dev
|
||||||
|
|
||||||
orderList.link=https://develop.aida.com.hk/home/homePage?order=
|
orderList.link=https://develop.aida.com.hk/home/homePage?order=
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user