|
|
@@ -16,16 +16,14 @@ import com.yhlxj.dao.mapper.MidjourneyPaintingPlazaMapper;
|
|
|
import com.yhlxj.dao.mapper.midjourney.MidjourneyUserConversationMapper;
|
|
|
import com.yhlxj.dao.mapper.midjourney.MidjourneyUserMapper;
|
|
|
import com.yhlxj.dao.model.dto.*;
|
|
|
-import com.yhlxj.dao.model.entity.GroupsRelation;
|
|
|
-import com.yhlxj.dao.model.entity.MidjourneyPaintingPlaza;
|
|
|
-import com.yhlxj.dao.model.entity.MidjourneyUser;
|
|
|
-import com.yhlxj.dao.model.entity.MidjourneyUserConversation;
|
|
|
+import com.yhlxj.dao.model.entity.*;
|
|
|
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.redis.RedisService;
|
|
|
import com.yhlxj.service.midjourney.MidjourneyService;
|
|
|
+import com.yhlxj.service.midjourney.MidjourneyUserSettingsService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
@@ -39,7 +37,9 @@ import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/** server/镜像服务/mj绘画
|
|
|
* @author zwhui
|
|
|
@@ -72,6 +72,8 @@ public class MidjourneyController {
|
|
|
|
|
|
private final MidjourneyUserConversationMapper conversationMapper;
|
|
|
|
|
|
+ private final MidjourneyUserSettingsService midjourneyUserSettingsService;
|
|
|
+
|
|
|
public MidjourneyUser getUser(){
|
|
|
String userToken = request.getHeader("user-token");
|
|
|
return midjourneyService.getUser(userToken);
|
|
|
@@ -191,6 +193,11 @@ public class MidjourneyController {
|
|
|
}
|
|
|
SubmitResult conversation;
|
|
|
try {
|
|
|
+ MidjourneyUserSettings settings = user.getSettings();
|
|
|
+ if(settings != null){
|
|
|
+ String prompt = settings.getPrompt();
|
|
|
+ submitImagineDTO.setPrompt(appendDefaults(submitImagineDTO.getPrompt(), prompt));
|
|
|
+ }
|
|
|
conversation = midjourneyService.submitImagine(user, mode, submitImagineDTO.getPrompt(), submitImagineDTO.getBotType(), submitImagineDTO.getBase64Array());
|
|
|
} catch (Exception e) {
|
|
|
recoverUserLimit(user.getId(), mode,num);
|
|
|
@@ -468,9 +475,91 @@ public class MidjourneyController {
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
}
|
|
|
|
|
|
- @Scheduled(cron = "0 0/2 * * * ?")
|
|
|
- public void syscConversation() {
|
|
|
- midjourneyService.syscConversation();
|
|
|
+ /**
|
|
|
+ * 修改settings
|
|
|
+ */
|
|
|
+ @GetMapping("/get/settings")
|
|
|
+ public Result<MidjourneyUserSettings> getSettings(){
|
|
|
+ MidjourneyUser user = getUser();
|
|
|
+
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyUserSettingsService.getById(user.getSettings().getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改settings
|
|
|
+ */
|
|
|
+ @PostMapping("/put/settings")
|
|
|
+ public Result<MidjourneyUserSettings> upSettings(@RequestBody MidjourneyUserSettings settings){
|
|
|
+ MidjourneyUser user = getUser();
|
|
|
+ if (!user.getId().equals(settings.getUserId())) {
|
|
|
+ throw BusinessRuntimeException.getInstance("参数错误");
|
|
|
+ }
|
|
|
+ settings.setId(user.getSettings().getId());
|
|
|
+ midjourneyUserSettingsService.updateById(settings);
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(midjourneyUserSettingsService.getById(settings.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String appendDefaults(String userPrompt, String defaultOptions) {
|
|
|
+ // 解析默认选项
|
|
|
+ Map<String, String> defaultOptionsMap = parseOptions(defaultOptions);
|
|
|
+
|
|
|
+ // 修正用户输入中可能缺少空格的选项
|
|
|
+ userPrompt = fixMissingSpaces(userPrompt);
|
|
|
+
|
|
|
+ // 检查并追加缺失的选项
|
|
|
+ for (Map.Entry<String, String> entry : defaultOptionsMap.entrySet()) {
|
|
|
+ if (!containsOption(userPrompt, entry.getKey())) {
|
|
|
+ userPrompt += " " + entry.getValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 单独处理 --s 和 --stylize 的情况
|
|
|
+ if (!containsOption(userPrompt, "--s") && !containsOption(userPrompt, "--stylize")) {
|
|
|
+ if (defaultOptionsMap.containsKey("--s")) {
|
|
|
+ userPrompt += " " + defaultOptionsMap.get("--s");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return userPrompt;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String fixMissingSpaces(String userPrompt) {
|
|
|
+ // 定义需要修正的正则表达式和替换格式
|
|
|
+ String[][] patterns = {
|
|
|
+ {"--v(\\d)", "--v $1"},
|
|
|
+ {"--niji(\\d)", "--niji $1"},
|
|
|
+ {"--s(\\d+)", "--s $1"},
|
|
|
+ {"--stylize(\\d+)", "--stylize $1"},
|
|
|
+ {"--style(\\w+)", "--style $1"},
|
|
|
+ {"--ar(\\d+)[::](\\d+)", "--ar $1:$2"},
|
|
|
+ {"--ar (\\d+):(\\d+)", "--ar $1:$2"}
|
|
|
+ };
|
|
|
+
|
|
|
+ // 修正用户输入
|
|
|
+ for (String[] pattern : patterns) {
|
|
|
+ userPrompt = userPrompt.replaceAll(pattern[0], pattern[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return userPrompt;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean containsOption(String userPrompt, String option) {
|
|
|
+ return userPrompt.contains(option + " ") || userPrompt.matches(".*" + option + "\\d.*");
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Map<String, String> parseOptions(String options) {
|
|
|
+ Map<String, String> optionsMap = new HashMap<>();
|
|
|
+ String[] parts = options.split("--");
|
|
|
+ for (String part : parts) {
|
|
|
+ if (!part.trim().isEmpty()) {
|
|
|
+ String[] keyValue = part.trim().split(" ", 2);
|
|
|
+ if (keyValue.length == 2) {
|
|
|
+ optionsMap.put("--" + keyValue[0], "--" + keyValue[0] + " " + keyValue[1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return optionsMap;
|
|
|
}
|
|
|
|
|
|
|