|
|
|
@ -4,18 +4,22 @@ import cn.hutool.core.util.IdUtil; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.bnyer.common.core.constant.RedisKeyConstant; |
|
|
|
import com.bnyer.common.core.constant.TiktokConstant; |
|
|
|
import com.bnyer.common.core.domain.AiPaint; |
|
|
|
import com.bnyer.common.core.domain.FhUser; |
|
|
|
import com.bnyer.common.core.domain.TiktokUser; |
|
|
|
import com.bnyer.common.core.domain.WxUser; |
|
|
|
import com.bnyer.common.core.dto.TextToImgDto; |
|
|
|
import com.bnyer.common.core.dto.TextToImgLoveDto; |
|
|
|
import com.bnyer.common.core.enums.EnumUserClientType; |
|
|
|
import com.bnyer.common.core.exception.ServiceException; |
|
|
|
import com.bnyer.common.core.utils.StringUtils; |
|
|
|
import com.bnyer.common.core.utils.TranslateUtils; |
|
|
|
import com.bnyer.common.core.utils.file.Base64ToMultipartFileUtils; |
|
|
|
import com.bnyer.common.core.vo.TextToImgVo; |
|
|
|
import com.bnyer.common.core.vo.UserInfoVo; |
|
|
|
import com.bnyer.common.redis.service.RedisService; |
|
|
|
import com.bnyer.common.security.utils.SecurityUtils; |
|
|
|
import com.bnyer.file.api.RemoteFileService; |
|
|
|
import com.bnyer.img.config.StableDiffusionConfig; |
|
|
|
import com.bnyer.img.config.TencentTranslateConfig; |
|
|
|
@ -101,6 +105,44 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
|
|
|
|
@Override |
|
|
|
public TextToImgVo textToImg(TextToImgDto param) { |
|
|
|
//消耗画意值
|
|
|
|
switch (param.getPlatform()){ |
|
|
|
case "1": |
|
|
|
//查询抖音用户信息
|
|
|
|
TiktokUser tiktokUser = tiktokUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > tiktokUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
tiktokUser.setGoldNum(tiktokUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
tiktokUserService.updateTiktokUser(tiktokUser); |
|
|
|
break; |
|
|
|
case "2": |
|
|
|
//查询快手用户信息
|
|
|
|
FhUser fhUser = fhUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > fhUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
fhUser.setGoldNum(fhUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
fhUserService.updateFhUser(fhUser); |
|
|
|
break; |
|
|
|
case "3": |
|
|
|
//查询微信用户信息
|
|
|
|
WxUser wxUser = wxUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > wxUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
wxUser.setGoldNum(wxUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
wxUserService.updateWxUser(wxUser); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new ServiceException("用户类型错误!", TiktokConstant.USER_TYPE_ERROR); |
|
|
|
} |
|
|
|
//配置控制采用sd还是tx文生图
|
|
|
|
int button = redisService.getCacheObject(RedisKeyConstant.AI_PAINT_BUTTON); |
|
|
|
if(button == AiPaintButtonEnum.TX.getCode()){ |
|
|
|
@ -165,7 +207,7 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
paint.setPaintId(paintId); |
|
|
|
paint.setCreateTime(paintTime); |
|
|
|
paint.setImgUrl(imgStr); |
|
|
|
paint.setPrompt(resultPrompt); |
|
|
|
paint.setPrompt(contentPrompt); //只存储用户输入的内容
|
|
|
|
paint.setNegativePrompt(negaPrompt); |
|
|
|
paint.setModel(param.getModelName()); |
|
|
|
paint.setStyleName(param.getStyleName()); |
|
|
|
@ -230,7 +272,7 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
Double cfgScale = param.getCfgScale() == null ? 7 : param.getCfgScale(); |
|
|
|
Integer steps = param.getSteps() == null ? 25 : param.getSteps(); |
|
|
|
String samplerIndex = StringUtils.isEmpty(param.getSamplerIndex()) ? "DPM++ 2S a Karras" : param.getSamplerIndex(); |
|
|
|
map.put("prompt", resultPrompt); |
|
|
|
map.put("prompt", contentPrompt); //只存储用户输入的内容
|
|
|
|
map.put("restore_faces",false); //面部修复,卡通模型不支持,只适合真人模型
|
|
|
|
map.put("tiling",false); //生成可平铺的周期性图片
|
|
|
|
map.put("eta",eta); //取值为0-1
|
|
|
|
@ -297,6 +339,44 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<String> textToImgLove(TextToImgLoveDto param) { |
|
|
|
//消耗画意值
|
|
|
|
switch (param.getPlatform()){ |
|
|
|
case "1": |
|
|
|
//查询抖音用户信息
|
|
|
|
TiktokUser tiktokUser = tiktokUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > tiktokUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
tiktokUser.setGoldNum(tiktokUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
tiktokUserService.updateTiktokUser(tiktokUser); |
|
|
|
break; |
|
|
|
case "2": |
|
|
|
//查询快手用户信息
|
|
|
|
FhUser fhUser = fhUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > fhUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
fhUser.setGoldNum(fhUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
fhUserService.updateFhUser(fhUser); |
|
|
|
break; |
|
|
|
case "3": |
|
|
|
//查询微信用户信息
|
|
|
|
WxUser wxUser = wxUserService.getUserById(param.getPainterId()); |
|
|
|
//检查画意值是否足够,不足则直接提示不足请充值或完成相应任务
|
|
|
|
if (param.getGoldNum() > wxUser.getGoldNum()) { |
|
|
|
throw new ServiceException("画意值不足!请充值或完成相应任务获取", TiktokConstant.GOLD_NUM_IS_NOT_ENOUGH); |
|
|
|
} |
|
|
|
wxUser.setGoldNum(wxUser.getGoldNum() - param.getGoldNum()); |
|
|
|
//更新用户信息
|
|
|
|
wxUserService.updateWxUser(wxUser); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new ServiceException("用户类型错误!", TiktokConstant.USER_TYPE_ERROR); |
|
|
|
} |
|
|
|
//描述词处理
|
|
|
|
//内容提示词
|
|
|
|
String contentPrompt = param.getPrompt(); |
|
|
|
@ -317,9 +397,9 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
String boyHeadStr = "1个男孩" + activePrompt + resultPrompt; |
|
|
|
//女头提示词
|
|
|
|
String girlHeadStr = "1个女孩" + activePrompt + resultPrompt; |
|
|
|
String boyHead = getCoupleHead(boyHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button); |
|
|
|
String boyHead = getCoupleHead(boyHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button,contentPrompt); |
|
|
|
log.info("腾讯男头像提示词为:【{}】",girlHeadStr); |
|
|
|
String girlHead = getCoupleHead(girlHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button); |
|
|
|
String girlHead = getCoupleHead(girlHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button,contentPrompt); |
|
|
|
log.info("腾讯女头像提示词为:【{}】",girlHeadStr); |
|
|
|
List<String> imgList = new ArrayList<>(); |
|
|
|
imgList.add(boyHead); |
|
|
|
@ -343,9 +423,9 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
//女头提示词
|
|
|
|
String girlHeadStr = "(1girl)" + activePrompt + prompt; |
|
|
|
|
|
|
|
String boyHead = getCoupleHead(boyHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button); |
|
|
|
String boyHead = getCoupleHead(boyHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button,contentPrompt); |
|
|
|
log.info("sd男头像提示词为:【{}】",boyHeadStr); |
|
|
|
String girlHead = getCoupleHead(girlHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button); |
|
|
|
String girlHead = getCoupleHead(girlHeadStr,negaPrompt,param.getPlatform(), param.getPainterId(), param.getPainterName(), param.getStyleName(),button,contentPrompt); |
|
|
|
log.info("sd女头像提示词为:【{}】",girlHeadStr); |
|
|
|
List<String> imgList = new ArrayList<>(); |
|
|
|
imgList.add(boyHead); |
|
|
|
@ -367,9 +447,10 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
* @param painterId 绘图者id |
|
|
|
* @param painterName 绘图者名称 |
|
|
|
* @param styleName 风格名称 |
|
|
|
* @param protoHead 原用户输入的描述词 |
|
|
|
* @return - |
|
|
|
*/ |
|
|
|
private String getCoupleHead(String headStr,String negaPrompt,String platform,Long painterId,String painterName,String styleName,int button){ |
|
|
|
private String getCoupleHead(String headStr,String negaPrompt,String platform,Long painterId,String painterName,String styleName,int button,String protoHead){ |
|
|
|
|
|
|
|
if(button == AiPaintButtonEnum.TX.getCode()){ |
|
|
|
//采用腾讯文生图
|
|
|
|
@ -419,7 +500,7 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
paint.setPaintId(paintId); |
|
|
|
paint.setCreateTime(paintTime); |
|
|
|
paint.setImgUrl(imgStr); |
|
|
|
paint.setPrompt(headStr); |
|
|
|
paint.setPrompt(protoHead); |
|
|
|
paint.setNegativePrompt(negaPrompt); |
|
|
|
paint.setModel("腾讯情侣头像"); |
|
|
|
paint.setStyleName(styleName); |
|
|
|
@ -430,6 +511,7 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
paint.setPainterId(painterId); |
|
|
|
paint.setPainterName(painterName); |
|
|
|
aiPaintService.insert(paint); |
|
|
|
|
|
|
|
return image; |
|
|
|
} |
|
|
|
} catch (TencentCloudSDKException e) { |
|
|
|
@ -479,7 +561,7 @@ public class StableDiffusionServiceImpl implements StableDiffusionService { |
|
|
|
paint.setPaintId(paintId); |
|
|
|
paint.setCreateTime(paintTime); |
|
|
|
paint.setImgUrl(imgStr); |
|
|
|
paint.setPrompt(headStr); |
|
|
|
paint.setPrompt(protoHead); |
|
|
|
paint.setNegativePrompt(negaPrompt); |
|
|
|
paint.setEta(eta); |
|
|
|
paint.setBatchSize(batchSize); |
|
|
|
|