博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
点击这里预览
抖音体验版
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
1
一、前言
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/11
架构模式:MVC/前后端分离
JDK版本:Java JDK8
开发工具:IDEA
数据库版本: mysql5.7/8
数据库可视化工具: SQL yog或Navicat for MySQL
服务器:SpringBoot自带 apache tomcat
主要技术:Java、SpringBoot、MyBatis-plus、MySQL、Html、vue3、elementui等
三、非功能性与可行性分析
2.5非功能性需求分析
非功能性需求:用户对软件质量属性、运行环境、资源约束、外部接口等方面的要求或期望,包括:
2.5.1性能需求:
用户在软件响应速度、结果精度、运行时资源消耗量等方面的要求。
2.5.2可行性需求:
用户在软件失效的频率、严重程度、易恢复性,以及故障可预测性等方面的要求。
2.5.3易用性需求:
用户在界面的易用性、美观性,以及对面向用户的文档和培训资料等方面的要求。
2.5.4安全性需求:
用户在身份证、授权控制、私密性等方面的要求。
2.5.5运行环境约束:
用户对软件系统运行环境的要求。
2.5.6外部接口:
用户对待开发软件系统与其它软件系统或设备之间的接口要求
2.6可行性分析
可行性分析是从不同的角度,对可能影响系统的各方面因素进行分析,确认系统在实际生活上是可行的。本系统只是单纯地从经济、法律、技术、操作可行性四个方面来分析说明。
2.6.1技术可行性
技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用Vue+Elementui开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性和持久性。后端技术使用SpringBoot、MyBatis,这些技术在许多公司已经被商用了,因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。
2.6.2经济可行性
项目放在阿里学生服务器或者本地虚拟机的linux环境,故可行。
2.6.3法律可行性
可行,自己写的项目,目的明确,没有违法违规。
2.6.4操作可行性
操作较为简单,而且当下信息科技发达,界面的设计也着实考虑到用户的体验,系统也是为用户而生。故操作是可行的,不存在难度大的操作。
四、功能截图
1、登录与首页
1.1、登录
1.2、首页
2、商城中心
2.1、门店管理
2.2、广告管理
这个在小程序的首页展示
2.3、我的服务
2.4、商品中心
1)商品分类
2)商品规格
3)商品管理
2.5、订单中心
1)工作台
2)订单管理
2.6、用户中心
1)用户管理
2)地址管理
2.7、优惠券管理
3、支付管理
4、快递管理
4.1、快递公司
4.2、快递鸟配置
5、消息管理
7、公众号管理
7.1、账号管理
8、系统管理
8.1、用户管理
8.2、角色管理
8.3、菜单管理
8.4、部门管理
8.5、岗位管理
8.6、字典管理
8.7、通知公告
uniapp小程序
1、首页
2、下单
选择规格
3、购物车
4、优惠券
5、去结算
6、添加地址
7、订单
五、实现代码
1、角色控制器
/**
* <p>
* 角色表 前端控制器
* </p>
*
* @author CeaM
* @since 2023-01-28
*/
@RestController
@AllArgsConstructor
@RequestMapping("/api/roles/v1")
public class CeamSysRoleController {
private final ICeamSysRoleService ceamSysRoleService;
private final ICeamSysUserService ceamSysUserService;
@GetMapping
public R<IPage<CeaMSysRoleVO>> getRoles(CeaMSysRoleDTO data) {
IPage<CeaMSysRoleVO> mapIPage = ceamSysRoleService.pageCeaMSysRoleVO(data);
return R.ok(mapIPage);
}
@GetMapping("all")
public R<Object> getAll() {
List<CeamSysRole> list = ceamSysRoleService.list();
return R.ok(list);
}
@GetMapping(value = "/level")
public R<Object> getLevel() {
return R.ok(Dict.create().set("level", getLevels(null)));
}
@PutMapping(value = "/menu")
public R<Object> updateMenu(@RequestBody CeaMSysRoleDTO roleDTO) {
CeamSysRole role = ceamSysRoleService.getById(roleDTO.getId());
getLevels(role.getLevel());
ceamSysRoleService.updateMenu(roleDTO, role);
return R.ok(HttpStatus.NO_CONTENT);
}
@PostMapping("/add")
public R<Object> add(@RequestBody CeaMSysRoleDTO data) {
boolean edit = ceamSysRoleService.add(data);
return R.ok(edit);
}
@PutMapping("/edit")
public R<Object> edit(@RequestBody CeaMSysRoleDTO data) {
boolean edit = ceamSysRoleService.edit(data);
return R.ok(edit);
}
@DeleteMapping("/del")
public R<Object> remove(@RequestBody Set<Long> ids) {
ceamSysRoleService.remove(ids);
return R.ok("成功");
}
/**
* 获取用户的角色级别
* @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);
}
}
}
六、获取源码
点赞、收藏、关注 、天下没有免费的午餐关注下方公众号获取联系方式👇🏻👇🏻