普药商城
该商城是一个供商业公司卖药、私人诊所和药店买药的一个电商平台,商业公司可以上下架药品、查看平台上的订单汇总分析、客户分析信息。本人完成商业公司药品信息同步、首页、业务员与客户扫码绑定、下单、订单管理,后台商品管理、上架推送通知、订单管理、订单详情、退款、订单和商品统计图、系统监控。主要用到的技术有:Spring Boot、MyBatis-plus、Druid、MySql、Dubbo、Seata、Redis、RabbitMQ、Canal、Elasticsearch、Logstash、Kibana、Zookeeper、Skywalking。
本人主要完成的模块如下:
药品信息同步
1、编写同步接口,商业公司的商品信息、库存、上下架状态有变动时,通过此接口将商品信息同步到系统中,通过签名和加密的方式保证接口安全。
2、通过 Canal 集群将商品信息的变动同步到 ES 中。
首页
1、药品列表:从 ES 中加载默认按药品销量及所属订单量最多的商业公司降序排序;
2、首页查询:从 ES 中按药品名称、商业公司、药品主治功能进行分词查询,并进行高亮显示,使用 ES 插件 IK 中文分词器进行分词。
3、商品详情:通过线程池查询商品基础信息、图片、销量、库存、生产和有效期等。
下单
1、购物车:用户在首页或详情页可将药品添加到购物车中,后台判断购物车中是否有该药品,有则只添加数量,没有则在购物车中添加该商品及数量;
2、下单:使用 Seata TCC 模式实现仓库系统、订单系统、支付系统3 个子服务的分布式事务,下单后支付成功,生成母订单,并按药品所属公司生成子订单,当库存数量小于等于库存阀值或是畅销药品时,使用redis + Lua 脚本来扣减库存,当大于库存阀值时,使用数据库行级锁从数据库中扣减库存;
3、子订单同步:将支付成功的子订单同步到商业公司,如果第1 次同步失败,则将子订单放入 RabbitMQ 延迟队列中再次同步,若3 次后依然失败则放弃自动同步。
订单管理
1、我的订单:从 MySql 数据库中加载用户的订单信息,按时间降序排序;
2、订单详情:通过线程池查询订单、商品基础信息、退款、退货等信息。补品秒杀 1、使用 Redis 的单线程原理、分布式锁、LUA 脚本实现。
后台
1、商品管理:查看商品信息,并对商品上下架、库存、价格进行修改;
2、上架推送通知:将促销的、新上架的药品使用极光API 推送给手机APP;
3、订单管理:查看订单列表、详情、订单退款退货处理。
系统监控
1、使用 Skywalking + ES 实现对普药商城系统的监控。
责任描述
1、独立完成整个系统的后端重构,并优化商业公司同步接口、首页查询、下单功能;
2、完成后台商品管理、订单管理和统计的页面设计及后端功能实现;
3、完成基于 Skywalking 的监控系统搭建和实现,Canal 集群部署。