From 02f0e297e2947151fd3a6ec4a6f201f61f7c1800 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Fri, 18 Jun 2021 17:41:44 +0800 Subject: [PATCH] aa --- business/jxstore/knowledge/knowledge.go | 86 ++++++++++++++++++++----- business/jxutils/weixinmsg/weixinmsg.go | 4 ++ business/model/dao/knowledge.go | 15 +++++ controllers/knowledge_controller.go | 31 ++++++++- routers/commentsRouter_controllers.go | 9 +++ 5 files changed, 128 insertions(+), 17 deletions(-) diff --git a/business/jxstore/knowledge/knowledge.go b/business/jxstore/knowledge/knowledge.go index 76575bda7..d5abfbc39 100644 --- a/business/jxstore/knowledge/knowledge.go +++ b/business/jxstore/knowledge/knowledge.go @@ -1,10 +1,16 @@ package knowledge import ( + "fmt" + "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals/api" "mime/multipart" + "net/http" + "strings" ) func GetKnowledgeDepot(ctx *jxcontext.Context, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) { @@ -35,21 +41,69 @@ type SNSUploadImgResult struct { } func SNSUploadImg(ctx *jxcontext.Context, files []*multipart.FileHeader, isThumb bool) (snsUploadImgResult *SNSUploadImgResult, err error) { - //var ( - // data = []byte{} - // fileHeader = files[0] - // fileName = fileHeader.Filename - //) - //snsUploadImgResult = &SNSUploadImgResult{} - //file, err := fileHeader.Open() - //file.Read(data) - //file.Close() - ////如果不是缩略图,只会返url - ////如果是封面缩略图,则还会返mediaID - //if !isThumb { - // - //} else { - // - //} + var ( + data = []byte{} + fileHeader = files[0] + fileName = fileHeader.Filename + ) + snsUploadImgResult = &SNSUploadImgResult{} + file, err := fileHeader.Open() + file.Read(data) + file.Close() + if len(data) == 0 { + return snsUploadImgResult, fmt.Errorf("未读取到文件!") + } + //如果不是缩略图,只会返url + //如果是封面缩略图,则还会返mediaID + if !isThumb { + if url, err := api.WeixinAPI.CBUploadImg(data, fileName, http.DetectContentType(data)); err == nil && url != "" { + snsUploadImgResult.URL = url + } + } else { + if mediaID, url, err := api.WeixinAPI.CBUploadThumb(data, fileName, http.DetectContentType(data)); err == nil && url != "" && mediaID != "" { + snsUploadImgResult.URL = url + snsUploadImgResult.MediaID = mediaID + } + } return snsUploadImgResult, err } + +func AddMaterial(ctx *jxcontext.Context, knowIDs []int, param *weixinapi.CBAddNewsParam) (err error) { + var ( + db = dao.GetDB() + s = new(strings.Builder) + ) + if len(knowIDs) == 0 { + return fmt.Errorf("请至少勾选一条!") + } + knows, err := dao.GetKnowledgeDepotNoPage(db, knowIDs) + for k, v := range knows { + if k != 0 { + s.WriteString(weixinapi.SNSCutLine) + } + s.WriteString(v.Content) + } + content := s.String() + if content != "" { + param.Content = content + api.WeixinAPI.CBAddNews(param) + } else { + return fmt.Errorf("读取内容错误!") + } + return err +} + +func SendSNSMediaMsg(ctx *jxcontext.Context, storeIDs []int, mediaID string) (err error) { + var ( + openIDs []string + ) + for _, v := range storeIDs { + if results := weixinmsg.GetWeixinOpenIDsFromStoreID(v); len(results) > 0 { + openIDs = append(openIDs, results...) + } + } + if len(openIDs) > 0 { + return weixinmsg.MediaMessageSendGroup(openIDs, mediaID) + } + return err +} diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index 43d139aa4..49cd4c6fa 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -174,6 +174,10 @@ func SmartMessageTemplateSend(userOpenID, templateID, downloadURL, miniPageURL s return err } +func MediaMessageSendGroup(openIDs []string, mediaID string) (err error) { + return api.WeixinAPI.CBMassSend(openIDs, mediaID) +} + func getOrderDetailBrief(order *model.GoodsOrder) (brief string) { sb := new(strings.Builder) sb.WriteString(order.Skus[0].SkuName) diff --git a/business/model/dao/knowledge.go b/business/model/dao/knowledge.go index 1e2565f0e..c2225aa38 100644 --- a/business/model/dao/knowledge.go +++ b/business/model/dao/knowledge.go @@ -33,3 +33,18 @@ func GetKnowledgeDepot(db *DaoDB, keyword string, offset, pageSize int) (page *m } return page, err } + +func GetKnowledgeDepotNoPage(db *DaoDB, ids []int) (knows []*model.KnowledgeDepot, err error) { + sql := ` + SELECT * + FROM knowledge_depot + WHERE 1 = 1 + ` + sqlParams := []interface{}{} + if len(ids) > 0 { + sql += " AND t1.id IN (" + GenQuestionMarks(len(ids)) + ")" + sqlParams = append(sqlParams, ids) + } + GetRows(db, &knows, sql, sqlParams...) + return knows, err +} diff --git a/controllers/knowledge_controller.go b/controllers/knowledge_controller.go index e774ac4b9..b8fa9a12e 100644 --- a/controllers/knowledge_controller.go +++ b/controllers/knowledge_controller.go @@ -3,6 +3,7 @@ package controllers import ( "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-callback/business/jxstore/knowledge" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego/server/web" ) @@ -69,12 +70,23 @@ func (c *KnowController) GetMaterialList() { // @Param showCoverPic formData int false "内容中是否显示封面,0不显示,1显示" // @Param needOpenComment formData int false "是否打开评论,0不打开,1打开" // @Param onlyFansCanComment formData int false "是否只允许粉丝才能评论" -// @Param content formData string true "内容" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /AddMaterial [post] func (c *KnowController) AddMaterial() { c.callAddMaterial(func(params *tKnowAddMaterialParams) (retVal interface{}, errCode string, err error) { + new := &weixinapi.CBAddNewsParam{ + Title: params.Title, + Digest: params.Digest, + Author: params.Author, + ThumbMediaID: params.ThumbMediaID, + ShowCoverPic: params.ShowCoverPic, + NeedOpenComment: params.NeedOpenComment, + OnlyFansCanComment: params.OnlyFansCanComment, + } + var knowIDs []int + jxutils.Strings2Objs(params.KnowIDs, &knowIDs) + err = knowledge.AddMaterial(params.Ctx, knowIDs, new) return retVal, "", err }) } @@ -93,3 +105,20 @@ func (c *KnowController) SNSUploadImg() { return retVal, "", err }) } + +// @Title 发送消息 +// @Description 发送消息 +// @Param token header string true "认证token" +// @Param storeIDs formData string false "门店IDs" +// @Param mediaID formData string false "素材ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SendSNSMediaMsg [post] +func (c *KnowController) SendSNSMediaMsg() { + c.callSendSNSMediaMsg(func(params *tKnowSendSNSMediaMsgParams) (retVal interface{}, errCode string, err error) { + var storeIDs []int + jxutils.Strings2Objs(params.StoreIDs, &storeIDs) + err = knowledge.SendSNSMediaMsg(params.Ctx, storeIDs, params.MediaID) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 13710e207..5b3eadcbb 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -3734,4 +3734,13 @@ func init() { MethodParams: param.Make(), Filters: nil, Params: nil}) + + web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:KnowController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:KnowController"], + web.ControllerComments{ + Method: "SendSNSMediaMsg", + Router: `/SendSNSMediaMsg`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) }