diff --git a/RuoYi-Vue-Plus-SpringAI技术方案.txt b/RuoYi-Vue-Plus-SpringAI技术方案.txt new file mode 100644 index 0000000..81f4300 --- /dev/null +++ b/RuoYi-Vue-Plus-SpringAI技术方案.txt @@ -0,0 +1,361 @@ +RuoYi-Vue-Plus + Spring AI 技术方案 + +========================================== +1. 项目概述 +========================================== + +1.1 项目背景 +- 基于RuoYi-Vue-Plus框架构建企业级管理系统 +- 集成Spring AI提供智能化功能 +- 支持AI对话、智能分析、自动化处理等能力 + +1.2 技术栈 +前端技术栈: +- Vue 3 + TypeScript +- Ant Design Vue +- Vite构建工具 +- Pinia状态管理 +- Vue Router路由管理 + +后端技术栈: +- Spring Boot 3.x +- Spring AI 0.8.x +- MyBatis Plus +- Redis缓存 +- MySQL数据库 +- Spring Security安全框架 + +========================================== +2. 系统架构设计 +========================================== + +2.1 整体架构 +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 前端层 │ │ 网关层 │ │ 服务层 │ +│ Vue3 + TS │───▶│ Gateway │───▶│ Spring Boot │ +│ Ant Design │ │ 统一入口 │ │ Spring AI │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 数据层 │ │ 缓存层 │ │ AI服务层 │ +│ MySQL │◀───│ Redis │◀───│ Spring AI │ +│ 主从分离 │ │ 分布式缓存 │ │ OpenAI API │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + +2.2 模块划分 +- admin-pc: 管理后台前端 +- module-system: 系统管理模块 +- module-common: 公共模块 +- module-pay: 支付模块 +- module-base: 基础模块 + +========================================== +3. Spring AI集成方案 +========================================== + +3.1 依赖配置 +```xml + + org.springframework.ai + spring-ai-openai-spring-boot-starter + 0.8.0 + +``` + +3.2 配置文件 +```yaml +spring: + ai: + openai: + api-key: ${OPENAI_API_KEY} + base-url: https://api.openai.com/v1 + chat: + options: + model: gpt-3.5-turbo + temperature: 0.7 + max-tokens: 1000 +``` + +3.3 AI服务层设计 +```java +@Service +public class AIService { + + @Autowired + private OpenAiChatClient chatClient; + + // 智能对话 + public String chat(String message) { + return chatClient.call(message); + } + + // 智能分析 + public AnalysisResult analyzeData(String data) { + // AI数据分析逻辑 + } + + // 智能推荐 + public List getRecommendations(String context) { + // AI推荐逻辑 + } +} +``` + +========================================== +4. 功能模块设计 +========================================== + +4.1 智能对话模块 +- 集成ChatGPT API +- 支持上下文对话 +- 对话历史记录 +- 多语言支持 + +4.2 智能分析模块 +- 数据趋势分析 +- 异常检测 +- 预测分析 +- 可视化展示 + +4.3 智能推荐模块 +- 个性化推荐 +- 内容推荐 +- 用户行为分析 +- 推荐算法优化 + +4.4 自动化处理模块 +- 智能审批流程 +- 自动分类 +- 智能标签 +- 自动化报告 + +========================================== +5. 数据库设计 +========================================== + +5.1 核心表结构 +```sql +-- AI对话记录表 +CREATE TABLE ai_chat_record ( + id BIGINT PRIMARY KEY AUTO_INCREMENT, + user_id BIGINT NOT NULL, + session_id VARCHAR(64), + message TEXT NOT NULL, + response TEXT, + model VARCHAR(50), + tokens_used INT, + create_time DATETIME, + INDEX idx_user_id (user_id), + INDEX idx_session_id (session_id) +); + +-- AI分析结果表 +CREATE TABLE ai_analysis_result ( + id BIGINT PRIMARY KEY AUTO_INCREMENT, + analysis_type VARCHAR(50), + data_source VARCHAR(100), + result_data JSON, + confidence DECIMAL(5,2), + create_time DATETIME, + INDEX idx_analysis_type (analysis_type) +); + +-- 智能推荐表 +CREATE TABLE ai_recommendation ( + id BIGINT PRIMARY KEY AUTO_INCREMENT, + user_id BIGINT, + item_type VARCHAR(50), + item_id BIGINT, + score DECIMAL(5,2), + reason TEXT, + create_time DATETIME, + INDEX idx_user_id (user_id), + INDEX idx_item_type (item_type) +); +``` + +========================================== +6. 前端界面设计 +========================================== + +6.1 智能对话界面 +- 聊天窗口设计 +- 消息气泡样式 +- 输入框和发送按钮 +- 历史记录展示 + +6.2 数据分析面板 +- 图表展示区域 +- 筛选条件设置 +- 实时数据更新 +- 导出功能 + +6.3 推荐展示页面 +- 推荐卡片布局 +- 个性化展示 +- 交互反馈 +- 推荐理由说明 + +========================================== +7. 安全设计 +========================================== + +7.1 API安全 +- API密钥管理 +- 请求频率限制 +- 数据加密传输 +- 访问权限控制 + +7.2 数据安全 +- 敏感数据脱敏 +- 数据备份策略 +- 审计日志记录 +- 隐私保护措施 + +========================================== +8. 性能优化 +========================================== + +8.1 缓存策略 +- Redis缓存热点数据 +- 本地缓存AI模型 +- 缓存更新策略 +- 缓存穿透防护 + +8.2 并发处理 +- 异步处理AI请求 +- 线程池配置 +- 负载均衡 +- 限流措施 + +========================================== +9. 部署方案 +========================================== + +9.1 开发环境 +- Docker容器化 +- 本地开发环境 +- 热部署配置 +- 调试工具集成 + +9.2 生产环境 +- 云服务器部署 +- 负载均衡配置 +- 监控告警 +- 日志管理 + +========================================== +10. 测试策略 +========================================== + +10.1 单元测试 +- 服务层测试 +- 控制器测试 +- 数据访问层测试 +- AI功能测试 + +10.2 集成测试 +- API接口测试 +- 前后端联调 +- 性能压力测试 +- 安全测试 + +========================================== +11. 运维监控 +========================================== + +11.1 系统监控 +- 服务器监控 +- 应用性能监控 +- 数据库监控 +- 网络监控 + +11.2 日志管理 +- 统一日志格式 +- 日志收集分析 +- 错误告警 +- 日志归档 + +========================================== +12. 项目计划 +========================================== + +12.1 开发阶段 +第一阶段(2周):基础框架搭建 +- RuoYi-Vue-Plus环境搭建 +- Spring AI集成 +- 基础功能开发 + +第二阶段(3周):核心功能开发 +- 智能对话模块 +- 数据分析功能 +- 推荐系统开发 + +第三阶段(2周):优化测试 +- 性能优化 +- 功能测试 +- 安全加固 + +第四阶段(1周):部署上线 +- 生产环境部署 +- 监控配置 +- 文档完善 + +12.2 里程碑 +- M1: 基础框架完成 +- M2: 核心功能完成 +- M3: 测试通过 +- M4: 正式上线 + +========================================== +13. 风险评估 +========================================== + +13.1 技术风险 +- AI API稳定性 +- 性能瓶颈 +- 数据安全 +- 技术债务 + +13.2 应对措施 +- 多AI服务商备选 +- 性能监控优化 +- 安全审计加固 +- 代码重构优化 + +========================================== +14. 成本估算 +========================================== + +14.1 开发成本 +- 人力成本:8人月 +- 服务器成本:月均2000元 +- AI API成本:月均1000元 +- 其他成本:5000元 + +14.2 运维成本 +- 服务器运维:月均1000元 +- 监控服务:月均500元 +- 备份存储:月均300元 + +========================================== +15. 总结 +========================================== + +本技术方案基于RuoYi-Vue-Plus框架,集成Spring AI提供智能化功能,通过合理的架构设计、安全措施和性能优化,构建一个功能完善、安全可靠的企业级管理系统。 + +主要优势: +1. 成熟稳定的基础框架 +2. 强大的AI能力集成 +3. 完善的权限管理 +4. 良好的扩展性 +5. 丰富的功能模块 + +通过本方案的实施,可以快速构建一个具有AI能力的现代化管理系统,提升用户体验和业务效率。 + +========================================== +文档版本:v1.0 +创建时间:2025年1月 +更新记录: +- v1.0: 初始版本 +========================================== \ No newline at end of file diff --git a/admin-pc/src/views/book/check/achievement.vue b/admin-pc/src/views/book/check/achievement.vue new file mode 100644 index 0000000..7623a86 --- /dev/null +++ b/admin-pc/src/views/book/check/achievement.vue @@ -0,0 +1,358 @@ + + + + \ No newline at end of file diff --git a/admin-pc/src/views/book/check/chapter.vue b/admin-pc/src/views/book/check/chapter.vue new file mode 100644 index 0000000..88a0a27 --- /dev/null +++ b/admin-pc/src/views/book/check/chapter.vue @@ -0,0 +1,309 @@ + + + + \ No newline at end of file diff --git a/admin-pc/src/views/popularizeRecruitLog/modules/PopularizeRecruitLogForm.vue b/admin-pc/src/views/book/check/modules/AchievementForm.vue similarity index 52% rename from admin-pc/src/views/popularizeRecruitLog/modules/PopularizeRecruitLogForm.vue rename to admin-pc/src/views/book/check/modules/AchievementForm.vue index 7ade6ef..efbabdb 100644 --- a/admin-pc/src/views/popularizeRecruitLog/modules/PopularizeRecruitLogForm.vue +++ b/admin-pc/src/views/book/check/modules/AchievementForm.vue @@ -4,38 +4,48 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + @@ -50,21 +60,12 @@ import { validateDuplicateValue } from '@/utils/util' export default { - name: 'PopularizeRecruitLogForm', - components: { - }, - props: { - //表单禁用 - disabled: { - type: Boolean, - default: false, - required: false - } - }, + name: 'AchievementForm', data () { return { model:{ - }, + status: '0' + }, labelCol: { xs: { span: 24 }, sm: { span: 5 }, @@ -75,21 +76,29 @@ }, confirmLoading: false, validatorRules: { + status: [ + { required: true, message: '请选择审核状态!' } + ] }, url: { - add: "/popularizeRecruitLog/popularizeRecruitLog/add", - edit: "/popularizeRecruitLog/popularizeRecruitLog/edit", - queryById: "/popularizeRecruitLog/popularizeRecruitLog/queryById" + add: "/commonBookAchievementLog/commonBookAchievementLog/add", + edit: "/commonBookAchievementLog/commonBookAchievementLog/edit", + queryById: "/commonBookAchievementLog/commonBookAchievementLog/queryById" } } }, + props: { + disabled: { + default: false + } + }, computed: { formDisabled(){ return this.disabled }, }, created () { - //备份model原始值 + //备份model原始值 this.modelDefault = JSON.parse(JSON.stringify(this.model)); }, methods: { @@ -109,11 +118,13 @@ let httpurl = ''; let method = ''; if(!this.model.id){ + //新增 httpurl+=this.url.add; method = 'post'; }else{ + //编辑 httpurl+=this.url.edit; - method = 'put'; + method = 'put'; } httpAction(httpurl,this.model,method).then((res)=>{ if(res.success){ @@ -126,9 +137,8 @@ that.confirmLoading = false; }) } - }) }, } } - \ No newline at end of file + \ No newline at end of file diff --git a/admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.vue b/admin-pc/src/views/book/check/modules/AchievementModal.vue similarity index 81% rename from admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.vue rename to admin-pc/src/views/book/check/modules/AchievementModal.vue index c20cc9e..71eba2b 100644 --- a/admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.vue +++ b/admin-pc/src/views/book/check/modules/AchievementModal.vue @@ -8,17 +8,17 @@ :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @cancel="handleCancel" cancelText="关闭"> - + \ No newline at end of file + \ No newline at end of file diff --git a/admin-pc/src/views/popularizeAuthentication/modules/PopularizeAuthenticationForm.vue b/admin-pc/src/views/book/check/modules/CommonBookNovelForm.vue similarity index 54% rename from admin-pc/src/views/popularizeAuthentication/modules/PopularizeAuthenticationForm.vue rename to admin-pc/src/views/book/check/modules/CommonBookNovelForm.vue index b37bba7..481b5b1 100644 --- a/admin-pc/src/views/popularizeAuthentication/modules/PopularizeAuthenticationForm.vue +++ b/admin-pc/src/views/book/check/modules/CommonBookNovelForm.vue @@ -4,48 +4,43 @@ - - + + - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + @@ -60,21 +55,12 @@ import { validateDuplicateValue } from '@/utils/util' export default { - name: 'PopularizeAuthenticationForm', - components: { - }, - props: { - //表单禁用 - disabled: { - type: Boolean, - default: false, - required: false - } - }, + name: 'CommonBookNovelForm', data () { return { model:{ - }, + state: 0 + }, labelCol: { xs: { span: 24 }, sm: { span: 5 }, @@ -85,21 +71,38 @@ }, confirmLoading: false, validatorRules: { + userId: [ + { required: true, message: '请选择用户标识!' } + ], + bookId: [ + { required: true, message: '请选择所属小说!' } + ], + title: [ + { required: true, message: '请输入章节名称!' } + ], + status: [ + { required: true, message: '请选择章节状态!' } + ] }, url: { - add: "/popularizeAuthentication/popularizeAuthentication/add", - edit: "/popularizeAuthentication/popularizeAuthentication/edit", - queryById: "/popularizeAuthentication/popularizeAuthentication/queryById" + add: "/commonBookNovel/commonBookNovel/add", + edit: "/commonBookNovel/commonBookNovel/edit", + queryById: "/commonBookNovel/commonBookNovel/queryById" } } }, + props: { + disabled: { + default: false + } + }, computed: { formDisabled(){ return this.disabled }, }, created () { - //备份model原始值 + //备份model原始值 this.modelDefault = JSON.parse(JSON.stringify(this.model)); }, methods: { @@ -119,11 +122,13 @@ let httpurl = ''; let method = ''; if(!this.model.id){ + //新增 httpurl+=this.url.add; method = 'post'; }else{ + //编辑 httpurl+=this.url.edit; - method = 'put'; + method = 'put'; } httpAction(httpurl,this.model,method).then((res)=>{ if(res.success){ @@ -136,7 +141,6 @@ that.confirmLoading = false; }) } - }) }, } diff --git a/admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.Style#Drawer.vue b/admin-pc/src/views/book/check/modules/CommonBookNovelModal.Style#Drawer.vue similarity index 86% rename from admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.Style#Drawer.vue rename to admin-pc/src/views/book/check/modules/CommonBookNovelModal.Style#Drawer.vue index e67ec50..95cb770 100644 --- a/admin-pc/src/views/popularizeOrder/modules/PopularizeOrderModal.Style#Drawer.vue +++ b/admin-pc/src/views/book/check/modules/CommonBookNovelModal.Style#Drawer.vue @@ -7,7 +7,7 @@ @close="close" destroyOnClose :visible="visible"> - +