Files
jx-callback/business/jxutils/unipush/push.go

181 lines
4.8 KiB
Go

package push
import (
"encoding/json"
"errors"
"fmt"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/globals/api2"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
// NotifyNewOrder 推送新订单
func NotifyNewOrder(order *model.GoodsOrder) {
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 {
return
}
cid, err := GetStoreBoosCID(storeId)
if err != nil {
globals.SugarLogger.Errorf("新订单推送,获取门店老板CID错误:%v", err)
return
}
msg.MsgType = "newOrder"
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 NotifyAfsOrder(afsOrder *model.AfsOrder) (err error) {
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 {
return
}
cid, err := GetStoreBoosCID(storeId)
if err != nil {
globals.SugarLogger.Errorf("售后单,获取门店老板CID错误:%v", err)
return
}
msg.MsgType = "newAfsOrder"
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))
return err
}
func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
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 {
return
}
cid, err := GetStoreBoosCID(storeId)
if err != nil {
globals.SugarLogger.Errorf("取消单,获取门店老板CID错误:%v", err)
return
}
msg.MsgType = "newCancelOrder"
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))
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))
}
}