SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录

  • 一、项目演示
  • 二、项目介绍
  • 三、运行截图
  • 四、主要代码
    • 1. 分页获取预约数据代码
    • 2.保存预约信息代码
    • 3.修改订单状态代码

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+Vue框架开发的充电桩管理系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个充电桩管理系统该有的所有功能。

项目功能:此项目分为两个角色:普通用户管理员普通用户有登录注册、浏览个人数据统计信息、管理个人信息、浏览运营商信息、浏览电站信息、浏览充电桩信息、预约充电桩、报修充电桩、管理个人预约信息、开始充电、结束充电、查看个人订单信息、支付订单、查看个人报修信息、查看个人告警信息、查看留言信息等等功能。管理员有查看全部数据统计信息、管理所有用户信息、管理所有运营商信息、管理所有电站信息、管理所有充电桩信息、管理所有预约信息、管理所有订单信息、管理所有报修信息、管理所有告警信息、管理所有留言信息等等功能。

应用技术:SpringBoot + Vue3.0 + MySQL + MyBatis + Redis + ElementUI-Plus + Vite

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node14.16.1(项目压缩包中自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1. 分页获取预约数据代码

	/*** 分页获取预约数据* @param pageDTO* @return*/@Overridepublic ResponseDTO<PageDTO<AppointDTO>> getAppointList(PageDTO<AppointDTO> pageDTO) {AppointExample appointExample = new AppointExample();// 不知道当前页多少,默认为第一页if(pageDTO.getPage() == null){pageDTO.setPage(1);}// 不知道每页多少条记录,默认为每页5条记录if(pageDTO.getSize() == null){pageDTO.setSize(5);}AppointExample.Criteria c1 = appointExample.createCriteria();if(pageDTO.getParam() != null) {AppointDTO appointDTO = pageDTO.getParam();if(!CommonUtil.isEmpty(appointDTO.getUserId())) {c1.andUserIdEqualTo(appointDTO.getUserId());} else {UserExample userExample = new UserExample();userExample.createCriteria().andUsernameLike("%" + appointDTO.getUsername() + "%");List<String> userIdList = userMapper.selectByExample(userExample).stream().map(User::getId).collect(Collectors.toList());if(userIdList.size() == 0) {pageDTO.setTotal(0L);pageDTO.setList(new ArrayList<>());return ResponseDTO.success(pageDTO);}c1.andUserIdIn(userIdList);}if(!(CommonUtil.isEmpty(appointDTO.getChargeId())) && !"0".equals(appointDTO.getChargeId())) {c1.andChargeIdEqualTo(appointDTO.getChargeId());}}appointExample.setOrderByClause("create_time desc");PageHelper.startPage(pageDTO.getPage(), pageDTO.getSize());// 分页查出预约数据List<Appoint> appointList = appointMapper.selectByExample(appointExample);PageInfo<Appoint> pageInfo = new PageInfo<>(appointList);// 获取数据的总数pageDTO.setTotal(pageInfo.getTotal());// 将domain类型数据  转成 DTO类型数据List<AppointDTO> appointDTOList = CopyUtil.copyList(appointList, AppointDTO.class);for(AppointDTO appointDTO : appointDTOList) {User user = userMapper.selectByPrimaryKey(appointDTO.getUserId());appointDTO.setUserDTO(CopyUtil.copy(user, UserDTO.class));// 当前时间超过结束时间,且状态为待使用的预约,状态自动改为已取消// 当前时间超过结束时间,且状态为充电中的预约,状态自动改为已完成String[] splitTime = appointDTO.getTime().split("-");Date endDate = CommonUtil.getFormatterDate(CommonUtil.getFormatterDate(appointDTO.getDay(), "yyyy-MM-dd") + " " + splitTime[1], "yyyy-MM-dd HH:mm");Appoint appoint = CopyUtil.copy(appointDTO, Appoint.class);if(new Date().getTime() > endDate.getTime()) {if(AppointStateEnum.WAIT.getCode().equals(appointDTO.getState())) {appoint.setState(AppointStateEnum.CANCEL.getCode());appointDTO.setState(AppointStateEnum.CANCEL.getCode());} else if(AppointStateEnum.USE.getCode().equals(appointDTO.getState())) {appoint.setState(AppointStateEnum.OVER.getCode());appoint.setEndTime(endDate);appointDTO.setEndTime(endDate);appointDTO.setState(AppointStateEnum.OVER.getCode());Charge charge = chargeMapper.selectByPrimaryKey(appointDTO.getChargeId());BigDecimal totalPrice = charge.getPrice().multiply(new BigDecimal(DateUtil.between(appointDTO.getStartTime(), endDate, DateUnit.MINUTE)));Order order = new Order();order.setId(UuidUtil.getShortUuid());order.setCreateTime(new Date());order.setUserId(appointDTO.getUserId());order.setChargeId(appointDTO.getChargeId());order.setChargeName(appointDTO.getChargeName());order.setTotalPrice(totalPrice);if(orderMapper.insertSelective(order) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ORDER_ADD_ERROR);}}appointMapper.updateByPrimaryKeySelective(appoint);}}pageDTO.setList(appointDTOList);return ResponseDTO.success(pageDTO);}

2.保存预约信息代码

	/*** 保存预约信息* @param appointDTO* @return*/@Overridepublic ResponseDTO<Boolean> saveAppoint(AppointDTO appointDTO) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(appointDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}Appoint appoint = CopyUtil.copy(appointDTO, Appoint.class);Charge charge = chargeMapper.selectByPrimaryKey(appoint.getChargeId());if(ChargeStateEnum.REPAIR.getCode().equals(charge.getState())) {return ResponseDTO.errorByMsg(CodeMsg.CHARGE_REPAIR_ERROR);}User user = userMapper.selectByPrimaryKey(appoint.getUserId());if(user == null) {return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);}if(CommonUtil.isEmpty(appoint.getId())) {// 添加操作if(user.getRate() < 80) {return ResponseDTO.errorByMsg(CodeMsg.RATE_NOT_ENOUGH);}appoint.setId(UuidUtil.getShortUuid());appoint.setCreateTime(new Date());// 判断预约日期时间段是否重复if(isDayExist(appoint, "")){return ResponseDTO.errorByMsg(CodeMsg.APPOINT_DAY_EXIST);}if(appointMapper.insertSelective(appoint) == 0) {return ResponseDTO.errorByMsg(CodeMsg.APPOINT_ADD_ERROR);}} else {// 修改操作// 判断预约日期时间段是否重复if(isDayExist(appoint, appoint.getId())){return ResponseDTO.errorByMsg(CodeMsg.APPOINT_DAY_EXIST);}if(appointMapper.updateByPrimaryKeySelective(appoint) == 0) {return ResponseDTO.errorByMsg(CodeMsg.APPOINT_EDIT_ERROR);}}return ResponseDTO.successByMsg(true, "保存成功!");}

3.修改订单状态代码

	/*** 修改订单状态* @param orderDTO* @return*/@Overridepublic ResponseDTO<Boolean> editOrderState(OrderDTO orderDTO) {if(CommonUtil.isEmpty(orderDTO.getId())) {return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);}Order orderDB = orderMapper.selectByPrimaryKey(orderDTO.getId());Order order = CopyUtil.copy(orderDTO, Order.class);User user = userMapper.selectByPrimaryKey(orderDB.getUserId());if(user == null) {return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);}if(!OrderStateEnum.PAYED.getCode().equals(orderDB.getState()) && OrderStateEnum.PAYED.getCode().equals(order.getState())) {Rate rate = new Rate();rate.setId(UuidUtil.getShortUuid());if(user.getRate() + 5 >= 100) {user.setRate(100);} else {user.setRate(user.getRate() + 5);}rate.setNowScore(user.getRate());rate.setScore(5);rate.setType(RateTypeEnum.ADD.getCode());rate.setUserId(orderDB.getUserId());rate.setCreateTime(new Date());rate.setContent("成功支付,奖励信誉分5分!");if(rateMapper.insertSelective(rate) == 0) {return ResponseDTO.errorByMsg(CodeMsg.RATE_ADD_ERROR);}if(userMapper.updateByPrimaryKeySelective(user) == 0) {return ResponseDTO.errorByMsg(CodeMsg.USER_EDIT_ERROR);}}if(orderMapper.updateByPrimaryKeySelective(order) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ORDER_EDIT_ERROR);}return ResponseDTO.success(true);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全的使命:守护数字世界的稳定和信任

