Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"activity.go",
"authority.go",
"banner.go",
"bgm.go",
"blacklist.go",
"budgetstatistics.go",
"business.go",
"cheat.go",
"formatter.go",
"notice.go",
"speical_award.go",
"tag.go",
"trade.go",
"up.go",
],
importpath = "go-common/app/admin/main/growup/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/growup/util:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/admin/main/growup/model/income:all-srcs",
"//app/admin/main/growup/model/offlineactivity:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,63 @@
package model
import (
"go-common/library/time"
)
// CActivity creative activity
type CActivity struct {
ID int64 `json:"id"`
Name string `json:"name" form:"name" validate:"required"`
Creator string `json:"creator"`
SignedStart time.Time `json:"signed_start" form:"signed_start" validate:"required"`
SignedEnd time.Time `json:"signed_end" form:"signed_end" validate:"required"`
SignUp int `json:"sign_up" form:"sign_up" default:"0"` // 需要报名 0不需要,1需要
SignUpStart time.Time `json:"sign_up_start" form:"sign_up_start" validate:"required"`
SignUpEnd time.Time `json:"sign_up_end" form:"sign_up_end" validate:"required"`
Object int `json:"object" form:"object" validate:"required"` // 1:uid, 2:avid
UploadStart time.Time `json:"upload_start" form:"upload_start" validate:"required"`
UploadEnd time.Time `json:"upload_end" form:"upload_end" validate:"required"`
WinType int `json:"win_type" form:"win_type" validate:"required"` // 1:达标型,2:排序型
RequireItems string `json:"require_items" form:"require_items" validate:"required"` // 1:点赞,2:分享,3:播放,4:评论,5:弹幕, 多个用","分割
RequireValue int64 `json:"require_value" form:"require_value" validate:"required"`
StatisticsStart time.Time `json:"statistics_start" form:"statistics_start" validate:"required"`
StatisticsEnd time.Time `json:"statistics_end" form:"statistics_end" validate:"required"`
BonusType int `json:"bonus_type" form:"bonus_type" validate:"required"` // 1:平分,2:各得
BonusMoney []int64 `json:"bonus_money" form:"bonus_money,split" validate:"required"` // (多个","分割)
BonusTime time.Time `json:"bonus_time" form:"bonus_time" validate:"required"`
ProgressFrequency int `json:"progress_frequency" form:"progress_frequency" validate:"required"` // 进展更新频率 1:每天 2:每周
UpdatePage int `json:"update_page" form:"update_page" default:"0"` // 更新活动页 0:否 1:是
ProgressStart time.Time `json:"progress_start" form:"progress_start" validate:"required"`
ProgressEnd time.Time `json:"progress_end" form:"progress_end" validate:"required"`
ProgressSync int `json:"progress_sync" form:"progress_sync" default:"0"` // 进展同步 1共有,2已有,3共有/已有
BonusQuery int `json:"bonus_query" form:"bonus_query" default:"0"` // 开奖查询 0:否 1:是
BonusQuerStart time.Time `json:"bonus_query_start" form:"bonus_query_start" validate:"required"`
BonusQueryEnd time.Time `json:"bonus_query_end" form:"bonus_query_end" validate:"required"`
Background string `json:"background" form:"background" validate:"required"`
WinDesc string `json:"win_desc" form:"win_desc" validate:"required"`
UnwinDesc string `json:"unwin_desc" form:"unwin_desc" validate:"required"`
Details string `json:"details" form:"details" validate:"required"`
State int `json:"state"` // 活动状态 0未开始,1已开始,2已结束
Enrolment int `json:"enrolment"` // 报名人数
WinNum int `json:"win_num"` // 中奖人数
}
// BonusRank bonus rank
type BonusRank struct {
ID int64
Rank int
Money int64
}
// UpActivity up activity
type UpActivity struct {
MID int64 `json:"mid"`
AIDs string `json:"aids"`
AIDNum int64 `json:"aid_num"`
Nickname string `json:"nickname"`
Bonus int64 `json:"bonus"`
Rank int `json:"rank"`
SignUpTime time.Time `json:"sign_up_time"`
SuccessTime time.Time `json:"success_time"`
State int `json:"state"`
}

View File

