123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- package service
- import (
- "context"
- "fmt"
- "net/url"
- "go-common/app/admin/ep/saga/conf"
- "go-common/app/admin/ep/saga/model"
- "go-common/app/admin/ep/saga/service/wechat"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- const qyWechatURL = "https://qyapi.weixin.qq.com"
- // CollectWachatUsers send required wechat visible users stored in memcache by email
- func (s *Service) CollectWachatUsers(c context.Context) (err error) {
- var (
- contactInfo *model.ContactInfo
- userMap = make(map[string]model.RequireVisibleUser)
- user string
- )
- if err = s.dao.RequireVisibleUsersRedis(c, &userMap); err != nil {
- log.Error("get require visible user error(%v)", err)
- return
- }
- for k, v := range userMap {
- if contactInfo, err = s.dao.QueryUserByID(k); err == nil {
- if contactInfo.VisibleSaga {
- continue
- }
- }
- user += v.UserName + " , " + v.NickName + "\n"
- }
- /*content := fmt.Sprintf("\n\n邮箱前缀 昵称\n\n%s", user)
- for _, addr := range conf.Conf.Property.ReportRequiredVisible.AlertAddrs {
- if err = mail.SendMail2(addr, "需添加的企业微信名单", content); err != nil {
- return
- }
- }*/
- if err = s.dao.DeleteRequireVisibleUsersRedis(c); err != nil {
- log.Error("Delete require visible user error(%v)", err)
- return
- }
- return
- }
- // SyncContacts sync the wechat contacts 更新企业微信列表(用户信息和saga信息)
- func (s *Service) SyncContacts(c context.Context) (err error) {
- var (
- w = wechat.New(s.dao)
- )
- if err = w.SyncContacts(c); err != nil {
- return
- }
- return
- }
- // QueryContacts query machine logs.
- func (s *Service) QueryContacts(c context.Context, queryRequest *model.Pagination) (p *model.PaginateContact, err error) {
- var (
- total int64
- contacts []*model.ContactInfo
- )
- fmt.Print(queryRequest.PageNum)
- if total, contacts, err = s.dao.FindContacts(queryRequest.PageNum, queryRequest.PageSize); err != nil {
- return
- }
- fmt.Print(queryRequest.PageNum)
- p = &model.PaginateContact{
- PageNum: queryRequest.PageNum,
- PageSize: queryRequest.PageSize,
- Total: total,
- Contacts: contacts,
- }
- return
- }
- // QueryContactLogs query contact logs.
- func (s *Service) QueryContactLogs(c context.Context, queryRequest *model.QueryContactLogRequest) (p *model.PaginateContactLog, err error) {
- var (
- total int64
- machineLogs []*model.AboundContactLog
- )
- if total, machineLogs, err = s.dao.FindMachineLogs(queryRequest); err != nil {
- return
- }
- p = &model.PaginateContactLog{
- PageNum: queryRequest.PageNum,
- PageSize: queryRequest.PageSize,
- Total: total,
- MachineLogs: machineLogs,
- }
- return
- }
- // Wechat ...
- func (s *Service) Wechat() *wechat.Wechat {
- return wechat.New(s.dao)
- }
- // CreateWechat ...
- func (s *Service) CreateWechat(c context.Context, req *model.CreateChatReq, username string) (resp *model.CreateChatResp, err error) {
- var (
- token string
- userIDs []string
- ownerInfo *model.ContactInfo
- w = wechat.New(s.dao)
- )
- u := qyWechatURL + "/cgi-bin/appchat/create"
- params := url.Values{}
- wechatInfo := &model.WechatCreateLog{
- Name: req.Name,
- Owner: req.Owner,
- ChatID: req.ChatID,
- Cuser: username,
- Status: 1,
- }
- //获取企业token
- if token, err = w.AccessToken(c, conf.Conf.Property.Wechat); err != nil {
- return
- }
- params.Set("access_token", token)
- //get owner and users id
- if ownerInfo, err = s.dao.QueryUserByUserName(req.Owner); err != nil {
- return
- }
- if userIDs, err = s.QueryUserIds(req.UserList); err != nil {
- return
- }
- req.Owner = ownerInfo.UserID
- req.UserList = userIDs
- if err = s.dao.PostJSON(c, u, "", params, &resp, req); err != nil {
- return
- }
- //add create wechat info to database
- if err = s.dao.AddWechatCreateLog(wechatInfo); err != nil {
- return
- }
- resp = &model.CreateChatResp{
- ChatID: wechatInfo.ChatID,
- }
- return
- }
- // QueryUserIds ...
- func (s *Service) QueryUserIds(userNames []string) (userIds []string, err error) {
- var (
- userName string
- contactInfo *model.ContactInfo
- )
- if len(userNames) == 0 {
- err = errors.Errorf("UserIds: userNames is empty!")
- return
- }
- for _, userName = range userNames {
- if contactInfo, err = s.dao.QueryUserByUserName(userName); err != nil {
- err = errors.Wrapf(err, "UserIds: no such user (%s) in db, err (%s)", userName, err.Error())
- return
- }
- log.Info("UserIds: username (%s), userid (%s)", userName, contactInfo.UserID)
- if contactInfo.UserID != "" {
- userIds = append(userIds, contactInfo.UserID)
- }
- }
- return
- }
- // QueryWechatCreateLog ...
- func (s *Service) QueryWechatCreateLog(c context.Context, req *model.Pagination, username string) (resp *model.CreateChatLogResp, err error) {
- var (
- logs []*model.WechatCreateLog
- logsResp []*model.CreateChatLog
- total int
- wechatCreateInfo *model.WechatCreateLog
- )
- if logs, total, err = s.dao.QueryWechatCreateLog(true, req, wechatCreateInfo); err != nil {
- return
- }
- for _, log := range logs {
- createChatlog := &model.CreateChatLog{}
- if log.Cuser == username {
- createChatlog.Buttons = append(createChatlog.Buttons, "WECHAT_TEST")
- }
- createChatlog.WechatCreateLog = log
- logsResp = append(logsResp, createChatlog)
- }
- resp = &model.CreateChatLogResp{
- Total: total,
- Pagination: req,
- Logs: logsResp,
- }
- return
- }
- // WechatParams ...
- func (s *Service) WechatParams(c context.Context, chatid string) (resp *model.GetChatResp, err error) {
- var (
- w = wechat.New(s.dao)
- token string
- )
- if token, err = w.AccessToken(c, conf.Conf.Property.Wechat); err != nil {
- return
- }
- u := qyWechatURL + "/cgi-bin/appchat/get"
- params := url.Values{}
- params.Set("access_token", token)
- params.Set("chatid", chatid)
- err = s.dao.WechatParams(c, u, params, &resp)
- return
- }
- // SendGroupWechat ...
- func (s *Service) SendGroupWechat(c context.Context, req *model.SendChatReq) (resp *model.ChatResp, err error) {
- var (
- token string
- w = wechat.New(s.dao)
- total int
- getChatResp *model.GetChatResp
- owner string
- contentDB = req.Text.Content
- )
- u := qyWechatURL + "/cgi-bin/appchat/send"
- params := url.Values{}
- if token, err = w.AccessToken(c, conf.Conf.Property.Wechat); err != nil {
- return
- }
- params.Set("access_token", token)
- if err = s.dao.PostJSON(c, u, "", params, &resp, req); err != nil {
- return
- }
- if len(contentDB) > model.MaxWechatLen {
- contentDB = contentDB[:model.MaxWechatLen]
- }
- chatLog := &model.WechatChatLog{
- ChatID: req.ChatID,
- MsgType: req.MsgType,
- Content: contentDB,
- Safe: req.Safe,
- Status: 1,
- }
- if err = s.dao.CreateChatLog(chatLog); err != nil {
- return
- }
- info := &model.WechatCreateLog{
- ChatID: req.ChatID,
- }
- if _, total, err = s.dao.QueryWechatCreateLog(false, nil, info); err != nil {
- return
- }
- if total == 0 {
- getChatResp, _ = s.WechatParams(c, req.ChatID)
- owner = getChatResp.ChatInfo.Owner
- contactInfo, _ := s.dao.QueryUserByID(owner)
- wechatInfo := &model.WechatCreateLog{
- Name: getChatResp.ChatInfo.Name,
- Owner: contactInfo.UserName,
- ChatID: req.ChatID,
- Status: 2,
- }
- if err = s.dao.AddWechatCreateLog(wechatInfo); err != nil {
- return
- }
- }
- return
- }
- // SendWechat ...
- func (s *Service) SendWechat(c context.Context, req *model.SendMessageReq) (resp *model.ChatResp, err error) {
- var (
- w = wechat.New(s.dao)
- )
- err = w.PushMsg(c, req.Touser, req.Content)
- return
- }
- // UpdateWechat ...
- func (s *Service) UpdateWechat(c context.Context, req *model.UpdateChatReq) (resp *model.ChatResp, err error) {
- var (
- token string
- w = wechat.New(s.dao)
- )
- u := qyWechatURL + "/cgi-bin/appchat/update"
- params := url.Values{}
- if token, err = w.AccessToken(c, conf.Conf.Property.Wechat); err != nil {
- return
- }
- params.Set("access_token", token)
- if err = s.dao.PostJSON(c, u, "", params, &resp, req); err != nil {
- return
- }
- return
- }
- // SyncWechatContacts ...
- func (s *Service) SyncWechatContacts(c context.Context) (message string, err error) {
- var (
- w = wechat.New(s.dao)
- )
- if err = w.AnalysisContacts(c); err != nil {
- return
- }
- message = "同步完成"
- return
- }
|