bilibili-backup/app/admin/main/apm/service/need.go
2019-04-22 02:59:20 +00:00

196 lines
5.0 KiB
Go

package service
import (
"context"
"fmt"
"go-common/app/admin/main/apm/model/need"
"go-common/library/ecode"
"go-common/library/log"
)
//NeedInfoAdd is
func (s *Service) NeedInfoAdd(c context.Context, req *need.NAddReq, username string) (err error) {
if err = s.dao.NeedInfoAdd(req, username); err != nil {
return
}
return
}
//NeedInfoList is
func (s *Service) NeedInfoList(c context.Context, arg *need.NListReq, username string) (res []*need.NInfo, count int64, err error) {
var (
like *need.UserLikes
)
if count, err = s.dao.NeedInfoCount(arg); err != nil {
return
}
if count == 0 {
return
}
if res, err = s.dao.NeedInfoList(arg); err != nil {
return
}
for _, r := range res {
lq := &need.Likereq{
ReqID: r.ID,
}
if like, err = s.dao.GetVoteInfo(lq, username); err == nil {
r.LikeState = like.LikeType
}
}
err = nil
return
}
//NeedInfoEdit is
func (s *Service) NeedInfoEdit(c context.Context, arg *need.NEditReq, username string) (err error) {
var (
ni *need.NInfo
)
if ni, err = s.dao.GetNeedInfo(arg.ID); err != nil {
err = ecode.NeedInfoErr
return
}
if ni.Reporter != username {
err = ecode.AccessDenied
return
}
if ni.Status != 5 && ni.Status != 1 {
err = ecode.NeedEditErr
return
}
if err = s.dao.NeedInfoEdit(arg); err != nil {
return
}
return
}
//NeedInfoVerify is
func (s *Service) NeedInfoVerify(c context.Context, arg *need.NVerifyReq) (ni *need.NInfo, err error) {
if ni, err = s.dao.GetNeedInfo(arg.ID); err != nil {
err = ecode.NeedInfoErr
return
}
if ni.Status != 1 {
err = ecode.NeedVerifyErr
return
}
if err = s.dao.NeedVerify(arg); err != nil {
return
}
return
}
//NeedInfoVote is
func (s *Service) NeedInfoVote(c context.Context, arg *need.Likereq, username string) (err error) {
var (
nu *need.UserLikes
like, dislike int
)
if _, err = s.dao.GetNeedInfo(arg.ReqID); err != nil {
err = ecode.NeedInfoErr
return
}
if nu, err = s.dao.GetVoteInfo(arg, username); err != nil {
if err = s.dao.AddVoteInfo(arg, username); err != nil {
return
}
switch arg.LikeType {
case need.TypeLike:
like = 1
dislike = 0
case need.TypeDislike:
like = 0
dislike = 1
}
} else {
if err = s.dao.UpdateVoteInfo(arg, username); err != nil {
log.Error("arg.liketype:%d,db.like%+v,like:%d,dislike:%d", arg.LikeType, nu, like, dislike)
return
}
if nu.LikeType != arg.LikeType {
switch {
case arg.LikeType == need.TypeCancel && nu.LikeType == need.TypeLike:
like = -1
case arg.LikeType == need.TypeCancel && nu.LikeType == need.TypeDislike:
dislike = -1
case arg.LikeType == need.TypeLike && nu.LikeType == need.TypeCancel:
like = 1
case arg.LikeType == need.TypeDislike && nu.LikeType == need.TypeCancel:
dislike = 1
case arg.LikeType == need.TypeLike && nu.LikeType == need.TypeDislike:
like = 1
dislike = -1
case arg.LikeType == need.TypeDislike && nu.LikeType == need.TypeLike:
like = -1
dislike = 1
}
} else {
return
}
}
if err = s.dao.LikeCountsStats(arg, like, dislike); err != nil {
if nu != nil {
log.Error("arg.liketype:%d,db.like:%+v,like:%d,dislike:%d", arg.LikeType, nu, like, dislike)
}
return
}
return
}
//NeedVoteList is show votelist
func (s *Service) NeedVoteList(c context.Context, arg *need.Likereq) (res []*need.UserLikes, count int64, err error) {
if count, err = s.dao.VoteInfoCounts(arg); err != nil {
return
}
if count == 0 {
return
}
if res, err = s.dao.VoteInfoList(arg); err != nil {
return
}
return
}
//SendWeMessage send wechat message
func (s *Service) SendWeMessage(c context.Context, title, task, result, sender string, receiver []string) (err error) {
var (
msg = "[sven需求与建议来信 📨 ]\n"
users []string
)
switch task {
case need.VerifyType[need.NeedApply]:
msg += fmt.Sprintf("%s童鞋认真地提了一份建议(%s),快去看看吧~\n%s\n", sender, title, "http://sven.bilibili.co/#/suggestion/list")
users = append(users, receiver...)
case need.VerifyType[need.NeedVerify]:
msg += fmt.Sprintf("%s童鞋的建议(%s)反馈我们已经收到啦,先发一朵小红花感谢支持!🌺 \n", sender, title)
users = append(users, sender)
case need.VerifyType[need.NeedReview]:
msg += fmt.Sprintf("%s童鞋的建议(%s)审核结果是%s, %s", receiver, title, result, "%s")
users = append(users, receiver...)
}
switch result {
case need.VerifyType[need.VerifyAccept]:
msg = fmt.Sprintf(msg, "恭喜恭喜,喝杯快乐水开心一下~ 🍻 ")
case need.VerifyType[need.VerifyReject]:
msg = fmt.Sprintf(msg, "不要灰心,可能是需求描述或使用姿势不够准确,还请多多支持,欢迎再来!🙇‍ 🙆‍ ")
case need.VerifyType[need.VerifyObserved]:
msg = fmt.Sprintf(msg, "您的意见我们先保留啦,还请多多支持,欢迎再来补充!🙇‍ 🙆‍ ")
}
if err = s.dao.SendWechatToUsers(c, users, msg); err != nil {
log.Error("apmSvc.SendWechatMessage error(%v)", err)
return
}
return
}