mh_goadmin_server/app/admin/models/lottery.go

214 lines
9.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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