|
@@ -10,7 +10,6 @@ import (
|
|
|
"hongze/hz_crm_api/models/system"
|
|
|
"hongze/hz_crm_api/services/alarm_msg"
|
|
|
"hongze/hz_crm_api/utils"
|
|
|
- "html"
|
|
|
"io/ioutil"
|
|
|
"net/http"
|
|
|
"strconv"
|
|
@@ -418,250 +417,6 @@ func SendCompanyReceiveWxTemplateMsg(companyName, productName, sellerName, other
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// 活动取消消息通知
|
|
|
-func SendWxMsgWithCygxActivity(activityId int) (err error) {
|
|
|
- var msg string
|
|
|
- defer func() {
|
|
|
- if err != nil {
|
|
|
- go alarm_msg.SendAlarmMsg("发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
|
|
|
- utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
|
|
|
- }
|
|
|
- if msg != "" {
|
|
|
- utils.FileLogCygx.Info("发送模版消息失败,msg:%s", msg)
|
|
|
- }
|
|
|
- }()
|
|
|
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "GetReportInfo Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- var openIdList []*cygx.OpenIdList
|
|
|
- openIdList, err = cygx.GetActivityOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "get GetActivityOpenIdList err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- mapOpenid := make(map[int]string)
|
|
|
- for _, v := range openIdList {
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
- }
|
|
|
- //添加预约纪要的openid
|
|
|
- openIdListAppointment, err := cygx.GetActivityAppointmentOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "GetActivityAppointmentOpenIdList err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(openIdListAppointment) > 0 {
|
|
|
- for _, v := range openIdListAppointment {
|
|
|
- if _, ok := mapOpenid[v.UserId]; !ok {
|
|
|
- item := new(cygx.OpenIdList)
|
|
|
- item.UserId = v.UserId
|
|
|
- item.OpenId = v.OpenId
|
|
|
- openIdList = append(openIdList, item)
|
|
|
- }
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //添加带问的openid
|
|
|
- openIdListActivityHelpAsk, err := cygx.GetActivityHelpAskOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "openIdListActivityHelpAsk err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(openIdListActivityHelpAsk) > 0 {
|
|
|
- for _, v := range openIdListActivityHelpAsk {
|
|
|
- if _, ok := mapOpenid[v.UserId]; !ok {
|
|
|
- item := new(cygx.OpenIdList)
|
|
|
- item.UserId = v.UserId
|
|
|
- item.OpenId = v.OpenId
|
|
|
- openIdList = append(openIdList, item)
|
|
|
- }
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
- }
|
|
|
- }
|
|
|
- activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
|
|
|
- if len(openIdList) == 0 {
|
|
|
- return err
|
|
|
- }
|
|
|
- var keyword1, keyword2, keyword3, keyword4, redirectUrl string
|
|
|
- keyword1 = activityInfo.ActivityName
|
|
|
- keyword2 = "活动已取消"
|
|
|
- openIdArr := make([]string, len(openIdList))
|
|
|
- for i, v := range openIdList {
|
|
|
- openIdArr[i] = v.OpenId
|
|
|
- }
|
|
|
- redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId) + "&IsSendWx=1"
|
|
|
- sendInfo := new(SendWxTemplate)
|
|
|
- //sendInfo.First = first
|
|
|
- sendInfo.Keyword1 = keyword1
|
|
|
- sendInfo.Keyword2 = keyword2
|
|
|
- sendInfo.Keyword3 = keyword3
|
|
|
- sendInfo.Keyword4 = keyword4
|
|
|
- //sendInfo.Remark = remark
|
|
|
- sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
|
|
|
- sendInfo.RedirectUrl = redirectUrl
|
|
|
- sendInfo.RedirectTarget = 3
|
|
|
- sendInfo.Resource = strconv.Itoa(activityId)
|
|
|
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_CACLE
|
|
|
- sendInfo.OpenIdArr = openIdArr
|
|
|
- err = SendTemplateMsg(sendInfo)
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
-// 活动更改时间消息通知
|
|
|
-func SendWxMsgWithCygxActivityUpdateTime(activityId int, oldStr, newStr, strType string) (err error) {
|
|
|
- var msg string
|
|
|
- defer func() {
|
|
|
- if err != nil {
|
|
|
- go alarm_msg.SendAlarmMsg("发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
|
|
|
- utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
|
|
|
- }
|
|
|
- if msg != "" {
|
|
|
- utils.FileLogCygx.Info("发送模版消息失败,msg:%s", msg)
|
|
|
- }
|
|
|
- }()
|
|
|
-
|
|
|
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "GetReportInfo Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if activityInfo == nil {
|
|
|
- utils.FileLogCygx.Info("活动信息不存在")
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- //var accessToken string
|
|
|
- //if utils.RunMode == "release" {
|
|
|
- // accessToken, err = models.GetWxAccessTokenByXzs()
|
|
|
- // if err != nil {
|
|
|
- // msg = "GetWxAccessToken Err:" + err.Error()
|
|
|
- // return
|
|
|
- // }
|
|
|
- // if accessToken == "" {
|
|
|
- // msg = "accessToken is empty"
|
|
|
- // return
|
|
|
- // }
|
|
|
- //} else {
|
|
|
- // accessToken, err = models.GetWxAccessToken()
|
|
|
- // if err != nil {
|
|
|
- // msg = "GetWxAccessToken Err:" + err.Error()
|
|
|
- // return
|
|
|
- // }
|
|
|
- // if accessToken == "" {
|
|
|
- // msg = "accessToken is empty"
|
|
|
- // return
|
|
|
- // }
|
|
|
- //}
|
|
|
- var openIdList []*cygx.OpenIdList
|
|
|
-
|
|
|
- openIdList, err = cygx.GetActivityOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "get openIdList err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- mapOpenid := make(map[int]string)
|
|
|
- for _, v := range openIdList {
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
- }
|
|
|
- //添加预约纪要的openid
|
|
|
- openIdListAppointment, err := cygx.GetActivityAppointmentOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "GetActivityAppointmentOpenIdList err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(openIdListAppointment) > 0 {
|
|
|
- for _, v := range openIdListAppointment {
|
|
|
- if _, ok := mapOpenid[v.UserId]; !ok {
|
|
|
- item := new(cygx.OpenIdList)
|
|
|
- item.UserId = v.UserId
|
|
|
- item.OpenId = v.OpenId
|
|
|
- openIdList = append(openIdList, item)
|
|
|
- }
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //添加带问的openid
|
|
|
- openIdListActivityHelpAsk, err := cygx.GetActivityHelpAskOpenIdList(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "openIdListActivityHelpAsk err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(openIdListActivityHelpAsk) > 0 {
|
|
|
- for _, v := range openIdListActivityHelpAsk {
|
|
|
- if _, ok := mapOpenid[v.UserId]; !ok {
|
|
|
- item := new(cygx.OpenIdList)
|
|
|
- item.UserId = v.UserId
|
|
|
- item.OpenId = v.OpenId
|
|
|
- openIdList = append(openIdList, item)
|
|
|
- }
|
|
|
- mapOpenid[v.UserId] = v.OpenId
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if len(openIdList) == 0 {
|
|
|
- return err
|
|
|
- }
|
|
|
- //sendMap := make(map[string]interface{})
|
|
|
- //sendData := make(map[string]interface{})
|
|
|
- var first string
|
|
|
- var keyword1, keyword2, keyword3, keyword4, redirectUrl string
|
|
|
-
|
|
|
- activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
|
|
|
- if strType == "timeType" {
|
|
|
- //first = "您有一场【" + activityInfo.ActivityTypeName + "】发生了时间变更"
|
|
|
- keyword2 = "时间变更为:【 " + newStr + "】"
|
|
|
- } else if strType == "expertType" {
|
|
|
- //first = "您有一场【" + activityInfo.ActivityTypeName + "】发生了专家变更"
|
|
|
- keyword2 = "专家变更为:【" + newStr + "】"
|
|
|
- } else if strType == "addressType" {
|
|
|
- //first = "您有一场【" + activityInfo.ActivityTypeName + "】发生了地址变更"
|
|
|
- keyword2 = "地点变更为:【" + newStr + "】"
|
|
|
- } else if strType == "participationCode" {
|
|
|
- //first = "您有一场【" + activityInfo.ActivityTypeName + "】公布了拨入密码"
|
|
|
- keyword2 = "拨入密码为: " + newStr
|
|
|
- } else if strType == "Theme" {
|
|
|
- //first = "您有一场【" + activityInfo.ActivityTypeName + "】更新了活动主题"
|
|
|
- newStr = strings.Replace(newStr, "</p><p>", "\n", -1)
|
|
|
- newStr = html.EscapeString(newStr)
|
|
|
- newStrHtml, _ := cygx.GetReportContentTextSub(newStr)
|
|
|
- newStr = newStrHtml
|
|
|
- keyword2 = "主题变更为: " + newStr
|
|
|
- }
|
|
|
-
|
|
|
- keyword1 = activityInfo.ActivityName
|
|
|
- openIdArr := make([]string, len(openIdList))
|
|
|
- for i, v := range openIdList {
|
|
|
- openIdArr[i] = v.OpenId
|
|
|
- }
|
|
|
-
|
|
|
- redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId) + "&IsSendWx=1"
|
|
|
- sendInfo := new(SendWxTemplate)
|
|
|
- sendInfo.First = first
|
|
|
- sendInfo.Keyword1 = keyword1
|
|
|
- sendInfo.Keyword2 = keyword2
|
|
|
- sendInfo.Keyword3 = keyword3
|
|
|
- sendInfo.Keyword4 = keyword4
|
|
|
- //sendInfo.Remark = remark
|
|
|
- sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
|
|
|
- sendInfo.RedirectUrl = redirectUrl
|
|
|
- sendInfo.RedirectTarget = 3
|
|
|
- sendInfo.Resource = strconv.Itoa(activityId)
|
|
|
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_UPDATE
|
|
|
- sendInfo.OpenIdArr = openIdArr
|
|
|
- e := SendTemplateMsg(sendInfo)
|
|
|
- if e != nil {
|
|
|
- err = errors.New("推送模板消息失败" + e.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
func SendArticleWxTemplateMsg(nickName, aticleTiele, publishDate, abstract, industryName, msgType string, articleId, departmentId, industrialManagementId int, isResearch bool) (err error) {
|
|
|
var msg string
|
|
|
defer func() {
|
|
@@ -675,31 +430,7 @@ func SendArticleWxTemplateMsg(nickName, aticleTiele, publishDate, abstract, indu
|
|
|
utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
|
|
|
}
|
|
|
}()
|
|
|
- //var accessToken string
|
|
|
- //if utils.RunMode == "release" {
|
|
|
- // accessToken, err = models.GetWxAccessTokenByXzs()
|
|
|
- // if err != nil {
|
|
|
- // msg = "GetWxAccessToken Err:" + err.Error()
|
|
|
- // return
|
|
|
- // }
|
|
|
- // if accessToken == "" {
|
|
|
- // msg = "accessToken is empty"
|
|
|
- // return
|
|
|
- // }
|
|
|
- //} else {
|
|
|
- // accessToken, err = models.GetWxAccessToken()
|
|
|
- // if err != nil {
|
|
|
- // msg = "GetWxAccessToken Err:" + err.Error()
|
|
|
- // return
|
|
|
- // }
|
|
|
- // if accessToken == "" {
|
|
|
- // msg = "accessToken is empty"
|
|
|
- // return
|
|
|
- // }
|
|
|
- //}
|
|
|
var openIdList []*cygx.OpenIdList
|
|
|
- //utils.FileLog.Info("mobile:%s", otherSellerMobile)
|
|
|
- //openIdList, err = models.GetOpenIdListByMobile(otherSellerMobile)
|
|
|
var resource string
|
|
|
|
|
|
if msgType == "Department" {
|
|
@@ -1260,87 +991,6 @@ func CheckTwoWeekOrMonthReport(classifyId int, classifyName string) (ok bool) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// 专项调研活动模板消息通知
|
|
|
-func SendWxMsgWithCygxActivitySpecial(activityId int) (err error) {
|
|
|
- var msg string
|
|
|
- defer func() {
|
|
|
- if err != nil {
|
|
|
- go alarm_msg.SendAlarmMsg("发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
|
|
|
- //go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
|
|
|
- utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
|
|
|
- }
|
|
|
- }()
|
|
|
- activityInfo, err := cygx.GetAddActivityInfoSpecialById(activityId)
|
|
|
- if err != nil {
|
|
|
- msg = "GetReportInfo Err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- var openIdList []*cygx.OpenIdList
|
|
|
- openIdList, err = cygx.GetActivitySpecialOpenIdList()
|
|
|
- if err != nil {
|
|
|
- msg = "get openIdList err:" + err.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(openIdList) == 0 {
|
|
|
- return err
|
|
|
- }
|
|
|
- //sendMap := make(map[string]interface{})
|
|
|
- //sendData := make(map[string]interface{})
|
|
|
- //var first string
|
|
|
- //var keyword1 string
|
|
|
- //var keyword2 string
|
|
|
- //first = "专项调研【" + activityInfo.ResearchTheme + "】已开启预报名"
|
|
|
- //
|
|
|
- //redirectUrl := ""
|
|
|
- //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
|
|
|
- //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
|
|
|
- //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
|
|
|
- //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
|
|
|
- //if utils.RunMode == "release" {
|
|
|
- // sendMap["template_id"] = utils.WxMsgTemplateIdActivityChangeApplyXzs
|
|
|
- //} else {
|
|
|
- // sendMap["template_id"] = utils.WxMsgTemplateIdActivityChangeApply
|
|
|
- //}
|
|
|
- //sendMap["url"] = redirectUrl
|
|
|
- //sendMap["data"] = sendData
|
|
|
- //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxCygxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
|
|
|
- //sendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_UPDATE)
|
|
|
-
|
|
|
- openIdArr := make([]string, len(openIdList))
|
|
|
- for i, v := range openIdList {
|
|
|
- openIdArr[i] = v.OpenId
|
|
|
- }
|
|
|
- var first, keyword1, keyword2, keyword3, keyword4, remark, redirectUrl string
|
|
|
- keyword1 = "专项调研【" + activityInfo.ResearchTheme + "】"
|
|
|
- keyword2 = "已开启预报名"
|
|
|
- //if activityInfo.SpecialType == 1 {
|
|
|
- // keyword2 += "线上 预期时间:" + activityInfo.ActivityTimeText
|
|
|
- //} else {
|
|
|
- // keyword2 += "线下 " + "(" + activityInfo.City + ") 预期时间:" + activityInfo.ActivityTimeText
|
|
|
- //}
|
|
|
- redirectUrl = utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
|
|
|
- sendInfo := new(SendWxTemplate)
|
|
|
- sendInfo.First = first
|
|
|
- sendInfo.Keyword1 = keyword1
|
|
|
- sendInfo.Keyword2 = keyword2
|
|
|
- sendInfo.Keyword3 = keyword3
|
|
|
- sendInfo.Keyword4 = keyword4
|
|
|
- sendInfo.Remark = remark
|
|
|
- sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
|
|
|
- sendInfo.RedirectUrl = redirectUrl
|
|
|
- sendInfo.RedirectTarget = 3
|
|
|
- sendInfo.Resource = strconv.Itoa(activityId)
|
|
|
- sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_UPDATE
|
|
|
- sendInfo.OpenIdArr = openIdArr
|
|
|
- err = SendTemplateMsg(sendInfo)
|
|
|
- if err != nil {
|
|
|
- err = errors.New("SendTemplateMsg, Err: " + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
// SendYbQuestionDistributeWxMsg 推送研报小程序模板消息-问答社区分配
|
|
|
func SendYbQuestionDistributeWxMsg(questionId, adminId int, openid, questionTitle, remark string) (err error) {
|
|
|
var errMsg string
|
|
@@ -1996,9 +1646,34 @@ func SendWxMsgWithCygxMorningMeeting(meetingId, industryId int, industryName str
|
|
|
}
|
|
|
meetingTime := reviewInfo.MeetingTime.Format(utils.FormatDate)
|
|
|
openIdList, err := models.GetCygxUserIndustryFllowOpneid(industryId)
|
|
|
- openIdArr := make([]string, len(openIdList))
|
|
|
- for i, v := range openIdList {
|
|
|
- openIdArr[i] = v.OpenId
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("GetCygxUserIndustryFllowOpneid, Err: " + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ listUser, e := models.GetWxUserListCompanyId(utils.JMCJ_COMPANY_ID)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetWxUserListCompanyId" + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var mobileArr []string
|
|
|
+ for _, v := range listUser {
|
|
|
+ mobileArr = append(mobileArr, v.Mobile)
|
|
|
+ }
|
|
|
+ openIdListJmcj, e := cygx.GetUserRecordListByMobileArr(mobileArr)
|
|
|
+ if e != nil {
|
|
|
+ err = errors.New("GetUserRecordListByMobileArr" + e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ mapOpneiIdJmcj := make(map[string]bool)
|
|
|
+ for _, v := range openIdListJmcj {
|
|
|
+ mapOpneiIdJmcj[v.OpenId] = true
|
|
|
+ }
|
|
|
+ var openIdArr []string
|
|
|
+ for _, v := range openIdList {
|
|
|
+ if !mapOpneiIdJmcj[v.OpenId] {
|
|
|
+ openIdArr = append(openIdArr, v.OpenId)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//保留回撤,去掉空行
|