HbnnMall电子商城系统介绍(功能与技术栈)

2024-04-04 16:04

本文主要是介绍HbnnMall电子商城系统介绍(功能与技术栈),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己的技术。于是趁着疫情那段特殊时期,在业余时间用了几个月的时间把系统写出来了。麻雀虽小,五脏俱全,经过自己几个月的打磨,该有的功能都有了。不过和市面上开源的比,我写的真是相形见绌,都没法供外人展示,当时也纯粹只是为了自己学习。

        当看到自己写的几万行代码时,唯一的感觉就是:这是一场酣畅淋漓的自嗨,虽无大成效但却很痛快。另外一个有意思的是我发现写golang代码会让人难以自拔。毛主席的一首四言诗写道:”与天奋斗,其乐无穷;与地奋斗,其乐无穷;与人奋斗,其乐无穷。“,我改一下:写golang,其乐无穷;写前端,其乐无穷;写代码,其乐无穷。

一、网站介绍

整个系统的架构是这样:

        上面也说了,我的初衷是学习,所以并不像很多现成的电商系统,所有东西都揉到一起写的,而是拆分出多个微服务,采用Dubbo+nacos实现服务注册和发现。

1.首页

首页实现了商品分类导航,轮播图、优惠活动、商品推荐、排行榜、每日新品等。

这块儿就是各种后端服务,聚合形成的数据。

