Browse Source

微信模板消息推送

xingzai 3 years ago
parent
commit
7bc00bac1b

+ 5 - 4
controllers/activity.go

@@ -135,7 +135,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 
 	condition += ` AND art.publish_status = 1 `
 	if activeState != "" {
-		condition += ` AND art.active_state  IN (` + activeState + `)`
+		condition += ` AND art.active_state  IN (` + activeState + `)  ORDER BY art.active_state ASC`
 	}
 	total, err := models.GetActivityCount(condition, pars)
 	if err != nil {
@@ -143,9 +143,10 @@ func (this *ActivityCoAntroller) ActivityList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	if activeState == "2" || activeState == "3" || activeState == "2,3" {
-		condition += ` ORDER BY art.activity_time DESC `
-	}
+	condition += ` ORDER BY art.active_state ASC `
+	//if activeState == "2" || activeState == "3" || activeState == "2,3" {
+	//	condition += ` ORDER BY art.activity_time DESC `
+	//}
 	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
 	if errList != nil {
 		br.Msg = "获取失败"

+ 47 - 5
models/activity.go

@@ -192,7 +192,7 @@ func GetScheduleList(condition string, pars []interface{}, uid, startSize, pageS
 	o := orm.NewOrm()
 	sql := `SELECT art.*,( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ? AND s.is_cancel = 0 ) AS is_signup,
                      ( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND  s.is_cancel = 0  AND s.fail_type = 0 ) AS signup_num ,
-					 ( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.user_id = ? ) AS is_cancel_meeting_reminder
+					 ( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.is_cancel = 0 AND m.user_id = ? ) AS is_cancel_meeting_reminder
             FROM cygx_activity AS art
 			INNER JOIN cygx_my_schedule as my ON my.activity_id = art.activity_id 
             WHERE 1=1 AND my.user_id = ? `
@@ -254,7 +254,8 @@ func UpdateActivitySattusToComplete() (err error) {
 
 //活动详情
 type WxMsgCygxActivityList struct {
-	ActivityId              int    `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
+	Id                      int    `description:"报名ID"`
+	ActivityId              int    `description:"活动ID 等于0新增活动,大于0修改活动"`
 	ActivityTypeId          int    `description:"活动类型id"`
 	ActivityName            string `description:"活动名称"`
 	ActivityTypeName        string `description:"活动类型名称"`
@@ -279,10 +280,11 @@ type WxMsgCygxActivityList struct {
 	FailType                int    `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
 }
 
-//列表
+//列表 3o分钟
 func GetActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
+	s.id,
 	s.fail_type,
 	c.open_id,
 	a.*
@@ -296,8 +298,48 @@ WHERE
 	AND a.publish_status = 1 
 	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.activity_id`
+	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
 }
+
+//列表 15分钟提醒
+func GetActivitySendMsgListAllMeeting(endDate string) (items []*WxMsgCygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	m.id,
+	c.open_id,
+	a.* 
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_meeting_reminder AS m ON m.activity_id = a.activity_id
+	INNER JOIN user_record AS c ON c.bind_account = m.mobile 
+WHERE
+	1 = 1 
+	AND m.is_send_wx_msg = 0 
+	AND a.publish_status = 1 
+	AND a.activity_time <= ? AND a.activity_time >= NOW() 
+	AND m.is_cancel = 0 
+	AND (
+	a.activity_type_id IN ( 1, 2 ) 
+	OR ( a.activity_type_id = 3 AND a.is_limit_people = 0 ))
+	GROUP BY m.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
+}
+
+//修改是否推送消息状态
+func UPdateSendedMsgMeetingStatus(signupIds string) (err error) {
+	sql := ` UPDATE cygx_activity_meeting_reminder SET  is_send_wx_msg= 1  WHERE id IN(` + signupIds + `)`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).Exec()
+	return
+}

+ 2 - 2
models/activity_meeting_reminder.go

@@ -95,7 +95,7 @@ func GetActivityMeetingReminderCount(uid, activityId int) (count int, err error)
 	return
 }
 
-//取消报名
+//取消会议提醒
 func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
 	o := orm.NewOrm()
 	o.Begin()
@@ -109,7 +109,7 @@ func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId in
 	}()
 	//判断是否删除我的日程
 	var count int
-	sql := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE user_id=? AND activity_id=? `
+	sql := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
 	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
 	if err != nil {
 		return

+ 4 - 2
models/chart_permission.go

@@ -63,10 +63,12 @@ func GetUserCompanyPermission(companyId int) (items []*ActivityChartPermission,
 			WHERE  a.company_id=?
 			AND a.product_id=2
 			AND c.is_suspend=0
-            AND b.is_report=1
+            AND b.cygx_auth=1
             AND b.is_other=0
 			AND c.status IN('正式','试用','永续')
-			AND a.status IN('正式','试用','永续') `
+			AND a.status IN('正式','试用','永续') 
+			AND b.chart_permission_id IN (19,20,21,22,23) 
+			ORDER BY b.sort ASC `
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, companyId).QueryRows(&items)
 	return

+ 36 - 18
services/activity.go

@@ -3,6 +3,9 @@ package services
 import (
 	"fmt"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -37,13 +40,14 @@ func SendActivityBeginMsg() (err error) {
 	if len(listActivity) == 0 {
 		return
 	}
-	var remark = "如报名成功,点击详情可获取专属参会二维码凭证,并在签到时出示。如有住宿,请携带您的有效身份证件。期待与您见面!"
+	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 = "oN0jD1QwcA2uRD0BC4mH5zJMo0eg"
-		//openIdItem.OpenId = v.OpenId
+		openIdItem.OpenId = v.OpenId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		if v.FailType == 0 {
@@ -58,6 +62,16 @@ func SendActivityBeginMsg() (err error) {
 		first = "您有一场【" + v.ActivityTypeName + "】将在30分钟后开始"
 		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTime, v.Address, remark, openIdList)
 	}
+	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("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+		utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+	}
 	return
 }
 
@@ -69,7 +83,7 @@ func SendActivityBeginMsgMeeting() (err error) {
 		}
 	}()
 	endDate := time.Now().Add(+time.Minute * 15).Format("2006-01-02 15:04:05")
-	listActivity, err := models.GetActivitySendMsgListAll(endDate)
+	listActivity, err := models.GetActivitySendMsgListAllMeeting(endDate)
 	fmt.Println(len(listActivity))
 	if err != nil {
 		fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
@@ -78,26 +92,30 @@ func SendActivityBeginMsgMeeting() (err error) {
 	if len(listActivity) == 0 {
 		return
 	}
-	var remark = "如报名成功,点击详情可获取专属参会二维码凭证,并在签到时出示。如有住宿,请携带您的有效身份证件。期待与您见面!"
+	var signupIds string
+	var remark = "点击查看活动详情"
 	for _, v := range listActivity {
+		signupIds += strconv.Itoa(v.Id) + ","
 		var reserveResults string
 		var first string
 		openIdItem := new(models.OpenIdList)
-		openIdItem.OpenId = "oN0jD1QwcA2uRD0BC4mH5zJMo0eg"
-		//openIdItem.OpenId = v.OpenId
+		//openIdItem.OpenId = "oN0jD1QwcA2uRD0BC4mH5zJMo0eg"
+		openIdItem.OpenId = v.OpenId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
-		if v.FailType == 0 {
-			reserveResults = "成功"
-		} else if v.FailType == 1 {
-			reserveResults = "失败(总人数已满)"
-		} else if v.FailType == 2 {
-			reserveResults = "失败(单机构超限制)"
-		} else if v.FailType == 3 {
-			reserveResults = "失败(爽约次数超限)"
-		}
-		first = "您有一场【" + v.ActivityTypeName + "】将在30分钟后开始"
-		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTime, v.Address, remark, openIdList)
+		reserveResults = "--"
+		first = "您有一场【" + v.ActivityTypeName + "】将在15分钟后开始"
+		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTime, "--", remark, openIdList)
+	}
+	if len(signupIds) == 0 {
+		return
+	}
+	signupIds = strings.TrimRight(signupIds, ",")
+	err = models.UPdateSendedMsgMeetingStatus(signupIds)
+	if err != nil {
+		var msg string
+		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+		utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 	}
 	return
 }

+ 4 - 1
services/task.go

@@ -40,7 +40,10 @@ func Task() {
 
 	//UpdateIndustrialManagementSubjectNnames()
 
-	//SendActivityBeginMsg()
+	sendActivityBeginMsg := toolbox.NewTask("sendActivityBeginMsg", "0 */10 * * * *", SendActivityBeginMsg) //会议前30分钟的提醒
+	toolbox.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
+	sendActivityBeginMsgMeeting := toolbox.NewTask("sendActivityBeginMsgMeeting", "0 */5 * * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
+	toolbox.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
 
 	toolbox.StartTask()