You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
7.2 KiB
277 lines
7.2 KiB
package income |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"strconv" |
|
|
|
incomeD "go-common/app/job/main/growup/dao/income" |
|
model "go-common/app/job/main/growup/model/income" |
|
) |
|
|
|
// UpIncomeSvr up income service |
|
type UpIncomeSvr struct { |
|
batchSize int |
|
dao *incomeD.Dao |
|
} |
|
|
|
// NewUpIncomeSvr new income service |
|
func NewUpIncomeSvr(dao *incomeD.Dao, batchSize int) (svr *UpIncomeSvr) { |
|
return &UpIncomeSvr{ |
|
batchSize: batchSize, |
|
dao: dao, |
|
} |
|
} |
|
|
|
func (p *UpIncomeSvr) getUpIncomeByDate(c context.Context, upCh chan []*model.UpIncome, date string, limit int) (err error) { |
|
defer close(upCh) |
|
var id int64 |
|
for { |
|
var up []*model.UpIncome |
|
up, err = p.dao.GetUpIncomeTable(c, "up_income", date, id, limit) |
|
if err != nil { |
|
return |
|
} |
|
upCh <- up |
|
if len(up) < limit { |
|
break |
|
} |
|
id = up[len(up)-1].ID |
|
} |
|
return |
|
} |
|
|
|
// BatchInsertUpIncome insert up_income batch |
|
func (p *UpIncomeSvr) BatchInsertUpIncome(c context.Context, us map[int64]*model.UpIncome) (err error) { |
|
var ( |
|
buff = make([]*model.UpIncome, p.batchSize) |
|
buffEnd = 0 |
|
) |
|
|
|
for _, u := range us { |
|
buff[buffEnd] = u |
|
buffEnd++ |
|
|
|
if buffEnd >= p.batchSize { |
|
values := upIncomeValues(buff[:buffEnd]) |
|
buffEnd = 0 |
|
_, err = p.dao.InsertUpIncome(c, values) |
|
if err != nil { |
|
return |
|
} |
|
} |
|
} |
|
if buffEnd > 0 { |
|
values := upIncomeValues(buff[:buffEnd]) |
|
buffEnd = 0 |
|
_, err = p.dao.InsertUpIncome(c, values) |
|
} |
|
return |
|
} |
|
|
|
func upIncomeValues(us []*model.UpIncome) (values string) { |
|
var buf bytes.Buffer |
|
for _, u := range us { |
|
buf.WriteString("(") |
|
buf.WriteString(strconv.FormatInt(u.MID, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AvCount, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.PlayCount, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AvIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AudioIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.ColumnCount, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.ColumnIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.TaxMoney, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.Income, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.TotalIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AvBaseIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AvTax, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.ColumnBaseIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.ColumnTax, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BgmBaseIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BgmTax, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString("'" + u.Date.Time().Format(_layout) + "'") |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BaseIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BgmIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BgmCount, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10)) |
|
buf.WriteByte(',') |
|
buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10)) |
|
buf.WriteString(")") |
|
buf.WriteByte(',') |
|
} |
|
if buf.Len() > 0 { |
|
buf.Truncate(buf.Len() - 1) |
|
} |
|
values = buf.String() |
|
buf.Reset() |
|
return |
|
} |
|
|
|
///************************************************************ FOR HISTORY ****************************************************************/ |
|
// |
|
//// UpdateBusinessIncomeByDate update business income by date |
|
//func (p *UpIncomeSvr) UpdateBusinessIncomeByDate(c context.Context, date string, ustat map[int64]*model.UpIncomeStat) (err error) { |
|
// us, err := p.businessTotalIncome(c, ustat, date) |
|
// if err != nil { |
|
// return |
|
// } |
|
// err = p.batchUpdateUpIncome(c, us) |
|
// if err != nil { |
|
// return |
|
// } |
|
// return p.batchUpdateUpIncomeStat(c, ustat) |
|
//} |
|
// |
|
//// for history data m: map[mid]map[date]*model.UpIncome |
|
//func (p *UpIncomeSvr) businessTotalIncome(c context.Context, ustat map[int64]*model.UpIncomeStat, date string) (m []*model.UpIncome, err error) { |
|
// var id int64 |
|
// for { |
|
// var ups []*model.UpIncome |
|
// ups, err = p.dao.GetUpIncomeTable(c, "up_income", date, id, 2000) |
|
// if err != nil { |
|
// return |
|
// } |
|
// for _, up := range ups { |
|
// ut := ustat[up.MID] |
|
// |
|
// ut.AvTotalIncome += up.AvIncome |
|
// up.AvTotalIncome = ut.AvTotalIncome |
|
// |
|
// ut.ColumnTotalIncome += up.ColumnIncome |
|
// up.ColumnTotalIncome = ut.ColumnTotalIncome |
|
// |
|
// ut.BgmTotalIncome += up.BgmIncome |
|
// up.BgmTotalIncome = ut.BgmTotalIncome |
|
// m = append(m, up) |
|
// } |
|
// if len(ups) < 2000 { |
|
// break |
|
// } |
|
// id = ups[len(ups)-1].ID |
|
// } |
|
// return |
|
//} |
|
// |
|
//// BatchUpdateUpIncome insert up_income batch |
|
//func (p *UpIncomeSvr) batchUpdateUpIncome(c context.Context, us []*model.UpIncome) (err error) { |
|
// var ( |
|
// buff = make([]*model.UpIncome, p.batchSize) |
|
// buffEnd = 0 |
|
// ) |
|
// |
|
// for _, u := range us { |
|
// buff[buffEnd] = u |
|
// buffEnd++ |
|
// |
|
// if buffEnd >= p.batchSize { |
|
// values := businessValues(buff[:buffEnd]) |
|
// buffEnd = 0 |
|
// _, err = p.dao.FixInsertUpIncome(c, values) |
|
// if err != nil { |
|
// return |
|
// } |
|
// } |
|
// } |
|
// if buffEnd > 0 { |
|
// values := businessValues(buff[:buffEnd]) |
|
// buffEnd = 0 |
|
// _, err = p.dao.FixInsertUpIncome(c, values) |
|
// } |
|
// return |
|
//} |
|
// |
|
//func businessValues(us []*model.UpIncome) (values string) { |
|
// var buf bytes.Buffer |
|
// for _, u := range us { |
|
// buf.WriteString("(") |
|
// buf.WriteString(strconv.FormatInt(u.MID, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString("'" + u.Date.Time().Format(_layout) + "'") |
|
// buf.WriteString(")") |
|
// buf.WriteByte(',') |
|
// } |
|
// if buf.Len() > 0 { |
|
// buf.Truncate(buf.Len() - 1) |
|
// } |
|
// values = buf.String() |
|
// buf.Reset() |
|
// return |
|
//} |
|
// |
|
//// BatchUpdateUpIncome insert up_income batch |
|
//func (p *UpIncomeSvr) batchUpdateUpIncomeStat(c context.Context, us map[int64]*model.UpIncomeStat) (err error) { |
|
// var ( |
|
// buff = make([]*model.UpIncomeStat, p.batchSize) |
|
// buffEnd = 0 |
|
// ) |
|
// |
|
// for _, u := range us { |
|
// buff[buffEnd] = u |
|
// buffEnd++ |
|
// |
|
// if buffEnd >= p.batchSize { |
|
// values := businessStatValues(buff[:buffEnd]) |
|
// buffEnd = 0 |
|
// _, err = p.dao.FixInsertUpIncomeStat(c, values) |
|
// if err != nil { |
|
// return |
|
// } |
|
// } |
|
// } |
|
// if buffEnd > 0 { |
|
// values := businessStatValues(buff[:buffEnd]) |
|
// buffEnd = 0 |
|
// _, err = p.dao.FixInsertUpIncomeStat(c, values) |
|
// } |
|
// return |
|
//} |
|
// |
|
//func businessStatValues(ustat []*model.UpIncomeStat) (values string) { |
|
// var buf bytes.Buffer |
|
// for _, u := range ustat { |
|
// buf.WriteString("(") |
|
// buf.WriteString(strconv.FormatInt(u.MID, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.AvTotalIncome, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.ColumnTotalIncome, 10)) |
|
// buf.WriteByte(',') |
|
// buf.WriteString(strconv.FormatInt(u.BgmTotalIncome, 10)) |
|
// buf.WriteString(")") |
|
// buf.WriteByte(',') |
|
// } |
|
// if buf.Len() > 0 { |
|
// buf.Truncate(buf.Len() - 1) |
|
// } |
|
// values = buf.String() |
|
// buf.Reset() |
|
// return |
|
//}
|
|
|