mh_goadmin_server/app/admin/models/lottery.go

214 lines
9.5 KiB
Go
Raw Normal View History

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