基于Java+SpringBoot+Vue+Uniapp前后端分离商城系统设计与实现_卡布奇诺-海晨-程序员宅基地

技术标签: spring boot  Java项目案例  vue.js  uniapp项目案例  

博主介绍:全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

uniapp微信小程序面试题软考题免费使用,还可以使用ChatGPT,微信支付,扫码加群

点击这里预览

文末获取联系精彩专栏推荐订阅 不然下次找不到哟

Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

有需求代码永远写不完,而方法才是破解之道,而选择方向不对收获甚微,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。

最后再送一句:最好是学会了,而不是学废了!!!

目录

一、前言

1、 项目的背景和意义

2、国内外研究现状分析

2.1 国外电子商务发展与现状

2.2、国内电子商务发展与现状

3、研究内容及预期目标

二、系统设计

1、系统运行环境

2、系统架构设计

 3、登录设计

4、管理员维护订单时序图设计:

 三、数据库设计 

1、实体E-R图

1.1、用户实体

1.2、产品实体 

四、功能截图 

1、登录界面

2、商品管理

2.1、商品信息

2.2、商品分类

3、会员管理

3.1、会员信息

3.2、会员等级

3.3、会员足迹

3.4、会员收藏

4、订单管理

5、app配置

5.1、首页轮播图

6、营销管理

6.1、秒杀商品

6.2、砍价商品

7、系统管理

7.1、用户管理

7.2、角色管理

7.3、菜单管理

7.4、部门管理

7.5、岗位管理

7.6、字典管理

8、Uniapp会员客户端

8.1、首页轮播图以及功能导航

8.2、商品信息

8.3、商品分类

8.4、我的

五、实现代码 

1、角色控制器

2、服务接口

3、实现类

六、获取源码


一、前言

1、 项目的背景和意义

    随着人们生活水平的提高,对物质要求也越来越高。人们网购的消费也逐年增长,所以电子商务发展十分迅速,网上商城应运而生,为人们的网上购物提供了好的平台。电子商城,跟在线购物有关。它是一个javaweb项目,为了增加用户体验,优化了前台页面,首页非常美观。
    纵观当下世界,科学技术日新月异,信息技术节节攀高,经济活动也越发高涨。一方面,信息科技迅猛发展带来了信息时代的兴起,其中互联网技术自出现以来便吸引了全球人类的目光,深刻地变革了人类的生存及生活方式;而另一方面,经济活动的快速发展也对安全和便利提出了更高、更为严苛的要求。商业经济活动与互联网技术由此就慢慢结合起来,一种全新的、基于互联网的新型经济模式应运而生,即电子商务。经过一段时间的发展,电子商务逐步融入到每个人的生活,改变了市场的商务模式,并且在世界经济发展过程中发挥着举足轻重的作用。
    电子商务是一种崭新的商业模式。企业利用前沿信息技术,将传统受制于时空的商务活动转变为跨越时空的虚拟交易,是传统商务经济活动的电子化与信息化。联合国经济合作与发展组织对电子商务是这样界定的:用电子化手段来从事商业活动,主要通过电子的数据处理和信息技术,例如文本、声音和图像等进行数据传输。而美国政府对电子商务的定义更加简单明了,电子商务是基于互联网进行的各项商务活动,其中商务活动包括广告、交易、支付、服务等,全球电子商务通达世界上的各个国家。自 1994 年亚马逊的成立开始,电子商务的规模壮大超出想象。发展速度已经把与商业相关其他领域甩在身后,由此而生的新业态和新模式无形中也推动了许多其他领域的转型与升级,目前是现代服务经济体系的先导性产业之一。电子商务包含许多商业模式,例如B2B,B2C,C2C,C2B,O2O,G2B 等模式。其中最典型和发展最快的是 B2C 商业模式,即商家与客户模式。在 B2C 的商业模式下,商家通过建立在线网络购物平台为消费者提供服务,这不仅打破时空界限,还提高了交易效率并降低商家的销售成本。近年来,除了一直领跑的天猫之外,京东商城、苏宁易购、国美在线等国内其他 B2C 电商平台也在稳步前进,并占据了很大一部分市场份额。历经多年的发展积淀,全球电子商务正在由开始的 1.0 时代快速地进入电子商务2.0 时代。这一新的 2.0 时代在电子商务产业的增长方向、地区结构、创新驱动力以及产业边界等方面也都具备新的特征。所以在这一新的发展时期,对于 B2C 电子商务的研究就显得尤为重要。
