123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- package services
- import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "hongze/hongze_cygx/models"
- "hongze/hongze_cygx/utils"
- "io/ioutil"
- "net/http"
- "strconv"
- "strings"
- "time"
- )
- type SendWxCategoryTemplate struct {
- WxAppId string `description:"公众号appId"`
- Keywords []string `description:"模板消息keyword字段"`
- TemplateId string `description:"模板id"`
- RedirectUrl string `description:"跳转地址"`
- RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序,3:查研观向,4:买方研选"`
- Resource string `description:"资源唯一标识"`
- SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
- OpenIdArr []string `description:"消息接收者openid"`
- }
- // 推送类目模板消息
- func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
- postData, err := json.Marshal(sendInfo)
- if err != nil {
- go utils.SendAlarmMsg("SendCategoryTemplateMsg json.Marshal Err:"+err.Error(), 1)
- return err
- }
- body := ioutil.NopCloser(strings.NewReader(string(postData)))
- client := &http.Client{}
- req, err := http.NewRequest("POST", utils.SendWxCategoryTemplateMsgUrl, body)
- if err != nil {
- go utils.SendAlarmMsg("SendCategoryTemplateMsg http.NewRequest Err:"+err.Error(), 1)
- return err
- }
- contentType := "application/json;charset=utf-8"
- req.Header.Set("Content-Type", contentType)
- req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
- resp, err := client.Do(req)
- if err != nil {
- fmt.Println("http client.Do Err:" + err.Error())
- return err
- }
- defer resp.Body.Close()
- b, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return err
- }
- result := new(models.BaseResponse)
- err = json.Unmarshal(b, &result)
- if err != nil {
- return err
- }
- if result.Ret != 200 {
- err = errors.New(string(b))
- return err
- }
- return
- }
- // 帮我带问的问题,会前1小时发送
- func SendMfyxEmailFileForAskMsgResearch(cont context.Context) (err error) {
- var msg string
- //var touser string
- defer func() {
- if err != nil {
- go utils.SendAlarmMsg("发送附件模版消息失败", 2)
- go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
- }
- if msg != "" {
- go utils.SendAlarmMsg(msg, 2)
- utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
- }
- }()
- endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
- condition := `AND a.activity_type_id = 1 AND a.chart_permission_id = 31 `
- total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
- if total == 0 {
- fmt.Println("发送附件完成0")
- return nil
- }
- if err != nil {
- msg = "发送附件模版消息失败 Err:" + err.Error()
- return
- }
- listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
- if err != nil {
- msg = "发送附件模版消息失败 Err:" + err.Error()
- return
- }
- for _, v := range listActivity {
- activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
- if activityInfo == nil {
- msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
- return
- }
- list, errFile := models.GetActivityMsgExport(v.ActivityId)
- if errFile != nil {
- msg = "获取失败,Err:" + errFile.Error()
- return
- }
- for _, v2 := range list {
- user, e := models.GetWxUserItemByUserId(v2.UserId)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
- return err
- }
- //获取销售信息
- sellerItem, e := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
- return
- }
- //给所属销售推送消息
- if sellerItem != nil && user != nil {
- openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
- openIdList := make([]*models.OpenIdList,0)
- openIdList = append(openIdList, openIpItem)
- SendWxCategoryMsgWithActivityAsk(user.CompanyName, user.RealName, sellerItem.RealName, time.Now().Format(utils.FormatDateTimeMinute2), v2.Content, openIdList, v.ActivityId)
- }
- }
- errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
- if errFile != nil {
- msg = "获取失败,Err:" + errFile.Error()
- return
- }
- }
- return
- }
- // 发送报告提问消息提醒
- func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId int) (err error) {
- if len(openIdList) == 0 {
- return
- }
- var msg string
- defer func() {
- if err != nil {
- go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
- go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
- utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
- }
- fmt.Println("line 21", err, msg)
- }()
- var keyword1 string
- var keyword2 string
- var keyword3 string
- var keyword4 string
- var keyword5 string
- keyword1 = realName
- keyword2 = companyName
- keyword3 = sellerName
- keyword4 = askTime
- keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
- keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
- openIdArr := make([]string, 0)
- for _, v := range openIdList {
- openIdArr = append(openIdArr, v.OpenId)
- }
- redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
- sendInfo := new(SendWxCategoryTemplate)
- sendInfo.Keywords = keywords
- sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
- sendInfo.RedirectTarget = 4
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
- sendInfo.OpenIdArr = openIdArr
- sendInfo.RedirectUrl = redirectUrl
- err = SendCategoryTemplateMsg(sendInfo)
- if err != nil {
- return
- }
- return
- }
- // 推送会议开始消息提醒60分钟前
- func SendMfyxActivityBeginMsg(cont context.Context) (err error) {
- //func SendActivityBeginMsg() (err error) {
- defer func() {
- if err != nil {
- go utils.SendAlarmMsg("60分钟会议消息提醒失败"+err.Error(), 2)
- fmt.Println("发送失败,Err:", err.Error())
- }
- }()
- endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
- listActivity, err := models.GetYxActivitySendMsgListAll(endDate)
- fmt.Println(len(listActivity))
- if err != nil {
- fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
- return
- }
- if len(listActivity) == 0 {
- return
- }
- //var remark = "点击查看活动详情"
- var signupIds string
- for _, v := range listActivity {
- signupIds += strconv.Itoa(v.Id) + ","
- //var reserveResults string
- //var first string
- openIdItem := new(models.OpenIdList)
- openIdItem.OpenId = v.OpenId
- openIdItem.UserId = v.UserId
- openIdList := make([]*models.OpenIdList, 0)
- openIdList = append(openIdList, openIdItem)
- openIdArr := make([]string, 0)
- for _, v := range openIdList {
- openIdArr = append(openIdArr, v.OpenId)
- }
- keywords := []string{utils.TruncateActivityNameString(v.ActivityName), v.ActivityTime}
- sendInfo := new(SendWxCategoryTemplate)
- sendInfo.Keywords = keywords
- sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdArticleUserRemind
- sendInfo.RedirectTarget = 4
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
- sendInfo.OpenIdArr = openIdArr
- sendInfo.RedirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(v.ActivityId)
- err = SendCategoryTemplateMsg(sendInfo)
- if err != nil {
- return
- }
- }
- if len(signupIds) == 0 {
- return
- }
- signupIds = strings.TrimRight(signupIds, ",")
- err = models.UPdateSendedMsgStatus(signupIds)
- if err != nil {
- var msg string
- go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
- utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
- }
- return
- }
- // 推送会议开始消息提醒15分钟前
- func SendMfyxActivityBeginMsgMeeting(cont context.Context) (err error) {
- //func SendActivityBeginMsgMeeting() (err error) {
- defer func() {
- if err != nil {
- go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
- fmt.Println("发送失败,Err:", err.Error())
- }
- }()
- var condition string
- var pars []interface{}
- endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
- condition = ` AND activity_time <= ? AND activity_time >= NOW() AND publish_status = 1 `
- pars = append(pars, endDate)
- listActivity, e := models.GetCygxActivityList(condition, pars, 0, 100000)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetCygxActivityList, Err: " + e.Error())
- return
- }
- if len(listActivity) == 0 {
- return
- }
- //var signupIds string
- //var remark = "点击查看活动详情"
- var activityIds []int
- //同一时间举办的活动不多所以这里循环查询
- for _, v := range listActivity {
- activityIds = append(activityIds, v.ActivityId)
- var mobiles []string
- pars = make([]interface{}, 0)
- condition = ` AND activity_id = ? AND is_send_wx_msg = 0 `
- pars = append(pars, v.ActivityId)
- //获取设置消息提醒的用户列表
- listxReminder, e := models.GetCygxReminderListByUser(condition, pars)
- if e != nil {
- err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
- return
- }
- for _, vReminder := range listxReminder {
- mobiles = append(mobiles, vReminder.Mobile)
- }
- pars = make([]interface{}, 0)
- condition = ` AND do_fail_type = 0 AND activity_id = ? AND signup_type = 1 AND is_send_wx_msg = 0 `
- pars = append(pars, v.ActivityId)
- //获取设置预约外呼的用户列表
- listSignup, e := models.GetActivitySignupList(condition, pars)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetActivitySignupList, Err: " + e.Error())
- return
- }
- for _, vSignup := range listSignup {
- mobiles = append(mobiles, vSignup.Mobile)
- }
- //获取这些手机号对应的Openid
- listOpenid, e := models.GetUserRecordListByMobileArr(mobiles)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = errors.New("GetUserRecordListByMobileArr, Err: " + e.Error())
- return
- }
- openIdList := make([]*models.OpenIdList, 0)
- for _, vOpenid := range listOpenid {
- openIdItem := new(models.OpenIdList)
- openIdItem.OpenId = vOpenid.OpenId
- openIdItem.UserId = vOpenid.UserId
- openIdList = append(openIdList, openIdItem)
- }
- openIdArr := make([]string, 0)
- for _, v := range openIdList {
- openIdArr = append(openIdArr, v.OpenId)
- }
- keywords := []string{utils.TruncateActivityNameString(v.ActivityName), v.ActivityTime}
- sendInfo := new(SendWxCategoryTemplate)
- sendInfo.Keywords = keywords
- sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdArticleUserRemind
- sendInfo.RedirectTarget = 4
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
- sendInfo.OpenIdArr = openIdArr
- //sendInfo.RedirectUrl = redirectUrl
- err = SendCategoryTemplateMsg(sendInfo)
- if err != nil {
- return
- }
- }
- err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
- return
- }
- // 线下调研活动扫码签到给对应销售发类目模班消息
- func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
- defer func() {
- if err != nil {
- go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
- }
- }()
- var mobiles []string
- //获取销售信息
- sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
- if err != nil && err.Error() != utils.ErrNoRow() {
- return
- }
- if sellerItem != nil {
- mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
- }
- var keyword1 string
- var keyword2 string
- var keyword3 string
- var keyword4 string
- var keyword5 string
- var redirectUrl string
- keyword1 = user.RealName
- keyword2 = user.CompanyName
- keyword3 = sellerItem.RealName
- keyword4 = utils.TruncateActivityNameString(activityDetail.ActivityName)
- keyword5 = time.Now().Format(utils.FormatDateTimeMinute2)
- openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
- if e != nil {
- err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
- return
- }
- openIdArr := make([]string, 0)
- for _, v := range openIdList {
- openIdArr = append(openIdArr, v.OpenId)
- }
- redirectUrl = utils.WX_MSG_PATH_YX_SIGNUP_DETAIL + strconv.Itoa(activityDetail.ActivityId)
- keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
- sendInfo := new(SendWxCategoryTemplate)
- sendInfo.Keywords = keywords
- sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdActivitySign
- sendInfo.RedirectTarget = 4
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
- sendInfo.OpenIdArr = openIdArr
- sendInfo.RedirectUrl = redirectUrl
- err = SendCategoryTemplateMsg(sendInfo)
- if err != nil {
- return
- }
- return
- }
|