mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

Overview

mall

公众号 交流 学习教程 SpringCloud版本 前端项目 码云

友情提示

  1. 快速体验项目在线访问地址
  2. 全套学习教程《mall学习教程》
  3. 微服务版本:基于Spring Cloud Hoxton & Alibaba的项目:mall-swarm
  4. 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》
  5. 项目交流:想要加群交流项目的朋友,可以加入mall项目交流群

前言

mall项目致力于打造一个完整的电商系统,采用现阶段流行技术实现。

项目文档

项目介绍

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

项目演示

后台管理系统

前端项目mall-admin-web地址:https://github.com/macrozheng/mall-admin-web

项目演示地址: http://www.macrozheng.com/admin/index.html

后台管理系统功能演示

前台商城系统

前端项目mall-app-web地址:敬请期待......

项目演示地址:http://www.macrozheng.com/app/mainpage.html

前台商城系统功能演示

组织结构

mall
├── mall-common -- 工具类及通用代码
├── mall-mbg -- MyBatisGenerator生成的数据库操作代码
├── mall-security -- SpringSecurity封装公用模块
├── mall-admin -- 后台商城管理系统接口
├── mall-search -- 基于Elasticsearch的商品搜索系统
├── mall-portal -- 前台商城系统接口
└── mall-demo -- 框架搭建时的测试代码

技术选型

后端技术

技术 说明 官网
SpringBoot 容器+MVC框架 https://spring.io/projects/spring-boot
SpringSecurity 认证和授权框架 https://spring.io/projects/spring-security
MyBatis ORM框架 http://www.mybatis.org/mybatis-3/zh/index.html
MyBatisGenerator 数据层代码生成 http://www.mybatis.org/generator/index.html
Elasticsearch 搜索引擎 https://github.com/elastic/elasticsearch
RabbitMQ 消息队列 https://www.rabbitmq.com/
Redis 分布式缓存 https://redis.io/
MongoDB NoSql数据库 https://www.mongodb.com
LogStash 日志收集工具 https://github.com/elastic/logstash
Kibina 日志可视化查看工具 https://github.com/elastic/kibana
Nginx 静态资源服务器 https://www.nginx.com/
Docker 应用容器引擎 https://www.docker.com
Jenkins 自动化部署工具 https://github.com/jenkinsci/jenkins
Druid 数据库连接池 https://github.com/alibaba/druid
OSS 对象存储 https://github.com/aliyun/aliyun-oss-java-sdk
MinIO 对象存储 https://github.com/minio/minio
JWT JWT登录支持 https://github.com/jwtk/jjwt
Lombok 简化对象封装工具 https://github.com/rzwitserloot/lombok
Hutool Java工具类库 https://github.com/looly/hutool
PageHelper MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper
Swagger-UI 文档生成工具 https://github.com/swagger-api/swagger-ui
Hibernator-Validator 验证框架 http://hibernate.org/validator

前端技术

技术 说明 官网
Vue 前端框架 https://vuejs.org/
Vue-router 路由框架 https://router.vuejs.org/
Vuex 全局状态管理框架 https://vuex.vuejs.org/
Element 前端UI框架 https://element.eleme.io
Axios 前端HTTP框架 https://github.com/axios/axios
v-charts 基于Echarts的图表框架 https://v-charts.js.org/
Js-cookie cookie管理工具 https://github.com/js-cookie/js-cookie
nprogress 进度条控件 https://github.com/rstacruz/nprogress

架构图

系统架构图

系统架构图

业务架构图

系统架构图

模块介绍

后台管理系统 mall-admin
前台商城系统 mall-portal

功能结构图-前台.jpg

开发进度

项目开发进度图

环境搭建

开发工具

工具 说明 官网
IDEA 开发IDE https://www.jetbrains.com/idea/download
RedisDesktop redis客户端连接工具 https://github.com/qishibo/AnotherRedisDesktopManager
Robomongo mongo客户端连接工具 https://robomongo.org/download
SwitchHosts 本地host管理 https://oldj.github.io/SwitchHosts/
X-shell Linux远程连接工具 http://www.netsarang.com/download/software.html
Navicat 数据库连接工具 http://www.formysql.com/xiazai.html
PowerDesigner 数据库设计工具 http://powerdesigner.de/
Axure 原型设计工具 https://www.axure.com/
MindMaster 思维导图设计工具 http://www.edrawsoft.cn/mindmaster
ScreenToGif gif录制工具 https://www.screentogif.com/
ProcessOn 流程图绘制工具 https://www.processon.com/
PicPick 图片处理工具 https://picpick.app/zh/
Snipaste 屏幕截图工具 https://www.snipaste.com/
Postman API接口调试工具 https://www.postman.com/
Typora Markdown编辑器 https://typora.io/

