Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

这是一个用SpringBoot+JPA打造的基于微信服务号平台的点餐系统的后端,前端是一个使用Vue.js构建的运行于微信公众号的WebApp。前后端完全分离,前后端之间通过RESTful风格的接口相连。

Notifications You must be signed in to change notification settings

MurphyBrandonGao/SpringBoot-sell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

19 Commits

Repository files navigation

Welcome to SpringBoot-sell 👋

Documentation

本系统是一个用SpringBoot+JPA打造的基于微信服务号平台的点餐系统的后端,前端是一个使用Vue.js构建的运行于微信公众号的WebApp。前后端完全分离,前后端之间通过RESTful风格的接口相连。

🏠 主页

项目整体介绍

目录


项目介绍

  • 前端是由Vue.js构建的WebApp,后端由Spring Boot打造,后端的前台页面使用Bootstrap+Freemarker+JQuery构建,后端和前端通过RESTful风格的接口相连。

  • 数据库方面使用Spring Boot+JPA,兼顾Spring Boot+Mybatis;缓存方面,使用Spring Boot+Redis;基于Redis,应对分布式Session和分布式锁;消息推送方面,使用WebSocket。

  • 这是一个基于微信的点餐系统,所以还涉及许多微信相关的特性,如微信扫码登陆,微信模板消息推送和微信支付和退款。

项目设计

角色划分

  • 买家(手机端):由微信公众号提供的一个服务
  • 卖家(PC端):一个简单的商家管理系统

功能模块划分

  • 功能分析
  • 关系图
  • 36.png

