添加uniapp消息推送
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
package push
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/jx-callback/business/authz/autils"
|
||||
"git.rosy.net.cn/jx-callback/globals/api2"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/unipushapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -14,52 +18,91 @@ import (
|
||||
beego "github.com/astaxie/beego/server/web"
|
||||
)
|
||||
|
||||
func pushToSingle(content, title string, storeID int) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
if !globals.IsProductEnv() {
|
||||
return
|
||||
}
|
||||
if storeID == 0 {
|
||||
return
|
||||
}
|
||||
storePushs, err := dao.GetStorePushClient(db, storeID, "")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, v := range storePushs {
|
||||
|
||||
status, err2 := api.PushAPI.PushToSingle(v.ClientID, false, &unipushapi.Notification{
|
||||
Title: title,
|
||||
Body: content,
|
||||
})
|
||||
if err = err2; err != nil {
|
||||
continue
|
||||
}
|
||||
if status == unipushapi.SuccessOffLine {
|
||||
_, err = api.PushAPI.PushToSingle(v.ClientID, true, &unipushapi.Notification{
|
||||
Body: content,
|
||||
})
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push2 error: [%v]", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//
|
||||
//func pushToSingle(content, title string, storeID int) {
|
||||
// var (
|
||||
// db = dao.GetDB()
|
||||
// )
|
||||
// if !globals.IsProductEnv() {
|
||||
// return
|
||||
// }
|
||||
// if storeID == 0 {
|
||||
// return
|
||||
// }
|
||||
// storePushs, err := dao.GetStorePushClient(db, storeID, "")
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// for _, v := range storePushs {
|
||||
//
|
||||
// status, err2 := api.PushAPI.PushToSingle(v.ClientID, false, &unipushapi.Notification{
|
||||
// Title: title,
|
||||
// Body: content,
|
||||
// })
|
||||
// if err = err2; err != nil {
|
||||
// continue
|
||||
// }
|
||||
// if status == unipushapi.SuccessOffLine {
|
||||
// _, err = api.PushAPI.PushToSingle(v.ClientID, true, &unipushapi.Notification{
|
||||
// Body: content,
|
||||
// })
|
||||
// if err != nil {
|
||||
// globals.SugarLogger.Debugf("NotifyNewOrder push2 error: [%v]", err)
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//}
|
||||
|
||||
// NotifyNewOrder 推送新订单
|
||||
func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
if order == nil || len(order.Skus) == 0 {
|
||||
//if order == nil || len(order.Skus) == 0 {
|
||||
// return
|
||||
//}
|
||||
//sb := new(strings.Builder)
|
||||
//sb.WriteString("老板,")
|
||||
//sb.WriteString(order.ConsigneeName)
|
||||
//sb.WriteString("购买了商品")
|
||||
//sb.WriteString(getOrderDetailBrief(order))
|
||||
//pushToSingle(sb.String(), "京西菜市新订单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
storeId := order.StoreID
|
||||
if storeId <= model.NO {
|
||||
storeId = order.JxStoreID
|
||||
}
|
||||
msg := MsgContext{}
|
||||
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, 0, "")
|
||||
if err != nil || storeDetail == nil {
|
||||
msg.MsgType = "新订单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "根据门店id获取门店详情错误"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString("老板,")
|
||||
sb.WriteString(order.ConsigneeName)
|
||||
sb.WriteString("购买了商品")
|
||||
sb.WriteString(getOrderDetailBrief(order))
|
||||
pushToSingle(sb.String(), "京西菜市新订单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
|
||||
cid, err := GetStoreBoosCID(storeId)
|
||||
if err != nil {
|
||||
msg.MsgType = "新订单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "错误日志通知"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
|
||||
msg.MsgType = "新订单"
|
||||
msg.VendorName = model.VendorChineseNames[order.VendorID]
|
||||
msg.OrderSqs = utils.Int2Str(order.OrderSeq)
|
||||
msg.StoreTitle = storeDetail.Name
|
||||
msg.Context = "老板,你有新的订单了"
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(storeDetail.ID, storeDetail.Name, cid, string(context))
|
||||
}
|
||||
|
||||
func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
||||
@@ -87,12 +130,166 @@ func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
||||
}
|
||||
|
||||
func NotifyAfsOrder(afsOrder *model.AfsOrder) (err error) {
|
||||
pushToSingle("老板,您有新的售后单,请尽快处理!", "京西菜市售后单推送", jxutils.GetSaleStoreIDFromAfsOrder(afsOrder))
|
||||
storeId := afsOrder.StoreID
|
||||
if storeId <= model.NO {
|
||||
storeId = afsOrder.JxStoreID
|
||||
}
|
||||
msg := MsgContext{}
|
||||
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, 0, "")
|
||||
if err != nil || storeDetail == nil {
|
||||
msg.MsgType = "售后单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "根据门店id获取门店详情错误"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
|
||||
cid, err := GetStoreBoosCID(storeId)
|
||||
if err != nil {
|
||||
msg.MsgType = "售后单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "错误日志通知"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
|
||||
msg.MsgType = "售后订单"
|
||||
msg.VendorName = model.VendorChineseNames[afsOrder.VendorID]
|
||||
msg.OrderSqs = "0"
|
||||
msg.StoreTitle = storeDetail.Name
|
||||
msg.Context = "老板订单申请退款了"
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(storeDetail.ID, storeDetail.Name, cid, string(context))
|
||||
//pushToSingle("老板,您有新的售后单,请尽快处理!", "京西菜市售后单推送", jxutils.GetSaleStoreIDFromAfsOrder(afsOrder))
|
||||
return err
|
||||
}
|
||||
|
||||
func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
|
||||
title := fmt.Sprintf("老板,您的订单%s第%d号订单, %s被取消了!", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID)
|
||||
pushToSingle(title, "京西菜市取消单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
storeId := order.StoreID
|
||||
if storeId <= model.NO {
|
||||
storeId = order.JxStoreID
|
||||
}
|
||||
msg := MsgContext{}
|
||||
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, 0, "")
|
||||
if err != nil || storeDetail == nil {
|
||||
msg.MsgType = "取消单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "根据门店id获取门店详情错误"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
|
||||
cid, err := GetStoreBoosCID(storeId)
|
||||
if err != nil {
|
||||
msg.MsgType = "取消单错误"
|
||||
msg.VendorName = "错误消息通知"
|
||||
msg.OrderSqs = "1"
|
||||
msg.StoreTitle = "错误日志通知"
|
||||
msg.Context = err.Error()
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(99999, "门店用户cid获取错误", []string{"212db7816d26e0c603518091b96d3554"}, string(context))
|
||||
return
|
||||
}
|
||||
|
||||
msg.MsgType = "售后订单"
|
||||
msg.VendorName = model.VendorChineseNames[order.VendorID]
|
||||
msg.OrderSqs = "0"
|
||||
msg.StoreTitle = storeDetail.Name
|
||||
msg.Context = "老板订单被取消了"
|
||||
context, _ := json.Marshal(msg)
|
||||
pushMsgByUniApp(storeDetail.ID, storeDetail.Name, cid, string(context))
|
||||
//title := fmt.Sprintf("老板,您的订单%s第%d号订单, %s被取消了!", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID)
|
||||
//pushToSingle(title, "京西菜市取消单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
return err
|
||||
}
|
||||
|
||||
// GetStoreBoosCID /************************************************************/
|
||||
func GetStoreBoosCID(storeId int) ([]string, error) {
|
||||
// 根据订单获取门店的老板cid
|
||||
userIDList, err2 := api2.RoleMan.GetRoleUserList(autils.NewStoreBossRole(storeId))
|
||||
if err2 != nil {
|
||||
return nil, err2
|
||||
}
|
||||
|
||||
userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", userIDList, nil, nil, 0, 100)
|
||||
if err != nil || len(userList) <= model.NO {
|
||||
return nil, errors.New("门店老板信息获取异常")
|
||||
}
|
||||
|
||||
var cId = make([]string, 0, len(userList))
|
||||
for _, v := range userList {
|
||||
if v.CID != "" {
|
||||
cId = append(cId, v.CID)
|
||||
}
|
||||
}
|
||||
|
||||
if len(cId) <= model.NO {
|
||||
return nil, fmt.Errorf("门店[%d],暂无CID,无法使用UniApp推送", storeId)
|
||||
}
|
||||
|
||||
return cId, nil
|
||||
}
|
||||
|
||||
type MsgContext struct {
|
||||
MsgType string `json:"msg_type"` // 订单类型[新订单/售后单/取消单]
|
||||
StoreTitle string `json:"store_title"` // 门店名称
|
||||
Context string `json:"context"` // 消息文本
|
||||
VendorName string `json:"vendor_name"` // 平台名称
|
||||
OrderSqs string `json:"order_sqs"` // 订单流水号
|
||||
}
|
||||
|
||||
func pushMsgByUniApp(storeId int, storeName string, cID []string, msg string) {
|
||||
var errs []error
|
||||
for _, v := range cID {
|
||||
param := map[string]interface{}{
|
||||
"request_id": utils.Int64ToStr(time.Now().Unix()) + "_" + utils.Int2Str(storeId),
|
||||
"settings": map[string]interface{}{
|
||||
"ttl": 7200000,
|
||||
},
|
||||
"audience": map[string]interface{}{
|
||||
"cid": []string{v},
|
||||
},
|
||||
"push_message": map[string]interface{}{
|
||||
"transmission": msg,
|
||||
},
|
||||
"push_channel": map[string]interface{}{
|
||||
"android": map[string]interface{}{
|
||||
"ups": map[string]interface{}{
|
||||
"transmission": msg,
|
||||
},
|
||||
},
|
||||
"ios": map[string]interface{}{
|
||||
"type": "notify",
|
||||
"payload": msg,
|
||||
"aps": map[string]interface{}{
|
||||
"alert": map[string]interface{}{
|
||||
"title": storeName,
|
||||
"body": msg,
|
||||
},
|
||||
"content-available": 0,
|
||||
"sound": "ring.mp3",
|
||||
},
|
||||
"auto_badge": "+1",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if err := api.UniAppApi.SendMsgByUinApp(param); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
if len(errs) != 0 {
|
||||
globals.SugarLogger.Errorf("uinapp 消息推送错误:%s", utils.Format4Output(errs, false))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user