开发环境

工具 版本号 下载
JDK 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Mysql 5.7 https://www.mysql.com/
Redis 5.0 https://redis.io/download
MongoDB 4.2.5 https://www.mongodb.com/download-center
RabbitMQ 3.7.14 http://www.rabbitmq.com/download.html
Nginx 1.10 http://nginx.org/en/download.html
Elasticsearch 7.6.2 https://www.elastic.co/downloads/elasticsearch
Logstash 7.6.2 https://www.elastic.co/cn/downloads/logstash
Kibana 7.6.2 https://www.elastic.co/cn/downloads/kibana

搭建步骤

Windows环境部署

Docker环境部署

相关环境部署

公众号

学习不走弯路,关注公众号「macrozheng」,回复「学习路线」,获取mall项目专属学习路线!

加微信群交流,公众号后台回复「加群」即可。

公众号图片

许可证

Apache License 2.0

Copyright (c) 2018-2021 macrozheng

Issues
  • 这里图片是如何存储的

    这里图片是如何存储的

    这里图片是如何存储的

    opened by heliusjing 14
  • 没有app前台代码

    没有app前台代码

    没有app前台代码

    opened by yfjl 13
  • 关于权限!

    关于权限!

    大佬,啥时候上权限啊!

    opened by wuzhihang0 11
  • Sku属性设计。。。。

    Sku属性设计。。。。

    说实话sku这块前台代码以及后台存储总感觉有点恶心;我给改成了一个json字段存储了。。。前台代码那儿感觉代码太。。。。。。。

    opened by berlinsaint 9
  • 昨天下载的项目跑不起来

    昨天下载的项目跑不起来

    mall-admin 运行后,打不开 http://localhost:8080/swagger-ui.html。 难道 最新的源码有坑 ?分数那么高 ,还有这种错误?

    opened by qinguabao 7
  • 跪求app端源码

    跪求app端源码

    老哥 可以把app端源码po一下不?跪求

    opened by CrazyGoku 6
  • app方案

    app方案

    您好, 请问app款有考虑使用什么方案吗? 据我目前了解的 uni-app比较火,学习成本比较低, 上手比较快。 一套发布多平台。

    opened by virtuecai 6
  • 关于全局异常捕获

    关于全局异常捕获

    咱们微服务项目做全局异常捕获处理了么,碰到了自定义全局异常再被其他服务调用时直接触发服务降级,如果把HttpStatus调整为200异常无法抛出

    opened by yanwencheng 0
  • db -patch

    db -patch

    有没有dbpatch?

    opened by LiuQhahah 0
  •  Request failed with status code 500

    Request failed with status code 500

    演示地址:http://www.macrozheng.com/admin/index.html#/ums/admin 添加账号操作 Request failed with status code 500

    opened by SYanalyser 0
  • 请问SKU是否必须有才能下单吗

    请问SKU是否必须有才能下单吗

    请问某些商品有SPU,但是没有对应的SKU,下单的时候会提示“库存不足”。那么是否就是说,如果创建了一个商品,是否必须设置SKU才能够正常下单?这样的话,为何商品表中还有库存这些字段?

    opened by WSTK-Felix 0
  • 商品价格优惠 满减活动 后端计算错误

    商品价格优惠 满减活动 后端计算错误

    设置满5减1 mall-portal 模块下 接口最后下单确定优惠金额 优惠是0.98 还少了2毛钱

    opened by chenweibo 0
  • 添加商品属性存在原子型问题

    添加商品属性存在原子型问题

    背景:添加产品属性对于属性分类表有两次数据库操作,第一次获取对应的分类记录,第二次把属性数量累加了1更新数据库。 问题:如果要是存在并发的情况,比如两个线程同时读取完了分类记录,获得的属性数量是一致的,那么两个线程同时加1,然后分别更新,就会导致实际只加了1而不是2。

    opened by stulwd 0
  • mall-common模块下WebLogAspect的切面类可能会造成信息泄漏

    mall-common模块下WebLogAspect的切面类可能会造成信息泄漏

    您好, 我们使用您的项目作为我们静态代码分析工具的测试样例,我们发现在mall-common模块下的 com.macro.mall.common.log.WebLogAspect.doAround(ProceedingJoinPoint joinPoint) 方法的倒数第3行(源码中89行)的日志打印语句 LOGGER.info(Markers.appendEntries(logMap), JSONUtil.parse(webLog).toString()); 可能会造成敏感信息泄漏的情况。

    @Around("webLog()")
        public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
            long startTime = System.currentTimeMillis();
            //获取当前请求对象
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            //记录请求信息(通过Logstash传入Elasticsearch)
            WebLog webLog = new WebLog();
            Object result = joinPoint.proceed();
            Signature signature = joinPoint.getSignature();
            MethodSignature methodSignature = (MethodSignature) signature;
            Method method = methodSignature.getMethod();
            if (method.isAnnotationPresent(ApiOperation.class)) {
                ApiOperation log = method.getAnnotation(ApiOperation.class);
                webLog.setDescription(log.value());
            }
            long endTime = System.currentTimeMillis();
            String urlStr = request.getRequestURL().toString();
            webLog.setBasePath(StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
            webLog.setIp(request.getRemoteUser());
            webLog.setMethod(request.getMethod());
            webLog.setParameter(getParameter(method, joinPoint.getArgs()));
            webLog.setResult(result);
            webLog.setSpendTime((int) (endTime - startTime));
            webLog.setStartTime(startTime);
            webLog.setUri(request.getRequestURI());
            webLog.setUrl(request.getRequestURL().toString());
            Map<String,Object> logMap = new HashMap<>();
            logMap.put("url",webLog.getUrl());
            logMap.put("method",webLog.getMethod());
            logMap.put("parameter",webLog.getParameter());
            logMap.put("spendTime",webLog.getSpendTime());
            logMap.put("description",webLog.getDescription());
    //        LOGGER.info("{}", JSONUtil.parse(webLog));
            LOGGER.info(Markers.appendEntries(logMap), JSONUtil.parse(webLog).toString());
            return result;
        }
    

    该AOP方法在拦截所有controller方法的同时会通过joinPoint.getArgs()获取到所有的用户输入信息(如用户名和密码),这些敏感信息经过数据流的传递会打印到日志文件和控制台上,造成敏感信息的泄漏。 部署后实际运行这个例子后的打印输出如下:

    2021-04-07 16:51:23.881 DEBUG 405252 --- [nio-8080-exec-2] c.m.m.m.UmsAdminMapper.selectByExample   : ==>  Preparing: select id, username, password, icon, email, nick_name, note, create_time, login_time, status from ums_admin WHERE ( username = ? )
    2021-04-07 16:51:23.881 DEBUG 405252 --- [nio-8080-exec-2] c.m.m.m.UmsAdminMapper.selectByExample   : ==> Parameters: 123(String)
    2021-04-07 16:51:23.883 DEBUG 405252 --- [nio-8080-exec-2] c.m.m.m.UmsAdminMapper.selectByExample   : <==      Total: 0
    2021-04-07 16:51:23.884  WARN 405252 --- [nio-8080-exec-2] c.m.m.service.impl.UmsAdminServiceImpl   : 登录异常:用户名或密码错误 
    2021-04-07 16:51:23.915  INFO 405252 --- [nio-8080-exec-2] com.macro.mall.common.log.WebLogAspect   : {"method":"POST","description":"登录以后返回token","uri":"/admin/login","url":"http://localhost:8080/admin/login","result":{"code":404,"message":"用户名或密码错误"},"basePath":"http://localhost:8080","parameter":{"password":"456","username":"123"},"startTime":1617785483846,"spendTime":39}
    
    opened by BACMiao 0
  • 不能根据单个商品生成预订单和订单。

    不能根据单个商品生成预订单和订单。

    发现没有通过单个商品信息生成订单的接口

    opened by hujian222 0
