go-common/app/admin/main/vip/service/welfare.go

229 lines
5.4 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"fmt"
"math/rand"
"net/url"
"strings"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/time"
)
const (
_delete = 1
_maxRows = 20000
)
// WelfareTypeSave save welfare type
func (s *Service) WelfareTypeSave(id int, name, username string) (err error) {
wt := new(model.WelfareType)
wt.ID = id
wt.Name = name
wt.OperName = username
if id == 0 {
if err = s.dao.WelfareTypeAdd(wt); err != nil {
log.Error("WelfareTypeAdd(%v) Error(%v)", wt, err)
}
} else {
if err = s.dao.WelfareTypeUpd(wt); err != nil {
log.Error("WelfareTypeUpd(%v) Error(%v)", wt, err)
}
}
return
}
// WelfareTypeState delete welfare type
func (s *Service) WelfareTypeState(c context.Context, id int, username string) (err error) {
tx := s.dao.BeginGormTran(c)
if err = s.dao.WelfareTypeState(tx, id, _delete, 0, username); err != nil {
log.Error("WelfareTypeState id(%v) Error(%v)", id, err)
tx.Rollback()
return
}
if err = s.dao.ResetWelfareTid(tx, id); err != nil {
log.Error("ResetWelfareTid tid(%v) Error(%v)", id, err)
tx.Rollback()
return
}
return tx.Commit().Error
}
// WelfareTypeList get welfare type list
func (s *Service) WelfareTypeList() (wts []*model.WelfareTypeRes, err error) {
if wts, err = s.dao.WelfareTypeList(); err != nil {
log.Error("WelfareTypeList Error(%v)", err)
}
return
}
// WelfareSave save welfare
func (s *Service) WelfareSave(username string, req *model.WelfareReq) (err error) {
var (
burl string
hurl string
)
wf := new(model.Welfare)
copyFiled(wf, req)
wf.OperName = username
if burl, err = getRelativePath(wf.BackdropUri); err != nil {
return
}
wf.BackdropUri = burl
if hurl, err = getRelativePath(wf.HomepageUri); err != nil {
return
}
wf.HomepageUri = hurl
if req.ID == 0 {
if err = s.dao.WelfareAdd(wf); err != nil {
log.Error("WelfareAdd(%v) Error(%v)", wf, err)
}
} else {
req.BackdropUri = burl
req.HomepageUri = hurl
if err = s.dao.WelfareUpd(req); err != nil {
log.Error("WelfareUpd(%v) Error(%v)", wf, err)
}
}
return
}
// WelfareState delete welfare
func (s *Service) WelfareState(id int, username string) (err error) {
if err = s.dao.WelfareState(id, _delete, 0, username); err != nil {
log.Error("WelfareState(%v) Error(%v)", id, err)
}
return
}
// WelfareList get welfare list
func (s *Service) WelfareList(tid int) (ws []*model.WelfareRes, err error) {
if ws, err = s.dao.WelfareList(tid); err != nil {
log.Error("WelfareList tid(%v) Error(%v)", tid, err)
return
}
randomBFSHost := fmt.Sprintf(s.c.Property.WelfareBgHost, rand.Intn(3))
for _, w := range ws {
wbs, err := s.dao.WelfareBatchList(w.ID)
if err != nil {
log.Error("WelfareBatchList wid(%v) Error(%v)", w.ID, err)
return ws, err
}
w.HomepageUri = fmt.Sprintf("%v%v", randomBFSHost, w.HomepageUri)
w.BackdropUri = fmt.Sprintf("%v%v", randomBFSHost, w.BackdropUri)
for _, wb := range wbs {
w.ReceivedCount += wb.ReceivedCount
w.Count += wb.Count
}
}
return
}
// WelfareBatchUpload save upload welfare code
func (s *Service) WelfareBatchUpload(body []byte, name, username string, wid, vtime int) (err error) {
wcb := new(model.WelfareCodeBatch)
wcb.BatchName = name
wcb.Wid = wid
wcb.Vtime = time.Time(vtime)
wcb.OperName = username
wcs := make([]*model.WelfareCode, 0)
str := string(body)
for _, lineStr := range strings.Split(str, "\n") {
lineStr = strings.TrimSpace(lineStr)
if lineStr == "" {
continue
}
wc := new(model.WelfareCode)
wc.Wid = wid
wc.Code = lineStr
wcs = append(wcs, wc)
}
wcb.Count = len(wcs)
if wcb.Count > _maxRows {
err = ecode.VipWelfareUploadMaxErr
return
}
if err = s.dao.WelfareBatchSave(wcb); err != nil {
log.Error("WelfareBatchSave (%v) Error(%v)", wcb, err)
return
}
for _, wc := range wcs {
wc.Bid = wcb.ID
}
if err = s.dao.WelfareCodeBatchInsert(wcs); err != nil {
log.Error("WelfareBatchSave Error(%v)", err)
}
return
}
// WelfareBatchList get welfare batch list
func (s *Service) WelfareBatchList(wid int) (wbs []*model.WelfareBatchRes, err error) {
if wbs, err = s.dao.WelfareBatchList(wid); err != nil {
log.Error("WelfareBatchList wid(%v) Error(%v)", wid, err)
}
return
}
// WelfareBatchState delete welfare batch
func (s *Service) WelfareBatchState(c context.Context, id int, username string) (err error) {
tx := s.dao.BeginGormTran(c)
if err = s.dao.WelfareBatchState(tx, id, _delete, 0, username); err != nil {
log.Error("WelfareBatchState(%v) Error(%v)", id, err)
tx.Rollback()
return
}
if err = s.dao.WelfareCodeStatus(tx, id, _delete); err != nil {
log.Error("WelfareCodeStatus bid(%v) Error(%v)", id, err)
tx.Rollback()
return
}
return tx.Commit().Error
}
func copyFiled(wf *model.Welfare, req *model.WelfareReq) {
wf.ID = req.ID
wf.WelfareName = req.WelfareName
wf.WelfareDesc = req.WelfareDesc
wf.HomepageUri = req.HomepageUri
wf.BackdropUri = req.BackdropUri
wf.Recommend = req.Recommend
wf.Rank = req.Rank
wf.Tid = req.Tid
wf.Stime = req.Stime
wf.Etime = req.Etime
wf.UsageForm = req.UsageForm
wf.ReceiveRate = req.ReceiveRate
wf.VipType = req.VipType
}
// getRelativePath get relative path
func getRelativePath(absolutePath string) (relativePath string, err error) {
u, err := url.Parse(absolutePath)
if err != nil {
err = ecode.VipWelfareUrlUnvalid
log.Error("hostChange ParseURL(%v) error (%v)", absolutePath, err)
return
}
relativePath = u.Path
return
}