楼主: 武张灵
30 0

SpringBoot+uniApp新能源充电桩预约小程序系统 附带详细运行指导视频 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-10-20
最后登录
2018-10-20

楼主
武张灵 发表于 2025-11-20 07:00:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

项目文档

  1. 项目演示
  2. 项目介绍
  3. 运行截图
  4. 主要代码

项目演示

项目演示地址:
视频地址

项目介绍

本项目是基于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);
    
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Spring Pring boot RING 小程序

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-25 03:54