Releases(v1.0.1)
Owner
macro
Justice may be late, but will never be absent.
macro
🦄 开源社区系统:基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。

Echo — 开源社区系统 项目上线到服务器之后可能会出现各种各样的 BUG,比如 Elasticsearch 服务启动失败导致搜索模块不可用,但是在本地运行是完全没问题的,所以各位小伙伴可以放心下载部署。 ?? 项目简介 Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java Web

小牛肉 211 Sep 7, 2021
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch

咕泡商城- 微服务架构实战 咕泡商城是咕泡学院 Java架构课程中,帮助学员对于技术更好落地的一个实战项目,项目基于springboot2.1.6.RELEASE+Dubbo2.7.3 来构建微服务。 业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本

Mic 4.1k Sep 10, 2021
旺鑫树学习考试系统

#wangxin-study 旺鑫树学习考试系统 旺鑫树学习考试系统(wangxin-education),致力打造一个低成本通用的在线教育系统,让用户直接通过系统可视化配置并尽可能无须修改任何代码即可实现上线商用。系统采用前后端分离模式,前台和移动端采用vue.js为核心框架,后台采用Java语言

null 187 Sep 11, 2021
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 9.6k Sep 18, 2021
一个基于Mirai 2.7-M2的机器人插件,用以发送随机色图

