Browse Source

模板消息

xingzai 2 years ago
parent
commit
b6217fcf45
5 changed files with 209 additions and 67 deletions
  1. 1 1
      controllers/activity.go
  2. 8 0
      models/activity_special.go
  3. 24 0
      models/wx_template_msg.go
  4. 170 66
      services/activity_special.go
  5. 6 0
      services/task.go

+ 1 - 1
controllers/activity.go

@@ -3716,7 +3716,7 @@ func (this *ActivityCoAntroller) SpecialSignupAdd() {
 				}
 			}
 			//感兴趣人数到达10人时,模板消息发送给活动负责人
-			if len(actList) == 2 {
+			if len(actList) == 10 {
 				go services.SendWxMsgActivitySpecial10(activityInfo)
 			}
 

+ 8 - 0
models/activity_special.go

@@ -63,3 +63,11 @@ func GetActivitySpecialListAll(condition string, pars []interface{}, startSize,
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+//修改发布状态
+func UpdateActivitySpecialPublishStatus(publishStatus, activityId int) (err error) {
+	sql := ` UPDATE cygx_activity_special SET  publish_status= ?  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, publishStatus, activityId).Exec()
+	return
+}

+ 24 - 0
models/wx_template_msg.go

@@ -44,3 +44,27 @@ func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
 	return
 }
+
+type AdminOpenIdList struct {
+	OpenId    string `description:"OpenId"`
+	UserId    int    `description:"UserId"`
+	Mobile    string `description:"手机号"`
+	CompanyId int    `description:"手机号"`
+}
+
+// GetAdminOpendidByCompany 通过用户公司ID获取对应销售的openid
+func GetAdminOpendidByCompany(condition string, pars []interface{}) (list []*AdminOpenIdList, err error) {
+	sql := `SELECT
+			cr.open_id,a.mobile,p.company_id,cr.union_id
+		FROM
+			company_product AS p
+			INNER JOIN admin AS a ON a.admin_id = p.seller_id 
+			INNER JOIN user_record  as c ON c.bind_account = a.mobile
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
+		WHERE
+			1 = 1 
+			AND p.product_id = 2
+			AND create_platform = 4 ` + condition
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 170 - 66
services/activity_special.go

@@ -711,12 +711,8 @@ func SendWxMsgActivitySpecial10(activityInfo *models.CygxActivitySpecialDetail)
 	return
 }
 
-func init() {
-	SendWxMsgActivitySpecialTwoDays()
-}
-
 //SendWxMsgActivitySpecialTwoDays  活动开始前两天08:00,提醒报名客户 \提醒报名客户的对口销售
-func SendWxMsgActivitySpecialTwoDays() (err error) {
+func SendWxMsgActivitySpecialTwoDays(cont context.Context) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
@@ -726,12 +722,12 @@ func SendWxMsgActivitySpecialTwoDays() (err error) {
 			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
 		}
 	}()
-	twoDayTime := time.Now().AddDate(0, 0, 10)
+	twoDayTime := time.Now().AddDate(0, 0, 2)
 	startTime := twoDayTime.Format(utils.FormatDate) + " 00:00:00"
 	endTime := twoDayTime.Format(utils.FormatDate) + " 23:59:59"
 	var condition string
 	var pars []interface{}
-	condition = ` AND days >0  AND activity_time BETWEEN ? AND  ? `
+	condition = ` AND  days >0  AND activity_time BETWEEN ? AND  ? `
 	pars = append(pars, startTime, endTime)
 	listActivitySpecial, e := models.GetActivitySpecialListAll(condition, pars, 0, 1000)
 	if e != nil {
@@ -741,19 +737,12 @@ func SendWxMsgActivitySpecialTwoDays() (err error) {
 	if len(listActivitySpecial) == 0 {
 		return
 	}
-	type WxMapData struct {
-		First    string `description:"标题"`
-		Keyword1 string `description:"Keyword "`
-		Keyword2 string `description:"Keyword "`
-		Keyword3 string `description:"Keyword "`
-		Keyword4 string `description:"Keyword "`
-		Remark   string `description:"Remark "`
-	}
+
 	var activityIds []int
 
 	for _, v := range listActivitySpecial {
 		activityIds = append(activityIds, v.ActivityId)
-		condition = ` AND activity_id = ` + strconv.Itoa(v.ActivityId)
+		condition = `  AND is_cancel = 0 AND activity_id = ` + strconv.Itoa(v.ActivityId)
 		pars = make([]interface{}, 0)
 		listSpecialTrip, e := models.GetCygxActivitySpecialTripList(condition, pars)
 		if e != nil {
@@ -767,10 +756,9 @@ func SendWxMsgActivitySpecialTwoDays() (err error) {
 		var companyIds []int
 		for _, vT := range listSpecialTrip {
 			mobile += "'" + vT.Mobile + "',"
-			companyIds = append(companyIds,v.)
+			companyIds = append(companyIds, vT.CompanyId)
 		}
 		mobile = strings.TrimRight(mobile, ",")
-		mobile = "15557270714"
 		openIdList, e := models.GetWxOpenIdByMobileList(mobile)
 		if e != nil {
 			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
@@ -786,53 +774,169 @@ func SendWxMsgActivitySpecialTwoDays() (err error) {
 		}
 		remark := "点击查看活动详情"
 		SendWxMsgWithFrequency(first, keyword1, keyword2, keyword3, keyword4, remark, openIdList, v.ActivityId)
-		//openIdArr := make([]string, 0)
-		//for _, v := range openIdList {
-		//	openIdArr = append(openIdArr, v.OpenId)
-		//}
-		//redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(v.ActivityId)
-		//sendInfo := new(SendWxTemplate)
-		//sendInfo.First = first
-		//sendInfo.Keyword1 = keyword1
-		//sendInfo.Keyword2 = keyword2
-		//sendInfo.Keyword3 = keyword3
-		//sendInfo.Keyword4 = keyword4
-		//sendInfo.Remark = "点击查看活动详情"
-		//sendInfo.TemplateId = utils.WxMsgTemplateIdActivityApplyXzs
-		//sendInfo.RedirectUrl = redirectUrl
-		//sendInfo.RedirectTarget = 3
-		//sendInfo.Resource = strconv.Itoa(v.ActivityId)
-		//sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
-		//sendInfo.OpenIdArr = openIdArr
-		//fmt.Println(sendInfo)
-		////return
-		//err = PublicSendTemplateMsg(sendInfo)
-		//if err != nil {
-		//	return
-		//}
-		fmt.Println(mobile)
-	}
-
-	//pars = make([]interface{}, 0)
-	//if len(activityIds) > 0 {
-	//	condition = ` AND activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
-	//	pars = append(pars, activityIds)
-	//} else {
-	//	return
-	//}
-	//listSpecialTrip, e := models.GetCygxActivitySpecialTripList(condition, pars)
-	//if e != nil {
-	//	err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
-	//	return
-	//}
-	//if len(listSpecialTrip) == 0 {
-	//	return
-	//}
-	//for _, v := range listSpecialTrip {
-	//	fmt.Println(v)
-	//}
-	fmt.Println(startTime)
-	fmt.Println(endTime)
-	fmt.Println(twoDayTime)
+
+		//活动开始前两天08:00,提醒报名客户的对口销售
+		companyIdsLen := len(companyIds)
+		if companyIdsLen == 0 {
+			continue
+		} else {
+			pars = make([]interface{}, 0)
+			condition = ` AND p.company_id IN (` + utils.GetOrmInReplace(companyIdsLen) + `)  GROUP BY  p.company_id  `
+			pars = append(pars, companyIds)
+
+			listSeller, e := models.GetAdminOpendidByCompany(condition, pars)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetAdminOpendidByCompany, Err: " + e.Error())
+				return
+			}
+			if len(listSeller) == 0 {
+				continue
+			}
+			type SllerData struct {
+				Openid  string `description:"Openid"`
+				Keyword string `description:"Keyword "`
+			}
+			mapSller := make(map[string]string)
+			mapSllerOpenid := make(map[string]string)
+			for _, vS := range listSeller {
+				for _, vT := range listSpecialTrip {
+					if vT.CompanyId == vS.CompanyId {
+						mapSller[vS.Mobile] += "【" + vT.RealName + "--" + vT.CompanyName + "】"
+						mapSllerOpenid[vS.Mobile] = vS.OpenId
+					}
+				}
+			}
+			for k, vM := range mapSller {
+				first = "【" + v.ResearchTheme + "】专项调研将在两天后进行,请及时提醒您的报名客户"
+				keyword2 = vM
+				openIdList = make([]*models.OpenIdList, 0)
+				openIdList = append(openIdList, &models.OpenIdList{OpenId: mapSllerOpenid[k]})
+				SendWxMsgWithFrequency(first, keyword1, keyword2, keyword3, keyword4, remark, openIdList, v.ActivityId)
+			}
+		}
+	}
+	return
+}
+
+//SendWxMsgActivitySpecialCancel  线下活动前4天08:00报名人数不足7人,线上活动前3天08:00报名人数不足10人,活动自动取消发布,并推送模板消息至报名客户及对口销售
+func SendWxMsgActivitySpecialCancel(cont context.Context) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			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(" 活动开始前两天08:00,提醒报名客户、提醒报名客户的对口销售消息发送失败"), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	dayTime3 := time.Now().AddDate(0, 0, 3)
+	startTime := dayTime3.Format(utils.FormatDate) + " 00:00:00"
+	endTime := dayTime3.Format(utils.FormatDate) + " 23:59:59"
+
+	dayTime4 := time.Now().AddDate(0, 0, 4)
+	startTime4 := dayTime4.Format(utils.FormatDate) + " 00:00:00"
+	endTime4 := dayTime4.Format(utils.FormatDate) + " 23:59:59"
+	var condition string
+	var pars []interface{}
+	condition = ` AND days >0  AND activity_time BETWEEN ? AND  ? AND special_type= 1 `
+	pars = append(pars, startTime, endTime)
+
+	condition += ` OR ( days >0  AND activity_time BETWEEN ? AND  ? AND special_type= 2 ) `
+	pars = append(pars, startTime4, endTime4)
+
+	listActivitySpecial, e := models.GetActivitySpecialListAll(condition, pars, 0, 1000)
+	if e != nil {
+		err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+		return
+	}
+	if len(listActivitySpecial) == 0 {
+		return
+	}
+
+	var activityIds []int
+
+	for _, v := range listActivitySpecial {
+		activityIds = append(activityIds, v.ActivityId)
+		condition = ` AND is_cancel = 0  AND activity_id = ` + strconv.Itoa(v.ActivityId)
+		pars = make([]interface{}, 0)
+		listSpecialTrip, e := models.GetCygxActivitySpecialTripList(condition, pars)
+		if e != nil {
+			err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
+			return
+		}
+		if v.SpecialType == 1 {
+			if len(listSpecialTrip) >= 10 {
+				continue
+			}
+		}
+		if v.SpecialType == 2 {
+			if len(listSpecialTrip) >= 7 {
+				continue
+			}
+		}
+		e = models.UpdateActivitySpecialPublishStatus(0, v.ActivityId)
+		if e != nil {
+			err = errors.New("UpdateActivitySpecialPublishStatus,自动取消专项调研日程失败 Err: " + e.Error() + strconv.Itoa(v.ActivityId))
+			return
+		}
+		if len(listSpecialTrip) < 0 {
+			return
+		}
+		var mobile string
+		var companyIds []int
+		for _, vT := range listSpecialTrip {
+			mobile += "'" + vT.Mobile + "',"
+			companyIds = append(companyIds, vT.CompanyId)
+		}
+		mobile = strings.TrimRight(mobile, ",")
+		openIdList, e := models.GetWxOpenIdByMobileList(mobile)
+		if e != nil {
+			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			return
+		}
+		first := "【" + v.ResearchTheme + "】专项调研因专家安排变动,本次调研活动延期举办,具体时间另行通知"
+		keyword1 := v.ResearchTheme
+		keyword2 := "已取消"
+		keyword3 := ""
+		keyword4 := ""
+		remark := ""
+
+		openIdArr := make([]string, 0)
+		for _, vOpenid := range openIdList {
+			openIdArr = append(openIdArr, vOpenid.OpenId)
+		}
+		companyIdsLen := len(companyIds)
+		if len(companyIds) > 0 {
+			pars = make([]interface{}, 0)
+			condition = ` AND p.company_id IN (` + utils.GetOrmInReplace(companyIdsLen) + `)  GROUP BY  p.company_id  `
+			pars = append(pars, companyIds)
+			listSeller, e := models.GetAdminOpendidByCompany(condition, pars)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetAdminOpendidByCompany, Err: " + e.Error())
+				return
+			}
+			if len(listSeller) > 0 {
+				for _, vOpenid := range listSeller {
+					openIdArr = append(openIdArr, vOpenid.OpenId)
+				}
+			}
+		}
+		redirectUrl := ""
+		sendInfo := new(SendWxTemplate)
+		sendInfo.First = first
+		sendInfo.Keyword1 = keyword1
+		sendInfo.Keyword2 = keyword2
+		sendInfo.Keyword3 = keyword3
+		sendInfo.Keyword4 = keyword4
+		sendInfo.Remark = remark
+		sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
+		sendInfo.RedirectUrl = redirectUrl
+		sendInfo.RedirectTarget = 3
+		sendInfo.Resource = strconv.Itoa(v.ActivityId)
+		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+		sendInfo.OpenIdArr = openIdArr
+		fmt.Println(sendInfo)
+		err = PublicSendTemplateMsg(sendInfo)
+	}
 	return
 }

