|
|
@@ -30,6 +30,7 @@ import com.yhlxj.dao.model.response.SubmitResult;
|
|
|
import com.yhlxj.dao.model.views.MidjourneyPaintingUserView;
|
|
|
import com.yhlxj.dao.model.views.MidjourneyUserPaintingDayRecordView;
|
|
|
import com.yhlxj.dao.model.views.MidjourneyUserPaintingRecordView;
|
|
|
+import com.yhlxj.dao.model.views.MidjourneyUserQueueView;
|
|
|
import com.yhlxj.redis.RedisService;
|
|
|
import com.yhlxj.service.midjourney.MidjourneyService;
|
|
|
import com.yhlxj.service.midjourney.MidjourneyUserSettingsService;
|
|
|
@@ -110,8 +111,9 @@ public class MidjourneyController {
|
|
|
/**
|
|
|
* 检查用户次数
|
|
|
*/
|
|
|
- public Long checkUserLimit(MidjourneyUser user,Integer mode){
|
|
|
+ public Map<String,Object> checkUserLimit(MidjourneyUser user,Integer mode){
|
|
|
Long num = 0L;
|
|
|
+ boolean upgrade = false;
|
|
|
if (user.getExpireTime().before(new Date())){
|
|
|
throw BusinessRuntimeException.getInstance("账号已过期");
|
|
|
}
|
|
|
@@ -121,6 +123,18 @@ public class MidjourneyController {
|
|
|
|
|
|
if (num < 0) {
|
|
|
redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + user.getId(), 1L);
|
|
|
+ //快速没有次数,扣除加量包次数
|
|
|
+ num = redisService.decr(RedisService.key.MIDJOURNEY_UPGRADE_LIMIT.getName() + user.getId(), 1L);
|
|
|
+ if (num < 0) {
|
|
|
+ redisService.incr(RedisService.key.MIDJOURNEY_UPGRADE_LIMIT.getName() + user.getId(), 1L);
|
|
|
+ }else {
|
|
|
+ upgrade = true;
|
|
|
+ int i = midjourneyUserMapper.decUpgradeNum(user.getId(), 1, user.getMjUpgradeNum());
|
|
|
+ if (i == 0) {
|
|
|
+ redisService.incr(RedisService.key.MIDJOURNEY_UPGRADE_LIMIT.getName() + user.getId(), 1L);
|
|
|
+ throw BusinessRuntimeException.getInstance("网络异常,请稍后再试");
|
|
|
+ }
|
|
|
+ }
|
|
|
}else {
|
|
|
int i = midjourneyUserMapper.decFastNum(user.getId(), 1, user.getMjFastNum());
|
|
|
if (i == 0) {
|
|
|
@@ -147,16 +161,24 @@ public class MidjourneyController {
|
|
|
num = null;
|
|
|
}
|
|
|
}
|
|
|
- return num;
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("num", num);
|
|
|
+ result.put("upgrade", upgrade);
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 恢复次数
|
|
|
*/
|
|
|
- public void recoverUserLimit(Long id,Integer mode,Long num){
|
|
|
+ public void recoverUserLimit(Long id,Integer mode,Long num,Boolean upgrade){
|
|
|
if (mode == 1){
|
|
|
- redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + id, 1L);
|
|
|
- midjourneyUserMapper.incrFastNum(id, 1);
|
|
|
+ if (upgrade){
|
|
|
+ redisService.incr(RedisService.key.MIDJOURNEY_UPGRADE_LIMIT.getName() + id, 1L);
|
|
|
+ midjourneyUserMapper.incrUpgradeNum(id, 1);
|
|
|
+ }else {
|
|
|
+ redisService.incr(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + id, 1L);
|
|
|
+ midjourneyUserMapper.incrFastNum(id, 1);
|
|
|
+ }
|
|
|
}
|
|
|
if (mode == 2){
|
|
|
if (num != null){
|
|
|
@@ -206,7 +228,9 @@ public class MidjourneyController {
|
|
|
log.info("提交Imagine任务,提示:{}",submitImagineDTO.getPrompt());
|
|
|
MidjourneyUser user = getUser();
|
|
|
Integer mode = submitImagineDTO.getMode();
|
|
|
- Long num = checkUserLimit(user, mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ Long num = (Long) checkResult.get("num");
|
|
|
+ Boolean upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0){
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -219,7 +243,7 @@ public class MidjourneyController {
|
|
|
}
|
|
|
conversation = midjourneyService.submitImagine(user, mode, submitImagineDTO.getPrompt(), submitImagineDTO.getBotType(), submitImagineDTO.getBase64Array(), num);
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(), mode,num);
|
|
|
+ recoverUserLimit(user.getId(), mode,num,upgrade);
|
|
|
log.error("提交Imagine任务异常,{}", StringUtil.getErrorText(e));
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
@@ -236,7 +260,9 @@ public class MidjourneyController {
|
|
|
log.info("提交Describe任务");
|
|
|
MidjourneyUser user = getUser();
|
|
|
Integer mode = submitDescribeDTO.getMode();
|
|
|
- Long num = checkUserLimit(user,mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ Long num = (Long) checkResult.get("num");
|
|
|
+ Boolean upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0){
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -244,7 +270,7 @@ public class MidjourneyController {
|
|
|
try {
|
|
|
conversation = midjourneyService.submitDescribe(user, mode,submitDescribeDTO.getBotType(),submitDescribeDTO.getBase64(), num);
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(), mode,num);
|
|
|
+ recoverUserLimit(user.getId(), mode,num,upgrade);
|
|
|
log.error("提交Describe任务异常,{}", StringUtil.getErrorText(e));
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
@@ -261,7 +287,9 @@ public class MidjourneyController {
|
|
|
log.info("提交Blend任务 dimensions:{},base64数组长度:{}", submitBlendDTO.getDimensions(), submitBlendDTO.getBase64Array().size());
|
|
|
Integer mode = submitBlendDTO.getMode();
|
|
|
MidjourneyUser user = getUser();
|
|
|
- Long num = checkUserLimit(user,mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ Long num = (Long) checkResult.get("num");
|
|
|
+ Boolean upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0){
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -269,7 +297,7 @@ public class MidjourneyController {
|
|
|
try {
|
|
|
conversation = midjourneyService.submitBlend(user, mode,submitBlendDTO.getDimensions(), submitBlendDTO.getBotType(), submitBlendDTO.getBase64Array(), num);
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(), mode,num);
|
|
|
+ recoverUserLimit(user.getId(), mode,num,upgrade);
|
|
|
log.error("提交Blend任务异常,{}", StringUtil.getErrorText(e));
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
@@ -290,7 +318,9 @@ public class MidjourneyController {
|
|
|
MidjourneyUserConversation conversation = conversationMapper.selectOne(Wrappers.lambdaQuery(MidjourneyUserConversation.class).eq(MidjourneyUserConversation::getTaskId, submitModalDTO.getBeforeTaskId()).last("limit 1"));
|
|
|
mode = conversation.getMode();
|
|
|
}
|
|
|
- Long num = checkUserLimit(user,mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ Long num = (Long) checkResult.get("num");
|
|
|
+ Boolean upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0){
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -298,7 +328,7 @@ public class MidjourneyController {
|
|
|
try {
|
|
|
conversation = midjourneyService.submitModal(user, mode, submitModalDTO.getTaskId(), submitModalDTO.getPrompt(), submitModalDTO.getMaskBase64(), num);
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(), mode,num);
|
|
|
+ recoverUserLimit(user.getId(), mode,num,upgrade);
|
|
|
log.error("提交Modal任务异常,{}", StringUtil.getErrorText(e));
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
@@ -315,7 +345,9 @@ public class MidjourneyController {
|
|
|
log.info("提交Shorten任务 提示词:{}",submitShortenDTO.getPrompt());
|
|
|
Integer mode = submitShortenDTO.getMode();
|
|
|
MidjourneyUser user = getUser();
|
|
|
- Long num = checkUserLimit(user,mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ Long num = (Long) checkResult.get("num");
|
|
|
+ Boolean upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0){
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -323,7 +355,7 @@ public class MidjourneyController {
|
|
|
try {
|
|
|
conversation = midjourneyService.submitShorten(user, mode, submitShortenDTO.getBotType(), submitShortenDTO.getPrompt(), num);
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(),mode,num);
|
|
|
+ recoverUserLimit(user.getId(),mode,num,upgrade);
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
//syncUser(user.getId(), user.getMode(), num);
|
|
|
@@ -344,8 +376,11 @@ public class MidjourneyController {
|
|
|
}
|
|
|
Integer mode = midjourneyUserConversation.getMode();
|
|
|
Long num = 0L;
|
|
|
+ Boolean upgrade = false;
|
|
|
if (!actionDTO.getCustomId().contains("BOOKMARK")) {
|
|
|
- num = checkUserLimit(user,mode);
|
|
|
+ Map<String, Object> checkResult = checkUserLimit(user, mode);
|
|
|
+ num = (Long) checkResult.get("num");
|
|
|
+ upgrade = (Boolean) checkResult.get("upgrade");
|
|
|
if (num != null && num < 0) {
|
|
|
throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
}
|
|
|
@@ -354,7 +389,7 @@ public class MidjourneyController {
|
|
|
try {
|
|
|
conversation = midjourneyService.submitAction(user,midjourneyUserConversation,mode, actionDTO.getTaskId(), actionDTO.getCustomId(),num, actionDTO.getBotType());
|
|
|
} catch (Exception e) {
|
|
|
- recoverUserLimit(user.getId(), mode,num);
|
|
|
+ recoverUserLimit(user.getId(), mode,num,upgrade);
|
|
|
log.error("执行动作异常,{}", StringUtil.getErrorText(e));
|
|
|
throw BusinessRuntimeException.getInstance(e.getMessage());
|
|
|
}
|
|
|
@@ -631,4 +666,35 @@ public class MidjourneyController {
|
|
|
midjourneyService.releaseLimit(userToken);
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存排队任务
|
|
|
+ */
|
|
|
+ @PostMapping("/queue")
|
|
|
+ public Result<MidjourneyUserQueueView> saveQueue(@Validated @RequestBody SubmitImagineDTO submitImagineDTO) throws Exception {
|
|
|
+ log.info("提交Imagine任务,提示:{}",submitImagineDTO.getPrompt());
|
|
|
+ MidjourneyUser user = getUser();
|
|
|
+ Integer mode = submitImagineDTO.getMode();
|
|
|
+ if (mode != 2){
|
|
|
+ throw BusinessRuntimeException.getInstance("网络异常!");
|
|
|
+ }
|
|
|
+ Long relax = (Long) redisService.get(RedisService.key.MIDJOURNEY_RELAX_LIMIT.getName() + user.getId());
|
|
|
+ if (relax != null && relax <= 0){
|
|
|
+ throw BusinessRuntimeException.getInstance("次数已用完");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.queueLimit(user.getId(),submitImagineDTO));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取任务以及位置
|
|
|
+ */
|
|
|
+ @GetMapping("/getTaskPosition")
|
|
|
+ public Result<List<MidjourneyUserQueue>> getTaskPosition() throws Exception{
|
|
|
+ MidjourneyUser user = getUser();
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyService.getTaskPosition(user.getId()));
|
|
|
+ }
|
|
|
}
|