java项目
技术栈:
MySQL(数据库)
SpringCloud,SpringCloudAlibaba,Springboot,Mybatis(对数据库进行操作),Rabbitmq(死信队列,延迟队列,普通队列,做异步处理), Sentinel(服务熔断降级限流),Openfeign(远程调用),Nacos(服务发现,配置中心),Druid(连接池),fastjson(Json数据处理),Swagger(测试接口),hutool(工具包),lombok(实体类处理),(ElasticSearch+Logstash+Kibana)elk(做日志收集系统),Gateway(网关过滤),Security(登陆安全),WebScoket(实现聊天)
前台:
订单模块:
在数据库查询所有的订单以用户id或门店id、加上当前页作为key放入到缓存中,添加订单使用Rabbitmq延迟队列和死信队列用户点下单在数据库和缓存添加一条数据过期时间为15分钟,如果用户没有支付则订单过期修改订单保存到数据库中,如果用户支付订单修改订单为已支付并删除redis数据,
分页根据用户查询所有订单:
查出来的数据缓存到redis根据userid和当前页数做为key,模糊查询就在数据库中查找可以根据日期、商品名称模糊查询需要根据userid去查找
用户订单数量:
查询用户订单总数去计算需要总共有多少页,需要和分页根据用户查询所有订单参数一致
分页查询店铺所有订单:
可以查询所有店铺的订单(系统管理员),可以根据店铺查询当前店铺的订单也可以对商品模糊查询、根据时间进行查询根据用户名称模糊查询,将查询的所有订单和根据店铺的订单放入到redis中。模糊查询则在数据库中查询
根据订单查询userid
修改订单保存到缓存中需要用到的方法
查询单个订单
在缓存中查询单个订单如果缓存中没有则去数据库查找
添加订单
传入order对象,生成订单时计算库存数量如果数量不足则退出方法否则库存减一,并放入缓存中,设置缓存过期时间为15分钟,向延迟队列发送一条消息使用了RabbitMQ消息队列,
修改订单状态
根据订单编号进行修改,修改支付方式订单状态更改日期,
支付模块:
调用第三方API进行支付和退款同时并修改订单的状态,如支付宝、微信
用户模块:
用户登陆使用昵称在数据查询是否有数据,有数据在判断密码,将密码使用MD5加密加盐的方式对密码进行判断如果错误则在缓存中生成数据并将数据+1 如果缓存这条数据是3则今日不在登陆,登陆成功会生成token过期时间为30分钟并存放在缓存中,每次调用方法都会查询这个token是否过期,在系统中设置了定时任务批量删除redis缓存登陆次数的操作,查询用户相关的商品宠物时会先从缓存中获取如果缓存中获取不到在数据库中获取,删除数据或修改数据会将redis中的数据删除,如果用户对购买的商品有疑问可以在商城中联系门店,门店对用户进行解答,如果解决不了用户可以点击反馈与系统管理员解决问题
登陆:
在数据库中根据用户昵称去查询如果没有则没有此用户,在业务逻辑层判断使用MD5加密加盐的方式判断密码是否正确,如果不正确则在缓存中生成根据此用户昵称生成的缓存+1如果这条缓存数据为3则代表登陆错误三次今日不在让用户登陆、登陆成功用户信息放入到缓存中并生成token过期时间为30分钟并存放在缓存中,每次调用方法都会查询这个token是否过期,不会存放密码,设置个定时任务在凌晨三点的时候批量删除缓存中登陆错误的用户使用redis管道的方式peline 多个命令生成一个请求发送到redis 在次之前需要获取到所有的用户使用keys命令 " * " 的通配符方式进行查询
根据id获取用户信息:
在缓存中跟具用户的id去查询用户信息如果没有则是token过期重新登陆不会存放用户的密码
修改用户信息:
传入用户修改后的用户对象 修改密码用户名等,并删除redis缓存在查询数据库并放入到缓存中
修改查询:
在数据库中查询并查询密码等
上传图片:
使用springmvc技术进行图片上传上传的图片不能大于5M修改用户的头像
修改余额
用户充值或购买商品在数据库中进行操作对余额字段进行修改并删除缓存
删除收藏
删除用户收藏的宠物和商品并删除redis中的数据
添加收藏
根据商品id或宠物id添加一条记录并放入到缓存中和数据库中,先添加到数据库在删除缓存
查看用户收藏的宠物:
根据用户id 去查询收藏的宠物并进行分页查出的数据放入到缓存中
查看用户收藏的商品:
根据用户id 去查询收藏的商品并进行分页查出的数据放入到缓存中
获取用户余额
根据用户id查询余额放入到缓存中
查询预约
根据用户昵称去查询缓存中的数据
宠物服务模块:
在页面预约服务选择对应的店铺并全额支付在数据库与缓存中添加一条预约的数据过期时间设置为用户选择的到店的时间,如果用户退款则按照12306的方式进行退款
预约服务:
支付完成根据用户id和服务id和门店的id在数据库中生成一条数据,并放入到缓存中过期时间根据用户选择的时间,如果退款根据12306的规则进行退款
社区模块:
在数据库查询的帖子以最近日期的方式缓存到数据库中并分页,用户点进去可以看到评论,评论会先在缓存中获取如果获取不到在从数据库中获取以分页的方式,用户点击另一个用户的头像可以私聊消息沟通使用了websocket技术,
发布帖子:
在数据库和缓存list链表的方式中生成一条数据缓存中添加到头部
添加评论
根据帖子的id进行添加数据并添加到缓存使用list数据结构生成一条数据缓存到list链表头部
删除帖子:
根据帖子id和用户id删除帖子并删除缓存
删除评论
获取评论id和帖子id和用户id删除评论并删除缓存
查询帖子
先在缓存中根据当前页查询所有帖子如果没有则去数据库中查询,在数据库查出来的数据放入到缓存中
查询评论
先在缓存中查询评论如果没有则在数据库中查询,根据帖子id进行查找当前帖子评论
私聊
使用websocket技术持久化http连接进行用户的聊天
商城模块:
商品的信息会先在缓存中获取以分页的方式展示,门店可以对商品进行上下架并修改缓存,秒杀时会将商品在缓存中的key进行加锁的操作,用户先获取锁才能抢购商品,抢购后会添加一天订单并向延迟队列发送一条订单号,如果订单号已支付在死信队列什么也不操作并确认消息,如果订单号没有支付则修改订单
查询商品
可根据商品名称进行模糊查询、查询所有信息在redis中分页的方式查询
查询商品详情
根据商品的id查询商品详情信息
添加商品
在数据库中添加一条记录并删除缓存
秒杀模块:
使用商品的id作为key对缓存中的数据进行加锁, 用户抢单先缓存中判断是否以抢过如果抢过则不在让抢给出相应的提示,先获取缓存锁如果获取不到则进不去并重试如果用户没有抢过在缓存中判断商品的库存如果有库存则生成一条订单并减库存,订单放入到缓存中设置过期时间为15分钟并向延迟队列发送消息并释放锁,如果订单在15分钟内没有支付则释放库存,如果支付了则修改订单
后台
员工模块:
在数据库中查询门店id与员工id作为查询条件个人信息,在缓存中查看预约的服务,和商品的上下架或者是宠物的上下架
门店模块:
在缓存中根据门店的id查询门店的订单如果没有则在数据库中查询,查询当前门店的收入天、周、月、年,使用websocket技术与用户聊天,门店不能与用户主动聊天跟用户连接到门店才可以开始与用户聊天
系统管理员模块:
查询所有门店的收入以日、周、月、年的方式,可以根据门店id、模糊查询商品、模糊用户昵称进行订单查询,所有的订单以分页的方式放入到缓存中,如果缓存查询不到在数据库中查询,如果用户发布违规敏感词可以对用户进行封禁,用户与门店发生不一致的冲突管理员可以介入,管理员不能主动介入,由用户或者门店联系的时候才能介入