表面普通却能拿优秀:演唱会抢票系统毕设SpringBoot框架应用精髓

52 阅读5分钟

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

基于SpringCloud的分布式演唱会抢票系统介绍

基于SpringBoot的分布式演唱会抢票系统是一个采用前后端分离架构的综合性Web应用系统,该系统运用Java开发语言结合SpringBoot框架作为后端核心技术栈,通过Spring+SpringMVC+Mybatis的整合方案实现业务逻辑处理和数据持久化操作,前端采用Vue.js框架配合ElementUI组件库构建用户交互界面,并辅以HTML技术确保页面展示效果,数据存储方面选用MySQL关系型数据库,整体采用B/S浏览器/服务器架构模式,开发环境基于IntelliJ IDEA进行编码调试。系统功能模块设计完善,包含系统首页作为用户入口门户,个人中心模块支持用户信息管理和个性化设置,用户管理模块实现用户注册登录及权限控制,演唱会类型管理模块对不同类型演出进行分类管理,演唱会票务管理模块处理票务信息发布和库存管理,系统管理模块负责整体系统参数配置,订单管理模块作为核心业务功能涵盖完整的订单生命周期管理,细分为已完成订单、已支付订单、未支付订单、已退款订单、已取消订单等多种状态处理,通过这些功能模块的有机结合,系统能够完整模拟真实演唱会票务销售场景,为用户提供从浏览演出信息、选择座位、下单支付到订单管理的一站式服务体验,同时为管理员提供票务发布、订单监控、用户管理等后台管理功能,整个系统设计注重用户体验和业务流程的完整性,是一个技术栈成熟、功能完备的毕业设计项目。

基于SpringCloud的分布式演唱会抢票系统演示视频

演示视频

基于SpringCloud的分布式演唱会抢票系统演示图片

登陆界面.png

订单管理.png

系统首页.png

演唱会类型管理.png

演唱会票务管理.png

用户管理.png

基于SpringCloud的分布式演唱会抢票系统代码展示

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@RestController
@RequestMapping("/api")
public class ConcertTicketController {
   @Autowired
   private TicketService ticketService;
   @Autowired
   private OrderService orderService;
   @Autowired
   private UserService userService;
   
   private SparkSession spark = SparkSession.builder()
           .appName("ConcertTicketAnalysis")
           .master("local[*]")
           .getOrCreate();

   @PostMapping("/ticket/purchase")
   public Map<String, Object> purchaseTicket(@RequestParam Long userId, @RequestParam Long ticketId, @RequestParam Integer quantity) {
       Map<String, Object> result = new HashMap<>();
       synchronized (this) {
           Ticket ticket = ticketService.findById(ticketId);
           if (ticket == null) {
               result.put("success", false);
               result.put("message", "演唱会票务信息不存在");
               return result;
           }
           if (ticket.getAvailableQuantity() < quantity) {
               result.put("success", false);
               result.put("message", "票量不足,当前可购买数量:" + ticket.getAvailableQuantity());
               return result;
           }
           User user = userService.findById(userId);
           if (user == null || user.getStatus() != 1) {
               result.put("success", false);
               result.put("message", "用户状态异常,无法购票");
               return result;
           }
           BigDecimal totalAmount = ticket.getPrice().multiply(new BigDecimal(quantity));
           if (user.getBalance().compareTo(totalAmount) < 0) {
               result.put("success", false);
               result.put("message", "账户余额不足,请先充值");
               return result;
           }
           ticket.setAvailableQuantity(ticket.getAvailableQuantity() - quantity);
           ticket.setSoldQuantity(ticket.getSoldQuantity() + quantity);
           ticketService.updateTicket(ticket);
           Order order = new Order();
           order.setUserId(userId);
           order.setTicketId(ticketId);
           order.setQuantity(quantity);
           order.setTotalAmount(totalAmount);
           order.setOrderStatus("UNPAID");
           order.setCreateTime(LocalDateTime.now());
           order.setOrderNo("ORDER" + System.currentTimeMillis() + userId);
           orderService.createOrder(order);
           result.put("success", true);
           result.put("message", "抢票成功,请尽快支付");
           result.put("orderId", order.getId());
           result.put("orderNo", order.getOrderNo());
           result.put("totalAmount", totalAmount);
       }
       return result;
   }

   @PostMapping("/order/pay")
   public Map<String, Object> payOrder(@RequestParam Long orderId, @RequestParam String paymentMethod) {
       Map<String, Object> result = new HashMap<>();
       Order order = orderService.findById(orderId);
       if (order == null) {
           result.put("success", false);
           result.put("message", "订单不存在");
           return result;
       }
       if (!"UNPAID".equals(order.getOrderStatus())) {
           result.put("success", false);
           result.put("message", "订单状态异常,无法支付");
           return result;
       }
       if (order.getCreateTime().plusMinutes(30).isBefore(LocalDateTime.now())) {
           order.setOrderStatus("CANCELLED");
           orderService.updateOrder(order);
           Ticket ticket = ticketService.findById(order.getTicketId());
           ticket.setAvailableQuantity(ticket.getAvailableQuantity() + order.getQuantity());
           ticket.setSoldQuantity(ticket.getSoldQuantity() - order.getQuantity());
           ticketService.updateTicket(ticket);
           result.put("success", false);
           result.put("message", "订单已超时自动取消");
           return result;
       }
       User user = userService.findById(order.getUserId());
       if (user.getBalance().compareTo(order.getTotalAmount()) < 0) {
           result.put("success", false);
           result.put("message", "账户余额不足,支付失败");
           return result;
       }
       user.setBalance(user.getBalance().subtract(order.getTotalAmount()));
       userService.updateUser(user);
       order.setOrderStatus("PAID");
       order.setPayTime(LocalDateTime.now());
       order.setPaymentMethod(paymentMethod);
       orderService.updateOrder(order);
       PaymentRecord payment = new PaymentRecord();
       payment.setOrderId(orderId);
       payment.setUserId(order.getUserId());
       payment.setAmount(order.getTotalAmount());
       payment.setPaymentMethod(paymentMethod);
       payment.setPaymentTime(LocalDateTime.now());
       payment.setPaymentStatus("SUCCESS");
       paymentService.createPayment(payment);
       result.put("success", true);
       result.put("message", "支付成功");
       result.put("paymentId", payment.getId());
       return result;
   }

   @GetMapping("/order/manage")
   public Map<String, Object> manageOrders(@RequestParam String status, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
       Map<String, Object> result = new HashMap<>();
       List<Order> orders = new ArrayList<>();
       Dataset<Row> orderData = spark.read()
               .format("jdbc")
               .option("url", "jdbc:mysql://localhost:3306/concert_ticket")
               .option("dbtable", "orders")
               .option("user", "root")
               .option("password", "password")
               .load();
       Dataset<Row> filteredOrders = orderData.filter(orderData.col("order_status").equalTo(status));
       Long totalCount = filteredOrders.count();
       int offset = (page - 1) * size;
       List<Row> orderRows = filteredOrders.limit(size).offset(offset).collectAsList();
       for (Row row : orderRows) {
           Order order = new Order();
           order.setId(row.getLong("id"));
           order.setUserId(row.getLong("user_id"));
           order.setTicketId(row.getLong("ticket_id"));
           order.setQuantity(row.getInt("quantity"));
           order.setTotalAmount(new BigDecimal(row.getString("total_amount")));
           order.setOrderStatus(row.getString("order_status"));
           order.setOrderNo(row.getString("order_no"));
           order.setCreateTime(row.getTimestamp("create_time").toLocalDateTime());
           if (row.getTimestamp("pay_time") != null) {
               order.setPayTime(row.getTimestamp("pay_time").toLocalDateTime());
           }
           order.setPaymentMethod(row.getString("payment_method"));
           User user = userService.findById(order.getUserId());
           Ticket ticket = ticketService.findById(order.getTicketId());
           order.setUserName(user.getUsername());
           order.setTicketName(ticket.getConcertName());
           orders.add(order);
       }
       Map<String, Long> statusCount = new HashMap<>();
       Dataset<Row> statusStats = orderData.groupBy("order_status").count();
       List<Row> statusRows = statusStats.collectAsList();
       for (Row row : statusRows) {
           statusCount.put(row.getString("order_status"), row.getLong("count"));
       }
       result.put("success", true);
       result.put("orders", orders);
       result.put("totalCount", totalCount);
       result.put("currentPage", page);
       result.put("pageSize", size);
       result.put("statusCount", statusCount);
       return result;
   }
}

基于SpringCloud的分布式演唱会抢票系统文档展示

文档.png

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目