交渉活動は、電子商取引やソーシャル プラットフォームで人気のプロモーション形式であり、参加者は一定期間内に値切り交渉を行うことで、商品の優先価格を得ることができます。ただし、価格交渉ロジックの実装は単純ではなく、参加者間の関係や価格管理などの問題を考慮する必要があります。
この記事では、Golang を使用して価格交渉ロジックを実装する方法を紹介します。
1. 交渉の基本ロジック
交渉の基本ロジックは次のように要約できます:
2. Golang による交渉ロジックの実装
Golang を使用して交渉ロジックを実装する方法を紹介します。まず、いくつかのデータ構造を定義する必要があります:
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 は価格交渉期間を表します。
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 には招待者のリストが記録されます。
type ChoppedLog struct {
ParticipantID int // 砍价者ID ChoppedAmount float32 // 砍价金额 ProductID int // 商品ID CreatedTime time.Time // 砍价时间
}
交渉ログには、交渉者の ID、交渉が記録されます。金額、商品ID、交渉時間。
上記の定義により、次の交渉ロジックを作成できます。
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, }
}
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
}
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
}
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
}
上記のコードを通じて、交渉アクティビティの作成、交渉への参加、交渉の共有、交渉の成功などの基本的な操作を含む、基本的な交渉ロジックを実装できます。ただし、これらのコードは実際のアプリケーションのニーズを満たすには程遠いです。次の問題をまだ考慮する必要があるためです。
以上が交渉ロジックの Golang 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。