一、个人简介
- 💖💖作者:计算机编程果茶熊
- 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 计算机毕业设计选题
- 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
- 开发语言:Java
- 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)
- 前端:Vue
- 数据库:MySQL
- 系统架构:B/S
- 开发工具:IDEA
《演出购票系统》是一套基于Spring Boot架构的综合性票务管理平台,采用Java作为核心开发语言,结合Vue前端框架和MySQL数据库构建而成。该系统通过B/S架构设计,为演出行业提供了完整的票务销售解决方案。系统核心功能涵盖用户账户管理、演出分类体系、票务信息维护、订单流程处理等关键业务模块,同时集成了在线论坛交流平台,支持用户互动讨论和信息分享。系统还配备了完善的管理后台,包括论坛分类设置、举报记录处理、系统参数配置等管理功能,确保平台运营的规范性和安全性。通过Spring+SpringMVC+Mybatis的技术组合,系统实现了良好的模块解耦和数据持久化管理,为演出票务业务提供了稳定可靠的技术支撑。
三、视频解说
四、部分功能展示
五、部分代码展示
import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class PerformanceTicketService {
@Autowired
private TicketMapper ticketMapper;
@Autowired
private OrderMapper orderMapper;
@Autowired
private UserMapper userMapper;
private SparkSession spark = SparkSession.builder().appName("TicketAnalysis").master("local").getOrCreate();
@Transactional
public Result purchaseTicket(Long userId, Long ticketId, Integer quantity) {
User user = userMapper.selectById(userId);
if (user == null || user.getStatus() != 1) {
return Result.fail("用户状态异常,无法购票");
}
Ticket ticket = ticketMapper.selectById(ticketId);
if (ticket == null || ticket.getStatus() != 1) {
return Result.fail("票务信息不存在或已下架");
}
if (ticket.getRemainCount() < quantity) {
return Result.fail("余票不足,当前剩余:" + ticket.getRemainCount() + "张");
}
BigDecimal totalAmount = ticket.getPrice().multiply(new BigDecimal(quantity));
if (user.getBalance().compareTo(totalAmount) < 0) {
return Result.fail("账户余额不足,请先充值");
}
ticket.setRemainCount(ticket.getRemainCount() - quantity);
ticket.setSoldCount(ticket.getSoldCount() + quantity);
ticketMapper.updateById(ticket);
user.setBalance(user.getBalance().subtract(totalAmount));
userMapper.updateById(user);
Order order = new Order();
order.setUserId(userId);
order.setTicketId(ticketId);
order.setQuantity(quantity);
order.setTotalAmount(totalAmount);
order.setOrderNo(generateOrderNo());
order.setStatus(1);
order.setCreateTime(new Date());
orderMapper.insert(order);
return Result.success("购票成功,订单号:" + order.getOrderNo());
}
@Transactional
public Result manageTicketInfo(TicketDto ticketDto) {
if (ticketDto.getId() == null) {
Ticket newTicket = new Ticket();
newTicket.setPerformanceName(ticketDto.getPerformanceName());
newTicket.setVenue(ticketDto.getVenue());
newTicket.setPerformanceTime(ticketDto.getPerformanceTime());
newTicket.setPrice(ticketDto.getPrice());
newTicket.setTotalCount(ticketDto.getTotalCount());
newTicket.setRemainCount(ticketDto.getTotalCount());
newTicket.setSoldCount(0);
newTicket.setCategoryId(ticketDto.getCategoryId());
newTicket.setDescription(ticketDto.getDescription());
newTicket.setStatus(1);
newTicket.setCreateTime(new Date());
ticketMapper.insert(newTicket);
return Result.success("票务信息添加成功");
} else {
Ticket existTicket = ticketMapper.selectById(ticketDto.getId());
if (existTicket == null) {
return Result.fail("票务信息不存在");
}
existTicket.setPerformanceName(ticketDto.getPerformanceName());
existTicket.setVenue(ticketDto.getVenue());
existTicket.setPerformanceTime(ticketDto.getPerformanceTime());
existTicket.setPrice(ticketDto.getPrice());
if (ticketDto.getTotalCount() > existTicket.getTotalCount()) {
int addCount = ticketDto.getTotalCount() - existTicket.getTotalCount();
existTicket.setRemainCount(existTicket.getRemainCount() + addCount);
}
existTicket.setTotalCount(ticketDto.getTotalCount());
existTicket.setCategoryId(ticketDto.getCategoryId());
existTicket.setDescription(ticketDto.getDescription());
existTicket.setUpdateTime(new Date());
ticketMapper.updateById(existTicket);
return Result.success("票务信息更新成功");
}
}
public Result processOrderManagement(Long orderId, Integer operation) {
Order order = orderMapper.selectById(orderId);
if (order == null) {
return Result.fail("订单不存在");
}
User user = userMapper.selectById(order.getUserId());
Ticket ticket = ticketMapper.selectById(order.getTicketId());
switch (operation) {
case 1:
if (order.getStatus() != 1) {
return Result.fail("订单状态异常,无法确认");
}
order.setStatus(2);
order.setConfirmTime(new Date());
orderMapper.updateById(order);
return Result.success("订单确认成功");
case 2:
if (order.getStatus() != 1 && order.getStatus() != 2) {
return Result.fail("订单状态异常,无法退票");
}
ticket.setRemainCount(ticket.getRemainCount() + order.getQuantity());
ticket.setSoldCount(ticket.getSoldCount() - order.getQuantity());
ticketMapper.updateById(ticket);
user.setBalance(user.getBalance().add(order.getTotalAmount()));
userMapper.updateById(user);
order.setStatus(4);
order.setRefundTime(new Date());
orderMapper.updateById(order);
return Result.success("退票成功,金额已退回账户");
case 3:
if (order.getStatus() != 2) {
return Result.fail("订单状态异常,无法完成");
}
order.setStatus(3);
order.setCompleteTime(new Date());
orderMapper.updateById(order);
return Result.success("订单完成");
default:
return Result.fail("操作类型无效");
}
}
private String generateOrderNo() {
return "ORDER" + System.currentTimeMillis() + (int)(Math.random() * 1000);
}
}
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