news 2026/10/10 2:45:59

springboot商城购物app98746-计算机课程设计、毕业设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot商城购物app98746-计算机课程设计、毕业设计

前言

✨博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍

👇精彩专栏 推荐订阅👇

Java精品项目案例【3000套】

Python精品项目案例【500套】

uniapp/微信小程序/安卓app【800套】

2026-2027届Java毕业设计优质选题汇总:百个热门方向完整推荐✅

2026-2027届Python毕业设计优质选题汇总:百个热门方向完整推荐✅

2026-2027届小程序/APP毕业设计优质选题汇总:百个热门方向完整推荐✅

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

系统实现

普通用户功能实现

注册

游客注册时,系统要求其提供必要的信息,例如账号、密码、昵称、邮箱等。这些信息通常由用户在注册表单中输入,并通过前端验证确保格式的正确性。注册过程完成后,系统会为新用户创建一个账户。这包括分配一个唯一的用户ID和设置初始的权限或者角色。注册界面如下图所示。

注册界面图

首页

登录成功后,普通用户进入首页模块,首页主要展示轮播图以及各大功能板块,用户可根据需求进行选择浏览,通过清晰的界面布局和内容展示,为用户提供良好的导航菜单和功能浏览体验,引导用户进行系统内各项操作,也可以点击搜索框查找对应内容,另外首页集成智能推荐,能够按用户购买后的类型进行排序推荐。首页界面如下图所示。

首页界面图

定制工坊

普通用户进入定制工坊界面,可以选择定制类型快速找到自己想要的定制内容,可查看定制详情,可对内容进行点赞、收藏和评论,也可点击页面的“在线沟通”按钮,输入文字与商家实时沟通,另外提供“定制”按钮,用户可点击填写定制要求,提交定制信息。定制工坊列表界面如下图所示。

定制工坊列表界面

定制信息详情界面

在线反馈

普通用户可通过“在线反馈”功能,随时向平台提交关于系统使用体验、商品质量、服务流程等方面的意见或建议。在弹出页面中,用户可先选择反馈类型(如投诉、建议或其他),再填写具体内容并提交,操作便捷、流程清晰。在线反馈提交界面如下图所示。

在线反馈提交界面

商城中心

用户进入商城中心界面,可以查看系统在售商品列表,可按分类进行筛选查询,查看商品详情,包含商品名称、图片、详情、价格、库存和评论等,可以收藏商品、加入购物车和直接购买商品,提交订单后可在线支付费用,提供多种支付方式。用户还可对购买过的商品进行评论。同时提供客服功能,在购买过程中有任何疑问都可点击详情页面的“客服”按钮,进行实时的咨询。另外提供一键分享功能,用户可通过此功能快捷的与他人分享商品。商城中心界面如下图所示。

商城中心界面

商品详情界面

购物车

在“购物车”功能中,普通用户可集中查看已添加的商品,灵活调整商品数量、勾选所需商品进行批量操作,并随时删除不需要的条目;确认选购内容后,可一键提交订单并跳转至支付页面完成结算。购物车实时同步商品价格与库存状态,确保用户获得准确、流畅的购物流程体验。购物车界面如下图所示。

购物车界面

我的

“我的”模块是普通用户的个人中心,集中管理账户与购物相关的核心功能。用户可在此修改个人资料与登录密码,查看和管理收货地址,浏览“我的订单”并按状态(如待付款、待发货、待签收、售后/退款)分类跟踪订单进展,可对已收货的订单进行签收操作,也可根据需求提交售后申请,提交后可在“售后/退款”中查看审核状态;同时还可查看管理收藏记录和自己发表过的评论内容;查阅已提交的定制信息及定制状态,并可进行支付操作;追踪在线反馈的审核状态和回复情况;可以实时了解订单配送动态等。我的界面如下图所示。

我的界面

售后申请界面

定制信息界面

管理员功能实现

数据分析

管理员数据分析是系统管理的核心入口,提供全面的数据概览与快捷操作功能。首页集中展示关键运营数据可视化图表,包括商品销售金额、商品销售数量和商品销售类型统计,所有数据均支持按日期范围灵活筛选。同时首页设有常用功能的快捷入口,便于管理员快速跳转至定制工坊管理、定制信息管理、在线反馈管理和售后管理等核心模块。数据分析界面如下图所示。

数据分析界面

角色管理

管理员在角色管理模块,可以查看和管理系统上的所有用户,包含管理员和普通用户,执行新增、编辑和删除操作,并支持对异常账号进行封禁或解封处理。角色管理界面如下图所示。

角色管理界面

定制工坊管理

