news 2026/8/26 19:28:24

基于springboot2+vue3的校园网上店铺系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于springboot2+vue3的校园网上店铺系统

1. 代码获取

https://blog.xiaobias.com/article/10

2. 项目简介

本项目为“校园网上店铺”系统,是一个面向校园用户的电子商务平台。系统支持多角色(管理员、商铺、普通用户)登录与操作,提供商品浏览、购物车、订单管理、商品收藏、评价、公告发布、商铺管理等功能。数据库设计包含用户表、商铺表、商品表、购物车表、订单表、地址表、字典表等,能够满足校园场景下的线上购物基本需求。

3. 技术栈

  • 后端框架:Spring Boot 2.2.2.RELEASE
  • 持久层框架:MyBatis-Plus 2.3 + MyBatis
  • 数据库:MySQL 5.7.32
  • 安全与认证:Apache Shiro 1.3.2(用于权限控制)、Token 机制(自定义生成与校验)
  • 前端后台管理:Vue 2.x + Element UI + ECharts + axios
  • 前端用户界面:Layui + jQuery + Vue(辅助)
  • 工具库:Hutool、Fastjson、Apache Commons、POI(Excel 导入导出)
  • 其他:百度地图 API(用于地址定位)、百度人脸识别(AipFace)、WebSocket(未发现,但存在线程定时任务)

4. 详细介绍

4.1 功能模块

系统分为三个角色:管理员商铺用户

4.1.1 管理员功能
  • 基础数据管理:公告类型、会员等级、商铺信用类型、商品类型等字典表维护。
  • 公告管理:发布、编辑、删除公告。
  • 商铺管理:审核、查看、删除商铺(逻辑删除)。
  • 商品管理:查看所有商品,管理商品上下架、评价、收藏、订单。
  • 单页数据管理:维护“联系我们”、“网站介绍”等单页内容。
  • 用户管理:查看、修改、删除用户。
  • 轮播图管理:配置首页轮播图。
4.1.2 商铺功能
  • 商品管理:发布、修改、上下架自己的商品,查看商品评价。
  • 订单管理:查看已支付订单,发货(填写配送信息),处理退款。
  • 公告查看:查看系统公告。
  • 个人信息维护:修改商铺资料、营业执照、联系方式等。
4.1.3 用户功能
  • 商品浏览:按分类、关键字搜索商品,查看详情,点击次数累计。
  • 购物车:添加商品、修改数量、删除、下单。
  • 订单管理:下单(余额支付)、查看订单、确认收货、评价商品、申请退款。
  • 收藏管理:收藏/取消收藏商品。
  • 收货地址管理:增删改查,设置默认地址。
  • 个人信息维护:修改个人资料、头像、密码等。
  • 余额充值:虚拟充值,可用于支付订单。
  • 积分系统:消费获得积分,积分累计影响会员等级(青铜/白银/黄金),等级对应不同折扣。

4.2 数据库设计

主要数据表(基于db.sql):

  • yonghu:用户表(账户、密码、姓名、手机、身份证、头像、性别、邮箱、余额、总积分、现积分、会员等级)
  • shangjia:商铺表(账户、密码、商铺名称、联系方式、邮箱、营业执照、信用等级、余额、简介、逻辑删除)
  • shangpin:商品表(商铺ID、编号、名称、照片、类型、库存、获得积分、原价、现价、点击次数、介绍、上下架状态、逻辑删除)
  • shangpin_order:订单表(订单号、地址ID、商品ID、用户ID、购买数量、实付价格、配送人、配送人联系方式、订单类型、支付类型、创建时间)
  • cart:购物车表(用户ID、商品ID、购买数量)
  • shangpin_collection:收藏表(商品ID、用户ID、类型、收藏时间)
  • shangpin_commentback:评价表(商品ID、用户ID、评价内容、回复内容、评价时间、回复时间)
  • address:收货地址表(用户ID、收货人、电话、地址、是否默认)
  • gonggao:公告表(名称、图片、类型、发布时间、内容)
  • dictionary:字典表(字段编码、字段名、编码索引、索引名称、父ID、备注)
  • config:配置表(轮播图等参数)
  • single_seach:单页数据表(名字、数据类型、内容)
  • token:用户token表
  • users:管理员表