据顶级数据统计网站Statista所发布的调查统计数据显示,预计到2020年,全球
零售电子商务交易额将超过4万亿美元,这个数字是2014年全年零售电子商务交易额的 
3倍,由此可以看出电子商务增长之快。
    作为电子商务最瞩目的商业模式之一,B2C 电子商务近年来的发展尤其迅速,预计到 
2018 年世界B2C电子商务交易额将达到2.356万亿美元,如图1.2所示。这一数字也比2012年翻了一倍还多,清晰地表明B2C电子商务在电子商务领域占的比重与整体的发展速度是十分惊人的。
    由于经济的快速增长,我国中产及以上阶层消费者数量已经逐渐增加。新生代消费者的崛起,成为中国消费市场的主导力量。未来的消费重心会逐步偏移。相较于产品,服务将成为未来若干年促使消费转型升级的驱动力。而在未来的社会,消费者对于高端产品及服务的需求也会与日俱增。人们的消费观念也将从买卖商品向体验服务转变,“满足日常需求”升级为“改善生活品质”。


2、国内外研究现状分析


2.1 国外电子商务发展与现状

    从全球的角度来看,电子商务主要历经了三个阶段:萌芽时期,形成时期,发展时期。

萌芽时期可以追溯到19世纪前叶,电报的出现当即就引发了人们对于其在商务领域应用的讨论,这个时期莫尔斯密码可算是主要承载形式。
形成时期则开始于电子计算机的出现,时间自20世纪中叶起始,EDI(电子数据交换)被公认为是形成时期的主要承载形式。
发展时期则伴随着计算机网络技术尤其是网联网的出现,20世纪90年代后期,计算机、互联网技术迅速发展,信用卡的广泛使用,及电子安全交易协议的制定与推广,电子商务的规模真正意义上达到了一个新台阶。
    从1994年亚马逊成立,到1995年美国宣布成立电子商务工作组,B2C这个概念也在次年被提出。美国从一开始在电子商务的发展上就居于领跑地位。无论是全球电子商务市场份额还是技术发展水平,美国都是执牛耳者,后来西欧等发达国家和地区也迎头赶上,引领新型商业模式并作为规模担当。
    然而,近年来电子商务市场开始呈现新的特点:以中国为代表的新兴市场逐渐成为全球电子商务重心,美国和欧洲无论是规模还是从发展速度来看将逐渐处于劣势。亚太、拉美、中东等新兴市场的规模日益攀升,发展速度和规模也颇令人瞩目。新兴市场不断缩小与发达国家的发展差距,尤其是创新能力和基础设施差距,新兴市场国家在未来将领跑整个电子商务领域。


2.2、国内电子商务发展与现状

    纵观世界其他国家电子商务的发展,我国开始发展的时间稍晚,然而发展的规模和速度仍然不容小觑,主要可以分为以下几个阶段:

1999-2002年是萌芽阶段,电子商务的发展开始正式起步。
2003-2006年是快速发展期,国外电子商务企业如亚马逊等开始进驻,带来许多先进的理念、技术和方法,与此同时国内阿里巴巴、当当等电商平台开始涌现。电子商务依旧十分热门,网上商城的市场依旧很大。好的商城系统是保证消费者愉快购物的关键。
2007年开始,中国的电子商务进入高速上升时期,越来越多的企业带来更多的资金和更先进的技术投入,天猫、京东等电商平台开始引爆中国,几乎绝大部分的国人也都或多或少参与到电子商务中来,为电商平台的更新升级与发展进步提供了推动力,人们的生产生活方式也出现翻天覆地的变化。
    以淘宝为例,据中国电子商务研究中心监测数据,2016年5月,淘宝手机客户端月活跃用户达到3.7亿,其中深度活跃用户平均每天登陆手机淘宝达7.2次,浏览商品约18 件商品,淘宝手机客户端平均产生2000万关于商品的评论和分享。大量用户在浏览商品、阅读及社区评论互动上花费的时间每天要超过1个小时。这庞大的用户数量和用户使用时间决定了在新兴国家中,中国电子商务市场的发展速度是最快的,规模也是最大的。可以想见到,未来相当长的一段时间内中国将在世界电商领域上领跑。


3、研究内容及预期目标

        在线电子商城是基于javaweb技术实现的,包含前后端.预期目标是实现基础的业务流程,后期再拓展创新功能,能让使用者有很好的用户体验。

二、系统设计

1、系统运行环境

