@@ -196,12 +196,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String jsonString = " " ;
String jsonString = " " ;
HashMap < String , String > params = new HashMap < > ( ) ;
HashMap < String , String > params = new HashMap < > ( ) ;
String version = null ;
String version = null ;
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
version = " high " ;
version = " high " ;
params . put ( " version " , " high " ) ;
params . put ( " version " , " high " ) ;
} else if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " fast " ) ) {
} else if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " fast " ) ) {
version = " fast " ;
version = " fast " ;
params . put ( " version " , " fast " ) ;
params . put ( " version " , " fast " ) ;
}
}
// 3.1 确定不同类型的印花分别调哪个接口
// 3.1 确定不同类型的印花分别调哪个接口
if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( PRINT_BOARD . getRealName ( ) ) ) {
if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( PRINT_BOARD . getRealName ( ) ) ) {
@@ -362,7 +362,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String prefix = " " ;
String prefix = " " ;
if ( userInput . startsWith ( " Painting Style " )
if ( userInput . startsWith ( " Painting Style " )
| | userInput . startsWith ( " Illustration Style " )
| | userInput . startsWith ( " Illustration Style " )
| | userInput . startsWith ( " Real Style " ) ) {
| | userInput . startsWith ( " Real Style " ) ) {
prefix = userInput . substring ( 0 , userInput . indexOf ( " , " ) ) + " , " ;
prefix = userInput . substring ( 0 , userInput . indexOf ( " , " ) ) + " , " ;
userInput = userInput . substring ( userInput . indexOf ( " , " ) + 1 ) ;
userInput = userInput . substring ( userInput . indexOf ( " , " ) + 1 ) ;
}
}
@@ -389,7 +389,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
case " Sketchboard " :
case " Sketchboard " :
// text = "clear lines, simple outlines monochrome white vector image of " + translated + ", no background, sketch flat, front view display, best quality, ultra-high resolution 8k";
// text = "clear lines, simple outlines monochrome white vector image of " + translated + ", no background, sketch flat, front view display, best quality, ultra-high resolution 8k";
text = " a single item of sketch of " + translated + " , 4k, white background " ;
text = " a single item of sketch of " + translated + " , 4k, white background " ;
if ( ! StringUtil . isNullOrEmpty ( ageGroup ) & & ageGroup . equals ( " Child " ) ) {
if ( ! StringUtil . isNullOrEmpty ( ageGroup ) & & ageGroup . equals ( " Child " ) ) {
text = text + " , Children's clothing " ;
text = text + " , Children's clothing " ;
}
}
// generate.setText(text);
// generate.setText(text);
@@ -533,7 +533,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum . OTHER ;
CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum . OTHER ;
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " wx " ) ) {
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " wx " ) ) {
String taskId = createAsyncTask ( generateThroughImageTextDTO ) ;
String taskId = createAsyncTask ( generateThroughImageTextDTO ) ;
// String taskId = "e53c86ea-53be-424b-8ac7-3c01c141f4f7";
// String taskId = "e53c86ea-53be-424b-8ac7-3c01c141f4f7";
creditsEventsEnum = CreditsEventsEnum . WX_TEXT2IMG ;
creditsEventsEnum = CreditsEventsEnum . WX_TEXT2IMG ;
@@ -569,7 +569,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 模型迁移SD1.? -> flux,从而产生了不同模型的选择,
// 模型迁移SD1.? -> flux,从而产生了不同模型的选择,
// high -> 生成图片质量高,但生成速度慢,每次生成只返回一张图片
// high -> 生成图片质量高,但生成速度慢,每次生成只返回一张图片
// fast -> 生成图片质量低,但生成速度快,每次生成返回四张图片
// fast -> 生成图片质量低,但生成速度快,每次生成返回四张图片
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
times = 1 ;
times = 1 ;
}
}
@@ -629,13 +629,13 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
} else if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( MOOD_BOARD . getRealName ( ) ) ) {
} else if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( MOOD_BOARD . getRealName ( ) ) ) {
creditsEventsEnum = CreditsEventsEnum . MOOD_BOARD ;
creditsEventsEnum = CreditsEventsEnum . MOOD_BOARD ;
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
times = 1 ;
times = 1 ;
}
}
} else if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( SKETCH_BOARD . getRealName ( ) ) ) {
} else if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( SKETCH_BOARD . getRealName ( ) ) ) {
creditsEventsEnum = CreditsEventsEnum . SKETCH_BOARD ;
creditsEventsEnum = CreditsEventsEnum . SKETCH_BOARD ;
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
if ( ! StringUtil . isNullOrEmpty ( generateThroughImageTextDTO . getModelName ( ) ) & & generateThroughImageTextDTO . getModelName ( ) . equals ( " high " ) ) {
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
creditsEventsEnum = CreditsEventsEnum . LOCAL_TEXT2IMG_HIGH ;
times = 1 ;
times = 1 ;
}
}
@@ -651,7 +651,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
// 除了 Moodboard || Printboard->Pattern(可以区分三种风格) || Sketchboard(Generate Sketch)这三个地方需要区分high || fast之外, 其他地方保持原样
// 除了 Moodboard || Printboard->Pattern(可以区分三种风格) || Sketchboard(Generate Sketch)这三个地方需要区分high || fast之外, 其他地方保持原样
if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( " Printboard " ) & & ! generateThroughImageTextDTO . getLevel2Type ( ) . equals ( " Pattern " ) ) {
if ( generateThroughImageTextDTO . getLevel1Type ( ) . equals ( " Printboard " ) & & ! generateThroughImageTextDTO . getLevel2Type ( ) . equals ( " Pattern " ) ) {
generateThroughImageTextDTO . setModelName ( null ) ;
generateThroughImageTextDTO . setModelName ( null ) ;
}
}
@@ -707,12 +707,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
flag = false ;
flag = false ;
}
}
// 暂定万象每次生成1个
// 暂定万象每次生成1个
if ( type . equals ( " wx " ) ) {
if ( type . equals ( " wx " ) ) {
return Collections . singletonList ( getAsyncTaskResult ( taskId ) ) ;
return Collections . singletonList ( getAsyncTaskResult ( taskId ) ) ;
} else if ( type . equals ( " freepik " ) ) {
} else if ( type . equals ( " freepik " ) ) {
results . add ( generateResultVO ) ;
results . add ( generateResultVO ) ;
continue ;
continue ;
} else if ( type . equals ( " flux " ) ) {
} else if ( type . equals ( " flux " ) ) {
results . add ( getFluxResultAndSave ( taskId ) ) ;
results . add ( getFluxResultAndSave ( taskId ) ) ;
continue ;
continue ;
}
}
@@ -789,8 +789,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String path ;
String path ;
if ( type . equals ( " Logo " ) ) {
if ( type . equals ( " Logo " ) ) {
path = CommonConstant . GENERATE_LOGO_SINGLE_CANCEL ;
path = CommonConstant . GENERATE_LOGO_SINGLE_CANCEL ;
} else if ( type . equals ( " PoseTransformation " ) ) {
} else if ( type . equals ( " PoseTransformation " ) ) {
path = CommonConstant . POSE_TRANSFORMATION_CANCEL ;
path = CommonConstant . POSE_TRANSFORMATION_CANCEL ;
} else {
} else {
path = CommonConstant . GENERATE_CANCEL ;
path = CommonConstant . GENERATE_CANCEL ;
}
}
@@ -894,7 +894,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 检查积分是否够本次扣除
// 检查积分是否够本次扣除
CreditsEventsEnum event = CreditsEventsEnum . IMAGE_TO_SKETCH ;
CreditsEventsEnum event = CreditsEventsEnum . IMAGE_TO_SKETCH ;
Boolean b = creditsService . checkCredits ( accountId , event , 1 ) ;
Boolean b = creditsService . checkCredits ( accountId , event , 1 ) ;
if ( ! b ) {
if ( ! b ) {
throw new BusinessException ( " remaining.credits.insufficient " , ResultEnum . PROMPT . getCode ( ) ) ;
throw new BusinessException ( " remaining.credits.insufficient " , ResultEnum . PROMPT . getCode ( ) ) ;
}
}
@@ -916,12 +916,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
private String requestSketchExtract ( ImageToSketchDTO imageToSketchDTO , String collagePictureUrl ,
private String requestSketchExtract ( ImageToSketchDTO imageToSketchDTO , String collagePictureUrl ,
Long accountId , String styleCode ) {
Long accountId , String styleCode ) {
String imagePath ;
String imagePath ;
if ( StringUtil . isNullOrEmpty ( collagePictureUrl ) ) {
if ( StringUtil . isNullOrEmpty ( collagePictureUrl ) ) {
CollectionElement collectionElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
CollectionElement collectionElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
imagePath = collectionElement . getUrl ( ) ;
imagePath = collectionElement . getUrl ( ) ;
} else {
} else {
imagePath = collagePictureUrl ;
imagePath = collagePictureUrl ;
}
}
@@ -930,7 +930,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String objectName = accountId + " /imageToSketch/ " + imageName ;
String objectName = accountId + " /imageToSketch/ " + imageName ;
String styleImage ;
String styleImage ;
if ( ! Objects . isNull ( imageToSketchDTO . getStyleImageId ( ) ) ) {
if ( ! Objects . isNull ( imageToSketchDTO . getStyleImageId ( ) ) ) {
CollectionElement styleElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
CollectionElement styleElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
styleImage = styleElement . getUrl ( ) ;
styleImage = styleElement . getUrl ( ) ;
} else {
} else {
@@ -942,8 +942,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
private Generate saveExtractSketchRequest ( ImageToSketchDTO imageToSketchDTO , String collagePictureUrl ,
private Generate saveExtractSketchRequest ( ImageToSketchDTO imageToSketchDTO , String collagePictureUrl ,
Long projectId , Long accountId , String styleCode ,
Long projectId , Long accountId , String styleCode ,
String modelName , String taskId ) {
String modelName , String taskId ) {
// 存DB
// 存DB
Generate generate = new Generate ( ) ;
Generate generate = new Generate ( ) ;
generate . setAccountId ( accountId ) ;
generate . setAccountId ( accountId ) ;
@@ -963,12 +963,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return generate ;
return generate ;
}
}
public GenerateResultVO saveExtractSketchResult ( Generate generate , String sketchPath , String gender ) {
public GenerateResultVO saveExtractSketchResult ( Generate generate , String sketchPath , String gender ) {
// 将生成结果存入DB
// 将生成结果存入DB
GenerateDetail generateDetail = new GenerateDetail ( ) ;
GenerateDetail generateDetail = new GenerateDetail ( ) ;
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setUrl ( sketchPath ) ;
generateDetail . setUrl ( sketchPath ) ;
generateDetail . setIsLike ( ( byte ) 0 ) ;
generateDetail . setIsLike ( ( byte ) 0 ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( sketchPath , 24 * 60 ) , Boolean . FALSE ) ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( sketchPath , 24 * 60 ) , Boolean . FALSE ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetailMapper . insert ( generateDetail ) ;
generateDetailMapper . insert ( generateDetail ) ;
@@ -979,7 +979,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
minioUtil . getPreSignedUrl ( sketchPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) , " Success " , clothCategory ) ;
minioUtil . getPreSignedUrl ( sketchPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) , " Success " , clothCategory ) ;
}
}
public void doCreditsSubtract ( Long accountId , CreditsEventsEnum event ) {
public void doCreditsSubtract ( Long accountId , CreditsEventsEnum event ) {
BigDecimal existingCredits = accountService . getById ( accountId ) . getCredits ( ) ;
BigDecimal existingCredits = accountService . getById ( accountId ) . getCredits ( ) ;
BigDecimal subtract = existingCredits . subtract ( new BigDecimal ( event . getValue ( ) ) ) ;
BigDecimal subtract = existingCredits . subtract ( new BigDecimal ( event . getValue ( ) ) ) ;
accountService . updateCreditsAndEndTime ( accountId , subtract . toString ( ) , null ) ;
accountService . updateCreditsAndEndTime ( accountId , subtract . toString ( ) , null ) ;
@@ -1005,13 +1005,13 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 生成唯一任务ID
// 生成唯一任务ID
String taskId ;
String taskId ;
if ( ! StringUtil . isNullOrEmpty ( imageToSketchDTO . getModelName ( ) )
if ( ! StringUtil . isNullOrEmpty ( imageToSketchDTO . getModelName ( ) )
& & imageToSketchDTO . getModelName ( ) . equals ( " flux " ) ) {
& & imageToSketchDTO . getModelName ( ) . equals ( " flux " ) ) {
String imagePath ;
String imagePath ;
// todo 拼贴图的线稿提取是否能用flux
// todo 拼贴图的线稿提取是否能用flux
if ( StringUtil . isNullOrEmpty ( collagePictureUrl ) ) {
if ( StringUtil . isNullOrEmpty ( collagePictureUrl ) ) {
CollectionElement collectionElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
CollectionElement collectionElement = collectionElementService . getById ( imageToSketchDTO . getElementId ( ) ) ;
imagePath = collectionElement . getUrl ( ) ;
imagePath = collectionElement . getUrl ( ) ;
} else {
} else {
imagePath = collagePictureUrl ;
imagePath = collagePictureUrl ;
}
}
taskId = flux ( event , null , imagePath , false ) ;
taskId = flux ( event , null , imagePath , false ) ;
@@ -1096,9 +1096,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String path ;
String path ;
GenerateDetail originalDetail = generateDetailMapper . selectById ( generateModifyDTO . getOriginalId ( ) ) ;
GenerateDetail originalDetail = generateDetailMapper . selectById ( generateModifyDTO . getOriginalId ( ) ) ;
Long generateDetailId = originalDetail . getId ( ) ;
Long generateDetailId = originalDetail . getId ( ) ;
if ( generateModifyDTO . getIsOverride ( ) ) {
if ( generateModifyDTO . getIsOverride ( ) ) {
path = originalDetail . getUrl ( ) . replaceFirst ( " ^[^/]+/ " , " " ) . replaceFirst ( " \\ .[^.]+$ " , " " ) ;
path = originalDetail . getUrl ( ) . replaceFirst ( " ^[^/]+/ " , " " ) . replaceFirst ( " \\ .[^.]+$ " , " " ) ;
} else {
} else {
path = accountId + " /sketchboard/ " + gender . toLowerCase ( ) + " / " + category + " / " + UUID . randomUUID ( ) ;
path = accountId + " /sketchboard/ " + gender . toLowerCase ( ) + " / " + category + " / " + UUID . randomUUID ( ) ;
}
}
@@ -1107,17 +1107,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
log . info ( " 修改后的图片 : {} " , minioPath ) ;
log . info ( " 修改后的图片 : {} " , minioPath ) ;
// 存入db 保存到t_generate_detail
// 存入db 保存到t_generate_detail
if ( ! generateModifyDTO . getIsOverride ( ) ) {
if ( ! generateModifyDTO . getIsOverride ( ) ) {
GenerateDetail generateDetail = new GenerateDetail ( ) ;
GenerateDetail generateDetail = new GenerateDetail ( ) ;
generateDetail . setGenerateId ( originalDetail . getGenerateId ( ) ) ;
generateDetail . setGenerateId ( originalDetail . getGenerateId ( ) ) ;
generateDetail . setUrl ( minioPath ) ;
generateDetail . setUrl ( minioPath ) ;
generateDetail . setIsLike ( ( byte ) 0 ) ;
generateDetail . setIsLike ( ( byte ) 0 ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( minioPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME , true ) , Boolean . FALSE ) ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( minioPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME , true ) , Boolean . FALSE ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetailMapper . insert ( generateDetail ) ;
generateDetailMapper . insert ( generateDetail ) ;
generateDetailId = generateDetail . getId ( ) ;
generateDetailId = generateDetail . getId ( ) ;
} else {
} else {
GenerateDetail generateDetail = new GenerateDetail ( ) ;
GenerateDetail generateDetail = new GenerateDetail ( ) ;
generateDetail . setUrl ( minioPath ) ;
generateDetail . setUrl ( minioPath ) ;
generateDetail . setId ( generateDetailId ) ;
generateDetail . setId ( generateDetailId ) ;
@@ -1130,7 +1130,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
@Resource
@Resource
private UserLikeGroupService userLikeGroupService ;
private UserLikeGroupService userLikeGroupService ;
public ToProductImageResultVO poseTransform ( PoseTransformDTO poseTransformDTO ) {
public ToProductImageResultVO poseTransform ( PoseTransformDTO poseTransformDTO ) {
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
Long projectId = poseTransformDTO . getProjectId ( ) ;
Long projectId = poseTransformDTO . getProjectId ( ) ;
String productImage = poseTransformDTO . getProductImage ( ) ;
String productImage = poseTransformDTO . getProductImage ( ) ;
@@ -1148,11 +1148,11 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String taskId ;
String taskId ;
Boolean flag = false ;
Boolean flag = false ;
PoseTransformation poseTransformation = new PoseTransformation ( ) ;
PoseTransformation poseTransformation = new PoseTransformation ( ) ;
if ( ! StringUtil . isNullOrEmpty ( poseTransformDTO . getModelName ( ) ) & & poseTransformDTO . getModelName ( ) . equals ( " wx " ) ) {
if ( ! StringUtil . isNullOrEmpty ( poseTransformDTO . getModelName ( ) ) & & poseTransformDTO . getModelName ( ) . equals ( " wx " ) ) {
taskId = animateAnyone ( poseTransformDTO , accountId ) ;
taskId = animateAnyone ( poseTransformDTO , accountId ) ;
if ( ! StringUtil . isNullOrEmpty ( taskId ) ) flag = true ;
if ( ! StringUtil . isNullOrEmpty ( taskId ) ) flag = true ;
poseTransformation . setModelName ( " wx " ) ;
poseTransformation . setModelName ( " wx " ) ;
} else {
} else {
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
taskId = uuid + " - " + accountId ;
taskId = uuid + " - " + accountId ;
flag = pythonService . poseTransformation ( productImage , poseId , taskId ) ;
flag = pythonService . poseTransformation ( productImage , poseId , taskId ) ;
@@ -1163,22 +1163,22 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
poseTransformation . setUniqueId ( taskId ) ;
poseTransformation . setUniqueId ( taskId ) ;
poseTransformation . setProductImage ( productImage ) ;
poseTransformation . setProductImage ( productImage ) ;
poseTransformation . setPoseId ( poseId ) ;
poseTransformation . setPoseId ( poseId ) ;
poseTransformation . setIsLiked ( ( byte ) 1 ) ;
poseTransformation . setIsLiked ( ( byte ) 1 ) ;
poseTransformation . setCreateTime ( LocalDateTime . now ( ) ) ;
poseTransformation . setCreateTime ( LocalDateTime . now ( ) ) ;
poseTransformationMapper . insert ( poseTransformation ) ;
poseTransformationMapper . insert ( poseTransformation ) ;
// 当需要默认like
// 当需要默认like
ToProductImageResultVO toProductImageResultVO = new ToProductImageResultVO ( ) ;
ToProductImageResultVO toProductImageResultVO = new ToProductImageResultVO ( ) ;
if ( Objects . nonNull ( poseTransformDTO . getIsDefaultLike ( ) ) & & poseTransformDTO . getIsDefaultLike ( ) ) {
if ( Objects . nonNull ( poseTransformDTO . getIsDefaultLike ( ) ) & & poseTransformDTO . getIsDefaultLike ( ) ) {
// 满足条件下添加到like
// 满足条件下添加到like
Integer sort = addPoseTransferLike ( poseTransformDTO , poseTransformation . getId ( ) ) ;
Integer sort = addPoseTransferLike ( poseTransformDTO , poseTransformation . getId ( ) ) ;
Integer reSort = userLikeGroupService . rearrangeChildSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) ,
Integer reSort = userLikeGroupService . rearrangeChildSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) ,
poseTransformDTO . getParentId ( ) , poseTransformDTO . getUserLikeSortId ( ) ) ;
poseTransformDTO . getParentId ( ) , poseTransformDTO . getUserLikeSortId ( ) ) ;
toProductImageResultVO . setSort ( Objects . isNull ( reSort ) ? sort : reSort ) ;
toProductImageResultVO . setSort ( Objects . isNull ( reSort ) ? sort : reSort ) ;
} else if ( Objects . nonNull ( poseTransformDTO . getIsDefaultLike ( ) ) & & Objects . nonNull ( poseTransformDTO . getParentId ( ) ) ) {
} else if ( Objects . nonNull ( poseTransformDTO . getIsDefaultLike ( ) ) & & Objects . nonNull ( poseTransformDTO . getParentId ( ) ) ) {
toProductImageResultVO . setParentId ( poseTransformDTO . getParentId ( ) ) ;
toProductImageResultVO . setParentId ( poseTransformDTO . getParentId ( ) ) ;
}
}
if ( flag ) {
if ( flag ) {
// 6、添加预扣除积分到redis
// 6、添加预扣除积分到redis
creditsService . addRecordToCreditsDeduction ( accountId , taskId , creditsEventsEnum ) ;
creditsService . addRecordToCreditsDeduction ( accountId , taskId , creditsEventsEnum ) ;
// 6.1 添加积分扣除记录到db
// 6.1 添加积分扣除记录到db
@@ -1191,9 +1191,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
throw new BusinessException ( " pose transformation error " , ResultEnum . ERROR . getCode ( ) ) ;
throw new BusinessException ( " pose transformation error " , ResultEnum . ERROR . getCode ( ) ) ;
}
}
private Integer addPoseTransferLike ( PoseTransformDTO poseTransformDTO , Long poseTransformationId ) {
private Integer addPoseTransferLike ( PoseTransformDTO poseTransformDTO , Long poseTransformationId ) {
if ( Objects . nonNull ( poseTransformDTO . getParentId ( ) )
if ( Objects . nonNull ( poseTransformDTO . getParentId ( ) )
& & ! poseTransformDTO . getParentId ( ) . equals ( 0L ) ) {
& & ! poseTransformDTO . getParentId ( ) . equals ( 0L ) ) {
CollectionSort collectionSort = disOrLikePose ( poseTransformationId , " like " ,
CollectionSort collectionSort = disOrLikePose ( poseTransformationId , " like " ,
poseTransformDTO . getProjectId ( ) , poseTransformDTO . getParentId ( ) ) ;
poseTransformDTO . getProjectId ( ) , poseTransformDTO . getParentId ( ) ) ;
return collectionSort . getSort ( ) ;
return collectionSort . getSort ( ) ;
@@ -1208,16 +1208,16 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
@Resource
@Resource
private DesignService designService ;
private DesignService designService ;
public void processPoseTransformResult ( String taskId , String gifUrl , String videoUrl , String imageUrl ) {
public void processPoseTransformResult ( String taskId , String gifUrl , String videoUrl , String imageUrl ) {
// 1、存储模型返回的数据
// 1、存储模型返回的数据
PoseTransformation poseTransformation ;
PoseTransformation poseTransformation ;
QueryWrapper < PoseTransformation > qw = new QueryWrapper < > ( ) ;
QueryWrapper < PoseTransformation > qw = new QueryWrapper < > ( ) ;
qw . eq ( " unique_id " , taskId ) ;
qw . eq ( " unique_id " , taskId ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( qw ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( qw ) ;
if ( poseTransformations ! = null & & poseTransformations . size ( ) > 1 ) {
if ( poseTransformations ! = null & & poseTransformations . size ( ) > 1 ) {
log . warn ( " 通过taskId {} 查询到的PoseTransformation的结果不止一条 " , taskId ) ;
log . warn ( " 通过taskId {} 查询到的PoseTransformation的结果不止一条 " , taskId ) ;
} else if ( poseTransformations = = null | | poseTransformations . isEmpty ( ) ) {
} else if ( poseTransformations = = null | | poseTransformations . isEmpty ( ) ) {
return ;
return ;
}
}
poseTransformation = poseTransformations . get ( 0 ) ;
poseTransformation = poseTransformations . get ( 0 ) ;
poseTransformation . setGifUrl ( gifUrl ) ;
poseTransformation . setGifUrl ( gifUrl ) ;
@@ -1240,18 +1240,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
if ( flag ) creditsService . updateChangedCredits ( accountId , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( accountId , taskId ) ;
}
}
public List < PoseTransformationVO > getPoseTransformationResult ( List < String > taskIdList ) {
public List < PoseTransformationVO > getPoseTransformationResult ( List < String > taskIdList ) {
ArrayList < PoseTransformationVO > poseTransformationVOS = new ArrayList < > ( ) ;
ArrayList < PoseTransformationVO > poseTransformationVOS = new ArrayList < > ( ) ;
for ( String taskId : taskIdList ) {
for ( String taskId : taskIdList ) {
String type = resolveModelType ( taskId , CreditsEventsEnum . POSE_TRANSFORMATION . getValue ( ) ) ;
String type = resolveModelType ( taskId , CreditsEventsEnum . POSE_TRANSFORMATION . getValue ( ) ) ;
PoseTransformation poseTransformation = poseTransformationMapper . selectOne ( new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) ) ;
String key = generateResultKey + " : " + taskId ;
String key = generateResultKey + " : " + taskId ;
String resultJson = redisUtil . getFromString ( key ) ;
String resultJson = redisUtil . getFromString ( key ) ;
PoseTransformationVO poseTransformationVO ;
PoseTransformationVO poseTransformationVO ;
if ( ! StringUtil . isNullOrEmpty ( resultJson ) ) {
if ( ! StringUtil . isNullOrEmpty ( resultJson ) ) {
poseTransformationVO = new Gson ( ) . fromJson ( redisUtil . getFromString ( key ) , PoseTransformationVO . class ) ;
poseTransformationVO = new Gson ( ) . fromJson ( redisUtil . getFromString ( key ) , PoseTransformationVO . class ) ;
if ( poseTransformationVO . getStatus ( ) . equals ( " Success " ) & & ! type . equals ( " wx " ) ) {
if ( poseTransformationVO . getStatus ( ) . equals ( " Success " ) & & ! type . equals ( " wx " ) ) {
// 处理各种URL
// 处理各种URL
processUrl ( poseTransformationVO . getGifUrl ( ) , url - >
processUrl ( poseTransformationVO . getGifUrl ( ) , url - >
poseTransformationVO . setGifUrl ( minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ) ;
poseTransformationVO . setGifUrl ( minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ) ;
@@ -1261,32 +1260,36 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
poseTransformationVO . setFirstFrameUrl ( minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ) ;
poseTransformationVO . setFirstFrameUrl ( minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ) ;
}
}
poseTransformationVO . setResultType ( CollectionType . POSE_TRANSFORM . getValue ( ) ) ;
poseTransformationVO . setResultType ( CollectionType . POSE_TRANSFORM . getValue ( ) ) ;
} else if ( type . equals ( " wx " ) ) {
} else if ( type . equals ( " wx " ) ) {
poseTransformationVO = getAnimateResult ( taskId ) ;
poseTransformationVO = getAnimateResult ( taskId ) ;
} else {
} else {
poseTransformationVO = new PoseTransformationVO ( taskId , " Executing " ) ;
poseTransformationVO = new PoseTransformationVO ( taskId , " Executing " ) ;
}
}
ToProductImageResult productResultByPath = getProductResultByPath ( poseTransformation . getProductImage ( ) ) ;
if ( Objects . nonNull ( productResultByPath ) ) {
PoseTransformation poseTransformation = poseTransformationMapper . selectOne ( new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) ) ;
Long parentId = userLikeGroupService . getParentIdByElementIdAndElementType ( productResultByPath . getId ( ) , CollectionType . TO_PRODUCT_IMAGE . getValue ( ) ) ;
if ( Objects . nonNull ( poseTransformation ) ) {
poseTransformationVO . s etParentId ( parentId ) ;
ToProductImageResult productResultByPath = getProductResultByPath ( poseTransformation. g etProductImage ( ) ) ;
if ( Objects . nonNull ( productResultByPath ) ) {
Long parentId = userLikeGroupService . getParentIdByElementIdAndElementType ( productResultByPath . getId ( ) , CollectionType . TO_PRODUCT_IMAGE . getValue ( ) ) ;
poseTransformationVO . setParentId ( parentId ) ;
}
}
}
poseTransformationVOS . add ( poseTransformationVO ) ;
poseTransformationVOS . add ( poseTransformationVO ) ;
}
}
return poseTransformationVOS ;
return poseTransformationVOS ;
}
}
private ToProductImageResult getProductResultByPath ( String minioPath ) {
private ToProductImageResult getProductResultByPath ( String minioPath ) {
QueryWrapper < ToProductImageResult > qw = new QueryWrapper < > ( ) ;
QueryWrapper < ToProductImageResult > qw = new QueryWrapper < > ( ) ;
qw . lambda ( ) . eq ( ToProductImageResult : : getUrl , minioPath ) ;
qw . lambda ( ) . eq ( ToProductImageResult : : getUrl , minioPath ) ;
return toProductImageResultMapper . selectOne ( qw ) ;
return toProductImageResultMapper . selectOne ( qw ) ;
}
}
public List < PoseTransformationVO > getPoseTransformationResultList ( Long projectId , boolean like ) {
public List < PoseTransformationVO > getPoseTransformationResultList ( Long projectId , boolean like ) {
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( new QueryWrapper < PoseTransformation > ( ) . eq ( " project_id " , projectId ) . eq ( " is_liked " , like ? 1 : 0 ) ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( new QueryWrapper < PoseTransformation > ( ) . eq ( " project_id " , projectId ) . eq ( " is_liked " , like ? 1 : 0 ) ) ;
List < PoseTransformationVO > vos = new ArrayList < > ( ) ;
List < PoseTransformationVO > vos = new ArrayList < > ( ) ;
// if (poseTransformations != null && poseTransformations.size() > 1){
// if (poseTransformations != null && poseTransformations.size() > 1){
if ( ! CollectionUtils . isEmpty ( poseTransformations ) ) {
if ( ! CollectionUtils . isEmpty ( poseTransformations ) ) {
for ( PoseTransformation item : poseTransformations ) {
for ( PoseTransformation item : poseTransformations ) {
String taskId = item . getUniqueId ( ) ;
String taskId = item . getUniqueId ( ) ;
String key = generateResultKey + " : " + taskId ;
String key = generateResultKey + " : " + taskId ;
@@ -1322,7 +1325,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 处理Redis中没有缓存的情况
// 处理Redis中没有缓存的情况
poseTransformationVO = CopyUtil . copyObject ( item , PoseTransformationVO . class ) ;
poseTransformationVO = CopyUtil . copyObject ( item , PoseTransformationVO . class ) ;
// todo 面对没有生成成功的情况 如何处理?
// todo 面对没有生成成功的情况 如何处理?
if ( StringUtil . isNullOrEmpty ( item . getVideoUrl ( ) ) ) {
if ( StringUtil . isNullOrEmpty ( item . getVideoUrl ( ) ) ) {
continue ;
continue ;
}
}
poseTransformationVO . setTaskId ( taskId ) ;
poseTransformationVO . setTaskId ( taskId ) ;
@@ -1351,17 +1354,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
}
}
public CollectionSort disOrLikePose ( Long transformedId , String likeOrDislike , Long projectId , Long collectionSortParentId ) {
public CollectionSort disOrLikePose ( Long transformedId , String likeOrDislike , Long projectId , Long collectionSortParentId ) {
PoseTransformation poseTransformation = poseTransformationMapper . selectById ( transformedId ) ;
PoseTransformation poseTransformation = poseTransformationMapper . selectById ( transformedId ) ;
CollectionSort collectionSort = null ;
CollectionSort collectionSort = 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 ) ;
if ( null ! = collectionSortParentId ) {
if ( null ! = collectionSortParentId ) {
collectionSort = designService . addCollectionSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) , projectId , collectionSortParentId ) ;
collectionSort = designService . addCollectionSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) , projectId , collectionSortParentId ) ;
}
}
} else if ( likeOrDislike . equals ( " dislike " ) ) {
} else if ( likeOrDislike . equals ( " dislike " ) ) {
poseTransformation . setIsLiked ( ( byte ) 0 ) ;
poseTransformation . setIsLiked ( ( byte ) 0 ) ;
if ( null ! = collectionSortParentId ) {
if ( null ! = collectionSortParentId ) {
designService . deleteCollectionSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) , projectId , collectionSortParentId ) ;
designService . deleteCollectionSort ( poseTransformation . getId ( ) , CollectionType . POSE_TRANSFORM . getValue ( ) , projectId , collectionSortParentId ) ;
}
}
@@ -1379,8 +1382,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
private SysFileService sysFileService ;
private SysFileService sysFileService ;
@Resource
@Resource
private LibraryModelPointService libraryModelPointService ;
private LibraryModelPointService libraryModelPointService ;
public String modifyModelProportion ( ModifyModelProportionDTO proportionDTO ) {
public String modifyModelProportion ( ModifyModelProportionDTO proportionDTO ) {
log . info ( " modifyModelProportion params: {} " , proportionDTO ) ;
log . info ( " modifyModelProportion params: {} " , proportionDTO ) ;
String name ;
String name ;
String gender ;
String gender ;
@@ -1388,12 +1392,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
String uuid = UUID . randomUUID ( ) . toString ( ) ;
// 所有修改的图片都另存为,不覆盖原图
// 所有修改的图片都另存为,不覆盖原图
if ( proportionDTO . getType ( ) . equals ( " Library " ) ) {
if ( proportionDTO . getType ( ) . equals ( " Library " ) ) {
model = libraryService . getById ( proportionDTO . getId ( ) ) ;
model = libraryService . getById ( proportionDTO . getId ( ) ) ;
String url = model . getUrl ( ) ;
String url = model . getUrl ( ) ;
name = url . substring ( url . indexOf ( " / " ) + 1 , url . lastIndexOf ( " / " ) ) + " / " + uuid ;
name = url . substring ( url . indexOf ( " / " ) + 1 , url . lastIndexOf ( " / " ) ) + " / " + uuid ;
// gender = model.getLevel2Type();
// gender = model.getLevel2Type();
} else {
} else {
SysFileVO sysModel = sysFileService . getById ( proportionDTO . getId ( ) ) ;
SysFileVO sysModel = sysFileService . getById ( proportionDTO . getId ( ) ) ;
gender = sysModel . getLevel2Type ( ) ;
gender = sysModel . getLevel2Type ( ) ;
name = accountId + " /models/ " + gender . toLowerCase ( ) + " / " + uuid ;
name = accountId + " /models/ " + gender . toLowerCase ( ) + " / " + uuid ;
@@ -1434,10 +1438,11 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
* String collagePicture(Base64)
* String collagePicture(Base64)
* List<DTO(id, type)> elements
* List<DTO(id, type)> elements
* File file
* File file
*
* @return
* @return
*/
*/
@Transactional ( rollbackFor = Exception . class )
@Transactional ( rollbackFor = Exception . class )
public GenerateResultVO sketchReconstructionGenerate ( SketchReconstructionDTO sketchReconstructionDTO ) {
public GenerateResultVO sketchReconstructionGenerate ( SketchReconstructionDTO sketchReconstructionDTO ) {
// log.info("sketchReconstructionGenerate params: {}", sketchReconstructionDTO);
// log.info("sketchReconstructionGenerate params: {}", sketchReconstructionDTO);
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
Long accountId = UserContext . getUserHolder ( ) . getId ( ) ;
@@ -1462,7 +1467,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String targetPath = url . substring ( pathStartIndex + 1 , queryStartIndex ) ;
String targetPath = url . substring ( pathStartIndex + 1 , queryStartIndex ) ;
try {
try {
if ( Objects . isNull ( sketchReconstruction ) ) {
if ( Objects . isNull ( sketchReconstruction ) ) {
sketchReconstruction = new SketchReconstruction ( ) ;
sketchReconstruction = new SketchReconstruction ( ) ;
sketchReconstruction . setProjectId ( projectId ) ;
sketchReconstruction . setProjectId ( projectId ) ;
sketchReconstruction . setCollageImgSketchUrl ( targetPath ) ;
sketchReconstruction . setCollageImgSketchUrl ( targetPath ) ;
@@ -1470,7 +1475,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
sketchReconstruction . setGender ( sketchReconstructionDTO . getGender ( ) ) ;
sketchReconstruction . setGender ( sketchReconstructionDTO . getGender ( ) ) ;
sketchReconstruction . setCreateTime ( LocalDateTime . now ( ) ) ;
sketchReconstruction . setCreateTime ( LocalDateTime . now ( ) ) ;
sketchReconstructionMapper . insert ( sketchReconstruction ) ;
sketchReconstructionMapper . insert ( sketchReconstruction ) ;
} else {
} else {
sketchReconstruction . setCollageImgSketchUrl ( targetPath ) ;
sketchReconstruction . setCollageImgSketchUrl ( targetPath ) ;
sketchReconstruction . setGenerateDetailId ( generateResultVO . getId ( ) ) ;
sketchReconstruction . setGenerateDetailId ( generateResultVO . getId ( ) ) ;
sketchReconstructionMapper . updateById ( sketchReconstruction ) ;
sketchReconstructionMapper . updateById ( sketchReconstruction ) ;
@@ -1488,19 +1493,19 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return generateResultVO ;
return generateResultVO ;
}
}
public SketchReconstructionVO getSketchReconstruction ( Long projectId ) {
public SketchReconstructionVO getSketchReconstruction ( Long projectId ) {
QueryWrapper < SketchReconstruction > qw = new QueryWrapper < > ( ) ;
QueryWrapper < SketchReconstruction > qw = new QueryWrapper < > ( ) ;
qw . eq ( " project_id " , projectId ) ;
qw . eq ( " project_id " , projectId ) ;
SketchReconstruction sketchReconstruction = sketchReconstructionMapper . selectOne ( qw ) ;
SketchReconstruction sketchReconstruction = sketchReconstructionMapper . selectOne ( qw ) ;
if ( Objects . isNull ( sketchReconstruction ) ) {
if ( Objects . isNull ( sketchReconstruction ) ) {
return null ;
return null ;
}
}
SketchReconstructionVO vo = new SketchReconstructionVO ( ) ;
SketchReconstructionVO vo = new SketchReconstructionVO ( ) ;
if ( Objects . nonNull ( sketchReconstruction . getGenerateDetailId ( ) ) ) {
if ( Objects . nonNull ( sketchReconstruction . getGenerateDetailId ( ) ) ) {
GenerateDetail generateDetail = generateDetailMapper . selectById ( sketchReconstruction . getGenerateDetailId ( ) ) ;
GenerateDetail generateDetail = generateDetailMapper . selectById ( sketchReconstruction . getGenerateDetailId ( ) ) ;
vo . setCollageSketchUrl ( minioUtil . getPreSignedUrl ( generateDetail . getUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
vo . setCollageSketchUrl ( minioUtil . getPreSignedUrl ( generateDetail . getUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
vo . setLiked ( generateDetail . getIsLike ( ) . equals ( ( byte ) 1 ) ) ;
vo . setLiked ( generateDetail . getIsLike ( ) . equals ( ( byte ) 1 ) ) ;
String clothCategory = pythonService . getClothCategory ( generateDetail . getUrl ( ) , sketchReconstruction . getGender ( ) ) ;
String clothCategory = pythonService . getClothCategory ( generateDetail . getUrl ( ) , sketchReconstruction . getGender ( ) ) ;
String messageFromResource = BusinessException . getMessageFromResource ( clothCategory . toUpperCase ( ) ) ;
String messageFromResource = BusinessException . getMessageFromResource ( clothCategory . toUpperCase ( ) ) ;
vo . setCategory ( clothCategory ) ;
vo . setCategory ( clothCategory ) ;
@@ -1509,7 +1514,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return vo ;
return vo ;
}
}
public List < Map < String , String > > getAllPose ( ) {
public List < Map < String , String > > getAllPose ( ) {
List < Map < String , String > > propertyList = PoseEnum . getPropertyList ( ) ;
List < Map < String , String > > propertyList = PoseEnum . getPropertyList ( ) ;
propertyList . forEach ( item - > {
propertyList . forEach ( item - > {
item . put ( " gif " , minioUtil . getPreSignedUrl ( item . get ( " gif " ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
item . put ( " gif " , minioUtil . getPreSignedUrl ( item . get ( " gif " ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
@@ -1526,10 +1531,10 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
QueryWrapper < PoseTransformation > qw = new QueryWrapper < > ( ) ;
QueryWrapper < PoseTransformation > qw = new QueryWrapper < > ( ) ;
qw . eq ( " unique_id " , taskId ) ;
qw . eq ( " unique_id " , taskId ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( qw ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( qw ) ;
if ( poseTransformations ! = null & & poseTransformations . size ( ) > 1 ) {
if ( poseTransformations ! = null & & poseTransformations . size ( ) > 1 ) {
log . warn ( " 通过taskId {} 查询到的PoseTransformation的结果不止一条 " , taskId ) ;
log . warn ( " 通过taskId {} 查询到的PoseTransformation的结果不止一条 " , taskId ) ;
} else if ( poseTransformations = = null | | poseTransformations . isEmpty ( ) ) {
} else if ( poseTransformations = = null | | poseTransformations . isEmpty ( ) ) {
return ;
return ;
}
}
poseTransformation = poseTransformations . get ( 0 ) ;
poseTransformation = poseTransformations . get ( 0 ) ;
poseTransformation . setGifUrl ( gifUrl ) ;
poseTransformation . setGifUrl ( gifUrl ) ;
@@ -1580,6 +1585,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
/**
/**
* 创建异步任务
* 创建异步任务
*
* @return taskId
* @return taskId
*/
*/
public String createAsyncTask ( GenerateThroughImageTextDTO generateThroughImageTextDTO ) {
public String createAsyncTask ( GenerateThroughImageTextDTO generateThroughImageTextDTO ) {
@@ -1590,7 +1596,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String gender = generateThroughImageTextDTO . getGender ( ) ;
String gender = generateThroughImageTextDTO . getGender ( ) ;
// 添加预设prompt,使生成结果更加具有指向性( 区分不同的board)
// 添加预设prompt,使生成结果更加具有指向性( 区分不同的board)
switch ( level1Type ) {
switch ( level1Type ) {
case " Moodboard " :
case " Moodboard " :
break ;
break ;
case " Printboard " :
case " Printboard " :
@@ -1620,7 +1626,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
ImageSynthesisResult result = null ;
ImageSynthesisResult result = null ;
try {
try {
result = imageSynthesis . asyncCall ( param ) ;
result = imageSynthesis . asyncCall ( param ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
throw new RuntimeException ( e . getMessage ( ) ) ;
throw new RuntimeException ( e . getMessage ( ) ) ;
}
}
String taskId = result . getOutput ( ) . getTaskId ( ) ;
String taskId = result . getOutput ( ) . getTaskId ( ) ;
@@ -1633,8 +1639,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
/**
/**
* 获取异步任务结果
* 获取异步任务结果
*
* @param taskId 任务id
* @param taskId 任务id
* */
*/
public GenerateResultVO getAsyncTaskResult ( String taskId ) {
public GenerateResultVO getAsyncTaskResult ( String taskId ) {
ImageSynthesis imageSynthesis = new ImageSynthesis ( ) ;
ImageSynthesis imageSynthesis = new ImageSynthesis ( ) ;
ImageSynthesisResult result = null ;
ImageSynthesisResult result = null ;
@@ -1645,12 +1652,12 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
//PENDING: 任务排队中; RUNNING: 任务处理中; SUCCEEDED: 任务执行成功; FAILED: 任务执行失败; CANCELED: 任务取消成功; UNKNOWN: 任务不存在或状态未知
//PENDING: 任务排队中; RUNNING: 任务处理中; SUCCEEDED: 任务执行成功; FAILED: 任务执行失败; CANCELED: 任务取消成功; UNKNOWN: 任务不存在或状态未知
String taskStatus = result . getOutput ( ) . getTaskStatus ( ) ;
String taskStatus = result . getOutput ( ) . getTaskStatus ( ) ;
if ( taskStatus . equals ( " SUCCEEDED " ) ) {
if ( taskStatus . equals ( " SUCCEEDED " ) ) {
List < Generate > generates = selectListByUniqueId ( taskId ) ;
List < Generate > generates = selectListByUniqueId ( taskId ) ;
String url = result . getOutput ( ) . getResults ( ) . get ( 0 ) . get ( " url " ) ;
String url = result . getOutput ( ) . getResults ( ) . get ( 0 ) . get ( " url " ) ;
String path = null ;
String path = null ;
if ( ! generates . isEmpty ( ) ) {
if ( ! generates . isEmpty ( ) ) {
Generate generate = generates . get ( 0 ) ;
Generate generate = generates . get ( 0 ) ;
Long accountId = generate . getAccountId ( ) ;
Long accountId = generate . getAccountId ( ) ;
@@ -1665,7 +1672,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
GenerateDetail generateDetail = new GenerateDetail ( ) ;
GenerateDetail generateDetail = new GenerateDetail ( ) ;
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setUrl ( path ) ;
generateDetail . setUrl ( path ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( path , 24 * 60 ) , false ) ) ;
generateDetail . setMd5 ( MD5Utils . encryptFile ( minioUtil . getPreSignedUrl ( path , 24 * 60 ) , false ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetail . setCreateDate ( LocalDateTime . now ( ) ) ;
generateDetailMapper . insert ( generateDetail ) ;
generateDetailMapper . insert ( generateDetail ) ;
// 4、扣积分
// 4、扣积分
@@ -1673,30 +1680,30 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( generate . getAccountId ( ) ) , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( generate . getAccountId ( ) ) , taskId ) ;
GenerateResultVO generateResultVO = new GenerateResultVO ( taskId , generateDetail . getId ( ) , minioUtil . getPreSignedUrl ( path , 24 * 60 ) , " Success " ) ;
GenerateResultVO generateResultVO = new GenerateResultVO ( taskId , generateDetail . getId ( ) , minioUtil . getPreSignedUrl ( path , 24 * 60 ) , " Success " ) ;
if ( generate . getLevel1Type ( ) . equals ( SKETCH_BOARD . getRealName ( ) ) ) {
if ( generate . getLevel1Type ( ) . equals ( SKETCH_BOARD . getRealName ( ) ) ) {
String gender = extractGender ( generate . getGenerateType ( ) ) ;
String gender = extractGender ( generate . getGenerateType ( ) ) ;
if ( ! StringUtil . isNullOrEmpty ( gender ) ) {
if ( ! StringUtil . isNullOrEmpty ( gender ) ) {
String clothCategory = pythonService . getClothCategory ( path , gender ) ;
String clothCategory = pythonService . getClothCategory ( path , gender ) ;
generateResultVO . setCategory ( clothCategory ) ;
generateResultVO . setCategory ( clothCategory ) ;
} else {
} else {
log . warn ( " 未提取到性别 " ) ;
log . warn ( " 未提取到性别 " ) ;
}
}
}
}
return generateResultVO ;
return generateResultVO ;
} else {
} else {
throw new BusinessException ( " Unknown generate task " ) ;
throw new BusinessException ( " Unknown generate task " ) ;
}
}
} else if ( taskStatus . equals ( " PENDING " ) | | taskStatus . equals ( " RUNNING " ) ) {
} else if ( taskStatus . equals ( " PENDING " ) | | taskStatus . equals ( " RUNNING " ) ) {
log . info ( " 万象 异步接口返回生成状态为:{} " , taskStatus ) ;
log . info ( " 万象 异步接口返回生成状态为:{} " , taskStatus ) ;
return new GenerateResultVO ( taskId , null , null , " Executing " ) ;
return new GenerateResultVO ( taskId , null , null , " Executing " ) ;
} else {
} else {
log . warn ( " 万象 异步接口返回生成状态为:{} " , taskStatus ) ;
log . warn ( " 万象 异步接口返回生成状态为:{} " , taskStatus ) ;
return new GenerateResultVO ( taskId , null , null , " Fail " ) ;
return new GenerateResultVO ( taskId , null , null , " Fail " ) ;
}
}
} catch ( ApiException | NoApiKeyException e ) {
} catch ( ApiException | NoApiKeyException e ) {
throw new RuntimeException ( e . getMessage ( ) ) ;
throw new RuntimeException ( e . getMessage ( ) ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
log . error ( " 从aliyun下载图片失败, {} " , e . getMessage ( ) ) ;
log . error ( " 从aliyun下载图片失败, {} " , e . getMessage ( ) ) ;
throw new BusinessException ( " Generation result retrieval failed " ) ;
throw new BusinessException ( " Generation result retrieval failed " ) ;
}
}
@@ -1706,7 +1713,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
private static final String TEMPLATE_ID_GEN = " https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/aa-template-generation/ " ;
private static final String TEMPLATE_ID_GEN = " https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/aa-template-generation/ " ;
private static final String GET_ASYNC_RESULT = " https://dashscope.aliyuncs.com/api/v1/tasks/ " ;
private static final String GET_ASYNC_RESULT = " https://dashscope.aliyuncs.com/api/v1/tasks/ " ;
private static final String ANIMATE = " https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/ " ;
private static final String ANIMATE = " https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/ " ;
public String animateAnyone ( PoseTransformDTO poseTransformDTO , Long accountId ) {
public String animateAnyone ( PoseTransformDTO poseTransformDTO , Long accountId ) {
String inputImage = poseTransformDTO . getProductImage ( ) ;
String inputImage = poseTransformDTO . getProductImage ( ) ;
String inputImageUrl = minioUtil . getPreSignedUrl ( inputImage , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ;
String inputImageUrl = minioUtil . getPreSignedUrl ( inputImage , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ;
// 1、输入图片检测
// 1、输入图片检测
@@ -1714,7 +1722,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 2、动作模板生成
// 2、动作模板生成
String videoTemplateId = PoseEnum . getById ( poseTransformDTO . getPoseId ( ) ) . getTemplateId ( ) ;
String videoTemplateId = PoseEnum . getById ( poseTransformDTO . getPoseId ( ) ) . getTemplateId ( ) ;
if ( StringUtil . isNullOrEmpty ( videoTemplateId ) ) {
if ( StringUtil . isNullOrEmpty ( videoTemplateId ) ) {
throw new BusinessException ( " unknown pose " ) ;
throw new BusinessException ( " unknown pose " ) ;
}
}
// 3、生成动图
// 3、生成动图
@@ -1738,7 +1746,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
JSONObject jsonResponse = JSONUtil . parseObj ( resp ) ;
JSONObject jsonResponse = JSONUtil . parseObj ( resp ) ;
JSONObject output = jsonResponse . getJSONObject ( " output " ) ;
JSONObject output = jsonResponse . getJSONObject ( " output " ) ;
String status = output . getStr ( " task_status " ) ;
String status = output . getStr ( " task_status " ) ;
if ( status . equals ( STATUS_FAILED ) | | status . equals ( STATUS_UNKNOWN ) ) {
if ( status . equals ( STATUS_FAILED ) | | status . equals ( STATUS_UNKNOWN ) ) {
return null ;
return null ;
}
}
String taskId = output . getStr ( " task_id " ) ;
String taskId = output . getStr ( " task_id " ) ;
@@ -1750,7 +1758,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return taskId ;
return taskId ;
}
}
public void checkImage ( String inputImageUrl ) {
public void checkImage ( String inputImageUrl ) {
JSONObject requestBody = new JSONObject ( ) ;
JSONObject requestBody = new JSONObject ( ) ;
requestBody . set ( " model " , " animate-anyone-detect-gen2 " ) ;
requestBody . set ( " model " , " animate-anyone-detect-gen2 " ) ;
@@ -1769,7 +1777,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
JSONObject output = jsonResponse . getJSONObject ( " output " ) ;
JSONObject output = jsonResponse . getJSONObject ( " output " ) ;
Boolean checkPass = output . getBool ( " check_pass " ) ;
Boolean checkPass = output . getBool ( " check_pass " ) ;
if ( ! checkPass ) {
if ( ! checkPass ) {
String reason = output . getStr ( " reason " ) ;
String reason = output . getStr ( " reason " ) ;
log . info ( " 原因: {} " , reason ) ;
log . info ( " 原因: {} " , reason ) ;
throw new BusinessException ( " 输入的图片不满足要求 " ) ;
throw new BusinessException ( " 输入的图片不满足要求 " ) ;
@@ -1780,11 +1788,11 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
private static final int MAX_RETRIES = 30 ; // 最大重试次数
private static final int MAX_RETRIES = 30 ; // 最大重试次数
private static final int POLL_INTERVAL = 20000 ; // 轮询间隔(毫秒)
private static final int POLL_INTERVAL = 20000 ; // 轮询间隔(毫秒)
public String getVideoTemplateId ( String videoPath ) {
public String getVideoTemplateId ( String videoPath ) {
boolean contains = PoseEnum . getVideoList ( ) . contains ( videoPath ) ;
boolean contains = PoseEnum . getVideoList ( ) . contains ( videoPath ) ;
String templateId ;
String templateId ;
if ( ! contains ) {
if ( ! contains ) {
String videoUrl = minioUtil . getPreSignedUrl ( videoPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ;
String videoUrl = minioUtil . getPreSignedUrl ( videoPath , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ;
JSONObject requestBody = new JSONObject ( ) ;
JSONObject requestBody = new JSONObject ( ) ;
requestBody . set ( " model " , " animate-anyone-template-gen2 " ) ;
requestBody . set ( " model " , " animate-anyone-template-gen2 " ) ;
@@ -1796,7 +1804,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
log . info ( " 获取pose的模板id 请求数据:{} " , requestBody ) ;
log . info ( " 获取pose的模板id 请求数据:{} " , requestBody ) ;
String resp = sendRequestUtil . sendAliYunPostAsync ( TEMPLATE_ID_GEN , requestBody . toString ( ) ) ;
String resp = sendRequestUtil . sendAliYunPostAsync ( TEMPLATE_ID_GEN , requestBody . toString ( ) ) ;
if ( StringUtil . isNullOrEmpty ( resp ) ) {
if ( StringUtil . isNullOrEmpty ( resp ) ) {
throw new BusinessException ( " 请求获取video template id失败 " ) ;
throw new BusinessException ( " 请求获取video template id失败 " ) ;
}
}
JSONObject jsonResponse = JSONUtil . parseObj ( resp ) ;
JSONObject jsonResponse = JSONUtil . parseObj ( resp ) ;
@@ -1806,7 +1814,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 暂时用while循环轮询
// 暂时用while循环轮询
templateId = pollTemplateIdResult ( taskId ) ;
templateId = pollTemplateIdResult ( taskId ) ;
if ( StringUtil . isNullOrEmpty ( templateId ) ) {
if ( StringUtil . isNullOrEmpty ( templateId ) ) {
throw new BusinessException ( " 获取动作模板失败 " ) ;
throw new BusinessException ( " 获取动作模板失败 " ) ;
}
}
// templateId = "AACT.8090e67b.-E3pujumEfCbDTI_rjSH-A.LwIlGT3j";
// templateId = "AACT.8090e67b.-E3pujumEfCbDTI_rjSH-A.LwIlGT3j";
@@ -1895,7 +1903,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
if ( output ! = null ) {
if ( output ! = null ) {
log . info ( " 任务输出: {} " , output . toStringPretty ( ) ) ;
log . info ( " 任务输出: {} " , output . toStringPretty ( ) ) ;
return output . getStr ( " template_id " ) ;
return output . getStr ( " template_id " ) ;
} else {
} else {
return null ;
return null ;
}
}
}
}
@@ -1908,7 +1916,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
}
public PoseTransformationVO getAnimateResult ( String taskId ) {
public PoseTransformationVO getAnimateResult ( String taskId ) {
String fullUrl = GET_ASYNC_RESULT + taskId ;
String fullUrl = GET_ASYNC_RESULT + taskId ;
String respBody = sendRequestUtil . sendAliYunGet ( fullUrl ) ;
String respBody = sendRequestUtil . sendAliYunGet ( fullUrl ) ;
log . info ( " 获取wx pose transform 的结果: {} " , respBody ) ;
log . info ( " 获取wx pose transform 的结果: {} " , respBody ) ;
@@ -1923,24 +1931,28 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
case STATUS_SUCCESS :
case STATUS_SUCCESS :
poseTransformationVO . setStatus ( " Success " ) ;
poseTransformationVO . setStatus ( " Success " ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) . orderByDesc ( " id " ) ) ;
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList ( new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) . orderByDesc ( " id " ) ) ;
if ( ! poseTransformations . isEmpty ( ) ) {
if ( ! poseTransformations . isEmpty ( ) ) {
PoseTransformation poseTransformation = poseTransformations . get ( 0 ) ;
PoseTransformation poseTransformation = poseTransformations . get ( 0 ) ;
// 生成视频的gif和第一帧图片
// 生成视频的gif和第一帧图片
processVideo ( videoUrl , poseTransformation ) ;
processVideo ( videoUrl , poseTransformation ) ;
poseTransformationVO . setId ( poseTransformation . getId ( ) ) ;
poseTransformationVO . setId ( poseTransformation . getId ( ) ) ;
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getGifUrl ( ) ) ) {
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getGifUrl ( ) ) ) {
poseTransformationVO . setGifUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getGifUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
poseTransformationVO . setGifUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getGifUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
}
}
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getVideoUrl ( ) ) ) {
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getVideoUrl ( ) ) ) {
poseTransformationVO . setVideoUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getVideoUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
poseTransformationVO . setVideoUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getVideoUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
}
}
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getFirstFrameUrl ( ) ) ) {
if ( ! StringUtil . isNullOrEmpty ( poseTransformation . getFirstFrameUrl ( ) ) ) {
poseTransformationVO . setFirstFrameUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getFirstFrameUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
poseTransformationVO . setFirstFrameUrl ( minioUtil . getPreSignedUrl ( poseTransformation . getFirstFrameUrl ( ) , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) ) ;
}
}
// 执行积分扣除
// 执行积分扣除
Long accountId = poseTransformation . getAccountId ( ) ;
Long accountId = poseTransformation . getAccountId ( ) ;
Boolean flag = creditsService . taskCreditsDeduction ( accountId , taskId ) ;
Boolean flag = creditsService . taskCreditsDeduction ( accountId , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( accountId ) , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( accountId ) , taskId ) ;
// 保存数据到redis
String key = generateResultKey + " : " + taskId ;
redisUtil . addToString ( key , new Gson ( ) . toJson ( poseTransformationVO ) , CommonConstant . GENERATE_RESULT_EXPIRE_TIME ) ;
}
}
break ;
break ;
case STATUS_FAILED :
case STATUS_FAILED :
@@ -1958,9 +1970,6 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
poseTransformationVO . setStatus ( " Fail " ) ;
poseTransformationVO . setStatus ( " Fail " ) ;
}
}
poseTransformationVO . setTaskId ( taskId ) ;
poseTransformationVO . setTaskId ( taskId ) ;
// 保存数据到redis
String key = generateResultKey + " : " + taskId ;
redisUtil . addToString ( key , new Gson ( ) . toJson ( poseTransformationVO ) , CommonConstant . GENERATE_RESULT_EXPIRE_TIME ) ;
return poseTransformationVO ;
return poseTransformationVO ;
}
}
@@ -2079,11 +2088,11 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
requestBody . set ( " imagination " , style ) ;
requestBody . set ( " imagination " , style ) ;
String resp = sendRequestUtil . sendFreepikPost ( requestBody . toString ( ) ) ;
String resp = sendRequestUtil . sendFreepikPost ( requestBody . toString ( ) ) ;
if ( ! StringUtil . isNullOrEmpty ( resp ) ) {
if ( ! StringUtil . isNullOrEmpty ( resp ) ) {
JSONObject jsonResp = JSONUtil . parseObj ( resp ) ;
JSONObject jsonResp = JSONUtil . parseObj ( resp ) ;
JSONObject data = JSONUtil . parseObj ( jsonResp . get ( " data " ) ) ;
JSONObject data = JSONUtil . parseObj ( jsonResp . get ( " data " ) ) ;
String status = data . getStr ( " status " ) ;
String status = data . getStr ( " status " ) ;
if ( status . equals ( " COMPLETED " ) ) {
if ( status . equals ( " COMPLETED " ) ) {
// List<String> generated = data.getBeanList("generated", String.class);
// List<String> generated = data.getBeanList("generated", String.class);
log . info ( " freepik 调用结果:{} " , jsonResp ) ;
log . info ( " freepik 调用结果:{} " , jsonResp ) ;
return jsonResp . getStr ( " data " ) ;
return jsonResp . getStr ( " data " ) ;
@@ -2122,7 +2131,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
requestBody . set ( " img " , imagePath ) ;
requestBody . set ( " img " , imagePath ) ;
// String description = sendRequestUtil.sendPost("http://localhost:8000/api/img2prompt", requestBody.toString());
// String description = sendRequestUtil.sendPost("http://localhost:8000/api/img2prompt", requestBody.toString());
String description = sendRequestUtil . sendPost ( " http://18.167.251.121:9994/api/img2prompt " , requestBody . toString ( ) ) ;
String description = sendRequestUtil . sendPost ( " http://18.167.251.121:9994/api/img2prompt " , requestBody . toString ( ) ) ;
if ( StringUtil . isNullOrEmpty ( description ) ) {
if ( StringUtil . isNullOrEmpty ( description ) ) {
throw new BusinessException ( " 从ollama获取图片描述失败 " ) ;
throw new BusinessException ( " 从ollama获取图片描述失败 " ) ;
}
}
/*Object msg = JSONUtil.parseObj(resp).get("message");
/*Object msg = JSONUtil.parseObj(resp).get("message");
@@ -2132,17 +2141,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return description ;
return description ;
}
}
private String resolveModelType ( String taskId , String func ) {
private String resolveModelType ( String taskId , String func ) {
// 判断当前task来自哪个模型
// 判断当前task来自哪个模型
if ( ! StringUtil . isNullOrEmpty ( func )
if ( ! StringUtil . isNullOrEmpty ( func )
& & func . equals ( CreditsEventsEnum . POSE_TRANSFORMATION . getValue ( ) ) ) {
& & func . equals ( CreditsEventsEnum . POSE_TRANSFORMATION . getValue ( ) ) ) {
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList (
List < PoseTransformation > poseTransformations = poseTransformationMapper . selectList (
new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) ) ;
new QueryWrapper < PoseTransformation > ( ) . eq ( " unique_id " , taskId ) ) ;
if ( ! poseTransformations . isEmpty ( )
if ( ! poseTransformations . isEmpty ( )
& & ! StringUtil . isNullOrEmpty ( poseTransformations . get ( 0 ) . getModelName ( ) )
& & ! StringUtil . isNullOrEmpty ( poseTransformations . get ( 0 ) . getModelName ( ) )
& & poseTransformations . get ( 0 ) . getModelName ( ) . equals ( " wx " ) ) {
& & poseTransformations . get ( 0 ) . getModelName ( ) . equals ( " wx " ) ) {
return " wx " ;
return " wx " ;
} else {
} else {
return " local " ;
return " local " ;
}
}
}
}
@@ -2152,9 +2161,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
! StringUtil . isNullOrEmpty ( generate . getModelName ( ) ) & &
! StringUtil . isNullOrEmpty ( generate . getModelName ( ) ) & &
( generate . getModelName ( ) . equals ( " wx " )
( generate . getModelName ( ) . equals ( " wx " )
| | generate . getModelName ( ) . equals ( " freepik " )
| | generate . getModelName ( ) . equals ( " freepik " )
| | generate . getModelName ( ) . equals ( " flux " ) ) ) {
| | generate . getModelName ( ) . equals ( " flux " ) ) ) {
return generate . getModelName ( ) ;
return generate . getModelName ( ) ;
} else {
} else {
return " local " ;
return " local " ;
}
}
}
}
@@ -2172,15 +2181,16 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
/**
/**
* 接入flux模型, 用于imageToSketch(sketch extract) || relighting || to product image
* 接入flux模型, 用于imageToSketch(sketch extract) || relighting || to product image
* @param func 功能枚举名
*
* @param prompt 用户输入
* @param func 功能枚举名
* @param prompt 用户输入
* @param imagePath 图片minio路径
* @param imagePath 图片minio路径
* @return 返回taskId, 用于异步获取结果
* @return 返回taskId, 用于异步获取结果
*/
*/
public String flux ( CreditsEventsEnum func , String prompt , String imagePath , boolean childStyle ) {
public String flux ( CreditsEventsEnum func , String prompt , String imagePath , boolean childStyle ) {
String fluxRequestUrl = " https://api.bfl.ai/v1/flux-kontext-pro " ;
String fluxRequestUrl = " https://api.bfl.ai/v1/flux-kontext-pro " ;
if ( StringUtil . isNullOrEmpty ( prompt ) ) {
if ( StringUtil . isNullOrEmpty ( prompt ) ) {
switch ( func ) {
switch ( func ) {
case RELIGHT_FLUX :
case RELIGHT_FLUX :
prompt = " a model standing on the beautiful beach, ultra high quality, 8k " ;
prompt = " a model standing on the beautiful beach, ultra high quality, 8k " ;
break ;
break ;
@@ -2201,13 +2211,13 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
requestBody . set ( " output_format " , " png " ) ;
requestBody . set ( " output_format " , " png " ) ;
log . info ( " flux 请求入参:{} " , requestBody ) ;
log . info ( " flux 请求入参:{} " , requestBody ) ;
if ( ! StringUtil . isNullOrEmpty ( imagePath ) ) {
if ( ! StringUtil . isNullOrEmpty ( imagePath ) ) {
try {
try {
String imageAsBase64 = null ;
String imageAsBase64 = null ;
if ( func . equals ( TO_PRODUCT_IMAGE_FLUX ) ) {
if ( func . equals ( TO_PRODUCT_IMAGE_FLUX ) ) {
imageAsBase64 = addWhiteBackground ( imagePath ) ;
imageAsBase64 = addWhiteBackground ( imagePath ) ;
}
}
if ( StringUtil . isNullOrEmpty ( imageAsBase64 ) ) {
if ( StringUtil . isNullOrEmpty ( imageAsBase64 ) ) {
imageAsBase64 = minioUtil . getImageAsBase64 ( imagePath ) ;
imageAsBase64 = minioUtil . getImageAsBase64 ( imagePath ) ;
}
}
requestBody . set ( " input_image " , imageAsBase64 ) ;
requestBody . set ( " input_image " , imageAsBase64 ) ;
@@ -2222,7 +2232,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
JSONObject respObj = JSONUtil . parseObj ( resp ) ;
JSONObject respObj = JSONUtil . parseObj ( resp ) ;
log . info ( " flux 发起生成请求返回结果: {} " , respObj ) ;
log . info ( " flux 发起生成请求返回结果: {} " , respObj ) ;
String taskId = respObj . getStr ( " id " ) ;
String taskId = respObj . getStr ( " id " ) ;
if ( StringUtil . isNullOrEmpty ( taskId ) ) {
if ( StringUtil . isNullOrEmpty ( taskId ) ) {
return null ;
return null ;
}
}
@@ -2233,11 +2243,11 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return taskId ;
return taskId ;
}
}
public String getFluxResult ( String taskId , String objectName ) {
public String getFluxResult ( String taskId , String objectName ) {
String pollingUrl = redisUtil . getFromString ( RedisUtil . FLUX_POLLING_URL + taskId ) ;
String pollingUrl = redisUtil . getFromString ( RedisUtil . FLUX_POLLING_URL + taskId ) ;
String fluxResultRequestUrl ;
String fluxResultRequestUrl ;
HashMap < String , Object > params = new HashMap < > ( ) ;
HashMap < String , Object > params = new HashMap < > ( ) ;
if ( StringUtil . isNullOrEmpty ( pollingUrl ) ) {
if ( StringUtil . isNullOrEmpty ( pollingUrl ) ) {
fluxResultRequestUrl = " https://api.bfl.ai/v1/get_result " ;
fluxResultRequestUrl = " https://api.bfl.ai/v1/get_result " ;
params . put ( " id " , taskId ) ;
params . put ( " id " , taskId ) ;
} else {
} else {
@@ -2248,7 +2258,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
log . info ( " 获取flux生成的结果为: {} " , resp ) ;
log . info ( " 获取flux生成的结果为: {} " , resp ) ;
JSONObject respObj = JSONUtil . parseObj ( resp ) ;
JSONObject respObj = JSONUtil . parseObj ( resp ) ;
String status = respObj . getStr ( " status " ) ;
String status = respObj . getStr ( " status " ) ;
switch ( status ) {
switch ( status ) {
case " Task not found " :
case " Task not found " :
return " Fail " ;
return " Fail " ;
case " Pending " :
case " Pending " :
@@ -2271,17 +2281,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return null ;
return null ;
}
}
private GenerateResultVO getFluxResultAndSave ( String taskId ) {
private GenerateResultVO getFluxResultAndSave ( String taskId ) {
Generate generate = selectByUniqueId ( taskId ) ;
Generate generate = selectByUniqueId ( taskId ) ;
if ( Objects . nonNull ( generate ) ) {
if ( Objects . nonNull ( generate ) ) {
GenerateDetail generateDetail = generateDetailMapper . selectOne ( new QueryWrapper < GenerateDetail > ( ) . eq ( " generate_id " , generate . getId ( ) ) ) ;
GenerateDetail generateDetail = generateDetailMapper . selectOne ( new QueryWrapper < GenerateDetail > ( ) . eq ( " generate_id " , generate . getId ( ) ) ) ;
Long accountId = generate . getAccountId ( ) ;
Long accountId = generate . getAccountId ( ) ;
String objectName = accountId + " /imageToSketch/ " + taskId + " .png " ;
String objectName = accountId + " /imageToSketch/ " + taskId + " .png " ;
String fluxResult = getFluxResult ( taskId , objectName ) ;
String fluxResult = getFluxResult ( taskId , objectName ) ;
if ( Objects . isNull ( generateDetail ) ) {
if ( Objects . isNull ( generateDetail ) ) {
if ( StringUtil . isNullOrEmpty ( fluxResult ) ) {
if ( StringUtil . isNullOrEmpty ( fluxResult ) ) {
return new GenerateResultVO ( taskId , " Fail " ) ;
return new GenerateResultVO ( taskId , " Fail " ) ;
} else if ( fluxResult . equals ( " Fail " ) | | fluxResult . equals ( " Pending " ) ) {
} else if ( fluxResult . equals ( " Fail " ) | | fluxResult . equals ( " Pending " ) ) {
String status = fluxResult . equals ( " Fail " ) ? " Fail " : " Executing " ;
String status = fluxResult . equals ( " Fail " ) ? " Fail " : " Executing " ;
return new GenerateResultVO ( taskId , status ) ;
return new GenerateResultVO ( taskId , status ) ;
}
}
@@ -2293,7 +2303,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 扣积分
// 扣积分
Boolean flag = creditsService . taskCreditsDeduction ( accountId , taskId ) ;
Boolean flag = creditsService . taskCreditsDeduction ( accountId , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( accountId ) , taskId ) ;
if ( flag ) creditsService . updateChangedCredits ( String . valueOf ( accountId ) , taskId ) ;
} else if ( StringUtil . isNullOrEmpty ( generateDetail . getUrl ( ) ) ) {
} else if ( StringUtil . isNullOrEmpty ( generateDetail . getUrl ( ) ) ) {
// 一般来说这条线应该走不到
// 一般来说这条线应该走不到
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setGenerateId ( generate . getId ( ) ) ;
generateDetail . setUrl ( fluxResult ) ;
generateDetail . setUrl ( fluxResult ) ;
@@ -2306,19 +2316,19 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String clothCategory = pythonService . getClothCategory ( url , extractGender ( generate . getGenerateType ( ) ) ) ;
String clothCategory = pythonService . getClothCategory ( url , extractGender ( generate . getGenerateType ( ) ) ) ;
return new GenerateResultVO ( taskId , generateDetail . getId ( ) ,
return new GenerateResultVO ( taskId , generateDetail . getId ( ) ,
minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) , " Success " , clothCategory ) ;
minioUtil . getPreSignedUrl ( url , CommonConstant . MINIO_IMAGE_EXPIRE_TIME ) , " Success " , clothCategory ) ;
} else {
} else {
throw new BusinessException ( " unknown generate " ) ;
throw new BusinessException ( " unknown generate " ) ;
}
}
}
}
private String addWhiteBackground ( String minioPath ) {
private String addWhiteBackground ( String minioPath ) {
// 1、先通过后缀判断输入图片类型有没有透明通道
// 1、先通过后缀判断输入图片类型有没有透明通道
String extension = minioPath . substring ( minioPath . lastIndexOf ( " . " ) + 1 ) ;
String extension = minioPath . substring ( minioPath . lastIndexOf ( " . " ) + 1 ) ;
// 2、如果有, 为其添加白色背景
// 2、如果有, 为其添加白色背景
if ( extension . equals ( " png " ) ) {
if ( extension . equals ( " png " ) ) {
return minioUtil . changeToWhiteBackground ( minioPath ) ;
return minioUtil . changeToWhiteBackground ( minioPath ) ;
} else {
} else {
log . info ( " 图片 {} 没有透明通道, 不用添加白底 " , minioPath ) ;
log . info ( " 图片 {} 没有透明通道, 不用添加白底 " , minioPath ) ;
return null ;
return null ;
}
}