4.3 核心业务逻辑

  • 下单流程:用户从购物车或商品详情页提交订单 → 选择收货地址 → 选择支付方式(余额)→ 系统计算折扣(根据会员等级)→ 扣减余额、增加积分、减少商品库存、增加商铺余额 → 生成订单记录 → 清空购物车对应商品。
  • 退款流程:用户发起退款(订单状态为已支付)→ 系统恢复用户余额和积分、恢复商品库存、减少商铺余额 → 订单状态变更为“退款”。
  • 发货与收货:商铺发货(填写配送人信息)→ 订单状态变为“已发货” → 用户确认收货 → 订单状态变为“已收货” → 用户可评价。
  • 积分与会员等级:每笔消费根据商品设定“购买获得积分”字段,累加至用户总积分和现积分。总积分达到阈值(10000、100000、1000000)自动升级会员等级,等级对应折扣(0.98、0.96、0.95)。

4.4 项目结构

  • 后端代码位于src/main/java/com/,包含 controller、service、dao、entity、utils、interceptor、config 等包。
  • 前端管理后台代码位于src/main/resources/admin/admin/,基于 Vue CLI 构建。
  • 前端用户界面位于src/main/resources/front/front/,采用 layui + jQuery + 静态 HTML。
  • 配置文件:application.yml(数据库连接、mybatis-plus 配置)、pom.xml(Maven 依赖)。

5. 部分代码

以下从项目中摘取关键代码示例:

5.1 订单下单核心逻辑(ShangpinOrderController.order

@RequestMapping("/order")publicRadd(@RequestParamMap<String,Object>params,HttpServletRequestrequest){// 获取当前登录用户id、收货地址id、支付类型、购物车商品列表IntegeruserId=(Integer)request.getSession().getAttribute("userId");IntegeraddressId=Integer.valueOf(String.valueOf(params.get("addressId")));IntegershangpinOrderPaymentTypes=Integer.valueOf(String.valueOf(params.get("shangpinOrderPaymentTypes")));Stringdata=String.valueOf(params.get("shangpins"));JSONArrayjsonArray=JSON.parseArray(data);List<Map>shangpins=JSON.parseObject(jsonArray.toString(),List.class);YonghuEntityyonghuEntity=yonghuService.selectById(userId);List<ShangpinOrderEntity>shangpinOrderList=newArrayList<>();List<ShangjiaEntity>shangjiaList=newArrayList<>();List<ShangpinEntity>shangpinList=newArrayList<>();List<Integer>cartIds=newArrayList<>();// 获取会员折扣BigDecimalzhekou=...;for(Map<String,Object>map:shangpins){IntegershangpinId=Integer.valueOf(String.valueOf(map.get("shangpinId")));IntegerbuyNumber=Integer.valueOf(String.valueOf(map.get("buyNumber")));ShangpinEntityshangpinEntity=shangpinService.selectById(shangpinId);// 库存检查if(shangpinEntity.getShangpinKucunNumber()<buyNumber){returnR.error(shangpinEntity.getShangpinName()+"的库存不足");}// 减库存shangpinEntity.setShangpinKucunNumber(shangpinEntity.getShangpinKucunNumber()-buyNumber);// 构建订单项ShangpinOrderEntityshangpinOrderEntity=...;if(shangpinOrderPaymentTypes==1){// 余额支付Doublemoney=newBigDecimal(shangpinEntity.getShangpinNewMoney()).multiply(newBigDecimal(buyNumber)).multiply(zhekou).doubleValue();// 扣余额、加积分yonghuEntity.setNewMoney(yonghuEntity.getNewMoney()-money);DoublebuyJifen=newBigDecimal(shangpinEntity.getShangpinPrice()).multiply(newBigDecimal(buyNumber)).doubleValue();yonghuEntity.setYonghuNewJifen(yonghuEntity.getYonghuNewJifen()+buyJifen);// 更新商家余额shangjiaEntity.setNewMoney(shangjiaEntity.getNewMoney()+money);shangpinOrderEntity.setShangpinOrderTruePrice(money);}shangpinOrderList.add(shangpinOrderEntity);shangpinList.add(shangpinEntity);shangjiaList.add(shangjiaEntity);cartIds.add(Integer.valueOf(map.get("id").toString()));}// 批量保存订单、更新商品、更新商家、更新用户、删除购物车shangpinOrderService.insertBatch(shangpinOrderList);shangpinService.updateBatchById(shangpinList);shangjiaService.updateBatchById(shangjiaList);yonghuService.updateById(yonghuEntity);if(cartIds.size()>0)cartService.deleteBatchIds(cartIds);returnR.ok();}

5.2 前端商品详情收藏功能(shangpin/detail.html

// 收藏商品addShangpinCollection(){let_this=this;layui.http.request('shangpinCollection/list','get',{page:1,limit:1,shangpinId:_this.detail.id,shangpinCollectionTypes:1,yonghuId:localStorage.getItem('userid'),},(res)=>{if(res.data.list.length==1){// 已收藏则取消layui.http.requestJson('shangpinCollection/delete','post',[res.data.list[0].id],function(res){layui.layer.msg('取消成功',{time:1000,icon:5},function(){window.location.reload();});});returnfalse;}// 未收藏则添加layui.http.requestJson('shangpinCollection/add','post',{yonghuId:localStorage.getItem('userid'),shangpinId:_this.detail.id,shangpinCollectionTypes:1,},function(res){layui.layer.msg('收藏成功',{time:1000,icon:6},function(){window.location.reload();});});});}

5.3 字典表转换工具(DictionaryServiceImpl.dictionaryConvert

publicvoiddictionaryConvert(Objectobj,HttpServletRequestrequest){// 获取当前对象中所有以"Types"结尾的Integer字段List<String>fieldNameList=newArrayList<>();// 反射获取所有字段...// 从ServletContext中获取字典表映射 dictionaryMapMap<String,Map<Integer,String>>dictionaryMap=(Map<String,Map<Integer,String>>)request.getServletContext().getAttribute("dictionaryMap");// 遍历每个Types字段,根据其codeIndex从dictionaryMap中获取对应的indexName,赋值给对应的Value字段for(Strings:fieldNameList){Fieldtypes=...;Fieldvalue=...;intcodeIndex=types.getInt(obj);StringdicCode=s.replace("Types","").replaceAll("([a-z])([A-Z])","$1_$2").toLowerCase();StringindexName=dictionaryMap.get(dicCode).get(codeIndex);value.set(obj,indexName);}}

aHR0cHM6Ly9ibG9nLnhpYW9iaWFzLmNvbS9hcnRpY2xlLzEw

6. 部分截图







































7. 项目总结

校园网上店铺是一个功能完整的B2C电商系统,覆盖了商品管理、购物流程、订单处理、会员积分、商户管理、后台运维等核心业务。技术上采用前后端分离(管理端Vue,用户端传统Layui),后端使用Spring Boot + MyBatis-Plus快速开发,数据库设计合理,字典表设计增强了扩展性。系统实现了完整的支付(虚拟余额)、退款、发货、收货、评价等电商闭环,并引入了基于积分的会员等级折扣机制,符合校园场景需求。项目代码结构清晰,接口遵循RESTful风格,包含token认证和权限拦截,具备一定的安全性和可维护性。

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

100万Token超长文本处理:技术人员AI怎么用?玉芬AI长文档实测评测

分析上千行代码或长篇文档时AI怎么用&#xff1f;工具整合站点玉芬AI( neneai.cn) 具备超大上下文窗口能力&#xff0c;让长文本解析与长篇小说续写毫无卡顿压力。 Q&#xff1a;深度阅读超长技术文档和源码时&#xff0c;大模型经常遗忘上下文怎么办&#xff1f; A&#xff…

作者头像 李华
网站建设 2026/8/26 19:03:55

2026.8.10

146 LRU缓存class LRUCache:def __init__(self, capacity: int):self.capacitycapacityself.cacheOrderedDict()def get(self, key: int) -> int:if key not in self.cache:return -1self.cache.move_to_end(key,False)return self.cache[key]def put(self, key: int, value…

作者头像 李华
网站建设 2026/8/26 18:56:01

零基础入门python23:Flask-Login登录、退出与会话

零基础入门python23&#xff1a;Flask-Login登录、退出与会话一、上一篇课后练习讲解 邮箱大小写测试应先用 AliceExample.com 注册&#xff0c;再用 aliceexample.com 登录&#xff0c;并断言数据库只有一条用户记录。归一化应发生在查询和写入之前。 上一篇课后练习完整答案 …

作者头像 李华
网站建设 2026/8/26 18:51:35

开源项目Tiger AI Platform平台中使用的模型详解:模型001-efficient-sam

EfficientSAM-Ti(OpenCV) 完全指南:原理、TigerPro 接入、代码实战与落地案例(efficient-sam) 系列:TigerPro AI 模型手册(1/110) 分类:交互分割 你能带走什么:原理边界、规格表、完整接入步骤、可运行代码、双案例、调参表、避坑与验收清单。 适用读者:CV_PyhonVue…

作者头像 李华
网站建设 2026/8/26 18:39:10

记录C++ 8

多态多态是指同一个接口可以有多种不同的实现方式,多态在c中分静态多态和动态多态&#xff1a;静态多态使用函数重载和泛型编程实现动态多态基于虚函数实现动态绑定与静态绑定定义&#xff1a;静态绑定指程序结束编译后就已经确定行为&#xff0c;动态绑定指在运行时确定行为作…

作者头像 李华