123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- package charge
- import (
- "context"
- "fmt"
- "strings"
- "testing"
- "time"
- model "go-common/app/job/main/growup/model/charge"
- xtime "go-common/library/time"
- . "github.com/smartystreets/goconvey/convey"
- )
- func Test_AvCharge(t *testing.T) {
- Convey("Test av weekly and monthly charge\n", t, func() {
- c := context.Background()
- deleteAll(c)
- ac1 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1101, 110, 10)
- ac2 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1102, 110, 10)
- d, _ := time.ParseInLocation("2006-01-02", "2018-06-01", time.Local)
- err := s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvWeeklyCharge(c, ac1, 30, 10, 10)
- checkAvWeeklyCharge(c, ac2, 30, 10, 10)
- checkAvMonthlyCharge(c, ac1, 30, 10, 10)
- checkAvMonthlyCharge(c, ac2, 30, 10, 10)
- ac1 = insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1101, 110, 10)
- ac2 = insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1102, 110, 20)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-02", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvWeeklyCharge(c, ac1, 60, 20, 20)
- checkAvWeeklyCharge(c, ac2, 90, 30, 30)
- checkAvMonthlyCharge(c, ac1, 60, 20, 20)
- checkAvMonthlyCharge(c, ac2, 90, 30, 30)
- ac1 = insertAvDailyCharge(c, "2018-06-05", "2018-06-01 15:02:03", 1101, 110, 15)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-05", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvWeeklyCharge(c, ac1, 45, 15, 15)
- checkAvMonthlyCharge(c, ac1, 105, 35, 35)
- })
- }
- func Test_AvChargeDateStatis(t *testing.T) {
- Convey("Test av charge date statis\n", t, func() {
- c := context.Background()
- deleteAll(c)
- insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1101, 110, 10)
- insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1102, 110, 10)
- insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1103, 110, 3500)
- d, _ := time.ParseInLocation("2006-01-02", "2018-06-01", time.Local)
- err := s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeDateStatis(c, 0, 2, 1, 3520, 12, d, "av_charge_daily_statis")
- checkAvChargeDateStatis(c, 1, 1, 1, 3520, 12, d, "av_charge_daily_statis")
- weekD := getStartWeeklyDate(d)
- checkAvChargeDateStatis(c, 0, 2, 1, 3520, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 1, 1, 1, 3520, 12, weekD, "av_charge_weekly_statis")
- monthD := getStartMonthlyDate(d)
- checkAvChargeDateStatis(c, 0, 2, 1, 3520, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 1, 1, 1, 3520, 12, monthD, "av_charge_monthly_statis")
- insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1101, 110, 1000)
- insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1102, 110, 1000)
- insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1103, 110, 4000)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-02", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeDateStatis(c, 0, 2, 1, 6000, 12, d, "av_charge_daily_statis")
- checkAvChargeDateStatis(c, 1, 1, 1, 6000, 12, d, "av_charge_daily_statis")
- weekD = getStartWeeklyDate(d)
- charge := 6000 + 3520
- checkAvChargeDateStatis(c, 0, 2, 1, charge, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, charge, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 2, 1, 1, charge, 12, weekD, "av_charge_weekly_statis")
- monthD = getStartMonthlyDate(d)
- checkAvChargeDateStatis(c, 0, 2, 1, charge, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, charge, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 2, 1, 1, charge, 12, monthD, "av_charge_monthly_statis")
- insertAvDailyCharge(c, "2018-06-10", "2018-06-01 15:02:03", 1101, 110, 15000)
- insertAvDailyCharge(c, "2018-06-10", "2018-06-01 15:02:03", 1102, 110, 15000)
- insertAvDailyCharge(c, "2018-06-10", "2018-06-01 15:02:03", 1103, 110, 40000)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-10", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeDateStatis(c, 0, 0, 1, 70000, 12, d, "av_charge_daily_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, 70000, 12, d, "av_charge_daily_statis")
- checkAvChargeDateStatis(c, 3, 2, 1, 70000, 12, d, "av_charge_daily_statis")
- checkAvChargeDateStatis(c, 4, 1, 1, 70000, 12, d, "av_charge_daily_statis")
- weekD = getStartWeeklyDate(d)
- checkAvChargeDateStatis(c, 0, 0, 1, 70000, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, 70000, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 3, 2, 1, 70000, 12, weekD, "av_charge_weekly_statis")
- checkAvChargeDateStatis(c, 4, 1, 1, 70000, 12, weekD, "av_charge_weekly_statis")
- monthD = getStartMonthlyDate(d)
- checkAvChargeDateStatis(c, 0, 0, 1, 79520, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, 79520, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 3, 2, 1, 79520, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 4, 1, 1, 79520, 12, monthD, "av_charge_monthly_statis")
- insertAvDailyCharge(c, "2018-07-10", "2018-06-01 15:02:03", 1101, 110, 100)
- d, _ = time.ParseInLocation("2006-01-02", "2018-07-10", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- monthD = getStartMonthlyDate(d)
- checkAvChargeDateStatis(c, 0, 1, 1, 100, 12, monthD, "av_charge_monthly_statis")
- checkAvChargeDateStatis(c, 1, 0, 1, 100, 12, monthD, "av_charge_monthly_statis")
- })
- }
- func Test_AvChargeStatis(t *testing.T) {
- Convey("Test av charge statis\n", t, func() {
- c := context.Background()
- deleteAll(c)
- ac1 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1101, 110, 1000)
- ac2 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 15:02:03", 1102, 110, 1000)
- d, _ := time.ParseInLocation("2006-01-02", "2018-06-01", time.Local)
- err := s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeStatis(c, ac1, 1000)
- checkAvChargeStatis(c, ac2, 1000)
- ac1 = insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1101, 110, 1000)
- ac2 = insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1102, 110, 1000)
- ac3 := insertAvDailyCharge(c, "2018-06-02", "2018-06-01 15:02:03", 1103, 110, 1000)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-02", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeStatis(c, ac1, 2000)
- checkAvChargeStatis(c, ac2, 2000)
- checkAvChargeStatis(c, ac3, 1000)
- ac2 = insertAvDailyCharge(c, "2018-07-03", "2018-06-01 15:02:03", 1102, 110, 1000)
- ac3 = insertAvDailyCharge(c, "2018-07-03", "2018-06-01 15:02:03", 1103, 110, 1000)
- ac4 := insertAvDailyCharge(c, "2018-07-03", "2018-06-01 15:02:03", 1104, 110, 1000)
- d, _ = time.ParseInLocation("2006-01-02", "2018-07-03", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkAvChargeStatis(c, ac1, 2000)
- checkAvChargeStatis(c, ac2, 3000)
- checkAvChargeStatis(c, ac3, 2000)
- checkAvChargeStatis(c, ac4, 1000)
- })
- }
- // up_charge
- func Test_UpCharge(t *testing.T) {
- Convey("Test up daily weekly monthly charge\n", t, func() {
- c := context.Background()
- deleteAll(c)
- ac1 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 20:02:03", 1101, 110, 10)
- ac2 := insertAvDailyCharge(c, "2018-06-01", "2018-06-01 20:02:03", 1102, 110, 10)
- d, _ := time.ParseInLocation("2006-01-02", "2018-06-01", time.Local)
- err := s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- acs := []*model.AvCharge{ac1, ac2}
- checkUpDailyCharge(c, acs, 2, 20, "up_daily_charge", "2018-06-01")
- checkUpWeeklyCharge(c, acs, 2, 20)
- checkUpMonthlyCharge(c, acs, 2, 20)
- ac11 := insertAvDailyCharge(c, "2018-06-02", "2018-06-01 20:02:03", 1101, 110, 10)
- ac21 := insertAvDailyCharge(c, "2018-06-02", "2018-06-01 20:02:03", 1102, 110, 10)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-02", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- acs = append(acs, []*model.AvCharge{ac11, ac21}...)
- checkUpDailyCharge(c, []*model.AvCharge{ac11, ac21}, 2, 20, "up_daily_charge", "2018-06-01")
- checkUpWeeklyCharge(c, acs, 2, 40)
- checkUpMonthlyCharge(c, acs, 2, 40)
- ac12 := insertAvDailyCharge(c, "2018-06-05", "2018-06-01 20:02:03", 1101, 110, 10)
- d, _ = time.ParseInLocation("2006-01-02", "2018-06-05", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- acs = append(acs, []*model.AvCharge{ac12}...)
- checkUpDailyCharge(c, []*model.AvCharge{ac12}, 1, 10, "up_daily_charge", "2018-06-05")
- checkUpWeeklyCharge(c, []*model.AvCharge{ac12}, 1, 10)
- checkUpMonthlyCharge(c, acs, 2, 50)
- ac13 := insertAvDailyCharge(c, "2018-07-05", "2018-06-01 20:02:03", 1101, 110, 10)
- d, _ = time.ParseInLocation("2006-01-02", "2018-07-05", time.Local)
- err = s.runVideo(c, d, nil)
- So(err, ShouldBeNil)
- checkUpDailyCharge(c, []*model.AvCharge{ac13}, 1, 10, "up_daily_charge", "2018-07-05")
- checkUpWeeklyCharge(c, []*model.AvCharge{ac13}, 1, 10)
- checkUpMonthlyCharge(c, []*model.AvCharge{ac13}, 1, 10)
- })
- }
- func checkAvWeeklyCharge(c context.Context, ac *model.AvCharge, totalPlayCount, incCharge, totalCharge int64) {
- avWeeklyCharge, err := s.GetAvCharge(c, startWeeklyDate, s.dao.AvWeeklyCharge)
- So(err, ShouldBeNil)
- var aw *model.AvCharge
- for _, av := range avWeeklyCharge {
- if av.AvID == ac.AvID {
- aw = av
- break
- }
- }
- So(ac.AvID, ShouldEqual, aw.AvID)
- So(ac.MID, ShouldEqual, aw.MID)
- So(ac.TagID, ShouldEqual, aw.TagID)
- So(ac.IsOriginal, ShouldEqual, aw.IsOriginal)
- So(ac.UploadTime, ShouldEqual, aw.UploadTime)
- So(totalPlayCount, ShouldEqual, aw.TotalPlayCount)
- So(totalCharge, ShouldEqual, aw.TotalCharge)
- So(incCharge, ShouldEqual, aw.IncCharge)
- So(xtime.Time(getStartWeeklyDate(ac.Date.Time()).Unix()), ShouldEqual, aw.Date)
- }
- func checkAvMonthlyCharge(c context.Context, ac *model.AvCharge, totalPlayCount, incCharge, totalCharge int64) {
- avCharge, err := s.GetAvCharge(c, startMonthlyDate, s.dao.AvMonthlyCharge)
- So(err, ShouldBeNil)
- var aw *model.AvCharge
- for _, av := range avCharge {
- if av.AvID == ac.AvID {
- aw = av
- break
- }
- }
- So(ac.AvID, ShouldEqual, aw.AvID)
- So(ac.MID, ShouldEqual, aw.MID)
- So(ac.TagID, ShouldEqual, aw.TagID)
- So(ac.IsOriginal, ShouldEqual, aw.IsOriginal)
- So(ac.UploadTime, ShouldEqual, aw.UploadTime)
- So(totalPlayCount, ShouldEqual, aw.TotalPlayCount)
- So(totalCharge, ShouldEqual, aw.TotalCharge)
- So(incCharge, ShouldEqual, aw.IncCharge)
- So(xtime.Time(getStartMonthlyDate(ac.Date.Time()).Unix()), ShouldEqual, aw.Date)
- }
- func checkAvChargeStatis(c context.Context, ac *model.AvCharge, totalCharge int64) {
- ai := &model.AvChargeStatis{}
- err := s.dao.QueryRow(c, fmt.Sprintf("select av_id,mid,tag_id,is_original,upload_time,total_charge from av_charge_statis where av_id = %d", ac.AvID)).Scan(
- &ai.AvID, &ai.MID, &ai.TagID, &ai.IsOriginal, &ai.UploadTime, &ai.TotalCharge)
- So(err, ShouldBeNil)
- So(ac.AvID, ShouldEqual, ai.AvID)
- So(ac.MID, ShouldEqual, ai.MID)
- So(ac.TagID, ShouldEqual, ai.TagID)
- So(ac.IsOriginal, ShouldEqual, ai.IsOriginal)
- So(ac.UploadTime, ShouldEqual, ai.UploadTime)
- So(totalCharge, ShouldEqual, ai.TotalCharge)
- }
- func checkUpDailyCharge(c context.Context, acs []*model.AvCharge, count, total int64, table, date string) {
- if len(acs) == 0 {
- return
- }
- if date == "" {
- date = acs[0].Date.Time().Format(_layout)
- }
- var incCharge int64
- for _, ac := range acs {
- incCharge += ac.IncCharge
- }
- up := &model.UpCharge{}
- err := s.dao.QueryRow(c, fmt.Sprintf("select av_count,inc_charge, total_charge from %s where mid = %d and date = '%s'", table, acs[0].MID, date)).Scan(
- &up.AvCount, &up.IncCharge, &up.TotalCharge)
- So(err, ShouldBeNil)
- So(total, ShouldEqual, up.TotalCharge)
- So(incCharge, ShouldEqual, up.IncCharge)
- }
- func checkUpWeeklyCharge(c context.Context, avs []*model.AvCharge, count, total int64) {
- m := make(map[string][]*model.AvCharge)
- for _, av := range avs {
- d := getStartWeeklyDate(av.Date.Time()).Format(_layout)
- if _, ok := m[d]; !ok {
- m[d] = make([]*model.AvCharge, 0)
- }
- m[d] = append(m[d], av)
- }
- for date, avs := range m {
- checkUpDailyCharge(c, avs, count, total, "up_weekly_charge", date)
- }
- }
- func checkUpMonthlyCharge(c context.Context, avs []*model.AvCharge, count, total int64) {
- m := make(map[string][]*model.AvCharge)
- for _, av := range avs {
- d := getStartMonthlyDate(av.Date.Time()).Format(_layout)
- if _, ok := m[d]; !ok {
- m[d] = make([]*model.AvCharge, 0)
- }
- m[d] = append(m[d], av)
- }
- for date, avs := range m {
- checkUpDailyCharge(c, avs, count, total, "up_monthly_charge", date)
- }
- }
- func checkAvChargeDateStatis(c context.Context, section, avs, categoryID, charge, count int, d time.Time, table string) {
- xd := xtime.Time(d.Unix())
- ads := &model.DateStatis{}
- err := s.dao.QueryRow(c, fmt.Sprintf("select avs,charge,cdate from %s where money_section = %d and category_id = %d and cdate = '%s'", table, section, categoryID, d.Format(_layout))).Scan(
- &ads.Count, &ads.Charge, &ads.CDate)
- So(err, ShouldBeNil)
- So(charge, ShouldEqual, ads.Charge)
- So(xd, ShouldEqual, ads.CDate)
- So(avs, ShouldEqual, ads.Count)
- var ccount int64
- err = s.dao.QueryRow(c, fmt.Sprintf("select count(*) from %s where category_id = %d and cdate = '%s'", table, categoryID, d.Format(_layout))).Scan(&ccount)
- So(err, ShouldBeNil)
- So(count, ShouldEqual, ccount)
- }
- func deleteAll(c context.Context) {
- s.dao.Exec(c, "truncate av_daily_charge_06")
- s.dao.Exec(c, "truncate av_daily_charge_07")
- s.dao.Exec(c, "truncate av_weekly_charge")
- s.dao.Exec(c, "truncate av_monthly_charge")
- s.dao.Exec(c, "truncate av_charge_statis")
- s.dao.Exec(c, "truncate up_daily_charge")
- s.dao.Exec(c, "truncate up_weekly_charge")
- s.dao.Exec(c, "truncate up_monthly_charge")
- s.dao.Exec(c, "truncate av_charge_daily_statis")
- s.dao.Exec(c, "truncate av_charge_weekly_statis")
- s.dao.Exec(c, "truncate av_charge_monthly_statis")
- }
- func getAvDailyChargeStruct(date string, uploadDate string, avID, mid, charge int64) *model.AvCharge {
- d, _ := time.ParseInLocation(_layout, date, time.Local)
- upD, _ := time.ParseInLocation(_layoutSec, uploadDate, time.Local)
- ac := &model.AvCharge{
- AvID: avID,
- MID: mid,
- TagID: 1,
- IsOriginal: 1,
- DanmakuCount: charge,
- CommentCount: charge,
- CollectCount: charge,
- CoinCount: charge,
- ShareCount: charge,
- ElecPayCount: charge,
- TotalPlayCount: charge * int64(3),
- WebPlayCount: charge,
- AppPlayCount: charge,
- H5PlayCount: charge,
- LvUnknown: charge,
- Lv0: charge,
- Lv1: charge,
- Lv2: charge,
- Lv3: charge,
- Lv4: charge,
- Lv5: charge,
- Lv6: charge,
- VScore: charge,
- IncCharge: charge,
- TotalCharge: 0,
- Date: xtime.Time(d.Unix()),
- UploadTime: xtime.Time(upD.Unix()),
- DBState: _dbInsert,
- }
- return ac
- }
- func insertAvDailyCharge(c context.Context, date string, uploadDate string, avID, mid, charge int64) *model.AvCharge {
- s.dao.Exec(c, fmt.Sprintf("insert into task_status(type,date,status) values(1,'%s',1) on duplicate key update date=values(date)", date))
- ac := getAvDailyChargeStruct(date, uploadDate, avID, mid, charge)
- _, err := s.avChargeBatchInsert(c, []*model.AvCharge{ac}, fmt.Sprintf("av_daily_charge_%s", strings.Split(date, "-")[1]))
- So(err, ShouldBeNil)
- return ac
- }
|