瀏覽代碼

no message

xingzai 6 月之前
父節點
當前提交
79c5f8b0e7

+ 45 - 0
models/cygx/activity_user_template_record.go

@@ -0,0 +1,45 @@
+package cygx
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+//活动发布推送的Openid记录
+
+type CygxActivityUserTemplateRecord struct {
+	TemplateId int       `orm:"column(template_id);pk"description:"主键ID"`
+	ActivityId int       ` description:"活动ID"`
+	UserId     int       ` description:"用户ID"`
+	OpenId     string    ` description:"open_id "`
+	SendType   int       ` description:"类型 "`
+	CreateTime time.Time `description:"创建时间"`
+}
+
+// AddCygxActivityUserTemplateRecordMulti 批量添加
+func AddCygxActivityUserTemplateRecordMulti(items []*CygxActivityUserTemplateRecord) (err error) {
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	//批量插入新的关联数据
+	if len(items) > 0 {
+		_, err = o.InsertMulti(len(items), items)
+	}
+	return
+}
+
+// GeUserTemplateRecordListBysendType 根据模板消息会议类型,获取已推送的用户的信息
+func GeCygxActivityUserTemplateRecordListByActivityId(activityId, sendType int) (items []*CygxActivityUserTemplateRecord, err error) {
+	sql := `SELECT * FROM cygx_activity_user_template_record WHERE activity_id = ?  AND  send_type = ?  `
+	o := orm.NewOrmUsingDB("hz_cygx")
+	_, err = o.Raw(sql, activityId, sendType).QueryRows(&items)
+	return
+}

+ 7 - 3
models/cygx/cygx_user_record.go

