package model import ( "encoding/json" "errors" "github.com/codinl/go-logger" "time" ) // gen:qs // //go:generate goqueryset -in config.go type Config struct { Model Name string `gorm:"unique_index;not null"` Value string `gorm:"size:65535;not null"` } func (m *Config) TableName() string { return "config" } type PayConfig struct { MemberFee uint32 `json:"member_fee"` DepositFee uint32 `json:"deposit_fee"` NotifyUrl string `json:"notify_url"` RefundNotifyUrl string `json:"refund_notify_url"` } const ( ConfigNamePay = "pay_config" // 支付配置 ConfigNameMember = "member_config" // 会员配置 ConfigNameMemberVm = "member_vm_config" // 会员积分配置 ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置 ConfigActivityRenewal = "activity_renewal_config" // 活动配置 ConfigRecycleCard = "recycle_card_config" // 回收卡配置 ConfigPostagePackageFee = "postage_package_fee_config" // 运费包费 ConfigPaymentGenre = "payment_genre_config" // 支付方式 ) func PayConfigInfo() (*PayConfig, error) { payConfig := new(PayConfig) var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigNamePay).One(&configAllocation) if err != nil { logger.Error("err:", err) return payConfig, err } err = json.Unmarshal([]byte(configAllocation.Value), payConfig) if err != nil { logger.Error("err:", err) return payConfig, err } return payConfig, nil } type MemberConfig struct { MemberLever uint32 `json:"member_lever"` // 会员等级 MemberFee uint32 `json:"member_fee"` // 会员费 MemberDeposit uint32 `json:"member_deposit"` // 押金 CardMax uint32 `json:"card_max"` // 最多可租卡数量 } func MemberConfigInfo() ([]MemberConfig, error) { var memberConfigs []MemberConfig var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigNameMember).One(&configAllocation) if err != nil { logger.Error("err:", err) return memberConfigs, err } err = json.Unmarshal([]byte(configAllocation.Value), &memberConfigs) if err != nil { logger.Error("err:", err) return memberConfigs, err } return memberConfigs, nil } func GetMemberConfig(level uint32, genre uint32) (*MemberConfig, error) { if level == 3 { level = 2 } if level == 2 && (genre == 201 || genre == 202) { // 判断是否为黄金短期会员 v, ok := ShortMemberConfigMap[genre] if !ok { logger.Error("genre err") return nil, errors.New("genre err") } return v, nil } info, err := MemberConfigInfo() if err != nil { return nil, err } for _, config := range info { if config.MemberLever == level { return &config, nil } } return nil, errors.New("level err") } // 会员费配置 //var ShortMemberConfigMap = map[uint32]*MemberConfig{ // 201: { // MemberLever: 2, // MemberFee: 1, // MemberDeposit: 3, // CardMax: 1, // }, // 202: { // MemberLever: 2, // MemberFee: 2, // MemberDeposit: 3, // CardMax: 1, // }, //} var ShortMemberConfigMap = map[uint32]*MemberConfig{ 201: { //短期黄金会员-90天 MemberLever: 2, MemberFee: 19900, MemberDeposit: 30000, CardMax: 1, }, 202: { //短期黄金会员-180天 MemberLever: 2, MemberFee: 29900, MemberDeposit: 30000, CardMax: 1, }, } type MemberVmConfig struct { MemberLever uint32 `json:"member_lever"` // 会员等级 MemberVm uint32 `json:"member_vm"` Invite1Vm uint32 `json:"invite_1_vm"` Invite2Vm uint32 `json:"invite_2_vm"` AutomationMemberVm uint32 `json:"automation_member_vm"` } func memberVmConfigInfo() ([]MemberVmConfig, error) { var memberVmConfigs []MemberVmConfig var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigNameMemberVm).One(&configAllocation) if err != nil { logger.Error("err:", err) return memberVmConfigs, err } err = json.Unmarshal([]byte(configAllocation.Value), &memberVmConfigs) if err != nil { logger.Error("err:", err) return memberVmConfigs, err } return memberVmConfigs, nil } func GetMemberVmConfig(level uint32) (*MemberVmConfig, error) { if level == 3 { return nil, errors.New("level is 3") } info, err := memberVmConfigInfo() if err != nil { return nil, err } for _, config := range info { if config.MemberLever == level { return &config, nil } } return nil, errors.New("level err") } type AttendanceVmConfig struct { VmDay1 uint32 `json:"vm_day_1"` VmDay2 uint32 `json:"vm_day_2"` VmDay3 uint32 `json:"vm_day_3"` VmDay4 uint32 `json:"vm_day_4"` VmDay5 uint32 `json:"vm_day_5"` VmDay6 uint32 `json:"vm_day_6"` VmDay7 uint32 `json:"vm_day_7"` } func AttendanceVmConfigInfo() (*AttendanceVmConfig, error) { attendanceConfig := new(AttendanceVmConfig) var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigNameAttendanceVm).One(&configAllocation) if err != nil { logger.Error("err:", err) return attendanceConfig, err } err = json.Unmarshal([]byte(configAllocation.Value), attendanceConfig) if err != nil { logger.Error("err:", err) return attendanceConfig, err } return attendanceConfig, nil } func (m *AttendanceVmConfig) Vm(days uint32) uint32 { vm := uint32(0) switch days % 7 { case 1: vm = m.VmDay1 case 2: vm = m.VmDay2 case 3: vm = m.VmDay3 case 4: vm = m.VmDay4 case 5: vm = m.VmDay5 case 6: vm = m.VmDay6 case 0: vm = m.VmDay7 } return vm } type ActivityRenewalConfig struct { CouponValidity int `json:"coupon_validity"` ActivityContinuity int `json:"activity_continuity"` PopTrap int `json:"pop_trap"` } func ActivityRenewalConfigInfo() (ActivityRenewalConfig, error) { activityRenewalConfig := ActivityRenewalConfig{} var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigActivityRenewal).One(&configAllocation) if err != nil { logger.Error("err:", err) return activityRenewalConfig, err } err = json.Unmarshal([]byte(configAllocation.Value), &activityRenewalConfig) if err != nil { logger.Error("err:", err) return activityRenewalConfig, err } return activityRenewalConfig, nil } func GetActivityRenewalConfig() ActivityRenewalConfig { info, err := ActivityRenewalConfigInfo() if err != nil { logger.Error("info err:", err) return info } return info } type RecycleCardConfig struct { RebateRate uint32 `json:"rebate_rate"` } func RecycleCardConfigInfo() (RecycleCardConfig, error) { var recycleConfig RecycleCardConfig var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigRecycleCard).One(&configAllocation) if err != nil { logger.Error("err:", err) return recycleConfig, err } err = json.Unmarshal([]byte(configAllocation.Value), &recycleConfig) if err != nil { logger.Error("err:", err) return recycleConfig, err } return recycleConfig, nil } type PostagePackageFeeConfig struct { PostagePackageFee uint32 `json:"postage_package_fee"` } func PostagePackageFeeConfigInfo() (PostagePackageFeeConfig, error) { postagePackageFeeConfig := PostagePackageFeeConfig{} var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigPostagePackageFee).One(&configAllocation) if err != nil { logger.Error("err:", err) return postagePackageFeeConfig, err } err = json.Unmarshal([]byte(configAllocation.Value), &postagePackageFeeConfig) if err != nil { logger.Error("err:", err) return postagePackageFeeConfig, err } return postagePackageFeeConfig, nil } func GetPostagePackageMemberDuration(level uint32) uint32 { switch level { case 2: return 90 case 4: return 51 case 5: return 24 } return 0 } const ( PaymentGenreWx = 1 PaymentGenreHm = 2 ) type PaymentGenreConfig struct { Ahead uint32 `json:"ahead"` PointDate uint32 `json:"point_date"` Post uint32 `json:"post"` } func GetPaymentGenre() (uint32, error) { paymentGenreFeeConfig := PaymentGenreConfig{} var configAllocation Config err := NewConfigQuerySet(DB).NameEq(ConfigPaymentGenre).One(&configAllocation) if err != nil { logger.Error("err:", err) return 0, err } err = json.Unmarshal([]byte(configAllocation.Value), &paymentGenreFeeConfig) if err != nil { logger.Error("err:", err) return 0, err } if time.Now().Day() < int(paymentGenreFeeConfig.PointDate) { return paymentGenreFeeConfig.Ahead, nil } else { return paymentGenreFeeConfig.Post, nil } } //type ConfigInterface interface { // Encode() string //} //type CheckConfig struct { // Check uint8 `json:"check"` //} //func (c *CheckConfig) Encode() string { // configBytes, err := json.Marshal(c) // if err != nil { // return "" // } // return string(configBytes) //} // //type AutoChargeMobileConfig struct { // IsOpen uint8 `json:"is_open"` //} // //func (c *AutoChargeMobileConfig) Encode() string { // configBytes, err := json.Marshal(c) // if err != nil { // return "" // } // return string(configBytes) //} // //type StepConfig struct { // InitStep uint32 `json:"init_step"` // InviteStepAward uint32 `json:"invite_step_award"` // StepDayLimit uint32 `json:"step_day_limit"` // StepToVmRate float64 `json:"step_to_vm_rate"` // InviteAwardRate float64 `json:"invite_award_rate"` // InviteAwardRateLimit float64 `json:"invite_award_rate_limit"` // SuperMemberRm uint32 `json:"super_member_rm"` //} // //func (c *StepConfig) Encode() string { // configBytes, err := json.Marshal(c) // if err != nil { // return "" // } // return string(configBytes) //} // ////type FBConfig struct { //// AssistanceValidityTerm uint32 `json:"assistance_validity_term"` // 邀请倒计时 //// Postage uint32 `json:"postage"` // 邮费 //// AssistanceFee uint32 `json:"assistance_fee"` // 每人拆红包 //// OrderAssistanceFee uint32 `json:"order_assistance_fee"` // 订单邀请拆红包 //// ActivityExpire string `json:"activity_expire"` // 活动过期时间 ////} //// ////type FOConfig struct { //// ActivityExpire string `json:"activity_expire"` // 活动过期时间 ////} //// ////func (c *FBConfig) Encode() string { //// configBytes, err := json.Marshal(c) //// if err != nil { //// return "" //// } //// return string(configBytes) ////} // //type InviteLotteryConfig struct { // Name string `json:"name"` // 名字 // Image string `json:"image"` // 图片 // DrawTime uint32 `json:"draw_time"` // 开奖的分钟数 // SponsorId uint32 `json:"sponsor_id"` // 赞助商ID // NeedNum uint32 `json:"need_num"` // 需要的邀请数 // IsShow uint8 `json:"is_show"` // 上下架 //} // //func (c *InviteLotteryConfig) Encode() string { // configBytes, err := json.Marshal(c) // if err != nil { // return "" // } // return string(configBytes) //} // ////type TargetUserConfig struct { //// List map[uint32]bool `json:"list"` ////} //// ////func (c *TargetUserConfig) Encode() string { //// configBytes, err := json.Marshal(c) //// if err != nil { //// return "" //// } //// return string(configBytes) ////}