开发系统:Windows10

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本: mysql5.7

数据库可视化工具: SQL yog或Navicat for MySQL

服务器:SpringBoot自带 apache tomcat

主要技术:Java、SpringBoot、MyBatis-plus、SpringSecurity、JWT、MySQL、Redis、Html、Vue、Elementui等

2、系统架构设计

3、项目结构

4、登录设计

    借鉴微服务单点登录设计

5、管理员维护订单时序图设计:

 

 三、数据库设计 

1、实体E-R图

1.1、用户实体

1.2、产品实体 

四、功能截图 

1、登录界面

2、商品管理

2.1、商品信息

2.2、商品分类

3、会员管理

3.1、会员信息

3.2、会员等级

3.3、会员足迹

3.4、会员收藏

4、订单管理

5、app配置

5.1、首页轮播图

6、营销管理

6.1、秒杀商品

6.2、砍价商品

7、系统管理

7.1、用户管理

7.2、角色管理

7.3、菜单管理

7.4、部门管理

7.5、岗位管理

7.6、字典管理

8、Uniapp会员客户端

8.1、首页轮播图以及功能导航

8.2、商品信息

可切换可跳转

8.3、商品分类

 

8.4、我的

五、实现代码 

1、角色控制器

/**
 * <p>
 * 角色表 前端控制器
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
@RestController
@AllArgsConstructor
@RequestMapping("/api/roles")
public class CeamSysRoleController {
 
    private final ICeamSysRoleService ceamSysRoleService;
    private final ICeamSysUserService ceamSysUserService;
 
    @GetMapping
    public ResponseEntity<IPage<CeaMSysRoleVO>> getRoles(PageableDTO pageable) {
        IPage<CeaMSysRoleVO> mapIPage = ceamSysRoleService.pageCeaMSysRoleVO(pageable);
        return ResponseEntity.ok(mapIPage);
    }
 
    @GetMapping(value = "/level")
    public ResponseEntity<Object> getLevel() {
        return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK);
    }
 
    @PutMapping(value = "/menu")
    public ResponseEntity<Object> updateMenu(@RequestBody CeaMSysRoleDTO roleDTO) {
 
        CeamSysRole role = ceamSysRoleService.getById(roleDTO.getId());
        getLevels(role.getLevel());
        ceamSysRoleService.updateMenu(roleDTO, role);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
 
    /**
     * 获取用户的角色级别
     * @return /
     */
    private int getLevels(Integer level) {
        CeaMSysUserDTO user = ceamSysUserService.loadUserInfo(SecurityUtils.getUsername());
        List<RoleDTO> roleDTOS = ceamSysRoleService.listByUserId(user.getId());
        List<Integer> levels = roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList());
        int min = Collections.min(levels);
        if (level != null) {
            if (level < min) {
                throw new ServiceException("权限不足,你的角色级别:" + min + ",低于操作的角色级别:" + level);
            }
        }
        return min;
    }
}

2、服务接口

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
public interface ICeamSysRoleService extends IService<CeamSysRole> {
 
    IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable);
 
    /**
     * 获取用户权限信息
     * @param userId 用户信息
     * @return 权限信息
     */
    Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId);
 
    /**
     *
     * @param userId 用户ID
     * @return RoleItemVOs
     */
    List<RoleDTO> listByUserId(Long userId);
 
    void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role);
}

3、实现类

