Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna?

Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna?

WBOY
WBOYasal
2023-11-01 17:05:18979semak imbas

Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna?

Go pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna?

Dengan peningkatan taraf hidup, permintaan orang ramai terhadap makanan juga semakin tinggi. Semakin ramai orang mula mencuba memasak sendiri, tetapi ramai yang tidak dapat melakukannya kerana sibuk bekerja atau malas. Oleh itu, perkhidmatan memasak dari pintu ke pintu wujud.

Kini, perkhidmatan memasak dari rumah ke rumah secara amnya dibuat melalui platform dalam talian untuk membuat tempahan dan tempahan. Pelanggan memilih hidangan dan kuantiti yang mereka perlukan melalui platform, dan selepas membayar yuran yang sepadan, mereka boleh menunggu perkhidmatan dari pintu ke pintu. Di antara perkhidmatan ini, fungsi rekod penggunaan pengguna amat penting. Bagi penyedia perkhidmatan, rekod penggunaan boleh membantu mereka mengurus akaun mereka dengan lebih baik, dengan itu meningkatkan kecekapan operasi bagi pengguna, rekod penggunaan boleh menyemak situasi penggunaan mereka baru-baru ini untuk menganggarkan keupayaan penggunaan mereka dengan lebih baik.

Jadi, bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna sistem memasak dari pintu ke pintu? Mari lihat di bawah.

1. Reka bentuk jadual data

Sebelum memikirkan tentang pelaksanaan fungsi rekod penggunaan, kita perlu mereka bentuk jadual data yang sepadan terlebih dahulu. Dalam kes ini, kita perlu mereka bentuk jadual menu, jadual pesanan, jadual butiran pesanan dan jadual rekod penggunaan.

  • Jadual menu direka seperti berikut:
CREATE TABLE IF NOT EXISTS `dishes` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '菜品 ID',
    `name` VARCHAR(50) NOT NULL COMMENT '菜名',
    `image` VARCHAR(100) NOT NULL COMMENT '图片地址',
    `category_id` INT(10) UNSIGNED NOT NULL COMMENT '分类 ID',
    `price` FLOAT(10,2) UNSIGNED NOT NULL COMMENT '价格',
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='菜品表';
  • Jadual pesanan direka seperti berikut:
  • # 🎜🎜#
    CREATE TABLE IF NOT EXISTS `orders` (
        `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单 ID',
        `user_id` INT(10) UNSIGNED NOT NULL COMMENT '用户 ID',
        `total_price` FLOAT(10,2) UNSIGNED NOT NULL COMMENT '订单总价',
        `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '订单状态,0:未支付,1:已支付,2:已完成,3:已取消',
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单表';
    #🎜 🎜#
Jadual butiran pesanan direka seperti berikut:
  • CREATE TABLE IF NOT EXISTS `order_items` (
        `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单详情 ID',
        `order_id` INT(10) UNSIGNED NOT NULL COMMENT '订单 ID',
        `dish_id` INT(10) UNSIGNED NOT NULL COMMENT '菜品 ID',
        `quantity` SMALLINT(5) UNSIGNED NOT NULL COMMENT '数量',
        `price` FLOAT(10,2) UNSIGNED NOT NULL COMMENT '单价',
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单详情表';
Jadual rekod penggunaan direka seperti berikut: #🎜 #
    CREATE TABLE IF NOT EXISTS `consumption_records` (
        `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '消费记录 ID',
        `user_id` INT(10) UNSIGNED NOT NULL COMMENT '用户 ID',
        `order_id` INT(10) UNSIGNED NOT NULL COMMENT '订单 ID',
        `money` FLOAT(10,2) UNSIGNED NOT NULL COMMENT '消费金额',
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消费记录表';
  • #🎜 🎜#2. Kod pelaksanaan

Selepas melengkapkan reka bentuk jadual data, kita perlu menggunakan bahasa Go untuk melaksanakan yang sepadan logik perniagaan. Berikut ialah kod yang sepadan:

Tentukan struktur:

type ConsumptionRecord struct {
    ID        uint32    `db:"id" json:"id"`
    UserID    uint32    `db:"user_id" json:"user_id"`
    OrderID   uint32    `db:"order_id" json:"order_id"`
    Money     float32   `db:"money" json:"money"`
    CreatedAt time.Time `db:"created_at" json:"created_at"`
    UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}

type OrderDetail struct {
    ID         uint32    `db:"id" json:"id"`
    OrderID    uint32    `db:"order_id" json:"order_id"`
    DishID     uint32    `db:"dish_id" json:"dish_id"`
    Quantity   uint16    `db:"quantity" json:"quantity"`
    Price      float32   `db:"price" json:"price"`
    CreatedAt  time.Time `db:"created_at" json:"created_at"`
    UpdatedAt  time.Time `db:"updated_at" json:"updated_at"`
    Dish       *Dish     `db:"-" json:"dish"`
}

type Order struct {
    ID         uint32         `db:"id" json:"id"`
    UserID     uint32         `db:"user_id" json:"user_id"`
    TotalPrice float32        `db:"total_price" json:"total_price"`
    Status     OrderStatus    `db:"status" json:"status"`
    CreatedAt  time.Time      `db:"created_at" json:"created_at"`
    UpdatedAt  time.Time      `db:"updated_at" json:"updated_at"`
    Items      []*OrderDetail `db:"-" json:"items"`
}
  • Pertanyaan butiran pesanan: #🎜🎜🎜##🎜 #
    // GetOrderDetailsByOrderIDs 根据订单 ID 列表查询订单详情
    func GetOrderDetailsByOrderIDs(DB *sql.DB, orderIDs []uint32) ([]*OrderDetail, error) {
        details := make([]*OrderDetail, 0)
    
        if len(orderIDs) == 0 {
            return details, nil
        }
    
        // 拼接查询 SQL
        var placeHolders strings.Builder
        var args []interface{}
        for i, id := range orderIDs {
            if i != 0 {
                placeHolders.WriteString(", ")
            }
            placeHolders.WriteString("?")
            args = append(args, id)
        }
    
        query := fmt.Sprintf(`
            SELECT
                id, order_id, dish_id, quantity, price, created_at, updated_at
            FROM
                order_items
            WHERE
                order_id IN (%s)
        `, placeHolders.String())
    
        rows, err := DB.Query(query, args...)
        if err != nil {
            return nil, err
        }
        defer rows.Close()
    
        // 遍历查询结果,并填充菜品信息到订单详情结构体
        for rows.Next() {
            detail := &OrderDetail{}
            err := rows.Scan(
                &detail.ID, &detail.OrderID, &detail.DishID, &detail.Quantity,
                &detail.Price, &detail.CreatedAt, &detail.UpdatedAt)
            if err != nil {
                return nil, err
            }
    
            dish, err := GetDishByID(DB, detail.DishID)
            if err != nil {
                return nil, err
            }
            detail.Dish = dish
    
            details = append(details, detail)
        }
    
        return details, nil
    }
Tambah rekod penggunaan:
  • // AddConsumptionRecord 添加消费记录
    func AddConsumptionRecord(
        DB *sql.DB,
        userID uint32,
        orderID uint32,
        money float32) error {
    
        insertQuery := `
            INSERT INTO consumption_records (user_id, order_id, money)
            VALUES (?, ?, ?)
        `
        _, err := DB.Exec(insertQuery, userID, orderID, money)
        if err != nil {
            return err
        }
    
        return nil
    }
3. Ringkasan
    #🎜🎜 di atas ialah a##🎜 mudah Contoh cara menggunakan bahasa Go untuk melaksanakan fungsi rakaman penggunaan pengguna dalam sistem memasak dari pintu ke pintu. Melalui kes ini, kita boleh belajar cara menyambung pertanyaan SQL, pertanyaan kelompok, merentasi hasil pertanyaan dan memasukkan data.
  • Secara keseluruhannya, bahasa Go mempunyai kelebihan kesederhanaan, kecekapan dan keselamatan serta disukai oleh majoriti pembangun. Saya percaya bahawa dengan membaca kes ini, anda juga boleh mempunyai pemahaman yang lebih mendalam tentang bahasa Go. Saya juga berharap ia akan membantu anda apabila melaksanakan fungsi rekod penggunaan pengguna.

Atas ialah kandungan terperinci Pergi pembangunan bahasa sistem memasak dari pintu ke pintu: Bagaimana untuk melaksanakan fungsi rakaman penggunaan pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn