Heim >Backend-Entwicklung >Golang >Go-Sprachentwicklung des Tür-zu-Tür-Kochsystems: Wie implementiert man die Funktion zur Aufzeichnung des Benutzerverbrauchs?

Go-Sprachentwicklung des Tür-zu-Tür-Kochsystems: Wie implementiert man die Funktion zur Aufzeichnung des Benutzerverbrauchs?

WBOY
WBOYOriginal
2023-11-01 17:05:181027Durchsuche

Go-Sprachentwicklung des Tür-zu-Tür-Kochsystems: Wie implementiert man die Funktion zur Aufzeichnung des Benutzerverbrauchs?

Go-Sprachentwicklung eines Tür-zu-Tür-Kochsystems: Wie implementiert man die Funktion zur Aufzeichnung des Benutzerverbrauchs?

Mit der Verbesserung des Lebensstandards wird auch die Nachfrage der Menschen nach Nahrungsmitteln immer größer. Immer mehr Menschen fangen an, selbst zu kochen, doch vielen gelingt dies aufgrund von zu viel Arbeit oder Faulheit nicht. Daher entstanden Tür-zu-Tür-Kochdienste.

Heutzutage werden Kochdienste von Tür zu Tür in der Regel über Online-Plattformen durchgeführt, um Reservierungen und Bestellungen vorzunehmen. Kunden wählen über die Plattform die Gerichte und Mengen aus, die sie benötigen, und können nach Zahlung der entsprechenden Gebühr auf den Tür-zu-Tür-Service warten. Unter diesen Diensten ist die Funktion zur Aufzeichnung des Benutzerverbrauchs besonders wichtig. Für Dienstanbieter können Verbrauchsaufzeichnungen ihnen helfen, ihre Konten besser zu verwalten und so die betriebliche Effizienz zu verbessern; für Benutzer können Verbrauchsaufzeichnungen ihre aktuelle Verbrauchssituation überprüfen, um ihre Verbrauchsfähigkeit besser einzuschätzen.

Wie implementiert man also die Benutzerverbrauchsaufzeichnungsfunktion des Tür-zu-Tür-Kochsystems? Schauen wir uns unten um.

1. Entwerfen Sie die Datentabelle

Bevor wir über die Implementierung der Verbrauchsaufzeichnungsfunktion nachdenken, müssen wir zunächst die entsprechende Datentabelle entwerfen. In diesem Fall müssen wir die Menütabelle, die Bestelltabelle, die Bestelldetailtabelle und die Verbrauchsaufzeichnungstabelle entwerfen.

  • Die Menütabelle ist wie folgt gestaltet:
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='菜品表';
  • Die Bestelltabelle ist wie folgt gestaltet:
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='订单表';
  • Die Bestelldetailtabelle ist wie folgt gestaltet:
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='订单详情表';
  • Die Verbrauchsaufzeichnungstabelle ist wie folgt gestaltet folgt:
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. Implementieren Sie den Code

Nach Abschluss des Entwurfs der Datentabelle müssen wir die Go-Sprache verwenden, um die entsprechende Geschäftslogik zu implementieren. Das Folgende ist der entsprechende Code:

  • Struktur definieren:
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"`
}
  • Bestelldetails abfragen:
// 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
}
  • Verbrauchsdatensatz hinzufügen:
// 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. Zusammenfassung

Das Obige ist eine einfache Tür -zu -Türkochsystem, ein Beispiel für die Verwendung der Go-Sprache zur Implementierung der Benutzerverbrauchsaufzeichnungsfunktion. Durch diesen Fall können wir lernen, wie man SQL-Abfragen und Batch-Abfragen zusammenfügt, Abfrageergebnisse durchläuft und Daten einfügt.

Im Allgemeinen bietet die Go-Sprache die Vorteile von Einfachheit, Effizienz und Sicherheit und wird von der Mehrheit der Entwickler geliebt. Ich glaube, dass Sie durch das Lesen dieses Falles auch ein tieferes Verständnis der Go-Sprache erlangen können. Ich hoffe auch, dass es Ihnen bei der Implementierung der Benutzerverbrauchsaufzeichnungsfunktion hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonGo-Sprachentwicklung des Tür-zu-Tür-Kochsystems: Wie implementiert man die Funktion zur Aufzeichnung des Benutzerverbrauchs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn