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认证和权限拦截,具备一定的安全性和可维护性。