2019-04-22 02:59:20 +00:00

246 lines
6.2 KiB
Go

package model
import (
"fmt"
"math"
"strconv"
colapi "go-common/app/service/main/coupon/api"
col "go-common/app/service/main/coupon/model"
"go-common/library/time"
)
// vip_price_config suit_type
const (
AllUser int8 = iota
OldVIP
NewVIP
OldSubVIP
NewSubVIP
OldPackVIP
NewPackVIP
)
// order type
const (
NoRenew int8 = iota
OtherRenew
IOSRenew
)
// order type by month for vip_user_discount_history table
const (
OneMonthSub int8 = iota + 1
ThreeMonthSub
OneYearSub
)
// const month
const (
OneMonth = int8(1)
ThreeMonth = int8(3)
OneYear = int8(12)
)
// const vip_price_config beforeSuitType
const (
All int8 = iota
VIP
Sub
Pack
)
// const panel month sort
const (
PanelMonthDESC int8 = iota
PanelMonthASC
)
// const PanelType
const (
PanelTypeNormal = "normal"
PanelTypeFriend = "friend"
PanelTypeCheck = "check"
PanelTypeEle = "ele"
)
const (
// PlatVipPriceConfigOther 其他平台
PlatVipPriceConfigOther int64 = iota + 1
// PlatVipPriceConfigIOS IOS平台
PlatVipPriceConfigIOS
// PlatVipPriceConfigIPADHD ipad hd平台
PlatVipPriceConfigIPADHD
// PlatVipPriceConfigFriendsGift 好友赠送
PlatVipPriceConfigFriendsGift
// PlatVipPriceConfigInternational 安卓国际版
PlatVipPriceConfigInternational
// PlatVipPriceConfigIphoneB iphone蓝版
PlatVipPriceConfigIphoneB
// PlatVipPriceConfigCheck 审核态价格
PlatVipPriceConfigCheck = 20
)
// const select
const (
PanelNotSelected int32 = iota
PanelSelected
)
// VipPriceConfig price config.
type VipPriceConfig struct {
ID int64 `json:"id"`
Plat int64 `json:"platform"`
PdName string `json:"product_name"`
PdID string `json:"product_id"`
SuitType int8 `json:"suit_type"`
TopSuitType int8 `json:"-"`
Month int16 `json:"month"`
SubType int8 `json:"sub_type"`
OPrice float64 `json:"original_price"`
DPrice float64 `json:"discount_price"`
Selected int32 `json:"selected"`
Remark string `json:"remark"`
Status int8 `json:"status"`
Forever bool `json:"-"`
Operator string `json:"operator"`
OpID int64 `json:"oper_id"`
Superscript string `json:"superscript"`
StartBuild int64 `json:"start_build"`
EndBuild int64 `json:"end_build"`
PanelType string `json:"panel_type"`
CTime time.Time `json:"ctime"`
MTime time.Time `json:"mtime"`
}
// VipPirceResp vip pirce resp.
type VipPirceResp struct {
Vps []*VipPanelInfo `json:"price_list"`
CouponInfo *col.CouponAllowancePanelInfo `json:"coupon_info"`
CouponSwith int8 `json:"coupon_switch"`
CodeSwitch int8 `json:"code_switch"`
GiveSwitch int8 `json:"give_switch"`
ExistCoupon int8 `json:"exist_coupon"`
Privileges *PrivilegesResp `json:"privileges"`
}
// VipPirceResp5 vip pirce resp.
type VipPirceResp5 struct {
Vps []*VipPanelInfo `json:"price_list"`
CouponInfo *col.CouponAllowancePanelInfo `json:"coupon_info"`
CouponSwith int8 `json:"coupon_switch"`
CodeSwitch int8 `json:"code_switch"`
GiveSwitch int8 `json:"give_switch"`
Privileges map[int8]*PrivilegesResp `json:"privileges"`
}
// VipPirceRespV9 vip pirce resp v9.
type VipPirceRespV9 struct {
Vps []*VipPanelInfo `json:"price_list"`
Coupon *colapi.UsableAllowanceCouponV2Reply `json:"coupon"`
CouponSwith int8 `json:"coupon_switch"`
CodeSwitch int8 `json:"code_switch"`
GiveSwitch int8 `json:"give_switch"`
Privileges map[int8]*PrivilegesResp `json:"privileges"`
}
// VipDPriceConfig price discount config.
type VipDPriceConfig struct {
ID int64 `json:"id"`
PdID string `json:"product_id"`
DPrice float64 `json:"discount_price"`
STime time.Time `json:"stime"`
ETime time.Time `json:"etime"`
Remark string `json:"remark"`
Operator string `json:"operator"`
OpID int64 `json:"oper_id"`
CTime time.Time `json:"ctime"`
MTime time.Time `json:"mtime"`
FirstPrice float64 `json:"first_price"`
}
// DoTopSuitType .
func (vpc *VipPriceConfig) DoTopSuitType() {
switch vpc.SuitType {
case OldPackVIP, NewPackVIP:
vpc.TopSuitType = Pack
case OldSubVIP, NewSubVIP:
vpc.TopSuitType = Sub
case OldVIP, NewVIP:
vpc.TopSuitType = VIP
case AllUser:
vpc.TopSuitType = All
}
}
// DoCheckRealPrice ,
func (vpc *VipPriceConfig) DoCheckRealPrice(mvp map[int64]*VipDPriceConfig) {
if vp, ok := mvp[vpc.ID]; ok {
vpc.PdID = vp.PdID
vpc.DPrice = vp.DPrice
vpc.Remark = vp.Remark
if vp.FirstPrice > 0 && vpc.SubType == AutoRenew {
vpc.DPrice = vp.FirstPrice
}
}
if vpc.DPrice == 0 {
vpc.DPrice = vpc.OPrice
}
}
// DoSubMonthKey .
func (vpc *VipPriceConfig) DoSubMonthKey() string {
return fmt.Sprintf("%d%d", vpc.Month, vpc.SubType)
}
// FormatRate .
func (vpc *VipPriceConfig) FormatRate() string {
if vpc.DPrice == 0 {
return ""
}
if vpc.DPrice/vpc.OPrice == 1 {
return ""
}
return strconv.FormatFloat(math.Floor((vpc.DPrice/vpc.OPrice)*100)/10, 'f', -1, 64) + "折"
}
// DoPayOrderTypeKey .
func (po *PayOrder) DoPayOrderTypeKey() string {
if po.OrderType == IOSRenew {
po.OrderType = OtherRenew
}
return fmt.Sprintf("%d%d", po.BuyMonths, po.OrderType)
}
// IsSub .
func (po *PayOrder) IsSub() bool {
return po.OrderType == OtherRenew || po.OrderType == IOSRenew
}
// VipPirce vip pirce.
type VipPirce struct {
Panel *VipPanelInfo `json:"pirce_info"`
Coupon *col.CouponAllowanceInfo `json:"coupon_info"`
}
// VipPanelExplain vip panel explain.
type VipPanelExplain struct {
BackgroundURL string `json:"background_url"`
Explain string `json:"user_explain"`
}
// FilterBuild filter price build .
func (vpc *VipPriceConfig) FilterBuild(build int64) bool {
if (vpc.StartBuild != 0 && vpc.StartBuild > build) || (vpc.EndBuild != 0 && vpc.EndBuild < build) {
return false
}
return true
}
// ArgProductLimit args product limit.
type ArgProductLimit struct {
Mid int64
Months int32
PanelType string
}