/**
 * <p>
 * 角色表 服务实现类
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
@Slf4j
@Service
@AllArgsConstructor
public class CeamSysRoleServiceImpl extends ServiceImpl<CeamSysRoleMapper, CeamSysRole> implements ICeamSysRoleService {
 
    private ICeamSysMenuService ceamSysMenuService;
    private ICeamRoleMenuService ceamRoleMenuService;
 
    @Override
    public IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable) {
        LambdaQueryWrapper<CeamSysRole> queryWrapper = Wrappers.<CeamSysRole>lambdaQuery()
                .eq(CeamSysRole::getDeleted, GlobalConstants.FALSE);
        Page<CeamSysRole> page = new Page<>(pageable.getPage(), pageable.getSize());
        // 手动设置当前页,不然分页失效
        page.setCurrent((long)pageable.getPage() + GlobalConstants.ONE);
        Page<CeamSysRole> ceamSysRolePage = page(page, queryWrapper);
        IPage<CeaMSysRoleVO> ceaMSysRoleVOIPage = PageVOUtil.copyToPageVO(ceamSysRolePage, CeaMSysRoleVO.class);
 
        for (CeaMSysRoleVO role : ceaMSysRoleVOIPage.getRecords()) {
 
            List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoleId(role.getId(), GlobalConstants.ZERO);
            role.setMenus(menuDTOS);
        }
 
        return ceaMSysRoleVOIPage;
    }
 
    @Override
    public Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId) {
        List<RoleDTO> roleItemDTOS = this.baseMapper.listByUserId(userId);
        if (CollectionUtils.isEmpty(roleItemDTOS)) {
            throw new ServiceException("没有分配角色");
        }
 
        List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoles(roleItemDTOS, GlobalConstants.ZERO);
 
        // 角色
        Set<String> permissions = roleItemDTOS.stream()
                .filter(role -> StringUtils.isNotBlank(role.getName()))
                .map(RoleDTO::getName).collect(Collectors.toSet());
        permissions.addAll(
                menuDTOS.stream()
                        .filter(menu -> StringUtils.isNotBlank(menu.getPermission()))
                        .map(MenuDTO::getPermission).collect(Collectors.toSet())
        );
 
        return permissions.stream().map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
    }
 
    @Override
    public List<RoleDTO> listByUserId(Long userId) {
        return this.baseMapper.listByUserId(userId);
    }
 
    @Override
    public void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role) {
        if (roleDTO.getMenus().size() > 0) {
            List<CeamRoleMenu> rolesMenusList = roleDTO.getMenus().stream().map(i -> {
                CeamRoleMenu rolesMenus = new CeamRoleMenu();
                rolesMenus.setRoleId(roleDTO.getId());
                rolesMenus.setMenuId(i.getId());
                return rolesMenus;
            }).collect(Collectors.toList());
            ceamRoleMenuService.remove(new LambdaQueryWrapper<CeamRoleMenu>()
                    .eq(CeamRoleMenu::getRoleId, roleDTO.getId()));
            ceamRoleMenuService.saveBatch(rolesMenusList);
        }
    }
}

六、企业级视频教程

1、SpringBoot理论与实战

该项目企业级由0到1搭建讲解

2、Uniapp微信小程序实战

基于uniapp+Vue3+TypeScript,由0到1搭建实战,学会了这个也基本理解Vue3管理端的项目了。

3、Shell脚本部署SpringCloud实战

Linux系统使用Shell脚本部署SpringCloud实战,包括Nginx代理部署以及Docker容器化部署

无论你是打算走进软件行业,或者在即将离开学校踏入社会而必经答辩鬼门关,这对于你都可以起到不可或缺的作用。

七、获取源码

 大家点赞收藏关注评论啦 、关注下方公众号获取联系方式

免费下载商业使用需授权:点击这里下载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_57756904/article/details/129078515

智能推荐

SBEC016智能电池管理方案-程序员宅基地

文章浏览阅读1.3k次。SBEC016智能电池管理方案功能说明1、 SBEC016方案控制芯片采用Atmel AVR系列芯片,低功耗,工作稳定 2、 支持19V/4.5A DC输入3、 输出电压包含12V/6A 、5.1V/0.5A(5V standby )、5.1V/6.5A4、 支持双电池,选用电池符合智能电池规格(SBS V1.1)5、 支持2S1P~4S2P电池,通过修改EC参数实现,更换电池串并数无需修改硬件6、 系统关机及无DC输出时,EC可以进行休眠模式,达到最省电待机状态7、 Windows或lin_电池管理方案

oracle12c不能进入到http://localhost:1158/em的解决办法_oracle12 访问http-程序员宅基地

文章浏览阅读2.8k次。oracle12c的em经过精简,比11g小 很多,登陆方式也发生了变化,原来的http://localhost:1158/em或者https://localhost:1158/em登陆总是会遇到问题,解决方法需要使用到XDB,需要设置一下端口。先连接上Copyright (c) 1982, 2014, Oracle. All rights reserved.请输入用户名_oracle12 访问http

HikariPool-1 - Connection is not available, request timed out after,springboot如何设置连接池大小-程序员宅基地

文章浏览阅读2.6k次。问题描述项目压测的时候一直报错HikariPool-1 - Connection is not available, request timed out after解决方案在yml中配置如下参数hikari: connection-timeout: 60000 idle-timeout: 60000 login-timeout: 5 max-lifetime: 60000 maximum-pool-size: 400 mi

java怎么调用其他包里的类_java怎么调用另一个包中的类-程序员宅基地

文章浏览阅读5.2k次。比如现在有以下两个包:现在想在Boss类里面实现对Employee的调用,怎么做呢?(视频教程推荐:java视频)Employee.java:package payroll2;public class Employee {public void move(){System.out.print("this is employee");}}如果想实现对包的调用,可使用import关键字,然后再用调用类..._java调用其他包的静态类

Linux相关知识-程序员宅基地

文章浏览阅读76次。运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行运行级别 1:单用户工作状态,root权限,用于系统维护,找回丢失root密码,禁止远程登陆运行级别 2:多用户状态没有网络服务(没有NFS)运行级别 3:多用户状态有网络服务(有NFS),登陆后进入控制台命令行模式运行级别 4:系统未使用保留给用户运行级别 5:图形界面运行级别 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动常用运行级别是3和5,工作中一般用3,也可以指定默认运行级别。_linux相关

使用S32DS集成S32K的MCAL_s32ds教程-程序员宅基地

文章浏览阅读4.7k次,点赞9次,收藏67次。一、软件准备前往恩智浦官网下载MCAL软件包、EB Tresos 、以及S32DS IDE:以下软件均有NXP免费提供,但需注册账号获取S32DS IDE下载EB Tresos以及MCAL下载S32DS版本为:S32 Design Studio 3.2其中EB Tresos版本为:24.0MCAL版本为:S32K14X_MCAL4_2_RTM_1_0_0​NXP MCAL软件包后缀说明:HF为补丁版本 RTMC为发布版本软件安装请参考:NXP_AUT.._s32ds教程

随便推点

Beyond Compare“授权密钥已被吊销”的解决办法_bc密钥吊销-程序员宅基地

文章浏览阅读1.3k次。如果打开Beyond Compare如图:删除C:\Users\<计算机名>\AppData\Roaming\Scooter Software\Beyond Compare 4路径下的所有文件然后重新打开就可以了_bc密钥吊销

【GIS开发】Leaflet入门学习(Javascript库)_leaflet.js教程-程序员宅基地

文章浏览阅读7.3k次,点赞38次,收藏162次。文章目录1、简介2、快速入门3、功能3.1 标记( Markers)3.2 矢量图层( Vector Layers)3.3 事件处理( Event Handling)后记JavaScript library for mobile-friendly interactive maps1、简介https://github.com/Leaflet/Leaflethttps://leafletjs.com/SlavaUkraini/index.htmlLeaflet.js是一个开源库,使用它我们可以部_leaflet.js教程

黑马点评项目问题总结-程序员宅基地

文章浏览阅读2.8k次,点赞6次,收藏36次。点评项目面试版_黑马点评

mysql更改数据库所有者_SQL Server中修改数据库所有者的2种方法-程序员宅基地

文章浏览阅读1.1k次。在MS SQL SERVER中,我们有时候会碰到下面这种数据库,所有者是登录数据库的用户,如下图,但我们却没有办法直接在数据库管理工具中直接修改数据库所有者。这样会给我们后继的一些操作带来不便,至少对MitchellChu我来说是非常不便的,因为我后继想对登录用户的权限做些限制,因此需要寻求数据库所有者的修改办法。修改数据库所有者的方法有两种:一种老方法,一种新方法 ——当然,都是在SQL语句中操..._更改相应数据库的所有者

CTF学习经验分享(Web方向)_ctf web题 local access hacker-程序员宅基地

文章浏览阅读5.3k次,点赞9次,收藏85次。本人Web安全初学者,记录分享一下学习历程,推荐评价仅代表个人观点,不足之处欢迎各位表哥指正……CTF基础知识:分类: 基础知识 | CTFHubEnjoy your's CTFhttps://writeup.ctfhub.com/categories/Skill/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/CTFHub这里讲得很全面了……题目类型、比赛模式都有学习视频: 1. i春秋渗透测试工程师就业班-基础篇vm和L..._ctf web题 local access hacker

[译]使用BeautifulSoup和Python从网页中提取文本-程序员宅基地

文章浏览阅读1k次。如果您要花时间浏览网页,您可能遇到的一项任务就是从HTML中删除可见的文本内容。如果您使用的是Python,我们可以使用BeautifulSoup来完成此任务。设置提取首先,我们需要获取一些HTML。我将使用Troy Hunt最近关于“Collection#1”Data Breach的博客文章。以下是您下载HTML的方法:import requestsurl = 'https..._beautifusoup提取汉字