Heim >Backend-Entwicklung >Golang >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.
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='菜品表';
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='订单表';
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='订单详情表';
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:
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"` }
// 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 }
// 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!