在数字化时代&#xff0c;网络安全的角色不仅仅是技术系统的守护者&#xff0c;更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分&#xff1a;信息资产的…

怎么给wordpress网站底部页脚添加备案号和链接?

以前“WordPress后台 >> 常规”最底部是有一个ICP备案号的&#xff0c;我们只需要填写备案号并保存更改即可让WordPress自带主题底部显示ICP备案号&#xff0c;但是现在新版本的WordPress已经没有了这个ICP备案号选项&#xff0c;而且也无法直接添加公安联网备案号&#…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址&#xff1a;https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配&#xff0c;文章内容可以异地网页更新&#xff0c;可以听后台背景音乐&#xff0c;很好的满足我的痛点需求&#xff0c;博客部署在云端服务器访问响应较快…

单调栈笔记

单调栈 1.每日温度2.下一个更大元素 I3.下一个更大的元素4.接雨水5.柱状图中最大的矩形 单调栈正如其名字&#xff0c;用一个栈&#xff08;能够实现栈性质的数据结构就行&#xff09;来存储元素&#xff0c;存储在栈中的元素保持单调性&#xff08;单调递增或者是单调递减&…

信息检索与数据挖掘 | (十)线性回归与逻辑回归

文章目录 &#x1f4da;线性回归算法流程&#x1f4da;Bias and variance&#x1f4da;过拟合&欠拟合&#x1f4da;逻辑回归算法流程 &#x1f4da;线性回归算法流程 ybwx 使用loss function L来评估函数的好坏 从而我们要选择使L最小的模型参数w,b 使用梯度下降的方法…

