|
@@ -52,60 +52,98 @@ func SendWxTemplateMsg(sendInfo *models.SendWxTemplate) (err error) {
|
|
|
|
|
|
sendMap := make(map[string]interface{})
|
|
|
sendData := make(map[string]interface{})
|
|
|
-
|
|
|
+ var uniqueCodeStr string
|
|
|
if sendInfo.First != "" {
|
|
|
sendData["first"] = map[string]interface{}{"value": sendInfo.First, "color": "#173177"}
|
|
|
+ uniqueCodeStr += sendInfo.First
|
|
|
}
|
|
|
|
|
|
if sendInfo.Keyword1 != "" {
|
|
|
sendData["keyword1"] = map[string]interface{}{"value": sendInfo.Keyword1, "color": "#173177"}
|
|
|
+ uniqueCodeStr += sendInfo.Keyword1
|
|
|
}
|
|
|
|
|
|
if sendInfo.Keyword2 != "" {
|
|
|
sendData["keyword2"] = map[string]interface{}{"value": sendInfo.Keyword2, "color": "#173177"}
|
|
|
+ uniqueCodeStr += sendInfo.Keyword2
|
|
|
}
|
|
|
|
|
|
if sendInfo.Keyword3 != "" {
|
|
|
sendData["keyword3"] = map[string]interface{}{"value": sendInfo.Keyword3, "color": "#173177"}
|
|
|
+ uniqueCodeStr += sendInfo.Keyword3
|
|
|
}
|
|
|
|
|
|
if sendInfo.Keyword4 != "" {
|
|
|
sendData["keyword4"] = map[string]interface{}{"value": sendInfo.Keyword4, "color": "#173177"}
|
|
|
+ uniqueCodeStr += sendInfo.Keyword4
|
|
|
}
|
|
|
|
|
|
if sendInfo.TemplateId != "" {
|
|
|
sendMap["template_id"] = sendInfo.TemplateId
|
|
|
+ uniqueCodeStr += sendInfo.TemplateId
|
|
|
}
|
|
|
|
|
|
if sendInfo.RedirectUrl != "" {
|
|
|
sendMap["url"] = sendInfo.RedirectUrl
|
|
|
+ uniqueCodeStr += sendInfo.RedirectUrl
|
|
|
}
|
|
|
sendMap["data"] = sendData
|
|
|
- err=sendTemplateMsg(sendUrl, sendMap, sendInfo.OpenIdArr, sendInfo.Resource, sendInfo.SendType)
|
|
|
+
|
|
|
+ uniqueCode := utils.MD5(uniqueCodeStr)
|
|
|
+
|
|
|
+ err = sendTemplateMsg(sendUrl, sendMap, sendInfo.OpenIdArr, sendInfo.Resource, uniqueCode, sendInfo.SendType)
|
|
|
fmt.Println("send end")
|
|
|
utils.FileLog.Info("send end")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, openIdArr []string, resource string, sendType int) (err error) {
|
|
|
- for _, openId := range openIdArr {
|
|
|
- sendMap["touser"] = openId
|
|
|
- data, err := json.Marshal(sendMap)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
|
|
|
- utils.FileLog.Info(fmt.Sprintf("SendTemplateMsgOne Marshal Err:%s", err.Error()))
|
|
|
- return err
|
|
|
+func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, openIdArr []string, resource, uniqueCode string, sendType int) (err error) {
|
|
|
+ existList, err := models.GetTemplateRecordByUniqueCode(uniqueCode)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("GetTemplateRecordByUniqueCode Err:%s", err.Error()))
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if len(existList) == 0 {
|
|
|
+ for _, openId := range openIdArr {
|
|
|
+ sendMap["touser"] = openId
|
|
|
+ data, err := json.Marshal(sendMap)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("SendTemplateMsgOne Marshal Err:%s", err.Error()))
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ err = toSendTemplateMsg(sendUrl, data, resource, sendType, openId, uniqueCode)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("send err:", err.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("ToSendTemplateMsg Err:%s", err.Error()))
|
|
|
+ }
|
|
|
}
|
|
|
- err = toSendTemplateMsg(sendUrl, data, resource, sendType, openId)
|
|
|
- if err != nil {
|
|
|
- fmt.Println("send err:", err.Error())
|
|
|
- utils.FileLog.Info(fmt.Sprintf("ToSendTemplateMsg Err:%s", err.Error()))
|
|
|
+ } else {
|
|
|
+ existOpenIdMap := make(map[string]string)
|
|
|
+ for _, v := range existList {
|
|
|
+ existOpenIdMap[v.OpenId] = v.OpenId
|
|
|
+ }
|
|
|
+ for _, openId := range openIdArr {
|
|
|
+ if _, ok := existOpenIdMap[openId]; !ok {
|
|
|
+ sendMap["touser"] = openId
|
|
|
+ data, err := json.Marshal(sendMap)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("SendTemplateMsgOne Marshal Err:%s", err.Error()))
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ err = toSendTemplateMsg(sendUrl, data, resource, sendType, openId, uniqueCode)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("send err:", err.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("ToSendTemplateMsg Err:%s", err.Error()))
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, openId string) (err error) {
|
|
|
+func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, openId, uniqueCode string) (err error) {
|
|
|
var msg string
|
|
|
utils.FileLog.Info("Send:" + string(data))
|
|
|
client := http.Client{}
|
|
@@ -137,6 +175,7 @@ func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType in
|
|
|
} else {
|
|
|
tr.SendStatus = 0
|
|
|
}
|
|
|
+ tr.UniqueCode = uniqueCode
|
|
|
tr.SendType = sendType
|
|
|
go func() {
|
|
|
err = models.AddUserTemplateRecord(tr)
|
|
@@ -198,7 +237,7 @@ func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType in
|
|
|
go alarm_msg.SendAlarmMsg("异常已解决,自动清理限制接口,调用成功", 3)
|
|
|
//go utils.SendEmail("异常已解决:", "自动清理限制接口,调用成功", utils.EmailSendToUsers)
|
|
|
//重新推送一次
|
|
|
- toSendTemplateMsg(sendUrl, data, resource, sendType, openId)
|
|
|
+ toSendTemplateMsg(sendUrl, data, resource, sendType, openId,uniqueCode)
|
|
|
}
|
|
|
}
|
|
|
return
|