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 + "%"
|
|||
|
}
|