JAVA 学习 面试(六)数据类型与方法

数据类型 基本数据类型 为什么float3.4报错 3.4 默认是浮点double类型的&#xff0c;如果赋值给float是向下转型&#xff0c;会出现精度缺失&#xff0c;&#xff0c;需要强制转换 Switch支持的数据类型&#xff1f; byte、short、int、char 、 enum 、 String 基本类型与包…

trino-435: trino接入TIDB数据源

文章目录 一、TIDB介绍二、TIDB源接入流程三、遇到的错误1、数据源注册:2、查询表数据一、TIDB介绍 二、TIDB源接入流程 三、遇到的错误 1、数据源注册: http://localhost:8080/v1/catalog/register?name=tidb_test {"connector.name":"tidb",&quo…

SpringBoot整合QQ邮箱发送验证码

一、QQ开启SMTP 打开QQ邮箱&#xff0c;点击设置&#xff0c;进入账号&#xff0c;往下滑后&#xff0c;看见服务状态后&#xff0c;点击管理服务 进入管理服务后&#xff0c;打开服务&#xff0c;然后获取授权码 二 、导入依赖 <!-- 邮箱--><dependency>&…

php低版本(7.4)配置过程中遇到的问题及基本解决手段

目前php不支持较低版本的安装&#xff0c;如果安装低版本必须借助第三方库shivammathur //将第三方仓库加入brewbrew tap shivammathur/php //安装PHPbrew install shivammathur/php/php7.4 可能出现的问题 像这样突然中止然后报错&#xff0c;一般是网络问题&#xff0c;或…

