1
This commit is contained in:
@@ -1595,8 +1595,6 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
|||||||
_, err = CurVendorSync.SyncStore(ctx, db, storeMap.VendorID, storeID, false, userName)
|
_, err = CurVendorSync.SyncStore(ctx, db, storeMap.VendorID, storeID, false, userName)
|
||||||
_, err = CurVendorSync.FullSyncStoresSkus(ctx, db, []int{vendorID}, []int{storeID}, true, nil, true, true)
|
_, err = CurVendorSync.FullSyncStoresSkus(ctx, db, []int{vendorID}, []int{storeID}, true, nil, true, true)
|
||||||
if utils.IsNil(errList) && err == nil {
|
if utils.IsNil(errList) && err == nil {
|
||||||
globals.SugarLogger.Debug("utils.IsNil(errList)==============", utils.IsNil(errList))
|
|
||||||
globals.SugarLogger.Debug("fakeErr===========%v,%v", errList, err)
|
|
||||||
return outStoreMap, nil
|
return outStoreMap, nil
|
||||||
} else {
|
} else {
|
||||||
return outStoreMap, errors.New(fmt.Sprintf("errList=%s,err=%v", utils.Format4Output(errList, true), err))
|
return outStoreMap, errors.New(fmt.Sprintf("errList=%s,err=%v", utils.Format4Output(errList, true), err))
|
||||||
@@ -1786,7 +1784,6 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
|
|||||||
}
|
}
|
||||||
dao.Commit(db, txDB)
|
dao.Commit(db, txDB)
|
||||||
if isStoreMapNeedSync(vendorID, valid) {
|
if isStoreMapNeedSync(vendorID, valid) {
|
||||||
globals.SugarLogger.Debug("1.isStoreMapNeedSync(vendorID, valid)=================", isStoreMapNeedSync(vendorID, valid))
|
|
||||||
_, err = CurVendorSync.SyncStore(ctx, db, vendorID, storeID, false, userName)
|
_, err = CurVendorSync.SyncStore(ctx, db, vendorID, storeID, false, userName)
|
||||||
globals.SugarLogger.Debug("CurVendorSync.SyncStore:err======%v", err)
|
globals.SugarLogger.Debug("CurVendorSync.SyncStore:err======%v", err)
|
||||||
}
|
}
|
||||||
@@ -1794,7 +1791,6 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
|
|||||||
}
|
}
|
||||||
errList.AddErr(err)
|
errList.AddErr(err)
|
||||||
endErr := errList.GetErrListAsOne()
|
endErr := errList.GetErrListAsOne()
|
||||||
globals.SugarLogger.Info("endErr==============", endErr)
|
|
||||||
return num, endErr
|
return num, endErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -231,7 +231,6 @@ func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs, storeIDs []int, mustDirty, isAsync bool) (hint string, err error) {
|
func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs, storeIDs []int, mustDirty, isAsync bool) (hint string, err error) {
|
||||||
globals.SugarLogger.Debug("进入SyncStore2了")
|
|
||||||
userName := ctx.GetUserName()
|
userName := ctx.GetUserName()
|
||||||
isManageIt := len(storeIDs) == 0 || len(storeIDs) > 5
|
isManageIt := len(storeIDs) == 0 || len(storeIDs) > 5
|
||||||
_, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步门店信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, mustDirty, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (resultList interface{}, err error) {
|
_, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步门店信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, mustDirty, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (resultList interface{}, err error) {
|
||||||
@@ -258,7 +257,6 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs
|
|||||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||||
}
|
}
|
||||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||||
globals.SugarLogger.Debugf("2.IsSyncStatusDelete(storeMap.SyncStatus)")
|
|
||||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||||
resultList = append(resultList, 1)
|
resultList = append(resultList, 1)
|
||||||
} else {
|
} else {
|
||||||
@@ -274,12 +272,10 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs
|
|||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||||
globals.SugarLogger.Debug("进入 model.IsSyncStatusNew(storeMap.SyncStatus)")
|
|
||||||
storeMap.VendorStoreID = vendorStoreID
|
storeMap.VendorStoreID = vendorStoreID
|
||||||
storeMap.SyncStatus = 0
|
storeMap.SyncStatus = 0
|
||||||
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Debug("进入 model.IsSyncStatusNew(storeMap.SyncStatus) else")
|
|
||||||
storeMap.SyncStatus = 0
|
storeMap.SyncStatus = 0
|
||||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||||
}
|
}
|
||||||
@@ -302,7 +298,6 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs
|
|||||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||||
}
|
}
|
||||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||||
globals.SugarLogger.Debug("进入handler.DeleteStore")
|
|
||||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||||
resultList = append(resultList, 1)
|
resultList = append(resultList, 1)
|
||||||
} else {
|
} else {
|
||||||
@@ -496,8 +491,6 @@ func (v *VendorSync) SyncStoresCategory(ctx *jxcontext.Context, db *dao.DaoDB, v
|
|||||||
//
|
//
|
||||||
func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
|
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
|
||||||
globals.SugarLogger.Debugf("============2")
|
|
||||||
|
|
||||||
funcParam := func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
funcParam := func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
||||||
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
|
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
|
||||||
|
|||||||
@@ -103,7 +103,6 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if model.IsSyncStatusDelete(catInfo.CatSyncStatus) { // 删除 4
|
if model.IsSyncStatusDelete(catInfo.CatSyncStatus) { // 删除 4
|
||||||
globals.SugarLogger.Debugf("============5:删除")
|
|
||||||
if model.IsSyncStatusDelete(catInfo.CatSyncStatus) && !dao.IsVendorThingIDEmpty(catInfo.VendorCatID) {
|
if model.IsSyncStatusDelete(catInfo.CatSyncStatus) && !dao.IsVendorThingIDEmpty(catInfo.VendorCatID) {
|
||||||
err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID, level)
|
err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID, level)
|
||||||
if err != nil && handler.IsErrCategoryNotExist(err) {
|
if err != nil && handler.IsErrCategoryNotExist(err) {
|
||||||
@@ -113,7 +112,6 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if model.IsSyncStatusNew(catInfo.CatSyncStatus) { // 新增 2
|
} else if model.IsSyncStatusNew(catInfo.CatSyncStatus) { // 新增 2
|
||||||
globals.SugarLogger.Debugf("============6:新增")
|
|
||||||
err = handler.CreateStoreCategory(ctx, storeID, vendorStoreID, catInfo)
|
err = handler.CreateStoreCategory(ctx, storeID, vendorStoreID, catInfo)
|
||||||
if err != nil && handler.IsErrCategoryExist(err) {
|
if err != nil && handler.IsErrCategoryExist(err) {
|
||||||
if cat, err2 := handler.GetStoreCategory(ctx, storeID, vendorStoreID, catInfo.Name); err2 == nil {
|
if cat, err2 := handler.GetStoreCategory(ctx, storeID, vendorStoreID, catInfo.Name); err2 == nil {
|
||||||
@@ -131,7 +129,6 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
} else if model.IsSyncStatusUpdate(catInfo.CatSyncStatus) { // 修改 1
|
} else if model.IsSyncStatusUpdate(catInfo.CatSyncStatus) { // 修改 1
|
||||||
globals.SugarLogger.Debugf("============7:修改")
|
|
||||||
err = handler.UpdateStoreCategory(ctx, storeID, vendorStoreID, catInfo)
|
err = handler.UpdateStoreCategory(ctx, storeID, vendorStoreID, catInfo)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
updateFields = append(updateFields, idFieldName)
|
updateFields = append(updateFields, idFieldName)
|
||||||
@@ -176,7 +173,6 @@ func SyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SyncStoreSkuNew2(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, vendorID, storeID int, vendorStoreID, vendorOrgCode string, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func SyncStoreSkuNew2(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag int, vendorID, storeID int, vendorStoreID, vendorOrgCode string, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
globals.SugarLogger.Debugf("============4")
|
|
||||||
singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||||
if singleStoreHandler != nil { // 本地创建商品分类
|
if singleStoreHandler != nil { // 本地创建商品分类
|
||||||
if err = CreateStoreCategoryByStoreSku(ctx, vendorID, storeID, vendorStoreID, nameIDs, skuIDs); err != nil {
|
if err = CreateStoreCategoryByStoreSku(ctx, vendorID, storeID, vendorStoreID, nameIDs, skuIDs); err != nil {
|
||||||
@@ -681,14 +677,6 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
globals.SugarLogger.Debugf("============createList := %s", utils.Format4Output(createList, false))
|
|
||||||
globals.SugarLogger.Debugf("============updateList := %s", utils.Format4Output(updateList, false))
|
|
||||||
globals.SugarLogger.Debugf("============deleteList := %s", utils.Format4Output(deleteList, false))
|
|
||||||
globals.SugarLogger.Debugf("============stockList := %s", utils.Format4Output(stockList, false))
|
|
||||||
globals.SugarLogger.Debugf("============onlineList := %s", utils.Format4Output(onlineList, false))
|
|
||||||
globals.SugarLogger.Debugf("============offlineList := %s", utils.Format4Output(offlineList, false))
|
|
||||||
globals.SugarLogger.Debugf("============priceList := %s", utils.Format4Output(priceList, false))
|
|
||||||
|
|
||||||
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
|
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
step := batchItemList[0].(int)
|
step := batchItemList[0].(int)
|
||||||
@@ -1172,9 +1160,7 @@ func GetSensitiveWord(singleStoreHandler partner.ISingleStoreStoreSkuHandler, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MergeSkuSaleStatusWithStoreOpTime(sku *dao.StoreSkuSyncInfo, storeDetail *dao.StoreDetail, now int16) (outStatus int) {
|
func MergeSkuSaleStatusWithStoreOpTime(sku *dao.StoreSkuSyncInfo, storeDetail *dao.StoreDetail, now int16) (outStatus int) {
|
||||||
if sku.MergedStatus == model.SkuStatusNormal &&
|
if sku.MergedStatus == model.SkuStatusNormal && sku.StatusSaleBegin > 0 && sku.StatusSaleEnd > 0 && storeDetail.Status == model.StoreStatusOpened {
|
||||||
sku.StatusSaleBegin > 0 && sku.StatusSaleEnd > 0 &&
|
|
||||||
storeDetail.Status == model.StoreStatusOpened {
|
|
||||||
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
|
//商品可售时间的差集与门店营业时间的交集为不可售,其余为原本状态
|
||||||
var openTime int16
|
var openTime int16
|
||||||
var closeTime int16
|
var closeTime int16
|
||||||
|
|||||||
@@ -751,6 +751,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
|||||||
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return skus, err
|
return skus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -794,7 +795,6 @@ func GetStoreSkuPriceAndWeight(db *DaoDB, vendorStoreID string, vendorID int, ve
|
|||||||
|
|
||||||
// 这个函数之前是要设置没有删除或同步标志不为0的,会导致将同步标志不为0且删除了的把标志去掉,现在改为只设置没有删除的
|
// 这个函数之前是要设置没有删除或同步标志不为0的,会导致将同步标志不为0且删除了的把标志去掉,现在改为只设置没有删除的
|
||||||
func SetStoreSkuSyncStatus(db *DaoDB, vendorID int, storeIDs []int, skuIDs []int, syncStatus int) (num int64, err error) {
|
func SetStoreSkuSyncStatus(db *DaoDB, vendorID int, storeIDs []int, skuIDs []int, syncStatus int) (num int64, err error) {
|
||||||
globals.SugarLogger.Debugf("============3")
|
|
||||||
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
||||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||||
sql := `
|
sql := `
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ func CreateThingMap(thingId int64, vendorThingID, appOrgCode, skuAttrId string)
|
|||||||
Remark: skuAttrId,
|
Remark: skuAttrId,
|
||||||
SyncStatus: 0,
|
SyncStatus: 0,
|
||||||
}
|
}
|
||||||
|
// 正常来说这个skuAttrId 不应该为空
|
||||||
|
if skuAttrId == "" {
|
||||||
|
thingMap.Remark = "这个值不应该为空才对"
|
||||||
|
}
|
||||||
|
|
||||||
WrapAddIDCULDEntity(thingMap, "jxadmin")
|
WrapAddIDCULDEntity(thingMap, "jxadmin")
|
||||||
return CreateEntity(GetDB(), thingMap)
|
return CreateEntity(GetDB(), thingMap)
|
||||||
|
|||||||
@@ -97,9 +97,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
|||||||
order.Status = model.WaybillStatusUnknown
|
order.Status = model.WaybillStatusUnknown
|
||||||
}
|
}
|
||||||
err := dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status))
|
err := dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status))
|
||||||
defer func(order *model.Waybill) {
|
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
|
||||||
}(order)
|
|
||||||
if order.OrderVendorID == model.VendorIDDD {
|
if order.OrderVendorID == model.VendorIDDD {
|
||||||
result := &mtpsapi.RiderInfo{
|
result := &mtpsapi.RiderInfo{
|
||||||
OrderId: order.VendorOrderID,
|
OrderId: order.VendorOrderID,
|
||||||
@@ -110,7 +108,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
|||||||
LogisticsStatus: order.Status,
|
LogisticsStatus: order.Status,
|
||||||
OpCode: "",
|
OpCode: "",
|
||||||
}
|
}
|
||||||
switch order.Status {
|
switch msg.OrderStatus {
|
||||||
case dadaapi.OrderStatusWaitingForAccept: // 待接单,召唤骑手
|
case dadaapi.OrderStatusWaitingForAccept: // 待接单,召唤骑手
|
||||||
result.LogisticsStatus = model.WaybillStatusNew
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
result.LogisticsContext = model.RiderWaitRider
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
@@ -489,8 +487,6 @@ func (c *DeliveryHandler) GetRidderPosition(ctx *jxcontext.Context, vendorOrgCod
|
|||||||
// 获取骑手信息(订单详情)
|
// 获取骑手信息(订单详情)
|
||||||
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeisongId string) (rider *mtpsapi.RiderInfo, err error) {
|
||||||
order, err := api.DadaAPI.QueryOrderInfo(orderId)
|
order, err := api.DadaAPI.QueryOrderInfo(orderId)
|
||||||
globals.SugarLogger.Debugf("order111111111111 := %s", utils.Format4Output(order, false))
|
|
||||||
globals.SugarLogger.Debugf("order111111111111 := %s", utils.Format4Output(err, false))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -542,8 +538,5 @@ func (c *DeliveryHandler) GetRiderInfo(orderId string, deliveryId int64, mtPeiso
|
|||||||
result.LogisticsStatus = 0
|
result.LogisticsStatus = 0
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
}
|
}
|
||||||
|
|
||||||
globals.SugarLogger.Debugf("dadaresult_order := %s", utils.Format4Output(order, false))
|
|
||||||
globals.SugarLogger.Debugf("result_result := %s", utils.Format4Output(result, false))
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -255,6 +255,46 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon
|
|||||||
if err := partner.CurOrderManager.OnWaybillStatusChanged(order); err != nil {
|
if err := partner.CurOrderManager.OnWaybillStatusChanged(order); err != nil {
|
||||||
return fnpsapi.Err2CallbackResponse(err, "")
|
return fnpsapi.Err2CallbackResponse(err, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if order.OrderVendorID == model.VendorIDDD {
|
||||||
|
result := &mtpsapi.RiderInfo{
|
||||||
|
OrderId: order.VendorOrderID,
|
||||||
|
ThirdCarrierOrderId: order.VendorOrderID,
|
||||||
|
CourierName: order.CourierName,
|
||||||
|
CourierPhone: order.CourierMobile,
|
||||||
|
LogisticsProviderCode: "10002",
|
||||||
|
LogisticsStatus: order.Status,
|
||||||
|
OpCode: "",
|
||||||
|
}
|
||||||
|
switch orderStatus {
|
||||||
|
case fnpsapi.OrderStatusAcceptCreate, fnpsapi.OrderStatusAccept: // 待接单,召唤骑手
|
||||||
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
|
case fnpsapi.OrderStatusAssigned: //20分配骑手 待取货
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
||||||
|
result.LogisticsContext = model.RiderWaitGetGoods
|
||||||
|
case fnpsapi.OrderStatusDelivering: // 2 配送中 // 配送中
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivering
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivering
|
||||||
|
case fnpsapi.OrderStatusDelivered: // 3 已经送达 // 完成
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivered
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivered
|
||||||
|
case fnpsapi.OrderStatusAcceptCacle: // 取消
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCanceled
|
||||||
|
result.LogisticsContext = model.RiderGetOrderCanceled
|
||||||
|
case fnpsapi.OrderStatusException: // 5 异常: // 配送异常返回值
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
||||||
|
case fnpsapi.OrderStatusArrived: // 80 到店 // 骑手到店
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
||||||
|
result.LogisticsContext = model.RiderToStore
|
||||||
|
default:
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
}
|
||||||
|
delivery.PullTiktokRiderInfo(result)
|
||||||
|
}
|
||||||
|
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
return fnpsapi.Err2CallbackResponse(nil, "")
|
return fnpsapi.Err2CallbackResponse(nil, "")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,8 +171,6 @@ func PullTiktokRiderInfo(riderInfo *mtpsapi.RiderInfo) {
|
|||||||
riderInfo.LogisticsStatus = 40
|
riderInfo.LogisticsStatus = 40
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
||||||
case 115: // 取消
|
case 115: // 取消
|
||||||
riderInfo.CourierName = ""
|
|
||||||
riderInfo.CourierPhone = ""
|
|
||||||
riderInfo.LogisticsStatus = 100
|
riderInfo.LogisticsStatus = 100
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsCANCELDELIVERY
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsCANCELDELIVERY
|
||||||
case 22, 0, 120: // 异常配送
|
case 22, 0, 120: // 异常配送
|
||||||
@@ -181,14 +179,14 @@ func PullTiktokRiderInfo(riderInfo *mtpsapi.RiderInfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if riderInfo.CourierPhone == "" {
|
if riderInfo.CourierPhone == "" {
|
||||||
riderInfo.CourierPhone = "18981810000"
|
riderInfo.CourierPhone = " 暂无电话 "
|
||||||
}
|
}
|
||||||
if riderInfo.CourierName == "" {
|
if riderInfo.CourierName == "" {
|
||||||
riderInfo.CourierName = "暂无"
|
riderInfo.CourierName = " 暂无骑手 "
|
||||||
}
|
}
|
||||||
|
|
||||||
if riderInfo.LogisticsStatus != 22 && riderInfo.LogisticsStatus != 120 && riderInfo.LogisticsStatus != 0 {
|
if riderInfo.LogisticsStatus != 22 && riderInfo.LogisticsStatus != 120 && riderInfo.LogisticsStatus != 0 {
|
||||||
riderInfo.LogisticsContext += fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone)
|
riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 呼叫骑手的时候推送发货
|
// 呼叫骑手的时候推送发货
|
||||||
|
|||||||
@@ -219,8 +219,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
|||||||
|
|
||||||
// GetOrderRider 商家自配送同步配送信息
|
// GetOrderRider 商家自配送同步配送信息
|
||||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||||
appKey := `7153997323561879075` // 暂时定死
|
appKey := `7152420904331429407` // 暂时定死
|
||||||
appSecret := `3517d3ea-b96b-4379-a7a4-2d9389e8ffeb` //暂时定死
|
appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死
|
||||||
return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfo(param)
|
return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfo(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -281,17 +281,17 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
|||||||
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
// 更新主品
|
// 更新主品 (暂不支持渠道主商品)
|
||||||
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||||
Price: v.VendorPrice,
|
// Price: v.VendorPrice,
|
||||||
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
// SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
||||||
ProductId: utils.Str2Int64(v.VendorMainId),
|
// ProductId: utils.Str2Int64(v.VendorMainId),
|
||||||
})
|
//})
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格异常")...)
|
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格异常")...)
|
||||||
} else {
|
//} else {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格正常")...)
|
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格正常")...)
|
||||||
}
|
//}
|
||||||
|
|
||||||
// 更新子品
|
// 更新子品
|
||||||
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||||
|
|||||||
@@ -125,15 +125,18 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
if isCreate {
|
if isCreate {
|
||||||
syncType = "创建商品"
|
syncType = "创建商品"
|
||||||
for _, storeSku := range storeSkuList { // 创建商品
|
for _, storeSku := range storeSkuList { // 创建商品
|
||||||
|
// 如果当前商品,主商品id,子商品id都已经存在了,就不在创建了,主要防止,后期更新时,某些商品为创建成功,批量修改数据库再去批量创建报错(商品已创建)
|
||||||
|
if storeSku.VendorMainId != "" && storeSku.VendorSkuID != "" && len(storeSku.VendorSkuID) == 19 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
param := &product_addV2_request.ProductAddV2Param{
|
param := &product_addV2_request.ProductAddV2Param{
|
||||||
CategoryLeafId: utils.Str2Int64(storeSku.SkuVendorMapCatID),
|
|
||||||
Name: utils.LimitUTF8StringLen(storeSku.SkuName, mtwmapi.MaxSkuNameCharCount),
|
Name: utils.LimitUTF8StringLen(storeSku.SkuName, mtwmapi.MaxSkuNameCharCount),
|
||||||
PayType: tiktokShop.TiktokPayType1,
|
PayType: tiktokShop.TiktokPayType1,
|
||||||
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
||||||
Weight: utils.Int2Float64(storeSku.Weight),
|
Weight: utils.Int2Float64(storeSku.Weight),
|
||||||
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
||||||
PresellType: tiktokShop.SendGoodsTypeNow,
|
PresellType: tiktokShop.SendGoodsTypeNow,
|
||||||
Supply7dayReturn: 2, // 是否支持7天无理由,0不支持,1支持,2支持(拆封后不支持)
|
Supply7dayReturn: 0, // 是否支持7天无理由,0不支持,1支持,2支持(拆封后不支持)
|
||||||
Mobile: storeDetail.Tel1,
|
Mobile: storeDetail.Tel1,
|
||||||
Commit: true,
|
Commit: true,
|
||||||
Specs: "重量|" + utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit,
|
Specs: "重量|" + utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit,
|
||||||
@@ -143,64 +146,49 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
PickupMethod: "0",
|
PickupMethod: "0",
|
||||||
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
|
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
|
||||||
}
|
}
|
||||||
// param.AccountTemplateId = ""
|
// 部分商品没有所属的分类,直接跳过!
|
||||||
|
if storeSku.SkuVendorMapCatID != "" {
|
||||||
|
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
||||||
|
} else if storeSku.VendorVendorCatID != 0 {
|
||||||
|
param.CategoryLeafId = storeSku.VendorVendorCatID
|
||||||
|
} else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// 是否支持七天无理由
|
||||||
|
if api.GetProductUpdateRule(param.CategoryLeafId) {
|
||||||
|
param.Supply7dayReturn = 1
|
||||||
|
} else {
|
||||||
|
param.Supply7dayReturn = 0
|
||||||
|
}
|
||||||
|
|
||||||
// 获取上传图,商品轮播图
|
// 获取上传图,商品轮播图
|
||||||
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
param.Pic = img
|
param.Pic = img
|
||||||
// 商品详情图
|
param.Description = detailImg
|
||||||
if storeSku.DescImg == "" {
|
|
||||||
param.Description = strings.Split(img, ",")[0]
|
|
||||||
} else {
|
|
||||||
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
param.Description = img2
|
|
||||||
}
|
|
||||||
|
|
||||||
// weight_unit 目前抖音只支持g和kg两种
|
// weight_unit 目前抖音只支持g和kg两种
|
||||||
switch storeSku.Unit {
|
//switch storeSku.Unit {
|
||||||
case "g", "ml", "G", "ML":
|
//case "g", "ml", "G", "ML":
|
||||||
param.WeightUnit = tiktokShop.WeightUint_G
|
param.WeightUnit = tiktokShop.WeightUint_G
|
||||||
case "kg", "l", "L", "KG":
|
//case "kg", "l", "L", "KG":
|
||||||
param.WeightUnit = tiktokShop.WeightUint_G
|
// param.WeightUnit = tiktokShop.WeightUint_G
|
||||||
}
|
//}
|
||||||
|
|
||||||
// spec_prices
|
// spec_prices
|
||||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||||
// 获取商品的属性
|
// 获取商品的属性
|
||||||
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
if storeSku.TiktokAttribute != "" && storeSku.TiktokAttribute != "{}" {
|
||||||
categoryList, err := api.GetCatePropertyV2(param.CategoryLeafId)
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||||
|
} else if storeSku.VendorSkuAttrId != "" && storeSku.VendorSkuAttrId != "{}" {
|
||||||
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||||
|
} else {
|
||||||
|
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
categoryMap := make(map[string][]map[string]interface{})
|
|
||||||
for _, v := range categoryList.Data.Data {
|
|
||||||
if v.Required == model.YES {
|
|
||||||
options := make([]map[string]interface{}, 0)
|
|
||||||
if v.PropertyName == "品牌" {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 789194134, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else if v.PropertyName == "产地" {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 13850, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else if len(options) == 0 {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 0, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": v.Options[0].Value, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
param.ProductFormatNew = utils.Format4Output(categoryMap, false)
|
|
||||||
dao.UpdateSkuNameTiktokAttr(dao.GetDB(), int64(storeSku.NameID), param.ProductFormatNew)
|
|
||||||
} else {
|
|
||||||
param.ProductFormatNew = storeSku.TiktokAttribute
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取品牌
|
// 获取品牌
|
||||||
@@ -272,7 +260,9 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
if storeSku.VendorSkuID == "" {
|
||||||
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var attrId2 []string
|
var attrId2 []string
|
||||||
@@ -286,79 +276,55 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
} else {
|
} else {
|
||||||
syncType = "更新商品"
|
syncType = "更新商品"
|
||||||
for _, storeSku := range storeSkuList {
|
for _, storeSku := range storeSkuList {
|
||||||
|
if storeSku.StoreSkuStatus != 1 { // 未可售的商品不参与修改
|
||||||
|
continue
|
||||||
|
}
|
||||||
// 更新商品(目前只更新子商品,主商品暂不支持)
|
// 更新商品(目前只更新子商品,主商品暂不支持)
|
||||||
param := &product_editV2_request.ProductEditV2Param{
|
param := &product_editV2_request.ProductEditV2Param{
|
||||||
CategoryLeafId: utils.Str2Int64(storeSku.SkuVendorMapCatID),
|
|
||||||
Name: storeSku.Name,
|
Name: storeSku.Name,
|
||||||
PayType: tiktokShop.TiktokPayType1,
|
PayType: tiktokShop.TiktokPayType1,
|
||||||
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
||||||
Weight: utils.Int2Float64(storeSku.Weight),
|
Weight: utils.Int2Float64(storeSku.Weight),
|
||||||
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
||||||
PresellType: tiktokShop.SendGoodsTypeNow,
|
PresellType: tiktokShop.SendGoodsTypeNow,
|
||||||
Supply7dayReturn: 2,
|
Supply7dayReturn: 0,
|
||||||
Mobile: storeDetail.Tel1,
|
Mobile: storeDetail.Tel1,
|
||||||
Commit: true,
|
Commit: true,
|
||||||
Specs: "重量|" + fmt.Sprintf("%f", storeSku.SpecQuality) + storeSku.SpecUnit,
|
Specs: "重量|" + utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit,
|
||||||
NeedRechargeMode: false,
|
NeedRechargeMode: false,
|
||||||
SellChannel: []int64{0},
|
SellChannel: []int64{0},
|
||||||
StartSaleType: 0,
|
StartSaleType: 0,
|
||||||
PickupMethod: "0",
|
PickupMethod: "0",
|
||||||
}
|
}
|
||||||
// param.AccountTemplateId = ""
|
if storeSku.SkuVendorMapCatID != "" {
|
||||||
|
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
||||||
|
} else {
|
||||||
|
param.CategoryLeafId = storeSku.VendorVendorCatID
|
||||||
|
}
|
||||||
|
|
||||||
// 获取上传图,商品轮播图
|
// 获取上传图,商品轮播图
|
||||||
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5, storeSku.DescImg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
param.Pic = img
|
param.Pic = img
|
||||||
// 商品详情图
|
param.Description = detailImg
|
||||||
if storeSku.DescImg == "" {
|
|
||||||
param.Description = strings.Split(img, ",")[0]
|
|
||||||
} else {
|
|
||||||
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
param.Description = img2
|
|
||||||
}
|
|
||||||
|
|
||||||
// weight_unit 目前抖音只支持g和kg两种
|
// weight_unit 目前抖音只支持g和kg两种
|
||||||
switch storeSku.Unit {
|
//switch storeSku.Unit {
|
||||||
case "g", "ml", "G", "ML":
|
//case "g", "ml", "G", "ML":
|
||||||
param.WeightUnit = tiktokShop.WeightUint_G
|
param.WeightUnit = tiktokShop.WeightUint_G
|
||||||
case "kg", "l", "L", "KG":
|
//case "kg", "l", "L", "KG":
|
||||||
param.WeightUnit = tiktokShop.WeightUint_G
|
// param.WeightUnit = tiktokShop.WeightUint_G
|
||||||
}
|
//}
|
||||||
|
|
||||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||||
// 获取商品的属性
|
// 获取商品的属性
|
||||||
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
||||||
categoryList, err := api.GetCatePropertyV2(param.CategoryLeafId)
|
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
categoryMap := make(map[string][]map[string]interface{})
|
|
||||||
for _, v := range categoryList.Data.Data {
|
|
||||||
if v.Required == model.YES {
|
|
||||||
options := make([]map[string]interface{}, 0)
|
|
||||||
if v.PropertyName == "品牌" {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 789194134, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else if v.PropertyName == "产地" {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 13850, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else if len(options) == 0 {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 0, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
} else {
|
|
||||||
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": v.Options[0].Value, "diy_type": v.DiyType})
|
|
||||||
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
param.ProductFormatNew = utils.Format4Output(categoryMap, false)
|
|
||||||
dao.UpdateSkuNameTiktokAttr(dao.GetDB(), int64(storeSku.NameID), param.ProductFormatNew)
|
|
||||||
} else {
|
} else {
|
||||||
param.ProductFormatNew = storeSku.TiktokAttribute
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||||
}
|
}
|
||||||
@@ -376,6 +342,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
// 创建子商品
|
// 创建子商品
|
||||||
//param.FreightId = freightId
|
//param.FreightId = freightId
|
||||||
param.ProductId = utils.Str2Int64(storeSku.VendorSkuID)
|
param.ProductId = utils.Str2Int64(storeSku.VendorSkuID)
|
||||||
|
param.MainProductId = utils.Str2Int64(storeSku.VendorMainId)
|
||||||
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, param.MainProductId, storeSku)
|
||||||
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResult.ProductId, storeSku)
|
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResult.ProductId, storeSku)
|
||||||
// 获取门店限售模板
|
// 获取门店限售模板
|
||||||
//saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
//saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||||
@@ -383,7 +351,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
// return nil, err
|
// return nil, err
|
||||||
//}
|
//}
|
||||||
//param.SaleLimitId = saleLimitId
|
//param.SaleLimitId = saleLimitId
|
||||||
//param.StoreId = utils.Str2Int64(vendorStoreID)
|
param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||||
// 抖店创建商品
|
// 抖店创建商品
|
||||||
if err := api.EditStoreCommodity(param); err != nil {
|
if err := api.EditStoreCommodity(param); err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
@@ -543,9 +511,8 @@ func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (*product_g
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetTiktokImgList 获取抖音图片链接
|
// GetTiktokImgList 获取抖音图片链接
|
||||||
func GetTiktokImgList(storeId, appOrgCode string, img ...string) (string, error) {
|
func GetTiktokImgList(api *tiktokShop.API, storeId, appOrgCode string, detailImg string, img ...string) (string, string, error) {
|
||||||
imgs := make([]tiktokShop.Imgs, 0, 0)
|
imgs := make([]tiktokShop.Imgs, 0, 0)
|
||||||
var tiktokImg []string
|
|
||||||
for _, v := range img {
|
for _, v := range img {
|
||||||
if v != "" {
|
if v != "" {
|
||||||
imgs = append(imgs, tiktokShop.Imgs{
|
imgs = append(imgs, tiktokShop.Imgs{
|
||||||
@@ -554,21 +521,61 @@ func GetTiktokImgList(storeId, appOrgCode string, img ...string) (string, error)
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tiktokImgList, err := getAPI(appOrgCode, 0, "").BatchUploadImages(imgs)
|
if detailImg != "" {
|
||||||
|
imgs = append(imgs, tiktokShop.Imgs{
|
||||||
|
Name: "detail_" + storeId + "_" + detailImg[21:54],
|
||||||
|
Url: detailImg,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
tiktokImgList, err := api.BatchUploadImages(imgs)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
detailTiktok := ""
|
||||||
|
var tiktokImg []string
|
||||||
|
for _, v := range tiktokImgList {
|
||||||
|
if strings.Contains(v.Name, "detail_") {
|
||||||
|
detailTiktok = v.ByteUrl
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
tiktokImg = append(tiktokImg, v.ByteUrl)
|
||||||
|
}
|
||||||
|
if detailTiktok == "" {
|
||||||
|
detailTiktok = tiktokImg[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(tiktokImg, "|"), detailTiktok, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeProductFormatNew(api *tiktokShop.API, skuNameId int64, categoryLeafId int64) (string, error) {
|
||||||
|
categoryList, err := api.GetCatePropertyV2(categoryLeafId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
categoryMap := make(map[string][]map[string]interface{})
|
||||||
for _, v := range tiktokImgList.SuccessMap {
|
for _, v := range categoryList.Data.Data {
|
||||||
tiktokImg = append(tiktokImg, v.ByteUrl)
|
if v.Required != model.YES {
|
||||||
}
|
continue
|
||||||
if len(tiktokImg) <= model.NO {
|
}
|
||||||
for _, v := range tiktokImgList.FailedMap {
|
options := make([]map[string]interface{}, 0)
|
||||||
return "", errors.New(v.ErrMsg)
|
if v.PropertyName == "品牌" {
|
||||||
|
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 789194134, "diy_type": v.DiyType})
|
||||||
|
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
||||||
|
} else if v.PropertyName == "产地" {
|
||||||
|
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 13850, "diy_type": v.DiyType})
|
||||||
|
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
||||||
|
} else if len(options) == 0 {
|
||||||
|
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": 0, "diy_type": v.DiyType})
|
||||||
|
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
||||||
|
} else {
|
||||||
|
options = append(options, map[string]interface{}{"name": v.PropertyName, "value": v.Options[0].Value, "diy_type": v.DiyType})
|
||||||
|
categoryMap[utils.Int64ToStr(v.PropertyId)] = options
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
productFormatNew := utils.Format4Output(categoryMap, false)
|
||||||
return strings.Join(tiktokImg, "|"), nil
|
dao.UpdateSkuNameTiktokAttr(dao.GetDB(), skuNameId, productFormatNew)
|
||||||
|
return utils.Format4Output(categoryMap, false), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSpecPrices 解析属性和规格参数
|
// GetSpecPrices 解析属性和规格参数
|
||||||
@@ -578,6 +585,20 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
|||||||
if len(detail1) > 3 {
|
if len(detail1) > 3 {
|
||||||
detail1 = detail1[0:3]
|
detail1 = detail1[0:3]
|
||||||
}
|
}
|
||||||
|
specsUnit := "g"
|
||||||
|
var infoValue float64 = 1 // 同意计量单位,目前抖店只支持g
|
||||||
|
var specQuality = float64(localSku.SpecQuality) // 可能SpecQuality为0,给默认值
|
||||||
|
switch localSku.SpecUnit {
|
||||||
|
case "g", "G", "ml", "ML":
|
||||||
|
specsUnit = "g"
|
||||||
|
infoValue = 1
|
||||||
|
case "l", "L", "KG", "kg":
|
||||||
|
specsUnit = "g"
|
||||||
|
infoValue = 1000
|
||||||
|
}
|
||||||
|
if specQuality == 0 {
|
||||||
|
specQuality = 1
|
||||||
|
}
|
||||||
switch len(detail1) {
|
switch len(detail1) {
|
||||||
case 1:
|
case 1:
|
||||||
name1 := strings.Split(strings.Split(detail1[0], "|")[1], ",")
|
name1 := strings.Split(strings.Split(detail1[0], "|")[1], ",")
|
||||||
@@ -589,11 +610,12 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
|||||||
StepStockNum: 0,
|
StepStockNum: 0,
|
||||||
SupplierID: "",
|
SupplierID: "",
|
||||||
OuterSkuID: utils.Int2Str(localSku.SkuID),
|
OuterSkuID: utils.Int2Str(localSku.SkuID),
|
||||||
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
|
||||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
stock := 0
|
|
||||||
|
sku.DeliveryInfos = []*tiktokShop.DeliveryInfos{
|
||||||
|
{InfoType: "weight", InfoUnit: specsUnit, InfoValue: utils.Float64ToStr(specQuality * infoValue)},
|
||||||
|
}
|
||||||
|
stock := localSku.Stock
|
||||||
if localSku.Stock == 0 {
|
if localSku.Stock == 0 {
|
||||||
stock = 9999
|
stock = 9999
|
||||||
}
|
}
|
||||||
@@ -616,10 +638,10 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
|||||||
SupplierID: "",
|
SupplierID: "",
|
||||||
OuterSkuID: utils.Int2Str(localSku.NameID),
|
OuterSkuID: utils.Int2Str(localSku.NameID),
|
||||||
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
||||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
{InfoType: "weight", InfoUnit: specsUnit, InfoValue: utils.Float64ToStr(specQuality * infoValue)},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
stock := 0
|
stock := localSku.Stock
|
||||||
if localSku.Stock == 0 {
|
if localSku.Stock == 0 {
|
||||||
stock = 9999
|
stock = 9999
|
||||||
}
|
}
|
||||||
@@ -646,15 +668,14 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
|||||||
SupplierID: "",
|
SupplierID: "",
|
||||||
OuterSkuID: utils.Int2Str(localSku.NameID),
|
OuterSkuID: utils.Int2Str(localSku.NameID),
|
||||||
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
||||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
{InfoType: "weight", InfoUnit: specsUnit, InfoValue: utils.Float64ToStr(specQuality * infoValue)},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
stock := 0
|
stock := localSku.Stock
|
||||||
if localSku.Stock == 0 {
|
if localSku.Stock == 0 {
|
||||||
stock = 9999
|
stock = 9999
|
||||||
}
|
}
|
||||||
sku.StockNum = stock
|
sku.StockNum = stock
|
||||||
sku.StockNum = 0
|
|
||||||
sku.SkuType = 1
|
sku.SkuType = 1
|
||||||
sku.StockNumMap = map[string]int64{storeId: int64(stock)}
|
sku.StockNumMap = map[string]int64{storeId: int64(stock)}
|
||||||
skuSize = append(skuSize, sku)
|
skuSize = append(skuSize, sku)
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package controllers
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
|
||||||
"github.com/panjf2000/ants"
|
"github.com/panjf2000/ants"
|
||||||
"io"
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -39,7 +38,6 @@ func (c *SyncController) SyncStoresSkus() {
|
|||||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.VendorIDs, &vendorIDs); err != nil {
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.VendorIDs, &vendorIDs); err != nil {
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("============1")
|
|
||||||
retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, nil, 0, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError)
|
retVal, err = cms.CurVendorSync.SyncStoresSkus(params.Ctx, nil, 0, db, vendorIDs, storeIDs, skuIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -171,7 +171,6 @@ func (c *LogisticsController) LogisticsQuery() {
|
|||||||
Timestamp: utils.Time2Str(time.Now()),
|
Timestamp: utils.Time2Str(time.Now()),
|
||||||
TrackNo: param.TrackNo,
|
TrackNo: param.TrackNo,
|
||||||
Traces: []TracesList{{
|
Traces: []TracesList{{
|
||||||
Opcode: "ORDER_RECEIVED",
|
|
||||||
Timestamp: utils.Time2Str(time.Now()),
|
Timestamp: utils.Time2Str(time.Now()),
|
||||||
Content: "抖音定时保底更新",
|
Content: "抖音定时保底更新",
|
||||||
ThirdPartyCompany: tiktok_api.TiktokExpressCode,
|
ThirdPartyCompany: tiktok_api.TiktokExpressCode,
|
||||||
@@ -184,6 +183,28 @@ func (c *LogisticsController) LogisticsQuery() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch data[0].Status {
|
||||||
|
case 5: // 呼叫骑手
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsStatusCALLRIDER
|
||||||
|
case 10, 12: // 骑手接单
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsORDERRECEIVED
|
||||||
|
case 15: // 到店
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsRIDERARRIVED
|
||||||
|
case 20: //配送中
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsRIDERPICKUP
|
||||||
|
case 105, 120: // 完成
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsDELIVERED
|
||||||
|
case 8, 115: // 取消
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsCANCELDELIVERY
|
||||||
|
returnParam.Data.Traces[0].CancelCode = "3000" // 骑手原因取消
|
||||||
|
returnParam.Data.Traces[0].CancelDesc = "繁忙" // 骑手原因取消
|
||||||
|
case 22: //配送异常
|
||||||
|
returnParam.Data.Traces[0].Opcode = tiktok_api.TiktokLogisticsINDDELIVERYEXCEPTION
|
||||||
|
returnParam.Data.Traces[0].ExceptionCode = "5001" // 服务商系统异常
|
||||||
|
returnParam.Data.Traces[0].ExceptionDesc = "服务商系统异常" // 服务商系统异常
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
c.Data["json"] = returnParam
|
c.Data["json"] = returnParam
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user