Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_6.4_task

xingzai 2 years ago
parent
commit
8784a42655

+ 4 - 4
controllers/activity.go

@@ -2188,7 +2188,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 			openIpItem, _ := models.GetUserRecordByMobile(4, sendMobile)
 			if openIpItem != nil && openIpItem.OpenId != "" {
 				if sellerItem != nil {
-					services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+					services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 				}
 			}
 		}
@@ -2196,7 +2196,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 		if sellerItem != nil {
 			openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 			if openIpItem != nil && openIpItem.OpenId != "" {
-				services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+				services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 			}
 		}
 	}
@@ -4124,7 +4124,7 @@ func (this *ActivityCoAntroller) SpecialSignupAdd() {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					if sellerItem != nil {
-						go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, openIpItem.OpenId, "sale")
+						go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, "sale", openIpItem)
 					}
 				}
 			}
@@ -4139,7 +4139,7 @@ func (this *ActivityCoAntroller) SpecialSignupAdd() {
 						for _, v := range actList {
 							companyName += "【" + v.CompanyName + "】"
 						}
-						go services.SendSpecialTemplateMsg(companyName, "", "", activityInfo.ResearchTheme, openIpItem.OpenId, "")
+						go services.SendSpecialTemplateMsg(companyName, "", "", activityInfo.ResearchTheme, "", openIpItem)
 					}
 				}
 			}

+ 4 - 6
controllers/article.go

@@ -484,10 +484,9 @@ func (this *ArticleController) InterviewApply() {
 			}
 			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
 			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
-				openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
-				fmt.Println(openIpItem)
+				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
+					go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem)
 				}
 			}
 		}
@@ -507,10 +506,9 @@ func (this *ArticleController) InterviewApply() {
 			}
 			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
 			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
-				openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
-				fmt.Println(openIpItem)
+				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
+					go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem)
 				}
 			}
 		}

+ 2 - 0
controllers/report.go

