Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop

This commit is contained in:
richboo111
2023-02-16 10:04:28 +08:00
10 changed files with 181 additions and 91 deletions

View File

@@ -1,6 +1,7 @@
package ebai
import (
"errors"
"fmt"
"math"
"strings"
@@ -387,23 +388,36 @@ func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *mod
// 将订单从购物平台配送转为自送
func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
if globals.EnableEbaiStoreWrite {
if order.DeliveryType == model.OrderDeliveryTypePlatform {
if err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID); err != nil {
if strings.Contains(err.Error(), "301251") {
api.EbaiAPI.OrderCancelDelivery(order.VendorOrderID) // 取消呼叫众包骑手
}
if utils.IsErrMatch(err, "301251", nil) {
if deliveryStatus, err2 := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err2 == nil {
deliveryStatus := utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"]))
if deliveryStatus == ebaiapi.WaybillStatusSelfDelivery {
err = nil
} else if deliveryStatus == ebaiapi.WaybillStatusDeliveryCancled {
p.trySyncCancelStatus(order.VendorOrderID)
}
}
}
}
deliveryStatusObj, _ := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID)
deliveryStatus := utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatusObj["status"]))
switch deliveryStatus {
case ebaiapi.WaybillStatusSelfDelivery:
err = nil
case ebaiapi.WaybillStatusDeliveryCancled:
p.trySyncCancelStatus(order.VendorOrderID)
case ebaiapi.WaybillStatusNew, ebaiapi.WaybillStatusRequestDelivery, ebaiapi.WaybillStatusWait4Courier:
err = api.EbaiAPI.OrderCancelDelivery(order.VendorOrderID) // 取消呼叫众包骑手
case ebaiapi.WaybillStatusCourierAccepted:
err = errors.New("骑手已接单,无法转自送")
}
//if order.DeliveryType == model.OrderDeliveryTypePlatform {
// if err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID); err != nil {
// if strings.Contains(err.Error(), "301251") {
// api.EbaiAPI.OrderCancelDelivery(order.VendorOrderID) // 取消呼叫众包骑手
// }
// if utils.IsErrMatch(err, "301251", nil) {
// if deliveryStatus, err2 := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err2 == nil {
// deliveryStatus := utils.Int64ToStr(utils.MustInterface2Int64(deliveryStatus["status"]))
// if deliveryStatus == ebaiapi.WaybillStatusSelfDelivery {
// err = nil
// } else if deliveryStatus == ebaiapi.WaybillStatusDeliveryCancled {
// p.trySyncCancelStatus(order.VendorOrderID)
// }
// }
// }
// }
//}
}
if err == nil {
// 饿百不会发送配送中,模拟发送

View File

@@ -6,69 +6,98 @@ import (
"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"
"io/ioutil"
"net/http"
"strings"
"time"
)
// 同一账号下,菜市消息推送到果园
const (
CaiShiPushGyTagOrder = "order" // 订单
CaiShiPushGyTagToken = "token" // 授权
CaiShiPushGyTagDeliveryRegister = "delivery" // 配送注册查询
CaiShiPushGyTagDeliveryDetail = "deliveryDetail" // 配送详情
CaiShiPushGyTagWayBill = "waybill" // 配送
)
// OnOrderMsg 抖音
func OnOrderMsg(msgId string, msg interface{}) (response *tiktokShop.CallbackResponse) {
globals.SugarLogger.Debugf("guoyuan %s,%s", msgId, utils.Format4Output(msg, false))
if CurPurchaseHandler != nil {
orderId, shopId, _ := api.TiktokStore.GetCallbackOrderId(msgId, msg)
globals.SugarLogger.Debugf("order_id %s,%s", orderId, shopId)
//orderDetail, err := GetTiktokApi(utils.Int64ToStr(shopId), 0, "").GetTiktokOrderDetail(orderId)
//if err != nil {
// return tiktokShop.Err2CallbackResponse(err, "")
//}
//vendorStoreID := orderDetail.ShopId
//if vendorStoreID != 0 {
// storeDetail, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), utils.Int64ToStr(vendorStoreID), model.VendorIDDD, "")
// if err != nil || storeDetail == nil || storeDetail.Store.ID == 0 {
// // 当前订单所属门店不属于菜市时,将消息推送到果园
// gyMsg := map[string]interface{}{"tag": msgId, "msg_id": utils.Int64ToStr(time.Now().Unix()) + msgId, "data": msg}
// // 通知到果园
// gyResult, err := HttpToGuoYuan(gyMsg, "order")
// if err != nil {
// return tiktokShop.Err2CallbackResponse(err, "")
// }
// result, _ := ioutil.ReadAll(gyResult.Body)
// var guoYuan *tiktokShop.CallbackResponse
// if err := json.Unmarshal(result, guoYuan); err != nil {
// return tiktokShop.Err2CallbackResponse(err, "")
// }
// return guoYuan
// }
//}
globals.SugarLogger.Debugf("order_id %s,%d", orderId, shopId)
orderDetail, err := GetTiktokApi(utils.Int64ToStr(shopId), 0, "").GetTiktokOrderDetail(orderId)
if err != nil {
return tiktokShop.Err2CallbackResponse(err, "")
}
vendorStoreID := orderDetail.SkuOrderList[0].StoreInfo.StoreId
if vendorStoreID != "" {
storeDetail, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDDD, "")
if err != nil || storeDetail == nil || storeDetail.Store.ID == 0 {
// 当前订单所属门店不属于菜市时,将消息推送到果园
gyMsg := map[string]interface{}{"tag": msgId, "msg_id": utils.Int64ToStr(time.Now().Unix()) + msgId, "data": msg}
// 通知到果园
gyResult, err := HttpToGuoYuan(gyMsg, CaiShiPushGyTagOrder)
if err != nil {
return tiktokShop.Err2CallbackResponse(err, "")
}
result, _ := ioutil.ReadAll(gyResult.Body)
var guoYuan *tiktokShop.CallbackResponse
if err2 := json.Unmarshal(result, guoYuan); err2 != nil {
return tiktokShop.Err2CallbackResponse(err2, "")
}
return guoYuan
}
}
jxutils.CallMsgHandler(func() {
response = CurPurchaseHandler.onOrderMsg(msgId, orderId, msg)
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDDD))
} else {
globals.SugarLogger.Debugf("============2")
}
return response
}
func HttpToGuoYuan(param map[string]interface{}, requestType string) (*http.Response, error) {
globals.SugarLogger.Debugf("=========param %s", utils.Format4Output(param, false))
paramData, err := json.Marshal(param)
if err != nil {
return nil, err
var paramData []byte
var err error
if requestType == "order" {
param["data"] = utils.Format4Output(param["data"], false)
paramData, err = json.Marshal([]interface{}{param})
if err != nil {
return nil, err
}
} else {
paramData, err = json.Marshal(param)
if err != nil {
return nil, err
}
}
body := strings.NewReader(string(paramData))
url := ""
switch requestType {
case "order": // 订单相关
case CaiShiPushGyTagOrder: // 订单相关
url = "http://callback-jxgy.jxc4.com/tiktok/callbackTiktokOrderMsg"
case "token": // 授权相关
case CaiShiPushGyTagToken: // 授权相关
url = "http://callback-jxgy.jxc4.com/tiktokShop/jxcsToGyTiktokToken"
case "wayBill": // 运单消息
case CaiShiPushGyTagDeliveryRegister: // 配送查询注册
url = "http://callback-jxgy.jxc4.com/logistics/logisticsRegister"
case CaiShiPushGyTagDeliveryDetail: // 配送查询详情
url = "http://callback-jxgy.jxc4.com/logistics/logisticsQuery"
case CaiShiPushGyTagWayBill: // 运单消息
}
httpReq, err := http.NewRequest(http.MethodPost, url, body)
if err != nil {
return nil, err
}
httpReq.Header.Set("Content-Type", "application/json")
httpRes, err := http.DefaultClient.Do(httpReq)

View File

@@ -47,7 +47,7 @@ func (c *PurchaseHandler) GetVendorID() int {
}
func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) {
cats, err := getAPI("57939570", 0, "").GetShopCategory(0)
cats, err := getAPI("68023619", 0, "").GetShopCategory(0)
if err != nil {
return nil, err
}

View File

@@ -722,6 +722,9 @@ func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
// GetDeliveryTemp 获取运费模板id,运费模板不存在则创建
func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao.StoreDetail) (int64, error) {
if vendorStoreID == "" {
return 0, errors.New("平台门店id未绑定")
}
// 没有模板是查询线上模板
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
if freightId == 0 {