go-common/app/admin/main/videoup/service/pgc.go

170 lines
5.2 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"fmt"
"strings"
"time"
"go-common/app/admin/main/videoup/model/archive"
"go-common/library/database/sql"
"go-common/library/log"
xtime "go-common/library/time"
)
// PassByPGC update pgc archive state to StateOpen.
func (s *Service) PassByPGC(c context.Context, aid int64, gid int64, attrs map[uint]int32, redirectURL string, now time.Time) (err error) {
// archive
var a *archive.Archive
if a, err = s.arc.Archive(c, aid); err != nil || a == nil {
log.Error("s.arc.Archive(%d) error(%v) or a==nil", aid, err)
return
}
log.Info("aid(%d) begin tran pass pgc", aid)
// begin tran
var tx *sql.Tx
if tx, err = s.arc.BeginTran(c); err != nil {
log.Error("s.arc.BeginTran() error(%v)", err)
return
}
defer func() {
if r := recover(); r != nil {
tx.Rollback()
log.Error("wocao jingran recover le error(%v)", r)
}
}()
if a.State != archive.StateOpen {
var firstPass bool
if firstPass, err = s.txUpArcState(c, tx, a.Aid, archive.StateOpen); err != nil {
tx.Rollback()
log.Error("PassByPGC s.txUpArcState(aid(%d),state(%d)) error(%v)", aid, archive.StateOpen, err)
return
}
a.State = archive.StateOpen
log.Info("archive(%d) update archive state(%d)", a.Aid, a.State)
// archive ptime
if firstPass {
pTime := xtime.Time(now.Unix())
if _, err = s.arc.TxUpArcPTime(tx, a.Aid, pTime); err != nil {
tx.Rollback()
log.Error("s.arc.TxUpArcPTime(%d, %d) error(%v)", a.Aid, pTime, err)
return
}
a.PTime = pTime
log.Info("archive(%d) second_round upPTime(%d)", a.Aid, a.PTime)
}
var round = s.archiveRound(c, a, a.Aid, a.Mid, a.TypeID, a.Round, a.State, false)
if _, err = s.arc.TxUpArcRound(tx, a.Aid, round); err != nil {
tx.Rollback()
log.Error("s.arc.TxUpArcRound(%d, %d) error(%v)", a.Aid, round, err)
return
}
a.Round = round
log.Info("archive(%d) second_round upRound(%d)", a.Aid, a.Round)
}
var conts []string
if conts, err = s.txUpArcAttrs(tx, a, attrs, redirectURL); err != nil {
tx.Rollback()
return
}
if err = tx.Commit(); err != nil {
log.Error("tx.Commit() error(%v)", err)
return
}
log.Info("aid(%d) end tran pass pgc", aid)
if _, err := s.oversea.UpPolicyRelation(c, aid, gid); err != nil {
conts = append(conts, fmt.Sprintf("[地区展示]应用策略组ID[%d]", gid))
}
if len(conts) > 0 {
s.arc.AddArcOper(c, a.Aid, 221, a.Attribute, a.TypeID, int16(a.State), a.Round, 1, strings.Join(conts, ""), "")
}
// NOTE: send second_round for sync dede.
s.busSecondRound(aid, 0, false, false, false, false, false, false, "", nil)
return
}
// ModifyByPGC update pgc archive attributes.
func (s *Service) ModifyByPGC(c context.Context, aid int64, gid int64, attrs map[uint]int32, redirectURL string) (err error) {
// archive
var a *archive.Archive
if a, err = s.arc.Archive(c, aid); err != nil || a == nil {
log.Error("s.arc.Archive(%d) error(%v) or a==nil", aid, err)
return
}
log.Info("aid(%d) begin tran modify pgc", aid)
// begin tran
var tx *sql.Tx
if tx, err = s.arc.BeginTran(c); err != nil {
log.Error("s.arc.BeginTran() error(%v)", err)
return
}
defer func() {
if r := recover(); r != nil {
tx.Rollback()
log.Error("wocao jingran recover le error(%v)", r)
}
}()
var conts []string
if conts, err = s.txUpArcAttrs(tx, a, attrs, redirectURL); err != nil {
tx.Rollback()
return
}
if err = tx.Commit(); err != nil {
log.Error("tx.Commit() error(%v)", err)
return
}
log.Info("aid(%d) end tran modify pgc", aid)
if _, err := s.oversea.UpPolicyRelation(c, aid, gid); err != nil {
conts = append(conts, fmt.Sprintf("[地区展示]应用策略组ID[%d]", gid))
}
if len(conts) > 0 {
s.arc.AddArcOper(c, a.Aid, 221, a.Attribute, a.TypeID, int16(a.State), a.Round, 1, strings.Join(conts, ""), "")
}
// NOTE: send second_round for sync dede.
s.busSecondRound(aid, 0, false, false, false, false, false, false, "", nil)
return
}
// LockByPGC update pgc archive state to StateForbidLock.
func (s *Service) LockByPGC(c context.Context, aid int64) (err error) {
// archive
var a *archive.Archive
if a, err = s.arc.Archive(c, aid); err != nil || a == nil {
log.Error("s.arc.Archive(%d) error(%v) or a==nil", aid, err)
return
}
if a.State == archive.StateForbidLock {
return
}
log.Info("aid(%d) begin tran lock pgc", aid)
// begin tran
var tx *sql.Tx
if tx, err = s.arc.BeginTran(c); err != nil {
log.Error("s.arc.BeginTran() error(%v)", err)
return
}
defer func() {
if r := recover(); r != nil {
tx.Rollback()
log.Error("wocao jingran recover le error(%v)", r)
}
}()
if _, err = s.txUpArcState(c, tx, a.Aid, archive.StateForbidLock); err != nil {
tx.Rollback()
log.Error("s.txUpArcState(aid(%d),state(%d)) error(%v)", aid, archive.StateForbidLock, err)
return
}
a.State = archive.StateForbidLock
log.Info("archive(%d) update archive state(%d)", a.Aid, a.State)
if err = tx.Commit(); err != nil {
log.Error("tx.Commit() error(%v)", err)
return
}
log.Info("aid(%d) end tran lock pgc", aid)
s.arc.AddArcOper(c, a.Aid, 221, a.Attribute, a.TypeID, int16(a.State), a.Round, 1, "", "")
// NOTE: send second_round for sync dede.
s.busSecondRound(aid, 0, false, false, false, false, false, false, "", nil)
return
}