Files
jx-callback/business/jxutils/unipush/push.go
2023-03-20 16:54:12 +08:00

257 lines
7.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"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"
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
// }
// }
//
// }
//}
// NotifyNewOrder 推送新订单
func NotifyNewOrder(order *model.GoodsOrder) {
//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 {
return
}
cid, err := GetStoreBoosCID(storeId)
if err != nil {
globals.SugarLogger.Errorf("新订单推送,获取门店老板CID错误:%v", err)
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) {
sb := new(strings.Builder)
sb.WriteString(order.Skus[0].SkuName)
sb.WriteString("等共")
sb.WriteString(utils.Int2Str(order.Skus[0].Count))
sb.WriteString("份(")
sb.WriteString(jxutils.IntPrice2StandardString(order.Skus[0].SalePrice))
sb.WriteString("元/份)等,预计收入")
//TODO 2020-07-20 果园和菜市不同
var price int64
if beego.BConfig.RunMode == "jxgy" {
price = order.EarningPrice
} else {
if order.EarningType == model.EarningTypePoints {
price = order.ActualPayPrice
} else {
price = order.EarningPrice
}
}
sb.WriteString(jxutils.IntPrice2StandardString(price))
sb.WriteString("元")
return sb.String()
}
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 = "售后订单"
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) {
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 = "取消订单"
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))
}
}