123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- 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
- }
|