Browse Source

模版推送消息

kobe6258 7 months ago
parent
commit
df26a72ff3
6 changed files with 109 additions and 33 deletions
  1. 68 18
      controllers/message.go
  2. 7 0
      models/chart_permission.go
  3. 2 2
      models/media.go
  4. 19 11
      models/report.go
  5. 1 1
      routers/commentsRouter.go
  6. 12 1
      services/template_msg.go

+ 68 - 18
controllers/message.go

@@ -11,6 +11,7 @@ import (
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"strconv"
 	"strings"
+	"time"
 )
 
 type MessageController struct {
@@ -352,17 +353,40 @@ func (this *MessageController) SendTemplateMsg() {
 			br.ErrMsg = "获取报告失败"
 			return
 		}
-		err = report.UpdateSendStatus()
+
+		switch report.Source {
+		case "ETA":
+			var classifyId int
+			var ids []int
+			var names []string
+			classifyId, err = models.GetETAReportIdByClassifyId(report.OrgId)
+			ids, err = models.GetByPermissionIdsByClassifyId(classifyId)
+			if err != nil {
+				br.Msg = "发送模版消息失败"
+				br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
+				return
+			}
+			names, err = models.GetPermissionNames(ids)
+			if err != nil {
+				br.Msg = "发送模版消息失败"
+				br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
+				return
+			}
+			sendData["keyword1"] = map[string]interface{}{"value": strings.Join(names, ","), "color": "#173177"}
+		case "HT":
+			sendData["keyword1"] = map[string]interface{}{"value": "ht", "color": "#173177"}
+		default:
+			sendData["keyword1"] = map[string]interface{}{"value": "", "color": "#173177"}
+		}
+		sendData["keyword2"] = map[string]interface{}{"value": report.Title, "color": "#173177"}
+		sendData["keyword3"] = map[string]interface{}{"value": report.PublishedTime, "color": "#173177"}
+		sendData["keyword4"] = map[string]interface{}{"value": report.Abstract, "color": "#173177"}
+		err = report.UpdateSendStatus(models.SEND)
 		if err != nil {
 			br.Msg = "发送模版消息失败"
 			br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
 			return
 		}
-		models.
-		sendData["keyword1"] = map[string]interface{}{"value": report., "color": "#173177"}
-		sendData["keyword2"] = map[string]interface{}{"value": report.Title, "color": "#173177"}
-		sendData["keyword3"] = map[string]interface{}{"value": report.PublishedTime, "color": "#173177"}
-		sendData["keyword4"] = map[string]interface{}{"value": report.Abstract, "color": "#173177"}
 	}
 	if req.DataType == Audio {
 		var media *models.Media
@@ -372,15 +396,16 @@ func (this *MessageController) SendTemplateMsg() {
 			br.ErrMsg = "获取音频失败"
 			return
 		}
-		err = media.UpdateSendStatus()
+
+		sendData["keyword1"] = map[string]interface{}{"value": "线上音频", "color": "#173177"}
+		sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
+		sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
+		err = media.UpdateSendStatus(models.SEND)
 		if err != nil {
 			br.Msg = "发送模版消息失败"
 			br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
 			return
 		}
-		sendData["keyword1"] = map[string]interface{}{"value": "线上音频", "color": "#173177"}
-		sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
-		sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime, "color": "#173177"}
 	}
 	if req.DataType == Video {
 		var media *models.Media
@@ -390,15 +415,16 @@ func (this *MessageController) SendTemplateMsg() {
 			br.ErrMsg = "获取音频失败"
 			return
 		}
-		err = media.UpdateSendStatus()
+
+		sendData["keyword1"] = map[string]interface{}{"value": "线上视频", "color": "#173177"}
+		sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
+		sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
+		err = media.UpdateSendStatus(models.SEND)
 		if err != nil {
 			br.Msg = "发送模版消息失败"
 			br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
 			return
 		}
-		sendData["keyword1"] = map[string]interface{}{"value": "线上视频", "color": "#173177"}
-		sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
-		sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime, "color": "#173177"}
 	}
 	users, err := models.GetTemplateUserList()
 	if err != nil {
@@ -414,14 +440,38 @@ func (this *MessageController) SendTemplateMsg() {
 		}
 		openIds = append(openIds, openId)
 	}
-	services.SendMultiTemplateMsg(sendData, openIds, req.DataId, req.DataType)
+	err = services.SendMultiTemplateMsg(sendData, openIds, req.DataId, req.DataType)
 	if err != nil {
-		br.Msg = "获取视频列表失败"
-		br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
+		if req.DataType == Report {
+			var report *models.Report
+			report, err = models.GetReportById(req.DataId)
+			if err != nil {
+				return
+			}
+			_ = report.UpdateSendStatus(models.UNSEND)
+		}
+		if req.DataType == Audio {
+			var media *models.Media
+			media, err = models.GetMediaById(models.Audio, req.DataId)
+			if err != nil {
+				return
+			}
+			_ = media.UpdateSendStatus(models.UNSEND)
+		}
+		if req.DataType == Video {
+			var media *models.Media
+			media, err = models.GetMediaById(models.Video, req.DataId)
+			if err != nil {
+				return
+			}
+			_ = media.UpdateSendStatus(models.SEND)
+		}
+		br.Msg = "发送模板消息失败"
+		br.ErrMsg = "发送模板消息失败,Err:" + err.Error()
 		return
 	}
 	br.Ret = 200
 	br.Success = true
