一 项目概述
宠物乐园这个项目是基于o2o模式开发的一个项目,该项目以宠物为核心,为用户提供宠物寻主,宠物领养,以及购买服务和商品等功能,是一个综合性开放平台。它主要有组织机构,用户,宠物,订单,支付等模块。平台除了提供针对普通用户的基本需求功能,支持商家入驻,合作加盟,扩展线下门店渠道。我们开发这个项目使用的是前后端分离模式开发,前端使用的是vue技术栈,后台使用的是springboot+ssm,项目部署使用的是docker技术。提供基于restful的架构风格的业务接口。 二 负责模块概述
1.宠物模块
(1)寻主消息
用户因为各种原因不想继续抚养自己的宠物。通过系统的寻主功能发布通告,平台根据用户所填写的地址推算离用户最近的线下门店,通过继承百度地图,系统将用户输入的地址转化为经纬度,再通过经纬度计算哪一家店铺离用户地址最近,将寻主信息推送给该门店,让店铺相关工作人员处理寻主消息。
我们设计了三个表:宠物表,宠物类型表,宠物详情表,
在这里插入图片描述
public void publish(SearchMasterMsg masterMsg,Long loginInfoId) { // 获取对应的user 写一个工具类,获取登录人信息的 User user = userMapper.loadByLoginInfoId(loginInfoId); masterMsg.setUser_id(user.getId()); // 通过百度地图,添加地址 // 获取地址,把地址转成 经纬度 Point point = DistanceUtil.getPoint(masterMsg.getAddress()); // 获取所有的shop List<Shop> shops = shopMapper.loadAll(); // 获取最近的店铺 Shop shop = DistanceUtil.getNearestShop(point, shops); masterMsg.setShop_id(shop.getId()); // 保存信息了。 masterMsgMapper.save(masterMsg); }
(3) 宠物领养
当用户在访问平台时,会查询数据库并以缩略图的形式展示宠物信息,用户可以点击图片来了解宠物详情,宠物详情界面展示了宠物的基本信息、价格以及宠物描述。管理员可以修改宠物的上下架状态,平台将状态为上架的展示在页面,用户可以在宠物详情页中选择领养该宠物,领养成功后绑定领养用户, 修改宠物状态,创建领养订单。
@Override public PageList<SearchMasterMsg> processed(SearchMasterMsgQuery query, Long id) { query.setState(1); //根据loginId查询emp,是否有shopId Employee employee= employeeMapper.findByLoginId(id); if(employee.getShop_id()!=null){ query.setShop_id(employee.getShop_id()); } return super.queryData(query); } @Override public PageList<SearchMasterMsg> pending(SearchMasterMsgQuery query, Long id) { query.setState(0); //根据loginId查询emp,是否有shopId Employee employee= employeeMapper.findByLoginId(id); if(employee.getShop_id()!=null){ query.setShop_id(employee.getShop_id()); } return super.queryData(query); } @Transactional @Override public void handle(Pet pet, Long id) { //更新状态 state=1 pet.setState(1); masterMsgMapper.updateStateByMsgId(pet.getSearch_master_msg_id()); //保存t_pet petMapper.save(pet); //保存t_petdetail PetDetail detail = pet.getDetail(); if(detail!=null){ detail.setPet_id(pet.getId()); petDetailMapper.save(detail); } }
2.用户模块
(1) 用户注册
注册方式为手机号注册,当用户输入手机号并点击发送验证码时,后台会生成一个随机字符串也就是验证码设置一个过期时间存入redis,并设置一分钟的重发时间,当用户在一分钟后过期时间内点击重新发送,会将过期时间重置(验证码不重置)。将这个验证码通过短信的方式发送给用户,当用户输入验证码进行登录时,后台会将这个验证码与存入redis中的随机字符串进行比对,当没有过期并且相同时,注册成功并跳转页面;没有过期并且不相同时,系统提示验证码输入错误。
(2) 用户登录:
账号登录:用户和管理员登录是同一个接口,通过前端传过来的type判断是用户还是管理员,然后跳转不同的页面。用户是一张表,管理员是一张表,然后我们还做了一个登录表,登录表里面是所有用户和管理员的登录账号和密码,因为管理员也可以登录我们的网站享受服务,所以有可能一个手机或邮箱既是用户又是管理员。为了区分这种登录账号到底是要登录到后台还是网站,所以我们登录表里面有一个type字段,区分该账号到底是用户还是管理员。登录成功,用uuid生成了一个随机数,将该随机数作为key,用户信息作为value存入redis,然后传到前端,前台取名为token会将它放到localStorage里面,并且我们在每次发起请求到后台时,都会在请求头中放入该token,在后台的拦截器中,我们会获取每一个请求的token,如果没有token或者通过该token在redis中没有获取到相应的用户信息,我们都认为它没有登录,然后返回前台,否则就放行该请求。除了登录和注册接口,其他的会被拦截。
三方登录(微信二维码登录):用户点击微信登录后,向微信官方发送一个请求,微信收到请求后返回一个二维码,用户扫描二维码点击确认以后,跳转到后台,后台根据前台传入的openid查找用户,后台判断是否已经绑定,如果绑定直接免密登录,没有绑定则跳转到绑定界面登录,绑定接口判断用户存不存在,存在就绑定,不存在就新建一个User绑定
用户地址管理:因为同一个用户存在使用多个地址的情况,所以我们创建了一个表来存储用户的地址信息。表中user_id = user表的id crud
个人总结:
这是一个非常具有挑战性的项目,我们第一次做基于springboot的前后端分离全栈项目,里面运用了很多现在使用非常广泛的技术:
前端使用了Vue技术栈: nodejs npm webpack 路由 elmentui
后端的技术更多FastDFS,Redis,Springboot,短信消息,百度地图,微信三方登录
而部署则是用到了docker容器引擎,它的功能比起传统虚拟机来说强大了不少,在部署阶段使用了nginx解决跨域问题。
在这个项目中,我们学习了这些技术,但运用的不是很熟练,后续还是需要多加练习,加强业务能力