偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Spring AI + Qwen2.5 實(shí)現(xiàn)智能搶票助手:搶票系統(tǒng)核心業(yè)務(wù)規(guī)則 + 數(shù)據(jù)庫(kù)設(shè)計(jì)全解析!

開(kāi)發(fā) 架構(gòu)
在一個(gè)真實(shí)的“搶票”業(yè)務(wù)系統(tǒng)中,模型的智能并不能替代業(yè)務(wù)底層邏輯。搶票助手的 AI 決策,需要基于完整的數(shù)據(jù)結(jié)構(gòu)和業(yè)務(wù)規(guī)則才能發(fā)揮作用。

在一個(gè)真實(shí)的“搶票”業(yè)務(wù)系統(tǒng)中,模型的智能并不能替代業(yè)務(wù)底層邏輯。搶票助手的 AI 決策,需要基于完整的數(shù)據(jù)結(jié)構(gòu)和業(yè)務(wù)規(guī)則才能發(fā)揮作用。因此,我們本篇將聚焦以下幾個(gè)核心目標(biāo):

  • 設(shè)計(jì)車(chē)票、用戶(hù)、訂單等基本數(shù)據(jù)模型
  • 搭建數(shù)據(jù)庫(kù)(H2 或 MySQL)
  • 實(shí)現(xiàn)“搶票排隊(duì) + 余票判斷 + 下單”的業(yè)務(wù)規(guī)則
  • 提供查詢(xún)車(chē)票與發(fā)起搶票等 API
  • 完成第一個(gè)小練習(xí):車(chē)票查詢(xún)接口(無(wú) AI)

基本數(shù)據(jù)模型設(shè)計(jì)

使用 Spring Data JPA 進(jìn)行數(shù)據(jù)建模。

車(chē)票實(shí)體 Ticket

package com.icoderoad.ticket.model;


import jakarta.persistence.*;
import lombok.*;


@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Ticket {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private String fromCity;
    private String toCity;
    private String trainNumber;
    private String departureTime;


    private Integer totalSeats;
    private Integer remainingSeats;
}

用戶(hù)實(shí)體 User

package com.icoderoad.ticket.model;


import jakarta.persistence.*;
import lombok.*;


@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private String username;
    private String phone;
}

訂單實(shí)體 Order

package com.icoderoad.ticket.model;


import jakarta.persistence.*;
import lombok.*;


@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "`order`")
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private Long userId;
    private Long ticketId;


    private String status; // SUCCESS, FAILED, WAITING
}

數(shù)據(jù)庫(kù)初始化(使用 H2)

application.yml 配置(支持切換 H2/MySQL)

spring:
  datasource:
    url: jdbc:h2:mem:ticketdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  h2:
    console:
      enabled: true
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

模擬數(shù)據(jù)初始化

@Component
@RequiredArgsConstructor
public class DataInitRunner implements CommandLineRunner {


    private final TicketRepository ticketRepo;


    @Override
    public void run(String... args) {
        ticketRepo.save(Ticket.builder()
            .fromCity("上海")
            .toCity("杭州")
            .trainNumber("G123")
            .departureTime("2025-06-01 09:00")
            .totalSeats(100)
            .remainingSeats(20)
            .build());
    }
}

核心搶票業(yè)務(wù)邏輯設(shè)計(jì)

搶票請(qǐng)求結(jié)構(gòu)

@Data
public class GrabRequest {
    private Long userId;
    private Long ticketId;
}

搶票服務(wù) TicketService

@Service
@RequiredArgsConstructor
public class TicketService {


    private final TicketRepository ticketRepo;
    private final OrderRepository orderRepo;


    @Transactional
    public String grabTicket(Long userId, Long ticketId) {
        Optional<Ticket> opt = ticketRepo.findById(ticketId);
        if (opt.isEmpty()) return "車(chē)票不存在";


        Ticket ticket = opt.get();
        if (ticket.getRemainingSeats() <= 0) {
            return "搶票失敗:無(wú)余票";
        }


        // 模擬排隊(duì) & 搶票邏輯
        ticket.setRemainingSeats(ticket.getRemainingSeats() - 1);
        ticketRepo.save(ticket);


        orderRepo.save(Order.builder()
            .userId(userId)
            .ticketId(ticketId)
            .status("SUCCESS")
            .build());


        return "搶票成功";
    }
}

接口設(shè)計(jì)與實(shí)現(xiàn)

TicketController

@RestController
@RequestMapping("/api/ticket")
@RequiredArgsConstructor
public class TicketController {


    private final TicketRepository ticketRepo;
    private final TicketService ticketService;


    // 查詢(xún)所有車(chē)票
    @GetMapping("/list")
    public List<Ticket> listTickets() {
        return ticketRepo.findAll();
    }


    // 發(fā)起搶票請(qǐng)求
    @PostMapping("/grab")
    public String grabTicket(@RequestBody GrabRequest request) {
        return ticketService.grabTicket(request.getUserId(), request.getTicketId());
    }
}

小練習(xí):車(chē)票查詢(xún)接口(無(wú) AI)

你可以通過(guò)如下接口查看數(shù)據(jù)庫(kù)中車(chē)票信息:

請(qǐng)求:

GET http://localhost:8080/api/ticket/list

響應(yīng)(JSON 示例):

[
  {
    "id": 1,
    "fromCity": "上海",
    "toCity": "杭州",
    "trainNumber": "G123",
    "departureTime": "2025-06-01 09:00",
    "totalSeats": 100,
    "remainingSeats": 19
  }
]

結(jié)語(yǔ)

通過(guò)本篇文章,我們完成了一個(gè)“可運(yùn)行的車(chē)票系統(tǒng)原型”,包含了數(shù)據(jù)建模、數(shù)據(jù)庫(kù)初始化、搶票核心業(yè)務(wù)邏輯、接口設(shè)計(jì)等關(guān)鍵內(nèi)容。

這些功能雖然尚未接入 AI,但已經(jīng)為智能搶票助手的接入打下堅(jiān)實(shí)基礎(chǔ)。下一步,我們將使用 Spring AI + 通義 Qwen2.5 接入大模型,實(shí)現(xiàn)基于用戶(hù)指令、行程偏好等的自動(dòng)搶票、智能推薦和對(duì)話(huà)式交互。

責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(guān)推薦

2021-07-26 07:47:37

前端自動(dòng)搶票

2019-01-09 09:35:41

搶票Python軟件

2013-01-17 10:49:42

2013-01-22 09:31:33

2018-01-10 15:23:09

2019-09-08 23:00:19

GitHub代碼開(kāi)發(fā)者

2014-12-22 11:07:18

12306

2018-01-26 10:31:11

搶票軟件公平

2013-01-21 16:02:29

Chrome搶票

2018-02-07 17:12:00

2012-09-19 14:31:44

獵豹瀏覽器搶票

2016-03-18 11:13:15

IT168

2019-01-16 16:00:33

2013-04-26 11:46:30

WWDC

2019-12-25 10:29:59

GitHub代碼開(kāi)發(fā)者

2013-01-14 17:02:10

獵豹瀏覽器

2013-01-22 17:10:42

瀏覽器技術(shù)解析

2018-01-12 11:17:26

搜狗瀏覽器搶票春運(yùn)

2015-03-18 10:41:34

圖片驗(yàn)證驗(yàn)證碼12306

2019-01-16 14:16:05

架構(gòu)技術(shù)棧微信半月刊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)