Browse Source

Merge remote-tracking branch 'origin/yxz' into yxz

杨兴卓 1 month ago
parent
commit
f1af81afae
28 changed files with 1414 additions and 0 deletions
  1. 14 0
      xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/ErrorCode.java
  2. 7 0
      xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/ServerExceptionHandler.java
  3. 21 0
      xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/user/ComfyUIException.java
  4. 3 0
      xyzc-common/xyzc-common-web/src/main/resources/auth.yml
  5. 88 0
      xyzc-start/src/main/java/com/xyzc/start/controller/ComfyUIController.java
  6. 41 0
      xyzc-start/src/main/java/com/xyzc/start/domain/BaseUserPhotoFolder.java
  7. 42 0
      xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiExecute.java
  8. 56 0
      xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiModel.java
  9. 78 0
      xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiUserWorkflow.java
  10. 61 0
      xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiWorkflow.java
  11. 7 0
      xyzc-start/src/main/java/com/xyzc/start/domain/SysOss.java
  12. 56 0
      xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiModelBo.java
  13. 76 0
      xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiUserWorkflowBo.java
  14. 62 0
      xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiWorkflowBo.java
  15. 54 0
      xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiModelVo.java
  16. 71 0
      xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiUserWorkflowVo.java
  17. 59 0
      xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiWorkflowVo.java
  18. 4 0
      xyzc-start/src/main/java/com/xyzc/start/domain/vo/SysOssVo.java
  19. 31 0
      xyzc-start/src/main/java/com/xyzc/start/job/ComfyUITask.java
  20. 14 0
      xyzc-start/src/main/java/com/xyzc/start/mapper/BaseUserPhotoFolderMapper.java
  21. 34 0
      xyzc-start/src/main/java/com/xyzc/start/mapper/ComfyUIMapper.java
  22. 2 0
      xyzc-start/src/main/java/com/xyzc/start/mapper/SysOssMapper.java
  23. 33 0
      xyzc-start/src/main/java/com/xyzc/start/service/IComfyUIService.java
  24. 325 0
      xyzc-start/src/main/java/com/xyzc/start/service/impl/ComfyUIServiceImpl.java
  25. 24 0
      xyzc-start/src/main/java/com/xyzc/start/utils/EncryptUtil.java
  26. 50 0
      xyzc-start/src/main/resources/mapper/WebStart/BaseUserPhotoFolderMapper.xml
  27. 88 0
      xyzc-start/src/main/resources/mapper/WebStart/ComfyUIMapper.xml
  28. 13 0
      xyzc-start/src/main/resources/mapper/WebStart/SysOssMapper.xml

+ 14 - 0
xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/ErrorCode.java