在“定制工坊管理”功能中,管理员可全面维护平台的定制服务内容。具体包括:查看和管理所有定制工坊的列表、详情信息以及评论内容,可根据业务需求新增、编辑或删除定制工坊项目。通过该模块,管理员能够高效统筹个性化定制资源,确保定制服务内容的准确性、时效性与用户体验的一致性。定制工坊管理界面如下图所示。

定制工坊管理界面

定制信息管理

在“定制信息管理”功能中,管理员可集中查看和处理用户提交的所有定制订单。系统清晰展示每条定制信息的详细内容、用户信息及定制状态(如需求确认中、制作中、已完成、待发货)。对于已支付的定制订单,管理员可及时安排生产或服务,并更新定制进度状态。定制信息详情界面如下图所示。

定制信息详情界面

在线反馈管理

在“在线反馈管理”功能中,管理员可集中查看所有用户提交的反馈内容,包括反馈类型(如建议、投诉或其他)、反馈内容、反馈日期及用户信息。管理员可对每条反馈进行审核并回复。在线反馈审核界面如下图所示。

在线反馈审核界面

系统管理

管理员在系统管理模块,可以进行轮播图管理,此模块赋予管理员灵活调整平台首页视觉展示的能力。通过后台操作,管理员可以轻松上传、替换或删除轮播图,设置图片链接,引导用户关注热门信息。系统管理界面如下图所示。

系统管理界面

商城管理

“商城管理”功能是管理员对平台商品与交易核心内容进行全方位管控的重要模块。管理员可对商品分类进行增删改查,灵活调整商城结构;管理商城中心列表,包括编辑商品信息、上下架状态、删除商品、调整库存及价格等,并可查看用户对商品的评论,也可根据需求进行商城中心添加。在订单列表中,管理员可查看用商城的所有订单详情和执行发货操作;在订单配送中可以跟踪配送状态;在订单售后中可以查看并审核用户提交的售后申请,决定是否通过退换货或退款等操作。商城中心列表界面如下图所示。

商城中心列表界面

订单配送界面

订单售后详情界面

数据库参考

