【Java毕设】影院订票系统 SpringBoot+Vue框架 计算机毕业设计项目 Idea+Navicat+MySQL安装 附源码+文档+讲解

67 阅读3分钟

一、个人简介

💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

开发语言:Java 后端框架:Spring Boot(Spring+SpringMVC+Mybatis) 数据库:MySQL 系统架构:B/S 开发工具:IDEA

《影院订票系统》是一款基于Spring Boot框架开发的电影院票务管理平台,采用B/S架构设计,运用Java作为核心开发语言,结合Spring+SpringMVC+MyBatis技术栈构建稳定可靠的后端服务体系,使用MySQL数据库进行数据存储与管理。该系统整合了用户管理、电影类型管理、电影信息管理、充值记录管理、系统管理、订单管理以及个人中心管理等核心功能模块,为影院运营者提供全方位的票务管理解决方案,同时为观众用户提供便捷的在线购票服务体验。系统通过模块化设计实现各功能间的有效协调,确保票务流程的规范化管理,支持电影排片信息维护、座位预订、支付处理、订单跟踪等完整业务流程,有效提升影院运营效率和用户服务质量。

三、视频解说

影院订票系统

四、部分功能展示

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

五、部分代码展示


import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class CinemaBookingService {
    @Autowired
    private MovieMapper movieMapper;
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private SeatMapper seatMapper;
    
    private SparkSession spark = SparkSession.builder()
            .appName("CinemaBookingAnalysis")
            .master("local[*]")
            .getOrCreate();
    
    public Result processMovieBooking(BookingRequest request) {
        try {
            Movie movie = movieMapper.selectById(request.getMovieId());
            if (movie == null || movie.getStatus() != 1) {
                return Result.error("电影信息不存在或已下架");
            }
            List<Seat> selectedSeats = seatMapper.selectBatchIds(request.getSeatIds());
            for (Seat seat : selectedSeats) {
                if (seat.getStatus() != 0) {
                    return Result.error("座位" + seat.getSeatNo() + "已被占用");
                }
            }
            BigDecimal totalAmount = movie.getPrice().multiply(new BigDecimal(selectedSeats.size()));
            User user = userMapper.selectById(request.getUserId());
            if (user.getBalance().compareTo(totalAmount) < 0) {
                return Result.error("余额不足,请先充值");
            }
            Order order = new Order();
            order.setUserId(request.getUserId());
            order.setMovieId(request.getMovieId());
            order.setShowTime(request.getShowTime());
            order.setTotalAmount(totalAmount);
            order.setStatus(1);
            order.setCreateTime(new Date());
            orderMapper.insert(order);
            for (Seat seat : selectedSeats) {
                seat.setStatus(1);
                seat.setOrderId(order.getId());
                seatMapper.updateById(seat);
            }
            user.setBalance(user.getBalance().subtract(totalAmount));
            userMapper.updateById(user);
            Dataset<Row> bookingData = spark.read()
                    .format("jdbc")
                    .option("url", "jdbc:mysql://localhost:3306/cinema")
                    .option("dbtable", "tb_order")
                    .option("user", "root")
                    .option("password", "123456")
                    .load();
            bookingData.filter(bookingData.col("movie_id").equalTo(request.getMovieId()))
                      .groupBy("movie_id")
                      .count()
                      .show();
            return Result.success("订票成功", order);
        } catch (Exception e) {
            throw new RuntimeException("订票处理失败: " + e.getMessage());
        }
    }
    
    public Result processUserRecharge(RechargeRequest request) {
        try {
            User user = userMapper.selectById(request.getUserId());
            if (user == null || user.getStatus() != 1) {
                return Result.error("用户信息异常");
            }
            if (request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
                return Result.error("充值金额必须大于0");
            }
            if (request.getAmount().compareTo(new BigDecimal("10000")) > 0) {
                return Result.error("单次充值金额不能超过10000元");
            }
            RechargeRecord record = new RechargeRecord();
            record.setUserId(request.getUserId());
            record.setAmount(request.getAmount());
            record.setPaymentMethod(request.getPaymentMethod());
            record.setStatus(1);
            record.setCreateTime(new Date());
            rechargeMapper.insert(record);
            BigDecimal newBalance = user.getBalance().add(request.getAmount());
            user.setBalance(newBalance);
            user.setUpdateTime(new Date());
            userMapper.updateById(user);
            Dataset<Row> rechargeData = spark.read()
                    .format("jdbc")
                    .option("url", "jdbc:mysql://localhost:3306/cinema")
                    .option("dbtable", "tb_recharge_record")
                    .option("user", "root")
                    .option("password", "123456")
                    .load();
            rechargeData.filter(rechargeData.col("user_id").equalTo(request.getUserId()))
                       .agg(functions.sum("amount").alias("total_recharge"))
                       .show();
            UserBalanceLog balanceLog = new UserBalanceLog();
            balanceLog.setUserId(request.getUserId());
            balanceLog.setOperationType(1);
            balanceLog.setAmount(request.getAmount());
            balanceLog.setBalanceBefore(user.getBalance().subtract(request.getAmount()));
            balanceLog.setBalanceAfter(newBalance);
            balanceLog.setCreateTime(new Date());
            balanceLogMapper.insert(balanceLog);
            return Result.success("充值成功", newBalance);
        } catch (Exception e) {
            throw new RuntimeException("充值处理失败: " + e.getMessage());
        }
    }
    
    public Result processOrderManagement(OrderQueryRequest request) {
        try {
            QueryWrapper<Order> wrapper = new QueryWrapper<>();
            if (request.getUserId() != null) {
                wrapper.eq("user_id", request.getUserId());
            }
            if (request.getMovieId() != null) {
                wrapper.eq("movie_id", request.getMovieId());
            }
            if (request.getStatus() != null) {
                wrapper.eq("status", request.getStatus());
            }
            if (request.getStartDate() != null && request.getEndDate() != null) {
                wrapper.between("create_time", request.getStartDate(), request.getEndDate());
            }
            wrapper.orderByDesc("create_time");
            Page<Order> page = new Page<>(request.getPageNum(), request.getPageSize());
            IPage<Order> orderPage = orderMapper.selectPage(page, wrapper);
            List<OrderVO> orderVOList = new ArrayList<>();
            for (Order order : orderPage.getRecords()) {
                OrderVO vo = new OrderVO();
                BeanUtils.copyProperties(order, vo);
                Movie movie = movieMapper.selectById(order.getMovieId());
                vo.setMovieName(movie.getName());
                vo.setMoviePoster(movie.getPoster());
                User user = userMapper.selectById(order.getUserId());
                vo.setUserName(user.getNickname());
                List<Seat> seats = seatMapper.selectList(
                    new QueryWrapper<Seat>().eq("order_id", order.getId())
                );
                vo.setSeatList(seats.stream().map(Seat::getSeatNo).collect(Collectors.toList()));
                orderVOList.add(vo);
            }
            Dataset<Row> orderAnalysis = spark.read()
                    .format("jdbc")
                    .option("url", "jdbc:mysql://localhost:3306/cinema")
                    .option("dbtable", "tb_order")
                    .option("user", "root")
                    .option("password", "123456")
                    .load();
            orderAnalysis.groupBy("status")
                        .agg(functions.count("id").alias("count"),
                             functions.sum("total_amount").alias("total_revenue"))
                        .orderBy("status")
                        .show();
            PageResult result = new PageResult();
            result.setRecords(orderVOList);
            result.setTotal(orderPage.getTotal());
            result.setCurrent(orderPage.getCurrent());
            result.setSize(orderPage.getSize());
            return Result.success("查询成功", result);
        } catch (Exception e) {
            throw new RuntimeException("订单管理处理失败: " + e.getMessage());
        }
    }
}

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