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)) } }