毕设
快来分享你的内容吧~
- 前端开发岗,毕设答辩是否要懂后端?担心被导师拷打问题描述我想向鱼皮哥提出本科毕业论文选题、毕业设计以及答辩相关的问题,并寻求一些建议。背景信息本人是前端开发职位,后端仅学过java基础部分具体需求目前打算用鱼皮哥的智能协同云图库项目作为毕设,因为我是前端嘛,如果这个作为毕设的话,后端部分也需要跟着敲完吗?然后就是答辩老师问的问题都是偏向后端的,怕到时候问的答不出来,需要去补充java后端方面的知识吗?比如数据库和springboot框架等。...查看全文程序员鱼皮:毕设项目前端、后端理论上都需要掌握。如果只是应付毕设,后端可以直接拉取源码,答辩时说明后端由 AI 编程开发即可(能否行得通不确定),导师一般不会过于严格。不过更建议系统性地学一下 Java。AI 对纯前端开发冲击很大,不少公司已要求前端转 AI 全栈,否则面临离职,不妨借此机会系统学习,后续向 AI 全栈开发转型,可参考 Java 学习路线。

- 05-31 18:43·全栈开发如果一篇论文,从头到尾一个字都不改,全让AI写,知网到底能查出来多少?查看全文加油鸭:太佩服你这种实证精神!用真实数据拆解AIGC检测,既有技术深度又有教育温度,毕业季里最清醒的分享!12613分享
- 04-12 10:44·Java后端最近要搞毕设,个人几乎没有什么基础,边看边学勉勉强强把用户中心写了出来想当做毕设,导师说是功能太少不能体现工作量,要求我多加一些功能,各位能不能给一些相对简单,但是能让老师看觉得比较有工作量的功能推荐一下,不求实用,能体现工作量就好,只求混到毕业证。查看全文leikooo:可以用 Trae 让他给我生成可以优化的点,让 AI 帮你实现。让 AI 动代码前,先把现在的进度 commit 存个档。341分享
- 04-09 20:51·Java后端查看全文最近赶毕设才发现云图库能用四张表做出那么完善的东西,是多么强大的概括能力.. 我为了给我的毕设堆料(工作量不足懂的都懂),已经来到了17张,成为了亲手堆积的一座史山,mp在多表查询还真不如自己在baseMapper里面自己写sql😇 以及初步明白了MVC是何等的史(,一开始抽了读写分离,后面隔离了...编程导航_小y:加油,少就是多~321分享
- 导师建议我把毕设申请软著,是否有坑?毕设指导老师说当前我的毕业设计可以去申请软著,但要署名时加上学院和它的名字,有人能说明一下利害情况吗?...查看全文程序员鱼皮:申请软著的好处是,你可以把毕设项目带上软著资质写进简历,算是一个小加分项。老师要求署名,大概率是为了积累科研成果和工作量,方便后续评职称,属于正常情况。软著对私企求职的帮助不算大,有总比没有强,你现在时间充裕的话,可以去申请。

- 01-05 10:01·只不过想变得更好一点超级智能体那个项目,能作为毕设吗,好像内容有点少,能加什么进去好呢编程导航_小y:结合一个实际业务,比如电商导购、旅游规划、虚拟恋爱人(女朋友、男朋友)等等。260分享
- 2025-06-30·Java后端毕设项目该怎么选择? 请教大家,如果用咱们编程导航的项目做毕设的话,有什么推荐吗?做哪个比较合适?编程导航_小y:可以看下智能协同云图库项目:https://www.codefather.cn/course/1864210260732116994141分享
- 2025-05-20·Java后端目前大四在做毕设,选择了鱼皮项目中的云图库来充当毕设,在上周组会给老师演示被批评说功能太少了,一下弄的我全无斗志,求助朋友们有没有功能扩展方面的建议呢😩Mira:某些教职员工就像过期三十年的老坛酸菜,明明自己连git reset --hard都不敢用,就爱在本科生毕设上玩权力cosplay。他们所谓的"功能不够"本质是"老子当年评职称被拒的怨气要找个软柿子发泄",建议直接开启糊弄学模式:虚假进度条:给现有功能加个"智能XX模块开发中(85%)"的假标签学术话术包装:把上传按钮改名叫"分布式异步存储网关"参数注水:在关于页面写"支持千万级并发"(反正不压测)3160分享
- 2025-05-16·后端
前端开发岗,毕设答辩是否要懂后端?担心被导师拷打
### 问题描述 我想向鱼皮哥提出本科毕业论文选题、毕业设计以及答辩相关的问题,并寻求一些建议。 ### 背景信息 本人是前端开发职位,后端仅学过java基础部分 ### 具体需求 目前打算用鱼皮哥的智能协同云图库项目作为毕设,因为我是前端嘛,如果这个作为毕设的话,后端部分也需要跟着敲完吗?然后就是答辩老师问的问题都是偏向后端的,怕到时候问的答不出来,需要去补充java后端方面的知识吗?比如数据库和springboot框架等。
搭了个毕设一键生成skill,顺手测了下AIGC检测的底裤
最近毕业季嘛,偶尔有一些学弟学妹来问我毕设的问题。同时刷到不少关于AIGC率的讨论,一些官方账号也在发相关内容。  我作为25届毕业生,当时通知说会做AIGC率检测,就特地把论文写得比较口语化,避免AIGC率太高。最终查出来百分之十几,很幸运地躲过了反复修改的折磨。 但我就突然好奇一个事儿——如果一篇论文,从头到尾一个字都不改,全让AI写,知网到底能查出来多少? 为了搞明白,我没去折腾什么降AI技巧,干脆自己搭了个“计算机毕设全流程生成”的Skill。输入课题名和大纲,剩下的代码、论文、配图全交给AI。然后我挑了6个国产大模型,各跑了一遍,生成完直接送去知网检测。 结果怎么说呢……挺讽刺的。 ## 先说说我搭的那个“计算机毕设全流程生成”的skill是啥 说白了就是一个自动化流程,用户只需要告诉我两个东西: - 课题叫啥(比如“基于啥啥啥的啥啥系统”) - 论文大纲想展示哪些模块 剩下的我就全扔给AI了,包括: - 完整的项目代码,能跑的那种 - Word格式的毕业论文,摘要、目录、正文、致谢全齐,图表公式都给你安排好 - 系统截图、流程图之类的配图,AI直接出图 重点来了——整个过程没经过任何人工润色。生成啥样就啥样,一字不改。 skill 已开源:https://github.com/the-qian/thesis-forge-skill  ## 测试标准以及我挑了哪六个国产模型来“作案” 用 Claude Code 作为代码和论文的生成工具,大模型均使用官方 API 直接调用,不用任何 Coding Plan 以及第三方 API 平台。因为全部走官方 API,所以这次测评不包含 GPT 等国外模型——一是太麻烦,二是太贵了,钱包有限。 具体参与评测的国产模型: DeepSeek-V4-Pro、glm-5.1、doubao-seed-2-0-pro-260215、kimi-k2.6、qwen3.7-max、mimo-v2.5-pro,基本覆盖了国内主流的模型。 提示词统一为: ``` 帮我完成毕业设计及论文 课题:《基于SpringBoot的人事管理系统的设计与实现》 论文:中文字数8000–10000字,完整8章结构(摘要、绪论、相关技术、需求分析、系统设计、系统实现、系统测试、总结与展望、致谢、参考文献10篇以上) ```  ## 检测结果 | 模型 | AIGC率 | | -------------------------- | ------ | | DeepSeek-V4-Pro | 24.6% | | glm-5.1 | 20% | | doubao-seed-2-0-pro-260215 | 34.5% | | kimi-k2.6 | 13.2% | | qwen3.7-max | 29.7% | | mimo-v2.5-pro | 20.2% | 我的大学要求AIGC率不高于30%,目前来看这帮AI写的论文大部分都压线过了这个标准。也许是工科的论文天然比较抗AIGC检测?搞不太懂…… ## AIGC检测的原理 我在专利检索网站上查到了知网申请的两个AIGC检测相关专利:   大概包含三个方面的检测: 1. **看行文习惯**:AI写的文字句式、长短、用词都特别规整顺滑,很少有起伏;人写的会忽长忽短、用词更随性,偶尔还有口语化、思维跳跃的痕迹。 2. **算文字“陌生度”**:AI产出的内容套路固定,机器很容易预判下一句话是什么;人写的想法多变,预判难度更高。 3. **双重核对**:先用简单特征快速筛出可疑内容,再用AI模型深度判断,最后还会把原文重新改写一遍来对比——AI文改写后变化很小,人写的内容改写后差别会更明显。 ------ 说了这么多,不是教大家怎么糊弄毕业,而是想说——AIGC检测这东西,真不能当成一个硬性标准来卡学生。比方说AIGC率超过某个阈值,完全可以结合答辩表现,看看这个学生是不是真的认真完成了毕设。 最后我要吐槽一下,知网的查重是真贵啊! 
本科毕业答辩:技术问题答不上来?没事,都能过
刚刚经历完本科毕业答辩,也算快正式毕业了。 前面那些繁琐的准备工作就不说了。最有意思的,是**提问环节**——也是最多同学关心的地方。 一般一个人答辩不超过20分钟:15分钟 PPT + 系统展示,最后5分钟提问。大部分人的课题都是基于 Spring Boot 的 XXX 系统,从这个背景出发,老师问的技术问题其实都很基础。如果你出去找过开发实习、真正面试过,这些问题,真的不难。 ## 一、经典问题:库存扣减 很多同学会做电商系统,那就一定有库存扣减模块。老师就会问:**“如果多个人同时下单,或者一个人同时发出多次请求,会出现什么问题?怎么解决?”** 这就是经典的线程安全问题,核心就两个字:**加锁**。解决方案无非就是乐观锁、CAS+自旋,或者直接上 `synchronized`。反正毕业项目肯定是单体,别提什么分布式锁了,用不上。前端也可以做防抖,避免单个用户连点导致重复请求。 就这么基础的问题,很多同学答不上来,甚至没理解到点上。 ## 二、技术选型:为什么你不用 MyBatis Plus? 主流的ORM框架是 MyBatis Plus。但有的同学用了 JPA,或者其他框架。老师就会疑惑:**“你为什么不用 MyBatis Plus?”** 因为正常搭配 Spring Boot 的ORM框架都是 MyBatis。SSM 框架里的 M 就是 MyBatis,Plus版本能更少写 SQL、更多操作对象。 这个问题怎么来的?大概率是这位同学的项目直接让 AI 生成的,没指定技术栈,AI 就默认选了个 JPA。别问我怎么知道的——byd我之前用 AI 初始化项目,它特么默认给我选的也是 JPA,很奇怪。我当场勒令 AI:“给我改回 MyBatis Plus。”(╯‵□′)╯︵┻━┻ ## 三、写了什么技术,系统里必须有体现 如果你写了什么技术、什么功能,一定得在系统里体现出来。老师肯定会问。 比如你写了 Spring Cloud、Redis、MQ,或者 AI 相关的技术,你得知道: - 这个技术在系统里哪里用到了? - 它的原理是什么? - 有什么优缺点? - 这个功能的执行流程是怎样的? 我看见有位同学写了 AI 功能,老师就问:**“AI 记忆系统怎么做的?向量数据库的嵌入和召回机制是什么?”** ——这是真的会问的。 ## 四、登录功能:JWT Token 是送分题 几乎所有同学都会介绍登录功能,大多数用 JWT Token。 老师问的问题也很基础: 刚开始可能会问系统安全性如何保证 , JWT TOKEN适合跨服务系统,为什么你单体项目用这个?然后老师可能发现答不上来就降低难度了,后面的同学就会问 **Token 是干嘛的?Token 里包含什么信息?** 都是很基础的问题。当然,这是对于找开发岗位的同学来说。很多同学可能并不干计算机这行,答不上来也很正常,本来就是混个毕业。 我们老师也说了:**答不出来无所谓,无非就是分高分低的问题。** 只要你不骑在老师头上拉屎,还问他要纸,大概率都能过。 编程导航里的同学就不祝答辩顺利了,你们就当顺手参加了个线下面试吧。^_^
麻烦请大家给些建议
最近要搞毕设,个人几乎没有什么基础,边看边学勉勉强强把用户中心写了出来想当做毕设,导师说是功能太少不能体现工作量,要求我多加一些功能,各位能不能给一些相对简单,但是能让老师看觉得比较有工作量的功能推荐一下,不求实用,能体现工作量就好,只求混到毕业证。
最近赶毕设才发现云图库能用四张表做出那么完善的东西,是多么强大的概括能力.. 我为了给我的毕设堆料(工作量不足懂的都懂),已经来到了17张,成为了亲手堆积的一座史山,mp在多表查询还真不如自己在baseMapper里面自己写sql😇 以及初步明白了MVC是何等的史(,一开始抽了读写分离,后面隔离了专门的业务编排层,询问AI好像有DDD的雏形了,后面做项目或许可以多学学研究一下组织 感觉现在AI时代,古法编程可能逐渐淘汰,但是该学的东西和怎么设计一个系统架构的道层面一个不能少啊,这个好像还是只能经验判断,经验判断怎么写一个以后可能用得上的东西😭 最后就是迷茫于作为新时代程序员何去何从吧,AI代码写的又快又好,各种小细节很丝滑,虽然目前还在坚持review,感觉过不了多久就会完全变懒了,唉
导师建议我把毕设申请软著,是否有坑?
毕设指导老师说当前我的毕业设计可以去申请软著,但要署名时加上学院和它的名字,有人能说明一下利害情况吗?
超级智能体那个项目,能作为毕设吗,好像内容有点少,能加什么进去好呢
毕设项目该怎么选择? 请教大家,如果用咱们编程导航的项目做毕设的话,有什么推荐吗?做哪个比较合适?
目前大四在做毕设,选择了鱼皮项目中的云图库来充当毕设,在上周组会给老师演示被批评说功能太少了,一下弄的我全无斗志,求助朋友们有没有功能扩展方面的建议呢😩
智能 AI 校园二手交易平台开源项目(Vue3+TypeScript+SpringBoot+Redis)适用毕设课设简历项目
# 智能 AI 校园二手交易平台 >作者:[程序员小白条](https://luoye6.github.io/) > >[Gitee 主页](https://gitee.com/falle22222n-leaves) > >[GitHub 主页](https://github.com/luoye6) ## ☀️新手必读 + 本项目支持 Knife4j 在线接口调用(需在全局参数中添加有效 Token) + 未经本人允许擅自将本项目作于商用、竞赛、贩卖源码、毕设擅自改动作者等违法行为,将依法追究法律责任,后果自负,项目已申请软件著作权。 + 如果项目对您有所帮助,可以Star⭐一下,受到鼓励的我会继续加油。 + [项目前端地址](https://gitee.com/falle22222n-leaves/vue3_trade_frontend) + [项目后端地址](https://gitee.com/falle22222n-leaves/vue3_trade_backend) [](https://gitee.com/falle22222n-leaves/vue_-book-manage-system) ## ☀️项目介绍 **智能 AI 校园二手交易平台**(Intelligent AI Campus Second-hand Trading Platform)是一个利用 AI 模型和数据分析为用户提供个性化二手商品推荐、商品评分、交易攻略分享等功能的综合性系统。该系统融合了 AI 购物顾问、图表数据分析、买家留言、购物日历、商品浏览、攻略收藏、聊天室互动等多种功能,项目功能总计 20+,并支持拓展会员功能以实现商业化处理。 > Ps:如果你想要一个既简单又新颖的校园二手交易工具,那么这个项目将会是不错的选择~ <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/Ee5HKlWrFeQOiZs6.webp" alt="" width="100%" />  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/cIY0fpR1RXavEBkb.webp" alt="" width="100%" /> ## ☀️功能和特性 ### 用户功能 1)**欢迎页**:介绍项目的功能、亮点以及如何使用。 2)**主页**:使用 Swiper 轮播图展示亮点商品图片,吸引用户眼球。 3)**公告浏览**:查看近期管理员发布的公告,获取最新平台动态。 4)**买家留言**:支持弹幕留言功能,用户可以进行添加,并使用弹幕玩法(继续、暂停、显示、隐藏、加速、减速)。 5)**二手商品交易攻略分享**:用户可以分享二手商品交易攻略,**使用 Markdown 编辑器**。可以浏览他人分享的交易攻略(分页,支持模糊搜索帖子标题)。 6)**AI 对话**:用户可以与 **AI 购物顾问**进行聊天,AI 会根据用户的偏好推荐二手商品,并采用协同过滤推荐算法提升推荐精准度。AI 会在数据库层面查询商品和价格以及新旧程度,然后根据用户现有的余额进行适配性推荐。 7)**商品列表**:展示所有二手商品,支持评分、浏览量、收藏量等功能,帮助用户快速了解热门商品。 8)**商品推荐**:根据协同过滤算法推荐商品,本质是基于商品评分。 9)**个人主页**:展示个人购物记录日历(直接用 0 和 1 展示是否绿色购物),个人订单详情查看,个人评论查看,收藏的二手商品攻略查看,个人详情信息查看,聊天室功能(用户和管理员进行对话,支持 Emoji 表情包)。 10)**注册功能**:用户输入账号、密码,重复确认密码后完成注册。 ### 系统管理员功能 1)**用户管理**:编辑用户、查看用户、删除用户,支持分页和模糊查询(用户名和用户简介)。 2)**公告管理**:发布新公告、修改公告、删除公告,支持分页。 3)**二手商品攻略管理**:添加新攻略、修改攻略、删除攻略,支持分页和模糊查询(帖子标题、内容、标签、用户 ID)。 4)**AI 对话管理**:删除用户与 AI 的对话记录,支持分页和模糊查询(用户 ID、用户输入、AI 生成内容)。 5)**商品管理**:添加新商品、修改商品、删除商品,支持分页和模糊查询(商品名、商品描述)。 6)**商品类别管理**:添加新类别、修改类别、删除类别,支持分页和模糊查询(类别 ID、类别名称)。 7)**商品订单管理**:查看、修改、删除用户订单,支持分页和模糊查询(订单 ID、用户 ID、订单状态)。 8)**商品评分管理**:查看、修改商品评分,支持分页和模糊查询(商品 ID、用户 ID、评分)。 **欢迎页 和 个人主页 同用户一致。** ### 特性(亮点) 1)**前后端分离架构**:本项目采用前后端分离的模式,前端构建页面,后端提供数据接口,前端调用后端接口获取数据并重新渲染页面。 2)**Token 认证机制**:前端在 Authorization 字段提供 Token 令牌,API 认证使用 Token 认证,使用 HTTP Status Code 表示状态,数据返回格式使用 JSON。 3)**跨域支持与权限校验**:后端已开启 CORS 跨域支持,采用权限拦截器进行权限校验,并检查登录情况。 4)**全局异常处理**:添加全局异常处理机制,捕获异常,增强系统健壮性。 5)**数据可视化**:前端使用 Echarts 可视化库实现商品热度分析图表(折线图、饼图),并通过 Loading 配置提升加载体验。 6)**接口文档自动化**:引入 knife4j 依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以直接通过 Package.json 文件中的 openapi 命令生成前端接口请求代码和类型代码(高效)。 7)**组件库与权限管理**:使用 ElementUI PLUS 组件库进行前端界面搭建,快速实现页面生成,并实现前后端统一权限管理、多环境切换等功能。 8)**灵活查询与代码生成**:基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询,并配合 MyBatisX 插件自动生成后端 CRUD 基础代码,减少重复工作。 9)**代码生成器**:后端 FreeMarker 模版自带代码生成器,一键生成 Controller、Service、DTO、VO 等功能,稍加修改即可实现传统增删改查。 10)**性能优化**:前端路由懒加载、CDN 静态资源缓存优化、图片懒加载效果,提升用户体验。 11)**AI 购物顾问**:AI 充当购物顾问,AI 模型可以随时切换版本,支持接入其他 AI 模型接口,直接下载官方 Java 工具类即可集成到本项目。 12)**购物日历与互动功能**:引入购物日历记录功能,支持绿色购物标记(0 和 1 表示),并集成攻略评论、收藏、浏览量等功能,与传统增删改查项目有显著区别。 13)**样式美观与适配**:本项目注重样式美观,部分功能在手机端也有良好的适配效果,并支持全局样式一键切换。 ## ☀️运行方式 ### 2 分钟快速上手使用项目 1)找到 SpringBoot 启动类,点击运行 <img src="https://pic.code-nav.cn/migrate_image/f425995e3648a02a0d261389c29ec228.webp"/> 2)打开 Knife4J 在线接口调用地址,先需要登录获取 Token,然后在全局参数上加上即可。   3)前端输入表单内容后点击登录即可成功,开始愉快使用功能~ <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/XlHi16xfPWhSwEVa.webp" alt="" width="100%" /> pi.icu/5563/202503171234840.png>)  ## ☀️部署方式 ### 前置条件 **前端** 软件:Vscode 或者 Webstorm(推荐) 环境:Node 版本 16 或者 18(推荐) **注:千万别选 18 以上的版本!**(版本不同,大概率导致项目报错) **后端** 软件:Eclipse 或者 IDEA(推荐) 环境:MySQL 5.7 或者 8.0(推荐)Redis 3.2或以上(必须,选择 Windows 版本,看个人电脑) ### 前端部署 1)点击克隆/下载项目,会使用 Git 进行版本控制的,推荐 Git Clone,不会的小伙伴可以选择下载一个 Zip 压缩包,然后解压到自己电脑的 D 盘,推荐直接 Star,后续直接向我拿数据库模拟文件和 API 接口文档。 2)利用 Vscode 或者 Webstorm 打开前端页面,配置 Configuration。配置 Node 环境和包管理工具即可,我这边选择的包管理工具是 Npm,其他包管理工具如:Yarn、Cnpm、Pnpm 皆可。 **注:注意更改 Npm 的镜像地址为淘宝的新镜像地址,否则会出现 Npm Install 一直卡进度条的情况。** 3)直接点击 dev 的运行,或者打开控制台,输入 npm run serve 即可成功启动前端项目。 ```shell npm config set registry https://registry.npmmirror.com/ ```   <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/rHBt67e4bDGdV3Gp.webp" alt="" width="100%" />  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/K4cb21kKje98macP.webp" alt="" width="100%" /> 4)将图片链接进行自定义切换,可以切换为你自己的图床的图片链接,比如七牛云、GitHub 等,也可以寻找在线图片,复制百度文库图片链接(多试几次,有些图片有防盗链)。  ### 后端部署 1)点击克隆/下载项目,会使用 Git 进行版本控制的,推荐 Git Clone,不会的小伙伴可以选择下载一个 Zip 压缩包,然后解压到自己电脑的 D 盘,建议收藏项目,后续方便获取相关版本更新信息,也可以 Fork 到自己的本地仓库,拷贝副本。  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/6xCzdUMMq5hs2DmI.webp" alt="" width="100%" /> 2)领取数据库模拟文件后,利用 Navicat 或者 SQLYog 等软件导入数据库文件,记得先建立一个名为 tourism 的数据库,然后右键点击运行 SQL 文件即可,运行成功,无报错后,重新打开数据库,检查是否有数据,如果有数据,表明导入成功。 <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/3qn5KjqpGflX50OD.webp" alt="" width="100%" />  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/M9oRnWmxtVaAnIUn.webp" alt="" width="100%" /> 3)用 IDEA 打开后端项目,找到 application-dev.yml 文件,修改其中的 MySQL 配置,保证用户名和密码正确,**注:密码不能以数字 0 开头,本机密码简单为主,不是远程服务器密码!**   4)导入 Maven 依赖,注意看自己的 Maven 版本是否正确,建议选择跟我一样的,3.8以上的版本,发现依赖导入很慢,是因为没有配置国内镜像,默认连接的是国外服务器,因此阿里云镜像配置可以看这篇博客。[CSDN Maven 配置教程](https://blog.csdn.net/lianghecai52171314/article/details/102625184?ops_request_misc=&request_id=&biz_id=102&utm_term=Maven)  5)找到 SpringBoot 启动类,我建议用 Debug 模式启动项目,更好排查错误。  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/QZi786wr9fLqOdjN.webp" alt="" width="100%" /> 1158118402/TO6k5Th5QxiQQmqe.webp) 6)如果遇到错误,大概率可能是 JDK 版本问题,我项目用的是 JDK 8,建议选择与我相同版本。    7)成功启动项目效果展示如下,注意端口号占用等情况,可以直接用 TaskKill /PID ,杀死原有进程即可,具体命令可以百度哦。  ### 前后端联调 <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/ci9F2HTAofMA0bJj.webp" alt="" width="100%" />  1)如果需要修改端口和前缀(比如/api),需要同时修改前端和后端。   ## ☀️技术选型 ### 前端 | 技术 | 作用 | 版本 | | :---------------- | :---------------- | :----- | | Vue | 提供前端交互 | 3.2.13 | | Vue Router | 提供前端路由功能 | 4.0.3 | | Pinia | 状态管理 | 2.1.4 | | Axios | HTTP 请求库 | 1.4.0 | | ECharts | 数据可视化图表库 | 5.4.2 | | MD Editor V3 | Markdown 编辑器 | 4.8.1 | | NProgress | 页面加载进度条 | 0.2.0 | | QRCode Vue3 | 生成二维码 | 1.7.1 | | Vue Clipboard3 | 剪贴板功能 | 2.0.0 | | Vue3 Danmaku | 弹幕功能 | 1.6.1 | | Element Plus | UI 组件库 | 2.9.0 | | TypeScript | JavaScript 的超集 | 4.5.5 | | ESLint | 代码检查工具 | 7.32.0 | | Prettier | 代码格式化工具 | 2.4.1 | | Sass | CSS 预处理器 | 1.63.6 | | mitt | 全局事件总线 | 3.0.1 | | Vue3 Emoji Picker | Emoji 表情包支持 | 1.1.8 | ### 后端 | 技术 | 作用 | 版本 | | :----------------------------- | :------------------ | :------- | | SpringBoot | 后端框架 | 2.7.2 | | MyBatis Plus | ORM 框架 | 3.5.2 | | Redis | 缓存数据库 | - | | Elasticsearch | 搜索引擎 | - | | Knife4j | Swagger 增强工具 | 4.4.0 | | QCloud COS | 腾讯云对象存储 | 5.6.89 | | EasyExcel | Excel 操作库 | 3.1.1 | | Hutool | Java 工具库 | 5.8.8 | | Lombok | 简化 Java 代码 | - | | JWT | JSON Web Token | 0.9.0 | | OkHttp | HTTP 客户端 | 4.10.0 | | Guava | Google 工具库 | 30.1-jre | | Jsoup | HTML 解析库 | 1.15.3 | | Gson | JSON 解析库 | 2.9.0 | | Fastjson | JSON 解析库 | 2.0.53 | | Java WebSocket | WebSocket 支持 | 1.3.8 | | Spring Session | 分布式 Session 管理 | - | | Spring Mail | 邮件发送功能 | - | | Qiniu SDK | 七牛云对象存储 | 7.13.0 | | Apache Commons Lang3 | 常用工具库 | - | | Spring AOP | 面向切面编程 | - | | Spring DevTools | 开发工具 | - | | MySQL Connector | MySQL 数据库连接 | - | | Spring Configuration Processor | 配置处理器 | - | ## ☀️架构   ## ☀️核心设计 ### AI 旅游推荐官对话功能 ```java /** * 创建用户对话表 * * @param userAiMessageAddRequest * @param request * @return UserAiMessage */ @PostMapping("/add") public BaseResponse<UserAiMessage> addUserAiMessage(@RequestBody UserAiMessageAddRequest userAiMessageAddRequest, HttpServletRequest request) { ThrowUtils.throwIf(userAiMessageAddRequest == null, ErrorCode.PARAMS_ERROR); String userInputText = userAiMessageAddRequest.getUserInputText(); if (WordUtils.containsForbiddenWords(userInputText)) { ThrowUtils.throwIf(WordUtils.containsForbiddenWords(userInputText), ErrorCode.WORD_FORBIDDEN_ERROR, "包含违禁词"); } UserAiMessage userAiMessage = new UserAiMessage(); // 填充默认值 User loginUser = userService.getLoginUser(request); Integer aiRemainNumber = loginUser.getAiRemainNumber(); // 检查用户剩余 AI 调用次数是否足够,如果不足,直接返回错误信息 ThrowUtils.throwIf(aiRemainNumber <= 0, ErrorCode.USER_BALANCE_NOT_ENOUGH); userAiMessage.setUserId(loginUser.getId()); userAiMessage.setUserInputText(userInputText); String presetInformation = "你是一个二手商品交易推荐官,你需要根据数据库的商品名称、价格、新旧程度、库存、用户的现有余额、用户的偏好等多方面进行适配性推荐,并给出相关的理由。\n"; String userText = "用户偏好信息:" + userInputText+"\n"; // 使用 Stream 处理数据 String commodityList = commodityService.list().stream() .filter(commodity -> commodity.getIsListed() == 1) // 过滤出已上架的商品 .map(commodity -> String.format( "商品名称: %s, 新旧程度: %s, 库存: %d, 价格: %.2f", commodity.getCommodityName(), commodity.getDegree(), commodity.getCommodityInventory(), commodity.getPrice() )) .collect(Collectors.joining("\n")); // 用换行符拼接每条商品信息 String commodityInfo = "数据库商品信息如下:"+commodityList+"\n"; BigDecimal balance = loginUser.getBalance(); String userInfo = "用户相关信息如下,"+"用户余额:"+balance+"\n"; List<SparkMessage> messages = new ArrayList<>(); messages.add(SparkMessage.userContent(presetInformation + userText+commodityInfo+userInfo)); String response = ""; int timeout = 35; // 超时时间,单位为秒 // 构造请求 SparkRequest sparkRequest = SparkRequest.builder() // 模型回答的tokens的最大长度,非必传,默认为2048。 // V1.5取值为[1,4096] // V2.0取值为[1,8192] // V3.0取值为[1,8192] .maxTokens(2048) .messages(messages) // 核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高 非必传,取值为[0,1],默认为0.5 .temperature(0.2) .build(); Future<String> future = threadPoolExecutor.submit(() -> { try { // 同步调用 StopWatch stopWatch = new StopWatch(); stopWatch.start(); SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest); SparkTextUsage textUsage = chatResponse.getTextUsage(); stopWatch.stop(); long total = stopWatch.getTotal(TimeUnit.SECONDS); System.out.println("本次接口调用耗时:" + total + "秒"); System.out.println("\n回答:" + chatResponse.getContent()); System.out.println("\n提问tokens:" + textUsage.getPromptTokens() + ",回答tokens:" + textUsage.getCompletionTokens() + ",总消耗tokens:" + textUsage.getTotalTokens()); return chatResponse.getContent(); // return AlibabaAIModel.doChatWithHistory(stringBuilder.toString(),recentHistory); } catch (Exception exception) { throw new RuntimeException("遇到异常"); } }); try { response = future.get(timeout, TimeUnit.SECONDS); } catch (Exception e) { log.info("服务器接口调用超时"); } System.out.println(response); userAiMessageAddRequest.setAiGenerateText(response); // 复制属性 BeanUtils.copyProperties(userAiMessageAddRequest, userAiMessage); // 校验数据 userAiMessageService.validUserAiMessage(userAiMessage, true); // 插入数据库 boolean result = userAiMessageService.save(userAiMessage); ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); // 更新用户余额 loginUser.setAiRemainNumber(aiRemainNumber - 1); boolean update = userService.updateById(loginUser); ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR); long newUserAiMessageId = userAiMessage.getId(); UserAiMessage generateAnswer = userAiMessageService.getById(newUserAiMessageId); return ResultUtils.success(generateAnswer); } ``` ## **代码解释** ### **方法定义** - **方法名**:`addUserAiMessage` - **作用**:处理用户提交的二手商品偏好信息,生成 AI 推荐的二手商品列表。 - **注解**: - `@PostMapping("/add")`:表示这是一个 POST 请求接口,路径为 `/add`。 - **参数**: - `UserAiMessageAddRequest userAiMessageAddRequest`:用户提交的请求体,包含用户输入的偏好信息。 - `HttpServletRequest request`:HTTP 请求对象,用于获取当前登录用户信息。 - **返回值**:`BaseResponse<UserAiMessage>`,封装了 AI 生成的推荐结果。 ------ ### **参数校验** 1. **空值校验**: - 使用 `ThrowUtils.throwIf` 方法检查 `userAiMessageAddRequest` 是否为空。 - 如果为空,抛出 `PARAMS_ERROR` 异常。 2. **违禁词校验**: - 使用 `WordUtils.containsForbiddenWords` 方法检查用户输入的文本是否包含违禁词。 - 如果包含违禁词,抛出 `WORD_FORBIDDEN_ERROR` 异常。 ------ ### **用户余额检查** 1. **获取用户信息**: - 通过 `userService.getLoginUser(request)` 获取当前登录用户信息。 - 获取用户的 AI 调用余额 `aiRemainNumber`。 2. **余额不足校验**: - 如果 `aiRemainNumber <= 0`,抛出 `USER_BALANCE_NOT_ENOUGH` 异常,提示用户余额不足。 ------ ### **AI 推荐生成** 1. **构造 AI 输入信息**: - **预设提示信息**:告诉 AI 模型它是一个二手商品交易推荐官,需要根据商品名称、价格、新旧程度、库存、用户余额和偏好进行推荐。 - **用户偏好信息**:将用户输入的偏好信息附加到预设提示信息中。 - **商品信息**: - 使用 `commodityService.list()` 获取所有商品列表。 - 使用 `Stream` 过滤出已上架的商品(`isListed == 1`)。 - 将商品信息格式化为字符串,包括商品名称、新旧程度、库存和价格。 - **用户余额信息**:将用户的余额信息附加到输入中。 2. **构造 AI 请求**: - 使用 `SparkRequest.builder()` 构造 AI 请求,设置以下参数: - `maxTokens`:模型回答的最大 tokens 长度,默认为 2048。 - `messages`:包含预设提示信息、用户偏好信息、商品信息和用户余额信息的消息列表。 - `temperature`:核采样阈值,控制结果的随机性,设置为 0.2。 3. **异步调用 AI 模型**: - 使用线程池 `threadPoolExecutor` 异步调用 AI 模型。 - 设置超时时间为 35 秒。 - 如果调用超时,记录日志并返回空响应。 4. **处理 AI 响应**: - 获取 AI 生成的推荐结果 `response`。 - 将结果保存到 `userAiMessageAddRequest` 中。 ------ ### **保存结果到数据库** 1. **复制属性**: - 使用 `BeanUtils.copyProperties` 将 `userAiMessageAddRequest` 的属性复制到 `userAiMessage` 对象中。 2. **数据校验**: - 调用 `userAiMessageService.validUserAiMessage` 对 `userAiMessage` 进行校验,确保数据合法性。 3. **插入数据库**: - 调用 `userAiMessageService.save` 将 `userAiMessage` 插入数据库。 - 如果插入失败,抛出 `OPERATION_ERROR` 异常。 4. **更新用户余额**: - 将用户的 AI 调用余额减 1。 - 调用 `userService.updateById` 更新用户信息。 - 如果更新失败,抛出 `OPERATION_ERROR` 异常。 ------ ### **返回结果** - 返回生成的 AI 推荐结果,封装在 `BaseResponse` 中。 ------ ### **注意事项** 1. **参数校验**: - 确保 `userAiMessageAddRequest` 和 `userInputText` 不为空,避免空指针异常。 - 使用违禁词过滤功能,防止用户输入不当内容。 2. **用户余额管理**: - 在调用 AI 模型之前,检查用户的 AI 调用余额,避免无效调用。 - 调用成功后,及时更新用户的余额信息。 3. **AI 模型调用**: - 使用异步调用(`Future`)和超时机制,避免因 AI 模型响应过慢导致接口阻塞。 - 设置合理的超时时间(如 35 秒),并根据实际需求调整。 4. **线程池管理**: - 确保线程池 `threadPoolExecutor` 已正确配置,避免资源耗尽或线程泄漏。 - 在异步任务中捕获异常,避免因异常导致线程池崩溃。 5. **数据校验与保存**: - 在保存数据之前,调用 `validUserAiMessage` 方法进行校验,确保数据合法性。 - 使用事务管理(如果需要),确保数据插入和用户余额更新的原子性。 6. **日志记录**: - 在关键步骤(如 AI 调用、数据库操作)中添加日志记录,便于排查问题。 - 记录 AI 调用的耗时和 tokens 使用情况,便于性能分析和优化。 7. **性能优化**: - 如果 AI 调用频率较高,考虑使用缓存机制(如 Redis)存储常用推荐结果,减少重复调用。 - 对数据库查询(如 `commodityService.list()`)进行优化,避免全表扫描。 8. **异常处理**: - 在异步任务中捕获所有异常,避免因未捕获异常导致接口崩溃。 - 返回明确的错误码和错误信息,便于前端处理。 9. **安全性**: - 确保用户输入的文本经过安全过滤,防止 SQL 注入或 XSS 攻击。 - 对敏感操作(如余额更新)进行权限校验,确保只有合法用户才能调用。 10. **扩展性**: - 如果需要支持多种 AI 模型,可以将 AI 调用逻辑抽象为独立的服务,便于切换和扩展。 - 如果需要支持多语言推荐,可以在预设提示信息中增加语言参数。 ## ☀️学完这个项目你能得到什么 1)简单地调用 AI 模型(讯飞星火)获取自定义文本内容,支持 Websocket 形式,也可以获取全部数据后返回。 2)简单的 JWT 权限校验 ,利用后端拦截器进行登录校验。 3)简单的增删改查系统,前后端是如何联调协作的。 4)前端路由懒加载、CDN 静态资源缓存优化、图片懒加载是如何实现的 5)利用自定义线程池和 FutureTask 进行超时请求处理。 6)利用 Google 的 GuavaRateLimiter 进行单体限流控制。 7)定时任务结合 Redis 做一个缓存预热,加快查询效率,提高用户体验。 8)在 Vue3 中使用 Markdown 编辑器和仅浏览模式、实现剪切板功能,类似与复制个人电话号码、使用弹幕插件,实现类似 B 站弹幕的功能。 9)实现牛客等论坛的评论区功能,并有良好的样式体验。 10)实现力扣等平台的旅游记录日历展示,给用户持续的旅游动力。 ## ☀️项目简介 + 主要使用 Vue3 和 SpringBoot2.7 实现 + 项目权限控制分别为:用户(游客),系统管理员 + 开发工具:IDEA 2023.3.3 (真不推荐用 eclipse 开发,IDEA 项目可以导出为 eclipse 项目,二者不影响,但需要自己学教程,注意 IDEA 版本最好不要低于 2021,不建议用中文哦!) + [IDEA->Eclipse](https://blog.csdn.net/HD202202/article/details/128076400) + [Eclipse->IDEA](https://blog.csdn.net/q20010619/article/details/125096051) + 学校老师硬性要求软件的话,还是按要求来。可以先问一下是否可以选择其他软件开发(一般不会做限制,尤其毕设)。 + 用户账号密码: xiaobaitiao 12345678 + 系统管理员账号密码: xiaobai 12345678 + 遇到交互功能错误,或者页面无法打开,请用开发者工具F12查看请求和响应状态码情况,小白可以有偿咨询,扫 QQ 或者 WX:xiaobaitiao_z。白天工作,晚上有空才能回答。⭐⭐⭐ ## ☀️项目详细介绍(亮点) - **前后端分离架构**:本项目采用前后端分离的模式,前端负责页面构建和用户交互,后端提供数据接口,前端通过调用后端接口获取数据并动态渲染页面,提升开发效率和系统可维护性。 - **跨域支持**:后端已开启 CORS 跨域支持,确保前端能够无缝调用后端接口,解决跨域问题。 - **Token 认证机制**:API 认证采用 Token 认证,前端在请求头 `Authorization` 字段中携带 Token 令牌,确保接口调用的安全性。 - **标准化数据交互**:使用 HTTP Status Code 表示接口状态,数据返回格式统一为 JSON,便于前后端协作和数据解析。 - **权限校验与登录检查**:后端采用权限拦截器进行权限校验,确保只有合法用户才能访问特定接口,并检查用户的登录状态,增强系统安全性。 - **全局异常处理**:添加全局异常处理机制,捕获系统异常并返回友好的错误信息,增强系统的健壮性和用户体验。 - **数据可视化**:前端使用 Echarts 可视化库实现商品热度分析图表(如折线图、饼图),并通过 Loading 配置优化加载体验,提升用户交互感受。 - **弹幕留言功能**:留言组件采用弹幕形式,贴合用户喜好,增加平台的趣味性和互动性。 - **接口文档自动化**:引入 knife4j 依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以基于此文档使用插件自动生成接口请求代码,降低前后端协作成本。 - **高效前端开发**:使用 ElementUI 组件库进行前端界面搭建,快速实现页面生成,并支持前后端统一权限管理和多环境切换,提升开发效率。 - **灵活数据库查询**:基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询,配合 MyBatisX 插件自动生成后端 CRUD 基础代码,减少重复开发工作。 - **性能优化**:前端采用路由懒加载、CDN 静态资源缓存优化、图片懒加载等技术,提升页面加载速度和用户体验。 - **AI 商品推荐**:集成 AI 模型,根据用户偏好和余额推荐个性化二手商品,支持协同过滤算法,提升推荐精准度。 - **购物日历功能**:为用户提供个人购物日历,记录购物足迹,支持绿色购物标记(0 和 1 表示),帮助用户规划和管理购物行为。 - **攻略分享社区**:用户可以通过 Markdown 编辑器分享二手商品交易攻略,浏览他人经验,并通过评论区互动交流,形成活跃的交易社区。 - **商品在线交易**:支持在线查看商品信息并完成交易,提供一站式二手商品交易服务。 - **多维度商品评分**:结合用户评分和 AI 分析,动态生成商品评分,帮助用户快速了解商品热度。 - **管理员便捷管理**:为管理员提供用户、商品、攻略、订单等内容的管理功能,支持分页和模糊查询,提升管理效率。 他 AI 模型官网工具类即可),并可通过拓展会员功能实现商业化处理。 ### ⭐用户(游客)模块功能介绍   1)**欢迎页**:介绍项目亮点,展示用户功能和管理者功能,帮助用户快速了解平台的核心价值和使用方法。 2)**主页**:使用 Swiper 轮播图展示亮点商品图片,吸引用户眼球,提升视觉体验。 3)**公告浏览**:用户可以查看管理员发布的公告,获取平台最新动态和重要通知。 4)**买家留言**:支持弹幕形式的留言功能,用户可以进行实时互动,增加平台的趣味性和活跃度。 5)**二手商品交易攻略分享**:用户可以分享自己的二手商品交易攻略,使用 Markdown 编辑器撰写内容,并浏览他人分享的攻略,支持模糊搜索和分页展示。 6)**AI 对话**:用户可以与 AI 购物顾问进行对话,AI 根据用户偏好和余额推荐个性化商品,采用协同过滤算法提升推荐精准度。 7)**商品列表**:展示所有二手商品信息,支持评分、浏览量和收藏量等功能,帮助用户快速了解热门商品。  8)**个人主页**:展示个人购物记录日历(用 0 和 1 标记是否绿色购物),查看个人订单详情、评论记录、收藏的攻略以及个人详情信息,支持聊天室功能(用户和管理员进行对话,支持 Emoji 表情包)。 9)**商品推荐**:根据协同过滤算法推荐商品,本质是基于商品评分和用户行为数据。 ### ⭐系统管理员模块功能介绍  1)**欢迎页**:同用户一致,介绍项目亮点,展示管理员功能,帮助管理员快速了解平台的核心价值和使用方法。 2)**主页**:同用户一致,使用 Swiper 轮播图展示亮点商品图片,吸引管理员关注平台动态。 3)**用户管理**:支持编辑、查看、删除用户信息,支持分页和模糊查询(按用户名或简介)。 4)**公告管理**:支持发布、修改、删除公告,支持分页展示,方便管理员管理平台公告。 5)**二手商品攻略管理**:支持添加、修改、删除攻略,支持分页和模糊查询(按标题、内容、标签或用户 ID)。 6)**AI 对话管理**:支持删除用户与 AI 的对话记录,支持分页和模糊查询(按用户 ID、用户输入或 AI 生成内容)。 7)**商品管理**:支持添加、修改、删除商品信息,支持分页和模糊查询(按商品名或描述)。 8)**商品订单管理**:支持查看、修改、删除用户订单,支持分页和模糊查询(按订单 ID、用户 ID 或订单状态)。 10)**商品类别管理**:支持添加、修改、删除商品类别,支持分页和模糊查询(按类别 ID 或名称)。 11)**个人主页**:同用户一致,展示管理员个人信息、操作记录等。 ## ☀️数据库表设计 ### **barrage 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 弹幕表的唯一标识 | | message | varchar(255) | 弹幕文本 非空 | | userAvatar | varchar(1024) | 用户头像 非空 | | userId | bigint(20) | 用户 ID 非空 | | isSelected | tinyint(4) | 是否精选(默认0,精选为1) | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **comment 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 评论表的唯一标识 | | postId | bigint(20) | 帖子 ID 非空 | | userId | bigint(20) | 用户 ID 非空 | | content | text | 评论内容 非空 | | parentId | bigint(20) | 父评论 ID | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | | ancestorId | bigint(20) | 祖先评论 ID | ------ ### **commodity 表** | 列名 | 数据类型以及长度 | 备注 | | :------------------- | :--------------- | :------------------------------- | | id | bigint(20) | 主键 非空 自增 商品表的唯一标识 | | commodityName | varchar(255) | 商品名称 非空 | | commodityDescription | varchar(2048) | 商品简介 | | commodityAvatar | varchar(1024) | 商品封面图 | | degree | varchar(255) | 商品新旧程度 | | commodityTypeId | bigint(20) | 商品分类 ID | | adminId | bigint(20) | 管理员 ID 非空 | | isListed | tinyint(4) | 是否上架(默认0未上架,1已上架) | | commodityInventory | int(10) | 商品数量(默认0) | | price | decimal(10, 2) | 商品价格 非空 | | viewNum | int(11) | 商品浏览量(默认0) | | favourNum | int(11) | 商品收藏量(默认0) | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **commodity_order 表** | 列名 | 数据类型以及长度 | 备注 | | :------------ | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 订单表的唯一标识 | | userId | bigint(20) | 用户 ID 非空 | | commodityId | bigint(20) | 商品 ID 非空 | | remark | varchar(1024) | 订单备注 | | buyNumber | int(10) | 购买数量 | | paymentAmount | decimal(10, 2) | 订单总支付金额 | | payStatus | tinyint(4) | 支付状态(0-未支付,1-已支付) | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **commodity_score 表** | 列名 | 数据类型以及长度 | 备注 | | :---------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 评分表的唯一标识 | | commodityId | bigint(20) | 商品 ID 非空 | | userId | bigint(20) | 用户 ID 非空 | | score | int(10) | 评分(0-5,星级评分) 非空 | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **commodity_type 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 分类表的唯一标识 | | typeName | varchar(255) | 商品类别名称 非空 | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **notice 表** | 列名 | 数据类型以及长度 | 备注 | | :------------ | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 公告表的唯一标识 | | noticeTitle | varchar(255) | 公告标题 非空 | | noticeContent | varchar(255) | 公告内容 非空 | | noticeAdminId | bigint(20) | 创建人 ID(管理员) 非空 | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **post 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 帖子表的唯一标识 | | title | varchar(512) | 帖子标题 | | content | text | 帖子内容 | | tags | varchar(1024) | 标签列表(json 数组) | | thumbNum | int(11) | 点赞数(默认0) | | favourNum | int(11) | 收藏数(默认0) | | userId | bigint(20) | 用户 ID 非空 | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **post_favour 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 收藏表的唯一标识 | | postId | bigint(20) | 帖子 ID 非空 | | userId | bigint(20) | 用户 ID 非空 | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | ------ ### **post_thumb 表** | 列名 | 数据类型以及长度 | 备注 | | :--------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 点赞表的唯一标识 | | postId | bigint(20) | 帖子 ID 非空 | | userId | bigint(20) | 用户 ID 非空 | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | ------ ### **private_message 表** | 列名 | 数据类型以及长度 | 备注 | | :---------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 消息表的唯一标识 | | senderId | bigint(20) | 发送者 ID 非空 | | recipientId | bigint(20) | 接收者 ID 非空 | | content | varchar(4096) | 消息内容 | | alreadyRead | tinyint(4) | 是否已读(0-未读,1-已读) | | type | varchar(255) | 消息类型(用户或管理员) 非空 | | isRecalled | tinyint(4) | 是否撤回(0-未撤回,1-已撤回) | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **user 表** | 列名 | 数据类型以及长度 | 备注 | | :------------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 用户表的唯一标识 | | userAccount | varchar(256) | 账号 非空 | | userPassword | varchar(512) | 密码(加密) 非空 | | unionId | varchar(256) | 微信开放平台 ID | | mpOpenId | varchar(256) | 公众号 openId | | userName | varchar(256) | 用户昵称 | | userAvatar | varchar(1024) | 用户头像 | | userProfile | varchar(512) | 用户简介 | | userRole | varchar(256) | 用户角色:user/admin/ban | | userPhone | varchar(255) | 联系电话 | | aiRemainNumber | int(11) | 用户 AI 剩余可使用次数 | | balance | decimal(10, 2) | 用户余额(仅 AI 接口调用) | | editTime | datetime | 编辑时间 | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **user_ai_message 表** | 列名 | 数据类型以及长度 | 备注 | | :------------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 消息表的唯一标识 | | userInputText | varchar(4096) | 用户输入 非空 | | aiGenerateText | varchar(4096) | AI 生成结果 非空 | | userId | bigint(20) | 用户 ID 非空 | | createTime | datetime | 创建时间 非空 | | updateTime | datetime | 更新时间 非空 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) | ------ ### **user_commodity_favorites 表** | 列名 | 数据类型以及长度 | 备注 | | :---------- | :--------------- | :------------------------------ | | id | bigint(20) | 主键 非空 自增 收藏表的唯一标识 | | userId | bigint(20) | 用户 ID 非空 | | commodityId | bigint(20) | 商品 ID 非空 | | status | tinyint(4) | 收藏状态(1-正常,0-取消) | | remark | varchar(255) | 用户备注 | | createTime | datetime | 创建时间 | | updateTime | datetime | 更新时间 | | isDelete | tinyint(4) | 是否删除(1 删除,0 未删除) |  <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/0zhGHKP9DC5W9jm8.webp" alt="" width="100%" /> ### 用户(游客)模块功能图 **欢迎页** <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/xNeDFLX8w3ETnDI1.webp" alt="" width="100%" />  **主页(轮播图)**   **商品** <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/Q2PY5DNg0GrCx13I.webp" alt="" width="100%" /> **商品推荐**  **公告**       **二手商品推荐官**  **个人主页(包含个人信息,收藏攻略,个人订单,购物日历,聊天室)**  ### 系统管理员功能图 欢迎页和个人主页同用户端,不再展示图片! 1158118402/pKEoJGOGeVpomMGC.webp) **用户管理**  **公告管理**  1158118402/5w6NYVMmvFD89Ulg.webp) **攻略管理**  **AI 对话管理**  **商品管理**    **商品类别管理**   **商品订单管理**  ## 🐼部署项目  + 可以下载ZIP压缩包或者使用克隆(Git clone) + 复制http或者ssh的链接(github建议ssh,gittee都可以) + 在D盘新建一个文件夹,点击进入该文件夹,右键Git Bash Here <img src="https://pic.code-nav.cn/post_picture/1613062171158118402/dGHJszaABlONwOwi.webp" alt="" width="100%" />  + 还没有下载 Git或者不会 Git 的建议先看基础教程( 30 分钟左右) + 输入 git init 初始化 git 项目 然后出现一个 .git 文件夹 + 输入 git remote add origin xxxxxx (xxx 为刚刚复制的 http 或者 ssh 链接) + 输入 git pull origin master 从远程代码托管仓库拉取代码 + 成功拉取项目(前端后端都是如此) + 前端项目注意依赖下载使用 npm install 或者 yarn install ( Vscode 或者 Webstorm ) + 后端项目注意 maven 依赖下载( IDEA (推荐)或者 Ecplise ) + 前端 npm 镜像源建议淘宝镜像源,后端 maven 镜像源推荐阿里云镜像源(非必选,但更换后下载快速) ## 🐼部署项目问题 ⭐ + 乱码问题 项目采用的 UFT-8 + 一般出现乱码就是 UTF-8 和 GBK 二者相反 + 请百度 IDEA 乱码和 Eclipse 乱码问题(描述清楚即可) ⭐ + 点击交互按钮,没有发生反应。 + 很明显,请求失败,浏览器打开开发者工具,Edge 浏览器直接 ctrl+shift+i ,其他浏览器按 F12 + 查看红色的请求和响应状态码问题 ⭐ + 先阅读文档再进行问题的查询或者提问 + 提问有技巧,模糊的发言,让高级架构师找BUG也无从下手 ⭐ + **QQ:909088445** + 一般晚上在线,建议先自己寻找问题!!! 智能 AI 校园二手交易平台(SpringBoot2+Vue3+TypeScript),二手商品交易管理系统(新版)。API认证采用JWT。后端CORS跨域支持。HTTP Status Code表示状态。数据返回格式JSON。接入讯飞星火 AI 接口,支持 B 站弹幕留言、二维码分享项目、牛客评论区、力扣刷题日历、微信聊天室(表情包支持)复合多个实用功能项!另外有订单超时处理,多线程以及事务管理方面的相关的代码! **课设级别绰绰有余,毕设肯定够用(功能丰富+AI调用和实用的功能项),简历项目(可以写订单处理、多线程、事务方面以及大模型提示词优化实验对照或者微调等等)** **喜欢本项目的小伙伴可以关注我!然后点赞收藏本帖子(编程导航专栏),感谢支持!**