CREATE TABLE `logistics_delivery` ( `logistics_delivery_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '物流配送ID', `order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号', `product_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称', `purchase_quantity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '购买数量', `total_transaction_amount` double(10,2) DEFAULT '0.00' COMMENT '交易总额', `the_date_of_issuance` date DEFAULT NULL COMMENT '发货日期', `delivery_number` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送订单', `ordinary_users` int(11) DEFAULT '0' COMMENT '普通用户', `shipping_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收货地址', `delivery_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送状态', `signing_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '签收状态', `recommend` int(11) NOT NULL DEFAULT '0' COMMENT '智能推荐', `contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人名字', `merchant_id` int(11) DEFAULT NULL COMMENT '商家id', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `courier_type` int(11) NOT NULL DEFAULT '1' COMMENT '配送方式(1:商家配送,2:其他配送)', `courier_id` int(11) DEFAULT NULL COMMENT '配送员ID', `courier_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配送员名字', `courier_detail` longtext COLLATE utf8mb4_general_ci COMMENT '配送详情', PRIMARY KEY (`logistics_delivery_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物流配送'; DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `goods_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品ID', `title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标题', `img` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '封面图:用于显示于产品列表页', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述', `price_ago` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价', `price` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '卖价', `sales` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '销量', `inventory` int(11) NOT NULL DEFAULT '0' COMMENT '商品库存', `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '商品分类', `hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击量', `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文', `img_1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图1', `img_2` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图2', `img_3` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图3', `img_4` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图4', `img_5` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图5', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `customize_field` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '自定义字段', `source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表', `source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段', `source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID', `user_id` int(11) unsigned DEFAULT '0' COMMENT '添加人', `integral` int(11) DEFAULT '0' COMMENT '积分', `list_status` smallint(1) DEFAULT '1' COMMENT '上架状态(0:下架;1上架)', PRIMARY KEY (`goods_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品信息';

代码参考

package com.project.demo.controller; import com.project.demo.controller.base.BaseController; import com.project.demo.entity.CodeToken; import com.project.demo.service.CodeTokenService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.text.SimpleDateFormat; import java.util.*; /** * 邮箱验证码:(Ad)表控制层 */ @RestController @RequestMapping("code_token") public class CodeTokenController extends BaseController<CodeToken, CodeTokenService> { /** * 服务对象 */ @Autowired public CodeTokenController(CodeTokenService service) { setService(service); } @Autowired private JavaMailSender mailSender; /** * 发送验证码到邮箱API * * @param email * @return */ @GetMapping("send_email") public Map<String, Object> sendEmail(String email) { //判断邮箱号是否为空 if (StringUtils.isEmpty(email)) { return error(30000, "参数错误"); } try { //随机生成 6位数的验证码 int code = (int) (Math.floor(Math.random() * 900000) + 100000); // 创建MimeMessage对象 MimeMessage mimeMessage = mailSender.createMimeMessage(); // 使用MimeMessageHelper辅助类构建邮件 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); // 设置收件人、发件人、主题和内容 helper.setFrom("3216252476@qq.com"); // 替换为你的QQ邮箱地址 helper.setTo(email); helper.setSubject("找回密码"); helper.setText("<h1>验证码为:"+code+"</h1>", true); // 发送邮件 mailSender.send(mimeMessage); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE,10); String token = service.encryption(code + "_" + cal.getTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map<String, Object> map = new HashMap<>(); map.put("token",token); map.put("code",code); map.put("expire_time",format.format(cal.getTime())); this.addMap(map); Map<String, Object> result = new HashMap<>(); result.put("result",1); result.put("token",token); return result; }catch (MessagingException e){ e.printStackTrace(); return error(30000, e.getMessage()); } } @GetMapping("verify_email_code") public Map<String, Object> verifyEmailCode(String token,String code) { if (StringUtils.isEmpty(token) || StringUtils.isEmpty(code)) { return error(30000, "参数错误"); }else { Map<String,String> queryMap = new HashMap<>(); queryMap.put("token",token); Map<String,String> configMap = new HashMap<>(); configMap.put("like","false"); List resultList = service.selectBaseList(service.select(queryMap, configMap)); if (resultList.size() > 0) { CodeToken obj = (CodeToken) resultList.get(0); Date now = new Date(); if (obj.getExpire_time().after(now)){ if (code.equals(obj.getCode())){ return success(1); }else { return error(30000, "验证码错误"); } }else { return error(30000, "验证码已失效"); } }else { return error(30000, "token请求错误"); } } } } package com.project.demo.controller; import com.project.demo.entity.CustomizationInformation; import com.project.demo.service.CustomizationInformationService; import com.alibaba.fastjson.JSON; import com.project.demo.controller.base.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.util.StringUtils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 定制信息:(CustomizationInformation)表控制层 * */ @RestController @RequestMapping("/customization_information") public class CustomizationInformationController extends BaseController<CustomizationInformation, CustomizationInformationService> { /** * 定制信息对象 */ @Autowired public CustomizationInformationController(CustomizationInformationService service) { setService(service); } @PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); CustomizationInformation customization_information = new CustomizationInformation(); customization_information.setCustom_number(paramMap.get("custom_number")==null?null:String.valueOf(paramMap.get("custom_number"))); customization_information.setCustom_type(paramMap.get("custom_type")==null?null:String.valueOf(paramMap.get("custom_type"))); customization_information.setName_of_manufacturer(paramMap.get("name_of_manufacturer")==null?null:String.valueOf(paramMap.get("name_of_manufacturer"))); customization_information.setRegular_user(paramMap.get("regular_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("regular_user")))); customization_information.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); customization_information.setCustom_requirements(paramMap.get("custom_requirements")==null?null:String.valueOf(paramMap.get("custom_requirements"))); customization_information.setCustom_status(paramMap.get("custom_status")==null?null:String.valueOf(paramMap.get("custom_status"))); customization_information.setCustomized_price(paramMap.get("customized_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("customized_price")))); customization_information.setPay_state(paramMap.get("pay_state")==null?null:String.valueOf(paramMap.get("pay_state"))); customization_information.setPay_type(paramMap.get("pay_type")==null?null:String.valueOf(paramMap.get("pay_type"))); customization_information.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); customization_information.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); customization_information.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); customization_information.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by")))); this.addEntity(customization_information); System.out.println("定制信息新增成功"); return success(1); } @PostMapping("/set") @Transactional public Map<String, Object> set(HttpServletRequest request) throws IOException { Map<String,String> queryMap = service.readQuery(request); Map<String,String> configMap = service.readConfig(request); Map<String,Object> paramMap = service.readBody(request.getReader()); paramMap.entrySet().removeIf(entry -> { Object value = entry.getValue(); return value instanceof String && ((String) value).isEmpty(); }); CustomizationInformation customization_information = new CustomizationInformation(); customization_information.setCustom_number(paramMap.get("custom_number")==null?null:String.valueOf(paramMap.get("custom_number"))); customization_information.setCustom_type(paramMap.get("custom_type")==null?null:String.valueOf(paramMap.get("custom_type"))); customization_information.setName_of_manufacturer(paramMap.get("name_of_manufacturer")==null?null:String.valueOf(paramMap.get("name_of_manufacturer"))); customization_information.setRegular_user(paramMap.get("regular_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("regular_user")))); customization_information.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name"))); customization_information.setCustom_requirements(paramMap.get("custom_requirements")==null?null:String.valueOf(paramMap.get("custom_requirements"))); customization_information.setCustom_status(paramMap.get("custom_status")==null?null:String.valueOf(paramMap.get("custom_status"))); customization_information.setCustomized_price(paramMap.get("customized_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("customized_price")))); customization_information.setPay_state(paramMap.get("pay_state")==null?null:String.valueOf(paramMap.get("pay_state"))); customization_information.setPay_type(paramMap.get("pay_type")==null?null:String.valueOf(paramMap.get("pay_type"))); customization_information.setSource_table(paramMap.get("source_table")==null?null:String.valueOf(paramMap.get("source_table"))); customization_information.setSource_id(paramMap.get("source_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_id")))); customization_information.setSource_user_id(paramMap.get("source_user_id")==null?null:Integer.valueOf(String.valueOf(paramMap.get("source_user_id")))); this.setEntity(queryMap,configMap,customization_information); System.out.println("定制信息修改成功"); return success(1); } /** * 修改支付状态 * * @param id 要修改的记录ID * @param newState 新的支付状态 * @return 提示信息:审核成功/失败 */ @Transactional @GetMapping("/update_pay_state") public String updatePayState(Long id, String newState) throws IOException { // 检查传入的状态是否合法 if (!newState.equals("未支付") && !newState.equals("已支付")) { return "非法的支付状态"; } Map<String,String> queryMap = new HashMap<>(); queryMap.put("id",String.valueOf(id)); // 根据ID查找记录 CustomizationInformation customization_information = service.findOne(queryMap); if (customization_information!=null) { // 更新支付状态 customization_information.setPay_state(newState); this.setEntity(queryMap,new HashMap<>(),customization_information); return "支付成功"; } else { return "支付成功:记录不存在"; } } }

前端:基于uni-app框架构建跨平台用户界面,使用HTML5、CSS3和JavaScript/Vue.js实现页面结构与交互逻辑,通过uni-app内置路由或Vue Router管理页面导航,Vuex或Pinia维护全局状态。采用uni-ui或uView等组件库快速搭建界面,使用uni.request或Axios(经适配)封装HTTP请求实现与后端的数据通信,同时可调用uni-app提供的丰富原生API(如相机、定位、支付等)增强移动端能力。

后端:基于Spring Boot框架搭建,遵循Controller-Service-Mapper三层架构。Controller层接收前端请求并校验参数,Service层处理核心业务逻辑,Mapper层通过MyBatis或MyBatis-Plus完成数据库操作。使用Spring Security或Shiro结合JWT实现用户认证与权限控制。

数据库:采用MySQL存储持久化数据,Redis缓存热点信息以提升系统性能。

开发工具:使用HBuilderX或VSCode开发前端(uni-app),IDEA开发后端,Git进行版本管理,Maven管理后端依赖,npm或yarn管理前端依赖,并通过HBuilderX的App发布功能或命令行工具完成多端(iOS、Android、H5、各小程序)打包发布。

👇精彩专栏 推荐订阅👇

Java精品项目案例【3000套】

Python精品项目案例【500套】

uniapp/微信小程序/安卓app【800套】

2026-2027届Java毕业设计优质选题汇总:百个热门方向完整推荐✅

2026-2027届Python毕业设计优质选题汇总:百个热门方向完整推荐✅

2026-2027届小程序/APP毕业设计优质选题汇总:百个热门方向完整推荐✅

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 2:45:30

Polars GPU 加速引擎实战指南:在 NVIDIA GPU 上运行 Lazy API 查询

数据分析大数据 【免费下载链接】polars Extremely fast Query Engine for DataFrames, written in Rust 项目地址&#xff1a; https://gitcode.com/GitHub_Trending/po/polars 点击查看 免费下载 导读 本文围绕 Polars 官方用户指南中的 gpu-support.md 展开&#xff0c;系…

作者头像 李华
网站建设 2026/10/10 2:45:20

整本小说批量转 AI 漫剧实操教程:知漫剧一键自动拆分多集

长篇网文做连载漫剧&#xff0c;最耗费精力的就是手动分割章节、逐集撰写分镜脚本。实测知漫剧&#xff08;zz.jiaxunai.cn&#xff09;支持整本小说导入&#xff0c;AI 自动识别剧情节奏&#xff0c;一键拆分成多集漫剧脚本。整套创作流程都在平台内完成&#xff0c;无需来回切…

作者头像 李华
网站建设 2026/10/10 2:43:45

从 Java 后端到大模型应用:我把公司知识库问答从 0 到 1 搭了起来

去年公司要做智能客服知识库问答&#xff0c;这个活儿落到了我这个纯 Java 后端头上。从 “没碰过大模型” 到上线一套可用的 RAG 问答系统&#xff0c;过程记录在这里 —— 架构怎么设计、代码怎么写、坑怎么踩&#xff0c;Java 工程师可以直接参考。 一、需求与架构&#xff…

作者头像 李华