部署架构

  • 买家端在手机端,卖家端在PC端,两端都会发出数据请求,请求首先到达nginx服务器,如果请求的是后端接口,nginx服务器会进行一个转发,转发到后面的Tomcat服务器,即我们的Java项目所在,如果这个接口作了缓存,那么就会访问redis服务器,如果没有缓存,就会访问我们的MySQL数据库。值得注意的是我们的应用是支持分布式部署的,也就是说图上的Tomcat表示的是多台服务器,多个应用。

    数据库设计

  • 共5个表,表之间的关系如下,其中商品表(product_info)存放的就是商品的名称、价格、库存、图片链接等信息;类目表(product_category含有类目id、类目名字等信息,一个类目下有多种商品,类目表和商品表之间是一对多的关系;订单详情(order_detail)表含有购买的商品名称、数量、所属订单的订单号等信息;订单主表(order_master)包含包含该订单的订单号、买家的信息、订单状态和支付状态等信息,订单主表和订单详情表之间是一对多的关系;最后是卖家信息表(seller_info),存放的卖家的账号和密码等信息,作为卖家后台管理的权限认证。 38.png

项目使用的主要技术栈

  • Spring Boot的相关特性
    • Spring Boot+JPA
    • Spring Boot+Redis
    • Spring Boot+WebSocket
  • 微信相关特征
    • 微信支付、退款
    • 微信授权登陆
    • 微信模板消息推送
    • 使用微信相关的开源SDK
  • 利用Redis应用分布式Session和分布式锁
    • 对用户的登陆信息使用分布式Session存储
    • 利用一个抢购商品的例子,来对Redis分布式锁进行详细的说明

开发环境及工具

  • IDEA
  • Maven
  • MySQL
  • Nginx
  • Redis
  • Postman,模拟用户使用微信创建订单
  • Fiddler对手机请求抓包
  • Natapp内网穿透
  • Apache ab模拟高并发,抢购一个商品

项目演示

卖家端(PC端)

浏览器输入授权路径,进入微信扫码登陆系统页面

24.png

登陆后,从左侧导航栏可以看到有四项【订单】、【商品】、【类目】、【登出】,右侧是卖家管理系统的首页,也即【订单】界面。

25.png

对每项订单有【取消】和【详情】操作。点击【详情】来查看订单详情,来到下面的界面:

我们可以选择【完结订单】或【取消订单】。

【商品】和【商品类目】下均有两项操作:【列表】【新增】。 下面以【商品】栏为例演示。 点击【商品】->【列表】可以查看商品的详情,可以看到对每件商品又有【修改】和【上架】/【下架】操作 。

26.png

点击商品->新增来新增商品

23.png

买家端(手机微信端)

买家端是基于微信公众号的点餐app。

29.png

选购好商品后就可以去结算。

30.png

结算完成,可以看到一条微信支付凭证消息。

31.png

可以选择查看账单。

32.png

买家端和卖家端的通信

因为我是借用的微信公众账号,所以买家端和卖家端不能连调,我这里用Postman这个工具,发送一条post请求,来模拟微信下单。这时卖家端首页,即【订单】页面就会弹出一个窗口,并播放音乐。

27.png

点击关闭按钮,在订单页面找到找到新下的订单,点击【详情】来到订单详情界面,点击【完结订单】按钮。

33.png

这时微信那边就会收到如下的模板消息。

42.png

运行说明

运行环境:

  1. MySQL
  2. Redis。可以在解压后的根目录下看到redis-server.exe文件,双击即可启动redis服务器
  3. Nginx。下载的zip压缩包,解压后根目录下有一个名为nginx.exe文件,双击即可启动nginx服务器
  4. IntelliJ IDEA
  5. JDK1.8+、maven等

运行方式:

  1. 使用命令git clone https://github.com/gb145234/SpringBoot-sell将项目克隆到本地。
  2. 将项目导入IDEA。在IDEA里,File->open...,然后选择项目文件夹(springboot-project)。如果是初次使用spring boot,这个过程可能会有点久,需要下载许多依赖的jar包。
  3. 为IDEA安装lombok插件。在IDEA里,File->Settings...->Plugin,搜索lombok,安装。
  4. 项目的配置文件是在resources目录下的application.yml文件。修改MySQL数据库连接信息。我的数据库账号密码分别为root,1234,改为你的即可。
  5. 在MySQL数据库终端运行建表语句的sql脚本(或者使用Navicat for MySQL等图形化工具)。
  6. 启动redis。在刚才解压的Redis根目录下,双击redis-server.exe即可运行redis服务。
  7. 最后就可以启动项目了。在IDEA里以Spring Boot的方式运行SellApplication这个主类。可以看到这和我们传统的web项目启动的方式不一样,我们没有配置tomcat等之类的服务器,因为Spring Boot已将服务器引入起步依赖中了。
  8. 经过以上步骤,我们的项目应该已经可以启动起来了。访问:http://127.0.0.1:8080/sell/seller/product/list,即可来到我们的卖家端的商家管理系统界面。效果如下:

访问买家的前端界面

  1. 项目的前后端是完全分离的,买家端前端的代码在另一个仓库,使用git clone https://github.com/gb145234/vue-project.git下载前端项目,其中项目根路径(vuejs-project)下的dist目录就是前端编译后的代码。

  2. 修改nginx的配置文件,让nginx可以找到前端代码。在nginx根目录下的conf目录下有一个nginx.conf文件,它就是我们要修改的配置文件,其中有下面一段:

    server {
     listen 80;
     server_name localhost;
     #charset koi8-r;
     #access_log logs/host.access.log main;
     location / {
     root C:\Users\dell\Downloads\Compressed\vuejs-project-master\dist; #前端资源路径
     index index.html index.htm;
     }
    	location /sell/ {
    		proxy_pass http://127.0.0.1:8080/sell/;
    	}

上面的C:\Users\dell\Downloads\Compressed\vuejs-project-master\dist;该为你刚才git clone下的前端项目的dist目录。

4.双击nginx.exe启动nginx服务器,如果已启动过,命令行进入nginx的根目录,输入nginx -s reload重启nginx服务器。

5.浏览器访问:http://127.0.0.1/#/order/,这是会出现空白界面,按F2打开浏览器的开发者工具,在浏览器的控制台输入document.cookie='openid=abc123' 向该域名下添加cookie。再次访问:http://127.0.0.1,这时就可以访问到前端界面了。如下:

6.对于手机端微信公众号内访问,还要使用到内网穿透工具,由于微信里不能直接访问ip地址,还要购买域名,还涉及到挺复杂的微信调试。这里就不再介绍。可以使用postman这个工具模拟微信点餐下单。访问接口参见controller包下以Buyer开头的类。

7.如果想查看微信端的访问效果,可以在微信客户端访问这个链接:http://sell.springboot.cn/。(注意这是师兄上线的项目演示) 如果使用电脑访问的话,可以首先访问:http://sell.springboot.cn/#/order/; 然后,按F12打开浏览器的开发者工具,点击控制台,在控制台输入:document.cookie='openid=abc123'; 然后重新访问:http://sell.springboot.cn,就可以看到前端效果了。

关于前端。前端的vue.js项目,我并没有去学习,我只是拿来做演示,有兴趣的可以到慕课网学习。

Author

👤 Gaobo

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Show your support

Give a ⭐️ if this project helped you!


This README was generated with ❤️ by readme-md-generator

About

这是一个用SpringBoot+JPA打造的基于微信服务号平台的点餐系统的后端,前端是一个使用Vue.js构建的运行于微信公众号的WebApp。前后端完全分离,前后端之间通过RESTful风格的接口相连。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /