This commit is contained in:
邹宗楠
2022-10-11 16:32:20 +08:00
parent e2a930632e
commit c267776ab0
5 changed files with 123 additions and 64 deletions

View File

@@ -3195,6 +3195,7 @@ func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
skuBind.MtwmSyncStatus |= status
skuBind.YbSyncStatus |= status
skuBind.JdsSyncStatus |= status
skuBind.DdSyncStatus |= status
}
func checkStoreExisting(db *dao.DaoDB, storeID int) (store *model.Store, err error) {

View File

@@ -322,7 +322,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
//orderStatus.Status = vendorStatusToLocalStatus(orderMsg.OrderStatus)
//orderStatus.Remark = "100-新订单回调"
case tiktokShop.CallbackPayOrderMsgTagId:
orderMsg := msg.(*tiktokShop.PayOrderData)
orderMsg := tiktokShop.PayOrderData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.PayTime)
@@ -338,7 +341,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
//orderStatus.Status = vendorStatusToLocalStatus(orderMsg.OrderStatus)
//orderStatus.Remark = "110-订单支付待处理:风控"
case tiktokShop.CallbackPartGoodsMsgTagId:
orderMsg := msg.(*tiktokShop.SomeSendOrderData)
orderMsg := tiktokShop.SomeSendOrderData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.UpdateTime)
@@ -346,7 +352,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "108-卖家部分发货"
shopId = orderMsg.ShopId
case tiktokShop.CallbackPartAllGoodsMsgTagId:
orderMsg := msg.(*tiktokShop.BusinessDeliveryData)
orderMsg := tiktokShop.BusinessDeliveryData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.UpdateTime)
@@ -354,7 +363,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "102-卖家发货完成"
shopId = orderMsg.ShopId
case tiktokShop.CallbackCancelOrderMsgTagId:
orderMsg := msg.(*tiktokShop.CancelOrderData)
orderMsg := tiktokShop.CancelOrderData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.CancelTime)
@@ -362,7 +374,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "106-取消订单"
shopId = orderMsg.ShopId
case tiktokShop.CallbackSuccessOrderMsgTagId:
orderMsg := msg.(*tiktokShop.SuccessOrderData)
orderMsg := tiktokShop.SuccessOrderData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.CompleteTime)
@@ -370,7 +385,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "103-确认收货"
shopId = orderMsg.ShopId
case tiktokShop.CallbackWayBillChangeOrderMsgTagId:
orderMsg := msg.(*tiktokShop.WayBillChangeData)
orderMsg := tiktokShop.WayBillChangeData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.UpdateTime)
@@ -378,7 +396,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "104-物流消息变更"
shopId = orderMsg.ShopId
case tiktokShop.CallbackReceivingChangeOrderMsgTagId:
orderMsg := msg.(*tiktokShop.ReceivingAddressChangeData)
orderMsg := tiktokShop.ReceivingAddressChangeData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.UpdateTime)
@@ -386,7 +407,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "105-收货地址变更"
shopId = orderMsg.ShopId
case tiktokShop.CallbackChangeMoneyMsgTagId:
orderMsg := msg.(*tiktokShop.UpdateAmountChangeData)
orderMsg := tiktokShop.UpdateAmountChangeData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(orderMsg.OrderStatus)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.ModifyTime)
@@ -394,7 +418,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "109-卖家修改订单/运单金额"
shopId = orderMsg.ShopId
case tiktokShop.CallbackApplyUpdateAddressMsgTagId:
orderMsg := msg.(*tiktokShop.BuyerUpdateWayBillData)
orderMsg := tiktokShop.BuyerUpdateWayBillData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(tiktokShop.CreateOrderStatusStockUp)
orderStatus.StatusTime = time.Now()
@@ -402,7 +429,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "111-买家收货消息变更"
shopId = orderMsg.ShopId
case tiktokShop.CallbackBusinessRemarkMsgTagId:
orderMsg := msg.(*tiktokShop.BusinessUpdateRemakeData)
orderMsg := tiktokShop.BusinessUpdateRemakeData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = utils.Int64ToStr(orderMsg.PId)
orderStatus.VendorStatus = utils.Int64ToStr(tiktokShop.CreateOrderStatusStockUp)
orderStatus.StatusTime = utils.Timestamp2Time(orderMsg.UpdateTime)
@@ -410,7 +440,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "113-添加备注:" + orderMsg.Remark
shopId = orderMsg.ShopId
case tiktokShop.CallbackSendOrderTimeChangeMsgTagId:
orderMsg := msg.(*tiktokShop.AppointmentChangeData)
orderMsg := tiktokShop.AppointmentChangeData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = orderMsg.PId
orderStatus.VendorStatus = utils.Int64ToStr(tiktokShop.CreateOrderStatusStockUp)
orderStatus.StatusTime = time.Now()
@@ -418,7 +451,10 @@ func (c *PurchaseHandler) callbackMsg2Status(msgId, orderId string, msg interfac
orderStatus.Remark = "126-预约发货:"
shopId = orderMsg.ShopId
case fakeFinishedPickup: // 应为需要同步京东,美团拣货功能制作的假拣货,抖音不存在拣货
orderMsg := msg.(*tiktokShop.FakePickUpGoodsData)
orderMsg := tiktokShop.FakePickUpGoodsData{}
if err := utils.Map2StructByJson(msg, &orderMsg, false); err != nil {
return nil, 0
}
orderStatus.VendorOrderID = orderMsg.PId
orderStatus.VendorStatus = fakeFinishedPickup
orderStatus.StatusTime = time.Now()

View File

@@ -4,12 +4,10 @@ import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
product_addV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_addV2/request"
product_detail_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_detail/response"
product_editV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_editV2/request"
product_editV2_commit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_editV2_commit/request"
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
shop_bindStoreSaleLimit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreSaleLimit/request"
sku_editPrice_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_editPrice/request"
sku_syncStock_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStock/request"
@@ -24,7 +22,6 @@ import (
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/business/partner/putils"
"git.rosy.net.cn/jx-callback/globals"
"math/rand"
"regexp"
"strings"
)
@@ -260,43 +257,14 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
// 对于多门店平台来说storeSkuList中只有SkuID与VendorSkuID有意义
// 抖店的商品只管创建,创建接口会返回成功,但是审核的时候不一定成功.当前系统无法判定此商品是否已经创建过了!
func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isCreate bool) (failedList []*partner.StoreSkuInfoWithErr, err error) {
globals.SugarLogger.Debug("==============vendorStoreID", vendorStoreID)
var syncType string
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDDD, "")
api := getAPI(storeDetail.VendorOrgCode, storeID, vendorStoreID)
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
if freightId == 0 {
// 创建门店运费模板
temp, err := api.FreightTemplateCreate(&freightTemplate_create_request.FreightTemplateCreateParam{
Template: &freightTemplate_create_request.Template{
TemplateName: storeDetail.Name + "_" + utils.Int64ToStr(rand.Int63n(int64(storeID))) + "_系统模板",
ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[0:2]),
ProductCity: int64(storeDetail.CityCode),
CalculateType: 2,
TransferType: 1, // 快递
RuleType: 1,
FixedAmount: 500,
},
Columns: nil,
})
if err != nil {
return nil, err
}
// 绑定门店运费模板
err = api.BindFreightTemplate(&shop_bindStoreFreight_request.ShopBindStoreFreightParam{
StoreId: utils.Str2Int64(vendorStoreID),
FreightId: temp.TemplateId,
})
if err != nil {
return nil, err
}
freightId = temp.TemplateId
}
if isCreate {
syncType = "创建商品"
for _, storeSku := range storeSkuList {
// 创建商品
// 创建商品
param := &product_addV2_request.ProductAddV2Param{
CategoryLeafId: utils.Str2Int64(storeSku.SkuVendorMapCatID),
Name: storeSku.Name,
@@ -313,6 +281,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
SellChannel: []int64{0},
StartSaleType: 0,
PickupMethod: "0",
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
}
// param.AccountTemplateId = ""
// 获取上传图,商品轮播图
@@ -349,24 +318,40 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
globals.SugarLogger.Debug("创建=============param", utils.Format4Output(param, false))
// 获取品牌
brandID, err := api.GetSkuBrand(param.CategoryLeafId)
param.StandardBrandId, err = api.GetSkuBrand(param.CategoryLeafId)
if err != nil {
return nil, err
}
param.StandardBrandId = brandID
tiktokResult, err := api.CreateStoreCommodity(param) // 创建商品
if err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
continue
// 根据本地商品id获取线上商品是否存在,存在则只创建商品
var tiktokResultProductId int64 = 0
if storeSku.VendorMainId == "" { // 线上不存在创建
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
if err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
continue
}
globals.SugarLogger.Debugf("tiktokResult main ===%s", utils.Format4Output(tiktokResult, false))
tiktokResultProductId = tiktokResult.ProductId
var attrId []string
for _, v := range tiktokResult.Sku {
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
}
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
} else {
tiktokResultProductId = utils.Str2Int64(storeSku.VendorMainId)
}
globals.SugarLogger.Debugf("tiktokResult main ===%s", utils.Format4Output(tiktokResult, false))
// 创建子商品
freightId, err := GetDeliveryTemp(api, vendorStoreID, storeDetail) // 运费模板
if err != nil {
return nil, err
}
param.FreightId = freightId
param.MainProductId = tiktokResult.ProductId
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResult.ProductId, storeSku)
param.MainProductId = tiktokResultProductId
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
// 获取门店限售模板
saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
globals.SugarLogger.Debug("==22213123131231231", saleLimitId)
@@ -375,7 +360,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
}
param.SaleLimitId = saleLimitId
param.StoreId = utils.Str2Int64(vendorStoreID)
// 抖店创建商品
// 抖店创建子商品
globals.SugarLogger.Debugf("zishangping=============%s", utils.Format4Output(param, false))
tiktokResultChildren, err := api.CreateStoreCommodity(param)
if err != nil {
@@ -384,12 +370,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
continue
}
storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId) // 子商品主id
storeSku.VendorMainId = utils.Int64ToStr(tiktokResult.ProductId) // 商品主id
var attrId []string
for _, v := range tiktokResult.Sku {
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
}
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
}
} else {
syncType = "更新商品"

View File

@@ -4,14 +4,54 @@ import (
"encoding/json"
"errors"
"fmt"
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"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"
"math/rand"
"strings"
)
// 获取运费模板id,运费模板不存在则创建
func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao.StoreDetail) (int64, error) {
// todo 获取本地数据模板
// 没有模板是查询线上模板
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
if freightId == 0 {
// 创建门店运费模板
temp, err := api.FreightTemplateCreate(&freightTemplate_create_request.FreightTemplateCreateParam{
Template: &freightTemplate_create_request.Template{
TemplateName: storeDetail.Name + "_" + utils.Int64ToStr(rand.Int63n(int64(storeDetail.ID))) + "_系统模板",
ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[0:2]),
ProductCity: int64(storeDetail.CityCode),
CalculateType: 2,
TransferType: 1, // 快递
RuleType: 1,
FixedAmount: 500,
},
Columns: nil,
})
if err != nil {
return 0, err
}
// 绑定门店运费模板
err = api.BindFreightTemplate(&shop_bindStoreFreight_request.ShopBindStoreFreightParam{
StoreId: utils.Str2Int64(vendorStoreID),
FreightId: temp.TemplateId,
})
if err != nil {
return 0, err
}
freightId = temp.TemplateId
}
return freightId, nil
}
// GetProductFormatNew 获取物品属性
func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (string, error) {
category, err := getAPI(vendorOrgCode, 0, "").GetCatePropertyV2(categoryLeftId)

View File

@@ -20,7 +20,7 @@ func (t *TiktokController) CallbackTiktokOrderMsg() {
// return
//}
// 1.防伪校验
resp := api.TiktokStore.EventSignChange(t.Ctx.Request)
resp, byteList := api.TiktokStore.EventSignChange(t.Ctx.Request)
if resp.Code != 0 {
t.Data["json"] = resp
t.ServeJSON()
@@ -28,7 +28,7 @@ func (t *TiktokController) CallbackTiktokOrderMsg() {
}
// 2.参数解析
orderStatus, resp := api.TiktokStore.CreateOrderCallback(t.Ctx.Request)
orderStatus, resp := api.TiktokStore.CreateOrderCallback(byteList)
globals.SugarLogger.Debug("抖音订单回调数据打印测试===========", orderStatus)
if resp.Code != 0 {
t.Data["json"] = resp