229 lines
5.4 KiB
Go
229 lines
5.4 KiB
Go
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
|
|
}
|