@@ -231,7 +231,7 @@ func GetCygxActiviyUserFllowOpenid(activityId int) (items []*OpenIdList, err err
 //}
 
 // GetCygxUserRecordPowerByActivitySet 根据活动设置,获取所有有权限的用户的opid
-func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (items []*OpenIdList, err error) {
+func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (items []*OpenIdList, itemsYx []*OpenIdList, err error) {
 	//o := orm.NewOrm()
 	//sql := `SELECT
 	//		cr.open_id,
@@ -269,6 +269,11 @@ func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (
 	}
 	items = openIdList
 
+	openIdListYx, err := GetMfyxUserRecordListByMobileArr(mobileArr)
+	if err != nil {
+		return
+	}
+	itemsYx = openIdListYx
 	return
 }
 
@@ -478,7 +483,6 @@ func GetMfyxActivityOpenIdList(activityId int) (items []*OpenIdList, err error)
 	return
 }
 
-
 // 根据手机号获取用户的openid
 func GetMfyxUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
@@ -510,4 +514,4 @@ func GetMfyxUserRecordOpenidByMobile(bindAccount string) (item *OpenIdList, err
 			WHERE cr.cygx_bind_account = ?`
 	err = o.Raw(sql, bindAccount).QueryRow(&item)
 	return
-}
+}

+ 1 - 0
models/db.go

@@ -403,6 +403,7 @@ func initCygx() {
 		new(cygx.CygxActivityRestrictSignup),
 		new(cygx.CygxActivityAttendanceDetail),
 		new(cygx.CygxActivityOfflineMeetingDetail),
+		new(cygx.CygxActivityUserTemplateRecord),
 		new(cygx.CygxSummaryFastsearchKeywords),
 		new(cygx.CygxMySchedule),
 		new(cygx.CygxIndustrialArticleGroupManagement),

+ 106 - 46
services/cygx/acitvity.go

@@ -1227,6 +1227,7 @@ func DoActivityOnenIdWxTemplateMsg(activityId int) (err error) {
 			mapUserIdChooseTypeSend[v.UserId] = v.UserId
 		}
 	}
+
 	//fmt.Println(chooseSendtList)
 	//获取关注这个活动对应产业的用户的 openid
 	mapOpenidFllow := make(map[int]string)
@@ -1239,12 +1240,12 @@ func DoActivityOnenIdWxTemplateMsg(activityId int) (err error) {
 	}
 
 	//fmt.Println(mapOpenidFllow)
-	openidPowerByActivitySetList, err := cygx.GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition)
+	openidPowerByActivitySetList, openidPowerByActivitySetListYx, err := cygx.GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return err
 	}
 	//已经推送过的不做二次推送
-	listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD, strconv.Itoa(activityId))
+	listSendOpendId, err := cygx.GeCygxActivityUserTemplateRecordListByActivityId(activityId, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return err
 	}
@@ -1271,67 +1272,126 @@ func DoActivityOnenIdWxTemplateMsg(activityId int) (err error) {
 			}
 		}
 	}
-	if len(OpenIdList) == 0 {
-		return err
-	}
 
-	openIdArr := make([]string, len(OpenIdList))
-	for i, v := range OpenIdList {
-		openIdArr[i] = v.OpenId
+	var openiditems []*cygx.CygxActivityUserTemplateRecord
+
+	var openIdArr []string
+	for _, v := range OpenIdList {
+		//openIdArr[i] = v.OpenId
+		openIdArr = append(openIdArr, v.OpenId)
+
+		openiditem := new(cygx.CygxActivityUserTemplateRecord)
+		openiditem.ActivityId = activityId
+		openiditem.UserId = v.UserId
+		openiditem.OpenId = v.OpenId
+		openiditem.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+		openiditem.CreateTime = time.Now()
+		openiditems = append(openiditems, openiditem)
 	}
 
-	activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
-	first := "您关注的赛道,有【" + activityInfo.ActivityTypeName + "】活动发布,欢迎参与"
-	keyword1 := "新活动:" + activityInfo.ActivityName
-	keyword2 := activityInfo.ActivityTimeText + ",【" + activityInfo.Label + "】"
-
-	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
-	sendInfo := new(services.SendWxTemplate)
-	sendInfo.First = first
-	sendInfo.Keyword1 = keyword1
-	sendInfo.Keyword2 = keyword2
-
-	sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
-	sendInfo.RedirectUrl = redirectUrl
-	sendInfo.RedirectTarget = 3
-	sendInfo.Resource = strconv.Itoa(activityId)
-	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
-	sendInfo.OpenIdArr = openIdArr
-	e := services.SendTemplateMsg(sendInfo)
-	if e != nil {
-		err = errors.New("SendTemplateMsg, Err: " + e.Error())
-		return
+	var OpenIdListYx []*models.OpenIdList
+	for _, v := range openidPowerByActivitySetListYx {
+		if mapSendOpenid[v.OpenId] > 0 {
+			//fmt.Println("已经推过了")
+			continue
+		}
+		item := new(models.OpenIdList)
+		item.UserId = v.UserId
+		item.OpenId = v.OpenId
+		if mapUserIdChooseSend[v.UserId] == 0 {
+			//如果小助手没有选择过权限信息,那么做消息推送
+			OpenIdListYx = append(OpenIdListYx, item)
+		} else {
+			//如果勾选了权限信息,则要满足 1选择产业,2没有选择不接受任何消息推送,3活动对应的主客观跟自己选择的一致。
+			if mapOpenidFllow[v.UserId] != "" && mapOpenidRefuset[v.UserId] == "" && mapUserIdChooseTypeSend[v.UserId] != 0 {
+				OpenIdListYx = append(OpenIdListYx, item)
+			}
+		}
 	}
 
-	industrialName := ""
-	for _, v := range industrialList {
-		industrialName += v.IndustryName + ","
+	var openIdArrYx []string
+	for _, v := range OpenIdListYx {
+		//openIdArr[i] = v.OpenId
+		openIdArrYx = append(openIdArrYx, v.OpenId)
+
+		openiditem := new(cygx.CygxActivityUserTemplateRecord)
+		openiditem.ActivityId = activityId
+		openiditem.UserId = v.UserId
+		openiditem.OpenId = v.OpenId
+		openiditem.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+		openiditem.CreateTime = time.Now()
+		openiditems = append(openiditems, openiditem)
 	}
-	industrialName = strings.TrimRight(industrialName, ",")
-	// 发类目模版消息
-	if activityInfo.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
-		actTime, _ := time.Parse(utils.FormatDateTime, activityInfo.ActivityTime)
-		first := industrialName
-		keyword1 := "发布了新活动"
-		keyword2 := utils.TruncateActivityNameString(activityInfo.ActivityName)
-		keyword3 := actTime.Format(utils.FormatDateTimeMinute2)
 
-		redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(activityId)
-		sendInfo := new(services.SendWxCategoryTemplate)
-		sendInfo.Keywords = []string{first, keyword1, keyword2, keyword3}
+	if len(OpenIdList)+len(OpenIdListYx) == 0 {
+		return err
+	}
 
-		sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
+	activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
+	if len(openIdArr) > 0 {
+		first := "您关注的赛道,有【" + activityInfo.ActivityTypeName + "】活动发布,欢迎参与"
+		keyword1 := "新活动:" + activityInfo.ActivityName
+		keyword2 := activityInfo.ActivityTimeText + ",【" + activityInfo.Label + "】"
+
+		redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+		sendInfo := new(services.SendWxTemplate)
+		sendInfo.First = first
+		sendInfo.Keyword1 = keyword1
+		sendInfo.Keyword2 = keyword2
+
+		sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
 		sendInfo.RedirectUrl = redirectUrl
 		sendInfo.RedirectTarget = 3
 		sendInfo.Resource = strconv.Itoa(activityId)
-		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
+		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
 		sendInfo.OpenIdArr = openIdArr
-		e := services.SendCategoryTemplateMsg(sendInfo)
+		e := services.SendTemplateMsg(sendInfo)
 		if e != nil {
 			err = errors.New("SendTemplateMsg, Err: " + e.Error())
 			return
 		}
 	}
+
+	if len(OpenIdListYx) > 0 {
+		industrialName := ""
+		for _, v := range industrialList {
+			industrialName += v.IndustryName + ","
+		}
+		industrialName = strings.TrimRight(industrialName, ",")
+		// 发类目模版消息
+		if activityInfo.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+			actTime, _ := time.Parse(utils.FormatDateTime, activityInfo.ActivityTime)
+			first := industrialName
+			keyword1 := "发布了新活动"
+			keyword2 := utils.TruncateActivityNameString(activityInfo.ActivityName)
+			keyword3 := actTime.Format(utils.FormatDateTimeMinute2)
+
+			redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+			sendInfo := new(services.SendWxCategoryTemplate)
+			sendInfo.Keywords = []string{first, keyword1, keyword2, keyword3}
+
+			sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
+			sendInfo.RedirectUrl = redirectUrl
+			sendInfo.RedirectTarget = 3
+			sendInfo.Resource = strconv.Itoa(activityId)
+			sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+			sendInfo.OpenIdArr = openIdArrYx
+			e := services.SendCategoryTemplateMsg(sendInfo)
+			if e != nil {
+				err = errors.New("SendTemplateMsg, Err: " + e.Error())
+				return
+			}
+		}
+	}
+
+	//活动发布推送的Openid记录
+	if len(openiditems) > 0 {
+		e := cygx.AddCygxActivityUserTemplateRecordMulti(openiditems)
+		if e != nil {
+			err = errors.New("AddCygxActivityUserTemplateRecordMulti, Err: " + e.Error())
+			return
+		}
+	}
 	return
 }
 

+ 36 - 7
services/cygx/activity_wx_msg.go

@@ -10,6 +10,7 @@ import (
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
 	"strconv"
+	"time"
 )
 
 // 修改活动人数限制之后,对于因为人数已满而失败的用户,推送模板消息
@@ -31,7 +32,13 @@ func SendWxMsgWithCygxActivityUpdateLimitPeople(activityId int) (err error) {
 		return
 	}
 	//已经推送过的不做二次推送
-	listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE, strconv.Itoa(activityId))
+	//listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE, strconv.Itoa(activityId))
+
+	//已经推送过的不做二次推送
+	listSendOpendId, err := cygx.GeCygxActivityUserTemplateRecordListByActivityId(activityId, utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return err
 	}
@@ -73,13 +80,27 @@ func SendWxMsgWithCygxActivityUpdateLimitPeople(activityId int) (err error) {
 	if len(openIdList) == 0 {
 		return
 	}
-	openIdArr := make([]string, len(openIdList))
-	for i, v := range openIdList {
-		if mapSendOpenid[v.OpenId] > 0 {
-			continue
-		}
-		openIdArr[i] = v.OpenId
+	//openIdArr := make([]string, len(openIdList))
+	//for i, v := range openIdList {
+	//	if mapSendOpenid[v.OpenId] > 0 {
+	//		continue
+	//	}
+	//	openIdArr[i] = v.OpenId
+	//}
+
+	var openiditems []*cygx.CygxActivityUserTemplateRecord
+	var openIdArr []string
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+		openiditem := new(cygx.CygxActivityUserTemplateRecord)
+		openiditem.ActivityId = activityId
+		openiditem.UserId = v.UserId
+		openiditem.OpenId = v.OpenId
+		openiditem.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
+		openiditem.CreateTime = time.Now()
+		openiditems = append(openiditems, openiditem)
 	}
+
 	first := "您好,本场活动已增加活动名额至" + activityInfo.LimitPeopleNum + "人,欢迎报名"
 	keyword1 := activityInfo.ActivityName
 	keyword2 := "已增加活动名额至" + activityInfo.LimitPeopleNum + "人,欢迎报名"
@@ -105,6 +126,14 @@ func SendWxMsgWithCygxActivityUpdateLimitPeople(activityId int) (err error) {
 		err = errors.New("SendTemplateMsg, Err: " + e.Error())
 		return
 	}
+	//活动发布推送的Openid记录
+	if len(openiditems) > 0 {
+		e = cygx.AddCygxActivityUserTemplateRecordMulti(openiditems)
+		if e != nil {
+			err = errors.New("AddCygxActivityUserTemplateRecordMulti, Err: " + e.Error())
+			return
+		}
+	}
 	return
 }
 

+ 29 - 12
services/wechat_send_category_template_msg.go

@@ -306,7 +306,9 @@ func SendWxCategoryMsgWithCygxActivityUpdateLimitPeople(activityId int) (err err
 		return
 	}
 	//已经推送过的不做二次推送
-	listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE, strconv.Itoa(activityId))
+	//listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE, strconv.Itoa(activityId))
+	//已经推送过的不做二次推送
+	listSendOpendId, err := cygx.GeCygxActivityUserTemplateRecordListByActivityId(activityId, utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return err
 	}
@@ -345,16 +347,21 @@ func SendWxCategoryMsgWithCygxActivityUpdateLimitPeople(activityId int) (err err
 		err = errors.New("GetWxOpenIdBList, Err: " + e.Error())
 		return
 	}
-	if len(openIdList) == 0 {
-		return
-	}
-	openIdArr := make([]string, len(openIdList))
-	for i, v := range openIdList {
-		if mapSendOpenid[v.OpenId] > 0 {
-			continue
-		}
-		openIdArr[i] = v.OpenId
+
+	var openiditems []*cygx.CygxActivityUserTemplateRecord
+	var openIdArr []string
+	for _, v := range openIdList {
+		//openIdArr[i] = v.OpenId
+		openIdArr = append(openIdArr, v.OpenId)
+		openiditem := new(cygx.CygxActivityUserTemplateRecord)
+		openiditem.ActivityId = activityId
+		openiditem.UserId = v.UserId
+		openiditem.OpenId = v.OpenId
+		openiditem.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
+		openiditem.CreateTime = time.Now()
+		openiditems = append(openiditems, openiditem)
 	}
+
 	keyword1 := utils.TruncateActivityNameString(activityInfo.ActivityName)
 	keyword2 := "活动名额增加"
 	keyword3 := "名额增至" + activityInfo.LimitPeopleNum + "人,欢迎报名"
@@ -374,6 +381,16 @@ func SendWxCategoryMsgWithCygxActivityUpdateLimitPeople(activityId int) (err err
 		err = errors.New("SendTemplateMsg, Err: " + e.Error())
 		return
 	}
+
+	//活动发布推送的Openid记录
+	if len(openiditems) > 0 {
+		e := cygx.AddCygxActivityUserTemplateRecordMulti(openiditems)
+		if e != nil {
+			err = errors.New("AddCygxActivityUserTemplateRecordMulti, Err: " + e.Error())
+			return
+		}
+	}
+
 	return
 }
 
@@ -578,7 +595,7 @@ func SendWxCategoryMsgWithCygxActivitySignUpBySell(items []*cygx.CygxSignupUser)
 			keyword2 := wxUser.CompanyName
 			keyword3 := sellerItem.RealName
 			keyword4 := resultTime.Format(utils.FormatDateTimeMinute2)
-			keyword5 := utils.TruncateActivityNameString("报名:"+activityInfo.ActivityName)
+			keyword5 := utils.TruncateActivityNameString("报名:" + activityInfo.ActivityName)
 
 			sendInfo := new(SendWxCategoryTemplate)
 			sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}
@@ -810,7 +827,7 @@ func SendWxCategoryMsgWithYxActivityCancelSignUpBySell(uid, activityId int) (err
 	keyword2 := wxUser.CompanyName
 	keyword3 := sellerItem.RealName
 	keyword4 := resultTime.Format(utils.FormatDateTimeMinute2)
-	keyword5 := utils.TruncateActivityNameString("取消报名:"+activityInfo.ActivityName)
+	keyword5 := utils.TruncateActivityNameString("取消报名:" + activityInfo.ActivityName)
 
 	sendInfo := new(SendWxCategoryTemplate)
 	sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}