@@ -0,0 +1,63 @@
drop table if exists offline_activity_info;
create table offline_activity_info (
id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID,活动ID',
title varchar(32) NOT NULL DEFAULT '' COMMENT '标题',
link varchar(255) NOT NULL DEFAULT '' COMMENT '活动链接',
bonus_type tinyint(4) NOT NULL DEFAULT 0 COMMENT '0,奖品1,奖金',
memo varchar(32) NOT NULL DEFAULT '' COMMENT '备注',
creator varchar(16) NOT NULL DEFAULT '' COMMENT '创建者',
state tinyint(4) NOT NULL DEFAULT 0 COMMENT '0初始1发送中2等待结果10处理完成100删除、无效',
ctime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
mtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `ix_mtime` (`mtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='线下活动信息';
drop table if exists offline_activity_bonus;
create table offline_activity_bonus (
id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID, bonusID',
activity_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '活动ID',
total_money bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '奖项总金额1=1/1000元',
member_count int(11) unsigned NOT NULL DEFAULT 0 COMMENT '总人数',
state tinyint(4) NOT NULL DEFAULT 0 COMMENT '0正常100删除、无效',
ctime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
mtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `ix_mtime` (`mtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='线下奖项信息';
drop table if exists offline_activity_result;
create table offline_activity_result (
id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
activity_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '活动ID',
bonus_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '奖励ID',
bonus_type tinyint(4) NOT NULL DEFAULT 0 COMMENT '0,奖品1,奖金',
mid int(11) unsigned NOT NULL DEFAULT 0 COMMENT 'memberID',
state tinyint(4) NOT NULL DEFAULT 0 COMMENT '0初始1审核中10成功11失败',
bonus_money bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '奖励1=1/1000元',
order_id varchar(32) NOT NULL DEFAULT '' COMMENT '交易id,需要唯一',
ctime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
mtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aid_bid_mid` (activity_id, bonus_id, mid),
KEY `ix_mid` (mid),
KEY `ix_mtime` (`mtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='线下活动奖励发放信息';
drop table if exists offline_activity_shell_order;
create table offline_activity_shell_order (
id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
result_id int(11) unsigned NOT NULL COMMENT '对应的result ID',
order_id varchar(32) NOT NULL DEFAULT '' COMMENT '交易id,需要唯一',
order_status varchar(16) NOT NULL DEFAULT '' COMMENT '订单状态',
ctime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
mtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_id` (order_id),
KEY `ix_mtime` (`mtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='贝壳订单';
-- fat 1, uat 1, prod 1
alter table offline_activity_info add key ix_ctime(ctime);
alter table offline_activity_bonus add key ix_activity_id(activity_id);

View File

@@ -0,0 +1,88 @@
package model
import (
"go-common/library/time"
)
// SUser simple user
type SUser struct {
ID int64 `json:"id"`
Name string `json:"name"`
}
// Group simple task group
type Group struct {
ID int64 `json:"id"`
Name string `json:"name"`
}
// Role simple task role
type Role struct {
ID int64 `json:"id"`
Name string `json:"name"`
}
// SPrivilege simple privilege
type SPrivilege struct {
ID int64 `json:"id" gorm:"column:id"`
Title string `json:"title" gorm:"column:name"`
Level int64 `json:"level" gorm:"level"`
IsRouter uint8 `json:"is_router" gorm:"is_router"`
Children []*SPrivilege `json:"children"`
Selected bool `json:"selected"`
}
// User user info
type User struct {
ID int64 `json:"id" gorm:"column:id"`
Username string `json:"username" gorm:"column:username"`
Nickname string `json:"nickname" gorm:"column:nickname"`
TaskGroup string `json:"task_group" gorm:"column:task_group"`
TaskRole string `json:"task_role" gorm:"column:task_role"`
ATime time.Time `json:"atime" gorm:"column:atime"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-"`
Groups []*Group `json:"groups" gorm:"-"`
Roles []*Role `json:"roles" gorm:"-"`
}
// TaskGroup task group
type TaskGroup struct {
ID int64 `json:"id" gorm:"column:id"`
Name string `json:"name" gorm:"column:name"`
Desc string `json:"desc" gorm:"column:desc"`
Privileges string `json:"privileges" gorm:"column:privileges"`
ATime time.Time `json:"atime" gorm:"column:atime"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-"`
Users []*SUser `json:"users" gorm:"-"`
}
// TaskRole task role
type TaskRole struct {
ID int64 `json:"id" gorm:"column:id"`
Name string `json:"name" gorm:"column:name"`
Desc string `json:"desc" gorm:"column:desc"`
GroupID int64 `json:"group_id" gorm:"column:group_id"`
Privileges string `json:"privileges" gorm:"column:privileges"`
ATime time.Time `json:"atime" gorm:"column:atime"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-"`
Users []*SUser `json:"users" gorm:"-"`
GroupName string `json:"group_name" gorm:"-"`
}
// Privilege privilege
type Privilege struct {
ID int64 `json:"id" gorm:"column:id"`
Name string `json:"name" gorm:"column:name"`
Level int64 `json:"level" gorm:"level"`
FatherID int64 `json:"father_id" gorm:"father_id"`
IsRouter uint8 `json:"is_router" gorm:"is_router"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-"`
}

View File

@@ -0,0 +1,16 @@
package model
import (
"go-common/library/time"
)
// Banner banner
type Banner struct {
ID int64 `json:"id"`
Image string `json:"image"`
Link string `json:"link"`
StartAt time.Time `json:"start_at"`
EndAt time.Time `json:"end_at"`
CTime time.Time `json:"-"`
MTime time.Time `json:"-"`
}

View File

@@ -0,0 +1,25 @@
package model
import (
"go-common/library/time"
)
// BGM bgm
type BGM struct {
ID int64
MID int64
CID int64
AID int64
SID int64
JoinAt time.Time
}
// Business business
type Business struct {
ID int64 `json:"id"`
MID int64 `json:"mid"`
AccountState int `json:"account_state"`
Type int `json:"archive_type"`
CTime int64 `json:"-"`
MTime int64 `json:"-"`
}

View File

@@ -0,0 +1,26 @@
package model
import (
"go-common/library/time"
)
// Blacklist black list
type Blacklist struct {
ID int64 `json:"id" gorm:"column:id"`
AvID int64 `json:"av_id" gorm:"column:av_id"`
MID int64 `json:"mid" gorm:"column:mid"`
Nickname string `json:"nickname" gorm:"column:nickname"`
HasSigned int `json:"has_signed" gorm:"column:has_signed"`
Income int64 `json:"income"`
Reason int `json:"reason" gorm:"column:reason"`
CType int `json:"ctype" gorm:"column:ctype"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-"`
}
// AvIncomeStatis av income statis
type AvIncomeStatis struct {
AvID int64 `json:"av_id" gorm:"column:av_id"`
TotalIncome int64 `json:"total_income" gorm:"total_income"`
}

View File

@@ -0,0 +1,39 @@
package model
import (
"go-common/library/time"
)
// BudgetDayStatistics day.
type BudgetDayStatistics struct {
DayExpense int `json:"day_expense"`
UpCount int `json:"up_count"`
AvCount int `json:"av_count"`
UpAvgExpense int `json:"up_avg_expense"`
AvAvgExpense int `json:"av_avg_expense"`
Date time.Time `json:"date"`
TotalExpense int64 `json:"total_expense"`
ExpenseRatio string `json:"expense_ratio"`
DayRatio string `json:"day_ratio"`
}
// BudgetRatio budget ratio.
type BudgetRatio struct {
ExpenseRatio string `json:"expense_ratio"`
DayRatio string `json:"day_ratio"`
Year int64 `json:"year"`
Budget int64 `json:"budget"`
}
// BudgetMonthStatistics month
type BudgetMonthStatistics struct {
MonthExpense int64 `json:"month_expense"`
Month string `json:"month"`
Date time.Time `json:"date"`
UpCount int `json:"up_count"`
AvCount int `json:"av_count"`
UpAvgExpense int `json:"up_avg_expense"`
AvAvgExpense int `json:"av_avg_expense"`
TotalExpense int64 `json:"total_expense"`
ExpenseRatio string `json:"expense_ratio"`
}

View File

@@ -0,0 +1,8 @@
package model
// BusRes business res
type BusRes struct {
PrivilegeID int64 `json:"privilege_id"`
CategoryID int64 `json:"category_id"`
Name string `json:"name"`
}

View File

@@ -0,0 +1,44 @@
package model
import "go-common/library/time"
// UpSpy up spy.
type UpSpy struct {
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
SignedAt time.Time `json:"signed_at"`
Fans int `json:"fans"`
CheatFans int `json:"cheat_fans"`
PlayCount int `json:"play_count"`
CheatPlayCount int `json:"cheat_play_count"`
AccountState int `json:"account_state"`
}
// ArchiveSpy archive spy.
type ArchiveSpy struct {
ArchiveID int64 `json:"archive_id"`
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
UploadTime time.Time `json:"pub_time"`
TotalIncome int `json:"total_income"`
CheatFavorite int `json:"cheat_favorite"`
CheatPlayCount int `json:"cheat_play_count"`
CheatCoin int `json:"cheat_coin"`
Deducted int `json:"deducted"`
}
// CheatFans cheat fans.
type CheatFans struct {
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
RealFans int `json:"real_fans"`
CheatFans int `json:"cheat_fans"`
SignedAt time.Time `json:"signed_at"`
DeductAt time.Time `json:"deduct_at"`
}
// CheatCount cheat count.
type CheatCount struct {
Quantity int `json:"quantity"`
EventID string `json:"event_name"`
}

View File

@@ -0,0 +1,16 @@
package model
import "encoding/csv"
//CsvFormatter CsvFormatter
type CsvFormatter interface {
GetFileName() string
// ToCsv do not call flush
ToCsv(writer *csv.Writer)
}
//ExportArgInterface export interface
type ExportArgInterface interface {
// ExportFormat options: json, csv
ExportFormat() string
}

View File

@@ -0,0 +1,36 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"archive_income.go",
"av_breach.go",
"charge.go",
"up_account.go",
"up_income.go",
"up_withdraw.go",
],
importpath = "go-common/app/admin/main/growup/model/income",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,34 @@
package income
import (
"go-common/library/time"
)
// ArchiveStatis archive statis
type ArchiveStatis struct {
ID int64
Avs int64
MoneySection int
MoneyTips string
Income int64
CategroyID int64
CDate time.Time
}
// ArchiveIncome archive income
type ArchiveIncome struct {
ID int64 `json:"id"`
AvID int64 `json:"archive_id"`
MID int64 `json:"mid"`
Type int `json:"type"`
TagID int64 `json:"category_id"`
IsOriginal int `json:"is_original"`
UploadTime time.Time `json:"upload_time"`
TotalIncome int64 `json:"total_income"`
Income int64 `json:"income"`
TaxMoney int64 `json:"tax_money"`
Date time.Time `json:"date"`
DateFormat string `json:"date_format"`
Nickname string `json:"nickname"`
Avs int `json:"avs"`
}

View File

@@ -0,0 +1,17 @@
package income
import (
"go-common/library/time"
)
// AvBreach av breach record
type AvBreach struct {
AvID int64 `json:"archive_id"`
MID int64 `json:"mid"`
CDate time.Time `json:"cdate"`
Money int64 `json:"money"`
CType int `json:"ctype"`
Reason string `json:"reason"`
UploadTime time.Time `json:"upload_time"`
Nickname string `json:"nickname"`
}

View File

@@ -0,0 +1,27 @@
package income
import "go-common/library/time"
// ArchiveCharge av charge
type ArchiveCharge struct {
AID int64 `json:"aid"`
AvID int64 `json:"-"`
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
CategoryID int64 `json:"category_id"`
Charge int64 `json:"charge"`
TotalCharge int64 `json:"total_charge"`
UploadTime time.Time `json:"upload_time"`
Date time.Time `json:"date"`
}
// ArchiveChargeStatis av charge statis
type ArchiveChargeStatis struct {
ID int64
Avs int64
MoneySection int
MoneyTips string
Charge int64
CategroyID int64
CDate time.Time
}

View File

@@ -0,0 +1,25 @@
package income
import (
"go-common/library/time"
)
// UpAccount up account
type UpAccount struct {
ID int64 `json:"id"`
MID int64 `json:"mid"`
HasSignContract int `json:"has_sign_contract"`
State int `json:"state"`
TotalIncome int64 `json:"total_income"`
TotalUnwithdrawIncome int64 `json:"total_unwithdraw_income"`
TotalWithdrawIncome int64 `json:"total_withdraw_income"`
IncIncome int64 `json:"inc_income"`
LastWithdrawTime time.Time `json:"last_withdraw_time"`
Version int64 `json:"version"`
AllowanceState int `json:"allowance_state"`
Nickname string `json:"nickname"`
WithdrawDateVersion string `json:"withdraw_date_version"`
IsDeleted int `json:"is_deleted"`
CTime time.Time `json:"ctime"`
MTime time.Time `json:"mtime"`
}

View File

@@ -0,0 +1,37 @@
package income
import (
"go-common/library/time"
)
// UpIncome up income
type UpIncome struct {
ID int64 `json:"id"`
MID int64 `json:"mid"`
AvCount int64 `json:"-"`
ColumnCount int64 `json:"-"`
BgmCount int64 `json:"-"`
Count int64 `json:"count"`
TaxMoney int64 `json:"tax_money"`
Income int64 `json:"income"`
TotalIncome int64 `json:"total_income"`
Date time.Time `json:"-"`
Nickname string `json:"nickname"`
DateFormat string `json:"date_format"`
BaseIncome int64 `json:"base_income"`
Breach int64 `json:"breach"`
ExtraIncome int64 `json:"extra_income"`
}
// UpDailyStatis up daily statis
type UpDailyStatis struct {
Ups int
Income int64
Date time.Time
}
// UpStatisRsp response
type UpStatisRsp struct {
Income int64
Ups int
}

View File

@@ -0,0 +1,27 @@
package income
import (
"go-common/library/time"
)
// UpIncomeWithdraw up income withdraw
type UpIncomeWithdraw struct {
ID int64 `json:"id"`
MID int64 `json:"mid"`
WithdrawIncome int64 `json:"-"`
Income string `json:"withdraw_income"`
DateVersion string `json:"date_version"`
MTime time.Time `json:"withdraw_time"`
Nickname string `json:"nickname"`
}
// UpWithdrawRes response
type UpWithdrawRes struct {
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
WithdrawIncome string `json:"withdraw_income"`
UnWithdrawIncome string `json:"unwithdraw_income"`
LastWithdrawIncome string `json:"last_withdraw_income"`
WithdrawDate string `json:"withdraw_date"`
MTime time.Time `json:"mtime"`
}

View File

@@ -0,0 +1,18 @@
package model
import (
"go-common/library/time"
)
// Notice notice
type Notice struct {
ID int64 `json:"id"`
Title string `json:"title"`
Type int `json:"type"`
Platform int `json:"platform"`
Link string `json:"link"`
Status int `json:"status"`
IsDeleted int `json:"-"`
CTime time.Time `json:"ctime"`
MTime time.Time `json:"mtime"`
}

View File

@@ -0,0 +1,32 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"offlineactivity.go",
"request.go",
],
importpath = "go-common/app/admin/main/growup/model/offlineactivity",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,158 @@
package offlineactivity
import (
"go-common/library/time"
"strconv"
)
const (
//BonusTypeThing 奖品
BonusTypeThing = 0
//BonusTypeMoney 奖金
BonusTypeMoney = 1
)
//ActivityState activity state
type ActivityState int8
const (
//StateDelete 删除了
StateDelete = 100
// 用来转换 float * moneyCont -> int
moneyConst = 1000
)
const (
//ActivityStateInit 初始状态
ActivityStateInit ActivityState = 0
//ActivityStateSending 发送状态
ActivityStateSending ActivityState = 1
//ActivityStateWaitResult 等待审核结果
ActivityStateWaitResult ActivityState = 2
//ActivityStateSucess 成功
ActivityStateSucess ActivityState = 10
//ActivityStateFail 发送失败
ActivityStateFail ActivityState = 11
//ActivityStateCreateFail 创建失败
ActivityStateCreateFail ActivityState = 12
)
const (
//TableOfflineActivityInfo info name
TableOfflineActivityInfo = "offline_activity_info"
//TableOfflineActivityBonus bonus name
TableOfflineActivityBonus = "offline_activity_bonus"
//TableOfflineActivityResult result name
TableOfflineActivityResult = "offline_activity_result"
//TableOfflineActivityShellOrder shell order name
TableOfflineActivityShellOrder = "offline_activity_shell_order"
)
//OfflineActivityInfo table info
type OfflineActivityInfo struct {
ID int64 `json:"id" gorm:"column:id"`
Title string `json:"title" gorm:"column:title"`
Link string `json:"link" gorm:"column:link"`
BonusType int8 `json:"bonus_type" gorm:"column:bonus_type"`
Memo string `json:"memo" gorm:"column:memo"`
Creator string `json:"creator" gorm:"column:creator"`
State int8 `json:"state" gorm:"column:state"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"-" gorm:"column:mtime"`
}
//TableName get table name
func (o *OfflineActivityInfo) TableName() string {
return TableOfflineActivityInfo
}
//BonusState bonus state
type BonusState int8
const (
//BonusStateInit init state
BonusStateInit BonusState = 0
)
//OfflineActivityBonus table bonus
type OfflineActivityBonus struct {
ID int64 `json:"id" gorm:"column:id"`
ActivityID int64 `json:"activity_id" gorm:"column:activity_id"`
TotalMoney int64 `json:"total_money" gorm:"column:total_money"`
MemberCount uint32 `json:"member_count" gorm:"column:member_count"`
State int8 `json:"state" gorm:"column:state"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
}
//TableName tablename
func (o *OfflineActivityBonus) TableName() string {
return TableOfflineActivityBonus
}
//OfflineActivityResult table result
type OfflineActivityResult struct {
ID int64 `json:"id" gorm:"column:id;primary_key"`
ActivityID int64 `json:"activity_id" gorm:"column:activity_id"`
BonusID int64 `json:"bonus_id" gorm:"column:bonus_id"`
BonusType int8 `json:"bonus_type" gorm:"column:bonus_type"`
Mid int64 `json:"mid" gorm:"column:mid"`
BonusMoney int64 `json:"bonus_money" gorm:"column:bonus_money"`
OrderID string `json:"order_id" gorm:"column:order_id"`
State int8 `json:"state" gorm:"column:state"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
}
//TableName table name
func (o *OfflineActivityResult) TableName() string {
return TableOfflineActivityResult
}
//OfflineActivityShellOrder table shell order, order for shell system
type OfflineActivityShellOrder struct {
ID int64 `json:"id" gorm:"column:id"`
ResultID int64 `json:"result_id" gorm:"column:result_id"`
OrderID string `json:"order_id" gorm:"column:order_id"`
OrderStatus string `json:"order_status" gorm:"column:order_status"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
}
//TableName table name
func (o *OfflineActivityShellOrder) TableName() string {
return TableOfflineActivityShellOrder
}
//GetMoneyFromDb get money from db
func GetMoneyFromDb(dbmoney int64) float64 {
return float64(dbmoney) / moneyConst
}
//GetMoneyForDb set money to db
func GetMoneyForDb(realmoney float64) int64 {
return int64(realmoney * moneyConst)
}
//StateToString State to string
func StateToString(state int) string {
switch state {
case int(ActivityStateInit):
return "初始"
case int(ActivityStateSending):
return "发送贝壳中"
case int(ActivityStateWaitResult):
return "等待审核结果"
case int(ActivityStateSucess):
return "成功"
case int(ActivityStateFail):
return "失败"
case int(ActivityStateCreateFail):
return "创建失败"
case StateDelete:
return "已删除"
default:
return strconv.Itoa(state)
}
}

View File

@@ -0,0 +1,359 @@
package offlineactivity
import (
"encoding/csv"
"fmt"
"go-common/library/time"
"math"
"strconv"
time2 "time"
)
const (
dateFmt = "20060102"
dateTimeFmt = "20060102_150405"
filenamePre = "活动"
)
func round(num float64) int {
return int(num + math.Copysign(0.5, num))
}
//ToFixed fix float precision
func ToFixed(num float64, precision int) float64 {
output := math.Pow(10, float64(precision))
return float64(round(num*output)) / output // since go 1.9 doesn't have a math.Round function...
}
//ExportArg export arg
type ExportArg struct {
Export string `form:"export"`
}
//ExportFormat export format
func (e *ExportArg) ExportFormat() string {
return e.Export
}
//BonusInfo bonus struct
type BonusInfo struct {
TotalMoney float64 `json:"total_money"`
MemberCount int64 `json:"member_count"`
Mids string `json:"mids"`
MidList []int64 `json:"-"` // 存储转换后的mids
Filename string `json:"filename"` // 如果有文件名,优先使用文件
}
//AddActivityArg add activity arg
type AddActivityArg struct {
Title string `json:"title"`
Link string `json:"link"`
BonusType int8 `json:"bonus_type"`
Memo string `json:"memo"`
BonusList []*BonusInfo `json:"bonus_list"`
Creator string `json:"-"`
}
//PreAddActivityResult result, nothing to return
type PreAddActivityResult struct {
BonusType int8 `json:"bonus_type"`
MemberCount int64 `json:"member_count"`
TotalMoney float64 `json:"total_money"`
}
//AddActivityResult result, nothing to return
type AddActivityResult struct {
}
//PageArg page arg
type PageArg struct {
Page int `form:"page"`
Size int `form:"size"`
}
//CheckPageValidation check the page validte, return limit offset
func (arg *PageArg) CheckPageValidation() (limit, offset int) {
if arg.Page < 1 {
arg.Page = 1
}
if arg.Size > 100 || arg.Size <= 0 {
arg.Size = 10
}
limit = arg.Size
offset = (arg.Page - 1) * limit
return
}
//ToPageResult cast to page result
func (arg *PageArg) ToPageResult(total int) (res PageResult) {
res.TotalCount = total
res.Page = arg.Page
return
}
//PageResult page result
type PageResult struct {
Page int `json:"page"`
TotalCount int `json:"total_count"`
}
//QueryActivityByIDArg arg
type QueryActivityByIDArg struct {
FromDate string `form:"from_date"` // 20180101
ToDate string `form:"to_date"` // 20180102 closed interval [20180101, 20180102]
ID int64 `form:"id"` // activity id, if not 0, FromDate and toDate not used
PageArg
ExportArg
}
//QueryActivityInfo activity info
type QueryActivityInfo struct {
OfflineActivityInfo
CreateTime string `json:"create_time"`
TotalMoney float64 `json:"total_money"`
MemberCount uint32 `json:"member_count"`
PayDate string `json:"pay_date"`
}
//QueryActivityResult result
type QueryActivityResult struct {
Result []*QueryActivityInfo `json:"result"`
PageResult
}
//GetFileName get file name
func (q *QueryActivityResult) GetFileName() string {
return fmt.Sprintf("%s-%s_%s.csv", filenamePre, "按活动", time2.Now().Format(dateTimeFmt))
}
//ToCsv to buffer
func (q *QueryActivityResult) ToCsv(writer *csv.Writer) {
var title = []string{
"添加日期",
"活动id",
"活动标题",
"活动链接",
"支出金额",
"中奖人数",
"付款日期",
"发奖状态"}
writer.Write(title)
if q == nil {
return
}
for _, v := range q.Result {
var record []string
record = append(record,
v.CreateTime,
strconv.Itoa(int(v.ID)),
v.Title,
v.Link,
fmt.Sprintf("%0.2f", v.TotalMoney),
strconv.Itoa(int(v.MemberCount)),
v.PayDate,
StateToString(int(v.State)),
)
writer.Write(record)
}
}
//CopyFromActivityDB copy from db
func (q *QueryActivityInfo) CopyFromActivityDB(v *OfflineActivityInfo) {
q.OfflineActivityInfo = *v
q.CreateTime = v.CTime.Time().Format(dateFmt)
q.PayDate = q.CreateTime
}
//QueryUpBonusByMidArg arg
type QueryUpBonusByMidArg struct {
Mid int64 `form:"mid"` // activity id, if not 0, FromDate and toDate not used
PageArg
ExportArg
}
//UpSummaryBonusInfo bonus for one up info
type UpSummaryBonusInfo struct {
Mid int64 `json:"mid"`
BilledMoney float64 `json:"billed_money"`
UnbilledMoney float64 `json:"unbilled_money"`
LastBillTime string `json:"last_bill_time"` // 20180101 最近结算时间
TmpBillTime time.Time `json:"-"` // 用来计算LastBillTime
TotalBonusMoney float64 `json:"total_bonus_money"` // 所有的中奖金额
ActivityID int64 `json:"activity_id"` // 中奖活动ID
}
//Finish finish it before send back
func (s *UpSummaryBonusInfo) Finish() {
if s.TmpBillTime > 0 {
s.LastBillTime = s.TmpBillTime.Time().Format(dateFmt)
}
s.BilledMoney = ToFixed(s.BilledMoney, 2)
s.UnbilledMoney = ToFixed(s.UnbilledMoney, 2)
s.TotalBonusMoney = ToFixed(s.TotalBonusMoney, 2)
}
//QueryUpBonusByMidResult query result
type QueryUpBonusByMidResult struct {
Result []*UpSummaryBonusInfo `json:"result"`
PageResult
}
//GetFileName get file name
func (q *QueryUpBonusByMidResult) GetFileName() string {
return fmt.Sprintf("%s-%s_%s.csv", filenamePre, "结算记录", time2.Now().Format(dateTimeFmt))
}
//ToCsv to buffer
func (q *QueryUpBonusByMidResult) ToCsv(writer *csv.Writer) {
var title = []string{
"UID",
"已结算",
"未结算",
"最近结算时间"}
writer.Write(title)
if q == nil {
return
}
for _, v := range q.Result {
var record []string
record = append(record,
intFormat(v.Mid),
floatFormat(v.BilledMoney),
floatFormat(v.UnbilledMoney),
v.LastBillTime,
)
writer.Write(record)
}
}
//QueryUpBonusByActivityResult use same result, we define another type, because we need to implement interface again
type QueryUpBonusByActivityResult QueryUpBonusByMidResult
//GetFileName get file name
func (q *QueryUpBonusByActivityResult) GetFileName() string {
return fmt.Sprintf("%s-%s_%s.csv", filenamePre, "详细信息", time2.Now().Format(dateTimeFmt))
}
//ToCsv to buffer
func (q *QueryUpBonusByActivityResult) ToCsv(writer *csv.Writer) {
var title = []string{
"UID",
"中奖活动id",
"中奖金额",
"结算日期",
"结算收入",
"未结算收入"}
writer.Write(title)
if q == nil {
return
}
for _, v := range q.Result {
var record []string
record = append(record,
intFormat(v.Mid),
intFormat(v.ActivityID),
floatFormat(v.TotalBonusMoney),
v.LastBillTime,
floatFormat(v.BilledMoney),
floatFormat(v.UnbilledMoney),
)
writer.Write(record)
}
}
//QueryActvityMonthArg arg
type QueryActvityMonthArg struct {
ExportArg
PageArg
FromDate string `form:"from_date"`
ToDate string `form:"to_date"`
}
//ActivityMonthInfo info
type ActivityMonthInfo struct {
CreateTime string `json:"create_time"`
ActivityCount int64 `json:"activity_count"`
MemberCount uint32 `json:"member_count"`
AverageMoneyMember float64 `json:"average_money_member"`
AverageMoneyActivity float64 `json:"average_money_activity"`
TotalBonusMoneyMonth float64 `json:"total_bonus_money"` // 所有的中奖金额
TotalMoneyAccumulate float64 `json:"total_money_accumulate"`
GenerateDay string `json:"generate_day"` // 生成日期
activityMap map[int64]struct{} // 用来保存活动数
}
//AddBonus 增加bonus信息
func (s *ActivityMonthInfo) AddBonus(v *OfflineActivityBonus) {
s.MemberCount += v.MemberCount
s.TotalBonusMoneyMonth += GetMoneyFromDb(v.TotalMoney)
if s.activityMap == nil {
s.activityMap = make(map[int64]struct{})
}
s.activityMap[v.ActivityID] = struct{}{}
}
//Finish finish
func (s *ActivityMonthInfo) Finish() {
if s.MemberCount > 0 {
s.AverageMoneyMember = ToFixed(s.TotalBonusMoneyMonth/float64(s.MemberCount), 2)
}
s.ActivityCount = int64(len(s.activityMap))
if s.ActivityCount > 0 {
s.AverageMoneyActivity = ToFixed(s.TotalBonusMoneyMonth/float64(s.ActivityCount), 2)
}
}
//QueryActivityMonthResult result
type QueryActivityMonthResult struct {
PageResult
Result []*ActivityMonthInfo `json:"result"`
}
//GetFileName get file name
func (q *QueryActivityMonthResult) GetFileName() string {
return fmt.Sprintf("%s-%s_%s.csv", filenamePre, "按月", time2.Now().Format(dateTimeFmt))
}
func floatFormat(f float64) string {
return strconv.FormatFloat(f, 'f', 2, 64)
}
func intFormat(i int64) string {
return strconv.Itoa(int(i))
}
//ToCsv to csv
func (q *QueryActivityMonthResult) ToCsv(writer *csv.Writer) {
var title = []string{
"月份",
"最新数据截止日期",
"月支出",
"活动数",
"中奖人数",
"人均支出",
"活动均支出",
"累计支出"}
writer.Write(title)
if q == nil {
return
}
for _, v := range q.Result {
var record []string
record = append(record,
v.CreateTime,
v.GenerateDay,
floatFormat(v.TotalBonusMoneyMonth),
intFormat(v.ActivityCount),
intFormat(int64(v.MemberCount)),
floatFormat(v.AverageMoneyMember),
floatFormat(v.AverageMoneyActivity),
floatFormat(v.TotalMoneyAccumulate),
)
writer.Write(record)
}
}

View File

@@ -0,0 +1,201 @@
package model
import (
"strconv"
"time"
)
/* 奖项信息 */
// SaveAwardArg for saving an award
type SaveAwardArg struct {
// identity
AwardID int64 `json:"award_id"`
// properties
AddAwardArg
}
// AddAwardArg for adding an award
type AddAwardArg struct {
AwardName string `json:"award_name"` // 专项奖名称
DisplayStatus int `json:"display_status"` // 信息是否完整 1=不完整,不前台展示 2=完整,前台展示
CycleStart int64 `json:"cycle_start" ` // 评选开始
CycleEnd int64 `json:"cycle_end"` // 评选结束
AnnounceDate int64 `json:"announce_date"` // 公示日期
Divisions []*AwardDivision `json:"divisions"` // 赛区
Prizes []*AwardPrize `json:"prizes"` // 奖项
Resources *AwardResource `json:"resources"` // 物料
}
// AwardResource model
type AwardResource struct {
Rule string `json:"rule"`
Detail string `json:"detail"`
QA []*AwardQA `json:"qa"`
}
// AwardQA model
type AwardQA struct {
Index int `json:"-"`
Q string `json:"q"`
A string `json:"a"`
}
// AwardDivision model
type AwardDivision struct {
// identity
AwardID int64 `json:"-"`
DivisionID int64 `json:"-"`
// properties
DivisionName string `json:"division_name"`
TagID int64 `json:"tag_id"`
Tag string `json:"tag"`
}
// AwardPrize model
type AwardPrize struct {
// identity
AwardID int64 `json:"-"`
PrizeID int64 `json:"-"`
// properties
Bonus int `json:"bonus"`
Quota int `json:"quota"`
}
// AwardListModel .
type AwardListModel struct {
ID int64 `json:"id"`
AwardID int64 `json:"award_id"` // 专项奖ID
AwardName string `json:"award_name"` // 专项奖名称
//DisplayStatus int `json:"display_status"` // 是否前台展示(1不展示,2展示)
CycleStart int64 `json:"cycle_start"` // 评选开始
CycleEnd int64 `json:"cycle_end"` // 评选结束
TotalQuota int `json:"total_quota"` // 总中奖名额
TotalBonus int `json:"total_bonus"` // 奖金总金额
AnnounceDate int64 `json:"announce_date"` // 公示时间
OpenStatus int `json:"deliver_status"` // 发奖情况(1未发奖,2已发奖)
OpenTime int64 `json:"deliver_time"` // 发奖时间
CTime int64 `json:"created_at"` // 创建时间
CreatedBy string `json:"created_by"` // 创建人
SelectionStatus int `json:"selection_status"` // 评奖状态(1未评奖,2已评奖)
DivisionNames []string `json:"division_names"` // 分赛区名称列表
Tags []string `json:"tags"` // 分区名称列表
}
// Award model
type Award struct {
ID int64 `json:"id"`
AwardID int64 `json:"award_id"` // 专项奖ID
AwardName string `json:"award_name"` // 专项奖名称
DisplayStatus int `json:"display_status"` // 是否前台展示(1不展示,2展示)
CycleStart time.Time `json:"-"` // 评选周期开始
CycleEnd time.Time `json:"-"` // 评选周期结束
CycleStartTS int64 `json:"cycle_start"` // 评选开始
CycleEndTS int64 `json:"cycle_end"` // 评选结束
TotalQuota int `json:"total_quota"` // 总中奖名额
TotalBonus int `json:"total_bonus"` // 奖金总金额
AnnounceDate time.Time `json:"-"` // 公示日期
AnnounceDateTS int64 `json:"announce_date"` // 公示时间
OpenStatus int `json:"deliver_status"` // 发奖情况(1未发奖,2已发奖)
OpenTime time.Time `json:"-"` // 开奖时间
OpenTimeTS int64 `json:"deliver_time"` // 发奖时间
CTime time.Time `json:"-"` // 创建时间
CTimeTS int64 `json:"created_at"` // 创建时间
CreatedBy string `json:"created_by"` // 创建人
SelectionStatus int `json:"selection_status"` // 评奖状态(1未评奖,2已评奖)
IncentiveStart int64 `json:"incentive_start"`
IncentiveEnd int64 `json:"incentive_end"`
}
// GenStr .
func (v *Award) GenStr() {
v.CycleStartTS = v.CycleStart.Unix()
v.CycleEndTS = v.CycleEnd.Unix()
v.AnnounceDateTS = v.AnnounceDate.Unix()
v.OpenTimeTS = v.OpenTime.Unix()
v.CTimeTS = v.CTime.Unix()
v.IncentiveStart = time.Date(v.CycleEnd.Year(), time.Month(v.CycleEnd.Month()+1), 15, 0, 0, 0, 0, time.Local).Unix()
v.IncentiveEnd = time.Date(v.CycleEnd.Year(), time.Month(v.CycleEnd.Month()+1), 29, 0, 0, 0, 0, time.Local).Unix()
}
// AwardDetail wrapper
type AwardDetail struct {
Award *Award `json:"award"`
Divisions []*AwardDivision `json:"divisions"`
Prizes []*AwardPrize `json:"prizes"`
Resources *AwardResource `json:"resources"`
}
// AwardResult .
type AwardResult struct {
AwardID int64 `json:"award_id"`
OpenTime int64 `json:"deliver_time"`
AnnounceDate int64 `json:"announce_date"`
CycleEnd int64 `json:"cycle_end"`
Divisions []*AwardDivisionResult `json:"divisions"`
}
// AwardDivisionResult .
type AwardDivisionResult struct {
DivisionID int64 `json:"-"`
DivisionName string `json:"division_name"`
Prizes []*AwardPrizeResult `json:"prizes"`
}
// AwardPrizeResult .
type AwardPrizeResult struct {
PrizeID int64 `json:"-"`
MIDs []int64 `json:"mids"`
}
// AwardRecord model
type AwardRecord struct {
// identity
AwardID int64
MID int64
// properties
TagID int64
}
// AwardWinner model
type AwardWinner struct {
// identity
AwardID int64 `json:"award_id"`
MID int64 `json:"mid"`
// properties
DivisionID int64 `json:"division_id"` //赛区ID
PrizeID int64 `json:"prize_id"` //专项奖奖项ID
TagID int64 `json:"-"` //分区ID
// derived
Tag string `json:"tag"` //分区
Nickname string `json:"nickname"` //昵称
Bonus int `json:"bonus"` //专项奖奖项奖金
DivisionName string `json:"division"` //专项奖赛区
}
// QueryAwardWinnerArg .
type QueryAwardWinnerArg struct {
AwardID int64 `form:"award_id" validate:"required"`
MID int64 `form:"mid"`
Nickname string `form:"nickname"`
TagID int64 `form:"tag_id"`
From int `form:"from" validate:"min=0" default:"0"`
Limit int `form:"limit" validate:"min=1" default:"20"`
}
// AwardWinnerExportFields .
func AwardWinnerExportFields() []string {
return []string{"UID", "昵称", "分赛区", "奖项类型", "奖金", "分区"}
}
// ExportStrings of an AwardWinner
func (v *AwardWinner) ExportStrings() []string {
return []string{
strconv.FormatInt(v.MID, 10),
v.Nickname,
v.DivisionName,
"奖项" + strconv.FormatInt(v.PrizeID, 10),
strconv.FormatInt(int64(v.Bonus/100), 10),
v.Tag,
}
}

View File

@@ -0,0 +1,100 @@
package model
import (
"time"
xtime "go-common/library/time"
)
// TagInfo tag_info
type TagInfo struct {
ID int64 `json:"id" form:"id"`
Tag string `json:"tag" form:"tag" validate:"required"`
Dimension int `json:"dimension" form:"dimension"`
Category int `json:"category" form:"category"`
Business int `json:"business" form:"business"`
StartTime xtime.Time `json:"start_at" form:"start_time" validate:"required"`
EndTime xtime.Time `json:"end_at" form:"end_time" validate:"required"`
CreateTime xtime.Time `json:"ctime"`
Creator string `json:"creator"`
AdjustType int `json:"adjust_type" form:"adjust_type"`
Ratio int `json:"-" form:"ratio" validate:"required"`
RetRatio float32 `json:"ratio"`
IsCommon int `json:"is_common"`
TotalIncome int `json:"total_income"`
UpCount int `json:"up_count"`
IsDeleted int `json:"is_deleted"`
ActivityID int64 `json:"activity_id" form:"activity_id"`
Icon string `json:"icon" form:"icon"`
UploadStartTime xtime.Time `json:"upload_start_time" form:"upload_start_time" validate:"required"`
UploadEndTime xtime.Time `json:"upload_end_time" form:"upload_end_time" validate:"required"`
MIDs []int64 `json:"-" form:"mids,split"`
}
// UpTagIncome calculate tag income
type UpTagIncome struct {
ID int64 `json:"id"`
AvID int64 `gorm:"column:av_id"`
MID int64 `gorm:"column:mid"`
Income int `gorm:"column:income"`
BaseIncome int `gorm:"base_income"`
TotalIncome int `gorm:"column:total_income"`
TaxMoney int `gorm:"column:tax_money"`
IsDeleted int `gorm:"column:is_deleted"`
Date time.Time
}
// UpIncomeInfo up info
type UpIncomeInfo struct {
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
CreateTime xtime.Time `json:"ctime"`
BaseIncome int `json:"base_income"`
AdjustIncome int `json:"adjust_income"`
TotalIncome int `json:"total_income"`
IsDeleted int `json:"is_deleted"`
}
// AvIncomeInfo av income info
type AvIncomeInfo struct {
AVID int64 `json:"av_id"`
MID int64 `json:"mid"`
Nickname string `json:"nickname"`
Category int `json:"category"`
CreateTime xtime.Time `json:"ctime"`
BaseIncome int `json:"base_income"`
AdjustIncome int `json:"adjust_income"`
TotalIncome int `json:"total_income"`
}
// Nickname get nickname from up_category_info
type Nickname struct {
Nickname string `json:"nickname" gorm:"column:nick_name"`
IsDeleted int `json:"is_deleted" gorm:"column:is_deleted"`
}
// AVs get avid
type AVs struct {
AVID int64 `json:"av_id" gorm:"column:av_id"`
IsDeleted int `json:"is_deleted" gorm:"column:is_deleted"`
}
// Activity activity
type Activity struct {
TagID int64 `json:"tag_id"`
ActivityID int `json:"activity_id"`
Category int `json:"category"`
MID int64 `json:"mid"`
ArchiveID int64 `json:"archive_id"`
CreateTime xtime.Time `json:"create_time"`
}
// Details tag details.
type Details struct {
Date string `json:"date"`
UpCnt int `json:"up_cnt"`
AvCnt int `json:"av_cnt"`
Income int `json:"income"`
BaseIncome int `json:"base_income"`
AdjustIncome int `json:"adjust_income"`
}

View File

@@ -0,0 +1,211 @@
package model
import (
"fmt"
"strconv"
"time"
"go-common/app/admin/main/growup/util"
)
// GoodsInfo .
type GoodsInfo struct {
// internal
ID int64 `json:"id"`
ProductID string `json:"product_id"`
ResourceID int64 `json:"-"`
GoodsType GoodsType `json:"-"`
Discount int `json:"discount"`
IsDisplay DisplayStatus `json:"is_display"`
DisplayOnTime time.Time `json:"-"`
// derived
GoodsTypeDesc string `json:"goods_type"` // 商品类型描述
// external
ProductName string `json:"product_name"` // 商品名称
OriginPrice int64 `json:"origin_price"` // 实时成本, 单位分
CurrentPrice int64 `json:"current_price"` // 实时售价, 单位分
Month int32 `json:"month"` //有效期
}
// MergeExternal information from src to target
func MergeExternal(target *GoodsInfo, src *GoodsInfo) error {
switch target.GoodsType {
case GoodsVIP:
target.OriginPrice = src.OriginPrice
target.ProductName = src.ProductName
target.CurrentPrice = int64(util.DivWithRound(float64(target.OriginPrice*int64(target.Discount)), 100, 0))
target.Month = src.Month
return nil
default:
return fmt.Errorf("illegal type of goods(%v)", target)
}
}
// OrderInfo .
type OrderInfo struct {
// internal
ID int64 `json:"-"`
MID int64 `json:"mid"`
OrderNo string `json:"order_no"`
OrderTime time.Time `json:"-"`
GoodsType GoodsType `json:"-"`
GoodsID string `json:"goods_id"`
GoodsName string `json:"goods_name"`
GoodsPrice int64 `json:"goods_price"`
GoodsCost int64 `json:"goods_cost"`
// desc for front end
GoodsTypeDesc string `json:"goods_type"` // 商品类型描述
OrderTimeDesc string `json:"order_time"` // 订单时间
// derived
TotalPrice int64 `json:"total_price"`
TotalCost int64 `json:"total_cost"`
GoodsNum int64 `json:"goods_num"`
// external
Nickname string `json:"nickname"`
}
// OrderExportFields .
func OrderExportFields() []string {
return []string{"订单ID", "时间", "商品ID", "商品名称", "售价", "成本", "数量", "总实收", "总成本", "UID", "昵称"}
}
// ExportStrings .
func (v *OrderInfo) ExportStrings() []string {
return []string{
v.OrderNo,
v.OrderTimeDesc,
v.GoodsID,
v.GoodsName,
strconv.FormatFloat(util.Div(float64(v.GoodsPrice), float64(100)), 'f', 2, 64),
strconv.FormatFloat(util.Div(float64(v.GoodsCost), float64(100)), 'f', 2, 64),
strconv.FormatInt(v.GoodsNum, 10),
strconv.FormatFloat(util.Div(float64(v.TotalPrice), float64(100)), 'f', 2, 64),
strconv.FormatFloat(util.Div(float64(v.TotalCost), float64(100)), 'f', 2, 64),
strconv.FormatInt(v.MID, 10),
v.Nickname,
}
}
// GenDerived generates derived information
func (v *OrderInfo) GenDerived() *OrderInfo {
v.GoodsNum = 1
v.TotalPrice = v.GoodsPrice
v.TotalCost = v.GoodsCost
return v
}
// GenDesc generates descriptions
func (v *OrderInfo) GenDesc() *OrderInfo {
v.GoodsTypeDesc = v.GoodsType.Desc()
v.OrderTimeDesc = v.OrderTime.Format("2006-01-02 15:04:05")
return v
}
// DisplayStatus .
type DisplayStatus int
// DisplayStatuses enum
const (
DisplayOff DisplayStatus = 1
DisplayOn DisplayStatus = 2
)
// GoodsType .
type GoodsType int
// GoodsTypes enum
const (
GoodsVIP GoodsType = 1
)
// Desc of GoodsType
func (t GoodsType) Desc() string {
switch t {
case GoodsVIP:
return "大会员"
default:
return "未定义商品类型 " + string(t)
}
}
// TimeType .
type TimeType int
// TimeTypes enum
const (
Daily TimeType = 1 + iota
Weekly
Monthly
)
// RangeStart returns the included startTime
func (t TimeType) RangeStart(date time.Time) time.Time {
if t == Weekly {
n := int(date.Weekday() - time.Monday)
if n < 0 {
n += 7
}
return time.Date(date.Year(), date.Month(), date.Day()-n, 0, 0, 0, 0, time.Local)
} else if t == Monthly {
return time.Date(date.Year(), date.Month(), 1, 0, 0, 0, 0, time.Local)
}
return time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, time.Local)
}
// RangeEnd returns the excluded endTime
func (t TimeType) RangeEnd(date time.Time) time.Time {
if t == Weekly {
n := int(time.Monday - date.Weekday())
if n <= 0 {
n += 7
}
return time.Date(date.Year(), date.Month(), date.Day()+n, 0, 0, 0, 0, time.Local)
} else if t == Monthly {
return time.Date(date.Year(), date.Month()+1, 1, 0, 0, 0, 0, time.Local)
} else if t == Daily {
return time.Date(date.Year(), date.Month(), date.Day()+1, 0, 0, 0, 0, time.Local)
}
return time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, time.Local)
}
// RangeDesc .
func (t TimeType) RangeDesc(start time.Time, end time.Time) string {
if t == Daily {
return start.Format("2006-01-02")
}
return start.Format("2006-01-02") + "~" + end.AddDate(0, 0, -1).Format("2006-01-02")
}
// Next returns time on next range
func (t TimeType) Next() func(time.Time) time.Time {
return func(start time.Time) time.Time {
switch t {
case Daily:
return start.AddDate(0, 0, 1)
case Weekly:
return start.AddDate(0, 0, 7)
case Monthly:
return start.AddDate(0, 1, 0)
default:
return start.AddDate(0, 0, 1)
}
}
}
// OrderQueryArg .
type OrderQueryArg struct {
TimeType TimeType `form:"time_type" default:"1"`
FromTime int64 `form:"from_time" validate:"required,min=1"`
ToTime int64 `form:"to_time" validate:"required,min=1"`
GoodsType int `form:"goods_type"`
GoodsID string `form:"goods_id"`
GoodsName string `form:"goods_name"`
OrderNO string `form:"order_no"`
MID int64 `form:"mid"`
Nickname string `form:"nickname"`
From int `form:"from" validate:"min=0" default:"0"`
Limit int `form:"limit" validate:"min=1" default:"20"`
// fromTime + toTime + timeType => (included) startTime & (excluded) endTime
StartTime time.Time `form:"-"`
EndTime time.Time `form:"-"`
}

View File

@@ -0,0 +1,73 @@
package model
import (
"go-common/library/time"
)
// UpInfo upinfo of video
type UpInfo struct {
ID int64 `json:"id" gorm:"id"`
MID int64 `json:"mid" gorm:"column:mid"`
Nickname string `json:"nickname" gorm:"column:nickname"`
AccountType int `json:"account_type" gorm:"column:account_type"`
OriginalArchiveCount int `json:"original_archive_count" gorm:"column:original_archive_count"`
ArticleCount int `json:"article_count" gorm:"column:article_count"`
Avs int `json:"avs" gorm:"column:avs"`
BgmPlayCount int `json:"bgm_play_count"`
BgmApplyCount int `json:"bgm_apply_count"`
TotalPlayCount int `json:"total_play_count" gorm:"column:total_play_count"`
TotalViewCount int `json:"total_view_count" gorm:"column:total_view_count"`
MainCategory int `json:"category_id" gorm:"column:category_id"`
Fans int `json:"fans" gorm:"column:fans"`
BGMs int `json:"bgms"`
AccountState int `json:"account_state" gorm:"column:account_state"`
SignType int `json:"sign_type,omitempty" gorm:"column:sign_type"`
Reason string `json:"reason" gorm:"column:reason"`
ApplyAt time.Time `json:"apply_at" gorm:"column:apply_at"`
SignedAt time.Time `json:"signed_at" gorm:"column:signed_at"`
RejectAt time.Time `json:"reject_at" gorm:"column:reject_at"`
ForbidAt time.Time `json:"forbid_at" gorm:"column:forbid_at"`
QuitAt time.Time `json:"quit_at,omitempty" gorm:"column:quit_at"`
DismissAt time.Time `json:"dismiss_at" gorm:"column:dismiss_at"`
ExpiredIn time.Time `json:"expired_in,omitempty" gorm:"column:expired_in"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
CreditScore int `json:"credit_score"`
IsDeleted int `json:"-" gorm:"column:is_deleted"`
SignedType []int `json:"signed_type"`
OtherType []int `json:"other_type"`
}
// Blocked up in blacklist
type Blocked struct {
ID int64 `json:"id" gorm:"id"`
MID int64 `json:"mid" gorm:"column:mid"`
Nickname string `json:"nickname" gorm:"column:nickname"`
OriginalArchiveCount int `json:"original_archive_count" gorm:"column:original_archive_count"`
MainCategory int `json:"category_id" gorm:"column:category_id"`
Fans int `json:"fans" gorm:"column:fans"`
ApplyAt time.Time `json:"apply_at" gorm:"column:apply_at"`
CTime time.Time `json:"ctime" gorm:"column:ctime"`
MTime time.Time `json:"mtime" gorm:"column:mtime"`
IsDeleted int `json:"-" gorm:"column:is_deleted"`
}
// SimpleUpInfo include mid and signedAt for up-allowance-data compute
type SimpleUpInfo struct {
MID int64 `json:"mid"`
SignedAt time.Time `json:"signed_at"`
}
// CreditRecord credit deducted and recover record
type CreditRecord struct {
ID int64 `json:"id"`
MID int64 `json:"mid"`
OperateAt time.Time `json:"operate_at"`
Operator string `json:"operator"`
Reason int `json:"reason"`
Deducted int `json:"deducted"`
Remaining int `json:"remaining"`
IsDeleted int `json:"recovered"`
CTime time.Time `json:"ctime"`
MTime time.Time `json:"mtime"`
}