TASK:batch toProductImage;chatStream;
This commit is contained in:
@@ -114,7 +114,7 @@ public class GenerateController {
|
|||||||
|
|
||||||
@ApiOperation("喜欢或取消喜欢姿势变换生成的图片")
|
@ApiOperation("喜欢或取消喜欢姿势变换生成的图片")
|
||||||
@PostMapping("/likeOrDislike")
|
@PostMapping("/likeOrDislike")
|
||||||
public Response<Boolean> likeOrDislike(@ApiParam("id") @RequestParam Long transformedId, @ApiParam("like || dislike") @RequestParam String likeOrDislike, @RequestParam("projectId") Long projectId) {
|
public Response<Object> likeOrDislike(@ApiParam("id") @RequestParam Long transformedId, @ApiParam("like || dislike") @RequestParam String likeOrDislike, @RequestParam("projectId") Long projectId) {
|
||||||
return Response.success(generateService.disOrLikePose(transformedId, likeOrDislike, projectId));
|
return Response.success(generateService.disOrLikePose(transformedId, likeOrDislike, projectId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ public class SavedCollectionController {
|
|||||||
|
|
||||||
@ApiOperation(value = "productImageLike")
|
@ApiOperation(value = "productImageLike")
|
||||||
@PostMapping("/productImageLike")
|
@PostMapping("/productImageLike")
|
||||||
public Response<Boolean> productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) {
|
public Response<Long> productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) {
|
||||||
return Response.success(userLikeGroupService.productImageLike(productImageLikeDTO));
|
return Response.success(userLikeGroupService.productImageLike(productImageLikeDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
src/main/java/com/ai/da/model/dto/BatchParamDTO.java
Normal file
14
src/main/java/com/ai/da/model/dto/BatchParamDTO.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package com.ai.da.model.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class BatchParamDTO {
|
||||||
|
private String tasks_id;
|
||||||
|
private String prompt;
|
||||||
|
private BigDecimal image_strength;
|
||||||
|
private String image_url;
|
||||||
|
private String product_type;
|
||||||
|
}
|
||||||
@@ -4271,7 +4271,7 @@ public class PythonService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean toProductImageBatch(String url, String taskId, String prompt, BigDecimal imageStrength, String productType) {
|
public Boolean toProductImageBatch(String taskIdBatch, List<BatchParamDTO> paramList, String userId) {
|
||||||
// todo 限流校验
|
// todo 限流校验
|
||||||
// AccessLimitUtils.validate("design",5);
|
// AccessLimitUtils.validate("design",5);
|
||||||
OkHttpClient client = new OkHttpClient().newBuilder()
|
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||||
@@ -4283,12 +4283,9 @@ public class PythonService {
|
|||||||
MediaType mediaType = MediaType.parse("application/json");
|
MediaType mediaType = MediaType.parse("application/json");
|
||||||
//关闭FastJson的引用检测 防止出现$ref 现象
|
//关闭FastJson的引用检测 防止出现$ref 现象
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
map.put("tasks_id", taskId);
|
map.put("user_id", userId);
|
||||||
map.put("image_url", url);
|
map.put("batch_data_list", paramList);
|
||||||
map.put("prompt", prompt);
|
map.put("batch_tasks_id", taskIdBatch);
|
||||||
map.put("image_strength", imageStrength);
|
|
||||||
map.put("product_type", productType);
|
|
||||||
map.put("batch_size", 1);
|
|
||||||
log.info("toProductImage请求python 参数:####{}", map);
|
log.info("toProductImage请求python 参数:####{}", map);
|
||||||
String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty);
|
String param = JSON.toJSONString(map, SerializerFeature.WriteNullStringAsEmpty);
|
||||||
System.out.println(param);
|
System.out.println(param);
|
||||||
@@ -4446,4 +4443,61 @@ public class PythonService {
|
|||||||
log.error("PythonService##getProjectParam接口调用失败###{}", response);
|
log.error("PythonService##getProjectParam接口调用失败###{}", response);
|
||||||
throw new BusinessException("getProjectParam.interface.exception");
|
throw new BusinessException("getProjectParam.interface.exception");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getPrompt(String string, int num) {
|
||||||
|
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");
|
||||||
|
Map<String, Object> content = Maps.newHashMap();
|
||||||
|
content.put("text", string);
|
||||||
|
content.put("num", num);
|
||||||
|
content.put("language", "english");
|
||||||
|
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(content));
|
||||||
|
|
||||||
|
log.info("batch_prompt_optimizer 请求地址: {}", accessPythonIp + ":" + accessPythonPort + "/api/batch_prompt_optimizer");
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(accessPythonIp + ":" + "10002" + "/api/batch_prompt_optimizer")
|
||||||
|
.method("POST", body)
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.build();
|
||||||
|
Response response = null;
|
||||||
|
try {
|
||||||
|
response = client.newCall(request).execute();
|
||||||
|
} catch (IOException ioException) {
|
||||||
|
log.error("PythonService##batch_prompt_optimizer异常###{}", ExceptionUtil.getThrowableList(ioException));
|
||||||
|
throw new BusinessException("batch_prompt_optimizer.interface.exception");
|
||||||
|
}
|
||||||
|
String responseBody;
|
||||||
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
|
try {
|
||||||
|
responseBody = response.body().string();
|
||||||
|
JSONObject responseObject = JSON.parseObject(responseBody);
|
||||||
|
JSONObject dataObject = responseObject.getJSONObject("data");
|
||||||
|
if (dataObject != null) {
|
||||||
|
// 获取prompt_list数组
|
||||||
|
JSONArray promptArray = dataObject.getJSONArray("prompt_list");
|
||||||
|
if (promptArray != null) {
|
||||||
|
// 转换为List<String>
|
||||||
|
List<String> promptList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < promptArray.size(); i++) {
|
||||||
|
promptList.add(promptArray.getString(i));
|
||||||
|
}
|
||||||
|
return promptList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("PythonService##responseObject###{}", responseObject);
|
||||||
|
return null;
|
||||||
|
} catch (IOException | JSONException e) {
|
||||||
|
log.error("PythonService##batch_prompt_optimizer异常###{}", e.getMessage());
|
||||||
|
throw new BusinessException("batch_prompt_optimizer.interface.exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.error("PythonService##batch_prompt_optimizer接口调用失败###{}", response);
|
||||||
|
throw new BusinessException("batch_prompt_optimizer.interface.exception");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public interface GenerateService extends IService<Generate> {
|
|||||||
|
|
||||||
List<PoseTransformationVO> getPoseTransformationResultList(Long projectId);
|
List<PoseTransformationVO> getPoseTransformationResultList(Long projectId);
|
||||||
|
|
||||||
Boolean disOrLikePose(Long transformedId, String likeOrDislike, Long projectId);
|
Object disOrLikePose(Long transformedId, String likeOrDislike, Long projectId);
|
||||||
|
|
||||||
String modifyModelProportion(ModifyModelProportionDTO proportionDTO);
|
String modifyModelProportion(ModifyModelProportionDTO proportionDTO);
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public interface UserLikeGroupService extends IService<UserLikeGroup> {
|
|||||||
|
|
||||||
ToProductElementVO toProductImageElementUpload(MultipartFile file, Long projectId);
|
ToProductElementVO toProductImageElementUpload(MultipartFile file, Long projectId);
|
||||||
|
|
||||||
Boolean productImageLike(ProductImageLikeDTO productImageLikeDTO);
|
Long productImageLike(ProductImageLikeDTO productImageLikeDTO);
|
||||||
|
|
||||||
List<MagicToolResultVO> getToProductImageResultList(List<String> taskIdList);
|
List<MagicToolResultVO> getToProductImageResultList(List<String> taskIdList);
|
||||||
|
|
||||||
|
|||||||
@@ -1878,47 +1878,53 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
prompt = pythonService.promptTranslate(prompt);
|
prompt = pythonService.promptTranslate(prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
int fullBatches = toProductImageDTO.getToProductImageVOList().size() / cloudTaskDTO.getNums(); // 可整除的次数
|
Map<ToProductImageVO, Integer> toProductImageVOIntegerMap = allocateElements(toProductImageDTO.getToProductImageVOList(), cloudTaskDTO.getNums());
|
||||||
int remainder = toProductImageDTO.getToProductImageVOList().size() % cloudTaskDTO.getNums(); // 剩下的余数
|
|
||||||
|
|
||||||
for (int i1 = 0; i1 < fullBatches; i1++) {
|
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
|
||||||
// TODO prompt微调
|
String taskId;
|
||||||
// String newPrompt = pythonService.getPrompt(prompt);
|
if (toProductImageVO.getElementType().equals("DesignOutfit")) {
|
||||||
// BigDecimal randomFromRange = getRandomFromRange(toProductImageDTO.getImageStrengthMin(), toProductImageDTO.getImageStrengthMax());
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId());
|
||||||
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
|
|
||||||
String taskId;
|
Long designItemId = tDesignPythonOutfit.getDesignItemId();
|
||||||
if (toProductImageVO.getElementType().equals("DesignOutfit")) {
|
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");
|
||||||
|
}
|
||||||
|
// 走模型
|
||||||
|
List<BatchParamDTO> paramList = new ArrayList<>();
|
||||||
|
List<String> promptList = pythonService.getPrompt(sb.toString(), toProductImageVOIntegerMap.get(toProductImageVO));
|
||||||
|
for (int i1 = 0; i1 < toProductImageVOIntegerMap.get(toProductImageVO); i1++) {
|
||||||
|
BatchParamDTO batchParamDTO = new BatchParamDTO();
|
||||||
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
||||||
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId());
|
batchParamDTO.setTasks_id(taskId);
|
||||||
|
batchParamDTO.setPrompt(promptList.get(i1));
|
||||||
|
BigDecimal randomFromRange = getRandomFromRange(toProductImageDTO.getImageStrengthMin(), toProductImageDTO.getImageStrengthMax());
|
||||||
|
batchParamDTO.setImage_strength(randomFromRange);
|
||||||
|
batchParamDTO.setImage_url(tDesignPythonOutfit.getDesignUrl());
|
||||||
|
batchParamDTO.setProduct_type(productType);
|
||||||
|
paramList.add(batchParamDTO);
|
||||||
|
|
||||||
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 toProductImageResult = new ToProductImageResult();
|
||||||
toProductImageResult.setElementId(tDesignPythonOutfit.getId());
|
toProductImageResult.setElementId(tDesignPythonOutfit.getId());
|
||||||
toProductImageResult.setElementType("DesignOutfit");
|
toProductImageResult.setElementType("DesignOutfit");
|
||||||
@@ -1931,20 +1937,37 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
if (userLikeGroupId != null) {
|
if (userLikeGroupId != null) {
|
||||||
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
}
|
}
|
||||||
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
toProductImageResult.setImageStrength(randomFromRange);
|
||||||
toProductImageResultMapper.insert(toProductImageResult);
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
result.add(toProductImageResult);
|
result.add(toProductImageResult);
|
||||||
|
// 添加需要扣除的积分到预扣除区
|
||||||
|
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
|
||||||
|
i ++;
|
||||||
|
}
|
||||||
|
pythonService.toProductImageBatch(batchTaskId, paramList, userHolder.getId().toString());
|
||||||
|
}else {
|
||||||
|
if (StringUtils.isEmpty(prompt)) {
|
||||||
|
sb.append(",high quality clothing details,8K realistic,HDR");
|
||||||
}else {
|
}else {
|
||||||
if (StringUtils.isEmpty(prompt)) {
|
sb.append(",high quality clothing details,").append(prompt).append(",8K realistic,HDR");
|
||||||
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());
|
||||||
|
// 走模型
|
||||||
|
List<BatchParamDTO> paramList = new ArrayList<>();
|
||||||
|
List<String> promptList = pythonService.getPrompt(sb.toString(), toProductImageVOIntegerMap.get(toProductImageVO));
|
||||||
|
for (int i1 = 0; i1 < toProductImageVOIntegerMap.get(toProductImageVO); i1++) {
|
||||||
|
BatchParamDTO batchParamDTO = new BatchParamDTO();
|
||||||
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
|
||||||
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
|
batchParamDTO.setTasks_id(taskId);
|
||||||
// 走模型
|
batchParamDTO.setPrompt(promptList.get(i1));
|
||||||
pythonService.toProductImageBatch(toProductElement.getUrl(), taskId, sb.toString(), toProductImageDTO.getImageStrength(), "overall");
|
BigDecimal randomFromRange = getRandomFromRange(toProductImageDTO.getImageStrengthMin(), toProductImageDTO.getImageStrengthMax());
|
||||||
|
batchParamDTO.setImage_strength(randomFromRange);
|
||||||
|
batchParamDTO.setImage_url(toProductElement.getUrl());
|
||||||
|
batchParamDTO.setProduct_type("overall");
|
||||||
|
paramList.add(batchParamDTO);
|
||||||
|
|
||||||
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
ToProductImageResult toProductImageResult = new ToProductImageResult();
|
||||||
toProductImageResult.setElementId(toProductElement.getId());
|
toProductImageResult.setElementId(toProductElement.getId());
|
||||||
toProductImageResult.setElementType("ProductElement");
|
toProductImageResult.setElementType("ProductElement");
|
||||||
@@ -1957,108 +1980,16 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
if (userLikeGroupId != null) {
|
if (userLikeGroupId != null) {
|
||||||
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
||||||
}
|
}
|
||||||
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
toProductImageResult.setImageStrength(randomFromRange);
|
||||||
toProductImageResultMapper.insert(toProductImageResult);
|
toProductImageResultMapper.insert(toProductImageResult);
|
||||||
result.add(toProductImageResult);
|
result.add(toProductImageResult);
|
||||||
|
// 添加需要扣除的积分到预扣除区
|
||||||
|
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
|
||||||
|
i ++;
|
||||||
}
|
}
|
||||||
i ++;
|
pythonService.toProductImageBatch(batchTaskId, paramList, userHolder.getId().toString());
|
||||||
sb = new StringBuilder("The best quality, masterpiece, real image.");
|
|
||||||
// 添加需要扣除的积分到预扣除区
|
|
||||||
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (remainder > 0) {
|
|
||||||
// TODO: 随机
|
|
||||||
// String newPrompt = pythonService.getPrompt(prompt);
|
|
||||||
// BigDecimal randomFromRange = getRandomFromRange(toProductImageDTO.getImageStrengthMin(), toProductImageDTO.getImageStrengthMax());
|
|
||||||
|
|
||||||
List<ToProductImageVO> tempList = new ArrayList<>(toProductImageDTO.getToProductImageVOList());
|
|
||||||
Collections.shuffle(tempList); // 打乱顺序
|
|
||||||
|
|
||||||
// 取前 remainder 个
|
|
||||||
List<ToProductImageVO> randomPick = tempList.subList(0, remainder);
|
|
||||||
for (ToProductImageVO toProductImageVO : randomPick) {
|
|
||||||
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.setIsLike(0);
|
|
||||||
toProductImageResult.setTaskId(taskId);
|
|
||||||
toProductImageResult.setProjectId(projectId);
|
|
||||||
toProductImageResult.setTaskIdBatch(batchTaskId);
|
|
||||||
if (userLikeGroupId != null) {
|
|
||||||
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
|
||||||
}
|
|
||||||
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
|
||||||
toProductImageResultMapper.insert(toProductImageResult);
|
|
||||||
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.setIsLike(0);
|
|
||||||
toProductImageResult.setTaskId(taskId);
|
|
||||||
toProductImageResult.setProjectId(projectId);
|
|
||||||
toProductImageResult.setTaskIdBatch(batchTaskId);
|
|
||||||
if (userLikeGroupId != null) {
|
|
||||||
toProductImageResult.setUserLikeGroupId(userLikeGroupId);
|
|
||||||
}
|
|
||||||
toProductImageResult.setImageStrength(toProductImageDTO.getImageStrength());
|
|
||||||
toProductImageResultMapper.insert(toProductImageResult);
|
|
||||||
result.add(toProductImageResult);
|
|
||||||
}
|
|
||||||
i ++;
|
|
||||||
sb = new StringBuilder("The best quality, masterpiece, real image.");
|
|
||||||
// 添加需要扣除的积分到预扣除区
|
|
||||||
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
|
|
||||||
}
|
}
|
||||||
|
sb = new StringBuilder("The best quality, masterpiece, real image.");
|
||||||
}
|
}
|
||||||
|
|
||||||
CloudTask cloudTask = CopyUtil.copyObject(cloudTaskDTO, CloudTask.class);
|
CloudTask cloudTask = CopyUtil.copyObject(cloudTaskDTO, CloudTask.class);
|
||||||
@@ -2229,6 +2160,34 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<ToProductImageVO, Integer> allocateElements(List<ToProductImageVO> voList, int totalResults) {
|
||||||
|
|
||||||
|
// 计算基础分配值和余数
|
||||||
|
int baseAllocation = totalResults / voList.size();
|
||||||
|
int remainder = totalResults % voList.size();
|
||||||
|
|
||||||
|
// 初始化分配结果(每个元素先分配基础值)
|
||||||
|
Map<ToProductImageVO, Integer> allocationMap = new HashMap<>();
|
||||||
|
for (ToProductImageVO vo : voList) {
|
||||||
|
allocationMap.put(vo, baseAllocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果有余数,随机分配额外的一个结果
|
||||||
|
if (remainder > 0) {
|
||||||
|
// 创建元素ID的可变副本并打乱顺序
|
||||||
|
List<ToProductImageVO> shuffledIds = new ArrayList<>(voList);
|
||||||
|
Collections.shuffle(shuffledIds);
|
||||||
|
|
||||||
|
// 将前N个元素各增加1(N=余数)
|
||||||
|
for (int i = 0; i < remainder; i++) {
|
||||||
|
ToProductImageVO toProductImageVO = shuffledIds.get(i);
|
||||||
|
allocationMap.put(toProductImageVO, allocationMap.get(toProductImageVO) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocationMap;
|
||||||
|
}
|
||||||
|
|
||||||
private DesignCollectionDTO transDesignParam(Long projectId) {
|
private DesignCollectionDTO transDesignParam(Long projectId) {
|
||||||
DesignCollectionDTO designCollectionDTO = new DesignCollectionDTO();
|
DesignCollectionDTO designCollectionDTO = new DesignCollectionDTO();
|
||||||
List<CollectionElement> collectionElementList = collectionElementService.getByProjectId(projectId);
|
List<CollectionElement> collectionElementList = collectionElementService.getByProjectId(projectId);
|
||||||
|
|||||||
@@ -1049,12 +1049,14 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
|
|||||||
return vos;
|
return vos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean disOrLikePose(Long transformedId, String likeOrDislike, Long projectId){
|
public Object disOrLikePose(Long transformedId, String likeOrDislike, Long projectId){
|
||||||
PoseTransformation poseTransformation = poseTransformationMapper.selectById(transformedId);
|
PoseTransformation poseTransformation = poseTransformationMapper.selectById(transformedId);
|
||||||
|
Long collectionSortId = null;
|
||||||
if (Objects.nonNull(poseTransformation)){
|
if (Objects.nonNull(poseTransformation)){
|
||||||
if (likeOrDislike.equals("like")){
|
if (likeOrDislike.equals("like")){
|
||||||
poseTransformation.setIsLiked((byte)1);
|
poseTransformation.setIsLiked((byte)1);
|
||||||
designService.addCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId);
|
CollectionSort collectionSort = designService.addCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId);
|
||||||
|
collectionSortId = collectionSort.getId();
|
||||||
}else if (likeOrDislike.equals("dislike")){
|
}else if (likeOrDislike.equals("dislike")){
|
||||||
poseTransformation.setIsLiked((byte)0);
|
poseTransformation.setIsLiked((byte)0);
|
||||||
designService.deleteCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId);
|
designService.deleteCollectionSort(poseTransformation.getId(), CollectionType.POSE_TRANSFORM.getValue(), projectId);
|
||||||
@@ -1064,6 +1066,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
|
|||||||
}else {
|
}else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (null != collectionSortId) {
|
||||||
|
return collectionSortId;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -298,17 +298,19 @@ public class LLMServiceImpl implements LLMService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ("text".equals(type) || "think".equals(type)) {
|
if ("text".equals(type) || "think".equals(type)) {
|
||||||
if (StringUtils.isEmpty(contentType)) {
|
if (StringUtils.isEmpty(contentType) || !contentType.equals(type)) {
|
||||||
contentType = type;
|
if ("text".equals(type)) {
|
||||||
}
|
responseContentBuilder.append("[TEXT]");
|
||||||
if (!contentType.equals(type)) {
|
}else {
|
||||||
systemMessage.setSeq(getNextSeq(projectId));
|
responseContentBuilder.append("[THINK]");
|
||||||
systemMessage.setCreateTime(LocalDateTime.now());
|
}
|
||||||
systemMessage.setContent(responseContentBuilder.toString());
|
// systemMessage.setSeq(getNextSeq(projectId));
|
||||||
chatMessageMapper.insert(systemMessage);
|
// systemMessage.setCreateTime(LocalDateTime.now());
|
||||||
systemMessage.setId(null);
|
// systemMessage.setContent(responseContentBuilder.toString());
|
||||||
responseContentBuilder = new StringBuilder();
|
// chatMessageMapper.insert(systemMessage);
|
||||||
contentType = type;
|
// systemMessage.setId(null);
|
||||||
|
// responseContentBuilder = new StringBuilder();
|
||||||
|
// contentType = type;
|
||||||
}
|
}
|
||||||
responseContentBuilder.append(content);
|
responseContentBuilder.append(content);
|
||||||
emitter.send(json.toJSONString());
|
emitter.send(json.toJSONString());
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean productImageLike(ProductImageLikeDTO productImageLikeDTO) {
|
public Long productImageLike(ProductImageLikeDTO productImageLikeDTO) {
|
||||||
List<Long> toProductImageResultId = productImageLikeDTO.getToProductImageResultId();
|
List<Long> toProductImageResultId = productImageLikeDTO.getToProductImageResultId();
|
||||||
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
|
QueryWrapper<ToProductImageResult> qw = new QueryWrapper<>();
|
||||||
qw.lambda().in(ToProductImageResult::getId, toProductImageResultId);
|
qw.lambda().in(ToProductImageResult::getId, toProductImageResultId);
|
||||||
@@ -591,12 +591,15 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
toProductImageResult.setIsLike(1);
|
toProductImageResult.setIsLike(1);
|
||||||
toProductImageResultMapper.update(toProductImageResult, qw);
|
toProductImageResultMapper.update(toProductImageResult, qw);
|
||||||
ToProductImageResult toProductImageResult1 = toProductImageResultMapper.selectById(toProductImageResultId.get(0));
|
ToProductImageResult toProductImageResult1 = toProductImageResultMapper.selectById(toProductImageResultId.get(0));
|
||||||
|
Long collectionSortId = null;
|
||||||
if (toProductImageResult1.getResultType().equals("Relight")) {
|
if (toProductImageResult1.getResultType().equals("Relight")) {
|
||||||
designService.addCollectionSort(toProductImageResult1.getId(), CollectionType.RELIGHT.getValue(), productImageLikeDTO.getProjectId());
|
CollectionSort collectionSort = designService.addCollectionSort(toProductImageResult1.getId(), CollectionType.RELIGHT.getValue(), productImageLikeDTO.getProjectId());
|
||||||
|
collectionSortId = collectionSort.getId();
|
||||||
}else {
|
}else {
|
||||||
designService.addCollectionSort(toProductImageResult1.getId(), CollectionType.TO_PRODUCT_IMAGE.getValue(), productImageLikeDTO.getProjectId());
|
CollectionSort collectionSort = designService.addCollectionSort(toProductImageResult1.getId(), CollectionType.TO_PRODUCT_IMAGE.getValue(), productImageLikeDTO.getProjectId());
|
||||||
|
collectionSortId = collectionSort.getId();
|
||||||
}
|
}
|
||||||
return Boolean.TRUE;
|
return collectionSortId;
|
||||||
}
|
}
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|||||||
Reference in New Issue
Block a user