随机色图插件(suijisetu) 一个基于Mirai 2.7-M2的机器人插件,用以发送随机图片 新增权限系统,支持跨群发送消息 使用说明 插件项目地址 github项目地址 Gitee项目地址 插件基于Mirai Clonsole 2.7-M2版本开发,请使用Mirai-Clonsole 2.7

Ycitus 14 Sep 10, 2021
mall4cloud微服务商城,基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的B2B2C微服务商城系统,采用主流的互联网技术架构、全新的UI设计 B2B2C微服务商城|小程序微服务商城|

README 前言 本商城是基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等

null 165 Sep 12, 2021
jimoos shop server

积墨开源商城 服务端代码 快速开始 快速开始开发文档 https://jimoos-cn.github.io/jimoos-shop-server/#/quick-start/quick-start 业务建模图 数据库导入 执行数据迁移命令行 mvn -Dtest=MigrationDone tes

Jimoos 14 Sep 6, 2021
Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架!

Guns基于Spring Boot2,致力于做更简洁的后台管理系统。包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本迭代快,加群免费技术支持。

冯硕楠 3.3k Sep 12, 2021
:racehorse:基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

系统介绍 本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime Text3 + Git + Chrome 压测

FINN 1.8k Sep 7, 2021
一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量。基于springboot +mybatis+spring security+vue 技术栈

YOMA [toc] 一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量,平台代码100%开源。平台适用于企业信息化、政务、中小型互联网等项目 平台采用前后端分离架构,基于如下流行的开源框架,易上手+便于后期维护 后端:https://

Shihao Ma 128 Sep 13, 2021
基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

平台简介 芋道,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。 前端采用 vue-element-admin。 后端采用 Spring Boot、MySQL、Redis。 权限认证使用 Spring Security

芋道源码 915 Sep 18, 2021
😎基于SpringBoot+MyBatis进行前后端开发的个人博客网站,优化了许多功能模块,版本不断维护中。(期末项目/毕业设计/新手推荐)

Spring-Blog 框架:Springboot 数据库持久层:Mybatis 文章评论插件:Valine 分页插件:PageHelper 后台UI框架:X-admin框架,即LayUI框架 数据库连接池:hikari 数据库:MySQL 日志:Log4J 后台配置: properties 缓存实

coder_ryan 76 Sep 3, 2021
伊娃(Eva)后台管理系统是一套干净、强大的企业级权限管理系统,支持技术栈定制和功能模块的定制。你可以用它快速开发企业数据管理系统、OA、CMS等,当然,你也可以用它来做毕业设计、个人项目等。

介绍 伊娃(Eva) 是一款基于SpringBoot、Mybatis Plus的,支持在线定制化技术栈,支持在线定制化功能模块的开源的后台管理系统项目框架。跟其他开源项目一样,为了使项目开发足够简单,Eva经过仔细的设计和探索,采用约定大于配置的思想,基于可扩展性、安全性、可读性对项目的常用功能进行

null 40 Aug 26, 2021
完整教学!从0到1开发,手把手教你学会开发一个spring security + jwt + vue的前后端分离项目! 线上演示:https://markerhub.com/vueadmin/

VueAdmin - 基于SpringBoot+Jwt+Vue的前后端分离后台管理系统 完整教学!从0到1开发,手把手教你学会开发一个spring security + jwt + vue的前后端分离项目! 线上体验:https://www.markerhub.com/vueadmin/ 说明: 首

MarkerHub 99 Sep 4, 2021