Sfoglia il codice sorgente

开发comfy的生图接口对接

wuyouzhi 1 mese fa
parent
commit
552ec85a5b

+ 5 - 1
xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/ErrorCode.java

@@ -56,7 +56,7 @@ public enum ErrorCode {
     PARAM_NOT_EMPTY(3000, "必填参数不能为空"),
 
 
-    // 用户燃料不足
+    // comfyui报错信息
     COMFYUI_NOT_MODEL(11001, "请选择模板类型"),
     COMFYUI_NOT_MODEL_TYPE(11002, "请选择对应的模板类型"),
     COMFYUI_UP_PIC(11003, "请上传图片"),
@@ -68,6 +68,10 @@ public enum ErrorCode {
     COMFYUI_INPUT_OPPOSITEPRIMITIVE(11008, "请输入反向提示词!!"),
     COMFYUI_INPUT_WIDTH_SIZE(11009, "请输入宽度512-2024!"),
     COMFYUI_INPUT_HEIGHT_SIZE(11010, "请输入高度512-2024!"),
+    COMFYUI_MINIO_CONFIG(11011, "请先配置minio信息"),
+
+    // 数字人报错信息
+    NUMERSON_NO(11012, "无效请求"),
 
     // 5000自定义编码
     /**

+ 9 - 0
xyzc-start/src/main/java/com/xyzc/start/controller/ComfyUIController.java

@@ -4,6 +4,7 @@ package com.xyzc.start.controller;
 import com.xyzc.common.core.exception.ServerExceptionHandler;
 import com.xyzc.common.core.utils.Result;
 import com.xyzc.start.domain.BaseUserPhotoFolder;
+import com.xyzc.start.domain.ComfyuiModel;
 import com.xyzc.start.domain.ComfyuiUserWorkflow;
 import com.xyzc.start.domain.bo.ComfyuiUserWorkflowBo;
 import com.xyzc.start.domain.bo.HelpFeedbackBo;
@@ -54,6 +55,14 @@ public class ComfyUIController {
     }
 
     /**
+     * 获取模型全称
+     */
+//    public Result<List<ComfyuiModel>> getAllModel(@RequestBody ComfyuiModel comfyuiModel){
+//        List<ComfyuiModel> modelList = comfyUIService.getAllModel(comfyuiModel);
+//        return Result.ok(model);
+//    }
+
+    /**
      * SD type类型未10000、10001
      */
     @PostMapping("/sdGeneratePic")

+ 5 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiModel.java

@@ -43,6 +43,11 @@ public class ComfyuiModel extends BaseEntity {
     private String modelName;
 
     /**
+     * 模型全称
+     */
+    private String modelFullName;
+
+    /**
      * 模型存放地址
      */
     private String modelDir;

+ 2 - 0
xyzc-start/src/main/java/com/xyzc/start/service/IComfyUIService.java

@@ -3,6 +3,7 @@ package com.xyzc.start.service;
 
 import com.xyzc.common.core.utils.Result;
 import com.xyzc.start.domain.BaseUserPhotoFolder;
+import com.xyzc.start.domain.ComfyuiModel;
 import com.xyzc.start.domain.ComfyuiUserWorkflow;
 import com.xyzc.start.domain.bo.AgentCardSecretBo;
 import com.xyzc.start.domain.bo.ComfyuiUserWorkflowBo;
@@ -27,6 +28,7 @@ public interface IComfyUIService {
      */
     List<BaseUserPhotoFolder> comfyUIGeneratPic(BaseUserPhotoFolder baseUserPhotoFolder) throws ParseException;
     List<BaseUserPhotoFolder> sdGeneratePic(BaseUserPhotoFolder baseUserPhotoFolder);
+    List<ComfyuiModel> getAllModel(ComfyuiModel comfyuiModel);
 
     void updatePromtId(Long userId, String minioUrl, String promptId);
 

+ 73 - 25
xyzc-start/src/main/java/com/xyzc/start/service/impl/ComfyUIServiceImpl.java

@@ -36,14 +36,20 @@ import java.util.Random;
 @Slf4j
 public class ComfyUIServiceImpl implements IComfyUIService {
 
-    private final ComfyUIMapper baseMapper; public String callbackGenPicUrl="http://121.15.198.153:10208/comfyui/updatePromtId";
+    public String callbackGenPicUrl="http://76fc08da.r11.cpolar.top/comfyui/updatePromtId";
+
+    public String comfyuiUrl = "http://121.15.198.153:43210/prompt";
+
+    private final ComfyUIMapper baseMapper;
     // 图片系统配置类
-    private final SysOssMapper sysOssMapper; public String comfyuiUrl = "http://121.15.198.153:43210/prompt";
+    private final SysOssMapper sysOssMapper;
     // 短信通知
     private final ISmsService smsService;
 
     private final BaseUserPhotoFolderMapper photoFolderMapper;
 
+    private final IUserInfoService userInfoService;
+
 
     /**
      * 判断推送comfyui的条件来决定是否推送
@@ -56,34 +62,29 @@ public class ComfyUIServiceImpl implements IComfyUIService {
 //        String executeTime = comfyUIExecutJSON.getString("executeTime");
         Date executeTime = comfyuiExecute.getExecuteTime();
 
-//        if(Strings.isBlank(executeTimeStr))
-//        Date executeTime = null;
-//        try {
-//            executeTime = new SimpleDateFormat("yyyy-MM-dd'T'hh:MM:ss").parse(executeTimeStr);
-//        } catch (ParseException e) {
-//            throw new RuntimeException(e);
-//        }
 
         // 如果一个小时仍然没有更新,可能是已经挂了,则短信通知管理员
-        if (null != executeTime && comfyuiExecute.getExecuteNum() > 0 && executeTime.getTime() + 1000 * 60 * 60 < new Date().getTime()) {
+        // 暂时注释
+        /*if (null != executeTime && comfyuiExecute.getExecuteNum() > 0 && executeTime.getTime() + 1000 * 60 * 60 < new Date().getTime()) {
             String noticePhone = comfyuiExecute.getNoticePhone();
             // 发送短信
             smsService.sendCode(noticePhone, "code", "comfyui生图生成异常!");
-        }
+        }*/
         String promptId = "";
         // 如果为0,则进行推送,并且更新执行次数,
-        if (null == comfyuiExecute || 0 == comfyuiExecute.getExecuteNum()) {
+//        if (null == comfyuiExecute || 0 == comfyuiExecute.getExecuteNum()) {
             // 更新执行次数
-//            promptId = sendRestTemplate(jsonObject);
-        }
+            promptId = sendRestTemplate(jsonObject);
+//        }
 
         Long ossId = null;
         if(Strings.isNotBlank(promptId)) {
 //            ComfyuiExecute comfyuiExecute = new ComfyuiExecute();
-            comfyuiExecute.setPromptId(promptId);
-            comfyuiExecute.setExecuteNum(comfyuiExecute.getExecuteNum() + 1);
-            comfyuiExecute.setExecuteTime(new Date());
-            int i = baseMapper.updateComfyuiExecute(comfyuiExecute);
+            // 暂时注释
+//            comfyuiExecute.setPromptId(promptId);
+//            comfyuiExecute.setExecuteNum(comfyuiExecute.getExecuteNum() + 1);
+//            comfyuiExecute.setExecuteTime(new Date());
+//            int i = baseMapper.updateComfyuiExecute(comfyuiExecute);
 
             JSONObject minioJson = sysOssMapper.queryConfig("1", "minio");
             String bucketName = minioJson.getString("bucket_name");
@@ -126,7 +127,7 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         JSONObject jsonObject = sysOssMapper.queryConfig("1", "minio");
         if (jsonObject == null || jsonObject.getString("bucket_name") == null) {
             log.error("请先配置minio信息");
-            throw new RuntimeException("请先配置minio信息");
+            throw new ServerException(ErrorCode.COMFYUI_MINIO_CONFIG);
         }
 
         String url = "http://" + jsonObject.getString("endpoint") + File.separator + jsonObject.getString("bucket_name") + File.separator + minioUrl;
@@ -150,6 +151,9 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         comfyuiExecute.setPromptId(null);
         baseMapper.updateComfyuiExecute(comfyuiExecute);
 
+        // 扣除燃料
+//        userInfoService.deduct(null, 1808705496965525505l);
+
         // 获取表,进行判断再推送
 //        BaseUserPhotoFolder baseUserPhotoFolder = photoFolderMapper.selectOne(new QueryWrapper<BaseUserPhotoFolder>().eq("base_user_id", userId).eq("prompt_id", promptId)
 //                .select("is_generate","generate_time"));
@@ -177,10 +181,10 @@ public class ComfyUIServiceImpl implements IComfyUIService {
 //            baseUserPhotoFolder.setType(2l);
 //        baseUserPhotoFolder.setPhotoOssId(ossId);
 
-        if(null != baseUserPhotoFolders){
-            // 如果不为空,那么直接再进行推送
-            assert2ComfyUI2save(baseUserPhotoFolders, JSONObject.parseObject(baseUserPhotoFolders.getWorkflowJson()), comfyuiExecute);
-        }
+//        if(null != baseUserPhotoFolders){
+//            // 如果不为空,那么直接再进行推送
+//            assert2ComfyUI2save(baseUserPhotoFolders, JSONObject.parseObject(baseUserPhotoFolders.getWorkflowJson()), comfyuiExecute);
+//        }
     }
 
     /**
@@ -226,7 +230,7 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         ComfyuiWorkflow comfyuiWorkflow = baseMapper.queryWorkflowById(picType);
         baseUserPhotoFolder.setWorkflowId(comfyuiWorkflow.getId());
         baseUserPhotoFolder.setBaseUserId(SecurityUser.getUserId());
-        if (Arrays.asList(1, 2, 4, 6, 7, 9).contains(picType)) {
+        if (Arrays.asList(1, 2, 4, 6, 7).contains(picType)) {
             sendWorkFlow(picType, picUrl, baseUserPhotoFolder, comfyuiWorkflow);
             log.info("发送工作流1、2、4、6、7、9");
         } else if (3 == picType) {
@@ -238,6 +242,8 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         } else if (8 == picType) {
             log.info("发送工作流8");
             sendWorkFlow8(baseUserPhotoFolder, comfyuiWorkflow);//尺寸外扩
+        } else if (9 == picType) {
+            sendWorkFlow9(baseUserPhotoFolder, comfyuiWorkflow);
         }
         return null;
     }
@@ -295,6 +301,11 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         return null;
     }
 
+    @Override
+    public List<ComfyuiModel> getAllModel(ComfyuiModel comfyuiModel) {
+        return List.of();
+    }
+
     /**
      * 1	商品抠图
      * 2	图片清晰
@@ -457,6 +468,43 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         }
     }
 
+
+    // 尺寸外扩
+    public void sendWorkFlow9(BaseUserPhotoFolder baseUserPhotoFolder, ComfyuiWorkflow comfyuiWorkflow) {
+//        if (Strings.isBlank(baseUserPhotoFolder.getPromptJson())) {
+//            throw new RuntimeException("请输入尺寸!");
+//        }
+        String prompt = baseUserPhotoFolder.getPromptJson();
+        String appKey = comfyuiWorkflow.getAppKey();
+        String workFlowStr = comfyuiWorkflow.getWorkflowJson();
+        JSONObject jsonObject = getWorkFlowJSON(workFlowStr, appKey, comfyuiWorkflow.getPicType());
+        jsonObject.put("minio_url", baseUserPhotoFolder.getUploadPicUrl());
+        jsonObject.put("user_workflow_id", comfyuiWorkflow.getPicType());
+//        JSONObject promptObject = JSONObject.parseObject(baseUserPhotoFolder.getPromptJson());
+//        int width = promptJson.getString("6");
+//        6, {'clip': ['4', 1], 'text': 'beach,sunsine\n'}  14    ['beach,sunsine\n']
+//        int height = promptJson.getInteger("height");
+//        int top, bottom, left, right;
+//        top = bottom = height / 2;
+//        left = right = width / 2;
+//        JSONObject sizeJSONTmp = jsonObject.getJSONObject("prompt").getJSONObject("6").getJSONObject("inputs");
+//        jsonObject.getJSONObject("prompt").getJSONObject("6").put("inputs", prompt);
+        jsonObject.getJSONObject("prompt").getJSONObject("6").getJSONObject("inputs").put("text", prompt);
+//        jsonObject.getJSONObject("prompt").getJSONObject("6").put("inputs", "prompt");
+//        jsonObject.getJSONObject("extra_data").getJSONObject("extra_pnginfo").getJSONObject("workflow").getJSONArray("nodes")
+//                .getJSONObject(14).getJSONArray("widgets_values").put("widgets_values", Arrays.asList(prompt));
+        JSONArray jsonArray = jsonObject.getJSONObject("extra_data").getJSONObject("extra_pnginfo").getJSONObject("workflow").getJSONArray("nodes").getJSONObject(14).getJSONArray("widgets_values");
+        jsonArray.remove(0);
+        jsonArray.add(prompt);
+
+        try {
+            assert2ComfyUI2save(baseUserPhotoFolder, jsonObject, null);
+        } catch (Exception e) {
+            log.error(baseUserPhotoFolder.getBaseUserId()+" 证件照制作异常");
+            throw new ServerException(ErrorCode.INTERNAL_SERVER_ERROR);
+        }
+    }
+
     /**
      * 工作流基本的格式的封装
      * @param workFlowStr
@@ -655,7 +703,7 @@ public class ComfyUIServiceImpl implements IComfyUIService {
         opp2Array.remove(0);
         opp2Array.add(oppositePrimitive);
 
-//        sendRestTemplate(jsonObject);
+        sendRestTemplate(jsonObject);
 
         try {
             assert2ComfyUI2save(baseUserPhotoFolder, jsonObject, null);