Random Sprays Retinex 传统的图像增强算法RSR

文章目录 前言1、Random Sprays Retinex 概况2、Random Sprays Retinex 具体实现2.1、喷雾的生成2.2、径向密度函数的确定2.3、像素的选择2.4、亮度的计算2.5、参数的调整 3、Random Sprays Retinex 算法效果的表现4、Random Sprays Retinex 现存的问题 前言 Random Spray Reti…

C++面试宝典第24题:袋鼠过河

题目 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子。每隔一米就有一个桩子,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳得更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米;如果为0,就会陷进去无法…

代码中遇到的问题2

目录 记录: 好处&#xff1a; 问题一&#xff1a; 解答: 问题二: 解答: 常见类型问题: 记录: string connStr ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 在代码中写上这段代码&#xff0c;将连接数据库的代码语句放到&#xff…

关于在微信小程序中使用taro + react-hook后销毁函数无法执行的问题

问题&#xff1a; 在 taro中使用navigageTo() 跳转路由后hook中useEffect 的return函数没有执行 没有执行return函数 框架版本&#xff1a; tarojs: 3.6 react: 18.0 原因&#xff1a; 使用navigateTo() 跳转路由的话并不会销毁页面和组件&#xff0c;会加入一…

性能优化-OpenCL运行时API介绍

「发表于知乎专栏《移动端算法优化》」 本文首先给出 OpenCL 运行时 API 的整体编程流程图&#xff0c;然后针对每一步介绍使用的运行时 API&#xff0c;讲解 API 参数&#xff0c;并给出编程运行实例。总结运行时 API 使用的注意事项。最后展示基于 OpenCL 的图像转置代码。在…

L1-093 猜帽子游戏(Java)

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子&#xff0c;有的是黑色的&#xff0c;有的是黄色的。每个人可以看到别人头上的帽子&#xff0c;但是看不到自己的。游戏开始后&#xff0c;每个人可以猜自己头上的帽子是什么颜色&#xff0c;或者可以弃权不猜。如果没有…

17β-Estradiol high sensitivity ELISA kit

高灵敏ELISA试剂盒&#xff0c;可检测到低至14 pg/ml的17β-雌二醇 雌二醇(estradiol) 是由卵巢内卵泡的颗粒细胞分泌的类固醇激素&#xff0c;是主要的雌激素&#xff0c;负责调节女性特征、附属性器官的成熟和月经-排卵周期&#xff0c;促进乳腺导管系统的产生&#xff0c;有…

JanusGraph图数据库的应用以及知识图谱技术介绍

目录 JanusGraph介绍 JanusGraph 的主要优势 JanusGraph的应用&#xff1a; JanusGraph 的行业应用&#xff1a; 架构概览 分布式技术应用 横向扩展能力 程序与janus的交互 Janus与图数据库相关概念 结构化存储 图结构存储 实体关系存储 知识存储技术 JanusGraph介…

软考案例分析题万金油汇总

目录 二、范围管理存在的问题 三、变更管理可能存在的问题 四、招标问题 五、风险管理可能存在的问题 六、采购管理中存在的问题 七、配置管理可能出现的问题 八、配置管理混乱和配置管理相关案例回答 九、项目收尾可能存在的问题 十、人力资源管理存在的问题 十一、…

【MySQL】体系结构

文章目录 体系结构图存储引擎查询建表语句查看当前数据库可支持的存储引擎InnoDB逻辑存储结构架构内存结构磁盘结构体系结构图 体系结构说明 连接层 最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端…

【大数据精讲】全量同步与CDC增量同步方案对比

目录 背景 名词解释 问题与挑战 FlinkCDC DataX 工作原理 调度流程 五、DataX 3.0六大核心优势 性能优化 背景 名词解释 CDC CDC又称变更数据捕获&#xff08;Change Data Capture&#xff09;&#xff0c;开启cdc的源表在插入INSERT、更新UPDATE和删除DELETE活动时…