代码示例如下:

 public List<Future<HomeFutureResult>> execute(HomePageRequest homePageRequest){List<HomeGeneralTask> homeGeneralTaskList = new ArrayList<>();//新品展示homeGeneralTaskList.add(new DailyNewProductTask(goodsStatService));//商品推荐RecommendRequest recommendRequest = new RecommendRequest();recommendRequest.setBaseReuest(homePageRequest.getBaseReuest());homeGeneralTaskList.add(new RecommendTask(recommendRequest,recommendService));//排行榜homeGeneralTaskList.add(new TopRankTask(goodsStatService));//秒杀商品列表homeGeneralTaskList.add(new FlashSaleActivityTask());//商品展播图homeGeneralTaskList.add(new BannerTask(goodsStatService));List<Future<HomeFutureResult>> homeFutureResultList = new ArrayList<>();for (HomeGeneralTask homeGeneralTask:homeGeneralTaskList){homeFutureResultList.add(homePageExecutor.submit(homeGeneralTask));}return homeFutureResultList;}

2、商品详情页

        商品详情页涉及到很多,功能包括:

  • 商品左侧图片轮播展示;
  • 商品属性;
  • 商品促销活动;
  • 秒杀页;
  • 标签切换;
  • 立即购买;
  • 加入购物车;
  • 商品详情介绍;
  • 商品评论;
  • 商品参数;
  • 相似商品推荐。

        这个地方我花的时间最多,作为一个后端人员,搞前端的标签切换时,挺痛苦。

        和首页类似,这个地方也是由多个后端服务组成,就是所谓的产品站,这地方是可以做数据异构的。

        代码示例如下:

 public List<Future<GoodsDetailFutureResult>> execute(GoodsDetailRequest goodsDetailRequest, GoodsDetail goodsDetail){List<Future<GoodsDetailFutureResult>> goodsDetailFutureResultList = new ArrayList<>();List<GoodsDetailGeneralTask> goodsDetailGeneralTaskList = new ArrayList<>();//价格库存服务goodsDetailGeneralTaskList.add(new GoodsPriceInventoryTask(goodsDetail,goodsPropmotionService,propInventoryService));//促销活动服务if(Optional.ofNullable(goodsDetailRequest.getIsNeedActDetailInfo()).orElse(false)){goodsDetailGeneralTaskList.add(new GoodsPromotionTask(goodsDetail,goodsPropmotionService));}//商品详情介绍服务if(Optional.ofNullable(goodsDetailRequest.getIsNeedPropDetailIntroduction()).orElse(false)){goodsDetailGeneralTaskList.add(new GoodsIntroductionTask(goodsDetail,goodsDetailRequest,shopGoodImgMapper,djangoUrl));}//商户信息服务if(goodsDetailRequest.getIsNeedMerchantInfo() != null && goodsDetailRequest.getIsNeedMerchantInfo()){//TODO 增加商户信息}//增加shopTagif(Optional.ofNullable(goodsDetailRequest.getIsNeedShopTag()).orElse(false)){goodsDetailGeneralTaskList.add(new GoodsTagTask(goodsDetail,goodTagService));}for (GoodsDetailGeneralTask goodsDetailGeneralTask:goodsDetailGeneralTaskList){goodsDetailFutureResultList.add(goodsDetailExecutor.submit(goodsDetailGeneralTask));}return goodsDetailFutureResultList;}

3、商品搜索

搜索这块儿我使用的是ES进行查询,写了一个定时任务,会定期全量刷新一遍,当然应该还要有一个增量更新的,只不过我没写,同步的示例代码:

简易的搜索代码:

MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name",searchRequest.getName());//提高搜索精度matchQueryBuilder = matchQueryBuilder.prefixLength(3);//默认是ormatchQueryBuilder.operator(Operator.AND);matchQueryBuilder.minimumShouldMatch("75%");searchSourceBuilder.query(QueryBuilders.boolQuery().must(matchQueryBuilder).filter(QueryBuilders.termQuery("status",1)));searchSourceBuilder.from(searchRequest.getPageIndex() == null ? 0 : searchRequest.getPageIndex());searchSourceBuilder.size(searchRequest.getPageSize() == null ? 15 : searchRequest.getPageSize());
//        searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));esSearchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(esSearchRequest,RequestOptions.DEFAULT);

4、购物车列表

购物车实现购物车添加、修改、删除、全选、全部选等等。

购物车的实现都是通过Redia+lua脚本实现的。

5、结算页面

结算页是真正订单结算的页面,让用户知道要付多少钱,这里面涉及到商品,优惠、全局id号(分库分表场景需要全局唯一的订单号)、反作弊、发票、地址等多个服务。还要根据发货主体或者物权主体进行拆单。

6、支付页

订单数据已经生成,并成功写入数据表。接下来商户进行支付操作。超时的会自动取消。

由于支付都是需要企业认证,这里还没实际做支付功能,不过这个不难。

7、个人中心

个人中心包括各状态订单、我的收藏、优惠券、地址管理等等。

8、在线客服

在线客服也花了几天时间写的,使用了LayUi模板 +Python+channels实现了Websocket。

9、单点登录

实现的功能包括:

  • 支持业务系统接入实现第三方登录;
  • 登录方式包括手机验证码登录以及用户名密码登录;
  • token的申请和生成;
  • 通过token解析用户信息,并访问受限资源;
  • token的刷新。

具体可以看我之前写的文章:用户服务之实现单点登录icon-default.png?t=N7T8https://hbnnforever.cn/article/useservicessologin.html

10、秒杀服务

之前小米有个大秒系统,我觉得挺有意思,后来我就想我也整一个,就用Golang写了一个,当然,我写得没那么复杂,就是想体验一把Golang的丝滑。具体代码不展示了,先贴一个工程目录:

二、技术栈

1、Web端

采用的是Python +Django+Vue开发,部署采用Nginx+supervisor+gunicorn的方式;

2、API 网关

采用的是Springboot+Netty开发,目前已实现的功能:

  • 统一前端接口调用,支持HTTP,Dubbo协议;
  • HTTP协议至Dubbo协议的转换;
  • 统一鉴权;
  • 限流,主要借鉴sentinel的思想。

当然,可以看出来,目前实现的网关还比较弱鸡,至少还要加入熔断降级,服务编排,缓存,日志等等。而且,这市面上的API网关太多了,我纯粹是为了学习,实际中我们尽量避免造轮子。

3、后端业务层

用到的技术栈:

  • JAVA;
  • Python;
  • Golang:
  • Springboot;
  • Django;
  • Dubbo;
  • Nacos;
  • ZK;
  • Sentinel;
  • Redis;

JAVA+springboot+Dubbo+Nacos:

  • 用户账户服务;
  • 商品服务;
  • 优惠服务;
  • 库存服务;
  • 订单服务; 
  • 评论服务;
  • 清结算服务;
  • 发票服务;

用Django+channels实现的:客服服务    Websocket;

Golang:秒杀服务,用golang+Redis单独写了秒杀服务,参考小米的大秒系统;

MysqlProxy:实现读写分离+ 分库分表

Nacos+sentinel:nacos实现注册中心,服务发现,限流熔断配置发现、sentinel熔断限流。

ZK:订单号,分布式唯一ID生成

ES:商品存储,用于搜索查询。

Shardingshpere:订单分库分表,这个也纯粹是练习。

三、总结

        我开发的电商系统并不是完整的,像支付、物流、退款等都没有写,不过当时在开发的过程中,的确又学到了很多。网上也有很多开源的系统,尤其是听说那些报培训班的都有电商系统开发。虽然本人对培训班嗤之以鼻,不屑于多看他们一眼,但所谓存在的就是合理的,他们弄电商系统也侧面说明这玩意是有实战意义的,实战一段时间后还是有提高的。

        代码就不展示了,如果有对这方面感兴趣的同学可以网上找找更好的开源示例,不过我的代码可以免费私下给。

这篇关于HbnnMall电子商城系统介绍(功能与技术栈)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876229

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time