@@ -55,6 +55,20 @@ public enum ErrorCode {
 
     PARAM_NOT_EMPTY(3000, "必填参数不能为空"),
 
+
+    // 用户燃料不足
+    COMFYUI_NOT_MODEL(11001, "请选择模板类型"),
+    COMFYUI_NOT_MODEL_TYPE(11002, "请选择对应的模板类型"),
+    COMFYUI_UP_PIC(11003, "请上传图片"),
+    COMFYUI_INPUT_SIZE(11004, "请输入尺寸"),
+    COMFYUI_INPUT_COLOR(11005, "请输入背景颜色"),
+    COMFYUI_INPUT_PARAM(11005, "请选择参数"),
+    COMFYUI_INPUT_SIZES(11006, "请输入尺寸相关信息"),
+    COMFYUI_INPUT_PRIMITIVE(11007, "请输入正向提示词!"),
+    COMFYUI_INPUT_OPPOSITEPRIMITIVE(11008, "请输入反向提示词!!"),
+    COMFYUI_INPUT_WIDTH_SIZE(11009, "请输入宽度512-2024!"),
+    COMFYUI_INPUT_HEIGHT_SIZE(11010, "请输入高度512-2024!"),
+
     // 5000自定义编码
     /**
      * 5000  表示法人姓名和身份证的错误码  -认证

+ 7 - 0
xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/ServerExceptionHandler.java

@@ -1,5 +1,6 @@
 package com.xyzc.common.core.exception;
 
+import com.xyzc.common.core.exception.user.ComfyUIException;
 import com.xyzc.common.core.utils.Result;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.AccessDeniedException;
@@ -44,4 +45,10 @@ public class ServerExceptionHandler {
         return Result.error(ErrorCode.INTERNAL_SERVER_ERROR);
     }
 
+    @ExceptionHandler(ComfyUIException.class)
+    public Result<String> handleExceptionByComfyUI(ComfyUIException ex) {
+        log.error(ex.getMessage(), ex);
+        return Result.error(ex.toString().substring(27));
+    }
+
 }

+ 21 - 0
xyzc-common/xyzc-common-core/src/main/java/com/xyzc/common/core/exception/user/ComfyUIException.java

@@ -0,0 +1,21 @@
+package com.xyzc.common.core.exception.user;
+
+
+import com.xyzc.common.core.exception.base.BaseException;
+
+import java.io.Serial;
+
+/**
+ * 用户信息异常类
+ *
+ * @author 杨兴卓
+ */
+public class ComfyUIException extends BaseException {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    public ComfyUIException(String code, Object... args) {
+        super("user", code, args, null);
+    }
+}

+ 3 - 0
xyzc-common/xyzc-common-web/src/main/resources/auth.yml

@@ -12,3 +12,6 @@ auth:
     - /user/**
     - /weixin/**
     - /dns/**
+    - /comfyui/updatePromtId
+    - /comfyui/getExceptInfo
+    - /numperson/numberPersonCommitNotify

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

@@ -0,0 +1,88 @@
+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.ComfyuiUserWorkflow;
+import com.xyzc.start.domain.bo.ComfyuiUserWorkflowBo;
+import com.xyzc.start.domain.bo.HelpFeedbackBo;
+import com.xyzc.start.domain.vo.BaseUserVo;
+import com.xyzc.start.domain.vo.ComfyuiWorkflowVo;
+import com.xyzc.start.service.IComfyUIService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * comfy
+ *
+ * @author 吴友志
+ */
+@RestController
+@RequiredArgsConstructor
+@CrossOrigin
+@Slf4j
+@RequestMapping("/comfyui")
+public class ComfyUIController {
+
+//    private final IComfyUIService comfyUIService;
+
+//    private final IComfyuiWorkflowService comfyuiWorkflowService;
+    private final IComfyUIService comfyUIService;
+
+    /**
+     * 获取comfyui模板基本信息
+     */
+    @PostMapping("/picInfo")
+    public Result<List<ComfyuiWorkflowVo>> info() {
+        List<ComfyuiWorkflowVo> comfyuiWorkflows = comfyUIService.queryAllWorkflow();
+        return Result.ok(comfyuiWorkflows);
+    }
+
+    /**
+     * 类型1-9的
+     */
+    @PostMapping("/generatePic")
+    public Result<Void> generatePic(@RequestBody BaseUserPhotoFolder baseUserPhotoFolder) throws ParseException {
+        comfyUIService.comfyUIGeneratPic(baseUserPhotoFolder);
+        return Result.ok();
+    }
+
+    /**
+     * SD type类型未10000、10001
+     */
+    @PostMapping("/sdGeneratePic")
+    public Result<Void> sdGeneratePic(@RequestBody BaseUserPhotoFolder baseUserPhotoFolder) {
+        comfyUIService.sdGeneratePic(baseUserPhotoFolder);
+        return Result.ok();
+    }
+
+    /**
+     * 接收用户提交comfyui生成图片后,回调的图片的生成url
+     * @param userId
+     * @param minioUrl
+     * @param promptId
+     * @return
+     */
+    @GetMapping("/updatePromtId")
+    public Result<Void> updatePromtId(@RequestParam("userId") Long userId, @RequestParam("minioUrl") String minioUrl, @RequestParam("promptId") String promptId) {
+        comfyUIService.updatePromtId(userId, minioUrl, promptId);
+        return Result.ok();
+    }
+
+    /**
+     * 获取异常报错信息
+     * @param exceptInfo
+     * @throws Exception
+     */
+    @PostMapping("/getExceptInfo")
+    @ResponseBody
+    public void getExceptInfo(@RequestBody String exceptInfo) {
+        log.info("exceptInfo:{}", exceptInfo);
+    }
+}

+ 41 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/BaseUserPhotoFolder.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.Date;
+
 @EqualsAndHashCode(callSuper = true)
 @Data
 @TableName("xy_base_user_photo_folder")
@@ -26,6 +28,11 @@ public class BaseUserPhotoFolder extends BaseUser{
     private Long photoOssId;
 
     /**
+     * 用户工作流Id
+     */
+    private Long workflowId;
+
+    /**
      * 图片分类
      */
     private Long type;
@@ -35,5 +42,39 @@ public class BaseUserPhotoFolder extends BaseUser{
      */
     private String description;
 
+    /**
+     * 模板json
+     */
+    private String workflowJson;
+
+    /**
+     * 生成图片的prompt
+     */
+    private String promptJson;
+
+    /**
+     * 是否生成;0:未启动;1:生成中;2:生成失败;3:生成成功
+     */
+    private int isGenerate;
+
+    /**
+     * comfyui生成的任务id
+     */
+    private String promptId;
+
+    /**
+     * 上传图片的url
+     */
+    private String uploadPicUrl;
+
+    /**
+     * 生成图模板类型,图片处理1-9,SD:10000-10001
+     */
+    private int picType;
+
+    /**
+     * 生成时间
+     */
+    private Date generateTime;
 
 }

+ 42 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiExecute.java

@@ -0,0 +1,42 @@
+package com.xyzc.start.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+//@EqualsAndHashCode(callSuper = true)
+@TableName("xy_comfyui_execute")
+public class ComfyuiExecute {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Integer id;
+
+    private Integer executeNum;
+
+    private String workflowId;
+
+    private Date executeTime;
+
+    // comfyui执行任务返回的id
+    private String promptId;
+    // 通知手机号码
+    private String noticePhone;
+    // 创建时间
+    private Date createTime;
+
+}

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

@@ -0,0 +1,56 @@
+package com.xyzc.start.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.xyzc.common.mybatis.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * comfyui模型对象 xy_comfyui_model
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("xy_comfyui_model")
+public class ComfyuiModel extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Integer id;
+
+    /**
+     * 工作流类型
+     */
+    private Integer picType;
+
+    /**
+     * 工作流模型描述
+     */
+    private String picDesc;
+
+    /**
+     * 模型名称
+     */
+    private String modelName;
+
+    /**
+     * 模型存放地址
+     */
+    private String modelDir;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 78 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiUserWorkflow.java

@@ -0,0 +1,78 @@
+package com.xyzc.start.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.xyzc.common.mybatis.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 用户提交生成图片的请求对象 xy_comfyui_user_workflow
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("xy_comfyui_user_workflow")
+public class ComfyuiUserWorkflow extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 模板id
+     */
+    private Integer workflowId;
+
+    /**
+     * 工作流类型
+     */
+    private Integer picType;
+
+    /**
+     * 模板json
+     */
+    private String workflowJson;
+
+    /**
+     * 生成图片的prompt
+     */
+    private String promptJson;
+
+    /**
+     * pic地址
+     */
+    private String picUrl;
+
+    /**
+     * 是否生成;0:未启动;1:生成中;2:生成失败;3:生成成功
+     */
+    private Integer isGenerate;
+
+    /**
+     * 生成时间
+     */
+    private Date generateTime;
+
+    /**
+     * comfyui生成的任务id
+     */
+    private String promptId;
+
+
+}

+ 61 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/ComfyuiWorkflow.java

@@ -0,0 +1,61 @@
+package com.xyzc.start.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.xyzc.common.mybatis.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 图片处理基本模板对象 xy_comfyui_workflow
+ *
+ * @author yz
+ * @date 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("xy_comfyui_workflow")
+public class ComfyuiWorkflow extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * ComfyUI配置的任务流程模板的json,用于生成图片的配置
+     */
+    private String workflowJson;
+
+    /**
+     * 序号
+     */
+    private Integer sort;
+
+    /**
+     * 类型:1:图片抠图;2:换背景
+     */
+    private Integer picType;
+
+    /**
+     * 例图地址
+     */
+    private String picUrl;
+
+    /**
+     * 图片名称
+     */
+    private String picName;
+
+    /**
+     * key用于ComfyUI校验
+     */
+    private String appKey;
+
+
+}

