项目介绍:
用户通过浏览器登录,浏览商品,添加进购物车,购买功能
后台管理员登录,对用户进行增加修改删除,商品进行增加修改删除,订单进行增加修改删除
项目亮点:
技术栈全面,使用了微服务,中间件
42个功能点表示差不多42套增删改查(实际上可能会多一些,可能需要写五六十套增删改查)
数据库E-R图
用户把需求提交给网关服务,网关服务去注册中心中查找它需要调用的服务(也就是说注册中心能够帮助查找需要调用哪个服务)
数据库:
用户实体类user:
user_id,user_name,password,user_phonenumber
地址实体类address:
id,linkman(联系人),phone,address,user_id
轮播图实体类carousel:
carousel_id 轮播图id,img_path 图片地址,describes 描述,protect_id轮播图对应的商品id,priority优先级
商品表product
product_id product_name category_id product_title
类别表category 就两个字段 category_id和category_name
网关服务
将网关服务注册到nacos里面
在网关服务中需要进行配置
首先配置注册中心所在的服务器的地址
当用户访问/user/**路径的时候,就会把请求转发给user-service这个服务
同理,当用户访问/product/**路径的时候,就会把请求转发给product-service这个服务
总共网关服务为指定什么时候访问其他十个服务
# 配置网关
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/** # 访问user路径转发用户服务
- id: product-service # 此名称随意定义
uri: lb://product-service #使用负载均衡,调用服务名,这是服务名
predicates:
- Path=/product/** # 访问product相关,转发到product服务
# 静态资源对应的服务
- id: static-service
uri: lb://static-service #静态资源处理以及oss上传服务!
predicates:
- Path=/public/**
- id: carousel-service # 轮播图服务
uri: lb://carousel-service #静态资源处理以及oss上传服务!
predicates:
- Path=/carousel/**
- id: category-service # 类别服务
uri: lb://category-service
predicates:
- Path=/category/**
- id: search-service # 类别服务
uri: lb://search-service
predicates:
- Path=/search/**
- id: collect-service # 收藏服务
uri: lb://collect-service
predicates:
- Path=/collect/**
- id: cart-service # 购物车服务
uri: lb://cart-service
predicates:
- Path=/cart/**
- id: order-service # 订单服务
uri: lb://order-service
predicates:
- Path=/order/**
- id: admin-service # 订单服务
uri: lb://admin-service
predicates:
- Path=/admin/**
通用服务common:将一些通用实体类(比如商品表对应的实体类)声明到这个服务当中
请求显示访问网关服务,然后访问后台管理服务,再访问商品服务,最后访问数据库
这样后台管理服务和商品服务里都有商品实体类,就出现了冗余,我们将通用的实体类声明到通用服务中
将多个服务(两个及两个服务以上)需要的,写到通用服务里面
除了实体类还有一些util工具类,比如Md5工具类和R工具类
用户服务:登录,注册,账号检查(数据库中是否有这个账号),地址添加,地址删除,地址展示(查看)一共六个功能
这个服务用到两张表:用户表和地址表,这两张表放在user库里面
在bootstrap.yml配置文件中配置本服务名称和nacos的地址
spring:
application:
name: user-service
cloud:
nacos:
server-addr: 124.221.70.206:8848
server:
port: 3001
在application.yml配置文件中:
首先配置mysql数据库的地址
实现第一个功能:账号检查(查询数据库中是否存在这个账号)
请求url:/user/check
请求方式:post
前端发送的请求的数据类型是:json 格式是username:“要检查的账号”,比如username:“张三”
返回结果是json:
# 分析返回结果,如何根据数据库查询,返回对应的结果!
{
"code": "001", //001就是成功 可用的含义 004账号不可用
//004是错误码
"msg": "用户名不存在,可以注册" //返回的提示语 固定的格式! 后台和前端约定的格式!
}
实现第二个功能:用户注册
请求url:user/register
请求方式:post
前端发送的请求的数据类型是:json 格式是username:“root”,password:“123456”,userPhoneNumber:“123456789”
返回结果:
{
code: '001', 成功 / 004 失败
msg: '注册成功'
}
往user表中插入一行数据,存密码的时候加盐处理然后再用md5加密处理
实现第三个功能;用户登录
请求url:user/login
请求方式:post
前端发送的请求的数据类型是:json 格式是username:“root”,password:“123456”,
实现第四个功能:展示地址列表功能(查询address表中user_id字段等于登录用户的user_id的所有行)
请求url:user/address/list
传入的参数是user_id,返回的是一个地址的集合,这个1用户添加过的所有地址的集合
实现第五个功能:添加地址功能(往address表中添加一行数据)
请求url:user/address/save
传入的参数是address,linkman,phone, user_id(就是登录的用户的id)
实现第六个功能:删除地址功能(往address表中删除一行数据)
请求url:user/address/remove
传入的参数是id,不是user_id,而是address表中的id字段那个id
静态资源服static 这个服务包含两个功能,静态资源存储功能和静态资源外部访问功能
将静态资源存放在这个服务里面
轮播图服务carousel 这里需要实现两个功能,轮播图展示功能和商品详情功能
/carouse/list 展示优先级前六的六张图片
商品服务 product这里需要实现的功能比较多,热门商品功能,类别商品功能,全部商品功能,单类别商品功能,商品详情功能,商品图片详情功能,商品搜索功能
(1)热门商品功能:根据传入的类别名称,查七条热门商品出来,比如你传入的类别是手机,那么就展示手机的七条热门商品
效果如下:
url:/product/promo
在商品服务中调用byname方法就会调用category类别服务的promo方法
查询多个类别的热门商品
(2)商品详情和商品图片详情
商品详情:product/detail
商品图片详情 /product/pictures
类别服务 category
商品服务调用类别服务,传入category_name得到category_id,然后商品服务再去product数据库中查找这个category_id的七条热门数据出来
搜索服务search:使用elasticsearch技术实现商品搜索功能,相对mysql效率更高