💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
基于SpringCloud的分布式演唱会抢票系统介绍
基于SpringBoot的分布式演唱会抢票系统是一个采用前后端分离架构的综合性Web应用系统,该系统运用Java开发语言结合SpringBoot框架作为后端核心技术栈,通过Spring+SpringMVC+Mybatis的整合方案实现业务逻辑处理和数据持久化操作,前端采用Vue.js框架配合ElementUI组件库构建用户交互界面,并辅以HTML技术确保页面展示效果,数据存储方面选用MySQL关系型数据库,整体采用B/S浏览器/服务器架构模式,开发环境基于IntelliJ IDEA进行编码调试。系统功能模块设计完善,包含系统首页作为用户入口门户,个人中心模块支持用户信息管理和个性化设置,用户管理模块实现用户注册登录及权限控制,演唱会类型管理模块对不同类型演出进行分类管理,演唱会票务管理模块处理票务信息发布和库存管理,系统管理模块负责整体系统参数配置,订单管理模块作为核心业务功能涵盖完整的订单生命周期管理,细分为已完成订单、已支付订单、未支付订单、已退款订单、已取消订单等多种状态处理,通过这些功能模块的有机结合,系统能够完整模拟真实演唱会票务销售场景,为用户提供从浏览演出信息、选择座位、下单支付到订单管理的一站式服务体验,同时为管理员提供票务发布、订单监控、用户管理等后台管理功能,整个系统设计注重用户体验和业务流程的完整性,是一个技术栈成熟、功能完备的毕业设计项目。
基于SpringCloud的分布式演唱会抢票系统演示视频
基于SpringCloud的分布式演唱会抢票系统演示图片
基于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的分布式演唱会抢票系统文档展示
💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目