项目文档
项目演示
项目演示地址:
视频地址
项目介绍
本项目是基于SpringBoot与uniApp框架构建的新能源充电桩预约小程序。它采用前后端分离的设计模式,前端部分包括用户界面和管理界面。用户界面通过微信小程序(uniApp开发)实现,而管理界面则利用Web页面(Vue开发)。该项目代码清晰且遵循良好的编程规范,附带详细的注释,方便理解和学习。此外,项目具备一个完整的新能源充电桩预约系统应有的所有功能。
项目功能分为两个主要角色:普通用户和管理员。普通用户可以执行诸如登录注册、管理个人信息、查看运营商信息、电站信息、充电桩信息、预约充电桩、报修充电桩、管理个人预约记录、启动充电、停止充电、查看个人订单详情、支付订单、查阅公告信息、提交及查看报修记录、查看警告信息、留言及查看留言等操作。管理员则能够查看所有的数据统计、管理用户资料、运营商资料、电站资料、充电桩资料、预约资料、订单资料、报修资料、警告资料、留言资料以及公告资料等。
应用技术栈包括:SpringBoot、uniApp、Vue3、MySQL、MyBatis、Redis、ElementUI-Plus、uni-ui、Vite、TypeScript。
运行环境要求:IntelliJ IDEA 2019.3.5、MySQL 5.7(项目压缩包内提供)、Redis 5.0.5(项目压缩包内提供)、JDK 1.8、Maven 3.6.3(项目压缩包内提供)、Node 16.20.2(项目压缩包内提供)、微信开发者工具(项目压缩包内提供)、Visual Studio Code(项目压缩包内提供)。
运行截图
主要代码
1. 预约充电桩代码
/**
* 保存预约信息
* @param appointDTO
* @return
*/
@Override
public ResponseDTO<Boolean> saveAppoint(AppointDTO appointDTO) {
// 执行表单验证
CodeMsg validation = ValidateEntityUtil.validate(appointDTO);
if (!validation.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validation);
}
Appoint appointment = CopyUtil.copy(appointDTO, Appoint.class);
Charge chargingStation = chargeMapper.selectByPrimaryKey(appointment.getChargeId());
if (ChargeStateEnum.REPAIR.getCode().equals(chargingStation.getState())) {
return ResponseDTO.errorByMsg(CodeMsg.CHARGE_REPAIR_ERROR);
}
User user = userMapper.selectByPrimaryKey(appointment.getUserId());
if (user == null) {
return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
}
if (CommonUtil.isEmpty(appointment.getId())) {
// 新增操作
if (user.getRate() < 80) {
return ResponseDTO.errorByMsg(CodeMsg.RATE_NOT_ENOUGH);
}
appointment.setId(UuidUtil.getShortUuid());
appointment.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);
}
否则,执行修改操作,再次检查预约日期是否存在重复:
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, "保存成功!");
查询订单代码
此方法用于获取订单列表数据,根据传入的条件筛选订单信息:
/**
* 获取订单列表数据
* @param orderDTO
* @return
*/
@Override
public ResponseDTO<List<OrderDTO>> getAllOrder(OrderDTO orderDTO) {
OrderExample orderExample = new OrderExample();
OrderExample.Criteria criteria = orderExample.createCriteria();
if (!CommonUtil.isEmpty(orderDTO.getUserId())) {
criteria.andUserIdEqualTo(orderDTO.getUserId());
}
if (!CommonUtil.isEmpty(orderDTO.getChargeName())) {
criteria.andChargeNameLike("%" + orderDTO.getChargeName() + "%");
}
if (orderDTO.getState() != null && orderDTO.getState() != 0) {
criteria.andStateEqualTo(orderDTO.getState());
}
orderExample.setOrderByClause("create_time desc");
List<Order> orderList = orderMapper.selectByExample(orderExample);
List<OrderDTO> orderDTOList = CopyUtil.copyList(orderList, OrderDTO.class);
for (OrderDTO order : orderDTOList) {
User user = userMapper.selectByPrimaryKey(order.getUserId());
order.setUserDTO(CopyUtil.copy(Optional.ofNullable(user).orElse(new User()), UserDTO.class));
}
return ResponseDTO.success(orderDTOList);
}
支付订单代码
该方法负责修改订单的状态,确保提供的订单ID有效且用户存在:
/**
* 修改订单状态
* @param orderDTO
* @return
*/
@Override
public 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());
// 更新用户信誉分,最大不超过100分
user.setRate(Math.min(user.getRate() + 5, 100));
// 设置评分信息
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);


雷达卡


京公网安备 11010802022788号







