214 lines
9.5 KiB
Go
214 lines
9.5 KiB
Go
package models
|
||
|
||
import (
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
const (
|
||
LotteryPrizeOrderStatusAll = 4 // 全部
|
||
)
|
||
|
||
// LotteryPrize 奖品信息表(抽奖)
|
||
type LotteryPrize struct {
|
||
Model
|
||
|
||
Name string `json:"name"` // 奖品名称
|
||
PrizeType int `json:"prize_type"` // 奖品类型:1-积分 2-优惠券 3-实物 0-谢谢参与
|
||
PrizeValue int `json:"prize_value"` // 奖品值(积分数或券ID等)
|
||
Level int `json:"level"` // 奖品等级,如1等奖、2等奖等
|
||
Weight int `json:"weight"` // 抽奖权重
|
||
Stock int `json:"stock"` // 剩余库存
|
||
Status int `json:"status"` // 奖品状态:1-启用 2-禁用
|
||
UnlockUserCount int `json:"unlock_user_count"` // 解锁条件:用户个人抽奖次数
|
||
UnlockTotalCount int `json:"unlock_total_count"` // 解锁条件:所有用户总抽奖次数
|
||
Images string `json:"images"` // 奖品图片
|
||
Probability string `json:"probability" gorm:"-"` // 中奖概率(例如 0.001%)
|
||
}
|
||
|
||
// LotteryRecord 抽奖记录
|
||
type LotteryRecord struct {
|
||
Model
|
||
|
||
Uid uint `json:"uid"` // 用户ID
|
||
PrizeId uint `json:"prize_id"` // 奖品ID
|
||
PrizeName string `json:"prize_name"` // 奖品名称
|
||
PrizeType int `json:"prize_type"` // 奖品类型
|
||
PrizeLevel int `json:"prize_level"` // 奖品等级
|
||
PrizeValue int `json:"prize_value"` // 奖品值(积分数或券ID等)
|
||
Status int `json:"status"` // 状态:0-待处理 1-已发放 2-处理中 3-失败
|
||
IsWin bool `json:"is_win"` // 是否中奖(false 表示“谢谢参与”等无奖项)
|
||
}
|
||
|
||
// LotteryPrizeOrder 抽奖奖品订单(包含用户收件信息、物流信息、发货状态)
|
||
type LotteryPrizeOrder struct {
|
||
Model
|
||
|
||
RecordId uint `json:"record_id"` // 抽奖记录ID
|
||
Uid uint `json:"uid"` // 用户ID
|
||
Tel string `json:"tel"` // 用户手机号
|
||
PrizeId uint `json:"prize_id"` // 奖品ID
|
||
PrizeName string `json:"prize_name"` // 奖品名称
|
||
|
||
// 用户提交的收货信息
|
||
ReceiverName string `json:"receiver_name"` // 收件人
|
||
ReceiverPhone string `json:"receiver_phone"` // 收件人手机号
|
||
ReceiverAddr string `json:"receiver_addr"` // 收件地址
|
||
|
||
// 发货信息
|
||
LogisticsCompany string `json:"logistics_company"` // 快递公司
|
||
LogisticsNumber string `json:"logistics_number"` // 快递单号
|
||
ShippedAt time.Time `json:"shipped_at"` // 发货时间
|
||
ReceivedAt time.Time `json:"received_at"` // 收货时间
|
||
|
||
Status int `json:"status"` // 发货状态:0-待发货 1-已发货 2-已收货 3-取消
|
||
}
|
||
|
||
type UpdateLotteryConfigRequest struct {
|
||
CostPerDraw uint `json:"cost_per_draw" binding:"required"`
|
||
DailyLimit uint `json:"daily_limit" binding:"required"`
|
||
LotteryEnabled bool `json:"lottery_enabled"`
|
||
}
|
||
|
||
type CreatePrizeRequest struct {
|
||
Name string `json:"name" binding:"required"` // 奖品名称
|
||
PrizeType int `json:"prize_type" binding:"required"` // 奖品类型:1-积分,2-优惠券,3-实物,0-谢谢参与
|
||
PrizeValue int `json:"prize_value"` // 奖品值:积分数或优惠券ID等
|
||
Level int `json:"level"` // 奖品等级:如1表示一等奖,2表示二等奖
|
||
Weight int `json:"weight" binding:"required"` // 抽奖权重:数值越大,概率越高
|
||
Stock int `json:"stock"` // 库存数量:表示奖品剩余可发放数量
|
||
Status int `json:"status"` // 奖品状态:1-启用,2-禁用
|
||
UnlockUserCount int `json:"unlock_user_count"` // 解锁条件:用户个人累计抽奖次数达到该值后解锁
|
||
UnlockTotalCount int `json:"unlock_total_count"` // 解锁条件:平台所有用户累计抽奖次数达到该值后解锁
|
||
Images string `json:"images"` // 奖品图片
|
||
}
|
||
|
||
type UpdatePrizeRequest struct {
|
||
ID uint `json:"id" binding:"required"` // 奖品ID
|
||
Name string `json:"name"` // 奖品名称
|
||
PrizeType int `json:"prize_type"` // 奖品类型:1-积分,2-优惠券,3-实物,0-谢谢参与
|
||
PrizeValue int `json:"prize_value"` // 奖品值:积分数或优惠券ID等
|
||
Level int `json:"level"` // 奖品等级:如1表示一等奖
|
||
Weight int `json:"weight"` // 抽奖权重:用于控制中奖概率
|
||
Stock int `json:"stock"` // 剩余库存
|
||
Status int `json:"status"` // 奖品状态:1-启用,2-禁用
|
||
UnlockUserCount int `json:"unlock_user_count"` // 用户抽奖次数达到该值后解锁该奖品
|
||
UnlockTotalCount int `json:"unlock_total_count"` // 全部用户总抽奖次数达到该值后解锁奖品
|
||
Images string `json:"images"` // 奖品图片
|
||
}
|
||
|
||
// CreatePrizeResp 创建成功响应
|
||
type CreatePrizeResp struct {
|
||
ID uint32 `json:"id"`
|
||
}
|
||
|
||
type DeletePrizeRequest struct {
|
||
ID uint `json:"id" binding:"required"` // 奖品ID
|
||
}
|
||
|
||
type PrizeListRequest struct {
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
Name string `json:"name"` // 奖品名称(模糊搜索)
|
||
Status int `json:"status"` // 奖品状态:1-启用,2-禁用(不传则全部)
|
||
Level int `json:"level"` // 奖品等级(如 1 表示一等奖)
|
||
}
|
||
|
||
type PrizeListResponse struct {
|
||
List []LotteryPrize `json:"list"` // 奖品列表
|
||
Total int64 `json:"total"` // 总数
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
}
|
||
|
||
type LotteryRecordListRequest struct {
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
Uid uint `json:"uid"` // 用户ID
|
||
Tel string `json:"tel"` // 手机号
|
||
StoreId uint64 `json:"store_id"` // 门店ID
|
||
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||
StartTime string `json:"start_time"` // 抽奖开始时间
|
||
EndTime string `json:"end_time"` // 抽奖结束时间
|
||
PrizeLevel int `json:"prize_level"` // 奖品等级
|
||
WinStatus int `json:"win_status"` // 新增字段:0=全部,1=已中奖,2=未中奖
|
||
}
|
||
|
||
type LotteryRecordWithUserInfo struct {
|
||
LotteryRecord
|
||
Tel string `json:"tel"`
|
||
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||
StoreId uint64 `json:"store_id"` // 门店id
|
||
StoreName string `json:"store_name"` // 门店名称
|
||
}
|
||
|
||
type LotteryRecordListResponse struct {
|
||
List []LotteryRecordWithUserInfo `json:"list"`
|
||
Total int64 `json:"total"`
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
}
|
||
|
||
type LotteryPrizeOrderListRequest struct {
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
Uid uint `json:"uid"` // 用户ID
|
||
Tel string `json:"tel"` // 手机号
|
||
StoreId uint64 `json:"store_id"` // 门店ID
|
||
MemberLevel uint32 `json:"member_level"` // 用户会员等级
|
||
PrizeName string `json:"prize_name"` // 奖品名称模糊搜索
|
||
Status int `json:"status"` // 发货状态筛选:0-待发货 1-已发货 2-已收货 3-取消 4-全部
|
||
StartTime string `json:"start_time"` // 抽奖时间开始
|
||
EndTime string `json:"end_time"` // 抽奖时间结束
|
||
}
|
||
|
||
type LotteryPrizeOrderItem struct {
|
||
LotteryPrizeOrder
|
||
|
||
StoreId uint64 `json:"store_id"` // 门店ID
|
||
StoreName string `json:"store_name"` // 门店名
|
||
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||
}
|
||
|
||
type LotteryPrizeOrderListResponse struct {
|
||
List []LotteryPrizeOrderItem `json:"list"`
|
||
Total int64 `json:"total"`
|
||
Page int `json:"page_index"` // 页码
|
||
PageSize int `json:"page_size"` // 每页条数
|
||
}
|
||
|
||
type GetLotteryPrizeOrderDetailRequest struct {
|
||
OrderID uint `json:"order_id" binding:"required"` // 奖品订单ID
|
||
}
|
||
|
||
type LotteryPrizeOrderDetailResponse struct {
|
||
LotteryPrizeOrder
|
||
|
||
// 用户信息
|
||
Nickname string `json:"nickname"` // 用户昵称
|
||
Tel string `json:"tel"` // 用户手机号
|
||
MemberLevel uint32 `json:"member_level"` // 当前会员等级
|
||
StoreName string `json:"store_name"` // 所属门店
|
||
|
||
// 奖品信息(扩展字段)
|
||
PrizeType int `json:"prize_type"` // 奖品类型
|
||
PrizeLevel int `json:"prize_level"` // 奖品等级
|
||
PrizeValue int `json:"prize_value"` // 奖品值
|
||
}
|
||
|
||
type ShipLotteryPrizeOrderRequest struct {
|
||
OrderID uint `json:"order_id" binding:"required"` // 奖品订单ID
|
||
LogisticsCompany string `json:"logistics_company" binding:"required"` // 快递公司
|
||
LogisticsNumber string `json:"logistics_number" binding:"required"` // 快递单号
|
||
}
|
||
|
||
func TrimTrailingZerosFromPercent(s string) string {
|
||
// 去掉最后的 "%"
|
||
s = strings.TrimSuffix(s, "%")
|
||
// 去掉小数部分末尾的 0
|
||
s = strings.TrimRight(s, "0")
|
||
// 如果小数点在最后,也去掉
|
||
s = strings.TrimRight(s, ".")
|
||
return s + "%"
|
||
}
|