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

92 lines
2.4 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"time"
"go-common/app/admin/main/vip/model"
"go-common/library/ecode"
"go-common/library/log"
)
// DialogAll .
func (s *Service) DialogAll(c context.Context, appID, platform int64, status string) (res []*model.ConfDialogList, err error) {
var list []*model.ConfDialog
if list, err = s.dao.DialogAll(c, appID, platform, status); err != nil {
return
}
res = make([]*model.ConfDialogList, len(list))
for i, v := range list {
res[i] = &model.ConfDialogList{ConfDialog: v, Status: dialogStatus(v)}
}
return
}
func dialogStatus(v *model.ConfDialog) (status string) {
curr := time.Now()
switch {
case v.Stage && v.StartTime.Time().After(curr):
return "padding"
case v.Stage && v.StartTime.Time().Before(curr) && (int64(v.EndTime) == 0 || v.EndTime.Time().After(curr)):
return "active"
case !v.Stage || (int64(v.EndTime) > 0 && v.EndTime.Time().Before(curr)):
return "inactive"
default:
return ""
}
}
// DialogByID .
func (s *Service) DialogByID(c context.Context, arg *model.ArgID) (dlg *model.ConfDialog, err error) {
return s.dao.DialogByID(c, arg.ID)
}
// DialogSave .
func (s *Service) DialogSave(c context.Context, arg *model.ConfDialog) (eff int64, err error) {
var db *model.ConfDialog
if arg.ID != 0 {
if db, err = s.dao.DialogByID(c, arg.ID); err != nil {
return
}
if db != nil {
arg.Ctime = db.Ctime
arg.Stage = db.Stage
}
}
// PRD: 如果平台、app_id完全相同时生效时间不可冲突否则不允许保存
var exist []*model.ConfDialog
if exist, err = s.dao.DialogBy(c, arg.AppID, arg.Platform, arg.ID); err != nil {
return
}
for _, v := range exist {
if v.StartTime.Time().Unix() <= arg.EndTime.Time().Unix() && v.EndTime.Time().Unix() >= arg.StartTime.Time().Unix() {
err = ecode.VipDialogConflictErr
return
}
}
return s.dao.DialogSave(c, arg)
}
// DialogEnable .
func (s *Service) DialogEnable(c context.Context, arg *model.ConfDialog) (eff int64, err error) {
var db *model.ConfDialog
if arg.ID != 0 {
if db, err = s.dao.DialogByID(c, arg.ID); err != nil {
return
}
}
if db == nil || db.StartTime.Time().After(time.Now()) {
err = ecode.VipDialogTimeErr
return
}
return s.dao.DialogEnable(c, arg)
}
// DialogDel .
func (s *Service) DialogDel(c context.Context, arg *model.ArgID, operator string) (eff int64, err error) {
eff, err = s.dao.DialogDel(c, arg.ID)
log.Warn("user(%s) delete dialog(%d) effect row(%d)", operator, arg.ID, eff)
return
}