방문 조리 시스템의 Go 언어 개발: 사용자 소비 기록 기능을 구현하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-11-01 17:05:18
원래의
1004명이 탐색했습니다.

방문 조리 시스템의 Go 언어 개발: 사용자 소비 기록 기능을 구현하는 방법은 무엇입니까?

방문 조리 시스템의 Go 언어 개발: 사용자 소비 기록 기능을 구현하는 방법은 무엇입니까?

생활 수준이 향상됨에 따라 음식에 대한 사람들의 수요도 점점 높아지고 있습니다. 스스로 요리를 하려는 사람들이 점점 많아지고 있지만 바쁜 일이나 게으름으로 인해 요리를 하지 못하는 사람들도 많습니다. 그래서 방문 요리 서비스가 탄생했습니다.

요즘 방문 요리 서비스는 주로 온라인 플랫폼을 통해 예약과 주문을 통해 이루어집니다. 고객은 플랫폼을 통해 필요한 요리와 수량을 선택하고 해당 비용을 지불한 후 Door to Door 서비스를 기다릴 수 있습니다. 이러한 서비스 중 특히 사용자의 소비 기록 기능이 중요합니다. 서비스 제공업체의 경우 소비 기록을 통해 계정을 보다 효율적으로 관리할 수 있으므로 사용자의 경우 소비 기록을 통해 최근 소비 상황을 확인하여 소비 능력을 더 잘 예측할 수 있습니다.

그렇다면, 방문 조리 시스템의 사용자 소비 기록 기능은 어떻게 구현할까요? 아래를 살펴보겠습니다.

1. 데이터 테이블 디자인

소비 기록 기능 구현을 생각하기 전에 먼저 해당 데이터 테이블을 디자인해야 합니다. 이 경우 메뉴 테이블, 주문 테이블, 주문 내역 테이블, 소비 기록 테이블을 디자인해야 합니다.

  • 메뉴 테이블은 다음과 같이 디자인되었습니다.
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. 코드 구현

데이터 테이블 디자인을 완료한 후 Go 언어를 사용하여 해당 비즈니스 로직을 구현해야 합니다. 해당 코드는 다음과 같습니다.

  • 구조 정의:
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. 요약

위는 간단한 문입니다. -도어 쿠킹 시스템, Go 언어를 사용하여 사용자 소비 기록 기능을 구현하는 방법의 예입니다. 이번 사례를 통해 SQL 쿼리, 일괄 쿼리, 쿼리 결과 순회, 데이터 삽입 등의 방법을 배울 수 있습니다.

일반적으로 Go 언어는 단순성, 효율성, 안전성이라는 장점을 갖고 있어 대다수 개발자에게 사랑받고 있습니다. 이 사례를 읽으시면 Go 언어에 대한 더 깊은 이해도 하실 수 있을 거라 믿습니다. 또한, 사용자 소비 기록 기능을 구현하실 때에도 도움이 되셨으면 좋겠습니다.

위 내용은 방문 조리 시스템의 Go 언어 개발: 사용자 소비 기록 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!