+ 6 - 0
services/task.go

@@ -96,6 +96,12 @@ func Task() {
 		addctivitySignupDetail := task.NewTask("addctivitySignupDetail", "0 0 23 * * *", AddctivitySignupDetail) // 获取当天已结束的活动的报名信息。添加到到会详情
 		task.AddTask("addctivitySignupDetail", addctivitySignupDetail)
 
+		sendWxMsgActivitySpecialTwoDays := task.NewTask("sendWxMsgActivitySpecialTwoDays", "0 0 8 * * *", SendWxMsgActivitySpecialTwoDays)
+		task.AddTask("sendWxMsgActivitySpecialTwoDays", sendWxMsgActivitySpecialTwoDays) //活动开始前两天08:00,提醒报名客户 \提醒报名客户的对口销售
+
+		sendWxMsgActivitySpecialCancel := task.NewTask("sendWxMsgActivitySpecialCancel", "0 0 8 * * *", SendWxMsgActivitySpecialCancel)
+		task.AddTask("sendWxMsgActivitySpecialCancel", sendWxMsgActivitySpecialCancel) // 线下活动前4天08:00报名人数不足7人,线上活动前3天08:00报名人数不足10人,活动自动取消发布,并推送模板消息至报名客户及对口销售
+
 	}
 	if utils.RunMode != "release" {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章