+ 7 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/SysOss.java

@@ -19,6 +19,8 @@ public class SysOss {
     @TableId(value = "oss_id")
     private Long ossId;
 
+
+
     /**
      * 文件名
      */
@@ -44,4 +46,9 @@ public class SysOss {
      */
     private String service;
 
+    /**
+     * prompt_id comfyui生成图片的id
+     */
+    private String promptId;
+
 }

+ 56 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiModelBo.java

@@ -0,0 +1,56 @@
+package com.xyzc.start.domain.bo;
+
+import com.xyzc.common.core.validate.AddGroup;
+import com.xyzc.common.core.validate.EditGroup;
+import com.xyzc.start.domain.ComfyuiModel;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+/**
+ * comfyui模型业务对象 xy_comfyui_model
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiModel.class, reverseConvertGenerate = false)
+public class ComfyuiModelBo {
+
+    /**
+     * 
+     */
+    @NotNull(message = "不能为空", groups = {EditGroup.class})
+    private Integer id;
+
+    /**
+     * 工作流类型
+     */
+    @NotNull(message = "工作流类型不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer picType;
+
+    /**
+     * 工作流模型描述
+     */
+    @NotBlank(message = "工作流模型描述不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String picDesc;
+
+    /**
+     * 模型名称
+     */
+    @NotBlank(message = "模型名称不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String modelName;
+
+    /**
+     * 模型存放地址
+     */
+    @NotBlank(message = "模型存放地址不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String modelDir;
+
+    /**
+     * 备注
+     */
+    @NotBlank(message = "备注不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String remark;
+
+}

+ 76 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiUserWorkflowBo.java

@@ -0,0 +1,76 @@
+package com.xyzc.start.domain.bo;
+
+import com.xyzc.common.core.validate.AddGroup;
+import com.xyzc.common.core.validate.EditGroup;
+import com.xyzc.start.domain.ComfyuiUserWorkflow;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 用户提交生成图片的请求业务对象 xy_comfyui_user_workflow
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiUserWorkflow.class, reverseConvertGenerate = false)
+public class ComfyuiUserWorkflowBo {
+
+    /**
+     * 
+     */
+    @NotNull(message = "不能为空", groups = {EditGroup.class})
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    @NotNull(message = "用户id不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Long userId;
+
+    /**
+     * 模板id
+     */
+    @NotNull(message = "模板id不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer workflowId;
+
+    /**
+     * 工作流类型
+     */
+    @NotNull(message = "工作流类型不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer picType;
+
+    /**
+     * 模板json
+     */
+    @NotBlank(message = "模板json不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String workflowJson;
+
+    /**
+     * 生成图片的prompt
+     */
+    @NotBlank(message = "生成图片的prompt不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String promptJson;
+
+    /**
+     * oss地址
+     */
+    @NotBlank(message = "oss地址不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String picUrl;
+
+    /**
+     * 是否生成;0:未启动;1:生成中;2:生成失败;3:生成成功
+     */
+    @NotNull(message = "是否生成;0:未启动;1:生成中;2:生成失败;3:生成成功不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer isGenerate;
+
+    /**
+     * 生成时间
+     */
+    @NotNull(message = "生成时间不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Date generateTime;
+
+}

+ 62 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/bo/ComfyuiWorkflowBo.java

@@ -0,0 +1,62 @@
+package com.xyzc.start.domain.bo;
+
+import com.xyzc.common.core.validate.AddGroup;
+import com.xyzc.common.core.validate.EditGroup;
+import com.xyzc.start.domain.ComfyuiWorkflow;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+/**
+ * 图片处理基本模板业务对象 xy_comfyui_workflow
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiWorkflow.class, reverseConvertGenerate = false)
+public class ComfyuiWorkflowBo {
+
+    /**
+     * 
+     */
+    @NotNull(message = "不能为空", groups = {EditGroup.class})
+    private Long id;
+
+    /**
+     * ComfyUI配置的任务流程模板的json,用于生成图片的配置
+     */
+    @NotBlank(message = "ComfyUI配置的任务流程模板的json,用于生成图片的配置不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String workflowJson;
+
+    /**
+     * 序号
+     */
+    @NotNull(message = "序号不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer sort;
+
+    /**
+     * 类型:1:图片抠图;2:换背景
+     */
+    @NotNull(message = "类型:1:图片抠图;2:换背景不能为空", groups = {AddGroup.class, EditGroup.class})
+    private Integer picType;
+
+    /**
+     * 例图地址
+     */
+    @NotBlank(message = "例图地址不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String picUrl;
+
+    /**
+     * 图片名称
+     */
+    @NotBlank(message = "图片名称不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String picName;
+
+    /**
+     * key用于ComfyUI校验
+     */
+    @NotBlank(message = "key用于ComfyUI校验不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String appKey;
+
+}

+ 54 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiModelVo.java

@@ -0,0 +1,54 @@
+package com.xyzc.start.domain.vo;
+
+import com.xyzc.start.domain.ComfyuiModel;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * comfyui模型视图对象 xy_comfyui_model
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiModel.class)
+public class ComfyuiModelVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    private Integer id;
+
+    /**
+     * 工作流类型
+     */
+    private Integer picType;
+
+    /**
+     * 工作流模型描述
+     */
+    private String picDesc;
+
+    /**
+     * 模型名称
+     */
+    private String modelName;
+
+    /**
+     * 模型存放地址
+     */
+    private String modelDir;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 71 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiUserWorkflowVo.java

@@ -0,0 +1,71 @@
+package com.xyzc.start.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xyzc.start.domain.ComfyuiUserWorkflow;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 用户提交生成图片的请求视图对象 xy_comfyui_user_workflow
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiUserWorkflow.class)
+public class ComfyuiUserWorkflowVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 模板id
+     */
+    private Integer workflowId;
+
+    /**
+     * 工作流类型
+     */
+    private Integer picType;
+
+    /**
+     * 模板json
+     */
+    private String workflowJson;
+
+    /**
+     * 生成图片的prompt
+     */
+    private String promptJson;
+
+    /**
+     * oss地址
+     */
+    private String picUrl;
+
+    /**
+     * 是否生成;0:未启动;1:生成中;2:生成失败;3:生成成功
+     */
+    private Integer isGenerate;
+
+    /**
+     * 生成时间
+     */
+    private Date generateTime;
+
+}

+ 59 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/ComfyuiWorkflowVo.java

@@ -0,0 +1,59 @@
+package com.xyzc.start.domain.vo;
+
+import com.xyzc.start.domain.ComfyuiWorkflow;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 图片处理基本模板视图对象 xy_comfyui_workflow
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Data
+@AutoMapper(target = ComfyuiWorkflow.class)
+public class ComfyuiWorkflowVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    private Long id;
+
+    /**
+     * ComfyUI配置的任务流程模板的json,用于生成图片的配置
+     */
+    private String workflowJson;
+
+    /**
+     * 序号
+     */
+    private Integer sort;
+
+    /**
+     * 类型:1:图片抠图;2:换背景
+     */
+    private Integer picType;
+
+    /**
+     * 例图地址
+     */
+    private String picUrl;
+
+    /**
+     * 图片名称
+     */
+    private String picName;
+
+    /**
+     * key用于ComfyUI校验
+     */
+    private String appKey;
+
+}

+ 4 - 0
xyzc-start/src/main/java/com/xyzc/start/domain/vo/SysOssVo.java

@@ -61,5 +61,9 @@ public class SysOssVo implements Serializable {
      */
     private String service;
 
+    /**
+     * prompt_id comfyui生成图片的id
+     */
+    private String promptId;
 
 }

+ 31 - 0
xyzc-start/src/main/java/com/xyzc/start/job/ComfyUITask.java

@@ -0,0 +1,31 @@
+package com.xyzc.start.job;
+
+import com.xyzc.start.service.IComfyUIService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@EnableScheduling
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class ComfyUITask {
+
+    private final IComfyUIService comfyUIService;
+
+
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
+
+    // 每5秒执行一次
+//    @Scheduled(fixedRate = 1000 * 60)
+    public void checkConfyIsGenerate() {
+        // 定时器执行, 防止某些因异常导致没有执行成功,定时器重新执行
+        comfyUIService.quartz2ComfyUI();
+    }
+
+}

+ 14 - 0
xyzc-start/src/main/java/com/xyzc/start/mapper/BaseUserPhotoFolderMapper.java

@@ -27,6 +27,20 @@ public interface BaseUserPhotoFolderMapper extends BaseMapperPlus<BaseUserPhotoF
     BaseUserPhotoFolderVo queryPhotoFolderById(Long userId, Long id);
 
     /**
+     * 根据promptId和UserId获取图片
+     * @param userId
+     * @param promptId
+     * @return
+     */
+    BaseUserPhotoFolder queryPhotoFolderByPromptId(Long userId, String promptId);
+
+    /**
+     * 根据生成
+     * @return
+     */
+    BaseUserPhotoFolder queryPhotoFolderByIsGenerate();
+
+    /**
      * 根据用户id和图像id删除唯一的图像
      *
      * @param userId

+ 34 - 0
xyzc-start/src/main/java/com/xyzc/start/mapper/ComfyUIMapper.java

@@ -0,0 +1,34 @@
+package com.xyzc.start.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xyzc.common.mybatis.core.mapper.BaseMapperPlus;
+import com.xyzc.start.domain.ComfyuiExecute;
+import com.xyzc.start.domain.ComfyuiUserWorkflow;
+import com.xyzc.start.domain.ComfyuiWorkflow;
+import com.xyzc.start.domain.vo.ComfyuiUserWorkflowVo;
+import com.xyzc.start.domain.vo.ComfyuiWorkflowVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * @author wyz
+ * @date 2024-08-08
+ */
+@Mapper
+public interface ComfyUIMapper extends BaseMapperPlus<ComfyuiUserWorkflow, ComfyuiUserWorkflowVo> {
+
+    List<ComfyuiWorkflowVo> queryAllWorkflow();
+
+    ComfyuiWorkflow queryWorkflowById(int workflow);
+
+    ComfyuiExecute queryComfyUIExecute();
+
+    int insertComfyuiUserWorkflow(ComfyuiUserWorkflow comfyuiUserWorkflow);
+
+    int insertComfyuiExecute(ComfyuiExecute comfyuiExecute);
+
+    int updateComfyuiExecute(@Param("comfyuiExecute") ComfyuiExecute comfyuiExecute);
+}

+ 2 - 0
xyzc-start/src/main/java/com/xyzc/start/mapper/SysOssMapper.java

@@ -1,5 +1,6 @@
 package com.xyzc.start.mapper;
 
+import com.alibaba.fastjson.JSONObject;
 import com.xyzc.common.mybatis.core.mapper.BaseMapperPlus;
 import com.xyzc.start.domain.SysOss;
 import com.xyzc.start.domain.vo.SysOssVo;
@@ -7,4 +8,5 @@ import com.xyzc.start.domain.vo.SysOssVo;
 
 public interface SysOssMapper extends BaseMapperPlus<SysOss, SysOssVo> {
 
+    JSONObject queryConfig(String id, String configKey);
 }

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

@@ -0,0 +1,33 @@
+package com.xyzc.start.service;
+
+
+import com.xyzc.common.core.utils.Result;
+import com.xyzc.start.domain.BaseUserPhotoFolder;
+import com.xyzc.start.domain.ComfyuiUserWorkflow;
+import com.xyzc.start.domain.bo.AgentCardSecretBo;
+import com.xyzc.start.domain.bo.ComfyuiUserWorkflowBo;
+import com.xyzc.start.domain.bo.HobbyBo;
+import com.xyzc.start.domain.vo.*;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.text.ParseException;
+import java.util.List;
+
+public interface IComfyUIService {
+
+    void quartz2ComfyUI();
+
+    /**
+     * 查询工作流的图片模板
+     */
+    List<ComfyuiWorkflowVo> queryAllWorkflow();
+
+    /**
+     * 查询工作流的图片模板
+     */
+    List<BaseUserPhotoFolder> comfyUIGeneratPic(BaseUserPhotoFolder baseUserPhotoFolder) throws ParseException;
+    List<BaseUserPhotoFolder> sdGeneratePic(BaseUserPhotoFolder baseUserPhotoFolder);
+
+    void updatePromtId(Long userId, String minioUrl, String promptId);
+
+}

File diff suppressed because it is too large
+ 325 - 0
xyzc-start/src/main/java/com/xyzc/start/service/impl/ComfyUIServiceImpl.java


+ 24 - 0
xyzc-start/src/main/java/com/xyzc/start/utils/EncryptUtil.java

@@ -1,6 +1,8 @@
 package com.xyzc.start.utils;
 
 import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
@@ -36,6 +38,28 @@ public class EncryptUtil {
         cipher.init(2, key);
         return new String(cipher.doFinal(HexUtil.decodeHex(base64Data)));
     }
+
+    /**
+     * MD5加密
+     */
+    public static String getMD5Byparam(String param) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] messageDigest = md.digest(param.getBytes());
+            StringBuilder hexString = new StringBuilder();
+            for (byte b : messageDigest) {
+                String hex = Integer.toHexString(0xFF & b);
+                if (hex.length() == 1) {
+                    hexString.append('0');
+                }
+                hexString.append(hex);
+            }
+            return hexString.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
     
     public static void main(String[] args) {
         String key = "www.kabaoka.com withdrawAccount";

+ 50 - 0
xyzc-start/src/main/resources/mapper/WebStart/BaseUserPhotoFolderMapper.xml

@@ -35,5 +35,55 @@
           and bupf.del_flag = '0'
     </select>
 
+    <select id="queryPhotoFolderByPromptId" resultType="com.xyzc.start.domain.BaseUserPhotoFolder">
+        SELECT
+                  id
+               , `photo_oss_id`
+               , `base_user_id`
+               , `workflow_id`
+               , `type`
+               , `pic_type`
+               , `create_time`
+               , `generate_time`
+               , `workflow_json`
+               , `prompt_json`
+               , `upload_pic_url`
+               , `is_generate`
+               , `prompt_id`
+               , `create_by`
+               , `update_time`
+               , `update_by`
+               , `del_flag`
+        FROM xy_base_user_photo_folder bupf
+        WHERE bupf.base_user_id = #{userId}
+          AND bupf.prompt_id = #{promptId}
+          AND bupf.del_flag = '0'
+    </select>
 
+    <select id="queryPhotoFolderByIsGenerate" resultType="com.xyzc.start.domain.BaseUserPhotoFolder">
+       SELECT
+               id
+            , `photo_oss_id`
+            , `base_user_id`
+            , `workflow_id`
+            , `type`
+            , `pic_type`
+            , `create_time`
+            , `generate_time`
+            , `workflow_json`
+            , `prompt_json`
+            , `upload_pic_url`
+            , `is_generate`
+            , `prompt_id`
+            , `create_by`
+            , `update_time`
+            , `update_by`
+            , `del_flag`
+       FROM xy_base_user_photo_folder
+       WHERE is_generate = 0
+       AND del_flag = '0'
+       ORDER BY create_time
+       limit 1
+       for update
+    </select>
 </mapper>

+ 88 - 0
xyzc-start/src/main/resources/mapper/WebStart/ComfyUIMapper.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xyzc.start.mapper.ComfyUIMapper">
+
+    <select id="queryAllWorkflow" resultType="com.xyzc.start.domain.vo.ComfyuiWorkflowVo">
+        SELECT
+               `id`
+             , `sort`
+             , `pic_type`
+             , `pic_url`
+             , `pic_name`
+        FROM xy_comfyui_workflow
+        WHERE id between 1 and 9999 and is_used=1
+        ORDER BY sort
+    </select>
+
+    <select id="queryWorkflowById" resultType="com.xyzc.start.domain.ComfyuiWorkflow" parameterType="java.lang.Integer">
+        SELECT
+              `id`
+            , `workflow_json`
+            , `sort`
+            , `pic_type`
+            , `pic_url`
+            , `pic_name`
+            , `app_key`
+        FROM xy_comfyui_workflow
+        WHERE `pic_type` = #{workflow}
+    </select>
+
+    <select id="queryComfyUIExecute" resultType="com.xyzc.start.domain.ComfyuiExecute" >
+        SELECT
+              `id`
+            , `execute_num` as executeNum
+            , `workflow_id` as workflowId
+            , `execute_time` as executeTime
+            , `notice_phone` as noticePhone
+            , `create_time` as createTime
+        FROM xy_comfyui_execute limit 1 for update
+    </select>
+
+    <insert id="insertComfyuiUserWorkflow" parameterType="com.xyzc.start.domain.ComfyuiUserWorkflow">
+        INSERT INTO xy_comfyui_user_workflow(
+                  `user_id`
+                , `workflow_id`
+                , `workflow_json`
+                , `prompt_json`
+                , `oss_url`
+                , `is_generate`
+                , `generate_time`
+                , `prompt_id`)
+        values (
+                  comfyuiUserWorkflow.userId
+                , comfyuiUserWorkflow.workflowId
+                , comfyuiUserWorkflow.workflowJson
+                , comfyuiUserWorkflow.promptJson
+                , comfyuiUserWorkflow.ossUrl
+                , comfyuiUserWorkflow.isGenerate
+                , comfyuiUserWorkflow.generateTime
+                , comfyuiUserWorkflow.promptId
+               )
+
+    </insert>
+<!--    INSERT INTO `distribution`.`xy_comfyui_execute` (`id`, `execute_num`, `workflow_id`, `execute_time`, `prompt_id`, `notice_phone`, `create_time`) VALUES (1, 0, NULL, '2024-08-11 19:00:05', NULL, NULL, NULL);-->
+
+    <insert id="insertComfyuiExecute" parameterType="com.xyzc.start.domain.ComfyuiExecute">
+        INSERT INTO xy_comfyui_execute(
+                `execute_num`
+              , `workflow_id`
+              , `execute_time`
+              , `prompt_id`)
+        values (
+                comfyuiExecute.executeNum
+              , comfyuiExecute.workflowId
+              , comfyuiExecute.executeTime
+              , comfyuiExecute.promptId
+               )
+    </insert>
+
+    <insert id="updateComfyuiExecute">
+        UPDATE xy_comfyui_execute execu
+        SET execu.execute_num = #{comfyuiExecute.executeNum}
+            , execu.execute_time = #{comfyuiExecute.executeTime}
+            , execu.prompt_id = #{comfyuiExecute.promptId}
+        WHERE execu.id = #{comfyuiExecute.id}
+    </insert>
+</mapper>

+ 13 - 0
xyzc-start/src/main/resources/mapper/WebStart/SysOssMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xyzc.start.mapper.SysOssMapper">
+
+    <select id="queryConfig" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT bucket_name, endpoint
+        FROM sys_oss_config
+        WHERE oss_config_id=1 and config_key='minio'
+    </select>
+
+</mapper>

Some files were not shown because too many files changed in this diff