소스 검색

Merge branch 'yx_1.1' into debug

# Conflicts:
#	models/activity.go
zwxi 11 달 전
부모
커밋
76bd1951ce
5개의 변경된 파일247개의 추가작업 그리고 12개의 파일을 삭제
  1. 63 1
      models/activity.go
  2. 9 1
      services/task.go
  3. 166 1
      services/wx_category_template_msg.go
  4. 2 2
      utils/config.go
  5. 7 7
      utils/constants.go

+ 63 - 1
models/activity.go

@@ -682,4 +682,66 @@ func GetActivityMsgExport(activityId int) (item []*ActivityMsgExportRep, err err
 			k.ask_id`
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
-}
+}
+
+// 活动详情
+type WxMsgCygxActivityList struct {
+	Id                      int    `description:"报名ID"`
+	UserId                  int    `description:"用户ID"`
+	ActivityId              int    `description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int    `description:"活动类型id"`
+	ActivityName            string `description:"活动名称"`
+	ActivityTypeName        string `description:"活动类型名称"`
+	Speaker                 string `description:"主讲人"`
+	SignupType              int    `description:"报名方式,1预约外呼,2我要报名"`
+	ChartPermissionId       int    `description:"行业id"`
+	ChartPermissionName     string `description:"行业名称"`
+	IsLimitPeople           int    `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int    `description:"限制的人数数量"`
+	ActivityTime            string `description:"活动时间"`
+	ActivityTimeText        string `description:"活动时间带文字"`
+	City                    string `description:"城市"`
+	Address                 string `description:"活动地址"`
+	DistinguishedGuest      string `description:"嘉宾"`
+	Expert                  string `description:"专家"`
+	IsSignup                int    `description:"是否已报名 1是 ,0 否"`
+	SignupNum               int    `description:"已报名人数"`
+	ActiveState             string `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsCancelMeetingReminder int    `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
+	IsBrackets              int    `description:"是否有方括号 1是 ,0 否"`
+	OpenId                  string `description:"OenId"`
+	FailType                int    `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+}
+
+func GetYxActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	s.id,
+	s.user_id,
+	s.fail_type,
+	cr.open_id,
+	a.*
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id
+	INNER JOIN cygx_user_record AS cr ON cr.cygx_bind_account = s.mobile 
+WHERE
+	1 = 1 
+	AND s.is_send_wx_msg = 0 
+	AND s.do_fail_type = 0 
+	AND a.publish_status = 1
+	AND a.chart_permission_id = 31
+	AND a.activity_time <= ? AND a.activity_time >= NOW() 
+	AND s.is_cancel = 0
+	AND( a.activity_type_id IN (4,5,6) OR (a.activity_type_id = 3 AND a.is_limit_people = 1 )) 	GROUP BY s.id`
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+// 修改是否推送消息状态
+func UPdateSendedMsgStatus(signupIds string) (err error) {
+	sql := ` UPDATE cygx_activity_signup SET  is_send_wx_msg= 1  WHERE id IN(` + signupIds + `)`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).Exec()
+	return
+}

+ 9 - 1
services/task.go

@@ -6,9 +6,17 @@ import (
 )
 
 func Task() {
+	fmt.Println("start")
+
 	sendEmailFileForAskMsgResearch := task.NewTask("sendEmailFileForAskMsgResearch", "0 */5 6-23 * * *", SendEmailFileForAskMsgResearch) //研选系列专家电话会,会前1小时将问题列表发送给邮箱
 	task.AddTask("sendEmailFileForAskMsgResearch", sendEmailFileForAskMsgResearch)
-	fmt.Println("start")
+
+	sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 6-23 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
+	task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
+
+	sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 6-23 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
+	task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
+
 	fmt.Println("end")
 }
 

+ 166 - 1
services/wx_category_template_msg.go

@@ -318,7 +318,7 @@ func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user
 		openIdArr = append(openIdArr, v.OpenId)
 	}
 
-	redirectUrl = utils.WX_MSG_PATH_YX_COMMENT_DETAIL + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
+	redirectUrl = utils.WX_MSG_PATH_YX_COMMENT_DETAIL + strconv.Itoa(msgId) + "&Stype=文章"
 
 	sendInfo := new(SendWxCategoryTemplate)
 	sendInfo.Keywords = keywords
@@ -893,3 +893,168 @@ func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime
 	}
 	return
 }
+
+// 推送会议开始消息提醒60分钟前
+func SendActivityBeginMsg(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)
+
+		SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
+	}
+	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 SendActivityBeginMsgMeeting(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)
+		}
+		//var reserveResults string
+		//var keyword2 string
+		//reserveResults = "--"
+		//keyword2 = "将在15分钟后开始"
+		//SendWxMsgWithFrequency(keyword2, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
+		SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
+	}
+	err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
+	return
+}
+
+
+// 活动预开始模版消息通知(类目模版消息,暂时单独推送)
+func SendWxMsgWithFrequencyBycategory(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("活动预开始模版消息通知消息失败SendWxMsgWithFrequencyBycategory ,activityId:", activityId, msg+";Err:"+err.Error()), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	keyWord1 = utils.TruncateActivityNameString(keyWord1)
+	//keyword1 := keyWord2
+	//keyword1 := keyWord2
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgTemplateIdActivityChangeApplyXzs
+	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": redirectUrl}
+	sendData["thing18"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
+	sendData["time23"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
+	return
+}

+ 2 - 2
utils/config.go

@@ -22,8 +22,8 @@ var (
 // 微信配置信息
 var (
 	WxId        string //微信原始ID
-	WxAppId     string //查研观向小程序
-	WxAppSecret string //查研观向小程序
+	WxAppId     string //买方研选小程序
+	WxAppSecret string //买方研选小程序
 
 	WxPublicIdXzs     string //查研观向小助手公众号
 	WxPublicSecretXzs string //查研观向小助手公众号

+ 7 - 7
utils/constants.go

@@ -205,13 +205,13 @@ const (
 	WX_MSG_PATH_YX_SURVEY_DETAIL         = "pages-purchaser/survey/surveyDetail?surveyId="                //用户提交研选调研需求
 	WX_MSG_PATH_APPLY_COLLECTION_DETAIL  = "reportPages/bulletinDetail/bulletinDetail?id="                //精选看板申请详情页
 
-	WX_MSG_PATH_YX_SPECIAL_DETAIL        = "pages-purchaser/noteAndViewpoint/noteAndViewpoint?id="         //研选专栏详情
-	WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL = "pages-purchaser/toExamine/toExamine?isMessage=模板&id="          //研选专栏审核详情页面
-	WX_MSG_PATH_YX_SPECIAL_CENTER        = "pages-purchaser/contentAllPage/contentAllPage?Status=4"        //研选专栏内容中心
-	WX_MSG_PATH_YX_COMMENT_DETAIL        = "pages-activity/generationAsk/generationAsk?id=1000413&type=文章" //研选报告留言详情
-	WX_MSG_PATH_YX_ACTIVITY_DETAIL       = "pages-activity/activityDetail/activityDetail?id="              //研选报告留言详情
-	WX_MSG_PATH_YX_SIGNUP_DETAIL         = "pages-message/activityTemplate/activityTemplate?id="           //研选报名详情
-	WX_MSG_PATH_YX_ARTICLE_DETAIL        = "pages-user/reportDetail/reportDetail?id="                      //研选纪要详情
+	WX_MSG_PATH_YX_SPECIAL_DETAIL        = "pages-purchaser/noteAndViewpoint/noteAndViewpoint?id="  //研选专栏详情
+	WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL = "pages-purchaser/toExamine/toExamine?isMessage=模板&id="   //研选专栏审核详情页面
+	WX_MSG_PATH_YX_SPECIAL_CENTER        = "pages-purchaser/contentAllPage/contentAllPage?Status=4" //研选专栏内容中心
+	WX_MSG_PATH_YX_COMMENT_DETAIL        = "pages-activity/generationAsk/generationAsk?id="         //研选报告留言详情
+	WX_MSG_PATH_YX_ACTIVITY_DETAIL       = "pages-activity/activityDetail/activityDetail?id="       //研选活动详情
+	WX_MSG_PATH_YX_SIGNUP_DETAIL         = "pages-message/activityTemplate/activityTemplate?id="    //研选报名详情
+	WX_MSG_PATH_YX_ARTICLE_DETAIL        = "pages-user/reportDetail/reportDetail?id="               //研选纪要详情
 )
 
 //2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=