-	br.Data = resp
+	br.Data = nil
 	br.Msg = "发送成功"
 }

+ 7 - 0
models/chart_permission.go

@@ -102,6 +102,13 @@ func GetChartPermissionListByIds(chartPermissionIds []int) (items []*ChartPermis
 	return
 }
 
+func GetByPermissionIdsByClassifyId(classify int) (permissionIds []int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := "select distinct chart_permission_id from chart_permission_search_key_word_mapping where classify_id =?"
+	_, err = o.Raw(sql, classify).QueryRows(&permissionIds)
+	return
+}
+
 func GetChartPermissionList() (items []*ChartPermission, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM chart_permission WHERE enabled=1 AND product_id=1 ORDER BY sort, chart_permission_id ASC`

+ 2 - 2
models/media.go

@@ -184,9 +184,9 @@ func GetMediaCountByCondition(media MediaType, condition string, pars []interfac
 	err = o.Raw(sql, media, pars).QueryRow(&count)
 	return
 }
-func (m *Media) UpdateSendStatus() (err error) {
+func (m *Media) UpdateSendStatus(statusType SendStatus) (err error) {
 	o := orm.NewOrm()
-	m.SendStatus = SEND
+	m.SendStatus = statusType
 	_, err = o.Update(m, "send_status")
 	return
 }

+ 19 - 11
models/report.go

@@ -21,8 +21,8 @@ const (
 )
 
 type Report struct {
-	ID            int
-	OrgID         int
+	Id            int
+	OrgId         int
 	Source        ReportSource
 	Title         string
 	Abstract      string
@@ -36,8 +36,8 @@ type Report struct {
 }
 
 type ReportView struct {
-	ID            int
-	OrgID         int
+	Id            int
+	OrgId         int
 	Source        ReportSource
 	Title         string
 	Abstract      string
@@ -49,8 +49,8 @@ type ReportView struct {
 
 func (r *Report) ToView() (item *ReportView) {
 	item = &ReportView{
-		ID:            r.ID,
-		OrgID:         r.OrgID,
+		Id:            r.Id,
+		OrgId:         r.OrgId,
 		Source:        r.Source,
 		Title:         r.Title,
 		Abstract:      r.Abstract,
@@ -62,15 +62,16 @@ func (r *Report) ToView() (item *ReportView) {
 	return
 
 }
-func (r *Report) UpdateSendStatus() (err error) {
+
+func (r *Report) TableName() string {
+	return "reports"
+}
+func (r *Report) UpdateSendStatus(status SendStatus) (err error) {
 	o := orm.NewOrm()
-	r.SendStatus = SEND
+	r.SendStatus = status
 	_, err = o.Update(r, "send_status")
 	return
 }
-func (r *Report) tableName() string {
-	return "reports"
-}
 func GetReportCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT COUNT(*) AS count FROM reports WHERE 1=1 `
@@ -111,3 +112,10 @@ func GetETAReportIdsByCondition(condition string, pars []interface{}) (ids []int
 	_, err = o.Raw(sql, pars).QueryRows(&ids)
 	return
 }
+
+func GetETAReportIdByClassifyId(id int) (classifyId int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT COALESCE(NULLIF(classify_id_third,0),NULLIF(classify_id_second,0),classify_id_first) classify_id FROM report WHERE id=? `
+	err = o.Raw(sql, id).QueryRow(&classifyId)
+	return
+}

+ 1 - 1
routers/commentsRouter.go

@@ -265,7 +265,7 @@ func init() {
         beego.ControllerComments{
             Method: "SendTemplateMsg",
             Router: `/sendTemplateMsg`,
-            AllowHTTPMethods: []string{"get"},
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})

+ 12 - 1
services/template_msg.go

@@ -143,11 +143,22 @@ func SendMultiTemplateMsg(sendData map[string]interface{}, items []*OpenIdList,
 		return
 	}
 	sendMap := make(map[string]interface{})
+	var path string
+	switch sendType {
+	case "report":
+		path = "/pages-report/reportDetail/index?id=%d"
+	case "audio":
+		path = "/pages-media/audioDetail/index?id=%d"
+	case "video":
+		path = "/pages-media/videoDetail/index?id=%d"
+	default:
+		return errors.New("非法的消息类型")
+	}
 	for _, item := range items {
 		sendMap["template_id"] = utils.TEMPLATE_ID_BY_PRODUCT
 		sendMap["miniprogram"] = map[string]interface{}{
 			"appid":    utils.HT_MINI_APPID,
-			"pagepath": fmt.Sprintf("pages-report/reportDetail/index?id=%d", Id),
+			"pagepath": fmt.Sprintf(path, Id),
 		}
 		sendMap["touser"] = item.OpenId
 		sendMap["data"] = sendData