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
  • jwt token 如何实现自动续约

    jwt token 如何实现自动续约

    1.项目中存在刷新token的接口,前端或客户端刷新token的时机是什么?

    opened by rrsunhome 0
  • 可以生成mall后台代码的工具

    可以生成mall后台代码的工具

    本人根据线上开源代码二次开发,做了一个根据表可以生成mall项目后台Service、ServiceImpl、Controller,前端js、前端增删改查vue(都在一个文件里面)的项目,可以极大提升后台的开发效率,代码开源,有使用界面,非常方便,运行简单,欢迎大家一起用: https://gitee.com/leidengyan/Spring-generator

    opened by leidengyan 1
  • 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
  • 老大,后端项目直接用端口访问会不会有问题?

    老大,后端项目直接用端口访问会不会有问题?

    看到各个服务都启动了不同端口,那么前端直接调用后端的端口进行访问,这样会不会有问题?生产上会这样做吗?还是说可以做一个统一的入口?

    opened by xlkit456852 1
  • Is there any customer center in your admin backend service?

    Is there any customer center in your admin backend service?

    Hey there, I am just wondering is there any customer center in your admin backend service, cause I haven't seen any menu related it. image

    opened by qyhdt 2
  • 请问,有商品分类,为啥还设计了一个商品属性分类呢?

    请问,有商品分类,为啥还设计了一个商品属性分类呢?

    不是应该确定了商品的分类,就该确定商品所需要填写的属性列表了么?设计商品属性分类的作用是什么呢?和商品分类的关系是怎么样的? 然后又有一个商品分类和属性关系表,而不是商品分类和属性分类关系表,又是什么作用呢? 可以帮忙解释下这个设计吗?

    opened by coffeefunc 0
  • 管理后台没有看到会员模块

    管理后台没有看到会员模块

    管理后台并没有会员管理模块的内容,是未开发,还是权限未打开呢

    opened by caiguohui 2
  • es使用java.util.Date时转换报错

    es使用java.util.Date时转换报错

    报错内容:java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: InstantSeconds

    使用注解: @Field( type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss" ) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

    看了下堆栈信息,org.springframework.data.elasticsearch.core.convert.ElasticsearchDateConverter.parse()在处理格式转换时出去,查了下,有博主提了相关的问题,并且在spring data elasticsearch 提了issues,在spring boot 2.3.5.RELEASE得到解决,以下是提交记录。是否有其他解决方式?或者将boot版本升级?

    https://jira.spring.io/browse/DATAES-953

    opened by jzcccc 0
  • 单词拼写错误

    单词拼写错误

    cms_prefrence_area_product_relationcms_prefrence_area中的prefrence应该为preference

    opened by hdtopku 2
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

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

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

Mic 3.9k Mar 12, 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 8.2k Mar 14, 2021
jimoos shop server

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

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

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

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

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

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

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

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

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

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

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

coder_ryan 60 Apr 8, 2021