云岚到家项目介绍
云岚到家项目介绍
云岚到家项目是一个家政服务O2O平台,提供在线下单、抢单、派单、上门服务等业务,平台包括四个端:用户端(小程序)、服务端(app)、机构端、运营端,其中用户端是提供给用户使用的,用户可以在用户端小程序上实现预约下单,在线抢卷服务评论,支付等功能,服务端是提供给服务人员使用的,服务人员可以在服务端上进行在线抢单或者接受机构派单结算等功能,而机构端线接单、派单、投诉处理等功能,运营端则是由我们公司进行运营维护,我们可以通过管理端完成服务人员管理、机构管理、订单管理、财务管理等操作,一笔完成的订单,结算时按照分成比例平台进行抽成。平台开发采用前后端分离开发模式,项目使用了MySQL、Redis、MQ、ES、等中间件。
登录流程介绍:云岚到家涉及到三种登录方式,服务人员使用的是手机验证码登录,服务人员使用服务端APP时首先输入手机号,点击获取验证码,当收到手机接受到的验证码的时候输入验证码,系统会校验手机验证码,判断验证码是否有效,若验证码有效会继续校验手机号码,判断手机号是否被冻结,如果两个条件均满足则登录成功,反之登录失败,如果是初次登录的用户认证通过后自动注册。机构端与后台管理端采用的是账号密码的登录方式,机构初次登录时需先注册账号,机构端没有这个功能,用户在输入账号密码后系统会先判断账号是否存在,若账号不存在系统会提示用户先进行登录,账号存在这判断密码是否正确,若密码正确则登录成功,反之登录失败。用户端使用的是微信小程序采用微信登录方式,前端获取code,并请求后端进行认证,后端携带code和密钥去申请openid,拿到openid去查询数据库的用户表,如果查询到了此获取到用户信息,如果查询不到进行自动注册(将openid写入用户表),根据用户信息生成token(用户id、用户昵称、用户头像),将token返回前端,认证通过,前端去访问系统,携带token访问网关,网关进行token校验。服务人员与机构人员除了基本的注册与登录外还需进行实名认证与机构资质认证,这两类使用者需根据系统的提示上传认证资料,完成后等待后台人员审核,审核通过后方可继续使用本平台。
优惠卷模块设计,优惠劵模块是我们系统的主要模块之一,主要流程是运营人员在后台添加优惠卷信息,优惠卷发放分为两种发放方式,一种是用户在活动期间自己手动抢卷,另一种在是系统定时自动发放,当用户抢到优惠卷或者系统自动发放优惠卷时 用户可以在我的优惠卷列表中查到,我们的优惠卷也分为两种一种是折扣卷,一种是满减卷,折扣卷是用户下单金额达到一定的值,进行打折,满减卷也需要用户下单金额超过一定的值才能进行一定量的减免。在用户下单且满足优惠条件时就可以使用很优惠卷进行一定的减免。自动发放优惠卷我们通过xxl-job以及多线程实现在每天凌晨十二点通过定时任务扫描待发放的优惠卷,用户抢卷使用的是redis以及提高系统查询效率,同时降低数据库压力,防止数据库崩溃,为防止超卖问题我们使用了redis和lua脚本语言,因为redis是单线程,所有命令都具有原子性,用户进行抢券向redis扣减库存,使用线程池将redis中的抢券结果同步到mysql。
在开发订单模块时,我们首先根据业务需求设计数据表:
数据库在设计开发时采用了垂直分库分表的方式(根据不同的业务对数据库进行拆分,数据表在设计时根据业务适当的增加了一些冗余字段,虽然增加了存储容量,但是极大的加快的查询效率)。订单表:用于存储用户下单信息,主要字段包括下单用户名称,id,订单号,预约时间,商品数量(服务次数),优惠金额,实际支付金额等关键字段,订单明细表:记录该订单购买商品的信息,包括:商品名称、商品价格、交易价格、购买商品数量等。订单退款表等等。
用户下单业务流程:
用户首先在小程序上选择需要的服务项目,在下单时选择对应的服务,服务数量,预约时间,若用户账号下存在可用的优惠卷,用户还可以选择可用的优惠卷(这里的优惠卷有两种,一种是折扣卷,另外一种是满减卷,用户的选择的服务以及总价达到一定的金额时就可以使用优惠卷),最后点击下单即可前往支付页面完成下单,最后用户可以在我的,然后再待支付或全部订单页面中查看自己下单。
订单支付模块:
用户进行支付操作时,可以选择微信支付或支付宝支付这两种主流的支付方式,点击后系统会根据订单中的实付金额以及选择的支付方式生成对应的支付信息,支付成功后,系统触发支付处理器处理支付成功事件将订单的状态从"待支付"通过状态机变更为"派单中",并将订单信息同步到 OrdersDispatch 表,订单进入派单池等待分配,或者又机构端的工作人员进行分配,如果用户在规定时间内未支付,系统通过定时任务自动取消订单取消时会记录取消信息到 OrdersCanceled 表,并更新订单状态为"已取消"(600)。如果用户还需要服务可以再次下单。
订单取消业务流程:
取消订单业务分为两种,一种使用户不需要服务,自己取消,另一种时超时未支付由系统自动取消,在第一种方式中,用户在下单后若不需要服务,可以在我的全部订单中找到不需要的订单,选中之后点击取消订单,这个时候系统会判断用户是否支付,是否使用优惠卷,若用户使用了优惠卷(判断方式判断实际支付金额是否小于服务总价,或者数据表字段优惠金额是否为0)
若用户使用了优惠卷这返还用户使用的优惠卷,如果用户已支付,系统会根据用户实际支付金额以及用户支付单号调用支付系统,返回用户支付金额。超时未支付方式是使用xxl-job定时任务去扫描数据库的支付状态,每5秒钟执行一次,若用户十五分钟内未支付,则判断是否使用优惠卷,使用则重复上面步骤返还优惠卷,未支付则取消顶订单,最终将订单状态更改为已取消。
小程序门户设计:系统首页入口称为门户,是指一个网站或应用程序的主页,它是用户进入这个网站或系统的入口,主页上通常聚合很多的信息,包括内容导航、热点信息等,本项目使用Redis存储缓存数据,项目集成了Spring data redis框架,在项目中可以通过RedisTemplate访问Redis,RedisTemplate提供了方便访问redis的模板方法,此外,我们还使用了定时任务,定时更新数据。
搜索模块:通过关键字商品分类、价格、排序搜索商品,实现方案:我们使用canal+mq的技术,将数据由mysql同步到es中。首先,建立一张商品同步表,当 修改商品信息时除了将数据写入商品表还写入商品同步表,使用canal读取商品同步的binlog,将读取数据写入mq,监听mq拿到商品信息同步ES,最后,通过Elasticsearch的API完成搜索。
后台数据统计:将订单趋势图的中的数据导出Excel,数据来源于按天统计表和按小时统计表,这里主要使用的是Easyexcel,EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。

浙公网安备 33010602011771号