kobe6258 8 月之前
父节点
当前提交
35bdbebd75

+ 3 - 3
controllers/audio.go

@@ -185,7 +185,7 @@ func (this *AudioController) AddAudio() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsAddOrEditMedia("media_index", docId, audio)
+		err = elastic.EsAddOrEditMedia(utils.MEDIA_INDEX, docId, audio)
 		if err != nil {
 			utils.FileLog.Info("音频记录es新增失败,Err:" + err.Error())
 			return
@@ -267,7 +267,7 @@ func (this *AudioController) EditAudio() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsAddOrEditMedia("media_index", docId, audio)
+		err = elastic.EsAddOrEditMedia(utils.MEDIA_INDEX, docId, audio)
 		if err != nil {
 			utils.FileLog.Info("音频记录es更新失败,Err:" + err.Error())
 			return
@@ -318,7 +318,7 @@ func (this *AudioController) DeleteAudio() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsDeleteData("media_index", docId)
+		err = elastic.EsDeleteData(utils.MEDIA_INDEX, docId)
 		if err != nil {
 			utils.FileLog.Info("音频记录es删除失败,Err:" + err.Error())
 			return

+ 83 - 59
controllers/message.go

@@ -1,9 +1,13 @@
 package controllers
 
 import (
+	"encoding/json"
 	"eta/eta_mini_crm_ht/models"
+	"eta/eta_mini_crm_ht/models/request"
 	"eta/eta_mini_crm_ht/models/response"
+	"eta/eta_mini_crm_ht/services"
 	"eta/eta_mini_crm_ht/utils"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"strconv"
 	"strings"
@@ -307,6 +311,12 @@ func (this *MessageController) VideoList() {
 	br.Msg = "获取成功"
 }
 
+const (
+	Report string = "report"
+	Audio  string = "audio"
+	Video  string = "video"
+)
+
 // SendTemplateMsg
 // @Title 研报列表
 // @Description pdf研报列表
@@ -316,86 +326,100 @@ func (this *MessageController) VideoList() {
 // @Param   KeyWord   query   string  true       "报告标题/创建人"
 // @Param   SortType   query   string  true       "排序方式"
 // @Success 200 {object} models.ReportAuthorResp
-// @router /sendTemplateMsg [get]
+// @router /sendTemplateMsg [post]
 func (this *MessageController) SendTemplateMsg() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	pageSize, _ := this.GetInt("PageSize")
-	currentIndex, _ := this.GetInt("CurrentIndex")
-	permissionIds := this.GetString("PermissionIds")
-	analystIds := this.GetString("AnalystIds")
-	sortType := this.GetString("SortType")
-	KeyWord := this.GetString("KeyWord")
-	var permissionCondition string
-	var condition string
-	var pars []interface{}
-
-	if pageSize <= 0 {
-		pageSize = utils.PageSize20
-	}
-	if currentIndex <= 0 {
-		currentIndex = 1
+	var req request.WxMessageReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if req.DataId <= 0 {
+		br.Msg = "DataId为空"
+		return
 	}
-	if KeyWord != "" {
-		condition += " AND media_name like '%" + KeyWord + "%'"
+	if req.DataType == "" {
+		br.Msg = "DataType为空"
+		return
 	}
-	var permissionPars []interface{}
-	if permissionIds != "" {
-		permissionArr := strings.Split(permissionIds, ",")
-		for _, permissionId := range permissionArr {
-			perId, _ := strconv.Atoi(permissionId)
-			permissionPars = append(permissionPars, perId)
+	sendData := make(map[string]interface{})
+	if req.DataType == Report {
+		var report *models.Report
+		report, err = models.GetReportById(req.DataId)
+		if err != nil {
+			br.Msg = "发送模版消息失败"
+			br.ErrMsg = "获取报告失败"
+			return
 		}
-		permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
-		ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
+		err = report.UpdateSendStatus()
 		if err != nil {
-			condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
-			pars = append(pars, ids)
+			br.Msg = "发送模版消息失败"
+			br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
+			return
 		}
-	}
-
-	if analystIds != "" {
-		analystIdArr := strings.Split(analystIds, ",")
-		var authorIds []int
-		for _, analystId := range analystIdArr {
-			id, _ := strconv.Atoi(analystId)
-			authorIds = append(authorIds, id)
+		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
+		media, err = models.GetMediaById(models.Audio, req.DataId)
+		if err != nil {
+			br.Msg = "发送模版消息失败"
+			br.ErrMsg = "获取音频失败"
+			return
 		}
-		condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
-		pars = append(pars, authorIds)
+		err = media.UpdateSendStatus()
+		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"}
 	}
-	sortCondition := " ORDER BY published_time "
-	if sortType == "" {
-		sortType = "DESC"
+	if req.DataType == Video {
+		var media *models.Media
+		media, err = models.GetMediaById(models.Video, req.DataId)
+		if err != nil {
+			br.Msg = "发送模版消息失败"
+			br.ErrMsg = "获取音频失败"
+			return
+		}
+		err = media.UpdateSendStatus()
+		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"}
 	}
-	sortCondition = sortCondition + sortType
-	total, err := models.GetMediaCountByCondition(models.Video, condition, pars)
+	users, err := models.GetTemplateUserList()
 	if err != nil {
-		br.Msg = "获取视频列表失败"
-		br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
+		br.Msg = "发送模版消息失败"
+		br.ErrMsg = "获取用户OPENID失败,Err:" + err.Error()
 		return
 	}
-
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	List, err := models.GetMediaByCondition(models.Video, condition, sortCondition, pars, startSize, pageSize)
+	var openIds []*services.OpenIdList
+	for _, user := range users {
+		openId := &services.OpenIdList{
+			OpenId: user.OpenId,
+			UserId: user.Id,
+		}
+		openIds = append(openIds, openId)
+	}
+	services.SendMultiTemplateMsg(sendData, openIds, req.DataId, req.DataType)
 	if err != nil {
 		br.Msg = "获取视频列表失败"
-		br.ErrMsg = "获取视频列表失败,Err:" + err.Error()
+		br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
 		return
 	}
-	var reportViewList []*models.MessageMedia
-	for _, report := range List {
-		reportView := report.ToMessageView()
-		reportViewList = append(reportViewList, reportView)
-	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(response.MessageMediaListResp)
-	resp.List = reportViewList
-	resp.Paging = page
-
 	br.Ret = 200
 	br.Success = true
 	br.Data = resp

+ 11 - 11
controllers/video.go

@@ -131,14 +131,14 @@ func (this *VideoController) AddVideo() {
 		this.ServeJSON()
 	}()
 
-	var req request.AudioReq
+	var req request.VideoReq
 	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
 		br.Msg = "参数解析失败"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
 
-	if req.AudioName == "" {
+	if req.VideoName == "" {
 		br.Msg = "视频名称为空"
 		return
 	}
@@ -187,7 +187,7 @@ func (this *VideoController) AddVideo() {
 		MediaType:             models.Video,
 		Src:                   req.SrcUrl,
 		CoverSrc:              coverSrc,
-		MediaName:             req.AudioName,
+		MediaName:             req.VideoName,
 		SourceType:            "mp4",
 		MediaPlayMilliseconds: req.DurationMillisecond,
 		PermissionIds:         req.PermissionIds,
@@ -206,7 +206,7 @@ func (this *VideoController) AddVideo() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsAddOrEditMedia("media_index", docId, audio)
+		err = elastic.EsAddOrEditMedia(utils.MEDIA_INDEX, docId, audio)
 		if err != nil {
 			utils.FileLog.Info("音频记录es新增失败,Err:" + err.Error())
 			return
@@ -232,17 +232,17 @@ func (this *VideoController) EditVideo() {
 		this.ServeJSON()
 	}()
 
-	var req request.AudioReq
+	var req request.VideoReq
 	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
 		br.Msg = "参数解析失败"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	if req.AudioId <= 0 {
+	if req.VideoId <= 0 {
 		br.Msg = "视频ID为空"
 		return
 	}
-	if req.AudioName == "" {
+	if req.VideoName == "" {
 		br.Msg = "视频名称为空"
 		return
 	}
@@ -265,11 +265,11 @@ func (this *VideoController) EditVideo() {
 	var err error
 
 	audioEdit := &models.Media{
-		Id:                    req.AudioId,
+		Id:                    req.VideoId,
 		AuthorId:              req.AnalystId,
 		AuthorName:            req.AnalystName,
 		Src:                   req.SrcUrl,
-		MediaName:             req.AudioName,
+		MediaName:             req.VideoName,
 		MediaPlayMilliseconds: req.DurationMillisecond,
 		PermissionIds:         req.PermissionIds,
 	}
@@ -283,7 +283,7 @@ func (this *VideoController) EditVideo() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsAddOrEditMedia("media_index", docId, audio)
+		err = elastic.EsAddOrEditMedia(utils.MEDIA_INDEX, docId, audio)
 		if err != nil {
 			utils.FileLog.Info("视频记录es更新失败,Err:" + err.Error())
 			return
@@ -334,7 +334,7 @@ func (this *VideoController) DeleteVideo() {
 	// 添加es
 	go func(audio *models.ESMedia) {
 		docId := strconv.Itoa(audio.MediaId)
-		err = elastic.EsDeleteData("media_index", docId)
+		err = elastic.EsDeleteData(utils.MEDIA_INDEX, docId)
 		if err != nil {
 			utils.FileLog.Info("视频记录es删除失败,Err:" + err.Error())
 			return

+ 12 - 1
models/media.go

@@ -184,7 +184,18 @@ func GetMediaCountByCondition(media MediaType, condition string, pars []interfac
 	err = o.Raw(sql, media, pars).QueryRow(&count)
 	return
 }
-
+func (m *Media) UpdateSendStatus() (err error) {
+	o := orm.NewOrm()
+	m.SendStatus = SEND
+	_, err = o.Update(m, "send_status")
+	return
+}
+func GetMediaById(media MediaType, id int) (item *Media, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM media WHERE 1 = 1 AND media_type = ?  and id =? AND deleted=0`
+	err = o.Raw(sql, media, id).QueryRow(&item)
+	return
+}
 func GetMediaByCondition(media MediaType, condition string, sortCondition string, pars []interface{}, startPage, pageSize int) (items []*Media, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM media WHERE 1 = 1 AND media_type = ? AND deleted=0`

+ 13 - 1
models/report.go

@@ -62,7 +62,12 @@ func (r *Report) ToView() (item *ReportView) {
 	return
 
 }
-
+func (r *Report) UpdateSendStatus() (err error) {
+	o := orm.NewOrm()
+	r.SendStatus = SEND
+	_, err = o.Update(r, "send_status")
+	return
+}
 func (r *Report) tableName() string {
 	return "reports"
 }
@@ -76,6 +81,13 @@ func GetReportCountByCondition(condition string, pars []interface{}) (count int,
 	return
 }
 
+func GetReportById(id int) (items *Report, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM reports WHERE id =?`
+	err = o.Raw(sql, id).QueryRow(&items)
+	return
+}
+
 func GetReportByCondition(condition, sortCondition string, pars []interface{}, startPage, pageSize int) (items []*Report, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM reports WHERE 1=1 `

+ 9 - 0
models/request/media.go

@@ -9,6 +9,15 @@ type AudioReq struct {
 	PermissionIds       string
 	DurationMillisecond int
 }
+type VideoReq struct {
+	VideoId             int
+	VideoName           string
+	AnalystId           int
+	AnalystName         string
+	SrcUrl              string
+	PermissionIds       string
+	DurationMillisecond int
+}
 
 type ImageReq struct {
 	ImageId      int

+ 1 - 1
models/request/wx_message.go

@@ -1,6 +1,6 @@
 package request
 
-type WxMessage struct {
+type WxMessageReq struct {
 	DataId   int
 	DataType string
 }

+ 7 - 0
models/template_users.go

@@ -72,6 +72,13 @@ func GetPageTemplateUserList(condition string, pars []interface{}, sortStr strin
 
 	return
 }
+func GetTemplateUserList() (items []*TemplateUsers, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT * FROM template_users WHERE  is_deleted = 0 `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
 
 // ToItem
 // @Description: 转结构体返回

+ 1 - 1
models/user_template_record.go

@@ -11,7 +11,7 @@ type UserTemplateRecord struct {
 	CreateDate string `description:"创建日期"`
 	CreateTime string `description:"创建时间"`
 	SendStatus int    `description:"发送状态"`   // 1:发送成功,0:发送失败
-	SendType   int    `description:"发送消息类型"` // 1:报告模板消息
+	SendType   string `description:"发送消息类型"` // 1:报告模板消息
 }
 
 func (u *UserTemplateRecord) Insert() (err error) {

+ 4 - 5
services/template_msg.go

@@ -118,7 +118,7 @@ func (c *TemplateMsgSendClient) SendMsg() (sendRes *SendTemplateResponse, err er
 }
 
 // AddUserTemplateRecord 新增模板消息推送记录
-func AddUserTemplateRecord(userId, sendStatus, sendType int, openid, sendData, result string) (err error) {
+func AddUserTemplateRecord(userId, sendStatus int, sendType string, openid, sendData, result string) (err error) {
 	item := &models.UserTemplateRecord{
 		UserId:     userId,
 		OpenId:     openid,
@@ -134,7 +134,7 @@ func AddUserTemplateRecord(userId, sendStatus, sendType int, openid, sendData, r
 }
 
 // SendMultiTemplateMsg 推送模板消息至多个用户
-func SendMultiTemplateMsg(sendData map[string]interface{}, items []*OpenIdList, sendType, reportId int) (err error) {
+func SendMultiTemplateMsg(sendData map[string]interface{}, items []*OpenIdList, Id int, sendType string) (err error) {
 	ws := GetWxChat()
 	accessToken, err := ws.GetAccessToken()
 	if err != nil {
@@ -142,13 +142,12 @@ func SendMultiTemplateMsg(sendData map[string]interface{}, items []*OpenIdList,
 		// alarm_msg.SendAlarmMsg("获取微信token失败, Err:"+err.Error(), 1)
 		return
 	}
-
 	sendMap := make(map[string]interface{})
 	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", reportId),
+			"appid":    utils.HT_MINI_APPID,
+			"pagepath": fmt.Sprintf("pages-report/reportDetail/index?id=%d", Id),
 		}
 		sendMap["touser"] = item.OpenId
 		sendMap["data"] = sendData

+ 4 - 0
utils/config.go

@@ -68,10 +68,12 @@ var (
 	ES_URL      string // ES服务器地址
 	ES_USERNAME string // ES账号
 	ES_PASSWORD string // ES密码
+	MEDIA_INDEX string
 )
 var (
 	HT_WX_APP_SECRET       string
 	HT_WX_APPID            string
+	HT_MINI_APPID          string
 	TEMPLATE_ID_BY_PRODUCT string
 )
 
@@ -175,11 +177,13 @@ func init() {
 	// ES 索引
 	{
 		MINI_REPORT_INDEX_NAME = config["mini_report_index_name"]
+		MEDIA_INDEX = config["media_index"]
 	}
 	{
 		HT_WX_APPID = config["ht_wx_appid"]
 		HT_WX_APP_SECRET = config["ht_wx_app_secret"]
 		TEMPLATE_ID_BY_PRODUCT = config["template_id_by_product"]
+		HT_MINI_APPID = config["ht_mini_appid"]
 	}
 	// 初始化ES
 	initEs()