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