context, WxCpService cpService,
- WxSessionManager sessionManager) {
- String content = "收到通讯录变更事件,内容:" + JsonUtils.toJson(wxMessage);
- log.info(content);
-
- return new TextBuilder().build(content, wxMessage, cpService);
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java
deleted file mode 100644
index 82806aac..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-
-import java.util.Map;
-
-/**
- *
- *
- * Created by Binary Wang on 2018/8/27.
- *
- *
- * @author Binary Wang
- */
-@Slf4j
-public class EnterAgentHandler extends AbstractHandler {
- private static final int TEST_AGENT = 1000002;
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService, WxSessionManager sessionManager) throws WxErrorException {
- // do something
- return null;
- }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java
deleted file mode 100644
index 45696171..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.ruoyi.system.builder.TextBuilder;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Slf4j
-@Component
-public class LocationHandler extends AbstractHandler {
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
- if (wxMessage.getMsgType().equals(WxConsts.XmlMsgType.LOCATION)) {
- //TODO 接收处理用户发送的地理位置消息
- try {
- String content = "感谢反馈,您的的地理位置已收到!";
- return new TextBuilder().build(content, wxMessage, null);
- } catch (Exception e) {
- log.error("位置消息接收处理失败", e);
- return null;
- }
- }
-
- //上报地理位置事件
- log.info("\n上报地理位置,纬度 : {}\n经度 : {}\n精度 : {}",
- wxMessage.getLatitude(), wxMessage.getLongitude(), String.valueOf(wxMessage.getPrecision()));
-
- //TODO 可以将用户地理位置信息保存到本地数据库,以便以后使用
-
- return null;
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java
deleted file mode 100644
index af32e160..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.ruoyi.common.core.utils.JsonUtils;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Slf4j
-@Component
-public class LogHandler extends AbstractHandler {
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
- log.info("\n接收到请求消息,内容:{}", JsonUtils.toJson(wxMessage));
- return null;
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java
deleted file mode 100644
index fe4617de..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import me.chanjar.weixin.common.api.WxConsts.MenuButtonType;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Component
-public class MenuHandler extends AbstractHandler {
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
-
- String msg = String.format("type:%s, event:%s, key:%s",
- wxMessage.getMsgType(), wxMessage.getEvent(),
- wxMessage.getEventKey());
- if (MenuButtonType.VIEW.equals(wxMessage.getEvent())) {
- return null;
- }
-
- return WxCpXmlOutMessage.TEXT().content(msg)
- .fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
- .build();
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
deleted file mode 100644
index b52a628f..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.RequiredArgsConstructor;
-import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.ruoyi.system.builder.TextBuilder;
-import org.ruoyi.system.service.ISseService;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Component
-@RequiredArgsConstructor
-public class MsgHandler extends AbstractHandler {
-
-// private final ISseService sseService;
-
-
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
- final String msgType = wxMessage.getMsgType();
- if (msgType == null) {
- // 如果msgType没有,就自己根据具体报文内容做处理
- }
-
- if (!msgType.equals(WxConsts.XmlMsgType.EVENT)) {
- //TODO 可以选择将消息保存到本地
- }
-
- //TODO 组装回复消息
- String content = "";
- //sseService.wxCpChat(wxMessage.getContent());
-
- return new TextBuilder().build(content, wxMessage, cpService);
-
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java
deleted file mode 100644
index b755444a..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Component
-public class NullHandler extends AbstractHandler {
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
- return null;
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java
deleted file mode 100644
index 8a797a1d..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-/**
- * @author Binary Wang
- */
-public abstract class ScanHandler extends AbstractHandler {
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java
deleted file mode 100644
index 6146c004..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.WxCpUser;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.ruoyi.system.builder.TextBuilder;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Slf4j
-@Component
-public class SubscribeHandler extends AbstractHandler {
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) throws WxErrorException {
-
- log.info("新关注用户 OPENID: " + wxMessage.getFromUserName());
-
- // 获取微信用户基本信息
- WxCpUser userWxInfo = cpService.getUserService().getById(wxMessage.getFromUserName());
-
- if (userWxInfo != null) {
- // TODO 可以添加关注用户到本地
- }
-
- WxCpXmlOutMessage responseResult = null;
- try {
- responseResult = handleSpecial(wxMessage);
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- }
-
- if (responseResult != null) {
- return responseResult;
- }
-
- try {
- return new TextBuilder().build("感谢关注", wxMessage, cpService);
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- }
-
- return null;
- }
-
- /**
- * 处理特殊请求,比如如果是扫码进来的,可以做相应处理
- */
- private WxCpXmlOutMessage handleSpecial(WxCpXmlMessage wxMessage) {
- //TODO
- return null;
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java
deleted file mode 100644
index b89713f2..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.ruoyi.system.handler.wxcp;
-
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.session.WxSessionManager;
-import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
-import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author Binary Wang
- */
-@Slf4j
-@Component
-public class UnsubscribeHandler extends AbstractHandler {
-
- @Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService cpService,
- WxSessionManager sessionManager) {
- String openId = wxMessage.getFromUserName();
- log.info("取消关注用户 OPENID: " + openId);
- // TODO 可以更新本地数据库为取消关注状态
- return null;
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java
similarity index 96%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java
index d6996e43..26beb91a 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java
@@ -1,4 +1,4 @@
-package org.ruoyi.system.handler;
+package org.ruoyi.system.listener;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java
deleted file mode 100644
index d6a85191..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.ruoyi.system.request;
-
-import lombok.Data;
-
-/**
- * 描述:
- *
- * @author ageerle@163.com
- * date 2024/4/27
- */
-@Data
-public class RoleListDto {
-
- private String name;
-
- private String description;
-
- private String voicesId;
-
- private String avatar;
-
- private String previewAudio;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java
deleted file mode 100644
index d77b1e97..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.ruoyi.system.request;
-
-import lombok.Data;
-
-/**
- * @author WangLe
- */
-@Data
-public class RoleRequest {
-
- /**
- * 角色名称
- */
- private String name;
-
- /**
- * 角色默认风格音频样本,base64 编码的音频数据
- */
- private String prompt;
-
- /**
- * 角色描述
- */
- private String description;
-
- /**
- * 头像
- */
- private String avatar;
-
- /**
- * 专业克隆样本Zip文件的分片上传ID,请先通过分片上传接口完成文件上传
- */
- private String lora;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java
deleted file mode 100644
index 6a9378ee..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.ruoyi.system.request;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author WangLe
- */
-@Data
-public class SimpleGenerateRequest {
-
- /**
- * 角色ID
- */
- private String voiceId;
-
- /**
- * 要生成的文本内容
- */
- private String text;
-
- /**
- * 要生成的文本内容 优先级高于text
- */
- private List texts;
-
- /**
- * 角色风格 ID (默认为default)
- */
- private String promptId = "default";
-
- /**
- * 要使用的模型ID (目前统一为reecho-neural-voice-001)
- */
- private String model = "reecho-neural-voice-001";
-
- /**
- * 多样性 (0-100,默认为97)
- */
- private Integer randomness;
-
- /**
- * 稳定性过滤 (0-100,默认为100)
- */
- private Integer stability_boost;
-
- /**
- * 概率优选(0-100,默认为99)
- */
- private Integer probability_optimization;
-
- /**
- * 是否直接返回生成音频的Base64 DataURL,而不是Url链接(默认为false)
- */
- private Boolean origin_audio;
-
- /**
- * 是否启用流式生成
- */
- private Boolean stream;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java
deleted file mode 100644
index ff09e6f5..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author WangLe
- */
-@Data
-public class MetadataResponse {
-
- /**
- * 语音角色头像 URL
- */
- private String avatar;
-
- /**
- * 语音角色描述
- */
- private String description;
-
- /**
- * 语音角色风格列表
- */
- private List prompts;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java
deleted file mode 100644
index 000f902f..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-/**
- * 描述:语音角色风格列表
- *
- * @author ageerle@163.com
- * date 2024/4/27
- */
-@Data
-public class PromptResponse {
-
- /**
- * 角色风格 ID
- */
- private String id;
-
- /**
- * 角色风格名称
- */
- private String name;
-
- /**
- * 角色风格样本音频 URL
- */
- private String promptOriginAudioStorageUrl;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java
deleted file mode 100644
index 1e7c67e8..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-/**
- * @author WangLe
- */
-@Data
-public class RoleDataResponse {
- /**
- * 语音角色 ID
- */
- private String id;
-
- /**
- * 音角色名称
- */
- private String name;
-
- /**
- * 语音角色状态,可以为
- * pending(瞬时克隆已完成)
- * lora-pending(专业克隆训练中)
- * lora-success(专业克隆已完成)
- * lora-failed(专业克隆失败)
- */
- private String status;
- private MetadataResponse metadata;
- private String from;
- private String originId;
- private String createdAt;
- private String updatedAt;
- private String deletedAt;
- private String userId;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java
deleted file mode 100644
index 0f4ea427..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-/**
- * @author WangLe
- */
-@Data
-public class RoleResponse {
- /**
- * 状态码
- */
- private String status;
- /**
- * 状态信息
- */
- private String message;
- /**
- * 创建的语音角色详情
- */
- private RoleDataResponse data;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java
deleted file mode 100644
index 79d904bb..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-/**
- * @author WangLe
- */
-@Data
-public class SimpleGenerateDataResponse {
-
- /**
- * 本次生成的ID
- */
- private String id;
-
- /**
- * 本次生成结果的音频文件地址
- */
- private String audio;
-
- /**
- * 流式MP3端点
- */
- private String streamUrl;
-
- /**
- * 本次生成所消耗的点数
- */
- private Integer credit_used;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java
deleted file mode 100644
index ac4b3580..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.ruoyi.system.response;
-
-import lombok.Data;
-
-/**
- * @author WangLe
- */
-@Data
-public class SimpleGenerateResponse {
-
- /**
- * 状态码,失败时则为500
- */
- private String status;
-
- /**
- * 状态消息
- */
- private String message;
-
- /**
- * 生成详情
- */
- private SimpleGenerateDataResponse data;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java
deleted file mode 100644
index 0d22f208..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.ruoyi.system.response.rolelist;
-
-import lombok.Data;
-
-@Data
-public class ChatAppStoreVO {
-
-
- private String name;
-
- private String description;
-
- private String voicesId;
-
- private String avatar;
-
- private String appUrl;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java
deleted file mode 100644
index ea7f7471..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.ruoyi.system.response.rolelist;
-
-import lombok.Data;
-
-/**
- *
- * 描述:获取当前用户的语音角色列表返回对象
- *
- * @author ageerle@163.com
- * date 2024/4/27
- */
-import java.util.List;
-
-@Data
-public class ContentResponse {
-
- /**
- * 语音角色 ID
- */
- private String id;
-
- /**
- * 语音角色名称
- */
- private String name;
-
- /**
- * 语音角色状态,可以为pending(瞬时克隆已完成)、lora-pending(专业克隆训练中)、lora-success(专业克隆已完成)、lora-failed(专业克隆失败)
- */
- private String status;
-
-
- private Metadata metadata;
- @Data
- public static class Metadata {
-
- /**
- * 语音角色头像 URL
- */
- private String avatar;
-
- /**
- * 语音角色描述
- */
- private String description;
-
- /**
- * 语音角色风格列表
- */
- private List prompts;
-
- private String previewAudio;
-
- private String promptMP3StorageUrl;
-
- @Data
- public static class prompt {
- /**
- * 角色风格 ID
- */
- private String id;
-
- /**
- * 角色风格名称
- */
- private String name;
-
- /**
- * 角色风格样本音频 URL
- */
- private String promptOriginAudioStorageUrl;
-
- }
-
- }
-
-}
-
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java
deleted file mode 100644
index a9857815..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.ruoyi.system.response.rolelist;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author WangLe
- */
-@Data
-public class RoleListResponse {
- /**
- * 状态码
- */
- private String status;
- /**
- * 状态信息
- */
- private String message;
- /**
- * 创建的语音角色详情
- */
- private List data;
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java
deleted file mode 100644
index d610a688..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.ruoyi.system.service;
-
-/**
- * 翻唱用户参考音频Service接口
- *
- * @author NSL
- * @since 2024-12-25
- */
-public interface ICoverPromptAudioService {
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java
deleted file mode 100644
index f6c22bd3..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.vo.cover.CoverCallbackVo;
-import org.ruoyi.system.domain.vo.cover.CoverParamVo;
-import org.ruoyi.system.domain.vo.cover.CoverVo;
-import org.ruoyi.system.domain.vo.cover.MusicVo;
-
-import java.util.List;
-
-/**
- * 翻唱Service接口
- *
- * @author NSL
- * @since 2024-12-25
- */
-public interface ICoverService {
-
- /**
- * 查找歌曲
- *
- * @param musicName 歌曲名称
- * @return 匹配的歌曲信息集合
- */
- List searchMusic(String musicName);
-
- /**
- * 翻唱回调
- *
- * @param coverCallbackVo 回调信息
- */
- void callback(CoverCallbackVo coverCallbackVo);
-
- /**
- * 翻唱歌曲
- *
- * @param coverParamVo 翻唱信息
- */
- void saveCoverTask(CoverParamVo coverParamVo);
-
- /**
- * 查询用户的翻唱记录
- *
- * @return 翻唱记录
- */
- TableDataInfo searchCoverRecord(PageQuery pageQuery);
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java
deleted file mode 100644
index 1ac29b4b..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.PaymentOrdersBo;
-import org.ruoyi.system.domain.request.OrderRequest;
-import org.ruoyi.system.domain.vo.PaymentOrdersVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 支付订单Service接口
- *
- * @author Lion Li
- * @date 2024-04-16
- */
-public interface IPaymentOrdersService {
-
- /**
- * 查询支付订单
- */
- PaymentOrdersVo queryById(Long id);
-
-
- /**
- * 创建支付订单
- */
- PaymentOrdersBo createPayOrder(OrderRequest orderRequest);
-
- /**
- * 修改订单状态为已支付
- *
- */
- void updatePayOrder(OrderRequest orderRequest);
-
-
- /**
- * 查询支付订单列表
- */
- TableDataInfo queryPageList(PaymentOrdersBo bo, PageQuery pageQuery);
-
- /**
- * 查询支付订单列表
- */
- List queryList(PaymentOrdersBo bo);
-
- /**
- * 新增支付订单
- */
- Boolean insertByBo(PaymentOrdersBo bo);
-
- /**
- * 修改支付订单
- */
- Boolean updateByBo(PaymentOrdersBo bo);
-
- /**
- * 校验并批量删除支付订单信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java
deleted file mode 100644
index eb284ab8..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.ruoyi.system.service;
-
-import com.alibaba.fastjson.JSONObject;
-import org.ruoyi.system.domain.vo.ppt.*;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-/**
- * AI_PPT Service接口
- *
- * @author NSL
- * @since 2024-12-30
- */
-public interface IPptService {
- /**
- * 同步流式生成 PPT
- *
- * @param title ppt 标题
- */
- void syncStreamGeneratePpt(String title);
-
- /**
- * 查询 PPT 列表
- *
- * @param pptQueryVo 查询参数
- */
- void selectPptList(PptAllQueryDto pptQueryVo);
-
- /**
- * 分页查询 PPT 模板
- * @param pptQueryVo 查询参数
- */
- JSONObject getPptTemplates(PptTemplateQueryDto pptQueryVo);
-
- /**
- * 生成大纲
- * @param generateOutlineDto 生成大纲参数
- */
- SseEmitter generateOutline(PptGenerateOutlineDto generateOutlineDto);
-
- /**
- * 生成大纲内容
- * @param generateContentDto 生成大纲内容参数
- */
- SseEmitter generateContent(PptGenerateContentDto generateContentDto);
-
- /**
- * 生成ppt
- * @param generatePptxDto 生成PPT参数
- */
- JSONObject generatePptx(PptGeneratePptxDto generatePptxDto);
-
- /**
- * 获取API Token
- * @return 文多多Token
- */
- String getApiToken();
-
- /**
- * 生成PPT成功回调接口
- */
- void successCallback();
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java
deleted file mode 100644
index ac5182c8..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.SysModel;
-import org.ruoyi.system.domain.bo.SysModelBo;
-import org.ruoyi.system.domain.vo.SysModelVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 系统模型Service接口
- *
- * @author Lion Li
- * @date 2024-04-04
- */
-public interface ISysModelService {
-
- /**
- * 查询系统模型
- */
- SysModelVo queryById(Long id);
-
- /**
- * 查询系统模型列表
- */
- TableDataInfo queryPageList(SysModelBo bo, PageQuery pageQuery);
-
- /**
- * 查询系统模型列表
- */
- List queryList(SysModelBo bo);
-
- /**
- * 新增系统模型
- */
- Boolean insertByBo(SysModelBo bo);
-
- /**
- * 修改系统模型
- */
- Boolean updateByBo(SysModelBo bo);
-
- /**
- * 校验并批量删除系统模型信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-
- /**
- * 根据模型名称查询模型
- */
- SysModel selectModelByName(String modelName);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java
deleted file mode 100644
index d8bb5814..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.system.domain.vo.SysPackagePlanVo;
-import org.ruoyi.system.domain.bo.SysPackagePlanBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 套餐管理Service接口
- *
- * @author Lion Li
- * @date 2024-05-05
- */
-public interface ISysPackagePlanService {
-
- /**
- * 查询套餐管理
- */
- SysPackagePlanVo queryById(Long id);
-
- /**
- * 查询套餐管理列表
- */
- TableDataInfo queryPageList(SysPackagePlanBo bo, PageQuery pageQuery);
-
- /**
- * 查询套餐管理列表
- */
- List queryList(SysPackagePlanBo bo);
-
- /**
- * 新增套餐管理
- */
- Boolean insertByBo(SysPackagePlanBo bo);
-
- /**
- * 修改套餐管理
- */
- Boolean updateByBo(SysPackagePlanBo bo);
-
- /**
- * 校验并批量删除套餐管理信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java
deleted file mode 100644
index b0186391..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.SysUserGroupBo;
-import org.ruoyi.system.domain.vo.SysUserGroupVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 【请填写功能名称】Service接口
- *
- * @author Lion Li
- * @date 2024-08-03
- */
-public interface ISysUserGroupService {
-
- /**
- * 查询【请填写功能名称】
- */
- SysUserGroupVo queryById(Long id);
-
- /**
- * 查询【请填写功能名称】列表
- */
- TableDataInfo queryPageList(SysUserGroupBo bo, PageQuery pageQuery);
-
- /**
- * 查询【请填写功能名称】列表
- */
- List queryList(SysUserGroupBo bo);
-
- /**
- * 新增【请填写功能名称】
- */
- Boolean insertByBo(SysUserGroupBo bo);
-
- /**
- * 修改【请填写功能名称】
- */
- Boolean updateByBo(SysUserGroupBo bo);
-
- /**
- * 校验并批量删除【请填写功能名称】信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java
deleted file mode 100644
index 45e2d40d..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.system.domain.vo.SysUserModelVo;
-import org.ruoyi.system.domain.bo.SysUserModelBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 【请填写功能名称】Service接口
- *
- * @author Lion Li
- * @date 2024-08-03
- */
-public interface ISysUserModelService {
-
- /**
- * 查询【请填写功能名称】
- */
- SysUserModelVo queryById(Long id);
-
- /**
- * 查询【请填写功能名称】列表
- */
- TableDataInfo queryPageList(SysUserModelBo bo, PageQuery pageQuery);
-
- /**
- * 查询【请填写功能名称】列表
- */
- List queryList(SysUserModelBo bo);
-
- /**
- * 新增【请填写功能名称】
- */
- Boolean insertByBo(SysUserModelBo bo);
-
- /**
- * 修改【请填写功能名称】
- */
- Boolean updateByBo(SysUserModelBo bo);
-
- /**
- * 校验并批量删除【请填写功能名称】信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java
deleted file mode 100644
index bcfd940f..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.WxRobConfigBo;
-import org.ruoyi.system.domain.vo.WxRobConfigVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 机器人Service接口
- *
- * @author Lion Li
- * @date 2024-05-01
- */
-public interface IWxRobConfigService {
-
- /**
- * 查询机器人
- */
- WxRobConfigVo queryById(Long id);
-
- /**
- * 查询机器人列表
- */
- TableDataInfo queryPageList(WxRobConfigBo bo, PageQuery pageQuery);
-
- /**
- * 查询当前用户绑定的机器人信息
- */
- List queryList(WxRobConfigBo bo);
-
- /**
- * 新增机器人
- */
- Boolean insertByBo(WxRobConfigBo bo);
-
- /**
- * 修改机器人
- */
- Boolean updateByBo(WxRobConfigBo bo);
-
- /**
- * 校验并批量删除机器人信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java
deleted file mode 100644
index 39bb5263..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.WxRobKeywordBo;
-import org.ruoyi.system.domain.vo.WxRobKeywordVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 【请填写功能名称】Service接口
- *
- * @author Lion Li
- * @date 2024-05-01
- */
-public interface IWxRobKeywordService {
-
- /**
- * 查询【请填写功能名称】
- */
- WxRobKeywordVo queryById(Long id);
-
- /**
- * 查询【请填写功能名称】列表
- */
- TableDataInfo queryPageList(WxRobKeywordBo bo, PageQuery pageQuery);
-
- /**
- * 查询【请填写功能名称】列表
- */
- List queryList(WxRobKeywordBo bo);
-
- /**
- * 新增【请填写功能名称】
- */
- Boolean insertByBo(WxRobKeywordBo bo);
-
- /**
- * 修改【请填写功能名称】
- */
- Boolean updateByBo(WxRobKeywordBo bo);
-
- /**
- * 校验并批量删除【请填写功能名称】信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java
deleted file mode 100644
index 4344fbd9..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.ruoyi.system.service;
-
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.WxRobRelationBo;
-import org.ruoyi.system.domain.vo.WxRobRelationVo;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 【请填写功能名称】Service接口
- *
- * @author Lion Li
- * @date 2024-05-01
- */
-public interface IWxRobRelationService {
-
- /**
- * 查询【请填写功能名称】
- */
- WxRobRelationVo queryById(Long id);
-
- /**
- * 查询【请填写功能名称】列表
- */
- TableDataInfo queryPageList(WxRobRelationBo bo, PageQuery pageQuery);
-
- /**
- * 查询【请填写功能名称】列表
- */
- List queryList(WxRobRelationBo bo);
-
- /**
- * 新增【请填写功能名称】
- */
- Boolean insertByBo(WxRobRelationBo bo);
-
- /**
- * 修改【请填写功能名称】
- */
- Boolean updateByBo(WxRobRelationBo bo);
-
- /**
- * 校验并批量删除【请填写功能名称】信息
- */
- Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java
deleted file mode 100644
index 6cf778c5..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.ruoyi.system.service;
-
-/**
- * @Author 公众号:程序猿阿朗
- */
-public interface WeixinUserService {
-
- void checkSignature(String signature, String timestamp, String nonce);
-
- String handleWeixinMsg(String body);
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java
deleted file mode 100644
index 51200fc8..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import jakarta.annotation.Resource;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.system.mapper.CoverPromptAudioMapper;
-import org.ruoyi.system.service.ICoverPromptAudioService;
-import org.springframework.stereotype.Service;
-
-/**
- * 翻唱用户参考音频Service业务层处理
- *
- * @author NSL
- * @since 2024-12-25
- */
-@Service
-@Slf4j
-public class CoverPromptAudioServiceImpl implements ICoverPromptAudioService {
-
- @Resource
- private CoverPromptAudioMapper coverPromptAudioMapper;
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
deleted file mode 100644
index 4b6d96ef..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.dev33.satoken.exception.NotLoginException;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.lang.TypeReference;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import okhttp3.Request;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.wechat.itchat4j.utils.enums.ResultEnum;
-import org.ruoyi.system.cofing.OkHttpConfig;
-import org.ruoyi.system.domain.Cover;
-import org.ruoyi.system.domain.CoverPromptAudio;
-import org.ruoyi.system.domain.model.ApiResult;
-import org.ruoyi.system.domain.vo.cover.*;
-import org.ruoyi.system.mapper.CoverMapper;
-import org.ruoyi.system.mapper.CoverPromptAudioMapper;
-import org.ruoyi.system.service.ICoverService;
-import org.ruoyi.system.util.WeChatScanHttpUtil;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import static org.ruoyi.common.satoken.utils.LoginHelper.getLoginUser;
-
-/**
- * 翻唱Service业务层处理
- *
- * @author NSL
- * @since 2024-12-25
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class CoverServiceImpl implements ICoverService {
-
- private final CoverMapper coverMapper;
- private final CoverPromptAudioMapper coverPromptAudioMapper;
- private final ConfigService configService;
- private final IChatCostService chatCostService;
- private final WeChatScanHttpUtil weChatScanHttpUtil;
- private final OkHttpConfig okHttpConfig;
-
- @Override
- public List searchMusic(String musicName) {
- Map queryMap = new HashMap<>();
- queryMap.put("keyword", musicName);
- String json = JSONUtil.toJsonStr(queryMap);
- Request postRequest = weChatScanHttpUtil.createPostRequest(getKey("search_music_url"), json);
- String body = weChatScanHttpUtil.executeRequest(postRequest);
- ApiResult apiResult = JSONUtil.toBean(body, ApiResult.class);
- Object data = apiResult.getData();
- Map> userMap = JSONUtil.toBean(JSONUtil.toJsonStr(data), new TypeReference<>() {}, true);
- return userMap.get("musicList");
- }
-
- @Override
- public void callback(CoverCallbackVo coverCallbackVo) {
- Cover cover = BeanUtil.copyProperties(coverCallbackVo, Cover.class);
- coverMapper.insertOrUpdate(cover);
- }
-
- @Override
- public void saveCoverTask(CoverParamVo coverParamVo) {
- Long userId = null;
- try {
- userId = getLoginUser().getUserId();
- } catch (Exception e) {
- throw new NotLoginException(NotLoginException.NOT_TOKEN_MESSAGE, NotLoginException.NOT_TOKEN, NotLoginException.NOT_TOKEN);
- }
- List promptAudioUrl = coverParamVo.getPromptAudioUrl();
- Cover cover = BeanUtil.copyProperties(coverParamVo, Cover.class);
- cover.setUserId(userId);
- coverMapper.insertOrUpdate(cover);
- if (CollUtil.isEmpty(promptAudioUrl)) {
- // 查询用户最近一次翻唱记录
- List coverPromptAudioVoList = coverPromptAudioMapper.selectLatestVoByUserId(userId);
- if (CollUtil.isEmpty(coverPromptAudioVoList)) {
- throw new BaseException("未查询到翻唱记录,请上传参考音频!");
- }
- List promptAudioUrlList = coverPromptAudioVoList.stream().map(CoverPromptAudioVo::getPromptAudioUrl).collect(Collectors.toList());
- coverParamVo.setPromptAudioUrl(promptAudioUrlList);
- } else {
- // 保存用户翻唱记录
- for (String audioUrl : promptAudioUrl) {
- CoverPromptAudio coverPromptAudio = new CoverPromptAudio();
- coverPromptAudio.setPromptAudioUrl(audioUrl);
- coverPromptAudio.setUserId(userId);
- coverPromptAudio.setCoverId(cover.getId());
- coverPromptAudioMapper.insertOrUpdate(coverPromptAudio);
- }
- }
- coverParamVo.setUserId(String.valueOf(userId));
- coverParamVo.setOrderId(String.valueOf(cover.getId()));
- coverParamVo.setUserGender("");
- log.info("发起翻唱任务,入参{}", JSONUtil.toJsonStr(coverParamVo));
- // 调用翻唱API
- Request postRequest = weChatScanHttpUtil.createPostRequest(getKey("cover_url"), JSONUtil.toJsonStr(coverParamVo));
- String body = weChatScanHttpUtil.executeRequest(postRequest);
- ApiResult apiResult = JSONUtil.toBean(body, ApiResult.class);
- if (ResultEnum.SUCCESS.getCode().equals(String.valueOf(apiResult.getCode()))) {
- // 扣费
- chatCostService.taskDeduct("cover", "token", NumberUtils.toDouble(okHttpConfig.getGenerate(), 2.5));
- }
- log.info("调用翻唱结果,出参{}", body);
- }
-
- @Override
- public TableDataInfo searchCoverRecord(PageQuery pageQuery) {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
- queryWrapper.eq(Cover::getUserId, getLoginUser().getUserId());
- queryWrapper.orderByDesc(Cover::getCreateTime);
- Page result = coverMapper.selectVoPage(pageQuery.build(), queryWrapper);
- return TableDataInfo.build(result);
- }
-
- public String getKey(String key) {
- return configService.getConfigValue("cover", key);
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java
deleted file mode 100644
index 1415aaa1..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.PaymentOrder;
-import org.ruoyi.system.domain.SysUser;
-import org.ruoyi.system.domain.bo.PaymentOrdersBo;
-import org.ruoyi.system.domain.bo.SysPackagePlanBo;
-import org.ruoyi.system.domain.bo.SysUserBo;
-import org.ruoyi.system.domain.request.OrderRequest;
-import org.ruoyi.system.domain.vo.PaymentOrdersVo;
-import org.ruoyi.system.domain.vo.SysPackagePlanVo;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.mapper.PaymentOrdersMapper;
-import org.ruoyi.system.mapper.SysUserMapper;
-import org.ruoyi.system.service.IPaymentOrdersService;
-import org.ruoyi.system.service.ISysPackagePlanService;
-import org.ruoyi.system.service.ISysUserService;
-import org.ruoyi.system.util.OrderNumberGenerator;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 支付订单Service业务层处理
- *
- * @author Lion Li
- * @date 2024-04-16
- */
-@RequiredArgsConstructor
-@Service
-public class PaymentOrdersServiceImpl implements IPaymentOrdersService {
-
- private final PaymentOrdersMapper baseMapper;
-
- private final SysUserMapper sysUserMapper;
-
- private final ISysUserService userService;
-
- private final ISysPackagePlanService planService;
-
- /**
- * 查询支付订单
- */
- @Override
- public PaymentOrdersVo queryById(Long id){
- return baseMapper.selectVoById(id);
- }
-
- /**
- * 创建支付订单
- */
- @Override
- public PaymentOrdersBo createPayOrder(OrderRequest orderRequest) {
- LoginUser loginUser = LoginHelper.getLoginUser();
- PaymentOrdersBo paymentOrder = new PaymentOrdersBo();
- paymentOrder.setOrderName(orderRequest.getName());
- paymentOrder.setAmount(new BigDecimal(orderRequest.getMoney()));
- paymentOrder.setOrderNo(OrderNumberGenerator.generate());
- paymentOrder.setUserId(loginUser.getUserId());
- // TODO 支付状态默认待支付 - 添加枚举
- paymentOrder.setPaymentStatus("1");
- // 保存支付订单
- insertByBo(paymentOrder);
- return paymentOrder;
- }
-
- /**
- * 修改订单状态为已支付
- *
- */
- @Override
- public void updatePayOrder(OrderRequest orderRequest) {
- PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
- paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
- List paymentOrdersList = queryList(paymentOrdersBo);
- if (CollectionUtil.isEmpty(paymentOrdersList)){
- throw new BaseException("订单不存在!");
- }
- // 根据价格查询套餐
- SysPackagePlanBo sysPackagePlanBo = new SysPackagePlanBo();
- sysPackagePlanBo.setPrice(new BigDecimal(orderRequest.getMoney()));
- SysPackagePlanVo sysPackagePlanVo = planService.queryList(sysPackagePlanBo).get(0);
-
-
- // 订单状态修改为已支付
- PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
- // 1 未支付 2未支付
- paymentOrdersVo.setPaymentStatus("2");
- paymentOrdersVo.setPaymentMethod(orderRequest.getPayType());
- BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
- updateByBo(paymentOrdersBo);
- // 用户充值费用
- double money = paymentOrdersBo.getAmount().doubleValue();
- SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
- sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
- SysUserBo sysUserBo = new SysUserBo();
- BeanUtil.copyProperties(sysUserVo,sysUserBo);
- // 设置为付费用户
- sysUserBo.setUserGrade("1");
- sysUserBo.setUserPlan(sysPackagePlanVo.getId().toString());
- userService.updateUser(sysUserBo);
- }
-
- /**
- * 查询支付订单列表
- */
- @Override
- public TableDataInfo queryPageList(PaymentOrdersBo bo, PageQuery pageQuery) {
- LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
- if(CollectionUtil.isEmpty(result.getRecords())){
- return TableDataInfo.build(result);
- }
- // 获取所有userId
- List userIds = result.getRecords().stream()
- .map(PaymentOrdersVo::getUserId)
- .collect(Collectors.toList());
- // 一次性查询所有userName
- Map userIdToUserNameMap = getUserNamesByUserIds(userIds);
- // 设置userName
- result.getRecords().forEach(paymentOrderVo -> {
- paymentOrderVo.setUserName(userIdToUserNameMap.get(paymentOrderVo.getUserId()));
- });
- return TableDataInfo.build(result);
- }
- private Map getUserNamesByUserIds(List userIds) {
- // 实现批量查询userName的逻辑,例如通过sysUserMapper查询sys_user表
- List sysUsers = sysUserMapper.selectBatchIds(userIds);
- return sysUsers.stream()
- .collect(Collectors.toMap(SysUser::getUserId, SysUser::getUserName));
- }
-
- /**
- * 查询支付订单列表
- */
- @Override
- public List queryList(PaymentOrdersBo bo) {
- LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- return baseMapper.selectVoList(lqw);
- }
-
- private LambdaQueryWrapper buildQueryWrapper(PaymentOrdersBo bo) {
- Map params = bo.getParams();
- LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), PaymentOrder::getOrderNo, bo.getOrderNo());
- lqw.like(StringUtils.isNotBlank(bo.getOrderName()), PaymentOrder::getOrderName, bo.getOrderName());
- lqw.eq(bo.getAmount() != null, PaymentOrder::getAmount, bo.getAmount());
- lqw.eq(StringUtils.isNotBlank(bo.getPaymentStatus()), PaymentOrder::getPaymentStatus, bo.getPaymentStatus());
- lqw.eq(StringUtils.isNotBlank(bo.getPaymentMethod()), PaymentOrder::getPaymentMethod, bo.getPaymentMethod());
- lqw.eq(bo.getUserId() != null, PaymentOrder::getUserId, bo.getUserId());
- return lqw;
- }
-
- /**
- * 新增支付订单
- */
- @Override
- public Boolean insertByBo(PaymentOrdersBo bo) {
- PaymentOrder add = MapstructUtils.convert(bo, PaymentOrder.class);
- validEntityBeforeSave(add);
- boolean flag = baseMapper.insert(add) > 0;
- if (flag) {
- bo.setId(add.getId());
- }
- return flag;
- }
-
- /**
- * 修改支付订单
- */
- @Override
- public Boolean updateByBo(PaymentOrdersBo bo) {
- PaymentOrder update = MapstructUtils.convert(bo, PaymentOrder.class);
- validEntityBeforeSave(update);
- return baseMapper.updateById(update) > 0;
- }
-
- /**
- * 保存前的数据校验
- */
- private void validEntityBeforeSave(PaymentOrder entity){
- //TODO 做一些数据校验,如唯一约束
- }
-
- /**
- * 批量删除支付订单
- */
- @Override
- public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
- if(isValid){
- //TODO 做一些业务上的校验,判断是否需要校验
- }
- return baseMapper.deleteBatchIds(ids) > 0;
- }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
deleted file mode 100644
index a3f17e94..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.dev33.satoken.exception.NotLoginException;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
-import com.alibaba.fastjson.JSONObject;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.ruoyi.common.core.constant.Constants;
-import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.redis.utils.RedisUtils;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.cofing.OkHttpConfig;
-import org.ruoyi.system.domain.vo.ppt.*;
-import org.ruoyi.system.service.IPptService;
-import org.ruoyi.system.util.HttpUtils;
-import org.ruoyi.system.util.WddPptApi;
-import org.springframework.stereotype.Service;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-import javax.swing.filechooser.FileSystemView;
-import java.io.File;
-import java.time.Duration;
-
-/**
- * AI-PPTService业务层处理
- *
- * @author NSL
- * @since 2024-12-30
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class PptServiceImpl implements IPptService {
-
- private final OkHttpConfig okHttpConfig;
- private final ConfigService configService;
- private final IChatCostService chatCostService;
-
- @Override
- public void syncStreamGeneratePpt(String title) {
- // 创建 api token (有效期2小时,同一个 uid 创建时之前的 token 会在10秒内失效)
- String apiToken = getApiToken();
- // 生成大纲
- System.out.println("\n\n========== 正在生成大纲 ==========");
- String outline = WddPptApi.generateOutline(apiToken, title, null, null);
-
- // 生成大纲内容
- System.out.println("\n\n========== 正在生成大纲内容 ==========");
- String markdown = WddPptApi.generateContent(apiToken, outline, null, null);
-
- // 随机一个模板
- System.out.println("\n\n========== 随机选择模板 ==========");
- String templateId = WddPptApi.randomOneTemplateId(apiToken);
- System.out.println(templateId);
-
- // 生成PPT
- System.out.println("\n\n========== 正在生成PPT ==========");
- JSONObject pptInfo = WddPptApi.generatePptx(apiToken, templateId, markdown, false);
- String pptId = pptInfo.getString("id");
- System.out.println("pptId: " + pptId);
- System.out.println("ppt主题:" + pptInfo.getString("subject"));
- System.out.println("ppt封面:" + pptInfo.getString("coverUrl") + "?token=" + apiToken);
-
- // 下载PPT到桌面
- System.out.println("\n\n========== 正在下载PPT ==========");
- JSONObject result = WddPptApi.downloadPptx(apiToken, pptId);
- String url = result.getString("fileUrl");
- System.out.println("ppt链接:" + url);
- String savePath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + pptId + ".pptx";
- try {
- HttpUtils.download(url, new File(savePath));
- } catch (Exception e) {
-
- }
- System.out.println("ppt下载完成,保存路径:" + savePath);
- }
-
- @Override
- public void selectPptList(PptAllQueryDto pptQueryVo) {
- String apiToken = getApiToken();
- // todo 无权限访问
- JSONObject jsonObject = WddPptApi.listAllPptx(apiToken, JSONUtil.toJsonStr(pptQueryVo));
- System.out.println(jsonObject);
- }
-
- @Override
- public JSONObject getPptTemplates(PptTemplateQueryDto pptQueryVo) {
- return WddPptApi.getPptTemplates(getApiToken(), JSONUtil.toJsonStr(pptQueryVo));
- }
-
- @Override
- public SseEmitter generateOutline(PptGenerateOutlineDto generateOutlineDto) {
- return WddPptApi.sseGenerateOutline(getApiToken(), generateOutlineDto.getSubject(), generateOutlineDto.getDataUrl(), generateOutlineDto.getPrompt());
- }
-
- @Override
- public SseEmitter generateContent(PptGenerateContentDto generateContentDto) {
- return WddPptApi.sseGenerateContent(getApiToken(), generateContentDto.getOutlineMarkdown(), generateContentDto.getDataUrl(), generateContentDto.getPrompt());
- }
-
- @Override
- public JSONObject generatePptx(PptGeneratePptxDto generatePptxDto) {
- return WddPptApi.generatePptx(getApiToken(), generatePptxDto.getTemplateId(), generatePptxDto.getOutlineContentMarkdown(), generatePptxDto.isPptxProperty());
- }
-
- public String getKey(String key) {
- return configService.getConfigValue("ppt", key);
- }
-
- @Override
- public String getApiToken() {
- LoginUser loginUser = null;
- try {
- loginUser = LoginHelper.getLoginUser();
- } catch (Exception e) {
- throw new NotLoginException(NotLoginException.NOT_TOKEN_MESSAGE, NotLoginException.NOT_TOKEN, NotLoginException.NOT_TOKEN);
- }
- String userId = String.valueOf(loginUser.getUserId());
- // 创建 api token (有效期2小时,同一个 uid 创建时之前的 token 会在10秒内失效)
- String apiToken = RedisUtils.getCacheObject(Constants.WDD_TOKEN_KEY + userId);
- if (StrUtil.isEmpty(apiToken)) {
- apiToken = WddPptApi.createApiToken(getKey("apiKey"), userId, null);
- RedisUtils.setCacheObject(Constants.WDD_TOKEN_KEY, apiToken, Duration.ofMinutes(Constants.WDD_TOKEN_EXPIRATION));
- }
- return apiToken;
- }
-
- @Override
- public void successCallback() {
- // 扣费
- chatCostService.taskDeduct("ppt", "AI-PPT", NumberUtils.toDouble(okHttpConfig.getGenerate(), 1.1));
- }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java
deleted file mode 100644
index 807650d9..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java
+++ /dev/null
@@ -1,685 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.dev33.satoken.stp.StpUtil;
-import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.zhipu.oapi.ClientV4;
-import com.zhipu.oapi.service.v4.tools.*;
-import io.github.ollama4j.OllamaAPI;
-import io.github.ollama4j.models.chat.OllamaChatMessage;
-import io.github.ollama4j.models.chat.OllamaChatMessageRole;
-import io.github.ollama4j.models.chat.OllamaChatRequestBuilder;
-import io.github.ollama4j.models.chat.OllamaChatRequestModel;
-import io.github.ollama4j.models.generate.OllamaStreamHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import okhttp3.*;
-import org.ruoyi.common.chat.config.ChatConfig;
-import org.ruoyi.common.chat.config.LocalCache;
-import org.ruoyi.common.chat.domain.request.ChatRequest;
-import org.ruoyi.common.chat.domain.request.Dall3Request;
-import org.ruoyi.common.chat.entity.Tts.TextToSpeech;
-import org.ruoyi.common.chat.entity.chat.*;
-import org.ruoyi.common.chat.entity.files.UploadFileResponse;
-import org.ruoyi.common.chat.entity.images.Image;
-import org.ruoyi.common.chat.entity.images.ImageResponse;
-import org.ruoyi.common.chat.entity.images.Item;
-import org.ruoyi.common.chat.entity.images.ResponseFormat;
-import org.ruoyi.common.chat.entity.whisper.WhisperResponse;
-import org.ruoyi.common.chat.openai.OpenAiStreamClient;
-import org.ruoyi.common.chat.openai.plugin.PluginAbstract;
-import org.ruoyi.common.chat.plugin.CmdPlugin;
-import org.ruoyi.common.chat.plugin.CmdReq;
-import org.ruoyi.common.chat.plugin.SqlPlugin;
-import org.ruoyi.common.chat.plugin.SqlReq;
-import org.ruoyi.common.chat.utils.TikTokensUtil;
-import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.core.utils.file.FileUtils;
-import org.ruoyi.common.core.utils.file.MimeTypeUtils;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.SysModel;
-import org.ruoyi.system.domain.request.translation.TranslationRequest;
-import org.ruoyi.system.listener.SSEEventSourceListener;
-import org.ruoyi.system.service.*;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.core.io.Resource;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLEncoder;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-
-@Service
-@Slf4j
-@RequiredArgsConstructor
-public class SseServiceImpl implements ISseService {
-
- private OpenAiStreamClient openAiStreamClient;
-
- ChatConfig chatConfig;
-
- private final IChatCostService chatService;
-
- private final IChatMessageService chatMessageService;
-
- private final ISysModelService sysModelService;
-
- private final ConfigService configService;
-
- private final IChatGptsService chatGptsService;
-
- static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
-
- private static final String requestIdTemplate = "mycompany-%d";
-
- private static final ObjectMapper mapper = new ObjectMapper();
-
- @Override
- public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) {
- openAiStreamClient = chatConfig.getOpenAiStreamClient();
- SseEmitter sseEmitter = new SseEmitter(0L);
- SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter);
- // 获取对话消息列表
- List messages = chatRequest.getMessages();
-
- try {
- String chatString = null;
- Object content = messages.get(messages.size() - 1).getContent();
- if (content instanceof List> listContent) {
- if (!listContent.isEmpty() && listContent.get(0) instanceof Content) {
- chatString = ((Content) listContent.get(0)).getText();
- }
- } else if (content instanceof String) {
- chatString = (String) content;
- }
-
- String configValue = getKey("enabled");
- if (Boolean.parseBoolean(configValue)) {
- // 判断文本是否合规
- String type = textReview(chatString);
- // 审核状态 1 代表合法
- if (!"1".equals(type) && StringUtils.isNotEmpty(type)) {
- throw new BaseException("文本不合规,请修改!");
- }
- }
-
- if (StpUtil.isLogin()) {
- LocalCache.CACHE.put("userId", getUserId());
-
- ChatMessageBo chatMessageBo = new ChatMessageBo();
- chatMessageBo.setUserId(getUserId());
- chatMessageBo.setModelName(chatRequest.getModel());
- chatMessageBo.setContent(chatString);
-
- String model = chatRequest.getModel();
- SysModel sysModel = sysModelService.selectModelByName(model);
- if (sysModel == null) {
- // 如果模型不存在默认使用token扣费方式
- processByToken(chatRequest.getModel(), chatString, chatMessageBo);
- } else {
- openAiStreamClient = chatConfig.createOpenAiStreamClient(sysModel.getApiHost(), sysModel.getApiKey());
- if (StringUtils.isNotEmpty(chatRequest.getAppId())) { // 设置应用的系统角色为描述
- ChatGptsVo chatGptsVo = chatGptsService.queryById(Long.valueOf(chatRequest.getAppId()));
- Message sysMessage = Message.builder().content(chatGptsVo.getSystemPrompt()).role(Message.Role.SYSTEM).build();
- messages.add(0,sysMessage);
- } else {
- // 模型设置默认提示词
- if (StringUtils.isNotEmpty(sysModel.getSystemPrompt())) {
- Message sysMessage = Message.builder().content(sysModel.getSystemPrompt()).role(Message.Role.SYSTEM).build();
- messages.add(0,sysMessage);
- }
- }
- // 计费类型: 1 token扣费 2 次数扣费
- if ("2".equals(sysModel.getModelType())) {
- processByModelPrice(sysModel, chatMessageBo);
- } else {
- processByToken(chatRequest.getModel(), chatString, chatMessageBo);
- }
- }
- }
- String zhipuValue = configService.getConfigValue("zhipu", "key");
- // 添加联网信息
- if(StringUtils.isNotEmpty(zhipuValue)){
- ClientV4 client = new ClientV4.Builder(zhipuValue)
- .networkConfig(300, 100, 100, 100, TimeUnit.SECONDS)
- .connectionPool(new okhttp3.ConnectionPool(8, 1, TimeUnit.SECONDS))
- .build();
-
- SearchChatMessage jsonNodes = new SearchChatMessage();
- jsonNodes.setRole(Message.Role.USER.getName());
- jsonNodes.setContent(chatString);
-
- String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
- WebSearchParamsRequest chatCompletionRequest = WebSearchParamsRequest.builder()
- .model("web-search-pro")
- .stream(Boolean.TRUE)
- .messages(Collections.singletonList(jsonNodes))
- .requestId(requestId)
- .build();
- WebSearchApiResponse webSearchApiResponse = client.webSearchProStreamingInvoke(chatCompletionRequest);
- List choices = new ArrayList<>();
- if (webSearchApiResponse.isSuccess()) {
- AtomicBoolean isFirst = new AtomicBoolean(true);
-
- AtomicReference lastAccumulator = new AtomicReference<>();
-
- webSearchApiResponse.getFlowable().map(result -> result)
- .doOnNext(accumulator -> {
- {
- if (isFirst.getAndSet(false)) {
- log.info("Response: ");
- }
- ChoiceDelta delta = accumulator.getChoices().get(0).getDelta();
- if (delta != null && delta.getToolCalls() != null) {
- log.info("tool_calls: {}", mapper.writeValueAsString(delta.getToolCalls()));
- }
- choices.add(delta);
- }
- })
- .doOnComplete(() -> System.out.println("Stream completed."))
- .doOnError(throwable -> System.err.println("Error: " + throwable))
- .blockingSubscribe();
-
- WebSearchPro chatMessageAccumulator = lastAccumulator.get();
-
- webSearchApiResponse.setFlowable(null);// 打印前置空
- webSearchApiResponse.setData(chatMessageAccumulator);
- }
-
-
- Message message = Message.builder().role(Message.Role.ASSISTANT).content(choices.get(1).getToolCalls().toString()).build();
- messages.add(message);
- }
-
- if ("openCmd".equals(chatRequest.getModel())) {
- sseEmitter.send(cmdPlugin(messages));
- sseEmitter.complete();
- } else if ("sqlPlugin".equals(chatRequest.getModel())) {
- sseEmitter.send(sqlPlugin(messages));
- sseEmitter.complete();
- } else {
- ChatCompletion completion = ChatCompletion
- .builder()
- .messages(messages)
- .model(chatRequest.getModel())
- .temperature(chatRequest.getTemperature())
- .topP(chatRequest.getTop_p())
- .stream(true)
- .build();
- openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener);
- }
- } catch (Exception e) {
- String message = e.getMessage();
- sendErrorEvent(sseEmitter, message);
- return sseEmitter;
- }
- return sseEmitter;
- }
-
- public String cmdPlugin(List messages) {
- CmdPlugin plugin = new CmdPlugin(CmdReq.class);
- // 插件名称
- plugin.setName("命令行工具");
- // 方法名称
- plugin.setFunction("openCmd");
- // 方法说明
- plugin.setDescription("提供一个命令行指令,比如<记事本>,指令使用中文");
-
- PluginAbstract.Arg arg = new PluginAbstract.Arg();
- // 参数名称
- arg.setName("cmd");
- // 参数说明
- arg.setDescription("命令行指令");
- // 参数类型
- arg.setType("string");
- arg.setRequired(true);
- plugin.setArgs(Collections.singletonList(arg));
- //有四个重载方法,都可以使用
- ChatCompletionResponse response = openAiStreamClient.chatCompletionWithPlugin(messages,"gpt-4o-mini",plugin);
- return response.getChoices().get(0).getMessage().getContent().toString();
- }
-
- public String sqlPlugin(List messages) {
- SqlPlugin plugin = new SqlPlugin(SqlReq.class);
- // 插件名称
- plugin.setName("数据库查询插件");
- // 方法名称
- plugin.setFunction("sqlPlugin");
- // 方法说明
- plugin.setDescription("提供一个用户名称查询余额信息");
-
- PluginAbstract.Arg arg = new PluginAbstract.Arg();
- // 参数名称
- arg.setName("username");
- // 参数说明
- arg.setDescription("用户名称");
- // 参数类型
- arg.setType("string");
- arg.setRequired(true);
- plugin.setArgs(Collections.singletonList(arg));
- //有四个重载方法,都可以使用
- ChatCompletionResponse response = openAiStreamClient.chatCompletionWithPlugin(messages,"gpt-4o-mini",plugin);
- return response.getChoices().get(0).getMessage().getContent().toString();
- }
-
- /**
- * 根据次数扣除余额
- *
- * @param model 模型信息
- * @param chatMessageBo 对话信息
- */
- private void processByModelPrice(SysModel model, ChatMessageBo chatMessageBo) {
- double cost = model.getModelPrice();
- chatService.deductUserBalance(getUserId(), cost);
- chatMessageBo.setDeductCost(cost);
- chatMessageService.insertByBo(chatMessageBo);
- }
-
- /**
- * 根据token扣除余额
- *
- * @param modelName 模型名称
- * @param text 消息内容
- * @param chatMessageBo 消息记录
- */
- private void processByToken(String modelName, String text, ChatMessageBo chatMessageBo) {
- int tokens = TikTokensUtil.tokens(modelName, text);
- chatMessageBo.setTotalTokens(tokens);
- chatService.deductToken(chatMessageBo);
- }
-
- /**
- * 文字转语音
- */
- @Override
- public ResponseEntity textToSpeed(TextToSpeech textToSpeech) {
- ResponseBody body = openAiStreamClient.textToSpeech(textToSpeech);
- if (body != null) {
- // 将ResponseBody转换为InputStreamResource
- InputStreamResource resource = new InputStreamResource(body.byteStream());
-
- // 创建并返回ResponseEntity
- return ResponseEntity.ok()
- .contentType(MediaType.parseMediaType("audio/mpeg"))
- .body(resource);
- } else {
- // 如果ResponseBody为空,返回404状态码
- return ResponseEntity.notFound().build();
- }
- }
-
-
- /**
- * 语音转文字
- */
- @Override
- public WhisperResponse speechToTextTranscriptionsV2(MultipartFile file) {
- // 确保文件不为空
- if (file.isEmpty()) {
- throw new IllegalStateException("Cannot convert an empty MultipartFile");
- }
- if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.AUDIO__EXTENSION)) {
- throw new IllegalStateException("File Extention not supported");
- }
- // 创建一个文件对象
- File fileA = new File(System.getProperty("java.io.tmpdir") + File.separator + file.getOriginalFilename());
- try {
- // 将 MultipartFile 的内容写入文件
- file.transferTo(fileA);
- } catch (IOException e) {
- throw new RuntimeException("Failed to convert MultipartFile to File", e);
- }
- return openAiStreamClient.speechToTextTranscriptions(fileA);
- }
-
- @Override
- public String chat(ChatRequest chatRequest, String userId) {
- return null;
- }
-
- /**
- * dall-e-3绘画接口
- *
- * @param request
- * @return
- */
- @Override
- public List- dall3(Dall3Request request) {
- openAiStreamClient = chatConfig.getOpenAiStreamClient();
- chatService.checkUserGrade();
- // DALL3 绘图模型
- Image image = Image.builder()
- .responseFormat(ResponseFormat.URL.getName())
- .model(Image.Model.DALL_E_3.getName())
- .prompt(request.getPrompt())
- .n(1)
- .quality(request.getQuality())
- .size(request.getSize())
- .style(request.getStyle())
- .build();
- ImageResponse imageResponse = openAiStreamClient.genImages(image);
- SysModel sysModel = sysModelService.selectModelByName(request.getModel());
- //chatService.deductUserBalance(getUserId(),sysModelList.get(0).getModelPrice());
- // 保存消息记录
- ChatMessageBo chatMessageBo = new ChatMessageBo();
- chatMessageBo.setUserId(getUserId());
- chatMessageBo.setModelName(Image.Model.DALL_E_3.getName());
- chatMessageBo.setContent(request.getPrompt());
- chatMessageBo.setDeductCost(sysModel.getModelPrice());
- chatMessageBo.setTotalTokens(0);
- chatMessageService.insertByBo(chatMessageBo);
- return imageResponse.getData();
- }
-
- @Override
- public List
- wxDall(String prompt, String userId) {
- openAiStreamClient = chatConfig.getOpenAiStreamClient();
- // DALL3 绘图模型
- Image image = Image.builder()
- .responseFormat(ResponseFormat.URL.getName())
- .model(Image.Model.DALL_E_3.getName())
- .prompt(prompt)
- .n(1)
- .build();
- ImageResponse imageResponse = openAiStreamClient.genImages(image);
- SysModel dall3 = sysModelService.selectModelByName("dall3");
- chatService.deductUserBalance(Long.valueOf(userId), 0.3);
- // 保存消息记录
- ChatMessageBo chatMessageBo = new ChatMessageBo();
- chatMessageBo.setUserId(getUserId());
- chatMessageBo.setModelName(Image.Model.DALL_E_3.getName());
- chatMessageBo.setContent(prompt);
- chatMessageBo.setDeductCost(dall3.getModelPrice());
- chatMessageBo.setTotalTokens(0);
- chatMessageService.insertByBo(chatMessageBo);
- return imageResponse.getData();
- }
-
- /**
- * 获取用户Id
- *
- * @return
- */
- public Long getUserId() {
- LoginUser loginUser = LoginHelper.getLoginUser();
- if (loginUser == null) {
- throw new BaseException("用户未登录!");
- }
- return loginUser.getUserId();
- }
-
- @Override
- public UploadFileResponse upload(MultipartFile file) {
- if (file.isEmpty()) {
- throw new IllegalStateException("Cannot upload an empty MultipartFile");
- }
- if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION)) {
- throw new IllegalStateException("File Extention not supported");
- }
- openAiStreamClient = chatConfig.getOpenAiStreamClient();
- return openAiStreamClient.uploadFile("fine-tune", convertMultiPartToFile(file));
- }
-
- private File convertMultiPartToFile(MultipartFile multipartFile) {
- File file = null;
- try {
- // 获取原始文件名
- String originalFileName = multipartFile.getOriginalFilename();
- // 默认扩展名
- String extension = ".tmp";
- // 尝试从原始文件名中获取扩展名
- if (originalFileName != null && originalFileName.contains(".")) {
- extension = originalFileName.substring(originalFileName.lastIndexOf("."));
- }
-
- // 使用原始文件的扩展名创建临时文件
- Path tempFile = Files.createTempFile(null, extension);
- file = tempFile.toFile();
-
- // 将MultipartFile的内容写入文件
- try (InputStream inputStream = multipartFile.getInputStream();
- FileOutputStream outputStream = new FileOutputStream(file)) {
- int read;
- byte[] bytes = new byte[1024];
- while ((read = inputStream.read(bytes)) != -1) {
- outputStream.write(bytes, 0, read);
- }
- } catch (IOException e) {
- // 处理文件写入异常
- e.printStackTrace();
- }
- } catch (IOException e) {
- // 处理临时文件创建异常
- e.printStackTrace();
- }
- return file;
- }
-
- // 发送SSE错误事件的封装方法
- private void sendErrorEvent(SseEmitter sseEmitter, String errorMessage) {
- SseEmitter.SseEventBuilder event = SseEmitter.event()
- .name("error")
- .data(errorMessage);
- try {
- sseEmitter.send(event);
- } catch (IOException e) {
- log.error("发送事件失败: {}", e.getMessage());
- }
- sseEmitter.complete();
- }
-
- /**
- * 文本内容审核
- *
- * @param msg
- * @return String
- * @Date 2023/5/27
- **/
- public String textReview(String msg) {
- String conclusionType = "";
- try {
- String text = URLEncoder.encode(msg);
- okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/x-www-form-urlencoded");
- RequestBody body = RequestBody.create(mediaType, "text=" + text);
- Request request = new Request.Builder()
- .url("https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=" + getAccessToken())
- .method("POST", body)
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .addHeader("Accept", "application/json")
- .build();
- Response response = HTTP_CLIENT.newCall(request).execute();
- JSONObject jsonObject = JSONObject.parseObject(response.body().string());
- conclusionType = jsonObject.getString("conclusionType");
- } catch (IOException e) {
- log.info("发生错误{}", e.getMessage());
- }
- return conclusionType;
- }
-
- /**
- * 从用户的AK,SK生成鉴权签名(Access Token)
- *
- * @return 鉴权签名(Access Token)
- * @throws IOException IO异常
- */
- public String getAccessToken() throws IOException {
- okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/x-www-form-urlencoded");
- RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + getKey("apiKey")
- + "&client_secret=" + getKey("secretKey"));
- Request request = new Request.Builder()
- .url("https://aip.baidubce.com/oauth/2.0/token")
- .method("POST", body)
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .build();
- Response response = HTTP_CLIENT.newCall(request).execute();
- return JSONObject.parseObject(response.body().string()).getString("access_token");
- }
-
- public String getKey(String key) {
- return configService.getConfigValue("review", key);
- }
-
- /**
- * 获取客户端的 IP 地址
- *
- * @param request HTTP 请求对象
- * @return 客户端的 IP 地址,如果无法获取则返回 "unknown"
- */
- public static String getClientIpAddress(HttpServletRequest request) {
- String ipAddress = request.getHeader("X-Forwarded-For");
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress.split(",")[0].trim();
- }
-
- ipAddress = request.getHeader("Proxy-Client-IP");
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress;
- }
-
- ipAddress = request.getHeader("WL-Proxy-Client-IP");
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress;
- }
-
- ipAddress = request.getHeader("HTTP_CLIENT_IP");
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress;
- }
-
- ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress;
- }
-
- ipAddress = request.getRemoteAddr();
- if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) {
- return ipAddress;
- }
-
- return "unknown";
- }
-
-
- @Override
- public String translation(TranslationRequest translationRequest) {
- // 翻译模型固定为gpt-4o-mini
- translationRequest.setModel("gpt-4o-mini");
- ChatMessageBo chatMessageBo = new ChatMessageBo();
- chatMessageBo.setUserId(getUserId());
- chatMessageBo.setModelName(translationRequest.getModel());
- chatMessageBo.setContent(translationRequest.getPrompt());
- chatMessageBo.setDeductCost(0.01);
- chatMessageBo.setTotalTokens(0);
- chatMessageService.insertByBo(chatMessageBo);
- openAiStreamClient = chatConfig.getOpenAiStreamClient();
- List messageList = new ArrayList<>();
- Message sysMessage = Message.builder().role(Message.Role.SYSTEM).content("你是一位精通各国语言的翻译大师\n" +
- "\n" +
- "请将用户输入词语翻译成{" + translationRequest.getTargetLanguage() + "}\n" +
- "\n" +
- "==示例输出==\n" +
- "**原文** : <这里显示要翻译的原文信息>\n" +
- "**翻译** : <这里显示翻译成英语的结果>\n" +
- "==示例结束==\n" +
- "\n" +
- "注意:请严格按示例进行输出,返回markdown格式").build();
- messageList.add(sysMessage);
- Message message = Message.builder().role(Message.Role.USER).content(translationRequest.getPrompt()).build();
- messageList.add(message);
- ChatCompletionResponse chatCompletionResponse = null;
- try {
- ChatCompletion chatCompletion = ChatCompletion
- .builder()
- .messages(messageList)
- .model(translationRequest.getModel())
- .stream(false)
- .build();
- chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion);
- }catch (Exception e) {
- log.error(e.getMessage());
- }
-
- return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString();
- }
-
- @Override
- public SseEmitter ollamaChat(ChatRequest chatRequest) {
- String[] parts = chatRequest.getModel().split("ollama-");
- SysModel sysModel = sysModelService.selectModelByName(chatRequest.getModel());
- final SseEmitter emitter = new SseEmitter();
- String host = sysModel.getApiHost();
- List msgList = chatRequest.getMessages();
- List messages = new ArrayList<>();
-
- for (Message message : msgList) {
- OllamaChatMessage ollamaChatMessage = new OllamaChatMessage();
- ollamaChatMessage.setRole(OllamaChatMessageRole.USER);
- ollamaChatMessage.setContent(message.getContent().toString());
- messages.add(ollamaChatMessage);
- }
- OllamaAPI api = new OllamaAPI(host);
- api.setRequestTimeoutSeconds(100);
- OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(parts[1]);
-
- OllamaChatRequestModel requestModel = builder
- .withMessages(messages)
- .build();
-
- // 异步执行 OllAma API 调用
- CompletableFuture.runAsync(() -> {
- try {
- StringBuilder response = new StringBuilder();
- OllamaStreamHandler streamHandler = (s) -> {
- String substr = s.substring(response.length());
- response.append(substr);
- System.out.println(substr);
- try {
- emitter.send(substr);
- } catch (IOException e) {
- sendErrorEvent(emitter, e.getMessage());
- }
- };
- api.chat(requestModel, streamHandler);
- emitter.complete();
- } catch (Exception e) {
- sendErrorEvent(emitter, e.getMessage());
- }
- });
- return emitter;
- }
-
- @Override
- public String wxCpChat(String prompt) {
- List messageList = new ArrayList<>();
- Message message = Message.builder().role(Message.Role.USER).content(prompt).build();
- messageList.add(message);
- ChatCompletion chatCompletion = ChatCompletion
- .builder()
- .messages(messageList)
- .model("gpt-4o-mini")
- .stream(false)
- .build();
- ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion);
- return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString();
- }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java
deleted file mode 100644
index d48ac6de..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.SysModel;
-import org.ruoyi.system.domain.bo.SysModelBo;
-import org.ruoyi.system.domain.vo.SysModelVo;
-import org.ruoyi.system.mapper.SysModelMapper;
-import org.ruoyi.system.service.ISysModelService;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 系统模型Service业务层处理
- *
- * @author Lion Li
- * @date 2024-04-04
- */
-@RequiredArgsConstructor
-@Service
-public class SysModelServiceImpl implements ISysModelService {
-
- private final SysModelMapper baseMapper;
-
- /**
- * 查询系统模型
- */
- @Override
- public SysModelVo queryById(Long id){
- return baseMapper.selectVoById(id);
- }
-
- /**
- * 查询系统模型列表
- */
- @Override
- public TableDataInfo queryPageList(SysModelBo bo, PageQuery pageQuery) {
- LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
- return TableDataInfo.build(result);
- }
-
- /**
- * 查询系统模型列表
- */
- @Override
- public List queryList(SysModelBo bo) {
- LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- return baseMapper.selectVoList(lqw);
- }
-
- private LambdaQueryWrapper buildQueryWrapper(SysModelBo bo) {
- LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.like(StringUtils.isNotBlank(bo.getModelName()), SysModel::getModelName, bo.getModelName());
- lqw.like(StringUtils.isNotBlank(bo.getModelShow()), SysModel::getModelShow, bo.getModelShow());
- lqw.eq(StringUtils.isNotBlank(bo.getModelDescribe()), SysModel::getModelDescribe, bo.getModelDescribe());
- lqw.eq(StringUtils.isNotBlank(bo.getModelType()), SysModel::getModelType, bo.getModelType());
- lqw.eq(StringUtils.isNotBlank(bo.getCategory()), SysModel::getCategory, bo.getCategory());
- return lqw;
- }
-
- /**
- * 新增系统模型
- */
- @Override
- public Boolean insertByBo(SysModelBo bo) {
- SysModel add = MapstructUtils.convert(bo, SysModel.class);
- validEntityBeforeSave(add);
- boolean flag = baseMapper.insert(add) > 0;
- if (flag) {
- bo.setId(add.getId());
- }
- return flag;
- }
-
- /**
- * 修改系统模型
- */
- @Override
- public Boolean updateByBo(SysModelBo bo) {
- SysModel update = MapstructUtils.convert(bo, SysModel.class);
- validEntityBeforeSave(update);
- return baseMapper.updateById(update) > 0;
- }
-
- /**
- * 保存前的数据校验
- */
- private void validEntityBeforeSave(SysModel entity){
- //TODO 做一些数据校验,如唯一约束
- }
-
- /**
- * 批量删除系统模型
- */
- @Override
- public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
- if(isValid){
- //TODO 做一些业务上的校验,判断是否需要校验
- }
- return baseMapper.deleteBatchIds(ids) > 0;
- }
-
- @Override
- public SysModel selectModelByName(String modelName) {
- return baseMapper.selectOne(
- new LambdaQueryWrapper().eq(SysModel::getModelName, modelName)
- );
- }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java
deleted file mode 100644
index 06dc5391..00000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.SysPackagePlan;
-import org.ruoyi.system.domain.bo.SysPackagePlanBo;
-import org.ruoyi.system.domain.vo.SysPackagePlanVo;
-import org.ruoyi.system.mapper.SysPackagePlanMapper;
-import org.ruoyi.system.service.ISysPackagePlanService;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 套餐管理Service业务层处理
- *
- * @author Lion Li
- * @date 2024-05-05
- */
-@RequiredArgsConstructor
-@Service
-public class SysPackagePlanServiceImpl implements ISysPackagePlanService {
-
- private final SysPackagePlanMapper baseMapper;
-
- /**
- * 查询套餐管理
- */
- @Override
- public SysPackagePlanVo queryById(Long id){
- return baseMapper.selectVoById(id);
- }
-
- /**
- * 查询套餐管理列表
- */
- @Override
- public TableDataInfo queryPageList(SysPackagePlanBo bo, PageQuery pageQuery) {
- LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- Page