2021-06-30 02:12:05 +00:00
package model
import (
2024-05-27 11:37:57 +00:00
"encoding/json"
2021-06-30 02:12:05 +00:00
"errors"
2022-01-26 08:02:21 +00:00
"fmt"
2021-06-30 02:12:05 +00:00
"github.com/codinl/go-logger"
2022-01-27 14:24:29 +00:00
"github.com/jinzhu/gorm"
2022-05-28 06:18:27 +00:00
"github.com/rs/zerolog/log"
2021-11-01 03:32:23 +00:00
"mh-server/lib/utils"
2022-04-25 05:59:56 +00:00
"mh-server/lib/wxpay"
2024-05-20 07:17:50 +00:00
"sort"
2024-05-27 11:37:57 +00:00
"strings"
2022-01-15 13:10:00 +00:00
"sync"
2021-06-30 02:12:05 +00:00
"time"
)
// gen:qs
2023-07-10 06:44:36 +00:00
//
//go:generate goqueryset -in user.go
2021-06-30 02:12:05 +00:00
type User struct {
Model
2024-04-03 06:29:19 +00:00
Uid uint32 ` json:"uid" gorm:"column:uid;unique_index" `
2024-05-27 11:37:57 +00:00
MemberLevel uint32 ` json:"member_level" ` // 当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员
2024-04-03 06:29:19 +00:00
MemberGenre uint32 ` json:"member_genre" ` // 会员类型
MemberExpire time . Time ` json:"member_expire" ` // 会员到期时间
OpenMemberTime time . Time ` json:"open_member_time" ` // 开通会员
Bond uint32 ` json:"bond" ` // 保证金
WxName string ` json:"wx_name" ` // 昵称
WxAvatar string ` json:"wx_avatar" ` // 头像
WxOpenID string ` json:"wx_open_id" ` // 微信openid
AppOpenID string ` json:"app_open_id" ` //
WxUnionID string ` json:"wx_union_id" ` // 微信uniodid
Tel string ` json:"tel" ` // 电话
Gender uint8 ` json:"gender" ` // 性别
City string ` json:"city" ` // 城市
Province string ` json:"province" ` // 省
Country string ` json:"country" ` // 市
Deposit uint32 ` json:"deposit" ` // 押金
UserType uint32 ` json:"user_type" ` // 用户类型: 1-普通用户 2-店员
XcxRoleId uint32 ` json:"xcx_role_id" ` // 角色id
OpenMemberChannel string ` json:"open_member_channel" ` // 开通会员渠道: -门店推广 -用户邀请 -兑换码
StoreId uint64 ` json:"store_id" ` // 门店id
InviteCodeUrl string ` json:"invite_code_url" ` // 分享二维码
LastLoginAt time . Time ` json:"last_login_at" ` // 最近登录时间
IP string ` json:"-" gorm:"type:varchar(60)" ` // ip
InBlack bool ` json:"in_black" ` // 是否在黑名单
StoreType uint32 ` json:"store_type" ` // 1-订单门店
CooperativeBusinessId uint32 ` json:"cooperative_business_id" gorm:"index" ` // 合作商id
CooperativeName string ` json:"cooperative_name" ` // 合作商名称
ShopAssistantName string ` json:"shop_assistant_name" ` // 店员名称
OpenMemberLevel uint32 ` json:"open_member_level" ` // 开通会员级别: 2-黄金会员 4-白金会员 5-黑金会员
FirstRetailOrder time . Time ` json:"first_retail_order" ` //
Version uint32 ` json:"-" ` //
UserVm * UserVm ` json:"user_vm" gorm:"-" ` //
InviteTime time . Time ` json:"invite_time" ` //
DepositType uint32 ` json:"deposit_type" ` // 押金类型: 3-未充值
StoreList [ ] StoreInfo ` gorm:"-" json:"store_list" ` // 有效门店列表
RoleId uint32 ` json:"role_id" gorm:"-" ` // 角色id
2022-07-25 04:02:53 +00:00
//RenewalTime time.Time `json:"renewal_time"`
//RenewalMemberLevel uint32 `json:"renewal_member_level"`
2023-01-06 02:03:56 +00:00
//MemberLevelString string `json:"member_level_string" gorm:"-"` // 会员类型
2021-06-30 02:12:05 +00:00
}
2024-01-31 10:02:20 +00:00
type AuthLoginReq struct {
2024-04-03 06:29:19 +00:00
Code string ` json:"code" binding:"required" ` // 小程序code码
InviteUid uint32 ` json:"invite_uid" ` // 邀请人用户ID
EncryptedData string ` json:"encrypted_data" binding:"required" `
Iv string ` json:"iv" binding:"required" `
//RawData string `json:"raw_data" binding:"required"`
//Signature string `json:"signature" binding:"required"`
//Tel string `json:"tel"` // 手机号
//WxName string `json:"wx_name"` // 昵称
//WxAvatar string `json:"wx_avatar"` // 头像
2024-01-31 10:02:20 +00:00
}
type AuthLoginResp struct {
AccessToken string ` json:"access_token" `
AccessExpire int64 ` json:"access_expire" `
RefreshToken string ` json:"refresh_token" `
RefreshExpire int64 ` json:"refresh_expire" `
Uid uint32 ` json:"uid" `
AccessCreatedAt time . Time ` json:"access_created_at" `
}
2021-06-30 02:12:05 +00:00
func ( o * User ) TableName ( ) string {
return "user"
}
2021-11-01 03:32:23 +00:00
const (
2024-05-20 07:17:50 +00:00
MemberGenreYear = 200 // 短期会员:黄金年费会员
MemberGenreQuarter = 201 // 短期会员:黄金季度会员
MemberGenreHalfYear = 202 // 短期会员:黄金半年会员
2022-01-16 08:56:20 +00:00
)
const (
2024-05-20 07:17:50 +00:00
MemberLevelConsumer = 10 // 普通用户:有开过零售单,留了手机号,但是小程序端未登陆过的,仍然是普通用户
MemberLevelUser = 1 // 普通会员:仅进入了小程序且授权过手机号的为会员用户,未开通租卡会员的为“普通会员”
MemberLevelGold = 2 // 黄金会员
MemberLevelPeriod = 3 // 短期会员
MemberLevelPlatinum = 4 // 白金会员
MemberLevelBlackGold = 5 // 黑金会员
2021-11-01 03:32:23 +00:00
)
2022-03-26 03:25:15 +00:00
const (
DateTimeFormat = "2006-01-02"
TimeFormat = "2006-01-02 15:04:05"
)
2022-04-19 01:55:38 +00:00
const (
2022-04-23 07:47:13 +00:00
OpenMemberChannelStorePromotion = "store_promotion" // 门店推荐
2022-04-19 01:55:38 +00:00
OpenMemberChannelUserInvite = "user_invite"
OpenMemberChannelRedeemCode = "redeem_code"
)
2021-11-01 03:32:23 +00:00
// gen:qs
type UserInvite struct {
Model
2022-07-29 02:02:33 +00:00
FromUid uint32 ` json:"from_uid" ` // 邀请用户id
2022-08-04 03:57:21 +00:00
UserType uint32 ` json:"user_type" ` // 用户类型 1-普通用户 邀请用户类型
StoreId uint64 ` json:"store_id" ` // 门店id 邀请用户门店
2022-07-29 02:02:33 +00:00
MemberOpenTime time . Time ` json:"member_open_time" ` // 开通会员
MemberType uint32 ` json:"member_type" ` // 被邀请用户 1-普通用户 2-会员
MemberStatus uint8 ` json:"member_status" ` // 被邀请用户 1-未开通 2-已开通 3-已取消会员
ToUid uint32 ` json:"to_uid" ` // 被邀请用户
StoreType uint32 ` json:"store_type" ` // 门店类型 1-自有 2-合作商
2024-05-27 11:37:57 +00:00
Action uint32 ` json:"action" ` // 1-未激活 2-激活邀请 表示:该会员是开通还是续费
2022-11-23 08:20:05 +00:00
SpendType uint32 ` json:"spend_type" ` // 1-未开通 2-开通会员 3-续费 4-升级 5-店员推广续费
2022-07-29 02:02:33 +00:00
MemberLevel uint32 ` json:"member_level" ` // 会员等级
2023-07-14 09:29:05 +00:00
MemberGenre uint32 ` json:"member_genre" ` // 会员类型
2022-07-29 02:02:33 +00:00
UserInviteRecordId uint32 ` json:"user_invite_record_id" ` // 邀请记录
2024-05-20 07:17:50 +00:00
FirstInvite uint32 ` json:"first_invite" ` // 首次邀请标志: 1 首次邀请 0 非首次
2022-07-29 02:02:33 +00:00
Scan uint32 ` json:"scan" ` // 扫码
2022-11-23 08:20:05 +00:00
InviteForm uint32 ` json:"invite_form" ` // 邀请方式: 1-店员邀请码续费
2024-05-27 11:37:57 +00:00
RenewHide uint32 ` json:"renew_hide" ` // 自动续费 1-自动 0-干预
2022-08-04 03:57:21 +00:00
//InviteTime time.Time `json:"invite_time"` // 邀请时间
ToUser * User ` json:"to_user" gorm:"-" `
2022-07-29 02:02:33 +00:00
//ToUser *UserLess `json:"to_user" gorm:"-"` //
2022-06-03 03:30:03 +00:00
}
type UserLess struct {
Uid uint32 ` json:"uid" `
MemberOpenTime time . Time ` json:"member_open_time" ` // 开通会员
MemberLevel uint32 ` json:"member_level" ` // 会员等级
2021-11-01 03:32:23 +00:00
}
2021-12-25 08:38:30 +00:00
const (
DepositRefundStatusUnconfirmed = 1 // 待确认
DepositRefundStatusConfirmed = 2 // 已确认
DepositRefundStatusRefunded = 3 // 已退款
DepositRefundStatusRefused = 4 // 已拒绝
)
2022-03-26 03:25:15 +00:00
const (
MemberExpireDelayDailyFee = 200
)
2021-12-25 08:38:30 +00:00
// gen:qs
type DepositRefundRecord struct {
Model
Uid uint32 ` json:"uid" `
Status uint32 ` json:"status" ` // 1 // 待确认 2 // 已确认 3 // 已退款 4 // 已拒绝
Amount uint32 ` json:"amount" `
Operator uint32 ` json:"operator" `
ConfirmTime time . Time ` json:"confirm_time" `
User User ` json:"user" gorm:"-" `
}
2022-01-26 08:02:21 +00:00
const (
2022-04-26 06:28:41 +00:00
FundTypeMemberFee = "member_fee" // 会员费
FundTypeMemberDeposit = "member_deposit" // 押金
2022-04-23 07:47:13 +00:00
FundTypeExpressFee = "express_fee" // 邮费
FundTypeUpgradeMember = "upgrade_member" // 升级会员
FundTypeMemberExpireDelay = "member_expire_delay" // 滞纳金
2022-04-25 05:59:56 +00:00
FundTypeDepositRefund = "deposit_refund" // 退押金
FundTypeExpressFeeRefund = "express_fee_refund" // 退邮费
2022-05-28 06:18:27 +00:00
FundTypeBuyGoods = "buy_goods" // 购买商品
2022-06-14 06:07:15 +00:00
FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单
FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货
2022-08-12 02:41:33 +00:00
FundTypeRecycleCard = "recycle_card" // 回收卡带
2022-09-29 07:49:16 +00:00
FundTypePostagePackageFee = "postage_package_fee" // 购买运费包
2022-01-26 08:02:21 +00:00
)
// gen:qs
2022-04-23 07:47:13 +00:00
type FundRecord struct {
2022-01-26 08:02:21 +00:00
Model
2022-04-26 06:28:41 +00:00
Uid uint32 ` json:"uid" gorm:"index" `
FundType string ` json:"fund_type" gorm:"index" ` // -member_gold -member_platinum -member_black_gold
2022-04-23 07:47:13 +00:00
Amount int64 ` json:"amount" `
2022-04-26 06:28:41 +00:00
TransactionId string ` json:"transaction_id" gorm:"index" ` // 支付单号
OutTradeNo string ` json:"out_trade_no" gorm:"index" `
RefundId string ` json:"refund_id" gorm:"index" `
PaymentNo string ` json:"payment_no" gorm:"index" ` // 付款单号
Status uint32 ` json:"status" ` // 1-待支付 2-已支付 3-已退款
Remark string ` json:"remark" ` // 备注
2022-06-23 04:21:01 +00:00
2022-01-26 08:02:21 +00:00
}
// gen:qs
type UserRentCard struct {
Model
Uid uint32 ` json:"uid" `
MemberLevel uint32 ` json:"member_level" ` // 会员等级 1-用户 2-会员
LevelRentCount uint32 ` json:"level_rent_count" ` // 等级借卡数量
HaveRentCount uint32 ` json:"have_rent_count" ` // 已借卡数量
CanRentCount uint32 ` json:"can_rent_count" ` // 可借卡数量
Status uint32 ` json:"status" ` // 状态
}
2022-03-26 03:25:15 +00:00
// gen:qs
type UserMemberExpireDelay struct {
Model
Uid uint32 ` json:"uid" gorm:"column:uid;index" `
MemberExpire time . Time ` json:"member_expire" ` // 会员到期时间
DelayAmount uint32 ` json:"delay_amount" `
ExpireDays uint32 ` json:"expire_days" `
DailyFee uint32 ` json:"daily_fee" `
2022-04-16 13:26:14 +00:00
IsPay uint32 ` json:"is_pay" ` // 1-已支付
2022-03-26 03:25:15 +00:00
}
2022-05-10 07:17:34 +00:00
// gen:qs
type XcxRole struct {
Model
RoleId uint32 ` json:"role_id" gorm:"unique_index,not null" `
RoleName string ` json:"role_name" gorm:"size:255;" ` // 角色名称
RoleKey string ` json:"role_key" gorm:"size:255;" ` // 角色代码
RoleSort int ` json:"role_sort" gorm:"" ` // 角色排序
Status string ` json:"status" gorm:"size:255;" ` // 状态:1-停用 2-正常
Flag string ` json:"flag" gorm:"size:255;" ` //
CreateBy string ` json:"create_by" gorm:"size:255;" ` //
UpdateBy string ` json:"update_by" gorm:"size:255;" ` //
Remark string ` json:"remark" gorm:"size:255;" ` // 备注
Params string ` json:"params" gorm:"-" `
MenuIds [ ] int ` json:"menuIds" gorm:"-" `
DeptIds [ ] int ` json:"deptIds" gorm:"-" `
}
2022-11-01 06:23:06 +00:00
// gen:qs
2024-04-03 06:29:19 +00:00
// ShopperPromotionCode 店员优惠码
2022-11-01 06:23:06 +00:00
type ShopperPromotionCode struct {
Model
Uid uint32 ` json:"uid" gorm:"column:uid;index" `
State uint32 ` json:"state" ` // 1-停用 2-使用
Code string ` json:"code" gorm:"index" `
StoreId uint32 ` json:"store_id" ` // 门店id
// shopper_promotion_code
}
2021-06-30 02:12:05 +00:00
func GetUserByUid ( uid uint32 ) * User {
user := new ( User )
if err := NewUserQuerySet ( DB ) . UidEq ( uid ) . One ( user ) ; err != nil {
logger . Error ( err , uid )
2023-09-12 06:54:27 +00:00
return user
2021-06-30 02:12:05 +00:00
}
return user
}
2024-05-27 11:37:57 +00:00
const StoreDateTimeFormat = "2006.01.02"
2024-05-20 07:17:50 +00:00
// GetUserEffectiveStore 获取店员当前的有效门店(邀请客户时使用)
func GetUserEffectiveStore ( uid uint32 ) ( * StoreInfo , error ) {
2024-05-31 09:53:15 +00:00
if uid == 0 {
return & StoreInfo { } , nil
}
2024-05-20 07:17:50 +00:00
user := new ( SysUser )
if err := NewSysUserQuerySet ( DB ) . UidEq ( uid ) . One ( user ) ; err != nil {
2024-05-27 11:37:57 +00:00
logger . Error ( "Error:" , err , "UID:" , uid )
2024-07-03 11:08:28 +00:00
return & StoreInfo { } , err
2024-05-27 11:37:57 +00:00
}
2024-05-31 09:53:15 +00:00
var userStores [ ] StoreInfo
if user . RoleId == 1 { // 系统管理员
var stores [ ] Store
err := NewStoreQuerySet ( DB ) . CooperativeBusinessIdEq ( user . CooperativeBusinessId ) . All ( & stores )
if err != nil {
2024-07-03 11:08:28 +00:00
return & StoreInfo { } , err
2024-05-31 09:53:15 +00:00
}
2024-05-20 07:17:50 +00:00
2024-05-31 09:53:15 +00:00
for _ , item := range stores {
tempStore := StoreInfo {
StoreID : uint64 ( item . ID ) ,
StoreName : item . Name ,
ExpireTime : "2099.12.30" ,
}
userStores = append ( userStores , tempStore )
}
} else { // 普通用户
// 解析门店数据
if err := json . Unmarshal ( [ ] byte ( user . StoreData ) , & userStores ) ; err != nil {
2024-07-03 11:08:28 +00:00
return & StoreInfo { } , err
2024-05-31 09:53:15 +00:00
}
if len ( userStores ) == 0 {
2024-07-03 11:08:28 +00:00
return & StoreInfo { } , errors . New ( "no stores found" )
2024-05-31 09:53:15 +00:00
}
2024-05-20 07:17:50 +00:00
}
2024-05-27 11:37:57 +00:00
// 当前时间
now := time . Now ( )
// 过滤掉过期的门店
validStores := make ( [ ] StoreInfo , 0 )
2024-05-31 09:53:15 +00:00
for _ , store := range userStores {
2024-05-27 11:37:57 +00:00
expireTime , err := time . Parse ( StoreDateTimeFormat , store . ExpireTime )
if err != nil {
logger . Error ( "Error parsing time:" , err , "ExpireTime:" , store . ExpireTime )
continue
}
// 包含当天有效时间
expireTime = expireTime . Add ( 24 * time . Hour - time . Second )
if expireTime . After ( now ) {
validStores = append ( validStores , store )
}
}
if len ( validStores ) == 0 {
return & StoreInfo { } , nil
}
// 按有效时间和 store_id 排序
sort . Slice ( validStores , func ( i , j int ) bool {
timeI , _ := time . Parse ( StoreDateTimeFormat , validStores [ i ] . ExpireTime )
timeJ , _ := time . Parse ( StoreDateTimeFormat , validStores [ j ] . ExpireTime )
2024-05-20 07:17:50 +00:00
if timeI . Equal ( timeJ ) {
2024-05-27 11:37:57 +00:00
return validStores [ i ] . StoreID < validStores [ j ] . StoreID
2024-05-20 07:17:50 +00:00
}
return timeI . Before ( timeJ )
} )
2024-05-27 11:37:57 +00:00
return & validStores [ 0 ] , nil
2024-05-20 07:17:50 +00:00
}
2022-01-26 08:02:21 +00:00
func GetUserRentCard ( uid uint32 ) * UserRentCard {
userRent := new ( UserRentCard )
if err := NewUserRentCardQuerySet ( DB ) . UidEq ( uid ) . One ( userRent ) ; err != nil {
logger . Error ( err , uid )
return nil
}
return userRent
}
2021-06-30 02:12:05 +00:00
func UserUpdate ( user * User ) error {
if user . Uid == 0 {
return errors . New ( "uid is null" )
}
fields := make ( [ ] UserDBSchemaField , 0 )
if user . WxName != "" {
fields = append ( fields , UserDBSchema . WxName )
}
if user . WxAvatar != "" {
fields = append ( fields , UserDBSchema . WxAvatar )
}
if user . Tel != "" {
fields = append ( fields , UserDBSchema . Tel )
}
if user . MemberLevel != 0 {
fields = append ( fields , UserDBSchema . MemberLevel )
2024-04-03 06:29:19 +00:00
}
if ! user . MemberExpire . IsZero ( ) {
2021-06-30 02:12:05 +00:00
fields = append ( fields , UserDBSchema . MemberExpire )
}
2021-12-25 08:38:30 +00:00
if user . Deposit != 0 {
fields = append ( fields , UserDBSchema . Deposit )
}
2024-04-03 06:29:19 +00:00
if user . WxOpenID != "" {
fields = append ( fields , UserDBSchema . WxOpenID )
}
if user . WxUnionID != "" {
fields = append ( fields , UserDBSchema . WxUnionID )
}
if ! user . LastLoginAt . IsZero ( ) {
fields = append ( fields , UserDBSchema . LastLoginAt )
}
if ! user . CreatedAt . IsZero ( ) {
fields = append ( fields , UserDBSchema . CreatedAt )
}
2021-06-30 02:12:05 +00:00
if len ( fields ) > 0 {
err := user . Update ( DB . Where ( & User { Uid : user . Uid } ) , fields ... )
if err != nil {
logger . Error ( "err:" , err )
return err
}
}
return nil
}
2022-09-29 07:49:16 +00:00
//OrderType: 1-物流支付 2-取消物流租卡 3-滞纳金 4-收回卡 5-退物流费 6-商城购物 7-购买商品取消订单 8-购买商品订单退货 9-升级会员 10-开通 续费 11-运费包
2022-05-28 06:18:27 +00:00
2021-06-30 02:12:05 +00:00
// gen:qs
type UserOpenMemberRecord struct {
Model
2022-07-25 04:02:53 +00:00
Uid uint32 ` json:"uid" gorm:"index" `
OpenNo string ` json:"open_no" gorm:"index" `
OrderId uint32 ` json:"order_id" gorm:"index" `
OrderType uint32 ` json:"order_type" `
MemberLevel uint32 ` json:"member_level" `
2023-07-14 09:29:05 +00:00
MemberGenre uint32 ` json:"member_genre" `
2022-07-25 04:02:53 +00:00
MemberExpire time . Time ` json:"member_expire" ` // 会员到期时间
UserCouponId uint32 ` json:"user_coupon_id" gorm:"index" ` // 优惠券id
State uint32 ` json:"state" ` // 1-未处理 2-已处理
DeductionDays uint32 ` json:"deduction_days" `
DeductionFee uint32 ` json:"deduction_fee" `
2022-05-28 06:18:27 +00:00
2022-04-25 05:59:56 +00:00
Order * Order ` json:"order" gorm:"-" `
ShareCardRetrieve * ShareCardRetrieve ` json:"share_card_retrieve" gorm:"-" `
2022-05-28 06:18:27 +00:00
GoodsOrder * GoodsOrder ` json:"goods_order" gorm:"-" `
2022-11-26 08:52:05 +00:00
Attach string ` json:"attach" `
2021-06-30 02:12:05 +00:00
}
func ( o * UserOpenMemberRecord ) TableName ( ) string {
return "user_open_member_record"
}
func ( m UserOpenMemberRecord ) Insert ( ) error {
err := m . Create ( DB )
if err != nil {
logger . Error ( "err:" , err )
return err
}
return nil
}
2022-05-10 07:17:34 +00:00
const (
2022-08-01 07:14:53 +00:00
LogCorrelationOrderId = "order_id"
LogCorrelationOrderCard = "order_card_id"
LogCorrelationRecycleCardOrderId = "recycle_card_order_id"
2022-05-10 07:17:34 +00:00
)
const (
2022-08-01 07:14:53 +00:00
OperationTypeRentCardRevert = "rent_card_revert"
OperationTypeRentCardDeliver = "rent_card_deliver"
OperationTypeGameCardGoodsInStock = "game_card_goods_in_stock" // 入库
OperationTypeRecycleCardOrderImageUpdate = "recycle_card_order_image_update" // 回收卡上传图片
2022-05-10 07:17:34 +00:00
)
// gen:qs
type OperationLog struct {
Model
2022-05-28 06:18:27 +00:00
Uid uint32 ` json:"uid" gorm:"index" ` // 店员id
SysUid uint32 ` json:"sys_uid" gorm:"index" `
2022-05-18 06:28:00 +00:00
Description string ` json:"description" ` // 描述
OperationType string ` json:"operation_type" gorm:"index" ` // 操作类型
CorrelationId uint32 ` json:"correlation_id" gorm:"index" ` // 关联id
CorrelationName string ` json:"correlation_name" gorm:"index" ` // 关联name
StoreId uint32 ` json:"store_id" gorm:"index" ` // 门店id
StoreName string ` json:"store_name" ` // 门店名称
CooperativeName string ` json:"cooperative_name" ` // 合作商名称
CooperativeBusinessId uint32 ` json:"cooperative_business_id" gorm:"index" ` // 合作商id
SerialNumber string ` json:"serial_number" gorm:"index" ` // 卡编号
Detail string ` json:"detail" ` // 详情
Remark string ` json:"remark" ` // 备注
2022-05-10 07:17:34 +00:00
}
2022-09-29 07:49:16 +00:00
// gen:qs
type UserMemberDurationRecord struct {
Model
Uid uint32 ` json:"uid" `
Duration uint32 ` json:"duration" `
EventType uint32 ` json:"event_type" ` // 类型: 1-购买运费包
MemberLevel uint32 ` json:"member_level" ` // 会员等级 1-用户 2-会员
}
2022-04-25 05:59:56 +00:00
func ( m * UserOpenMemberRecord ) OrderRefund ( outTradeNo string ) error {
if m . Order == nil {
return errors . New ( "order is nil" )
}
if m . OpenNo == "" {
m . OpenNo = GetOrderSn ( )
}
m . Uid = uint32 ( m . Order . Uid )
m . OrderId = m . Order . ID
err := m . Refund ( outTradeNo , m . Order . PayPrice )
if err != nil {
logger . Error ( "refund err:" , err )
return err
}
return nil
}
2022-05-28 06:18:27 +00:00
func ( m * UserOpenMemberRecord ) MallGoodsOrderRefund ( outTradeNo string ) error {
if m . GoodsOrder == nil {
return errors . New ( "goods order is nil" )
}
if m . OpenNo == "" {
m . OpenNo = GetOrderSn ( )
}
m . Uid = uint32 ( m . GoodsOrder . Uid )
m . OrderId = m . GoodsOrder . ID
err := m . Refund ( outTradeNo , m . GoodsOrder . Rm )
if err != nil {
logger . Error ( "refund err:" , err )
return err
}
return nil
}
2022-05-10 07:17:34 +00:00
// gen:qs
type InviteMemberReport struct {
Model
2024-02-01 10:24:57 +00:00
Uid uint32 ` json:"uid" gorm:"index" ` // 店员uid
StoreId uint32 ` json:"store_id" gorm:"index" ` // 门店id
GoldCount uint32 ` json:"gold_count" ` // 黄金数量
GoldCountHalf uint32 ` json:"gold_count_half" ` // 半年黄金数量
GoldCountQuarter uint32 ` json:"gold_count_quarter" ` // 季度黄金数量
PlatinumCount uint32 ` json:"platinum_count" ` // 白金数量
BlackGoldCount uint32 ` json:"black_gold_count" ` // 黑金数量
2022-05-13 09:35:10 +00:00
//ReportTime string `json:"report_time" gorm:"index"` // 业绩时间
2024-01-31 10:02:20 +00:00
Date string ` json:"date" gorm:"index" ` // 业绩时间
DeductAmount uint32 ` json:"deduct_amount" ` // 店员提成
CooperativeBusinessId uint32 ` json:"cooperative_business_id" gorm:"index" ` // 合作商id
CooperativeName string ` json:"cooperative_name" ` // 合作商名称
GoldDeduct uint32 ` json:"gold_deduct" ` // 黄金会员提成
PlatinumDeduct uint32 ` json:"platinum_deduct" ` // 白金会员提成
BlackGoldDeduct uint32 ` json:"black_gold_deduct" ` // 黑金会员提成
2024-02-01 10:24:57 +00:00
RenewalGoldCount uint32 ` json:"renewal_gold_count" ` // 续费年度黄金会员数量(自动)
RenewalGoldCountHalf uint32 ` json:"renewal_gold_count_half" ` // 续费半年黄金会员数量(自动)
RenewalGoldCountQuarter uint32 ` json:"renewal_gold_count_quarter" ` // 续费季度黄金会员数量(自动)
2024-01-31 10:02:20 +00:00
RenewalPlatinumCount uint32 ` json:"renewal_platinum_count" ` // 续费白金会员数量(自动)
RenewalBlackGoldCount uint32 ` json:"renewal_black_gold_count" ` // 续费黑金会员数量(自动)
UpgradeGoldToPlatinumCount uint32 ` json:"upgrade_gold_to_platinum_count" gorm:"default:0" ` // 升级:黄金->白金数量(自动)
UpgradeGoldToBlackCount uint32 ` json:"upgrade_gold_to_black_count" gorm:"default:0" ` // 升级:黄金->黑金数量(自动)
UpgradePlatinumToBlackCount uint32 ` json:"upgrade_platinum_to_black_count" gorm:"default:0" ` // 升级:白金->黑金数量(自动)
InviteRenewalGoldCount uint32 ` json:"invite_renewal_gold_count" ` // 续费黄金会员数量(干预)
InviteRenewalPlatinumCount uint32 ` json:"invite_renewal_platinum_count" ` // 续费白金会员数量(干预)
InviteRenewalBlackGoldCount uint32 ` json:"invite_renewal_black_gold_count" ` // 续费黑金会员数量(干预)
InviteUpgradeGoldToPlatinumCount uint32 ` json:"invite_upgrade_gold_to_platinum_count" gorm:"default:0" ` // 升级:黄金->白金数量(干预)
InviteUpgradeGoldToBlackCount uint32 ` json:"invite_upgrade_gold_to_black_count" gorm:"default:0" ` // 升级:黄金->黑金数量(干预)
InviteUpgradePlatinumToBlackCount uint32 ` json:"invite_upgrade_platinum_to_black_count" gorm:"default:0" ` // 升级:白金->黑金数量(干预)
2022-05-10 07:17:34 +00:00
// invite_member_report
2022-05-12 05:42:45 +00:00
User * User ` json:"user" gorm:"-" `
2022-05-10 07:17:34 +00:00
}
2022-04-25 05:59:56 +00:00
func ( m * UserOpenMemberRecord ) Refund ( outTradeNo string , amount uint32 ) error {
configInfo , err := PayConfigInfo ( )
if err != nil {
logger . Error ( "config info err:" , err )
return err
}
//configInfo.NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay_refund/notice"
err = m . Insert ( )
if err != nil {
logger . Error ( "insert user open member record err:" , err )
return err
}
orderRefund := wxpay . OrderRefund {
OutTradeNo : outTradeNo ,
OutRefundNo : m . OpenNo ,
NotifyUrl : configInfo . RefundNotifyUrl ,
Amount : wxpay . OrderRefundAmount {
Refund : amount ,
Total : amount ,
Currency : "CNY" ,
} ,
}
2022-11-30 01:43:36 +00:00
err = wxpay . HmRefundTransaction ( orderRefund )
2022-04-25 05:59:56 +00:00
if err != nil {
logger . Error ( "err:" , err )
return err
}
2022-11-30 01:43:36 +00:00
//err = wxpay.TransactionOrderRefund(orderRefund)
//if err != nil {
// logger.Error("err:", err)
// return err
//}
2022-04-25 05:59:56 +00:00
//FundRecord{
// Uid: m.Uid,
// FundType: FundTypeExpressFeeRefund,
// Amount: int64(m.Order.PayPrice) * (-1),
// TransactionId: "",
// OutTradeNo: "",
// Status: 0,
// Remark: "",
//}
return nil
}
2022-05-10 07:17:34 +00:00
//func (m *UserOpenMemberRecord) ShareCardRetrieveRefund(outTradeNo string) error {
// //if m.ShareCardRetrieve == nil {
// // return errors.New("order is nil")
// //}
// //if m.OpenNo == "" {
// // m.OpenNo = GetShareCardRetrieveOrderSn()
// //}
// //m.Uid = uint32(m.Order.Uid)
// //m.OrderId = m.ShareCardRetrieve.ID
// //configInfo, err := PayConfigInfo()
// //if err != nil {
// // logger.Error("config info err:", err)
// // return err
// //}
// //
// //err = m.Insert()
// //if err != nil {
// // logger.Error("insert user open member record err:", err)
// // return err
// //}
// //
// //orderRefund := wxpay.OrderRefund{
// // OutTradeNo: outTradeNo,
// // OutRefundNo: m.OpenNo,
// // NotifyUrl: configInfo.NotifyUrl,
// // Amount: wxpay.OrderRefundAmount{
// // Refund: m.ShareCardRetrieve.PayAmount,
// // Total: m.ShareCardRetrieve.PayAmount,
// // Currency: "CNY",
// // },
// //}
// //err = wxpay.TransactionOrderRefund(orderRefund)
// //if err != nil {
// // logger.Error("err:", err)
// // return err
// //}
// return nil
//}
2022-04-25 05:59:56 +00:00
2021-06-30 02:12:05 +00:00
func ( m * UserOpenMemberRecord ) GetByOpenNo ( ) error {
err := NewUserOpenMemberRecordQuerySet ( DB ) . OpenNoEq ( m . OpenNo ) . One ( m )
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
return err
}
return nil
}
// gen:qs
type CommonProblem struct {
Model
Question string ` json:"question" `
Answer string ` json:"answer" gorm:"type:text" `
Sort uint32 ` json:"sort" gorm:"index" `
}
2021-12-25 08:38:30 +00:00
type GroupSendMessageTemplate struct {
Model
Title string ` json:"title" `
Message string ` json:"message" `
UserType uint32 ` json:"user_type" gorm:"index,column:user_type" ` // 1-所有用户 2-会员 3-非会员 4-指定用户
SendTime time . Time ` json:"send_time" `
Tels string ` json:"tels" `
Status uint32 ` json:"status" ` // 1-待发送 2-已发送
}
2021-06-30 02:12:05 +00:00
func ( * CommonProblem ) TableName ( ) string {
return "common_problem"
}
func ( * CommonProblem ) List ( ) ( [ ] CommonProblem , error ) {
commons := make ( [ ] CommonProblem , 0 )
err := NewCommonProblemQuerySet ( DB ) . OrderDescBySort ( ) . All ( & commons )
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
return commons , err
}
return commons , err
}
2021-11-01 03:32:23 +00:00
func ( m * User ) AppletQRCodeUpdate ( ) error {
num , err := NewUserQuerySet ( DB ) . UidEq ( m . Uid ) . GetUpdater ( ) . SetInviteCodeUrl ( m . InviteCodeUrl ) . UpdateNum ( )
if err != nil || num != 1 {
logger . Error ( "AppletQRCodeUpdate err" )
return errors . New ( "AppletQRCodeUpdate err" )
}
return nil
}
type UserInviteListReq struct {
2024-01-31 10:02:20 +00:00
Page int ` json:"page" ` // 页码
PageSize int ` json:"page_size" ` // 每页条数
Uid uint32 ` json:"uid" ` // 当前用户ID
MemberType int ` json:"member_type" ` // 会员类型: 0-全部 1-普通用户 2-会员
SpendType uint32 ` json:"spend_type" ` // 操作类型: 2-开通会员 3-续费 4-升级
2021-11-01 03:32:23 +00:00
StartTime string ` json:"start_time" ` // 开始时间
EndTime string ` json:"end_time" ` // 结束时间
}
type UserInviteListResp struct {
2022-07-29 02:02:33 +00:00
Page int ` json:"page" `
TotalPage int ` json:"total_page" `
//List []UserInviteList `json:"list"`
List [ ] UserInvite ` json:"list" `
Count int ` json:"count" `
2021-11-01 03:32:23 +00:00
}
2022-07-29 02:02:33 +00:00
//type UserInviteList struct {
// User User `json:"user"`
// UserInvite UserInvite `json:"user_invite"`
//}
2021-11-01 03:32:23 +00:00
func ( m * UserInviteListReq ) InviteUserList ( ) ( * UserInviteListResp , error ) {
list := make ( [ ] User , 0 )
resp := & UserInviteListResp {
Page : m . Page ,
2022-07-29 02:02:33 +00:00
List : make ( [ ] UserInvite , 0 ) ,
2021-11-01 03:32:23 +00:00
}
page := m . Page - 1
if page < 0 {
page = 0
}
if m . PageSize == 0 {
m . PageSize = 10
}
2024-01-31 10:02:20 +00:00
qs := NewUserInviteQuerySet ( DB ) . FromUidEq ( m . Uid ) . ActionEq ( 2 ) // action=2, 激活邀请
2021-11-01 03:32:23 +00:00
if m . MemberType != 0 {
2022-05-10 07:17:34 +00:00
qs = qs . MemberTypeEq ( uint32 ( m . MemberType ) )
2024-01-31 10:02:20 +00:00
if m . MemberType == 2 { // 查询会员数据
2022-11-01 06:23:06 +00:00
user := GetUserByUid ( m . Uid )
2022-08-04 03:57:21 +00:00
//qs = qs.FirstInviteNe(1).SpendTypeEq(2)
//qs = qs.SpendTypeEq(2)
2022-11-01 06:23:06 +00:00
//qs = qs.SpendTypeNotIn([]uint32{3, 4}...)
2024-01-31 10:02:20 +00:00
if user . CooperativeBusinessId == 1 { // 合作商为迪为
2022-11-22 07:42:48 +00:00
if m . SpendType != 0 {
qs = qs . SpendTypeEq ( m . SpendType )
2024-01-31 10:02:20 +00:00
if m . SpendType == 3 { // 如果是3-续费, 则查询是否为店员推广续费, 即: invite_form = 1
2022-11-23 08:20:05 +00:00
qs = qs . InviteFormEq ( 1 )
}
2024-01-31 10:02:20 +00:00
} else { // 如果没有指定spend_type, 则默认查询2-开通会员, 3-续费
2022-11-22 07:42:48 +00:00
qs = qs . SpendTypeIn ( [ ] uint32 { 2 , 3 } ... )
}
2024-01-31 10:02:20 +00:00
} else { // 如果不是迪为合作商, 则查询非3-续费, 4-升级的数据
2022-11-01 06:23:06 +00:00
qs = qs . SpendTypeNotIn ( [ ] uint32 { 3 , 4 } ... )
}
2022-08-04 03:57:21 +00:00
}
2021-11-01 03:32:23 +00:00
}
2024-01-31 10:02:20 +00:00
if m . MemberType == 0 && m . SpendType != 0 { // 被邀请用户为0-未注册用户, 操作类型不为0
2022-11-22 07:42:48 +00:00
qs = qs . SpendTypeEq ( m . SpendType )
2024-01-31 10:02:20 +00:00
if m . SpendType == 3 { // 如果是3-续费, 则查询是否为店员推广续费, 即: invite_form = 1
2022-11-23 08:20:05 +00:00
qs = qs . InviteFormEq ( 1 )
}
2022-11-22 07:42:48 +00:00
}
2021-11-01 03:32:23 +00:00
if m . StartTime != "" {
parse , err := time . Parse ( DateTimeFormat , m . StartTime )
if err != nil {
logger . Errorf ( "err:%#v" , err )
return resp , err
}
2024-01-31 10:02:20 +00:00
if m . MemberType == 2 { // 如果被邀请用户是2-会员,则比较会员注册时间,否则比较记录时间
2021-11-01 03:32:23 +00:00
qs = qs . MemberOpenTimeGte ( parse )
} else {
qs = qs . CreatedAtGte ( parse )
}
}
if m . EndTime != "" {
parse , err := time . Parse ( DateTimeFormat , m . EndTime )
if err != nil {
logger . Errorf ( "err:%#v" , err )
return resp , err
}
if m . MemberType == 2 {
qs = qs . MemberOpenTimeLte ( parse . AddDate ( 0 , 0 , 1 ) )
} else {
qs = qs . CreatedAtLte ( parse . AddDate ( 0 , 0 , 1 ) )
}
}
count , err := qs . Count ( )
if err != nil {
logger . Error ( "err:" , err )
return resp , err
}
resp . TotalPage = count / m . PageSize + 1
resp . Count = count
var invites [ ] UserInvite
2022-06-03 03:30:03 +00:00
//err = qs.Offset(page * m.PageSize).Limit(m.PageSize).OrderDescByID().All(&invites)
2022-08-04 03:57:21 +00:00
err = qs . OrderDescByCreatedAt ( ) . Offset ( page * m . PageSize ) . Limit ( m . PageSize ) . OrderDescByMemberOpenTime ( ) . All ( & invites )
2021-11-01 03:32:23 +00:00
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
return resp , err
}
2022-07-29 02:02:33 +00:00
//if len(invites) == 0 {
// return resp, nil
//}
2021-11-01 03:32:23 +00:00
uids := make ( [ ] uint32 , 0 )
2022-07-29 02:02:33 +00:00
//inviteMap := make(map[uint32]UserInvite, 0)
2021-11-01 03:32:23 +00:00
for i , _ := range invites {
uids = append ( uids , invites [ i ] . ToUid )
2022-07-29 02:02:33 +00:00
//inviteMap[invites[i].ToUid] = invites[i]
if invites [ i ] . MemberStatus != 1 {
invites [ i ] . CreatedAt = invites [ i ] . MemberOpenTime
}
}
if len ( uids ) == 0 {
return resp , nil
2021-11-01 03:32:23 +00:00
}
err = NewUserQuerySet ( DB ) . UidIn ( uids ... ) . All ( & list )
if err != nil {
logger . Error ( "err:" , err )
return resp , err
}
userMap := make ( map [ uint32 ] User , 0 )
for i , _ := range list {
userMap [ list [ i ] . Uid ] = list [ i ]
}
2022-07-29 02:02:33 +00:00
for i , _ := range invites {
2021-11-01 03:32:23 +00:00
user , ok1 := userMap [ uids [ i ] ]
2022-07-29 02:02:33 +00:00
if ok1 {
invites [ i ] . ToUser = & user
2021-11-01 03:32:23 +00:00
}
}
2022-07-29 02:02:33 +00:00
//users := make([]User, 0)
//users := make([]UserInviteList, 0)
//for i, _ := range uids {
// user, ok1 := userMap[uids[i]]
// invite, ok2 := inviteMap[uids[i]]
// if !ok1 || !ok2 {
// continue
// }
// userInvite := UserInviteList{
// User: user,
// UserInvite: invite,
// }
// users = append(users, userInvite)
//}
resp . List = invites
2021-11-01 03:32:23 +00:00
return resp , nil
}
func GetOrderSn ( ) string {
var orderSn string
for {
2022-04-08 02:28:50 +00:00
//orderSn = utils.GetSerialNo32HEXString()
orderSn = utils . GenSerialNo ( )
2021-11-01 03:32:23 +00:00
count , err := NewUserOpenMemberRecordQuerySet ( DB ) . OpenNoEq ( orderSn ) . Count ( )
if err != nil {
logger . Error ( "err:" , err )
}
if count == 0 {
break
}
}
return orderSn
}
2021-12-25 08:38:30 +00:00
2022-03-26 03:25:15 +00:00
func GetShareCardBillSn ( ) string {
var billSn string
for {
2022-04-08 02:28:50 +00:00
//billSn = utils.GetSerialNo32HEXString()
billSn = utils . GenSerialNo ( )
2022-03-26 03:25:15 +00:00
count , err := NewUserShareCardBillQuerySet ( DB ) . BillSnEq ( billSn ) . Count ( )
if err != nil {
logger . Error ( "err:" , err )
}
if count == 0 {
break
}
}
return billSn
}
2022-04-04 11:03:22 +00:00
func GetShareCardRetrieveOrderSn ( ) string {
var orderSn string
for {
2022-04-08 02:28:50 +00:00
//orderSn = utils.GetSerialNo32HEXString()
orderSn = utils . GenSerialNo ( )
2022-04-04 11:03:22 +00:00
count , err := NewShareCardRetrieveQuerySet ( DB ) . OrderSnEq ( orderSn ) . Count ( )
if err != nil {
logger . Error ( "err:" , err )
}
if count == 0 {
break
}
}
return orderSn
}
2021-12-25 08:38:30 +00:00
func ( m * User ) Edit ( ) {
err := DB . Save ( m ) . Error
if err != nil {
logger . Error ( "err:" , err )
}
return
}
func GetWxPayExpressFeeRefundRecord ( orderId uint32 ) ( string , error ) {
var openMemberRecord UserOpenMemberRecord
2022-05-28 06:18:27 +00:00
//err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderTypeEq(1).
//OrderDescByID().Limit(1).One(&openMemberRecord)
err := NewUserOpenMemberRecordQuerySet ( DB ) . OrderIdEq ( orderId ) . OrderDescByID ( ) .
Limit ( 1 ) . One ( & openMemberRecord )
2021-12-25 08:38:30 +00:00
if err != nil {
logger . Error ( "err:" , err )
return "" , err
}
return openMemberRecord . OpenNo , nil
}
func GetDepositRefundRecordList ( uid uint32 ) ( [ ] DepositRefundRecord , error ) {
var deposits [ ] DepositRefundRecord
err := NewDepositRefundRecordQuerySet ( DB ) . UidEq ( uid ) . OrderDescByID ( ) . All ( & deposits )
if err != nil {
logger . Error ( "deposit refund record err:" , err )
return deposits , err
}
return deposits , nil
}
2022-01-15 13:10:00 +00:00
var userMutexMap map [ string ] * sync . Mutex
func GetUserMutexMap ( ) map [ string ] * sync . Mutex {
if userMutexMap == nil {
userMutexMap = make ( map [ string ] * sync . Mutex , 0 )
}
return userMutexMap
}
func GetUserMutex ( mutexKey string ) * sync . Mutex {
mutexMap := GetUserMutexMap ( )
if v , ok := mutexMap [ mutexKey ] ; ok {
return v
} else {
mutexMap [ mutexKey ] = new ( sync . Mutex )
return mutexMap [ mutexKey ]
}
}
//func AuthLoginMutex(uid uint32) *sync.Mutex {
// return GetUserMutex(fmt.Sprintf("AuthLogin:%d", uid))
//}
2022-01-16 08:56:20 +00:00
var AuthLoginMutex = sync . Mutex { }
2022-01-26 08:02:21 +00:00
2022-02-26 06:29:39 +00:00
func OrderCardUserRentCard ( uid uint32 , count uint32 , memberConfig * MemberConfig , gdb * gorm . DB ) error {
2022-01-26 08:02:21 +00:00
//UserRentCard{}
2022-01-27 14:24:29 +00:00
if gdb == nil {
gdb = DB
}
2022-01-26 08:02:21 +00:00
var userRentCard UserRentCard
err := NewUserRentCardQuerySet ( DB ) . UidEq ( uid ) . One ( & userRentCard )
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
return err
}
if err == RecordNotFound {
user := GetUserByUid ( uid )
if user == nil {
logger . Error ( "user nil" )
return errors . New ( "user nil" )
}
if memberConfig == nil {
2023-07-14 09:29:05 +00:00
memberConfig , err = GetMemberConfig ( user . MemberLevel , user . MemberGenre )
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "GetMemberConfig err:" , err )
return err
}
}
rentCard := & UserRentCard {
Uid : uid ,
MemberLevel : user . MemberLevel ,
LevelRentCount : memberConfig . CardMax ,
HaveRentCount : uint32 ( count ) ,
CanRentCount : uint32 ( memberConfig . CardMax - count ) ,
Status : 0 ,
}
2022-01-27 14:24:29 +00:00
err := gdb . Create ( rentCard ) . Error
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "err" , err )
return err
}
return nil
}
2022-06-29 08:03:50 +00:00
sql := fmt . Sprintf (
"UPDATE user_rent_card SET have_rent_count=have_rent_count+%d ,can_rent_count=can_rent_count-%d WHERE uid = %d" ,
count , count , uid )
2022-01-27 14:24:29 +00:00
err = gdb . Exec ( sql ) . Error
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "err" , err )
return err
}
return nil
}
2022-02-26 06:29:39 +00:00
func ShoppingCartCreateOrder ( uid uint32 , cards [ ] CardInfo ) {
cardIds := make ( [ ] uint64 , 0 , len ( cards ) )
for i , _ := range cards {
cardIds = append ( cardIds , uint64 ( cards [ i ] . GameCardId ) )
}
err := NewShoppingCartQuerySet ( DB ) . UidEq ( uint64 ( uid ) ) . GameCardIdIn ( cardIds ... ) . Delete ( )
if err != nil {
logger . Error ( "err:" , err )
}
return
}
func ShoppingCartCreateOrderByOrder ( order Order ) {
var orderCards [ ] OrderCard
err := NewOrderCardQuerySet ( DB ) . OrderIdEq ( order . ID ) . All ( & orderCards )
if err != nil {
logger . Error ( "err:" , err . Error ( ) )
}
cardIds := make ( [ ] uint64 , 0 , len ( orderCards ) )
for i , _ := range orderCards {
cardIds = append ( cardIds , uint64 ( orderCards [ i ] . GameCardId ) )
}
err = NewShoppingCartQuerySet ( DB ) . UidEq ( uint64 ( order . Uid ) ) . GameCardIdIn ( cardIds ... ) . Delete ( )
if err != nil {
logger . Error ( "err:" , err )
}
return
}
func CreateUserRentCardByMemberLevel ( uid , memberLevel , cardMax uint32 ) {
var userRentCard UserRentCard
err := NewUserRentCardQuerySet ( DB ) . UidEq ( uid ) . One ( & userRentCard )
if err != nil && err != RecordNotFound {
logger . Error ( "UserRentCard err:" , err )
return
}
if err == RecordNotFound {
userRentCard = UserRentCard {
Uid : uid ,
MemberLevel : memberLevel ,
LevelRentCount : cardMax ,
HaveRentCount : 0 ,
CanRentCount : cardMax ,
Status : 0 ,
}
err := DB . Create ( & userRentCard ) . Error
if err != nil {
logger . Error ( "UserRentCard create err:" , err )
}
return
}
_ , err = NewUserRentCardQuerySet ( DB ) . IDEq ( userRentCard . ID ) . GetUpdater ( ) .
SetMemberLevel ( memberLevel ) .
SetCanRentCount ( cardMax - userRentCard . HaveRentCount ) .
SetLevelRentCount ( cardMax ) . UpdateNum ( )
if err != nil {
logger . Error ( "update err:" , err )
}
2022-03-26 03:25:15 +00:00
}
2022-02-26 06:29:39 +00:00
2022-03-26 03:25:15 +00:00
func MemberExpireDelaying ( uid uint32 ) ( map [ string ] interface { } , error ) {
ret := make ( map [ string ] interface { } , 0 )
ret [ "is_surrender" ] = 0
ret [ "expire_days" ] = 0
ret [ "daily_fee" ] = MemberExpireDelayDailyFee
ret [ "delay_amount" ] = 0
var user User
err := NewUserQuerySet ( DB ) . UidEq ( uid ) . One ( & user )
if err != nil {
logger . Error ( "user err:" , err )
return ret , err
}
var userMemberExpireDelay UserMemberExpireDelay
err = NewUserMemberExpireDelayQuerySet ( DB ) . UidEq ( uid ) . MemberExpireEq ( user . MemberExpire ) . One ( & userMemberExpireDelay )
if err != nil && err != RecordNotFound {
logger . Error ( "user member expire delay err:" , err )
return ret , err
}
if err == nil {
if userMemberExpireDelay . IsPay != 1 {
ret [ "is_surrender" ] = 1
ret [ "expire_days" ] = userMemberExpireDelay . ExpireDays
ret [ "daily_fee" ] = userMemberExpireDelay . DailyFee
ret [ "delay_amount" ] = userMemberExpireDelay . DelayAmount
}
return ret , nil
}
var orderCard OrderCard
err = NewOrderCardQuerySet ( DB ) . UidEq ( uid ) . CardStatusIn ( [ ] uint32 { 1 , 2 , 3 , 4 } ... ) . OrderDescByOrderId ( ) . One ( & orderCard )
2022-08-31 07:25:45 +00:00
if err != nil && err != RecordNotFound {
2022-03-26 03:25:15 +00:00
logger . Error ( "order card err:" , err )
return ret , err
}
2022-08-31 07:25:45 +00:00
if err == RecordNotFound {
var order Order
err = NewOrderQuerySet ( DB ) . UidEq ( uint64 ( uid ) ) . CardStatusIn ( [ ] uint8 { 1 , 2 , 3 , 4 } ... ) . OrderDescByID ( ) . Limit ( 1 ) . One ( & order )
if err != nil && err != RecordNotFound {
logger . Error ( "order card err:" , err )
return ret , err
}
orderCard . RevertTime = order . RevertTime
orderCard . CardStatus = uint32 ( order . CardStatus )
}
2022-03-26 03:25:15 +00:00
deadline := orderCard . RevertTime
2023-05-09 03:37:56 +00:00
if orderCard . CardStatus > 0 && orderCard . CardStatus != 4 {
2022-03-26 03:25:15 +00:00
deadline = time . Now ( )
}
if user . MemberLevel == 3 {
deadline = time . Unix ( 1647925200 , 0 )
}
if user . MemberExpire . AddDate ( 0 , 0 , 1 ) . Before ( deadline ) {
days := ( deadline . Unix ( ) - user . MemberExpire . Unix ( ) ) / 24 / 3600
if user . MemberLevel != 3 || ( user . MemberLevel == 3 && days > 7 ) {
ret [ "is_surrender" ] = 1
ret [ "expire_days" ] = days
ret [ "delay_amount" ] = days * MemberExpireDelayDailyFee
delay := & UserMemberExpireDelay {
Uid : uid ,
MemberExpire : user . MemberExpire ,
DelayAmount : uint32 ( days ) * MemberExpireDelayDailyFee ,
ExpireDays : uint32 ( days ) ,
DailyFee : MemberExpireDelayDailyFee ,
IsPay : 0 ,
}
err := delay . Create ( DB )
if err != nil {
logger . Error ( "delay create err:" , err )
}
}
}
return ret , nil
2022-02-26 06:29:39 +00:00
}
2022-05-10 07:17:34 +00:00
func ( m * OperationLog ) AddLog ( ) {
defer func ( ) {
if err := recover ( ) ; err != nil {
fmt . Println ( "recover err:" , err )
}
} ( )
go func ( ) {
err := DB . Create ( m ) . Error
if err != nil {
logger . Error ( "create operation log err:" )
}
} ( )
}
type InviteMemberReportListReq struct {
PageNum int ` json:"page_num" `
PageSize int ` json:"page_size" `
Uid uint32 ` json:"uid" `
}
2024-01-31 10:02:20 +00:00
type InviteMemberReportListResp struct {
CurPage int ` json:"cur_page" `
TotalPage int ` json:"total_page" `
2024-07-03 11:08:28 +00:00
Count int ` json:"count" ` // 总记录数
2024-01-31 10:02:20 +00:00
List [ ] InviteMemberReport ` json:"list" `
}
2024-07-03 11:08:28 +00:00
func ( m * InviteMemberReportListReq ) List ( ) ( [ ] InviteMemberReport , int , int , error ) {
2022-05-10 07:17:34 +00:00
var memberReport [ ] InviteMemberReport
qs := NewInviteMemberReportQuerySet ( DB ) . UidEq ( m . Uid )
count , err := qs . Count ( )
if err != nil {
logger . Error ( "err:" , err )
2024-07-03 11:08:28 +00:00
return memberReport , 0 , 0 , err
2022-05-10 07:17:34 +00:00
}
page := m . PageNum - 1
if page < 0 {
page = 0
}
if m . PageSize == 0 {
m . PageSize = 10
}
totalPage := count / m . PageSize + 1
err = qs . Offset ( page * m . PageSize ) . Limit ( m . PageSize ) . OrderDescByID ( ) . All ( & memberReport )
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
2024-07-03 11:08:28 +00:00
return memberReport , totalPage , count , err
2022-05-10 07:17:34 +00:00
}
assistant := GetUserByUid ( m . Uid )
cooperative := new ( CooperativeBusiness )
cooperative . ID = assistant . CooperativeBusinessId
cooperative . SetAssistantMemberDeductConfig ( uint32 ( assistant . StoreId ) )
2022-05-12 05:42:45 +00:00
fmt . Println ( "CooperativeBusinessId:" , assistant . CooperativeBusinessId , assistant . StoreId )
fmt . Println ( "CooperativeAssistantMemberDeduct:" , cooperative . CooperativeAssistantMemberDeduct )
2022-05-10 07:17:34 +00:00
if len ( memberReport ) > 0 {
memberReport [ len ( memberReport ) - 1 ] . GoldDeduct = cooperative . CooperativeAssistantMemberDeduct . GoldDeduct
memberReport [ len ( memberReport ) - 1 ] . PlatinumDeduct = cooperative . CooperativeAssistantMemberDeduct . PlatinumDeduct
memberReport [ len ( memberReport ) - 1 ] . BlackGoldDeduct = cooperative . CooperativeAssistantMemberDeduct . BlackGoldDeduct
report := memberReport [ len ( memberReport ) - 1 ]
2022-05-12 05:42:45 +00:00
fmt . Println ( "report:" , report )
2022-05-10 07:17:34 +00:00
memberReport [ len ( memberReport ) - 1 ] . DeductAmount += report . GoldCount * report . GoldDeduct
memberReport [ len ( memberReport ) - 1 ] . DeductAmount += report . PlatinumCount * report . PlatinumDeduct
memberReport [ len ( memberReport ) - 1 ] . DeductAmount += report . BlackGoldCount * report . BlackGoldDeduct
}
2024-07-03 11:08:28 +00:00
return memberReport , totalPage , count , nil
2022-05-10 07:17:34 +00:00
}
2022-05-12 05:42:45 +00:00
func GetUserMap ( ids [ ] uint32 ) ( map [ uint32 ] * User , error ) {
userMap := make ( map [ uint32 ] * User , 0 )
2022-05-13 09:35:10 +00:00
if len ( ids ) == 0 {
return userMap , nil
}
2022-05-12 05:42:45 +00:00
var users [ ] User
err := NewUserQuerySet ( DB ) . UidIn ( ids ... ) . All ( & users )
if err != nil {
logger . Error ( "user err:" , err )
return userMap , err
}
for i , _ := range users {
userMap [ users [ i ] . Uid ] = & users [ i ]
}
return userMap , nil
}
2022-05-28 06:18:27 +00:00
func ( u * User ) SetVm ( ) error {
var userVm UserVm
err := NewUserVmQuerySet ( DB ) . UidEq ( u . Uid ) . One ( & userVm )
if err != nil {
log . Error ( ) . Msgf ( "UserVm err:%#v" , err )
return err
}
u . UserVm = & userVm
return nil
}
2022-06-03 03:30:03 +00:00
func UserInviteListSetToUser ( list [ ] UserInvite ) {
2022-07-29 02:02:33 +00:00
//ids := make([]uint32, 0, len(list))
//for i, _ := range list {
// ids = append(ids, list[i].ToUid)
//}
//
//userMap, err := GetUserMap(ids)
//if err != nil {
// logger.Error("user map err:", err)
// return
//}
2022-06-03 03:30:03 +00:00
2022-07-29 02:02:33 +00:00
//for i, _ := range list {
// v, ok := userMap[list[i].ToUid]
// if ok {
//
// list[i].ToUser = &UserLess{
// Uid: v.Uid,
// MemberOpenTime: v.OpenMemberTime,
// MemberLevel: v.MemberLevel,
// }
// }
//}
2022-06-03 03:30:03 +00:00
}
2022-07-25 04:02:53 +00:00
// gen:qs
type MemberStatisticDaily struct {
Model
MemberLevel uint32 ` json:"member_level" `
Date string ` json:"date" `
DateTime time . Time ` json:"date_time" `
Increase uint32 ` json:"increase" `
Expire uint32 ` json:"expire" `
Net uint32 ` json:"net" `
Accumulative uint32 ` json:"accumulative" `
}
2022-11-01 06:23:06 +00:00
2024-01-31 10:02:20 +00:00
// StorePromotion 记录促销情况
2022-11-01 06:23:06 +00:00
func StorePromotion ( inviteUid , uid uint32 , inviteUser , user * User ) error {
//inviteUid := uint32(0)
//uid := uint32(0)
if inviteUser == nil {
inviteUser = GetUserByUid ( inviteUid )
}
if user == nil {
user = GetUserByUid ( uid )
}
if user == nil || inviteUser == nil {
logger . Error ( "user inviteUser is nil" )
return errors . New ( "user inviteUser is nil" )
}
2024-05-27 11:37:57 +00:00
// 目前在领取优惠券的时候做了邀请记录,这里不再重复记录
//if inviteUser.UserType == 2 && user.Uid != 0 { // 是店员邀请并且用户id不为空
// nowTime := time.Now()
// effectiveStoreInfo, err := GetUserEffectiveStore(inviteUid)
// if err != nil {
// return err
// }
//
// exist, err := QueryRecordExist(
// fmt.Sprintf("SELECT * FROM user_invite_record WHERE to_uid = %d AND from_uid = %d ",
// user.Uid, inviteUid))
// if err != nil {
// logger.Error("query err:", err)
// return err
// }
// if !exist {
// firstInviteRecord := &UserInviteRecord{
// ToUid: user.Uid,
// FromUid: inviteUid,
// StoreId: effectiveStoreInfo.StoreID,
// Action: 2, // 激活邀请
// SpendType: 1, // 未开通
// MemberLevel: 0, // 未开通会员
// First: 1, // 首次邀请
// Scan: 1,
// ActionTime: nowTime,
// }
// err = DB.Create(firstInviteRecord).Error
// if err != nil {
// logger.Error("create user invite record err:", err)
// }
// }
// // 扫码记录
// inviteRecord := &UserInviteRecord{
// ToUid: user.Uid,
// FromUid: inviteUid,
// StoreId: effectiveStoreInfo.StoreID,
// Action: 1, // 未激活
// SpendType: 1, // 未开通
// MemberLevel: 0,
// First: 0,
// Scan: 1,
// ActionTime: nowTime,
// }
// err = DB.Create(inviteRecord).Error
// if err != nil {
// logger.Error("create user invite record err:", err)
// }
// // UserInvite 邀请主要
// var inviteNew UserInvite
// inviteErr := NewUserInviteQuerySet(DB).ToUidEq(user.Uid).FromUidEq(inviteUid).ActionEq(1).
// SpendTypeEq(1).One(&inviteNew)
// if inviteErr != nil && inviteErr != RecordNotFound {
// // 是否存在未开通
// logger.Error("user invite err:", err)
// }
// //fmt.Println("inviteErr:", inviteErr)
// //fmt.Printf("inviteNew:%#v \n", inviteNew)
// if inviteErr == RecordNotFound {
// memberLevel := user.MemberLevel
// if memberLevel == 0 {
// memberLevel = MemberLevelUser
// }
// invite := &UserInvite{
// FromUid: inviteUid, // 邀请人用户id
// UserType: inviteUser.UserType, // 邀请人用户类型
// StoreId: effectiveStoreInfo.StoreID, // 邀请人门店id
// MemberOpenTime: nowTime, // 开通会员时间
// MemberType: memberLevel, // 被邀请用户类型
// MemberStatus: 1, // 被邀请用户会员状态 1-未开通
// ToUid: user.Uid, // 被邀请用户id
// Action: 1, // 未激活
// SpendType: 1, // 未开通
// UserInviteRecordId: inviteRecord.ID, // 邀请记录id
// FirstInvite: 0, // TODO 首次邀请id
// Scan: 1, // 扫码次数
// InviteForm: 1, // 1-店员邀请码续费
// }
// fmt.Println("创建邀请:", invite)
// if err := invite.Create(DB); err != nil {
// logger.Error(err)
// return err
// }
// }
//
// if inviteErr == nil {
// err = NewUserInviteQuerySet(DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(nowTime).
// SetUserInviteRecordId(inviteRecord.ID).SetInviteForm(1).Update()
// if err != nil {
// logger.Error("from uid update user invite err:", err, inviteUid)
// }
// }
//}
2022-11-01 06:23:06 +00:00
return nil
}
2023-07-14 09:29:05 +00:00
func GetMemberGenreFromLevel ( level uint32 ) uint32 {
switch level {
2023-11-30 07:07:08 +00:00
case 4 : //白金
2023-07-14 09:29:05 +00:00
return 400
2023-11-30 07:07:08 +00:00
case 5 : //黑金
2023-07-14 09:29:05 +00:00
return 500
}
return 0
}
2022-11-01 06:23:06 +00:00
//// todo
//var userCoupon model.UserCoupon
//err := model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).One(&userCoupon)
//if err != nil {
//logger.Error("user coupon err:", err)
//}
// // UserInviteRecord
// // user_invite
// if userCoupon.PromotionalSales == 0 {
// logger.Error("promotional sales is null")
// } else {
// inviteCouponUser := model.GetUserByUid(userCoupon.PromotionalSales)
// if inviteCouponUser != nil {
// userCouponInvite := &model.UserInvite{
// FromUid: userCoupon.PromotionalSales,
// UserType: inviteCouponUser.UserType, // user.UserType
// StoreId: inviteCouponUser.StoreId,
// MemberOpenTime: newTime,
// MemberType: 2,
// MemberStatus: 2,
// ToUid: user.Uid,
// StoreType: inviteCouponUser.StoreType,
// Action: 1,
// SpendType: spendType,
// MemberLevel: record.MemberLevel,
// UserInviteRecordId: 0,
// FirstInvite: 1,
// }
//
// err = userCouponInvite.Create(model.DB)
// if err != nil {
// logger.Error("create user coupon invite err:", err)
// }
// }
// }
2024-01-31 10:02:20 +00:00
type MemberType int
const (
Unknown MemberType = iota
FirstInvite // 1-首次邀请
OpenAnnualGold // 2-开通年费黄金
OpenQuarterGold // 3-开通季度黄金
OpenHalfYearGold // 4-开通半年黄金
OpenAnnualPlatinum // 5-开通年费白金
OpenAnnualBlack // 6-开通年费黑金
RenewAnnualGoldIntervene // 7-续费年费黄金(干预)
RenewAnnualPlatinumIntervene // 8-续费年费白金(干预)
RenewAnnualBlackIntervene // 9-续费年费黑金(干预)
RenewAnnualGoldAuto // 10-续费年费黄金(自动)
RenewQuarterGoldAuto // 11-续费季度黄金(自动)
RenewHalfYearGoldAuto // 12-续费半年黄金(自动)
RenewAnnualPlatinumAuto // 13-续费年费白金(自动)
RenewAnnualBlackAuto // 14-续费年费黑金(自动)
UpgradeGoldToPlatinumIntervene // 15-黄金→白金(干预)
UpgradeGoldToBlackIntervene // 16-黄金→黑金(干预)
UpgradePlatinumToBlackIntervene // 17-白金→黑金(干预)
UpgradeGoldToPlatinumAuto // 18-黄金→白金(自动)
UpgradeGoldToBlackAuto // 19-黄金→黑金(自动)
UpgradePlatinumToBlackAuto // 20-白金→黑金(自动)
)
type NewUserInviteRecordReq struct {
PageNum int ` json:"pageIndex" `
PageSize int ` json:"pageSize" `
FromUid uint32 ` json:"from_uid" ` // 邀请人ID
ToUid uint32 ` json:"to_uid" ` // 用户ID
2024-05-27 11:37:57 +00:00
RecordType [ ] uint32 ` json:"record_type" ` // 记录类型 1-首次邀请, 2-开通年费黄金, 3-开通季度黄金, 4-开通半年黄金, 5-开通年费白金, 6-开通年费黑金, 7-续费年费黄金( 干预) , 8-续费年费白金( 干预) , 9-续费年费黑金( 干预) , 10-续费年费黄金(自动), 11-续费季度黄金( 自动) , 12-续费半年黄金( 自动) , 13-续费年费白金( 自动) , 14-续费年费黑金( 自动) , 15-黄金→白金(干预), 16-黄金→黑金( 干预) , 17-白金→黑金( 干预) , 18-黄金→白金( 自动) , 19-黄金→黑金( 自动) , 20-白金→黑金(自动)
2024-01-31 10:02:20 +00:00
RecordStartTime time . Time ` json:"record_start_time" ` // 记录时间-开始时间
RecordEndTime time . Time ` json:"record_end_time" ` // 记录时间-结束时间
}
type UserInviteRecordListResp struct {
Count int ` json:"count" ` // 总记录数
PageIndex int ` json:"pageIndex" ` // 页码
List [ ] UserInviteRecordListData ` json:"list" `
}
type UserInviteRecordListData struct {
InviteUid uint32 ` json:"invite_uid" ` // 邀请人ID
UserUid uint32 ` json:"user_uid" ` // 用户ID
RecordType uint32 ` json:"record_type" ` // 记录类型
RecordTime time . Time ` json:"record_time" ` // 记录时间
MemberLevel uint32 ` json:"member_level" ` // 会员等级: 1-普通 2-黄金 4-白金 5-黑金
}
func UpdateUserInviteRecordRenewHide ( ) error {
err := NewUserInviteRecordQuerySet ( DB ) . SpendTypeEq ( 3 ) . ScanEq ( 0 ) . RenewHideNe ( 1 ) .
GetUpdater ( ) . SetRenewHide ( 1 ) . Update ( )
if err != nil {
logger . Errorf ( "update renew_hide err:" , err )
return err
}
return nil
}
func ( m * NewUserInviteRecordReq ) NewList ( ) ( * UserInviteRecordListResp , error ) {
var records [ ] UserInviteRecord
err := UpdateUserInviteRecordRenewHide ( )
if err != nil {
logger . Errorf ( "err:" , err )
return nil , err
}
page := m . PageNum - 1
pageSize := m . PageSize
if page < 0 {
page = 0
}
if pageSize == 0 {
pageSize = 10
}
qs := NewUserInviteRecordQuerySet ( DB ) . ActionEq ( 2 )
if m . FromUid != 0 {
qs = qs . FromUidEq ( m . FromUid )
}
if m . ToUid != 0 {
qs = qs . ToUidEq ( m . ToUid )
}
2024-05-27 11:37:57 +00:00
//if m.RecordType != 0 {
// switch m.RecordType {
// case 1: // 首次邀请
// qs = qs.FirstEq(1).SpendTypeEq(1)
// case 2: // 开通年费黄金
// qs = qs.MemberLevelEq(2).SpendTypeEq(2)
// case 3: // 开通季度黄金
// qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(201)
// case 4: // 开通半年黄金
// qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(202)
// case 5: // 开通年费白金
// qs = qs.MemberLevelEq(4).SpendTypeEq(2)
// case 6: // 开通年费黑金
// qs = qs.MemberLevelEq(5).SpendTypeEq(2)
//
// case 7: // 续费年费黄金(干预)
// qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(0)
// case 8: // 续费年费白金(干预)
// qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(0)
// case 9: // 续费年费黑金(干预)
// qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(0)
//
// case 10: // 续费年费黄金(自动)
// qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1)
// case 11: // 续费季度黄金(自动)
// qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1).
// MemberGenreEq(201)
// case 12: // 续费半年黄金(自动)
// qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1).
// MemberGenreEq(202)
// case 13: // 续费年费白金(自动)
// qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(1)
// case 14: // 续费年费黑金(自动)
// qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(1)
//
// case 15: //黄金→白金(干预)
// qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(0)
// case 16: //黄金→黑金(干预)
// qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0).
// MemberGenreIn(200, 201, 202)
// case 17: //白金→黑金(干预)
// qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0).
// MemberGenreNotIn(200, 201, 202)
//
// case 18: //黄金→白金(自动)
// qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(1)
// case 19: //黄金→黑金(自动)
// qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1).
// MemberGenreIn(200, 201, 202)
// case 20: //白金→黑金(自动)
// qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1).
// MemberGenreNotIn(200, 201, 202)
// }
//}
if len ( m . RecordType ) != 0 {
var recordTypeConditions [ ] string
for _ , t := range m . RecordType {
switch t {
case 1 :
recordTypeConditions = append ( recordTypeConditions , "(first=1 AND spend_type=1)" )
case 2 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=2)" )
case 3 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=201)" )
case 4 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=202)" )
case 5 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=4 AND spend_type=2)" )
case 6 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=2)" )
case 7 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=0)" )
case 8 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=0)" )
case 9 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=0)" )
case 10 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1)" )
case 11 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=201)" )
case 12 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=202)" )
case 13 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=1)" )
case 14 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=1)" )
case 15 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=0)" )
case 16 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre in (200,201,202))" )
case 17 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre not in (200,201,202))" )
case 18 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=1)" )
case 19 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre in (200,201,202))" )
case 20 :
recordTypeConditions = append ( recordTypeConditions , "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre not in (200,201,202))" )
}
}
// 拼接多选条件
if len ( recordTypeConditions ) > 0 {
recordTypeQuery := strings . Join ( recordTypeConditions , " OR " )
qs = qs . Where ( recordTypeQuery )
2024-01-31 10:02:20 +00:00
}
}
2024-05-27 11:37:57 +00:00
2024-01-31 10:02:20 +00:00
if ! m . RecordStartTime . IsZero ( ) {
qs = qs . ActionTimeGte ( m . RecordStartTime )
}
if ! m . RecordEndTime . IsZero ( ) {
qs = qs . ActionTimeLte ( m . RecordStartTime )
}
err = qs . Select ( "user_invite_record.*" ) . OrderDescByActionTime ( ) . Offset ( page * pageSize ) .
Limit ( pageSize ) . All ( & records )
if err != nil && err != RecordNotFound {
logger . Errorf ( "err:" , err )
return nil , err
}
var count int
count , err = qs . Count ( )
if err != nil {
logger . Errorf ( "err:" , err )
return nil , err
}
resp := new ( UserInviteRecordListResp )
var listData [ ] UserInviteRecordListData
for _ , item := range records {
data := UserInviteRecordListData {
InviteUid : item . FromUid ,
UserUid : item . ToUid ,
RecordType : uint32 ( CalculateMemberType ( item . SpendType , item . RenewHide , item . MemberGenre , item . MemberLevel ) ) ,
RecordTime : item . ActionTime ,
MemberLevel : item . MemberLevel ,
}
listData = append ( listData , data )
}
resp . List = listData
resp . PageIndex = m . PageNum
resp . Count = count
return resp , nil
}
// CalculateMemberType 匹配记录类型
func CalculateMemberType ( spendType , renewHide , memberGenre , memberLevel uint32 ) MemberType {
switch {
case spendType == 1 :
return FirstInvite
case spendType == 2 :
switch memberLevel {
case 2 :
return OpenAnnualGold
case 4 :
return OpenAnnualPlatinum
case 5 :
return OpenAnnualBlack
}
case spendType == 3 && renewHide == 0 :
switch memberLevel {
case 2 :
return RenewAnnualGoldIntervene
case 4 :
return RenewAnnualPlatinumIntervene
case 5 :
return RenewAnnualBlackIntervene
}
case spendType == 3 && renewHide == 1 :
switch memberLevel {
case 2 :
return RenewAnnualGoldAuto
case 4 :
return RenewAnnualPlatinumAuto
case 5 :
return RenewAnnualBlackAuto
}
case spendType == 4 && renewHide == 0 :
switch memberLevel {
case 4 :
return UpgradeGoldToPlatinumIntervene
case 5 :
if memberGenre == 200 || memberGenre == 201 || memberGenre == 202 {
return UpgradeGoldToBlackIntervene
}
return UpgradePlatinumToBlackIntervene
}
case spendType == 4 && renewHide == 1 :
switch memberLevel {
case 4 :
return UpgradeGoldToPlatinumAuto
case 5 :
if memberGenre == 200 {
return UpgradeGoldToBlackAuto
}
return UpgradePlatinumToBlackAuto
}
case spendType == 2 && memberLevel == 2 && memberGenre == 201 :
return OpenQuarterGold
case spendType == 2 && memberLevel == 2 && memberGenre == 202 :
return OpenHalfYearGold
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 201 :
return RenewQuarterGoldAuto
case spendType == 3 && renewHide == 1 && memberLevel == 2 && memberGenre == 202 :
return RenewHalfYearGoldAuto
}
return Unknown
}