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.
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='消费记录表';
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"` }
// 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 }
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!