@@ -575,6 +575,7 @@ func (this *ReportController) Fllow() {
 		item.UserId = uid
 		item.Email = user.Email
 		item.Mobile = user.Mobile
+		item.RealName = user.RealName
 		item.CompanyId = user.CompanyId
 		item.CompanyName = user.CompanyName
 		item.Type = 1
@@ -817,6 +818,7 @@ func (this *ReportController) FllowDepartment() {
 		item.UserId = uid
 		item.Email = user.Email
 		item.Mobile = user.Mobile
+		item.RealName = user.RealName
 		item.CompanyId = user.CompanyId
 		item.CompanyName = user.CompanyName
 		item.Type = 1

+ 1 - 2
controllers/user.go

@@ -848,9 +848,8 @@ func (this *UserController) ApplyTryOut() {
 				req.RealName = user.RealName
 				req.CompanyName = user.CompanyName
 			}
-			fmt.Println("推送消息", req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
 			utils.FileLog.Info("推送消息 %s %s,%s,%s,%s", req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
-			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
+			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
 		}
 	}
 	err = models.AddApplyRecord(&req, user.Mobile, user.CompanyName, uid, user.CompanyId, CompanyIdType)

+ 2 - 0
models/activity.go

@@ -320,6 +320,7 @@ func UpdateActivitySattusToComplete() (err error) {
 //活动详情
 type WxMsgCygxActivityList struct {
 	Id                      int    `description:"报名ID"`
+	UserId                  int    `description:"用户ID"`
 	ActivityId              int    `description:"活动ID 等于0新增活动,大于0修改活动"`
 	ActivityTypeId          int    `description:"活动类型id"`
 	ActivityName            string `description:"活动名称"`
@@ -350,6 +351,7 @@ func GetActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList,
 	o := orm.NewOrm()
 	sql := `SELECT
 	s.id,
+	s.user_id,
 	s.fail_type,
 	cr.open_id,
 	a.*

+ 1 - 0
models/article_department_follow.go

@@ -16,6 +16,7 @@ type CygxArticleDepartmentFollow struct {
 	Type         int       `description:"操作方式,1报名,2取消报名"`
 	CreateTime   time.Time `description:"创建时间"`
 	ModifyTime   time.Time `description:"更新时间"`
+	RealName     string    `description:"用户实际名称"`
 }
 
 type ArticleDepartmentIdRep struct {

+ 1 - 0
models/db.go

@@ -105,6 +105,7 @@ func init() {
 		new(CygxCelueArticleHistoryRecord),
 		new(CygxArticleHistoryRecordAll),
 		new(CygxActivityAppointment),
+		new(UserTemplateRecord),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 1 - 0
models/industry_fllow.go

@@ -16,6 +16,7 @@ type CygxIndustryFllow struct {
 	Type                   int       `description:"操作方式,1报名,2取消报名"`
 	CreateTime             time.Time `description:"创建时间"`
 	ModifyTime             time.Time `description:"更新时间"`
+	RealName               string    `description:"用户实际名称"`
 }
 
 type CygxIndustryFllowRep struct {

+ 8 - 7
models/user_record.go

@@ -48,9 +48,10 @@ func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 }
 
 //根据用户id和平台id获取用户关系
-func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *UserRecord, err error) {
+func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *OpenIdList, err error) {
 	sql := `SELECT
-			cr.open_id 
+			cr.open_id,
+			u.user_id
 		FROM
 			wx_user AS u
 			INNER JOIN user_record AS r ON r.user_id = u.user_id
@@ -102,16 +103,16 @@ func ModifyUserRecordSessionKey(openId, sessionKey string) (err error) {
 }
 
 //根据用户id和平台id获取用户关系
-func GetUserRecordByMobile(platform int, bindAccount string) (item *UserRecord, err error) {
+func GetUserRecordByMobile(platform int, bindAccount string) (item *OpenIdList, err error) {
 
 	var sql string
 	if utils.RunMode == "release" {
-		sql = `SELECT cr.open_id FROM user_record  as u 
+		sql = `SELECT cr.open_id,user_id FROM user_record  as u 
 			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
 			WHERE create_platform=? AND bind_account = ?`
 	} else {
 		platform = 1
-		sql = `SELECT open_id FROM	user_record  WHERE create_platform =? AND bind_account = ?`
+		sql = `SELECT open_id,user_id FROM	user_record  WHERE create_platform =? AND bind_account = ?`
 	}
 
 	err = orm.NewOrm().Raw(sql, platform, bindAccount).QueryRow(&item)
@@ -129,12 +130,12 @@ func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenIdList, err error) {
 	var sql string
 	if utils.RunMode == "release" {
-		sql = `SELECT cr.open_id FROM user_record  as u 
+		sql = `SELECT cr.open_id,user_id FROM user_record  as u 
 			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
 			WHERE create_platform=? AND bind_account IN (` + bindAccount + `)`
 	} else {
 		platform = 1
-		sql = `SELECT open_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
+		sql = `SELECT open_id,user_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
 	}
 	_, err = orm.NewOrm().Raw(sql, platform).QueryRows(&items)
 	return

+ 23 - 0
models/user_template_record.go

@@ -0,0 +1,23 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+type UserTemplateRecord struct {
+	Id         int `orm:"column(id);pk"`
+	UserId     int
+	OpenId     string
+	Resource   string
+	SendData   string
+	Result     string
+	CreateDate string
+	CreateTime string
+	SendStatus int
+	SendType   int
+}
+
+//添加banner
+func AddUserTemplateRecord(item *UserTemplateRecord) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 2 - 1
models/wx_template_msg.go

@@ -12,6 +12,7 @@ type SendTemplateResponse struct {
 
 type OpenIdList struct {
 	OpenId string
+	UserId int
 }
 
 func GetOpenIdList() (items []*OpenIdList, err error) {
@@ -37,7 +38,7 @@ func GetWxOpenIdList() (items []*OpenIdList, err error) {
 
 func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	//sql := `SELECT * FROM user_record WHERE bind_account IN (` + utils.WxMsgTemplateIdAskMsgMobile + `) AND create_platform = 1`
-	sql := `SELECT cr.* FROM user_record  as c
+	sql := `SELECT cr.*,user_id FROM user_record  as c
 			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
 			WHERE bind_account IN (` + mobile + `) AND create_platform = 4`
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)

+ 6 - 133
services/activity.go

@@ -51,6 +51,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 		var first string
 		openIdItem := new(models.OpenIdList)
 		openIdItem.OpenId = v.OpenId
+		openIdItem.UserId = v.UserId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		//if v.FailType == 0 {
@@ -104,6 +105,7 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 		var first string
 		openIdItem := new(models.OpenIdList)
 		openIdItem.OpenId = v.OpenId
+		openIdItem.UserId = v.UserId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		reserveResults = "--"
@@ -470,14 +472,14 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 			if sellerItem != nil {
 				openIpItem, _ := models.GetUserRecordByMobile(4, utils.ActSendMsgMobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 				}
 			}
 			//给所属销售推送消息
 			if sellerItem != nil {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 				}
 			}
 		}
@@ -558,14 +560,14 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 			if sellerItem != nil {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sendMobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 				}
 			}
 			//给销售推送模板消息
 			if sellerItem != nil {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, openIpItem.OpenId, activityInfo.ActivityId)
+					SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 				}
 			}
 		}
@@ -967,135 +969,6 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 	return
 }
 
-//活动带问提醒
-func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName, openId string, activityId int) (err error) {
-	var msg string
-	defer func() {
-		if err != nil {
-			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-		}
-		if msg != "" {
-			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
-		}
-	}
-
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-
-	first := "有新的客户提问"
-	keyword1 := applyName
-	keyword2 := "-"
-	keyword3 := applyTime
-	keyword4 := askContent
-	remark := activityName
-	fontColor := "#D9001B"
-	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
-	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
-	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
-	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
-	sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
-	if utils.RunMode == "release" {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
-	} else {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApply
-	}
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, openId, sendMap)
-	fmt.Println("send end")
-	return
-}
-
-//专项产业调研模板消息推送
-func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, openId, resource string) (err error) {
-	var msg string
-	defer func() {
-		if err != nil {
-			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-		}
-		if msg != "" {
-			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
-		}
-	}
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-	var first string
-	if resource == "sale" {
-		first = "有客户对专项调研感兴趣"
-	} else {
-		first = "有5家公司预报名专项调研"
-	}
-
-	keyword1 := applyName
-	keyword2 := mobile
-	keyword3 := applyTime
-	keyword4 := activityName
-
-	fontColor := "#D9001B"
-	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
-	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
-	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
-	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
-	if utils.RunMode == "release" {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
-	} else {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApply
-	}
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, openId, sendMap)
-	return
-}
-
 //判断预约纪要按钮是否显示
 func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) {
 	if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 {

+ 36 - 16
services/wechat_send_msg.go

@@ -12,11 +12,12 @@ import (
 )
 
 //访谈申请
-func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
+func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
 			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("访谈申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2)
 		}
 		if msg != "" {
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
@@ -52,17 +53,18 @@ func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle,
 
 	sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
 	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, openId, sendMap)
+	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
 	fmt.Println("send end")
 	return
 }
 
 //访谈申请取消
-func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
+func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
 			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("访谈申请取消模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2)
 		}
 		if msg != "" {
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
@@ -93,17 +95,18 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 
 	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancelXzs
 	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, openId, sendMap)
+	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
 	fmt.Println("send end")
 	return
 }
 
 //权限申请
-func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId, applyMethod string) (err error) {
+func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
 			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2)
 		}
 		if msg != "" {
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
@@ -155,26 +158,26 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId, apply
 		sendMap["template_id"] = utils.WxMsgTemplateIdApply
 	}
 	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, openId, sendMap)
+	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
 	fmt.Println("send end")
 	return
 }
 
-func sendTemplateMsg(sendUrl, openId string, sendMap map[string]interface{}) (err error) {
-	sendMap["touser"] = openId
+func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, itemOpenid *models.OpenIdList, resource string, sendType int) (err error) {
+	sendMap["touser"] = itemOpenid.OpenId
 	data, err := json.Marshal(sendMap)
 	if err != nil {
 		fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
 		return err
 	}
-	err = toSendTemplateMsg(sendUrl, data)
+	err = toSendTemplateMsg(sendUrl, data, resource, sendType, itemOpenid)
 	if err != nil {
 		fmt.Println("send err:", err.Error())
 	}
 	return
 }
 
-func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
+func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
 	client := http.Client{}
 	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
 	if err != nil {
@@ -191,6 +194,29 @@ func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
 		utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error())
 		return err
 	}
+	//新增模板消息推送记录
+	{
+		tr := new(models.UserTemplateRecord)
+		tr.UserId = dataItem.UserId
+		tr.OpenId = dataItem.OpenId
+		tr.Resource = resource
+		tr.SendData = string(data)
+		tr.Result = string(body)
+		tr.CreateDate = time.Now().Format(utils.FormatDate)
+		tr.CreateTime = time.Now().Format(utils.FormatDateTime)
+		if templateResponse.Errcode == 0 {
+			tr.SendStatus = 1
+		} else {
+			tr.SendStatus = 0
+		}
+		tr.SendType = sendType
+		go func() {
+			err = models.AddUserTemplateRecord(tr)
+			if err != nil {
+				utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
+			}
+		}()
+	}
 	return
 }
 
@@ -199,9 +225,3 @@ type SendTemplateResponse struct {
 	Errmsg  string `json:"errmsg"`
 	MsgID   int    `json:"msgid"`
 }
-
-func ini123() {
-	fmt.Println("start")
-	SendPermissionApplyTemplateMsg("沈涛", "弘则", "18767183922", "oW3Gts7Ji6Ngv7v2pLeLOFaajfus", "潜在客户申请")
-	fmt.Println("end")
-}

+ 200 - 44
services/wx_template_msg.go

@@ -46,7 +46,7 @@ func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, a
 	sendData["activity_address"] = map[string]interface{}{"value": activityAddress, "color": "#173177"}
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
 	return
 }
 
@@ -56,6 +56,7 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 	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("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
 			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 		}
 		fmt.Println("line 21", err, msg)
@@ -96,46 +97,7 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
-	return
-}
-
-func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList) (err error) {
-	for _, v := range items {
-		sendMap["touser"] = v.OpenId
-		data, err := json.Marshal(sendMap)
-		if err != nil {
-			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
-			return err
-		}
-		utils.FileLog.Info("One SendData:%s", string(data))
-		fmt.Println(string(data))
-		err = SendTemplateMsg(sendUrl, data)
-		if err != nil {
-			fmt.Println("send err:", err.Error())
-			return err
-		}
-	}
-	return
-}
-
-func SendTemplateMsg(sendUrl string, data []byte) (err error) {
-	client := http.Client{}
-	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
-	if err != nil {
-		return
-	}
-	defer resp.Body.Close()
-
-	body, _ := ioutil.ReadAll(resp.Body)
-	utils.FileLog.Info("SendResult:%s", string(body))
-	var templateResponse models.SendTemplateResponse
-	err = json.Unmarshal(body, &templateResponse)
-	fmt.Println(templateResponse.Errcode)
-	fmt.Println(templateResponse.Errmsg)
-	if err != nil {
-		return err
-	}
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
 }
 
@@ -172,7 +134,8 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
 	fmt.Println(accessToken)
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	fmt.Println(sendUrl)
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList)
 	return
 }
 
@@ -182,9 +145,9 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 	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("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
 			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 		}
-		fmt.Println("line 21", err, msg)
 	}()
 	accessToken, err := models.GetWxAccessTokenByXzs()
 	if err != nil {
@@ -214,7 +177,138 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	return
+}
+
+//活动带问提醒
+func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+activityName, 2)
+		}
+		if msg != "" {
+			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
+		}
+	}
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+
+	first := "有新的客户提问"
+	keyword1 := applyName
+	keyword2 := "-"
+	keyword3 := applyTime
+	keyword4 := askContent
+	remark := activityName
+	fontColor := "#D9001B"
+	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
+	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+	sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
+	if utils.RunMode == "release" {
+		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
+	} else {
+		sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	}
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
+	sendMap["data"] = sendData
+	sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
+	fmt.Println("send end")
+	return
+}
+
+//专项产业调研模板消息推送
+func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
+		}
+		if msg != "" {
+			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
+		}
+	}
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	var first string
+	if resource == "sale" {
+		first = "有客户对专项调研感兴趣"
+	} else {
+		first = "有5家公司预报名专项调研"
+	}
+
+	keyword1 := applyName
+	keyword2 := mobile
+	keyword3 := applyTime
+	keyword4 := activityName
+
+	fontColor := "#D9001B"
+	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
+	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+	if utils.RunMode == "release" {
+		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
+	} else {
+		sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	}
+	sendMap["data"] = sendData
+	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
 	return
 }
 
@@ -226,3 +320,65 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 //弘则研究:
 //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s     活动预约通知
 //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0     项目状态变更通知
+
+func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
+	for _, v := range items {
+		sendMap["touser"] = v.OpenId
+		data, err := json.Marshal(sendMap)
+		if err != nil {
+			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
+			return err
+		}
+		utils.FileLog.Info("One SendData:%s", string(data))
+		fmt.Println(string(data))
+		err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
+		if err != nil {
+			fmt.Println("send err:", err.Error())
+			return err
+		}
+	}
+	return
+}
+
+func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
+	client := http.Client{}
+	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
+	if err != nil {
+		return
+	}
+	defer resp.Body.Close()
+
+	body, _ := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Info("SendResult:%s", string(body))
+	var templateResponse models.SendTemplateResponse
+	err = json.Unmarshal(body, &templateResponse)
+	fmt.Println(templateResponse.Errcode)
+	fmt.Println(templateResponse.Errmsg)
+	if err != nil {
+		return err
+	}
+	//新增模板消息推送记录
+	{
+		tr := new(models.UserTemplateRecord)
+		tr.UserId = dataItem.UserId
+		tr.OpenId = dataItem.OpenId
+		tr.Resource = resource
+		tr.SendData = string(data)
+		tr.Result = string(body)
+		tr.CreateDate = time.Now().Format(utils.FormatDate)
+		tr.CreateTime = time.Now().Format(utils.FormatDateTime)
+		if templateResponse.Errcode == 0 {
+			tr.SendStatus = 1
+		} else {
+			tr.SendStatus = 0
+		}
+		tr.SendType = sendType
+		go func() {
+			err = models.AddUserTemplateRecord(tr)
+			if err != nil {
+				utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
+			}
+		}()
+	}
+	return
+}

+ 7 - 0
utils/constants.go

@@ -63,3 +63,10 @@ var (
 const (
 	CACHE_KEY_USER_VIEW = "user_view_record" //用户阅读数据
 )
+
+//模板消息推送类型
+const (
+	TEMPLATE_MSG_CYGX_ACTIVITY_ADD = 12 //查研观向小程序活动更新推送 12
+	TEMPLATE_MSG_CYGX_ARTICLE_ADD  = 13 //查研观向报告更新推送  13
+	TEMPLATE_MSG_CYGX_APPLY        = 14 //查研观向审批通知
+)