ホームページ > バックエンド開発 > Golang > 交渉ロジックの Golang 実装

交渉ロジックの Golang 実装

WBOY
リリース: 2023-05-10 09:45:06
オリジナル
470 人が閲覧しました

交渉活動は、電子商取引やソーシャル プラットフォームで人気のプロモーション形式であり、参加者は一定期間内に値切り交渉を行うことで、商品の優先価格を得ることができます。ただし、価格交渉ロジックの実装は単純ではなく、参加者間の関係や価格管理などの問題を考慮する必要があります。

この記事では、Golang を使用して価格交渉ロジックを実装する方法を紹介します。

1. 交渉の基本ロジック

交渉の基本ロジックは次のように要約できます:

  1. 交渉アクティビティを作成します: アクティビティの開始者は、商品とセット 元の価格と交渉期間を設定し、他の人を交渉に参加させます。
  2. 交渉に参加する: イベント参加者は交渉を開始して商品の価格を下げます。交渉範囲はシステムによってランダムに決定されますが、最小値を下回ることはありません。
  3. 交渉の共有: 参加者は、交渉リンクを共有することで、より多くの人を交渉に参加するよう招待し、自身の交渉の機会を増やすことができます。
  4. 交渉の成功: 製品の価格が一定のレベルまで下がると、交渉は成功したとみなされ、ユーザーは対応する割引を受けることができます。

2. Golang による交渉ロジックの実装

Golang を使用して交渉ロジックを実装する方法を紹介します。まず、いくつかのデータ構造を定義する必要があります:

  1. 製品情報

type Product struct {

ID          int     // 商品ID
Name        string  // 商品名称
OriginalPrice   float32 // 商品原价
CurrentPrice    float32 // 当前价格
MinPriceDelta   float32 // 最小砍价幅度
MinPrice    float32 // 最低价格
Participants    map[int]*Participant // 参与者列表
ChoppedLogs map[int]float32 // 砍价日志
StartTime   time.Time // 开始时间
EndTime     time.Time // 结束时间
ログイン後にコピー

}

その中で、 Participants は参加者のリストを表し、ChoppedLogs はユーザーが行った各価格交渉の範囲を記録し、StartTime と EndTime は価格交渉期間を表します。

  1. 参加者情報

type Participant struct {

ID      int     // 参与者ID
Name    string  // 参与者名称
AmountChopped   float32 // 已砍金额
JoinedTime  time.Time // 加入时间
InviterID   int     // 邀请者ID
ProductID   int     // 商品ID
Invited     []*Participant // 被邀请人列表
ログイン後にコピー

}

参加者情報の AmountChopped は、参加者が金額であることを示します。現在の製品から切り離されたもので、InviterID には招待者の ID が記録され、Invited には招待者のリストが記録されます。

  1. 交渉ログ

type ChoppedLog struct {

ParticipantID   int     // 砍价者ID
ChoppedAmount   float32 // 砍价金额
ProductID   int     // 商品ID
CreatedTime time.Time // 砍价时间
ログイン後にコピー

}

交渉ログには、交渉者の ID、交渉が記録されます。金額、商品ID、交渉時間。

上記の定義により、次の交渉ロジックを作成できます。

  1. 交渉アクティビティの作成

func NewProduct(name string,originalPrice,minPriceDelta) 、minPrice float32、startTime、endTime time.Time) *Product {

return &Product{
    Name:           name,
    OriginalPrice:  originalPrice,
    CurrentPrice:   originalPrice,
    MinPriceDelta:  minPriceDelta,
    MinPrice:       minPrice,
    Participants:   make(map[int]*Participant),
    ChoppedLogs:    make(map[int]float32),
    StartTime:      startTime,
    EndTime:        endTime,
}
ログイン後にコピー

}

  1. 価格交渉に参加する

func (p 製品) 参加(参加者 参加者) エラー {

if participant.JoinedTime.Before(p.StartTime) || participant.JoinedTime.After(p.EndTime) {
    return fmt.Errorf("参与时间错误")
}
if p.CurrentPrice <= p.MinPrice {
    return fmt.Errorf("价格已经到达最低价,不能再砍价了。")
}
id := len(p.Participants) + 1
participant.ID = id
participant.ProductID = p.ID
p.Participants[id] = participant
return nil
ログイン後にコピー

}

  1. 共有バーゲン

func (p *製品) 招待(参加者ID , InvitationID int) エラー {

if _, ok := p.Participants[participantID]; !ok {
    return fmt.Errorf("该用户未参加本次砍价活动")
}
if _, ok := p.Participants[invitedID]; !ok {
    return fmt.Errorf("该用户未在砍价活动中")
}
if participantID == invitedID {
    return fmt.Errorf("不允许自己邀请自己")
}
p.Participants[participantID].Invited = append(p.Participants[participantID].Invited, p.Participants[invitedID])
p.Participants[invitedID].InviterID = participantID
return nil
ログイン後にコピー

}

  1. 交渉成功

func (p *Product) Chop(participantID int) エラー {

if _, ok := p.Participants[participantID]; !ok {
    return fmt.Errorf("该用户未参加本次砍价活动")
}
if p.CurrentPrice <= p.MinPrice {
    return fmt.Errorf("提前到达底价,不能再砍价了。")
}
num := rand.Intn(10) // 随机砍价幅度
chopAmount := p.MinPriceDelta + float32(num)
if chopAmount >= p.CurrentPrice-p.MinPrice {
    chopAmount = p.CurrentPrice - p.MinPrice
}
p.CurrentPrice -= chopAmount
p.Participants[participantID].AmountChopped += chopAmount
p.ChoppedLogs[participantID] = chopAmount
if p.CurrentPrice <= p.MinPrice {
    p.CurrentPrice = p.MinPrice
}
return nil
ログイン後にコピー

}

上記のコードを通じて、交渉アクティビティの作成、交渉への参加、交渉の共有、交渉の成功などの基本的な操作を含む、基本的な交渉ロジックを実装できます。ただし、これらのコードは実際のアプリケーションのニーズを満たすには程遠いです。次の問題をまだ考慮する必要があるためです。

    価格が妥当な範囲内で変動するように交渉範囲を制御するにはどうすればよいでしょうか?
  1. より多くのユーザーが交渉活動に参加できるように、交渉ルールと招待メカニズムを設計するにはどうすればよいでしょうか?
  2. 特定のビジネス ニーズに応じて、上記の問題にも対処する必要があります。
3. 概要

Golang を介して交渉ロジックを実装すると、交渉活動の実装原則をより深く理解できるようになります。しかし、実際の開発では、同時処理や不正注文の防止など、他の課題も考慮する必要があります。これらの問題にも、特定のビジネス シナリオに対応する必要があります。継続的な練習により、交渉活動を実行するスキルを徐々に習得し、電子商取引やソーシャルプラットフォームの発展にさらに貢献できると信じています。

以上が交渉ロジックの Golang 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート