196 lines
5.0 KiB
Go
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
|
||
|
}
|