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 }